mirror of
https://github.com/Open-Cascade-SAS/OCCT.git
synced 2026-07-29 08:59:07 +08:00
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:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user