1
0
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:
jgv
2015-02-19 16:09:37 +03:00
committed by bugmaster
parent bd28b2afac
commit af99433e4e
13 changed files with 441 additions and 84 deletions

View File

@@ -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);

View File

@@ -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()) {

View File

@@ -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;

View File

@@ -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);
}