0024290: BOP Section produces incorrect result.
authoremv <emv@opencascade.com>
Thu, 14 Nov 2013 11:03:06 +0000 (15:03 +0400)
committerbugmaster <bugmaster@opencascade.com>
Thu, 14 Nov 2013 12:42:29 +0000 (16:42 +0400)
Smaller coefficients are used for shrunk range definition for the edge with big tolerance value of its vertices.
Test cases for issue CR24290

src/BOPInt/BOPInt_ShrunkRange.cxx
tests/boolean/bfuse_complex/P8 [changed mode: 0644->0755]
tests/bugs/modalg_5/bug24290_1 [new file with mode: 0755]
tests/bugs/modalg_5/bug24290_2 [new file with mode: 0755]

index 396e45d..7071a4c 100644 (file)
   void BOPInt_ShrunkRange::Perform()
 {
   Standard_Real aCF, aCL, aTolE, aTolV1, aTolV2, t1, t11, t1C, t2, t12, t2C;
-  Standard_Real aCoeff, dt1, dt2, aR, anEps;
+  Standard_Real aCoeff1, aCoeff2, aTol1, aTol2, dt1, dt2, aR, anEps;
   Standard_Integer pri;
   Standard_Boolean bInf1, bInf2, bAppr;
   GeomAbs_CurveType aCurveType;
     return;
   }
   //
-  aCoeff=(aTolE>0.05) ? 1. : 2.;
+  aTol1 = aTolV1+aTolE;
+  aTol2 = aTolV2+aTolE;
+  //
+  aCoeff1 = (aTolE>0.05) ? 1. : 2.;
+  aCoeff2 = aCoeff1;
+  if (aCoeff1 == 2.) {
+    aCoeff1=(aTol1>0.05) ? 1.5 : 2.;
+    aCoeff2=(aTol2>0.05) ? 1.5 : 2.;
+  }
   // xf
-  if (aCurveType==GeomAbs_Line) {
+  if (aCurveType==GeomAbs_Line && (aCoeff1 != 1 || aCoeff2 != 1)) {
     Standard_Real aTV1, aTV2, aEps;
     gp_Pnt aPV1, aPV2, aPC1, aPC2;
     gp_Lin aL;
     aPV2=BRep_Tool::Pnt(myV2);
     aTV2=ElCLib::Parameter(aL, aPV2);
     //
-    if (fabs(aTV1-aCF)<aEps && fabs(aTV2-aCL)<aEps) {
-      aCoeff=1.;
+    if (fabs(aTV1-aCF)<aEps) {
+      aCoeff1=1.;
+    }
+    if (fabs(aTV2-aCL)<aEps) {
+      aCoeff2=1.;
     }
   }
   //
-  dt1=aCoeff*(aTolV1+aTolE);
-  dt2=aCoeff*(aTolV2+aTolE);
+  dt1=aCoeff1*aTol1;
+  dt2=aCoeff2*aTol2;
   // xt
   //
   if (aCurveType==GeomAbs_Line) {
     }
     //
     else {
-      Standard_Real d1 = aCoeff*(aTolV1+aTolE);
+      Standard_Real d1 = aCoeff1*aTol1;
       //       dt1 = aBAC.Resolution(d1);
       //
       gp_Vec aD1vec1;
     }
     //
     else {
-      Standard_Real d2 = aCoeff*(aTolV2+aTolE);
+      Standard_Real d2 = aCoeff2*aTol2;
       //       dt2 = aBAC.Resolution(d2);
 
       //
old mode 100644 (file)
new mode 100755 (executable)
index cafaeb1..e65acbe
@@ -1,8 +1,30 @@
-puts "TODO OCC22911 ALL: Error : The area of the resulting shape is"
+# http://tracker.dev.opencascade.org/view.php?id=22033#c25448
+# 67. boolean bfuse_complex P8
+#   Script:
+#   brestore tool_1.brep b
+#   explode b e
+#   explode b_5
+#   maxtolerance b_5_1 =>1.99465e+000
+#   maxtolerance b_5_2 =>6.77349e+000
+#   distmini d b_5_1 b_5_2 =>2.64549
+#   Problem:
+#    The shape tool_1.brep is self-interfered shape.
+#    In accordance with specification it can not be used as the argument for Boolean Operation Algorithm
+# 
+#   Proposals:
+#    The case should be removed. 
+
+puts "TODO ?OCC22911 ALL: Error : The area of the resulting shape is"
+
+puts ""
+puts "Problem:"
+puts " The shape tool_1.brep is self-interfered shape."
+puts " In accordance with specification it can not be used as the argument for Boolean Operation Algorithm"
+puts ""
 
 restore [locate_data_file CTO909_shape.brep] a
 restore [locate_data_file tool_1.brep] b
 
 bfuse result a b
 
-set square 898457
+set square 656459
diff --git a/tests/bugs/modalg_5/bug24290_1 b/tests/bugs/modalg_5/bug24290_1
new file mode 100755 (executable)
index 0000000..6279990
--- /dev/null
@@ -0,0 +1,13 @@
+puts "================"
+puts "OCC24290"
+puts "================"
+puts ""
+#######################################################################
+# BOP Section produces incorrect result
+#######################################################################
+
+restore [locate_data_file bug24290_TheFace.brep] b1
+restore [locate_data_file bug24290_TheShape.brep] b2
+
+bopcheck b1
+bopcheck b2
diff --git a/tests/bugs/modalg_5/bug24290_2 b/tests/bugs/modalg_5/bug24290_2
new file mode 100755 (executable)
index 0000000..493de2f
--- /dev/null
@@ -0,0 +1,25 @@
+puts "================"
+puts "OCC24290"
+puts "================"
+puts ""
+#######################################################################
+# BOP Section produces incorrect result
+#######################################################################
+
+restore [locate_data_file bug24290_TheFace.brep] b1
+restore [locate_data_file bug24290_TheShape.brep] b2
+
+bop b1 b2
+bopsection result
+
+set nb_v_good 6
+set nb_e_good 6
+set nb_w_good 0
+set nb_f_good 0
+set nb_sh_good 0
+set nb_sol_good 0
+set nb_compsol_good 0
+set nb_compound_good 1
+set nb_shape_good 13
+
+set 2dviewer 1