Salome HOME
Correction of icon
[modules/shaper.git] / src / PartSetPlugin / PartSetPlugin_Remove.cpp
index 5494949d8337448b660da84d563b46943b42ff1a..0c47368fc1eeb4ea8c56f0a99c44e78b33c3eb1a 100644 (file)
@@ -1,3 +1,5 @@
+// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
+
 // File:        PartSetPlugin_Remove.cxx
 // Created:     20 May 2014
 // Author:      Mikhail PONIKAROV
 #include <ModelAPI_Data.h>
 #include <ModelAPI_AttributeDocRef.h>
 #include <ModelAPI_ResultPart.h>
+#include <ModelAPI_Session.h>
+#include <ModelAPI_Feature.h>
 
 void PartSetPlugin_Remove::execute()
 {
-  boost::shared_ptr<ModelAPI_Session> aPManager = ModelAPI_Session::get();
-  boost::shared_ptr<ModelAPI_Document> aRoot = aPManager->moduleDocument();
-  boost::shared_ptr<ModelAPI_Document> aCurrent;
-  boost::shared_ptr<PartSetPlugin_Part> a;
+  std::shared_ptr<ModelAPI_Session> aPManager = ModelAPI_Session::get();
+  std::shared_ptr<ModelAPI_Document> aRoot = aPManager->moduleDocument();
+  std::shared_ptr<ModelAPI_Document> aCurrent;
+  std::shared_ptr<PartSetPlugin_Part> a;
   for (int a = aRoot->size(ModelAPI_ResultPart::group()) - 1; a >= 0; a--) {
-    ResultPartPtr aPart = boost::dynamic_pointer_cast<ModelAPI_ResultPart>(
+    ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(
         aRoot->object(ModelAPI_ResultPart::group(), a));
     if (aPart
         && aPart->data()->document(ModelAPI_ResultPart::DOC_REF())->value()
@@ -25,7 +29,10 @@ void PartSetPlugin_Remove::execute()
       if (aFeature) {
         // do remove
         aPart->data()->document(ModelAPI_ResultPart::DOC_REF())->value()->close();
-        aRoot->removeFeature(aFeature);
+        std::set<std::shared_ptr<ModelAPI_Feature> > aRefFeatures;
+        aRoot->refsToFeature(aFeature, aRefFeatures);
+        if (aRefFeatures.empty())
+          aRoot->removeFeature(aFeature);
       }
     }
   }