mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-14 13:30:48 +03:00
0025701: Problem with the symmetry of fillet on two perpendicular cylinders
Test case for issue CR25701
This commit is contained in:
@@ -3954,6 +3954,16 @@ Standard_EXPORT
|
||||
const BRepAdaptor_Curve& edc = Spine->CurrentElementarySpine(IF);
|
||||
tolpared = edc.Resolution(tol);
|
||||
Cv = BRep_Tool::Curve(E, First, Last);
|
||||
//Add vertex with tangent
|
||||
if (ES.IsPeriodic())
|
||||
{
|
||||
Standard_Real ParForElSpine = (E.Orientation() == TopAbs_FORWARD)? First : Last;
|
||||
gp_Pnt PntForElSpine;
|
||||
gp_Vec DirForElSpine;
|
||||
Cv->D1(ParForElSpine, PntForElSpine, DirForElSpine);
|
||||
ES.AddVertexWithTangent(gp_Ax1(PntForElSpine, DirForElSpine));
|
||||
}
|
||||
/////////////////////////
|
||||
urefdeb = Spine->FirstParameter(IF);
|
||||
checkdeb = (nwf > urefdeb);
|
||||
if(checkdeb) {
|
||||
@@ -4080,6 +4090,13 @@ Standard_EXPORT
|
||||
}
|
||||
//
|
||||
Cv = BRep_Tool::Curve(E, First, Last);
|
||||
//Add vertex with tangent
|
||||
Standard_Real ParForElSpine = (E.Orientation() == TopAbs_FORWARD)? First : Last;
|
||||
gp_Pnt PntForElSpine;
|
||||
gp_Vec DirForElSpine;
|
||||
Cv->D1(ParForElSpine, PntForElSpine, DirForElSpine);
|
||||
ES.AddVertexWithTangent(gp_Ax1(PntForElSpine, DirForElSpine));
|
||||
/////////////////////////
|
||||
if(IEdge == IL) {
|
||||
Standard_Real ureffin = Spine->LastParameter(iloc);
|
||||
Standard_Boolean checkfin = (nwl < ureffin);
|
||||
|
@@ -684,6 +684,24 @@ Standard_Boolean ChFi3d_Builder::StoreData(Handle(ChFiDS_SurfData)& Data,
|
||||
if (length2 > Precision::Confusion())
|
||||
GeomLib::ExtendSurfByLength(Surf,length2,1,Standard_False,Standard_True);
|
||||
|
||||
//Correction of surface on extremities
|
||||
if (length1 <= Precision::Confusion())
|
||||
{
|
||||
gp_Pnt P11, P21;
|
||||
P11 = lin->StartPointOnFirst().Value();
|
||||
P21 = lin->StartPointOnSecond().Value();
|
||||
Surf->SetPole(1, 1, P11);
|
||||
Surf->SetPole(Surf->NbUPoles(), 1, P21);
|
||||
}
|
||||
if (length2 <= Precision::Confusion())
|
||||
{
|
||||
gp_Pnt P12, P22;
|
||||
P12 = lin->EndPointOnFirst().Value();
|
||||
P22 = lin->EndPointOnSecond().Value();
|
||||
Surf->SetPole(1, Surf->NbVPoles(), P12);
|
||||
Surf->SetPole(Surf->NbUPoles(), Surf->NbVPoles(), P22);
|
||||
}
|
||||
|
||||
Data->ChangeSurf(DStr.AddSurface(TopOpeBRepDS_Surface(Surf,tolget3d)));
|
||||
|
||||
#ifdef DRAW
|
||||
@@ -1475,7 +1493,7 @@ Standard_Boolean ChFi3d_Builder::ComputeData
|
||||
Standard_Real TolGuide=tolguide, TolEsp = tolesp;
|
||||
Standard_Integer nbptmin = 4;
|
||||
|
||||
BRepBlend_Walking TheWalk(S1,S2,I1,I2);
|
||||
BRepBlend_Walking TheWalk(S1,S2,I1,I2,HGuide);
|
||||
|
||||
//Start of removal, 2D path controls
|
||||
//that qui s'accomodent mal des surfaces a parametrages non homogenes
|
||||
@@ -1573,7 +1591,7 @@ Standard_Boolean ChFi3d_Builder::ComputeData
|
||||
if (5*TolGuide > MS) TolGuide = MS/5;
|
||||
if (5*TolEsp > MS) TolEsp = MS/5;
|
||||
}
|
||||
TheWalk.Perform(Func,FInv,HGuide,NewFirst,Target,MS,TolGuide,
|
||||
TheWalk.Perform(Func,FInv,NewFirst,Target,MS,TolGuide,
|
||||
ParSol,TolEsp,Fleche,Appro);
|
||||
if (!TheWalk.IsDone()) {
|
||||
#ifdef OCCT_DEBUG
|
||||
@@ -2068,7 +2086,7 @@ Standard_Boolean ChFi3d_Builder::SimulData
|
||||
const Standard_Boolean RecOnS1,
|
||||
const Standard_Boolean RecOnS2)
|
||||
{
|
||||
BRepBlend_Walking TheWalk(S1,S2,I1,I2);
|
||||
BRepBlend_Walking TheWalk(S1,S2,I1,I2,HGuide);
|
||||
TheWalk.Check2d(Standard_False);
|
||||
|
||||
Standard_Real MS = MaxStep;
|
||||
@@ -2113,7 +2131,7 @@ Standard_Boolean ChFi3d_Builder::SimulData
|
||||
if (5*TolEsp > MS) TolEsp = MS/5;
|
||||
}
|
||||
|
||||
TheWalk.Perform(Func,FInv,HGuide,NewFirst,Target,MS,TolGuide,
|
||||
TheWalk.Perform(Func,FInv,NewFirst,Target,MS,TolGuide,
|
||||
ParSol,TolEsp,Fleche,Appro);
|
||||
|
||||
if (!TheWalk.IsDone()) {
|
||||
|
@@ -1289,7 +1289,7 @@ Standard_Boolean ChFi3d_ChBuilder::PerformFirstSection
|
||||
|
||||
BRepBlend_Chamfer Func(S1,S2,HGuide);
|
||||
Func.Set(dis,dis,Choix);
|
||||
BRepBlend_Walking TheWalk(S1,S2,I1,I2);
|
||||
BRepBlend_Walking TheWalk(S1,S2,I1,I2,HGuide);
|
||||
|
||||
//calculate an approximate starting solution
|
||||
gp_Vec TgF, TgL, tmp1, tmp2, d1gui;
|
||||
@@ -1346,7 +1346,7 @@ Standard_Boolean ChFi3d_ChBuilder::PerformFirstSection
|
||||
|
||||
BRepBlend_Chamfer Func(S1,S2,HGuide);
|
||||
Func.Set(dis1,dis2,Choix);
|
||||
BRepBlend_Walking TheWalk(S1,S2,I1,I2);
|
||||
BRepBlend_Walking TheWalk(S1,S2,I1,I2,HGuide);
|
||||
|
||||
//calculate an approximate starting solution
|
||||
gp_Vec TgF, TgL, tmp1, tmp2, d1gui;
|
||||
@@ -1407,7 +1407,7 @@ Standard_Boolean ChFi3d_ChBuilder::PerformFirstSection
|
||||
if (disonF1) {
|
||||
BRepBlend_ChAsym Func(S1,S2,HGuide);
|
||||
Func.Set(dis1, angle, Ch);
|
||||
BRepBlend_Walking TheWalk(S1,S2,I1,I2);
|
||||
BRepBlend_Walking TheWalk(S1,S2,I1,I2,HGuide);
|
||||
|
||||
//calculate an approximate starting solution
|
||||
gp_Vec TgF, TgL, tmp1, tmp2, d1gui;
|
||||
@@ -1469,7 +1469,7 @@ Standard_Boolean ChFi3d_ChBuilder::PerformFirstSection
|
||||
Standard_Real Rtemp;
|
||||
BRepBlend_ChAsym Func(S2,S1,HGuide);
|
||||
Func.Set(dis1, angle, Ch);
|
||||
BRepBlend_Walking TheWalk(S2,S1,I2,I1);
|
||||
BRepBlend_Walking TheWalk(S2,S1,I2,I1,HGuide);
|
||||
|
||||
//calculate an approximate starting solution
|
||||
gp_Vec TgF, TgL, tmp1, tmp2, d1gui;
|
||||
|
@@ -1198,7 +1198,7 @@ Standard_Boolean ChFi3d_FilBuilder::PerformFirstSection
|
||||
BRepBlend_ConstRad Func(S1,S2,HGuide);
|
||||
Func.Set(fsp->Radius(),Choix);
|
||||
Func.Set(myShape);
|
||||
BRepBlend_Walking TheWalk(S1,S2,I1,I2);
|
||||
BRepBlend_Walking TheWalk(S1,S2,I1,I2,HGuide);
|
||||
return TheWalk.PerformFirstSection(Func,Par,SolDep,
|
||||
tolesp,TolGuide,Pos1,Pos2);
|
||||
}
|
||||
@@ -1206,7 +1206,7 @@ Standard_Boolean ChFi3d_FilBuilder::PerformFirstSection
|
||||
BRepBlend_EvolRad Func(S1,S2,HGuide,fsp->Law(HGuide));
|
||||
Func.Set(Choix);
|
||||
Func.Set(myShape);
|
||||
BRepBlend_Walking TheWalk(S1,S2,I1,I2);
|
||||
BRepBlend_Walking TheWalk(S1,S2,I1,I2,HGuide);
|
||||
return TheWalk.PerformFirstSection(Func,Par,SolDep,
|
||||
tolesp,TolGuide,Pos1,Pos2);
|
||||
}
|
||||
|
Reference in New Issue
Block a user