mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-04 13:13:25 +03:00
0027190: IntPatch_ImpPrmIntersection algorithm does not split intersection curve by the seam-edge of the quadric
1. Processing when IntPatch_WLine/IntPatch_RLine goes through the seam edge has been improved in DecomposeResult(...) function (see IntPatch_ImpPrmIntersection.cxx). 2. Incorrect initialization of last point of IntPatch_WLine/IntPatch_RLine has been eliminated. Earlier it was the reason of exception. Creation of test case for this issue. Adjusting some test cases according to their new behavior. Namely: 1) tests\bugs\modalg_4\bug825 (bug825_2) Details are described in issue #25915. In short, new intersection algorithm works better than old (WLine without "jumping"). However, Boolean operation loses degenerated edges of the sphere. Consequently, we get the result with Not-closed face. 2) tests\bugs\modalg_6\bug26684_2 TolReached of intersection curve has become smaller. Consequently, intersection algorithm works better than earlier.
This commit is contained in:
@@ -648,6 +648,28 @@ void IntTools_FaceFace::Perform(const TopoDS_Face& aF1,
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef INTTOOLS_FACEFACE_DEBUG
|
||||
if(!myListOfPnts.IsEmpty()) {
|
||||
char aBuff[10000];
|
||||
const IntSurf_PntOn2S& aPt = myListOfPnts.First();
|
||||
Standard_Real u1, v1, u2, v2;
|
||||
aPt.Parameters(u1, v1, u2, v2);
|
||||
|
||||
Sprintf(aBuff,"bopcurves <face1 face2> -2d");
|
||||
IntSurf_ListIteratorOfListOfPntOn2S IterLOP1(myListOfPnts);
|
||||
for(;IterLOP1.More(); IterLOP1.Next())
|
||||
{
|
||||
const IntSurf_PntOn2S& aPt = IterLOP1.Value();
|
||||
Standard_Real u1, v1, u2, v2;
|
||||
aPt.Parameters(u1, v1, u2, v2);
|
||||
|
||||
Sprintf(aBuff, "%s -p %+10.20f %+10.20f %+10.20f %+10.20f", aBuff, u1, v1, u2, v2);
|
||||
}
|
||||
|
||||
cout << aBuff << endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
const Standard_Boolean isGeomInt = isTreatAnalityc(aF1, aF2);
|
||||
myIntersector.Perform(myHS1, dom1, myHS2, dom2, TolArc, TolTang,
|
||||
myListOfPnts, RestrictLine, isGeomInt);
|
||||
@@ -888,28 +910,6 @@ void IntTools_FaceFace::MakeCurve(const Standard_Integer Index,
|
||||
}
|
||||
L = aWLine;
|
||||
|
||||
#ifdef INTTOOLS_FACEFACE_DEBUG
|
||||
if(!myListOfPnts.IsEmpty()) {
|
||||
char aBuff[10000];
|
||||
const IntSurf_PntOn2S& aPt = myListOfPnts.First();
|
||||
Standard_Real u1, v1, u2, v2;
|
||||
aPt.Parameters(u1, v1, u2, v2);
|
||||
|
||||
Sprintf(aBuff,"bopcurves <face1 face2> -2d");
|
||||
IntSurf_ListIteratorOfListOfPntOn2S IterLOP1(myListOfPnts);
|
||||
for(;IterLOP1.More(); IterLOP1.Next())
|
||||
{
|
||||
const IntSurf_PntOn2S& aPt = IterLOP1.Value();
|
||||
Standard_Real u1, v1, u2, v2;
|
||||
aPt.Parameters(u1, v1, u2, v2);
|
||||
|
||||
Sprintf(aBuff, "%s -p %+10.20f %+10.20f %+10.20f %+10.20f", aBuff, u1, v1, u2, v2);
|
||||
}
|
||||
|
||||
cout << aBuff << endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
Standard_Integer nbp = aWLine->NbPnts();
|
||||
const IntSurf_PntOn2S& p1 = aWLine->Point(1);
|
||||
const IntSurf_PntOn2S& p2 = aWLine->Point(nbp);
|
||||
|
Reference in New Issue
Block a user