0025319: Bop Common produces strange results with same shapes.
authoremv <emv@opencascade.com>
Thu, 16 Oct 2014 11:30:12 +0000 (15:30 +0400)
committerbugmaster <bugmaster@opencascade.com>
Thu, 16 Oct 2014 11:31:11 +0000 (15:31 +0400)
class BOPAlgo_Builder
method
  void BOPAlgo_Builder::FillIn3DParts
    (BOPCol_DataMapOfShapeListOfShape& theInParts,
     BOPCol_DataMapOfShapeShape& theDraftSolids,
     const BOPCol_BaseAllocator&)
Sort faces before its classification relatively to the solid.

Test cases for issue CR25319

Correction of test cases for issue CR25319

src/BOPAlgo/BOPAlgo_Builder_3.cxx
tests/boolean/bcut_complex/O8
tests/bugs/modalg_5/bug25319_1 [new file with mode: 0644]
tests/bugs/modalg_5/bug25319_2 [new file with mode: 0644]

index decfb308d9f50f118c6c3f4040045b59707c4f21..d65e917c272f01e0aab2b98257b0d316691752d6 100644 (file)
@@ -65,6 +65,7 @@
 #include <BOPTools_Set.hxx>
 //
 #include <BOPAlgo_BuilderSolid.hxx>
+#include <NCollection_Array1.hxx>
 
 
 static
@@ -313,6 +314,14 @@ void BOPAlgo_Builder::FillIn3DParts
     aNbFP=aBBTree.Select(aSelector);
     //
     const BOPCol_ListOfInteger& aLIFP=aSelector.Indices();
+    //sort indices
+    NCollection_Array1<Standard_Integer> aIVec(1, aNbFP);
+    aItLI.Initialize(aLIFP);
+    for (k = 1; aItLI.More(); aItLI.Next(), ++k) {
+      nFP=aItLI.Value();
+      aIVec(k) = nFP;
+    }
+    std::sort(aIVec.begin(), aIVec.end());
     //
     // 2.5. Collect faces that are IN aSolid [ aLFIN ]
     BOPCol_ListOfShape aLFP(aAlr1);
@@ -322,9 +331,8 @@ void BOPAlgo_Builder::FillIn3DParts
     //
     BOPTools::MapShapes(aSD, TopAbs_EDGE, aME);
     //
-    aItLI.Initialize(aLIFP);
-    for (; aItLI.More(); aItLI.Next()) {
-      nFP=aItLI.Value();
+    for (k = 1; k <= aNbFP; ++k) {
+      nFP = aIVec(k);
       const BOPAlgo_ShapeBox& aSBF=aDMISB.Find(nFP);
       const TopoDS_Face& aFP=(*(TopoDS_Face*)&aSBF.Shape());
       if (aMF.Contains(aFP)) {
index dcec1a84f0cfc61971c22e1bcaea5fcc426db664..be1a8501c19d9fbce9a45d274127cd9f9ed784f7 100644 (file)
@@ -1,3 +1,5 @@
+puts "TODO #25319 ALL: Error : The area of the resulting shape is"
+
 ## cts20461
 
 restore [locate_data_file cts20461.rle] a
diff --git a/tests/bugs/modalg_5/bug25319_1 b/tests/bugs/modalg_5/bug25319_1
new file mode 100644 (file)
index 0000000..1ee8ada
--- /dev/null
@@ -0,0 +1,28 @@
+puts "TODO OCC25319 ALL: Faulty shapes in variables faulty_1 to faulty_"
+
+puts "================"
+puts "OCC25319"
+puts "================"
+puts ""
+########################################################################
+# Bop Common produces strange results with same shapes.
+########################################################################
+
+restore [locate_data_file bug25319_S1.brep] b1
+restore [locate_data_file bug25319_S2.brep] b2
+
+bcommon result b1 b2
+
+set square 1690.81
+
+set nb_v_good 20
+set nb_e_good 31
+set nb_w_good 13
+set nb_f_good 13
+set nb_sh_good 1
+set nb_sol_good 1
+set nb_compsol_good 0
+set nb_compound_good 1
+set nb_shape_good 80
+
+set 2dviewer 1
diff --git a/tests/bugs/modalg_5/bug25319_2 b/tests/bugs/modalg_5/bug25319_2
new file mode 100644 (file)
index 0000000..794cbcb
--- /dev/null
@@ -0,0 +1,31 @@
+puts "TODO OCC25319 ALL: Faulty shapes in variables faulty_1 to faulty_"
+
+puts "================"
+puts "OCC25319"
+puts "================"
+puts ""
+########################################################################
+# Bop Common produces strange results with same shapes.
+########################################################################
+
+restore [locate_data_file bug25319_S1.brep] b1
+restore [locate_data_file bug25319_S2.brep] b2
+
+explode b1 so; copy b1_1 b1
+explode b2 so; copy b2_3 b2
+
+bcommon result b1 b2
+
+set square 1690.81
+
+set nb_v_good 20
+set nb_e_good 31
+set nb_w_good 13
+set nb_f_good 13
+set nb_sh_good 1
+set nb_sol_good 1
+set nb_compsol_good 0
+set nb_compound_good 1
+set nb_shape_good 80
+
+set 2dviewer 1