0028009: [Regression vs OCCT7.0.0] Cut produces not valid shape
authornbv <nbv@opencascade.com>
Wed, 2 Nov 2016 12:39:37 +0000 (15:39 +0300)
committerapn <apn@opencascade.com>
Thu, 3 Nov 2016 11:15:43 +0000 (14:15 +0300)
The algorithm in WorkWithBoundaries::BoundaryEstimation(...) did not take into account opposite directions of cylindrical axes (when the angle between them is obtuse). After the fix it does it.

Small correction of test cases for issue CR28009

src/IntPatch/IntPatch_ImpImpIntersection_4.gxx
tests/bugs/modalg_6/bug28009_1 [new file with mode: 0644]
tests/bugs/modalg_6/bug28009_2 [new file with mode: 0644]

index 2e1caa9..b2582bd 100644 (file)
@@ -2452,8 +2452,9 @@ void WorkWithBoundaries::BoundaryEstimation(const gp_Cylinder& theCy1,
   //projections of two opposite parallelogram vertices
   //(joined by the maximal diagonal) to the cylinder axis.
   const Standard_Real aSinA = sqrt(aSqSinA);
-  const Standard_Real aHDV1 = (aR1 * aCosA + aR2)/aSinA,
-                      aHDV2 = (aR2 * aCosA + aR1)/aSinA;
+  const Standard_Real anAbsCosA = Abs(aCosA);
+  const Standard_Real aHDV1 = (aR1 * anAbsCosA + aR2) / aSinA,
+                      aHDV2 = (aR2 * anAbsCosA + aR1) / aSinA;
 
 #ifdef INTPATCH_IMPIMPINTERSECTION_DEBUG
   //The code in this block is created for test only.It is stupidly to create
diff --git a/tests/bugs/modalg_6/bug28009_1 b/tests/bugs/modalg_6/bug28009_1
new file mode 100644 (file)
index 0000000..a71eb2c
--- /dev/null
@@ -0,0 +1,27 @@
+puts "================"
+puts "OCC28009"
+puts "================"
+puts ""
+#######################################################################
+# [Regression vs OCCT7.0.0] Cut produces not valid shape
+#######################################################################
+
+restore [locate_data_file bug28009_shape.brep] a
+
+explode a
+bcut result a_1 a_2
+
+# Check result validity.
+checkshape result
+
+# Check number of topological entities in the result.
+checknbshapes result -solid 1 -shell 1 -face 12 -wire 12 -edge 28 -vertex 17
+
+# Check result area.
+checkprops result -s 4347.99
+
+smallview
+don result
+fit
+
+checkview -screenshot -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/bugs/modalg_6/bug28009_2 b/tests/bugs/modalg_6/bug28009_2
new file mode 100644 (file)
index 0000000..f5b6817
--- /dev/null
@@ -0,0 +1,31 @@
+puts "================"
+puts "OCC28009"
+puts "================"
+puts ""
+#######################################################################
+# [Regression vs OCCT7.0.0] Cut produces not valid shape
+#######################################################################
+
+set NbCurvGood 1
+set ExpToler 9.0002189481237598e-008
+
+restore [locate_data_file bug28009_shape.brep] a
+
+explode a
+
+explode a_1 f
+explode a_2 f
+
+regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} [bopcurves a_1_6 a_2_1 -2d] full Toler NbCurv
+if {${NbCurv} != 1} {
+  puts "Error: Number of curves is bad!"
+}
+
+checkreal TolReached $Toler $ExpToler 0.0 0.1
+
+smallview
+don c_*
+fit
+display a_1_6 a_2_1
+
+checkview -screenshot -2d -path ${imagedir}/${test_image}.png