From 0f180c0c1821d4962a9272c6e146518976fda9ac Mon Sep 17 00:00:00 2001 From: emv Date: Thu, 29 Aug 2013 13:28:02 +0400 Subject: [PATCH] 0024126: Crash on fixing the attached shape Added the check for an empty list. Adding test case for issue CR24126 --- src/ShapeFix/ShapeFix_Face.cxx | 16 +++++++++++----- tests/bugs/heal/bug24126 | 13 +++++++++++++ 2 files changed, 24 insertions(+), 5 deletions(-) create mode 100755 tests/bugs/heal/bug24126 diff --git a/src/ShapeFix/ShapeFix_Face.cxx b/src/ShapeFix/ShapeFix_Face.cxx index 108d47f878..9043a1d887 100755 --- a/src/ShapeFix/ShapeFix_Face.cxx +++ b/src/ShapeFix/ShapeFix_Face.cxx @@ -2211,18 +2211,24 @@ Standard_Boolean ShapeFix_Face::FixSplitFace(const TopTools_DataMapOfShapeListOf TopoDS_Shape S = myFace; if ( ! Context().IsNull() ) S = Context()->Apply ( myFace ); - Standard_Integer NbWires=0, NbWiresNew=0; + Standard_Integer NbWires=0, NbWiresNew=0, NbEdges; for(TopoDS_Iterator iter(S,Standard_False); iter.More(); iter.Next()) { - if(iter.Value().ShapeType() != TopAbs_WIRE || - (iter.Value().Orientation() != TopAbs_FORWARD && iter.Value().Orientation() != TopAbs_REVERSED)) + const TopoDS_Shape& aShape = iter.Value(); + if(aShape.ShapeType() != TopAbs_WIRE || + (aShape.Orientation() != TopAbs_FORWARD && aShape.Orientation() != TopAbs_REVERSED)) continue; - TopoDS_Wire wire = TopoDS::Wire ( iter.Value() ); + TopoDS_Wire wire = TopoDS::Wire ( aShape ); NbWires++; if(MapWires.IsBound(wire)) { // if wire not closed --> stop split and return false Handle(ShapeExtend_WireData) sewd = new ShapeExtend_WireData(wire); + NbEdges = sewd->NbEdges(); + if (NbEdges == 0) { + continue; + } + // TopoDS_Edge E1 = sewd->Edge(1); - TopoDS_Edge E2 = sewd->Edge(sewd->NbEdges()); + TopoDS_Edge E2 = sewd->Edge(NbEdges); TopoDS_Vertex V1,V2; ShapeAnalysis_Edge sae; V1=sae.FirstVertex(E1); diff --git a/tests/bugs/heal/bug24126 b/tests/bugs/heal/bug24126 new file mode 100755 index 0000000000..35d3b324b8 --- /dev/null +++ b/tests/bugs/heal/bug24126 @@ -0,0 +1,13 @@ +puts "================" +puts "OCC24126" +puts "================" +puts "" +###################################################################################### +# Crash on fixing the attached shape +###################################################################################### + +catch {pload XDE} + +restore [locate_data_file bug24126_Partition_1.brep] b + +fixshape result b