#include <QStringList>
#include <QColor>
#include <Geom_BSplineCurve.hxx>
+#include <TopTools_IndexedMapOfShape.hxx>
+#include <BRepLib_MakeWire.hxx>
#define _DEVDEBUG_
#include "HYDRO_trace.hxx"
QList<TopoDS_Shape> aBoundShapes;
QStringList aBoundNames;
+ QMap<QString, TopTools_IndexedMapOfShape> aNameToShMap;
theObject->GetBoundaries( aBoundShapes, aBoundNames );
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 );
}