From 66567899512ec265d89be33c66b243429539ef3c Mon Sep 17 00:00:00 2001 From: jfa Date: Thu, 20 Apr 2006 12:54:29 +0000 Subject: [PATCH] Fix bug 12158: Crash after trying mirror degenerated edge. --- src/GEOMImpl/GEOMImpl_MirrorDriver.cxx | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/GEOMImpl/GEOMImpl_MirrorDriver.cxx b/src/GEOMImpl/GEOMImpl_MirrorDriver.cxx index cde05e64e..531aa6594 100644 --- a/src/GEOMImpl/GEOMImpl_MirrorDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_MirrorDriver.cxx @@ -30,12 +30,13 @@ #include #include +#include #include #include #include #include #include -#include +#include #include @@ -86,6 +87,21 @@ Standard_Integer GEOMImpl_MirrorDriver::Execute(TFunction_Logbook& log) const TopoDS_Shape anOriginal = anOriginalFunction->GetValue(); if (anOriginal.IsNull()) return 0; + // Bug 12158: Check for standalone (not included in faces) degenerated edges + TopTools_IndexedDataMapOfShapeListOfShape aEFMap; + TopExp::MapShapesAndAncestors(anOriginal, TopAbs_EDGE, TopAbs_FACE, aEFMap); + Standard_Integer i, nbE = aEFMap.Extent(); + for (i = 1; i <= nbE; i++) { + TopoDS_Shape anEdgeSh = aEFMap.FindKey(i); + if (BRep_Tool::Degenerated(TopoDS::Edge(anEdgeSh))) { + const TopTools_ListOfShape& aFaces = aEFMap.FindFromIndex(i); + if (aFaces.IsEmpty()) + Standard_ConstructionError::Raise + ("Mirror aborted : cannot process standalone degenerated edge"); + } + } + + // Perform Mirror if (aType == MIRROR_PLANE || aType == MIRROR_PLANE_COPY) { Handle(GEOM_Function) aPlane = TI.GetPlane(); if (aPlane.IsNull()) return 0; -- 2.39.2