From: imn Date: Thu, 15 Sep 2016 09:57:33 +0000 (+0300) Subject: 0023351: [CEA 1955] Crash if filling has only one edge X-Git-Tag: V8_1_0rc1^0 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=d3c209c26fa13f0658626a2c256411e04ffe095f;p=modules%2Fgeom.git 0023351: [CEA 1955] Crash if filling has only one edge --- diff --git a/doc/salome/gui/GEOM/input/creating_filling.doc b/doc/salome/gui/GEOM/input/creating_filling.doc index 0a041c214..39cbdafb5 100644 --- a/doc/salome/gui/GEOM/input/creating_filling.doc +++ b/doc/salome/gui/GEOM/input/creating_filling.doc @@ -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 Maximum Degree 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 diff --git a/src/GEOMImpl/GEOMImpl_FillingDriver.cxx b/src/GEOMImpl/GEOMImpl_FillingDriver.cxx index d65669c07..3175f6e65 100644 --- a/src/GEOMImpl/GEOMImpl_FillingDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_FillingDriver.cxx @@ -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);