From ee5d676aee993954c1bac95c28a78acf9f6d39ef Mon Sep 17 00:00:00 2001 From: emv Date: Wed, 17 Jun 2015 11:30:10 +0300 Subject: [PATCH] Treatment of the shells with free edges has been changed to keep the faces with internal edges. --- src/BRepAlgo/BRepAlgo_Tool.cxx | 38 ++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/src/BRepAlgo/BRepAlgo_Tool.cxx b/src/BRepAlgo/BRepAlgo_Tool.cxx index bc4a6f662b..da5138939c 100644 --- a/src/BRepAlgo/BRepAlgo_Tool.cxx +++ b/src/BRepAlgo/BRepAlgo_Tool.cxx @@ -34,7 +34,7 @@ //======================================================================= TopoDS_Shape BRepAlgo_Tool::Deboucle3D(const TopoDS_Shape& S, - const TopTools_MapOfShape& Boundary) + const TopTools_MapOfShape& Boundary) { TopoDS_Shape SS; @@ -52,12 +52,20 @@ TopoDS_Shape BRepAlgo_Tool::Deboucle3D(const TopoDS_Shape& S, Standard_Boolean JeGarde = Standard_True; for ( Standard_Integer i = 1; i <= Map.Extent() && JeGarde; i++) { - if (Map(i).Extent() < 2) { - const TopoDS_Edge& anEdge = TopoDS::Edge(Map.FindKey(i)); - if (!Boundary.Contains(anEdge) && - !BRep_Tool::Degenerated(anEdge) ) - JeGarde = Standard_False; - } + const TopTools_ListOfShape& aLF = Map(i); + if (aLF.Extent() < 2) { + const TopoDS_Edge& anEdge = TopoDS::Edge(Map.FindKey(i)); + if (anEdge.Orientation() == TopAbs_INTERNAL) { + const TopoDS_Face& aFace = TopoDS::Face(aLF.First()); + if (aFace.Orientation() != TopAbs_INTERNAL) { + continue; + } + } + // + if (!Boundary.Contains(anEdge) && + !BRep_Tool::Degenerated(anEdge) ) + JeGarde = Standard_False; + } } if ( JeGarde) SS = S; } @@ -71,18 +79,18 @@ TopoDS_Shape BRepAlgo_Tool::Deboucle3D(const TopoDS_Shape& S, Standard_Boolean NbSub = 0; BRep_Builder B; if (S.ShapeType() == TopAbs_COMPOUND) { - B.MakeCompound(TopoDS::Compound(SS)); + B.MakeCompound(TopoDS::Compound(SS)); } else { - B.MakeSolid(TopoDS::Solid(SS)); + B.MakeSolid(TopoDS::Solid(SS)); } for ( ; it.More(); it.Next()) { - const TopoDS_Shape& CurS = it.Value(); - SubShape = Deboucle3D(CurS,Boundary); - if ( !SubShape.IsNull()) { - B.Add(SS, SubShape); - NbSub++; - } + const TopoDS_Shape& CurS = it.Value(); + SubShape = Deboucle3D(CurS,Boundary); + if ( !SubShape.IsNull()) { + B.Add(SS, SubShape); + NbSub++; + } } if (NbSub == 0) { -- 2.39.5