Salome HOME
0023351: [CEA 1955] Crash if filling has only one edge imn/23351 V8_1_0rc1
authorimn <imn@opencascade.com>
Thu, 15 Sep 2016 09:57:33 +0000 (12:57 +0300)
committerimn <imn@opencascade.com>
Thu, 15 Sep 2016 09:57:33 +0000 (12:57 +0300)
doc/salome/gui/GEOM/input/creating_filling.doc
src/GEOMImpl/GEOMImpl_FillingDriver.cxx

index 0a041c21459414d037f063d14d9f02ddfc4ee5f4..39cbdafb5fd3f5df1d0b676d1b042c08270ce2d3 100644 (file)
@@ -10,6 +10,7 @@ following parameters:
 of the surface. You can select either several edges/wires or a
 compound of them. To prepare for the filling, each input wire
 is converted into a single BSpline curve by concatenating its edges.
+List of edges/wires must contain more than one edge.
 \n \b Minimum and <b>Maximum Degree</b> of equation of the resulting
 BSpline or Besier curves describing the surface.
 \n \b Tolerance for \b 2D and for \b 3D - minimum distance between the
index d65669c07e8d1d11149de36b0c21400381013705..3175f6e658520cc8d0712a59c62fd10cbd99ee39 100644 (file)
@@ -176,7 +176,7 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(LOGBOOK& log) const
       Standard_Integer aMethod = IF.GetMethod();
 
       GeomFill_SectionGenerator Section;
-      Standard_Integer i = 0;
+      Standard_Integer aNumSection = 0;
       Handle(Geom_Curve) aLastC;
       gp_Pnt PL1,PL2;
       for (Ex.Init(aShape, TopAbs_EDGE); Ex.More(); Ex.Next()) {
@@ -198,7 +198,7 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(LOGBOOK& log) const
           C->Reverse();
         }
         else if (aMethod == 2) {
-          if (i == 0) {
+          if (aNumSection == 0) {
             PL1 = P1;
             PL2 = P2;
           }
@@ -218,12 +218,17 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(LOGBOOK& log) const
         }
 
         Section.AddCurve(C);
-        i++;
+        aNumSection++;
       }
 
       /* a 'tolerance' is used to compare 2 knots : see GeomFill_Generator.cdl */
       Section.Perform(Precision::PConfusion());
-      Handle(GeomFill_Line) Line = new GeomFill_Line(i);
+      //imn: to fix the bug 23351: "Crash is filling has only one edge"
+      //after fix related occt bug 27875 must be removed
+      if (aNumSection < 2) {
+        Standard_ConstructionError::Raise("Input must contain more than one edge");
+      }
+      Handle(GeomFill_Line) Line = new GeomFill_Line(aNumSection);
 
       GeomFill_AppSurf App (mindeg, maxdeg, tol3d, tol2d, nbiter); /* user parameters */
       App.Perform(Line, Section);