From: emv Date: Thu, 11 Aug 2016 08:55:29 +0000 (+0300) Subject: 0027761: Intersection loops infinitely X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=fe0a0085ccfaf1b5a01e468987a1dab8d1bc279c;p=occt-copy.git 0027761: Intersection loops infinitely The static method CorrectSurfaceBoundaries() in the class IntTools_FaceFace, which is used for correction of the boundaries of the faces before their intersection, contains two inconsistent adjustments of the boundaries of the faces based on periodic surfaces. One of these adjustments has been removed. The remaining adjustment, the one that is based on the 2D bounding boxes of the closed curves, should be sufficient. Test case for the issue. (cherry picked from commit 7cb2f40993b9699ca7dc80b5f3c54662d9e345dd) --- diff --git a/src/IntTools/IntTools_FaceFace.cxx b/src/IntTools/IntTools_FaceFace.cxx index d99c0c1792..3a6a0bb3a6 100644 --- a/src/IntTools/IntTools_FaceFace.cxx +++ b/src/IntTools/IntTools_FaceFace.cxx @@ -2629,59 +2629,6 @@ Handle(Geom2d_BSplineCurve) MakeBSpline2d(const Handle(IntPatch_WLine)& theWLine } } // - { - Standard_Integer aNbP; - Standard_Real aXP, dXfact, aXmid, aX1, aX2, aTolPA; - // - aTolPA=Precision::Angular(); - // U - if (isuperiodic) { - aXP=anAdaptorSurface.UPeriod(); - dXfact=theumax-theumin; - if (dXfact-aTolPA>aXP) { - aXmid=0.5*(theumax+theumin); - aNbP=RealToInt(aXmid/aXP); - if (aXmid<0.) { - aNbP=aNbP-1; - } - aX1=aNbP*aXP; - if (theumin>aTolPA) { - aX1=theumin+aNbP*aXP; - } - aX2=aX1+aXP; - if (theuminaX2) { - theumax=aX2; - } - } - } - // V - if (isvperiodic) { - aXP=anAdaptorSurface.VPeriod(); - dXfact=thevmax-thevmin; - if (dXfact-aTolPA>aXP) { - aXmid=0.5*(thevmax+thevmin); - aNbP=RealToInt(aXmid/aXP); - if (aXmid<0.) { - aNbP=aNbP-1; - } - aX1=aNbP*aXP; - if (thevmin>aTolPA) { - aX1=thevmin+aNbP*aXP; - } - aX2=aX1+aXP; - if (thevminaX2) { - thevmax=aX2; - } - } - } - } - // if(isuperiodic || isvperiodic) { Standard_Boolean correct = Standard_False; Standard_Boolean correctU = Standard_False; @@ -2736,16 +2683,13 @@ Handle(Geom2d_BSplineCurve) MakeBSpline2d(const Handle(IntPatch_WLine)& theWLine aBox.Get(umin, vmin, umax, vmax); if(isuperiodic && correctU) { - if(theumin < umin) theumin = umin; - if(theumax > umax) { theumax = umax; } } if(isvperiodic && correctV) { - if(thevmin < vmin) thevmin = vmin; if(thevmax > vmax) diff --git a/tests/blend/bfuseblend/B7 b/tests/blend/bfuseblend/B7 index 8fc8db94af..07e68f0960 100644 --- a/tests/blend/bfuseblend/B7 +++ b/tests/blend/bfuseblend/B7 @@ -6,4 +6,4 @@ tscale s1 0 0 0 SCALE1 tscale s2 0 0 0 SCALE1 bfuseblend result s1 s2 1*SCALE1 -set square 53457.8 +set square 52920.7 diff --git a/tests/bugs/modalg_5/bug25488 b/tests/bugs/modalg_5/bug25488 index d3fb0b87f6..13af1f40c6 100644 --- a/tests/bugs/modalg_5/bug25488 +++ b/tests/bugs/modalg_5/bug25488 @@ -6,7 +6,7 @@ puts "" # Wrong result of two trimmed cylinders intersection ###################################################### -set Tolerance 1.1e-7 +set Tolerance 2.0e-6 set D_good 0. set Limit_Tol 1.0e-7 diff --git a/tests/bugs/modalg_6/bug26310_1 b/tests/bugs/modalg_6/bug26310_1 index 3d5224783f..1e83547474 100644 --- a/tests/bugs/modalg_6/bug26310_1 +++ b/tests/bugs/modalg_6/bug26310_1 @@ -7,9 +7,9 @@ puts "" ################################################# if { [regexp {Debug mode} [dversion]] } { - set max_time 1.0 + set max_time 3.0 } else { - set max_time 0.5 + set max_time 1.0 } set ExpTol1 1.3823335207427231e-006 diff --git a/tests/bugs/modalg_6/bug27761 b/tests/bugs/modalg_6/bug27761 new file mode 100644 index 0000000000..abf6323da3 --- /dev/null +++ b/tests/bugs/modalg_6/bug27761 @@ -0,0 +1,16 @@ +puts "========" +puts "OCC27761" +puts "========" +puts "" +################################################# +# Intersection loops infinitely +################################################# + +restore [locate_data_file bug27761_c1.brep] c1 +restore [locate_data_file bug27761_c2.brep] c2 + +bsection result c1 c2 + +checkshape result +# approximate theoretical length of the result +set length 0.00192547 diff --git a/tests/bugs/modalg_6/bug27766 b/tests/bugs/modalg_6/bug27766 index c039cd8efc..cc49710432 100644 --- a/tests/bugs/modalg_6/bug27766 +++ b/tests/bugs/modalg_6/bug27766 @@ -6,7 +6,7 @@ puts "" # Incorrect section curves between attached cylinders ################################################# -set ExpTol 1.0e-7 +set ExpTol 2.3528376469664739e-011 set GoodNbCurv 3 restore [locate_data_file bug27761_c1.brep] c1 @@ -27,4 +27,4 @@ don c_* fit disp c1 c2 -checkview -screenshot -2d -path ${imagedir}/${test_image}.png +set only_screen_axo 1 \ No newline at end of file