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

0030590: Wrong result of Boolean Cut algorithm

Modification in static method BoundedArc of IntStart_SearchOnBoundaries:
    add exact intersection of canonical curve-surface (when Func is IntPatch_ArcFunction).
This commit is contained in:
jgv
2019-04-25 19:46:14 +03:00
committed by bugmaster
parent 7783ba1120
commit 9369e98a62
13 changed files with 418 additions and 106 deletions

View File

@@ -428,8 +428,10 @@ void IntAna_Curve::FindParameter(const gp_Pnt& theP,
TColStd_ListOfReal& theParams) const
{
const Standard_Real aPIpPI = M_PI + M_PI,
anEpsAng = 1.e-8,
aSqTolPrecision=1.0e-8;
anEpsAng = 1.e-8,
InternalPrecision = 1.e-8, //precision of internal algorithm of values computation
aSqTolPrecision = Precision::SquareConfusion(); //for boundary points to check their coincidence with others
Standard_Real aTheta = 0.0;
//
switch (typequadric)
@@ -494,7 +496,15 @@ void IntAna_Curve::FindParameter(const gp_Pnt& theP,
InternalUVValue(aParams[i], U, V, A, B, C,
cost, sint, SigneSqrtDis);
const gp_Pnt aP(InternalValue(U, V));
if (aP.SquareDistance(theP) < aSqTolPrecision)
Standard_Real aSqTol;
if (aParams[i] == aTheta ||
(TwoCurves && aParams[i] == DomainSup + DomainSup - aTheta))
aSqTol = InternalPrecision;
else
aSqTol = aSqTolPrecision;
if (aP.SquareDistance(theP) < aSqTol)
{
theParams.Append(aParams[i]);
}