0027998: Self-intersection is not detected

New method CheckFaceSelfIntersection has been added to BOPAlgo_CheckerSI: now self-intersection of each face is found as well as pairs of intersecting faces;

-method IntPatch_Intersection::Perform(S1,D1,TolArc,TolTang) is modified for more effective search of self-interasections in case of Surface Of Extrusion;

-method IntCurve_IntPolyPolyGen::Perform(C1,D1,TolConf,Tol,NbIter) is modified to detect segments of intersections.

Small correction.

Test cases are corrected.

Correction of compiler error

Fix of regressions

Names of shapes correction
This commit is contained in:
jgv
2017-02-17 18:23:18 +03:00
committed by bugmaster
parent 15b2583e69
commit f48cb55d33
17 changed files with 551 additions and 81 deletions

View File

@@ -180,13 +180,22 @@ void Geom2dAPI_InterCurveCurve::Segment
Standard_OutOfRange_Raise_if(theIndex < 1 || theIndex > NbSegments(),
"Geom2dAPI_InterCurveCurve::Segment");
Standard_NullObject_Raise_if(myCurve1.IsNull() || myCurve2.IsNull(),
Standard_NullObject_Raise_if(myCurve1.IsNull(),
"Geom2dAPI_InterCurveCurve::Segment");
Standard_Real aU1 = myCurve1->FirstParameter(),
aU2 = myCurve1->LastParameter(),
aV1 = myCurve2->FirstParameter(),
aV2 = myCurve2->LastParameter();
Standard_Real aU1, aU2, aV1, aV2;
aU1 = myCurve1->FirstParameter();
aU2 = myCurve1->LastParameter();
if (myCurve2.IsNull())
{
aV1 = aU1;
aV2 = aU2;
}
else
{
aV1 = myCurve2->FirstParameter();
aV2 = myCurve2->LastParameter();
}
const IntRes2d_IntersectionSegment& aSeg = myIntersector.Segment(theIndex);
const Standard_Boolean isOpposite = aSeg.IsOpposite();
@@ -214,5 +223,8 @@ void Geom2dAPI_InterCurveCurve::Segment
}
theCurve1 = new Geom2d_TrimmedCurve(myCurve1, aU1, aU2);
theCurve2 = new Geom2d_TrimmedCurve(myCurve2, aV1, aV2);
if (myCurve2.IsNull())
theCurve2 = new Geom2d_TrimmedCurve(myCurve1, aV1, aV2);
else
theCurve2 = new Geom2d_TrimmedCurve(myCurve2, aV1, aV2);
}