0026251: Section curve cannot be found
authornbv <nbv@opencascade.com>
Thu, 3 Sep 2015 11:54:29 +0000 (14:54 +0300)
committerbugmaster <bugmaster@opencascade.com>
Thu, 3 Sep 2015 11:55:18 +0000 (14:55 +0300)
Current algorithm ignores found triangles intersection (IntPolyh_PMaillageAffinage) and, consequently, cannot find start point for intersection line. Branch fixes this problem.

Test case for issue CR26251

Modified test case

Small correction of test case for issue CR26251

src/IntPolyh/IntPolyh_Intersection.cxx
src/IntPolyh/IntPolyh_Intersection_1.cxx
tests/bugs/modalg_6/bug26251 [new file with mode: 0755]

index cd4c89f..4ebcea8 100644 (file)
@@ -89,7 +89,7 @@ void IntPolyh_Intersection::Perform() {
     isAdvDone = PerformAdv(aPMaillageFF,aPMaillageFR,aPMaillageRF,aPMaillageRR,nbCouplesAdv);
 
     // advanced interference found
-    if(isAdvDone && nbCouplesAdv > 10) {
+    if(isAdvDone && nbCouplesAdv > 0) {
       aPMaillageFF->StartPointsChain(TSectionLines,TTangentZones);
       aPMaillageFR->StartPointsChain(TSectionLines,TTangentZones);
       aPMaillageRF->StartPointsChain(TSectionLines,TTangentZones);
index 67a0760..639ae60 100644 (file)
@@ -87,7 +87,7 @@ void IntPolyh_Intersection::Perform(const TColStd_Array1OfReal& Upars1,
                             aPMaillageRR,nbCouplesAdv);
       
     // advanced interference found
-    if(isAdvDone && nbCouplesAdv > 10) {
+    if(isAdvDone && nbCouplesAdv > 0) {
       aPMaillageFF->StartPointsChain(TSectionLines,TTangentZones);
       aPMaillageFR->StartPointsChain(TSectionLines,TTangentZones);
       aPMaillageRF->StartPointsChain(TSectionLines,TTangentZones);
@@ -171,7 +171,7 @@ Standard_Boolean IntPolyh_Intersection::PerformMaillage(const Standard_Boolean i
      (FinTTC >= theMaillageS->GetArrayOfTriangles(1).NbTriangles() ||
       FinTTC >= theMaillageS->GetArrayOfTriangles(2).NbTriangles()) ) {
     return Standard_False;
-}
+  }
 */
 //IFV test for parallel surf
   if(FinTTC > 200) {
@@ -250,7 +250,7 @@ Standard_Boolean IntPolyh_Intersection::PerformMaillage(const TColStd_Array1OfRe
      (FinTTC >= theMaillageS->GetArrayOfTriangles(1).NbTriangles() ||
       FinTTC >= theMaillageS->GetArrayOfTriangles(2).NbTriangles()) ) {
     return Standard_False;
-}
+  }
 */
 //IFV test for parallel surf
   if(FinTTC > 200) {
diff --git a/tests/bugs/modalg_6/bug26251 b/tests/bugs/modalg_6/bug26251
new file mode 100755 (executable)
index 0000000..0f21c56
--- /dev/null
@@ -0,0 +1,43 @@
+puts "============"
+puts "OCC26251"
+puts "============"
+puts ""
+###############################
+## Section curve cannot be found
+###############################
+
+restore [locate_data_file bug26251_b31_3.brep] b1
+restore [locate_data_file bug26251_tank31.brep] b2
+
+bsection result b1 b2
+
+set length 2.49934
+
+set nbshapes_expected "
+Number of shapes in shape
+ VERTEX    : 3
+ EDGE      : 2
+ WIRE      : 0
+ FACE      : 0
+ SHELL     : 0
+ SOLID     : 0
+ COMPSOLID : 0
+ COMPOUND  : 1
+ SHAPE     : 6
+"
+
+checknbshapes result -ref ${nbshapes_expected} -t -m "Section curve"
+
+explode b2 f
+copy b2_5 b2
+
+set NbCurves 0
+
+set log [bopcurves b1 b2 -2d]
+regexp {Tolerance Reached=+([-0-9.+eE]+)\n+([-0-9.+eE]+)} ${log} full Toler NbCurves
+
+if {$NbCurves == 0} {
+  puts "Error: Intersection curve is not found"
+}
+
+set 3dviewer 1