Salome HOME
Fix for the issue #686: now compounds produced by the Boolean operations can be corre...
[modules/shaper.git] / src / PartSetPlugin / PartSetPlugin_Remove.cpp
index 56881ca51238c578361d7126271ac2b3127684bb..d74666a65b208b0ee6bee701ff630f5e2942fd6d 100644 (file)
 #include <ModelAPI_ResultPart.h>
 #include <ModelAPI_Session.h>
 #include <ModelAPI_Feature.h>
+#include <ModelAPI_Tools.h>
 
 void PartSetPlugin_Remove::execute()
 {
   std::shared_ptr<ModelAPI_Session> aPManager = ModelAPI_Session::get();
   std::shared_ptr<ModelAPI_Document> aRoot = aPManager->moduleDocument();
-  std::shared_ptr<PartSetPlugin_Part> a;
-  for (int a = aRoot->size(ModelAPI_ResultPart::group()) - 1; a >= 0; a--) {
-    ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(
-        aRoot->object(ModelAPI_ResultPart::group(), a));
-    if (aPart && aPart->data()->document(ModelAPI_ResultPart::DOC_REF())->value() == document()) {
-      FeaturePtr aFeature = aRoot->feature(aPart);
-      if (aFeature) {
-        // do remove
-        aPart->data()->document(ModelAPI_ResultPart::DOC_REF())->value()->close();
-        std::set<std::shared_ptr<ModelAPI_Feature> > aRefFeatures;
-        aRoot->refsToFeature(aFeature, aRefFeatures);
-        if (aRefFeatures.empty())
-          aRoot->removeFeature(aFeature);
-      }
+  DocumentPtr aThisDoc = document();
+  ResultPtr aPart = ModelAPI_Tools::findPartResult(aRoot, aThisDoc);
+  if (aPart.get()) {
+    FeaturePtr aFeature = aRoot->feature(aPart);
+    if (aFeature) {
+      // do remove
+      aPart->data()->document(ModelAPI_ResultPart::DOC_REF())->value()->close();
+      std::set<std::shared_ptr<ModelAPI_Feature> > aRefFeatures;
+      aRoot->refsToFeature(aFeature, aRefFeatures);
+      if (aRefFeatures.empty())
+        aRoot->removeFeature(aFeature);
     }
   }
 }