]> SALOME platform Git repositories - modules/smesh.git/blobdiff - src/SMESHGUI/SMESHGUI_MeshUtils.cxx
Salome HOME
Merge from V5_1_5_BR branch 12/11/2010
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_MeshUtils.cxx
index 0763be3ed52c27879096d76939e1e2eddde899af..bf53ecd7f45494486cf94181afc7e8a622650530 100644 (file)
@@ -82,4 +82,44 @@ namespace SMESH
     }
     return baseName;
   }
+
+  QString UniqueName(const QString& theBaseName, _PTR(SObject) theParent, const QString& thePostfix)
+  {
+    QString baseName = thePostfix.isEmpty() ? 
+      theBaseName : theBaseName + "_" + thePostfix;
+    QString name = baseName;
+    if ( _PTR(Study) aStudy = GetActiveStudyDocument() ) {
+      _PTR(SObject) p = theParent;
+      if ( !p ) p = aStudy->FindComponent( "SMESH" );
+      if ( p ) {
+       _PTR(ChildIterator) iter = aStudy->NewChildIterator( p );
+       int idx = 0;
+       while( true ) {
+         bool found = false;
+         for ( ; iter->More(); iter->Next() ) {
+           _PTR(SObject) so = iter->Value();
+           if ( !so ) continue; // skip bad objects
+           _PTR(SObject) ref;
+           if ( so->ReferencedObject( ref ) ) continue; // skip references
+           QString n = so->GetName().c_str();
+           if ( !n.isEmpty() && n == name ) {
+             QStringList names = name.split("_", QString::KeepEmptyParts);
+             if ( names.count() > 0 ) {
+               bool ok;
+               names.last().toInt( &ok );
+               if ( ok )
+                 names.removeLast();
+             }
+             names.append( QString::number( ++idx ) );
+             name = names.join( "_" );
+             found = true;
+             break;
+           }
+         }
+         if ( !found ) break;
+       }
+      }
+    }
+    return name;
+  }
 } // end of namespace SMESH