From d3c209c26fa13f0658626a2c256411e04ffe095f Mon Sep 17 00:00:00 2001 From: imn Date: Thu, 15 Sep 2016 12:57:33 +0300 Subject: [PATCH] 0023351: [CEA 1955] Crash if filling has only one edge --- doc/salome/gui/GEOM/input/creating_filling.doc | 1 + src/GEOMImpl/GEOMImpl_FillingDriver.cxx | 13 +++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) 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); -- 2.39.2