]> SALOME platform Git repositories - modules/shaper.git/blobdiff - src/PartSet/PartSet_MenuMgr.cpp
Salome HOME
Fix for the issue #686: now compounds produced by the Boolean operations can be corre...
[modules/shaper.git] / src / PartSet / PartSet_MenuMgr.cpp
index e453a552554d43bf271df38a0370c5203fbd917c..3163169774391d660c1eca14389ec851d2c37f9b 100644 (file)
@@ -9,6 +9,8 @@
 #include "PartSet_SketcherMgr.h"
 #include "PartSet_Tools.h"
 
+#include <PartSetPlugin_Part.h>
+
 #include <GeomAPI_Pnt2d.h>
 #include <GeomDataAPI_Point2D.h>
 
@@ -170,7 +172,7 @@ bool PartSet_MenuMgr::addViewerMenu(QMenu* theMenu, const QMap<QString, QAction*
   bool hasAttribute = false;
   bool hasFeature = false;
 
-  QList<ModuleBase_ViewerPrs> aPrsList = aSelection->getSelected();
+  QList<ModuleBase_ViewerPrs> aPrsList = aSelection->getSelected(ModuleBase_ISelection::AllControls);
   TopoDS_Shape aShape;
   ResultPtr aResult;
   FeaturePtr aFeature;
@@ -470,17 +472,31 @@ void PartSet_MenuMgr::onActivatePart(bool)
 {
   QObjectPtrList aObjects = myModule->workshop()->selection()->selectedObjects();
   if (aObjects.size() > 0) {
-    ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(aObjects.first());
-    if (aPart) {
-      aPart->activate();
+    ObjectPtr aObj = aObjects.first();
+    ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(aObj);
+    if (!aPart.get()) {
+      FeaturePtr aPartFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(aObj);
+      if (aPartFeature.get() && (aPartFeature->getKind() == PartSetPlugin_Part::ID())) {
+        aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(aPartFeature->firstResult());
+      }
     }
+    if (aPart.get())
+      aPart->activate();
   }
 }
 
 void PartSet_MenuMgr::onActivatePartSet(bool)
 {
   SessionPtr aMgr = ModelAPI_Session::get();
+  bool isNewTransaction = !aMgr->isOperation();
+  // activation may cause changes in current features in document, so it must be in transaction
+  if (isNewTransaction) {
+    aMgr->startOperation("Activation");
+  }
   aMgr->setActiveDocument(aMgr->moduleDocument());
+  if (isNewTransaction) {
+    aMgr->finishOperation();
+  }
 }
 
 void PartSet_MenuMgr::onEdit(bool)