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

0026098: The result of General Fuse operation is self-interfered shape

class BOPTools_AlgoTools
method static Standard_Real IntersectCurves2d(const gp_Pnt& aPV,
                                const TopoDS_Face& aF,
                                const Handle(Geom_Surface)& aS,
                                const TopoDS_Edge& aE1,
                                const TopoDS_Edge& aE2)
Check the validity of the 2d intersection before applying the result.

Test case for issue CR26098
This commit is contained in:
emv
2015-04-23 16:59:22 +03:00
committed by bugmaster
parent 75d1222c2f
commit 681cfe76b0
2 changed files with 56 additions and 2 deletions

View File

@@ -610,7 +610,7 @@ Standard_Real IntersectCurves2d(const gp_Pnt& aPV,
const TopoDS_Edge& aE1,
const TopoDS_Edge& aE2)
{
Standard_Real aDist, aD, aT11, aT12, aT21, aT22, aTol2d;
Standard_Real aDist, aD, aT11, aT12, aT21, aT22, aTol2d, aT1, aT2;
Standard_Integer j, aNbPnt;
Geom2dInt_GInter aInter;
gp_Pnt aP;
@@ -639,7 +639,17 @@ Standard_Real IntersectCurves2d(const gp_Pnt& aPV,
if (aNbPnt) {
aDist = -Precision::Infinite();
for (j = 1; j <= aNbPnt; ++j) {
aP2D = aInter.Point(j).Value();
const IntRes2d_IntersectionPoint& aPoint = aInter.Point(j);
//
aT1 = aPoint.ParamOnFirst();
aT2 = aPoint.ParamOnSecond();
//
if ((aT1 < aT11 || aT1 > aT12) ||
(aT2 < aT21 || aT2 > aT22)) {
continue;
}
//
aP2D = aPoint.Value();
aS->D0(aP2D.X(), aP2D.Y(), aP);
aD=aPV.SquareDistance(aP);
if (aD > aDist) {