0028886: infinite loop at intersecting two faces / surfaces
authornbv <nbv@opencascade.com>
Mon, 11 Dec 2017 14:04:01 +0000 (17:04 +0300)
committernbv <nbv@opencascade.com>
Tue, 6 Feb 2018 07:50:13 +0000 (10:50 +0300)
The reason of constantly increasing/decreasing steps has been eliminated for the problem case.

src/IntWalk/IntWalk_PWalking.cxx
tests/perf/modalg/bug28886 [new file with mode: 0644]

index 141e905..987bf63 100644 (file)
@@ -836,7 +836,7 @@ void IntWalk_PWalking::Perform(const TColStd_Array1OfReal& ParDep,
     SvParam[3]=Param(4);
     //
     Standard_Integer aTryNumber = 0;
-    Standard_Real    isBadPoint = Standard_False;
+    Standard_Boolean isBadPoint = Standard_False;
     IntImp_ConstIsoparametric aBestIso = ChoixIso;
     do
     {
@@ -1280,6 +1280,15 @@ void IntWalk_PWalking::Perform(const TColStd_Array1OfReal& ParDep,
                   pasSav[1] = pasuv[1];
                   pasSav[2] = pasuv[2];
                   pasSav[3] = pasuv[3];
+                  
+                  if ((aPrevStatus == IntWalk_PasTropGrand) &&
+                      (LevelOfIterWithoutAppend > 0))
+                  {
+                    pasInit[0] = pasuv[0];
+                    pasInit[1] = pasuv[1];
+                    pasInit[2] = pasuv[2];
+                    pasInit[3] = pasuv[3];
+                  }
                 }
               }
             }//005 if(!Arrive)
diff --git a/tests/perf/modalg/bug28886 b/tests/perf/modalg/bug28886
new file mode 100644 (file)
index 0000000..0c1de2d
--- /dev/null
@@ -0,0 +1,35 @@
+puts "============"
+puts "OCC28886"
+puts "============"
+puts ""
+###############################
+##  infinite loop at intersecting two faces / surfaces
+###############################
+
+cpulimit 60
+
+restore [locate_data_file bug28886_Faces.brep] ff
+explode ff f
+mksurface ss1 ff_1
+mksurface ss2 ff_2
+
+smallview
+clear
+
+dchrono h2 restart
+set CurveNumb [intersect result ss1 ss2]
+dchrono h2 stop counter bug28886CNB
+
+if { [llength ${CurveNumb}] < 1 } {
+    puts "Error : Bad intersection"
+} else {
+    puts "OK : Good intersection"
+}
+
+fit
+disp ss1 ss2
+nbiso ss1 ss2 4 4
+clpoles ss1
+clpoles ss2
+
+checkview -screenshot -2d -path ${imagedir}/${test_image}.png
\ No newline at end of file