0024844: Wrong result of Boolean Cut operation.
authoremv <emv@opencascade.com>
Thu, 17 Apr 2014 15:03:12 +0000 (19:03 +0400)
committerabv <abv@opencascade.com>
Mon, 21 Apr 2014 15:58:52 +0000 (19:58 +0400)
Small correction in intersection between Cone and Torus with collinear axes.

Test case for issue CR24844

src/IntAna/IntAna_QuadQuadGeo.cxx
tests/bugs/modalg_5/bug24844 [new file with mode: 0644]

index 5567a94..f1858ac 100644 (file)
@@ -2083,7 +2083,7 @@ void IntAna_QuadQuadGeo::Perform(const gp_Cone& Con,
     return;
   }
   //
-  Standard_Real anAngle, aDist, aParam[4];
+  Standard_Real anAngle, aDist, aParam[4], aDt;
   Standard_Integer i;
   gp_Pnt aTorLoc, aPCT, aPN, aPt[4];
   gp_Dir aDir[4];
@@ -2114,16 +2114,16 @@ void IntAna_QuadQuadGeo::Perform(const gp_Cone& Con,
     typeres = IntAna_Circle;
     //
     gp_XYZ aPh = aPCT.XYZ() - aDist*aConL.Normal(aPCT).Direction().XYZ();
-    aDist = Sqrt(Abs(aRMin*aRMin - aDist*aDist));
+    aDt = Sqrt(Abs(aRMin*aRMin - aDist*aDist));
     //
     gp_Pnt aP;
-    gp_XYZ aDVal = aDist*aDL.XYZ();
+    gp_XYZ aDVal = aDt*aDL.XYZ();
     aP.SetXYZ(aPh + aDVal);
     aParam[nbint] = aLin.Distance(aP);
     aPt[nbint].SetXYZ(aP.XYZ() - aParam[nbint]*aXDir.XYZ());
     aDir[nbint] = aTorAx.Direction();
     ++nbint;
-    if ((aDist < aRMin) && (aDVal.Modulus() > Tol)) {
+    if ((aDist < aRMin) && (aDt > Tol)) {
       aP.SetXYZ(aPh - aDVal);
       aParam[nbint] = aLin.Distance(aP);
       aPt[nbint].SetXYZ(aP.XYZ() - aParam[nbint]*aXDir.XYZ());
diff --git a/tests/bugs/modalg_5/bug24844 b/tests/bugs/modalg_5/bug24844
new file mode 100644 (file)
index 0000000..e86cd8d
--- /dev/null
@@ -0,0 +1,26 @@
+puts "============"
+puts "OCC24844"
+puts "============"
+puts ""
+######################################################
+# Wrong result of Boolean Cut operation
+######################################################
+
+restore [locate_data_file bug24844_Comp.brep] c
+explode c
+
+bcut result c_1 c_2
+
+set square 9.82018
+
+set nb_v_good 5
+set nb_e_good 11
+set nb_w_good 6
+set nb_f_good 6
+set nb_sh_good 1
+set nb_sol_good 1
+set nb_compsol_good 0
+set nb_compound_good 1
+set nb_shape_good 31
+
+set 2dviewer 1