Salome HOME
Issue 1299 Angle constraint: support of additional and complementary angles. Test...
[modules/shaper.git] / src / PartSetPlugin / PartSetPlugin_Part.cpp
index 04b6ddd6ef97461c7c2de13f7178078f20c79901..31759862f1fe20f53d1bc72133dc191f94c8772e 100644 (file)
@@ -31,8 +31,8 @@ void PartSetPlugin_Part::execute()
     // do not activate part by simple execution if it is not loaded yet: it must be explicitly
     // activated for this
     if (!ModelAPI_Session::get()->isLoadByDemand(aResult->data()->name())) {
-      // On undo/redo creation of the part result the Object Borwser must get creation event
-      // earlier that activation of this part event (otherwise the crash is producted)
+      // On undo/redo creation of the part result the Object Browser must get creation event
+      // earlier that activation of this part event (otherwise the crash is produced)
       // So, send a creation event earlier, without any grouping
       static Events_ID aCreateID = Events_Loop::eventByName(EVENT_OBJECT_CREATED);
       ModelAPI_EventCreator::get()->sendUpdated(aResult, aCreateID, false);
@@ -55,31 +55,30 @@ std::shared_ptr<ModelAPI_Feature> PartSetPlugin_Part::addFeature(std::string the
   ResultPartPtr aResult = std::dynamic_pointer_cast<ModelAPI_ResultPart>(firstResult());
   if (aResult.get()) {
     DocumentPtr aDoc = aResult->partDoc();
-    if (aDoc.get())
+    if (aDoc.get() && aDoc->isOpened())
       return aDoc->addFeature(theID);
   }
   return FeaturePtr();
 }
 
-int PartSetPlugin_Part::numberOfSubs() const
+int PartSetPlugin_Part::numberOfSubs(bool forTree) const
 {
   ResultPartPtr aResult = std::dynamic_pointer_cast<ModelAPI_ResultPart>(firstResult());
   if (aResult.get()) {
     DocumentPtr aDoc = aResult->partDoc();
-    if (aDoc.get())
-      return aDoc->size(ModelAPI_Feature::group());
+    if (aDoc.get() && aDoc->isOpened())
+      return aDoc->numInternalFeatures();
   }
   return 0;
 }
 
-std::shared_ptr<ModelAPI_Feature> PartSetPlugin_Part::subFeature(const int theIndex) const
+std::shared_ptr<ModelAPI_Feature> PartSetPlugin_Part::subFeature(const int theIndex, bool forTree)
 {
   ResultPartPtr aResult = std::dynamic_pointer_cast<ModelAPI_ResultPart>(firstResult());
   if (aResult.get()) {
     DocumentPtr aDoc = aResult->partDoc();
-    if (aDoc.get()) {
-      return std::dynamic_pointer_cast<ModelAPI_Feature>(
-        aDoc->object(ModelAPI_Feature::group(), theIndex));
+    if (aDoc.get() && aDoc->isOpened()) {
+      return aDoc->internalFeature(theIndex);
     }
   }
   return FeaturePtr();
@@ -90,7 +89,7 @@ int PartSetPlugin_Part::subFeatureId(const int theIndex) const
   ResultPartPtr aResult = std::dynamic_pointer_cast<ModelAPI_ResultPart>(firstResult());
   if (aResult.get()) {
     DocumentPtr aDoc = aResult->partDoc();
-    if (aDoc.get()) {
+    if (aDoc.get() && aDoc->isOpened()) {
       return aDoc->object(ModelAPI_Feature::group(), theIndex)->data()->featureId();
     }
   }
@@ -102,7 +101,7 @@ bool PartSetPlugin_Part::isSub(ObjectPtr theObject) const
   ResultPartPtr aResult = std::dynamic_pointer_cast<ModelAPI_ResultPart>(firstResult());
   if (aResult.get()) {
     DocumentPtr aDoc = aResult->partDoc();
-    return document() == aDoc;
+    return theObject->document() == aDoc;
   }
   return false;
 }
@@ -112,7 +111,7 @@ void PartSetPlugin_Part::removeFeature(std::shared_ptr<ModelAPI_Feature> theFeat
   ResultPartPtr aResult = std::dynamic_pointer_cast<ModelAPI_ResultPart>(firstResult());
   if (aResult.get()) {
     DocumentPtr aDoc = aResult->partDoc();
-    if (aDoc.get())
+    if (aDoc.get() && aDoc->isOpened())
       aDoc->removeFeature(theFeature);
   }
 }