//=======================================================================
TopoDS_Shape BRepAlgo_Tool::Deboucle3D(const TopoDS_Shape& S,
- const TopTools_MapOfShape& Boundary)
+ const TopTools_MapOfShape& Boundary)
{
TopoDS_Shape SS;
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;
}
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)
{