Salome HOME
refs #1813 ... lot 14 combined commit : parts : 1 - 16
[modules/hydro.git] / src / HYDROData / HYDROData_ImmersibleZone.cxx
index 6d0ed1508c738b477167d1d47ec76222eb608ad5..0c08bffb1f477dd05dbb7e1c4b9e551a8dbcb7df 100644 (file)
@@ -24,7 +24,7 @@
 #include "HYDROData_PolylineXY.h"
 #include "HYDROData_ShapesTool.h"
 
-#include <BRepBuilderAPI_MakeFace.hxx>
+#include <HYDROData_Tool.h>
 
 #include <TopoDS.hxx>
 #include <TopoDS_Face.hxx>
 #include <TopTools_ListIteratorOfListOfShape.hxx>
 #include <TopTools_HSequenceOfShape.hxx>
 
-#include <BRep_Builder.hxx>
-#include <BRepAlgo_FaceRestrictor.hxx>
-#include <BRepCheck_Analyzer.hxx>
 
 #include <ShapeAnalysis.hxx>
 #include <ShapeAnalysis_FreeBounds.hxx>
 
+
 #include <QColor>
 #include <QStringList>
 
@@ -123,134 +121,7 @@ TopoDS_Shape HYDROData_ImmersibleZone::generateTopShape() const
 
 TopoDS_Shape HYDROData_ImmersibleZone::generateTopShape( const Handle(HYDROData_PolylineXY)& aPolyline )
 {
-  //DEBTRACE("generateTopShape");
-  TopoDS_Face aResultFace = TopoDS_Face(); // --- result: default = null face
-
-  if (!aPolyline.IsNull())
-    {
-      TopoDS_Shape aPolylineShape = aPolyline->GetShape();
-#ifdef DEB_IMZ
-      std::string brepName = "imz.brep";
-      BRepTools::Write(aPolylineShape, brepName.c_str());
-#endif
-      TopTools_ListOfShape aWiresList;
-
-      if (!aPolylineShape.IsNull() && aPolylineShape.ShapeType() == TopAbs_WIRE)
-        {
-          // --- only one wire: try to make a face
-          //DEBTRACE("one wire: try to build a face");
-          const TopoDS_Wire& aPolylineWire = TopoDS::Wire(aPolylineShape);
-          if (!aPolylineWire.IsNull())
-            {
-              BRepBuilderAPI_MakeFace aMakeFace(aPolylineWire, Standard_True);
-              aMakeFace.Build();
-              if (aMakeFace.IsDone())
-                {
-                  //DEBTRACE(" a face with the only wire given");
-                  aResultFace = aMakeFace.Face();
-                }
-            }
-        }
-      else
-        {
-          // --- a list of wires ? inventory of wires and edges
-          Handle(TopTools_HSequenceOfShape) aSeqWires = new TopTools_HSequenceOfShape;
-          Handle(TopTools_HSequenceOfShape) aSeqEdges = new TopTools_HSequenceOfShape;
-          TopExp_Explorer anExp(aPolylineShape, TopAbs_WIRE);
-          //DEBTRACE("list of wires ?");
-          for (; anExp.More(); anExp.Next())
-            {
-              if (!anExp.Current().IsNull())
-                {
-                  const TopoDS_Wire& aWire = TopoDS::Wire(anExp.Current());
-                  aWiresList.Append(aWire);
-                  //DEBTRACE("  append wire");
-                  TopExp_Explorer it2(aWire, TopAbs_EDGE);
-                  for (; it2.More(); it2.Next())
-                    aSeqEdges->Append(it2.Current());
-                }
-            }
-          if (aWiresList.IsEmpty())
-            return aResultFace; // --- no wires: null result
-
-          if (aSeqEdges->Length() > 1)
-            {
-              //DEBTRACE("try to connect all the edges together, build a unique wire and a face");
-              // --- try to create one wire by connecting edges with a distance tolerance (no necessity of sharing points)
-              ShapeAnalysis_FreeBounds::ConnectEdgesToWires(aSeqEdges, 1E-5, Standard_False, aSeqWires);
-
-              if (aSeqWires->Length() == 1)
-                {
-                  // --- one wire: try to make a face
-                  const TopoDS_Wire& aPolylineWire = TopoDS::Wire(aSeqWires->Value(1));
-                  if (!aPolylineWire.IsNull())
-                    {
-                      BRepBuilderAPI_MakeFace aMakeFace(aPolylineWire, Standard_True);
-                      aMakeFace.Build();
-                      if (aMakeFace.IsDone())
-                        {
-                          //DEBTRACE("  a face from all the wires connected");
-                          aResultFace = aMakeFace.Face();
-                        }
-                    }
-                }
-            }
-
-          if (aResultFace.IsNull())
-            {
-              //DEBTRACE("try to make a face with the first wire of the list and other wires as restrictions");
-              // --- try to make a face with the first wire of the list and other wires as restrictions
-              BRepAlgo_FaceRestrictor aFR;
-              TopoDS_Face aRefFace;
-              TopoDS_Shape aS = aWiresList.First();
-              BRepBuilderAPI_MakeFace aMakeFace(TopoDS::Wire(aWiresList.First()), Standard_True);
-              aMakeFace.Build();
-              if (aMakeFace.IsDone())
-                {
-                  //DEBTRACE("  a face with first wire");
-                  aRefFace = aMakeFace.Face();
-                }
-              if (!aRefFace.IsNull())
-                {
-                  aFR.Init(aRefFace, Standard_False, Standard_True);
-                  TopTools_ListIteratorOfListOfShape anIt(aWiresList);
-                  for (; anIt.More(); anIt.Next())
-                    {
-                      TopoDS_Wire& aWire = TopoDS::Wire(anIt.Value());
-                      if (aWire.IsNull())
-                        continue;
-                      aFR.Add(aWire);
-                    }
-                  aFR.Perform();
-                  if (aFR.IsDone())
-                    {
-                      for (; aFR.More(); aFR.Next())
-                        {
-                          //DEBTRACE("  a restricted face");
-                          aResultFace = aFR.Current();
-                          break;
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-  if (aResultFace.IsNull())
-    return aResultFace;
-
-  //DEBTRACE("check the face");
-  BRepCheck_Analyzer anAnalyzer(aResultFace);
-  if (anAnalyzer.IsValid() && aResultFace.ShapeType() == TopAbs_FACE)
-  {
-    //DEBTRACE("face OK");
-    return aResultFace;
-  }
-  else
-  {
-    //DEBTRACE("bad face");
-  }
-  return TopoDS_Face();
+  return HYDROData_Tool::PolyXY2Face(aPolyline);
 }
 
 void HYDROData_ImmersibleZone::createGroupObjects()