0031404: Modeling Algorithms - BOP Fuse produces a self-interfering or a good shape...
authorifv <ifv@opencascade.com>
Tue, 17 Mar 2020 08:45:30 +0000 (11:45 +0300)
committerbugmaster <bugmaster@opencascade.com>
Thu, 19 Mar 2020 16:00:58 +0000 (19:00 +0300)
Approx_ComputeCLine.gxx : number of possible cuttings is increased

tests/bugs/modalg_7/bug31404 : test case added

src/Approx/Approx_ComputeCLine.gxx
tests/bugs/modalg_7/bug31404 [new file with mode: 0644]

index c9e7ed8..51eab1d 100644 (file)
@@ -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 (file)
index 0000000..936f2fb
--- /dev/null
@@ -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
+