diff --git a/src/Approx/Approx_ComputeCLine.gxx b/src/Approx/Approx_ComputeCLine.gxx index c9e7ed838d..51eab1d9f5 100644 --- a/src/Approx/Approx_ComputeCLine.gxx +++ b/src/Approx/Approx_ComputeCLine.gxx @@ -102,7 +102,7 @@ void Approx_ComputeCLine::Perform(const MultiLine& Line) Standard_Real mylastU = ULast; Standard_Integer aMaxSegments = 0; Standard_Integer aMaxSegments1 = myMaxSegments - 1; - Standard_Integer aNbCut = 0, aNbImp = 0, aNbComp = 5; + Standard_Integer aNbCut = 0, aNbImp = 0, aNbComp = 10; if (!mycut) { @@ -178,10 +178,12 @@ void Approx_ComputeCLine::Perform(const MultiLine& Line) Standard_Boolean aStopCutting = Standard_False; if (aNbCut >= aNbComp) { - if (aNbCut > aNbImp) + if (aNbCut > aNbImp + 1) { aStopCutting = Standard_True; } + aNbCut = 0; + aNbImp = 0; } // is new decision better? if (!Ok && (Abs(myfirstU - mylastU) <= TolU || aMaxSegments >= aMaxSegments1 || aStopCutting )) diff --git a/tests/bugs/modalg_7/bug31404 b/tests/bugs/modalg_7/bug31404 new file mode 100644 index 0000000000..936f2fbbb2 --- /dev/null +++ b/tests/bugs/modalg_7/bug31404 @@ -0,0 +1,46 @@ +puts "=======================================================" +puts "0031404: Modeling Algorithms - BOP Fuse produces a self-interfering or a good shape depending on the order of arguments" +puts "=======================================================" +puts "" + +psphere sph1 25 +plane pln2 32, 68, -27 +psphere sph2 pln2 75 +bfuse f1 sph1 sph2 +savehistory h1 +bfuse f2 sph2 sph1 +savehistory h2 + +explode sph1 f +modified ff1 h1 sph1_1 +modified ff2 h2 sph1_1 + +foreach r {f1 f2} { + checkshape $r + if {![regexp "OK" [bopcheck $r]]} { + puts "Error: the $r is a self-interfering shape" + } + if { [checkmaxtol $r] > 2.e-7 } { + puts "Error: $r has bad tolerance" + } +} + +checknbshapes f1 -wire 3 -face 2 -edge 9 -vertex 6 +checknbshapes f2 -wire 3 -face 2 -edge 9 -vertex 6 + +checkprops f1 -s 74192.6 +checkprops f2 -s 74192.6 + +view 1 -2D- 0 200 500 300 + +pcurve ff1 +pcurve ff2 +2dtranslate ff2_6 pi 0 +donly ff1_6 ff2_6 +2dfit + +checklength ff1_6 -l 7.167 +checklength ff2_6 -l 7.167 + +checkview -screenshot -2d -path ${imagedir}/${test_image}.png +