]> OCCT Git - occt.git/commitdiff
0029144: Modeling Algorithms - BOP PaveFiller hangs in some case CR29144_5
authorakaftasev <akaftasev@opencascade.com>
Wed, 9 Nov 2022 12:00:30 +0000 (15:00 +0300)
committerakaftasev <akaftasev@opencascade.com>
Wed, 9 Nov 2022 14:10:47 +0000 (17:10 +0300)
Changed decreasing aDeltaRestrictor to division by 2 instead of value assignment to aDelta if point does not found.
Changed wrong comparison of two Standard_Real values.

src/IntTools/IntTools_BeanFaceIntersector.cxx
tests/perf/modalg/bug29144 [new file with mode: 0644]

index b5095096ebafa3376ecaca96335f482f61a6b84f..7cba64dc5865cd22042d5f9ab96820f1e402762d 100644 (file)
@@ -1154,7 +1154,6 @@ void IntTools_BeanFaceIntersector::ComputeRangeFromStartPoint(const Standard_Boo
 
   Standard_Boolean isboundaryindex = Standard_False;
   Standard_Boolean isvalidindex = Standard_True;
-  
   while((aDelta >= aMinDelta) && (loopcounter <= 10)) {
     Standard_Boolean pointfound = Standard_False;
 
@@ -1166,7 +1165,7 @@ void IntTools_BeanFaceIntersector::ComputeRangeFromStartPoint(const Standard_Boo
     if(anExtrema.IsDone()) {
       if(anExtrema.SquareDistance() < myCriteria * myCriteria) {
         Extrema_POnSurf aPOnSurf = anExtrema.Point();
-       aPOnSurf.Parameter(U, V);
+        aPOnSurf.Parameter(U, V);
         pointfound = Standard_True;
       }
     }
@@ -1182,13 +1181,11 @@ void IntTools_BeanFaceIntersector::ComputeRangeFromStartPoint(const Standard_Boo
         break;
     }
     else {
-      aDeltaRestrictor = aDelta;
+      aDeltaRestrictor *= 0.5;
     }
     
-    // if point found decide to increase aDelta using derivative of distance function
-    //
-    
-    aDelta = (pointfound) ? (aDelta * 2.) : (aDelta * 0.5);
+    // Increase step if point was found, decrease otherwise
+    aDelta *= (pointfound ? 2. : 0.5);
     aDelta = (aDelta < aDeltaRestrictor) ? aDelta : aDeltaRestrictor;
 
     aCurPar = (ToIncreaseParameter) ? (aPrevPar + aDelta) : (aPrevPar - aDelta);
@@ -1197,7 +1194,7 @@ void IntTools_BeanFaceIntersector::ComputeRangeFromStartPoint(const Standard_Boo
     // prevent infinite loop when (aPrevPar +/- aDelta) == aPrevPar == 0.
     //
     
-    if( aCurPar == aPrevPar )
+    if (Abs (aCurPar - aPrevPar) < myCurveResolution) 
       break;
     
     BoundaryCondition  = (ToIncreaseParameter) ? (aCurPar > aCurrentRange.Last()) : (aCurPar < aCurrentRange.First());
diff --git a/tests/perf/modalg/bug29144 b/tests/perf/modalg/bug29144
new file mode 100644 (file)
index 0000000..72dc0f7
--- /dev/null
@@ -0,0 +1,27 @@
+puts "========"
+puts "0029144: Modeling Algorithms - BOP PaveFiller hangs in some case"
+puts "========"
+puts ""
+
+puts "TODO OCC29145 ALL : Faulty shapes in variables faulty_1 to faulty_"
+
+bclearobjects;
+bcleartools;
+
+restore [locate_data_file bug29093_hung3.brep] a
+explode a So
+baddobjects a_7
+baddtools a_11
+
+dchrono cr restart
+
+bfillds
+bbuild result
+
+dchrono cr stop counter bbuild
+
+checkshape result
+checkprops result -s 1313890 -v 46778600
+checknbshapes result -vertex 9 -edge 20 -wire 12 -face 12 -shell 3 -solid 3 
+
+checkview -display result -2d -path ${imagedir}/${test_image}.png