]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Added "index" method for ObjectBrowser internal logic and better access
authormpv <mpv@opencascade.com>
Tue, 5 May 2015 09:57:13 +0000 (12:57 +0300)
committermpv <mpv@opencascade.com>
Tue, 5 May 2015 09:57:13 +0000 (12:57 +0300)
src/Model/Model_Document.cpp
src/Model/Model_Document.h
src/ModelAPI/ModelAPI_Document.h

index 836e289b2433e06499cf6ebd4b2a7b7da8dce0b1..0535ef7f206f3a1900186e2bc393123ce383286b 100644 (file)
@@ -877,6 +877,45 @@ std::shared_ptr<ModelAPI_Object> Model_Document::objectByName(
   return ObjectPtr();
 }
 
+const int Model_Document::index(std::shared_ptr<ModelAPI_Object> theObject)
+{
+  const std::string aGroupName = theObject->groupName();
+  if (aGroupName == ModelAPI_Feature::group()) {
+    int anIndex = 0;
+    TDF_ChildIDIterator aLabIter(featuresLabel(), TDataStd_Comment::GetID());
+    for (; aLabIter.More(); aLabIter.Next()) {
+      TDF_Label aFLabel = aLabIter.Value()->Label();
+      FeaturePtr aFeature = feature(aFLabel);
+      if (aFeature == theObject)
+        return anIndex;
+      if (aFeature->isInHistory())
+        anIndex++;
+    }
+  } else {
+    // comment must be in any feature: it is kind
+    int anIndex = 0;
+    TDF_ChildIDIterator aLabIter(featuresLabel(), TDataStd_Comment::GetID());
+    for (; aLabIter.More(); aLabIter.Next()) {
+      TDF_Label aFLabel = aLabIter.Value()->Label();
+      FeaturePtr aFeature = feature(aFLabel);
+      const std::list<std::shared_ptr<ModelAPI_Result> >& aResults = aFeature->results();
+      std::list<std::shared_ptr<ModelAPI_Result> >::const_iterator aRIter = aResults.begin();
+      for (; aRIter != aResults.cend(); aRIter++) {
+        if (*aRIter == theObject)
+          return anIndex;
+        if ((*aRIter)->groupName() == aGroupName) {
+          bool isIn = (*aRIter)->isInHistory() && !(*aRIter)->isConcealed();
+          if (isIn) {
+            anIndex++;
+          }
+        }
+      }
+    }
+  }
+  // not found
+  return -1;
+}
+
 int Model_Document::size(const std::string& theGroupID, const bool theHidden)
 {
   int aResult = 0;
index 453422ffcf9900e7f3cf846c1dd3ece339a3f5e8..a307e77966ac7406efbdbeb4ab63295ef56d2ad5 100644 (file)
@@ -106,6 +106,10 @@ class Model_Document : public ModelAPI_Document
   MODEL_EXPORT virtual std::shared_ptr<ModelAPI_Object> objectByName(
     const std::string& theGroupID, const std::string& theName);
 
+  //! Returns the object index in the group. Object must be visible. Otherwise returns -1.
+  //! \param theObject object of this document
+  //! \returns index started from zero, or -1 if object is invisible or belongs to another document
+  MODEL_EXPORT virtual const int index(std::shared_ptr<ModelAPI_Object> theObject);
 
   //! Adds a new sub-document by the identifier, or returns existing one if it is already exist
   MODEL_EXPORT virtual std::shared_ptr<ModelAPI_Document> subDocument(std::string theDocID);
index 8093123bd4ee523c3b2c9e5da27dd9150b952e91..9fe19db6675d1c287a184dfbc8741651ec2ecd5f 100644 (file)
@@ -79,6 +79,11 @@ public:
   virtual std::shared_ptr<ModelAPI_Object> objectByName(const std::string& theGroupID,
                                                     const std::string& theName) = 0;
 
+  //! Returns the object index in the group. Object must be visible. Otherwise returns -1.
+  //! \param theObject object of this document
+  //! \returns index started from zero, or -1 if object is invisible or belongs to another document
+  virtual const int index(std::shared_ptr<ModelAPI_Object> theObject) = 0;
+
   //! Returns the number of objects in the group of objects
   //! If theHidden is true, it counts also the features that are not in tree
   virtual int size(const std::string& theGroupID, const bool theHidden = false) = 0;