]> OCCT Git - occt.git/commitdiff
0033450: Modeling algorithm - HLR algorightm stucks
authorakaftasev <akaftasev@opencascade.com>
Thu, 31 Aug 2023 11:42:05 +0000 (12:42 +0100)
committervglukhik <vglukhik@opencascade.com>
Tue, 5 Sep 2023 22:52:02 +0000 (23:52 +0100)
Selecting the middle point between XInf and XSup leads situation, where X values almost does not change.
To prevent this situation, select shifted point instead of middle.

src/Contap/Contap_Contour.cxx
tests/hlr/exact_hlr/bug33450 [new file with mode: 0644]

index 90a00e7779611c390578c4fe93018f0a705d6ca5..16d2d586256abbf0698d1bea0ef387f1428de80d 100644 (file)
@@ -1236,8 +1236,11 @@ void ComputeInternalPoints
         // std::cout << "Changement de signe detecte" << std::endl;
         solution = Standard_False;
         while (!solution) {
-          X(1) = (XInf(1) + XSup(1)) /2.;
-          X(2) = (XInf(2) + XSup(2)) /2.;
+          // Selecting the middle point between XInf and XSup leads situation, where X values almost do not change.
+          // To prevent this situation, select shifted point instead of middle.
+          const Standard_Real aCoef = 2. / 3.;
+          X(1) = XInf(1) + aCoef * (XSup(1) - XInf(1));
+          X(2) = XInf(2) + aCoef * (XSup(2) - XInf(2));
           rsnld.Perform(SFunc,X,infb,supb);
 
           if (!rsnld.IsDone()) {
diff --git a/tests/hlr/exact_hlr/bug33450 b/tests/hlr/exact_hlr/bug33450
new file mode 100644 (file)
index 0000000..efe6ca5
--- /dev/null
@@ -0,0 +1,5 @@
+set viewname "vfront"
+set length 63.8689
+
+restore [locate_data_file bug33450.brep] a
+COMPUTE_HLR $viewname $algotype