]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #851 Show only action should not hide sketch entities when the sketch operation...
authornds <nds@opencascade.com>
Fri, 28 Aug 2015 18:56:24 +0000 (21:56 +0300)
committernds <nds@opencascade.com>
Fri, 28 Aug 2015 18:56:24 +0000 (21:56 +0300)
src/ModuleBase/ModuleBase_IModule.cpp
src/ModuleBase/ModuleBase_IModule.h
src/PartSet/PartSet_Module.cpp
src/PartSet/PartSet_Module.h
src/PartSet/PartSet_SketcherMgr.cpp
src/PartSet/PartSet_SketcherMgr.h
src/XGUI/XGUI_Workshop.cpp

index 7de4b0ee5e0e5912510d5d0aae8bd9e452728fe9..cd4375789298cd7a9a77aeec812df9c67cac27f3 100644 (file)
@@ -115,6 +115,11 @@ void ModuleBase_IModule::actionCreated(QAction* theFeature)
   connect(theFeature, SIGNAL(triggered(bool)), this, SLOT(onFeatureTriggered()));
 }
 
+bool ModuleBase_IModule::canEraseObject(const ObjectPtr& theObject) const
+{
+  return true;
+}
+
 bool ModuleBase_IModule::canDisplayObject(const ObjectPtr& theObject) const
 {
   return true;
index 79b702e3eaf56d614e5ded29926be6eea73998f5..e090d3882145e3934f391fbfd015bb419755734c 100644 (file)
@@ -130,6 +130,10 @@ class MODULEBASE_EXPORT ModuleBase_IModule : public QObject
   /// \return a boolean value\r
   virtual bool canCommitOperation() const;\r
 \r
+  /// Returns whether the object can be erased. The default realization returns true.\r
+  /// \param theObject a model object\r
+  virtual bool canEraseObject(const ObjectPtr& theObject) const;\r
+\r
   /// Returns whether the object can be displayed. The default realization returns true.\r
   /// \param theObject a model object\r
   virtual bool canDisplayObject(const ObjectPtr& theObject) const;\r
index ed2c71c730c24e83e761efe59ab393777029273d..c863177fb495c1dceed15c97976b1fdaeaac5f83 100755 (executable)
@@ -363,6 +363,12 @@ bool PartSet_Module::canCommitOperation() const
   return mySketchMgr->canCommitOperation();
 }
 
+bool PartSet_Module::canEraseObject(const ObjectPtr& theObject) const
+{
+  // the sketch manager put the restriction to the objects erase
+  return mySketchMgr->canEraseObject(theObject);
+}
+
 bool PartSet_Module::canDisplayObject(const ObjectPtr& theObject) const
 {
   // the sketch manager put the restriction to the objects display
index 9611ee62eaa2fbfc87f8ef8a696ee797a10a2d17..1fb0d38815d76979278b15c96ec1abda2c0dfb15 100644 (file)
@@ -110,6 +110,11 @@ public:
   /// \return a boolean value
   virtual bool canCommitOperation() const;
 
+  /// Returns whether the object can be erased at the bounds of the active operation.
+  /// The sub-objects of the current operation can not be erased
+  /// \param theObject a model object
+  virtual bool canEraseObject(const ObjectPtr& theObject) const;
+
   /// Returns whether the object can be displayed at the bounds of the active operation.
   /// Display only current operation results for usual operation and ask the sketcher manager
   /// if it is a sketch operation
index b7a89b356788e65e553f59bc3477b163a6b50717..f436aa208f654588039590b0a825a72802974958 100644 (file)
@@ -911,6 +911,28 @@ bool PartSet_SketcherMgr::canCommitOperation() const
   return aCanCommit;
 }
 
+bool PartSet_SketcherMgr::canEraseObject(const ObjectPtr& theObject) const
+{
+  bool aCanErase = true;
+  // when the sketch operation is active, results of sketch sub-feature can not be hidden
+  if (myCurrentSketch.get()) {
+    ResultPtr aResult = std::dynamic_pointer_cast<ModelAPI_Result>(theObject);
+    if (aResult.get()) {
+      // Display sketcher objects
+      for (int i = 0; i < myCurrentSketch->numberOfSubs() && aCanErase; i++) {
+
+        FeaturePtr aFeature = myCurrentSketch->subFeature(i);
+        std::list<ResultPtr> aResults = aFeature->results();
+        std::list<ResultPtr>::const_iterator anIt;
+        for (anIt = aResults.begin(); anIt != aResults.end() && aCanErase; ++anIt) {
+          aCanErase = *anIt != aResult;
+        }
+      }
+    }
+  }
+  return aCanErase;
+}
+
 bool PartSet_SketcherMgr::canDisplayObject(const ObjectPtr& theObject) const
 {
   bool aCanDisplay = true;
index e108ff9997c949eafbed24ed28ff3139ffc97bd5..cadfd32e53c924f6a6709994c4371914a2e7421b 100644 (file)
@@ -139,6 +139,11 @@ public:
   /// \return a boolean value
   bool canCommitOperation() const;
 
+  /// Returns whether the object can be erased at the bounds of the active operation.
+  /// Sketch sub-entities can not be erased during the sketch operation
+  /// \param theObject a model object
+  bool canEraseObject(const ObjectPtr& theObject) const;
+
   /// Returns whether the object can be displayed at the bounds of the active operation.
   /// Display only current operation results for usual operation and ask the sketcher manager
   /// if it is a sketch operation
index 02c06f646b2f216b41ef5a0a7d3834bd60ffc1c8..ab38ca8a1020e0daa6972f7f9db4395528c7417d 100644 (file)
@@ -995,8 +995,10 @@ void XGUI_Workshop::onContextMenuCommand(const QString& theId, bool isChecked)
     setDisplayMode(aObjects, XGUI_Displayer::Wireframe);
   else if (theId == "HIDEALL_CMD") {
     QObjectPtrList aList = myDisplayer->displayedObjects();
-    foreach (ObjectPtr aObj, aList)
-      aObj->setDisplayed(false);
+    foreach (ObjectPtr aObj, aList) {
+      if (module()->canEraseObject(aObj))
+        aObj->setDisplayed(false);
+    }
     Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY));
   }
 }
@@ -1432,8 +1434,10 @@ void XGUI_Workshop::showOnlyObjects(const QObjectPtrList& theList)
 {
   // Hide all displayed objects
   QObjectPtrList aList = myDisplayer->displayedObjects();
-  foreach (ObjectPtr aObj, aList)
-    aObj->setDisplayed(false);
+  foreach (ObjectPtr aObj, aList) {
+    if (module()->canEraseObject(aObj))
+      aObj->setDisplayed(false);
+  }
 
   // Show only objects from the list
   foreach (ObjectPtr aObj, theList) {