Salome HOME
sinusX p.4
[modules/hydro.git] / src / HYDROData / HYDROData_SinusX.cxx
index 5c0c6f5a9fbecd8fd4359515325d64a7fc2a3699..da8e48b1fdf9366ce1d0e08fcff78b5e6b34afd9 100644 (file)
@@ -27,6 +27,7 @@
 #include <HYDROData_Entity.h>
 #include <HYDROData_Document.h>
 #include <HYDROData_Profile.h>
+#include <HYDROData_Iterator.h>
 
 #include <gp_XYZ.hxx>
 #include <gp_XY.hxx>
@@ -44,6 +45,50 @@ HYDROData_SinusX::~HYDROData_SinusX()
 {
 }
 
+void HYDROData_SinusX::CollectExistingNames(Handle_HYDROData_Document theDocument)
+{
+  HYDROData_Iterator anIter( theDocument );
+  int anInd = 0;
+  myExistingNames.clear();
+  std::vector<int> anAllowedIndexes;
+  for( ; anIter.More(); anIter.Next() )
+    myExistingNames.push_back(anIter.Current()->GetName());
+}
+
+QString HYDROData_SinusX::GetName(const QString& theName)
+{
+  if (myExistingNames.contains(theName))
+  { 
+    QString aName = theName; 
+    while (myExistingNames.contains(aName)) 
+    {
+      QStringList aList = aName.split("_");
+      int aLastInd = aName.lastIndexOf("_");
+      bool IsNum = false; 
+      int anInd = -1;
+      anInd = aList.last().toInt(&IsNum);
+      if (IsNum)
+      {
+        aName = aName.left(aLastInd) + "_";
+        /*for (int i = 0; i < aList.size() - 1; i++ )
+          aName += aList[i];*/
+        aName+= QString::number(++anInd);
+      }
+      else
+        aName = theName + "_0";
+    }
+
+    myExistingNames.push_back(aName);
+    return aName;
+  }
+  else
+  {
+    myExistingNames.push_back(theName);
+    return theName;
+  }
+
+}
+
 
 bool HYDROData_SinusX::Import(const QString& theFilePath, Handle(HYDROData_Document) theDocument, NCollection_Sequence<Handle_HYDROData_Entity>& theEntities)
 {
@@ -62,6 +107,7 @@ bool HYDROData_SinusX::Import(const QString& theFilePath, Handle(HYDROData_Docum
 
     Parse(aFile);
    
+    CollectExistingNames(theDocument);
     SXToHydro(theDocument, theEntities);
     
     aFile.close();
@@ -85,7 +131,7 @@ void HYDROData_SinusX::SXToHydro(Handle(HYDROData_Document) theDocument, NCollec
         aAPoints.Append(gp_XYZ (myCurveBlocks[i].myXYZPoints[j]));
 
       aBath->SetAltitudePoints(aAPoints);
-      aBath->SetName(myCurveBlocks[i].myName);
+      aBath->SetName(GetName(myCurveBlocks[i].myName + "_bath"));
       theEntities.Append(aBath);
     }
     if (myCurveBlocks[i].myType == 1 || myCurveBlocks[i].myType == 3)
@@ -101,9 +147,9 @@ void HYDROData_SinusX::SXToHydro(Handle(HYDROData_Document) theDocument, NCollec
       aProfileUZ->CalculateAndAddPoints(aPoints, aPolyXY);
       Handle(HYDROData_Profile) aProfile = Handle(HYDROData_Profile)::DownCast( theDocument->CreateObject( KIND_PROFILE ) );
       aProfile->SetParametricPoints(aProfileUZ->GetPoints());
-      aPolyXY->SetName(myCurveBlocks[i].myName + "_polyXY");
-      aProfileUZ->SetName(myCurveBlocks[i].myName + "_profileUZ");
-      aProfile->SetName(myCurveBlocks[i].myName + "_profile");
+      aPolyXY->SetName(GetName(myCurveBlocks[i].myName + "_polyXY"));
+      aProfileUZ->SetName(GetName(myCurveBlocks[i].myName + "_profileUZ"));
+      aProfile->SetName(GetName(myCurveBlocks[i].myName + "_profile"));
       theEntities.Append(aPolyXY);
       theEntities.Append(aProfileUZ);
       theEntities.Append(aProfile);
@@ -127,7 +173,7 @@ void HYDROData_SinusX::SXToHydro(Handle(HYDROData_Document) theDocument, NCollec
             aProfile->SetRightPoint(gp_XY(myCurveBlocks[i].myAdditionalCurveInfo[2], myCurveBlocks[i].myAdditionalCurveInfo[3]));
             aProfile->Update();
           }
-          aProfile->SetName(myCurveBlocks[i].myName + "_profile");
+          aProfile->SetName(GetName(myCurveBlocks[i].myName + "_profile"));
           theEntities.Append(aProfile);
         }
       }
@@ -138,7 +184,7 @@ void HYDROData_SinusX::SXToHydro(Handle(HYDROData_Document) theDocument, NCollec
         for (size_t j = 0; j < myCurveBlocks[i].myXYZPoints.size(); j++)
           aPointList.Append(myCurveBlocks[i].myXYZPoints[j]);
         aProfile->SetProfilePoints(aPointList);
-        aProfile->SetName(myCurveBlocks[i].myName + "_profile");
+        aProfile->SetName(GetName(myCurveBlocks[i].myName + "_profile"));
         theEntities.Append(aProfile);
       }
     }
@@ -147,8 +193,6 @@ void HYDROData_SinusX::SXToHydro(Handle(HYDROData_Document) theDocument, NCollec
 }
  
 
-
-
 bool HYDROData_SinusX::Parse(QFile& theFile)
 {
   if ( !theFile.isOpen() )