0028468: Sweep with different sections raises Standard_NoSuchObject: BRep_Tool::...
authorjgv <jgv@opencascade.com>
Mon, 6 Mar 2017 11:16:09 +0000 (14:16 +0300)
committerbugmaster <bugmaster@opencascade.com>
Thu, 16 Mar 2017 07:51:54 +0000 (10:51 +0300)
Method BRepFill_SectionPlacement::Perform is modified to operate vertices and edges of path correct.

Add two test cases.

Minor correction.

src/BRepFill/BRepFill_SectionPlacement.cxx
tests/bugs/modalg_6/bug28468_1 [new file with mode: 0644]
tests/bugs/modalg_6/bug28468_2 [new file with mode: 0644]

index 1a8ea20..6a71f99 100644 (file)
@@ -283,9 +283,8 @@ BRepFill_SectionPlacement(const Handle(BRepFill_LocationLaw)& Law,
 
   // In the general case : Localisation via concatenation of the spine
   TColStd_Array1OfReal SuperKnot(1, myLaw->NbLaw()+1); 
-  TColStd_Array1OfInteger Index(1, myLaw->NbLaw()); 
   for (ii=1; ii<=myLaw->NbLaw(); ii++) {
-    SuperKnot(ii+1) = Index(ii) = ii;
+    SuperKnot(ii+1) = ii;
   }
   SuperKnot(1) = 0;
   
@@ -318,8 +317,17 @@ BRepFill_SectionPlacement(const Handle(BRepFill_LocationLaw)& Law,
   }
   
   if (Bof) throw Standard_ConstructionError("Interval non trouve !!");
-  Ind1 = Index(Ind1);
-  if (Ind2) Ind2 = Index(Ind2);
+  //Search of the <Ind1> by vertex <TheV>
+  if (!TheV.IsNull())
+    for (Ind1 = 1; Ind1 <= myLaw->NbLaw(); Ind1++)
+    {
+      TopoDS_Edge anEdge = myLaw->Edge(Ind1);
+      TopoDS_Vertex V1, V2;
+      TopExp::Vertices(anEdge, V1, V2);
+      if (V1.IsSame(TheV) || V2.IsSame(TheV))
+        break;
+    }
+  ////////////////////
   
   // Positioning on the localized edge (or 2 Edges)
   Standard_Real Angle;
diff --git a/tests/bugs/modalg_6/bug28468_1 b/tests/bugs/modalg_6/bug28468_1
new file mode 100644 (file)
index 0000000..75f9e2f
--- /dev/null
@@ -0,0 +1,30 @@
+puts "============"
+puts "OCC28468"
+puts "============"
+puts ""
+##############################################################################################
+# Sweep with different sections raises Standard_NoSuchObject: BRep_Tool:: no parameter on edge
+##############################################################################################
+
+restore [locate_data_file bug28468_wire3.brep] sp
+restore [locate_data_file bug28468_section_entree.brep] pr1
+restore [locate_data_file bug28468_section_passage1.brep] pr2
+restore [locate_data_file bug28468_section_passage2.brep] pr3
+restore [locate_data_file bug28468_section_sortie.brep] pr4
+
+wire pr1 pr1
+wire pr4 pr4
+
+explode sp V
+
+mksweep sp
+addsweep pr1 sp_1
+addsweep pr2 sp_2
+addsweep pr3 sp_3
+addsweep pr4 sp_4
+buildsweep r
+
+checkshape r
+
+checknbshapes r -shell 1 -face 3 -wire 3 -edge 7 -vertex 4
+checkprops r -s 222710
diff --git a/tests/bugs/modalg_6/bug28468_2 b/tests/bugs/modalg_6/bug28468_2
new file mode 100644 (file)
index 0000000..7c4d55a
--- /dev/null
@@ -0,0 +1,29 @@
+puts "============"
+puts "OCC28468"
+puts "============"
+puts ""
+##############################################################################################
+# Sweep with different sections raises Standard_NoSuchObject: BRep_Tool:: no parameter on edge
+##############################################################################################
+
+beziercurve bc1 3  100 0 0 1  0 100 0 3  -100 0 0 1
+beziercurve bc2 3  -100 0 0 1  0 -100 0 3  100 0 0 1
+mkedge e1 bc1
+mkedge e2 bc2
+wire sp e1 e2
+polyline pr1 110 0 10  90 0 10  90 0 -10  110 0 -10  110 0 10
+circle pr2 -100 0 0  0 1 0  10
+mkedge pr2 pr2
+wire pr2 pr2
+donly sp pr1 pr2
+explode sp v
+
+mksweep sp
+addsweep pr1 sp_1
+addsweep pr2 sp_2
+buildsweep r
+
+checkshape r
+
+checknbshapes r -shell 1 -face 10 -wire 10 -edge 25 -vertex 15
+checkprops r -s 28569.4