Salome HOME
17.12.2013. Added Partition algorithm (draft version).
[modules/hydro.git] / src / HYDROData / HYDROData_PolylineXY.cxx
index 2032ba0b6cea77d3ed79b303a1b97dfcda1e7ce6..eaea172a650df3981ce37149b8c72b573c54743c 100755 (executable)
 #include <TDataStd_ListIteratorOfListOfExtendedString.hxx>
 #include <TDataStd_RealList.hxx>
 
+#include <TopoDS_Iterator.hxx>
 #include <TopTools_ListIteratorOfListOfShape.hxx>
-
+#include <TopTools_HSequenceOfShape.hxx>
+#include <ShapeAnalysis_FreeBounds.hxx>
+#include <TopoDS.hxx>
 #include <QColor>
 #include <QPainterPath>
 #include <QVariant>
@@ -237,9 +240,32 @@ void HYDROData_PolylineXY::Update()
       aMakeWire.Add( aSectionWire );
     }
   }
+// all input wires in the <aSectionWiresList>
+  Handle(TopTools_HSequenceOfShape) aSeqWires = new TopTools_HSequenceOfShape;
+  Handle(TopTools_HSequenceOfShape) aSeqEdges = new TopTools_HSequenceOfShape;
+  TopTools_ListIteratorOfListOfShape it(aSectionWiresList);
+  for(;it.More();it.Next()) {
+       TopoDS_Iterator it2(it.Value());
+       for(;it2.More();it2.Next()) 
+          aSeqEdges->Append(it2.Value());
+  }
+   BRep_Builder aBB;
+   TopoDS_Compound aCmp;
+   aBB.MakeCompound(aCmp);
+   if(aSeqEdges->Length() >1) {
+     ShapeAnalysis_FreeBounds::ConnectEdgesToWires(aSeqEdges,Precision::Confusion(),Standard_True,aSeqWires);
+     for (Standard_Integer i = 1; i <= aSeqWires->Length();i++) {
+       const TopoDS_Shape& aS1 = aSeqWires->Value(i);
+       aBB.Add(aCmp, aS1);
+        }
+   } else if (aSeqEdges->Length() == 1) {
+          BRepBuilderAPI_MakeWire mkWire (TopoDS::Edge(aSeqEdges->Value(1)));
+         if (mkWire.IsDone())
+                 aBB.Add(aCmp, mkWire.Wire());
+   }
 
-  TopoDS_Shape aShape;
-
+  
+/*
   if ( aMakeWire.IsDone() )
   {
     aShape = aMakeWire.Shape();
@@ -260,8 +286,8 @@ void HYDROData_PolylineXY::Update()
     
     aShape = aCompound;
   }
-
-  setPolylineShape( aShape );
+*/
+  setPolylineShape( aCmp );
 }
 
 /**