0023436: BRepOffsetAPI_ThruSections crashes when lofting through identical profiles
authorjgv <jgv@opencascade.com>
Fri, 1 Feb 2013 13:22:26 +0000 (17:22 +0400)
committerjgv <jgv@opencascade.com>
Fri, 1 Feb 2013 13:22:26 +0000 (17:22 +0400)
Adding of test case

src/BRepOffsetAPI/BRepOffsetAPI_ThruSections.cxx
tests/bugs/modalg/bug23436 [new file with mode: 0755]

index 94028a7..631c26d 100755 (executable)
 #include <BRepBuilderAPI_FindPlane.hxx>
 
 
+//=======================================================================
+//function : PreciseUpar
+//purpose  : pins the u-parameter of surface close to U-knot
+//           to this U-knot
+//=======================================================================
+
+static Standard_Real PreciseUpar(const Standard_Real anUpar,
+                                 const Handle(Geom_BSplineSurface)& aSurface)
+{
+  Standard_Real Tol = Precision::PConfusion();
+  Standard_Integer i1, i2;
 
+  aSurface->LocateU(anUpar, Tol, i1, i2);
+  Standard_Real U1 = aSurface->UKnot(i1);
+  Standard_Real U2 = aSurface->UKnot(i2);
+
+  Standard_Real NewU = anUpar;
+
+  NewU = (anUpar - U1 < U2 - anUpar)? U1 : U2;
+  return NewU;
+}
 
 //=======================================================================
 //function :  PerformPlan
@@ -629,6 +649,8 @@ void BRepOffsetAPI_ThruSections::CreateSmoothed()
     Standard_Real Ui1,Ui2,V0,V1;
     Ui1 = i-1;
     Ui2 = i;
+    Ui1 = PreciseUpar(Ui1, surface);
+    Ui2 = PreciseUpar(Ui2, surface);
     V0  = surface->VKnot(surface->FirstVKnotIndex());
     V1  = surface->VKnot(surface->LastVKnotIndex());
     surface->Segment(Ui1,Ui2,V0,V1);
diff --git a/tests/bugs/modalg/bug23436 b/tests/bugs/modalg/bug23436
new file mode 100755 (executable)
index 0000000..291ea7f
--- /dev/null
@@ -0,0 +1,13 @@
+puts "============"
+puts "CR23436"
+puts "============"
+puts ""
+######################################################
+# BRepOffsetAPI_ThruSections crashes when lofting through identical profiles
+######################################################
+
+restore [locate_data_file bug23436_myloft.brep] s
+
+explode s
+
+thrusections result 0 0 s_1 s_2 s_3