]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
refs #1085
authorisn <isn@opencascade.com>
Fri, 9 Dec 2016 12:24:26 +0000 (15:24 +0300)
committerisn <isn@opencascade.com>
Fri, 9 Dec 2016 12:25:14 +0000 (15:25 +0300)
src/HYDROData/HYDROData_PolylineOperator.cxx

index d36f5fa115e2c0147d164ae1fa40be0fc21a3273..43fb6799520b45b8e48c4b31bbd961c3d72ccba0 100644 (file)
@@ -50,6 +50,8 @@
 #include <QStringList>
 #include <QColor>
 #include <Geom_BSplineCurve.hxx>
+#include <TopTools_IndexedMapOfShape.hxx>
+#include <BRepLib_MakeWire.hxx>
 
 #define _DEVDEBUG_
 #include "HYDRO_trace.hxx"
@@ -450,6 +452,7 @@ bool HYDROData_PolylineOperator::Extract( const Handle(HYDROData_Document)& theD
 
   QList<TopoDS_Shape> aBoundShapes;
   QStringList aBoundNames;
+  QMap<QString, TopTools_IndexedMapOfShape> aNameToShMap;
 
   theObject->GetBoundaries( aBoundShapes, aBoundNames );
 
@@ -460,21 +463,52 @@ bool HYDROData_PolylineOperator::Extract( const Handle(HYDROData_Document)& theD
       continue;
 
     QString aBoundName = i<aBoundNames.size() ? aBoundNames[i] : "";
+    
+    if (!aNameToShMap.contains(aBoundName))
+    {
+      TopTools_IndexedMapOfShape IM;
+      IM.Add(aShape);
+      aNameToShMap[aBoundName] = IM;
+    }
+    else
+      aNameToShMap[aBoundName].Add(aShape);
+     
+  }
+
+  foreach( QString K, aNameToShMap.keys() )
+  {
+    const TopTools_IndexedMapOfShape& IM = aNameToShMap.value(K);
+    TopTools_ListOfShape LSE;
+    for (int i = 1; i <= IM.Extent(); i++)
+    {
+      const TopoDS_Edge& E = TopoDS::Edge(IM(i));
+      if (E.IsNull())
+        continue;
+      LSE.Append(E);
+    }
+
+    BRepLib_MakeWire WM;
+    WM.Add(LSE);
+    TopoDS_Shape aShapeW;
+    if (WM.IsDone())
+      aShapeW = WM.Wire();
+    else
+      continue;
 
     Handle( HYDROData_PolylineXY ) aPolyline = 
       Handle( HYDROData_PolylineXY )::DownCast( theDocument->CreateObject( KIND_POLYLINEXY ) );
-    
+
     if( aPolyline.IsNull() )
       return false;
 
-    aPolyline->SetShape( aShape );
+    aPolyline->SetShape( aShapeW );
 
     int anIndex = 0;
-    QString aName = aBoundName;
+    QString aName = K;
     while( !theDocument->FindObjectByName( aName ).IsNull() )
     {
       anIndex++;
-      aName = aBoundName + "_" + QString::number( anIndex );
+      aName = K + "_" + QString::number( anIndex );
     }
     aPolyline->SetName( aName );
   }