#include <QStringList>
#include <QColor>
#include <Geom_BSplineCurve.hxx>
+#include <TopTools_IndexedMapOfShape.hxx>
+#include <BRepLib_MakeWire.hxx>
-#define _DEVDEBUG_
+//#define _DEVDEBUG_
#include "HYDRO_trace.hxx"
#include <BRepTools.hxx>
#include <sstream>
}
QString aName = theName;
if( aName.isEmpty() )
- aName = "merged";
+ {
+ aName = "merged";
+ int anIndex = 1;
+ QString aNewName = aName + "_" + QString::number(anIndex);
+ while (!theDoc->FindObjectByName(aNewName).IsNull()) // the object with such a name is not found
+ {
+ anIndex++;
+ aNewName = aName + "_" + QString::number(anIndex);
+ }
+ aName = aNewName;
+ }
+
aNewPolyline->SetName(aName);
+ aNewPolyline->Update();
return true;
}
}
CreatePolylines( theDoc, thePolyline, aResult, true );
- //CreatePolylinesSplit( theDoc, thePolyline, aResult, true );
return true;
}
return false;
aPolyline->ImportShape(theShapes[i], false, theOldPolyline, false);
- //aPolyline->SetShape( theShapes[i] );
-
if( isUseIndices )
{
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);
+ }
+
+
+ TopoDS_Shape aShapeOut;
+ if (LSE.Extent() == 1)
+ {
+ aShapeOut = LSE.First();
+ }
+ else if (LSE.Extent() > 1)
+ {
+ BRepLib_MakeWire WM;
+ WM.Add(LSE);
+ if (WM.IsDone())
+ aShapeOut = WM.Wire();
+ else
+ continue;
+ }
+ else continue;
Handle( HYDROData_PolylineXY ) aPolyline =
Handle( HYDROData_PolylineXY )::DownCast( theDocument->CreateObject( KIND_POLYLINEXY ) );
-
+
if( aPolyline.IsNull() )
return false;
- aPolyline->SetShape( aShape );
+ aPolyline->SetShape( aShapeOut );
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 );
}