]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Added objectByName method
authormpv <mpv@opencascade.com>
Tue, 31 Mar 2015 07:11:14 +0000 (10:11 +0300)
committermpv <mpv@opencascade.com>
Tue, 31 Mar 2015 07:11:14 +0000 (10:11 +0300)
src/Model/Model_Document.cpp
src/Model/Model_Document.h
src/ModelAPI/ModelAPI_Document.h

index 0d5a39941290618b33ec3e5bbba5e3f945633225..c2da1a4799feb204aad3cc3a15cf99127ad447a9 100644 (file)
@@ -821,6 +821,37 @@ ObjectPtr Model_Document::object(const std::string& theGroupID, const int theInd
   return ObjectPtr();
 }
 
+std::shared_ptr<ModelAPI_Object> Model_Document::objectByName(
+    const std::string& theGroupID, const std::string& theName)
+{
+  if (theGroupID == 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 && aFeature->name() == theName)
+        return aFeature;
+    }
+  } 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)->groupName() == theGroupID && (*aRIter)->data()->name() == theName)
+          return *aRIter;
+      }
+    }
+  }
+  // not found
+  return ObjectPtr();
+}
+
 int Model_Document::size(const std::string& theGroupID, const bool theHidden)
 {
   int aResult = 0;
index 7ec9e073ec262be0a5a82217f35cabf9c7f15418..ef7c98a109f9f3d3113cce26cbd4cf2c6342af18 100644 (file)
@@ -98,6 +98,14 @@ class Model_Document : public ModelAPI_Document
   //! \param theLabel base label of the object
   MODEL_EXPORT virtual ObjectPtr object(TDF_Label theLabel);
 
+  //! Returns the first found object in the group by the object name
+  //! \param theGroupID group that contains an object
+  //! \param theName name of the object to search
+  //! \returns null if such object is not found
+  MODEL_EXPORT virtual std::shared_ptr<ModelAPI_Object> objectByName(
+    const std::string& theGroupID, const std::string& theName);
+
+
   //! 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 9ce3ccd48d6551ade979980b86edbd5fb28ebe20..cbb1d5b01288ab45c130724502b9b8c8839544cb 100644 (file)
@@ -71,6 +71,13 @@ public:
                                                     const int theIndex,
                                                     const bool theHidden = false) = 0;
 
+  //! Returns the first found object in the group by the object name
+  //! \param theGroupID group that contains an object
+  //! \param theName name of the object to search
+  //! \returns null if such object is not found
+  virtual std::shared_ptr<ModelAPI_Object> objectByName(const std::string& theGroupID,
+                                                    const std::string& theName) = 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;