From a7753882d74e999444aecc434f7c01bf9cea649b Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 9 Dec 2011 18:38:03 +0000 Subject: [PATCH] + handle special case when removing splitter of a shell git-svn-id: https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk@5245 e8eeb9e2-ec13-0410-a4a9-efa5cf37419d --- src/Mod/Part/App/modelRefine.cpp | 34 +++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/src/Mod/Part/App/modelRefine.cpp b/src/Mod/Part/App/modelRefine.cpp index 2986c7fd00..8ff5090ba1 100644 --- a/src/Mod/Part/App/modelRefine.cpp +++ b/src/Mod/Part/App/modelRefine.cpp @@ -44,6 +44,7 @@ #include #include +#include #include "modelRefine.h" using namespace ModelRefine; @@ -594,14 +595,33 @@ bool FaceUniter::process() if (facesToSew.size() > 0) { workShell = ModelRefine::removeFaces(workShell, facesToRemove); + TopExp_Explorer xp; + bool emptyShell = true; + for (xp.Init(workShell, TopAbs_FACE); xp.More(); xp.Next()) + { + emptyShell = false; + break; + } - BRepBuilderAPI_Sewing sew; - sew.Add(workShell); - FaceVectorType::iterator sewIt; - for(sewIt = facesToSew.begin(); sewIt != facesToSew.end(); ++sewIt) - sew.Add(*sewIt); - sew.Perform(); - workShell = TopoDS::Shell(sew.SewedShape()); + if (!emptyShell || facesToSew.size() > 1) + { + BRepBuilderAPI_Sewing sew; + sew.Add(workShell); + FaceVectorType::iterator sewIt; + for(sewIt = facesToSew.begin(); sewIt != facesToSew.end(); ++sewIt) + sew.Add(*sewIt); + sew.Perform(); + workShell = TopoDS::Shell(sew.SewedShape()); + } + else + { + // workShell has no more faces and we add exactly one face + BRep_Builder builder; + builder.MakeShell(workShell); + FaceVectorType::iterator sewIt; + for(sewIt = facesToSew.begin(); sewIt != facesToSew.end(); ++sewIt) + builder.Add(workShell, *sewIt); + } BRepLib_FuseEdges edgeFuse(workShell, true); workShell = TopoDS::Shell(edgeFuse.Shape());