1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-29 14:00:49 +03:00

0025820: No Intersection Curves between surface of revolution and planes

Thin shapes processing has been improved.

Test-cases for issue #25820

Comment has been changed
This commit is contained in:
nbv
2015-06-18 13:30:34 +03:00
committed by abv
parent fec4763816
commit 17e64c3080
5 changed files with 143 additions and 2 deletions

View File

@@ -120,7 +120,9 @@ static void RecadreMemePeriode(IntSurf_PntOn2S& POn2S,const IntSurf_PntOn2S& Ref
}
static Standard_Boolean CompareVertexAndPoint(const gp_Pnt& V, const gp_Pnt& P, const Standard_Real& Tol) {
return (V.Distance(P) <= Tol);
const Standard_Real aSQDist = V.SquareDistance(P);
const Standard_Real aSQTol = Tol*Tol;
return (aSQDist <= aSQTol);
}
void IntPatch_WLine::SetPeriod(const Standard_Real pu1,

View File

@@ -107,8 +107,18 @@ IntWalk_StatusDeflection IntWalk_IWalking::TestDeflection
}
}
if (Abs(Du) < tolerance(1) && Abs(Dv) < tolerance(2))
const Standard_Real aMinTolU = 0.1*Abs(Step*previousd2d.X()),
aMinTolV = 0.1*Abs(Step*previousd2d.Y());
if ((Abs(Du) < Min(tolerance(1), aMinTolU)) && (Abs(Dv) < Min(tolerance(2), aMinTolV)))
{
//Thin shapes (for which Ulast-Ufirst or/and Vlast-Vfirst is quite small)
//exists (see bug #25820). In this case, step is quite small too.
//Nevertheless, it not always means that we mark time. Therefore, Du and Dv
//must consider step (aMinTolU and aMinTolV parameters).
return IntWalk_ArretSurPointPrecedent; //confused point 2d
}
Standard_Real Cosi = StepSign * (Du * previousd2d.X() + Dv * previousd2d.Y());