]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
"Delete" in sketch operation active should not delete objects from other sketches.
authornds <natalia.donis@opencascade.com>
Wed, 15 Apr 2015 17:54:48 +0000 (20:54 +0300)
committernds <natalia.donis@opencascade.com>
Wed, 15 Apr 2015 17:54:48 +0000 (20:54 +0300)
Undo/Redo does not work correctly after this delete. The objects from another sketch are visualized as objects of the current sketch.

src/PartSet/PartSet_Module.cpp
src/PartSet/PartSet_SketcherMgr.cpp
src/PartSet/PartSet_SketcherMgr.h

index a38f41b65a24baa598eafd38c2526b9f120fbaae..33df2709188e2539bde7f5c56ee649016530ce51 100644 (file)
@@ -485,6 +485,20 @@ bool PartSet_Module::deleteObjects()
   if (aSelectedObj.count() == 0)
     return false;
 
+  // avoid delete of the objects, which are not belong to the current sketch
+  // in order to do not delete results of other sketches
+  QObjectPtrList aSketchObjects;
+  QObjectPtrList::const_iterator anIt = aSelectedObj.begin(), aLast = aSelectedObj.end();
+  for ( ; anIt != aLast; anIt++) {
+    ObjectPtr anObject = *anIt;
+    if (mySketchMgr->isObjectOfSketch(anObject))
+      aSketchObjects.append(anObject);
+  }
+  // if the selection contains only local selected presentations from other sketches,
+  // the Delete operation should not be done at all
+  if (aSketchObjects.size() == 0)
+    return true;
+
   // the active nested sketch operation should be aborted unconditionally
   if (isNestedOp)
     anOperation->abort();
@@ -499,7 +513,7 @@ bool PartSet_Module::deleteObjects()
   // when sketch operation is active
   std::set<FeaturePtr> anIgnoredFeatures;
   anIgnoredFeatures.insert(mySketchMgr->activeSketch());
-  aWorkshop->deleteFeatures(aSelectedObj, anIgnoredFeatures);
+  aWorkshop->deleteFeatures(aSketchObjects, anIgnoredFeatures);
   
   // 5. stop operation
   aWorkshop->displayer()->updateViewer();
index 2ed91dd5e99bad46db542b5191d6473921f711bd..cb1250a763fb7e815db580ce70738843167e5e13 100644 (file)
@@ -851,6 +851,20 @@ bool PartSet_SketcherMgr::canDisplayObject(const ObjectPtr& theObject) const
   return aCanDisplay;
 }
 
+bool PartSet_SketcherMgr::isObjectOfSketch(const ObjectPtr& theObject) const
+{
+  bool isFoundObject = false;
+
+  FeaturePtr anObjectFeature = ModelAPI_Feature::feature(theObject);
+  if (anObjectFeature.get()) {
+    int aSize = myCurrentSketch->numberOfSubs();
+    for (int i = 0; i < myCurrentSketch->numberOfSubs() && !isFoundObject; i++) {
+      FeaturePtr aCurrentFeature = myCurrentSketch->subFeature(i);
+      isFoundObject = myCurrentSketch->subFeature(i) == anObjectFeature;
+    }
+  }
+  return isFoundObject;
+}
 
 void PartSet_SketcherMgr::onPlaneSelected(const std::shared_ptr<GeomAPI_Pln>& thePln)
 {
index ef2bf9c485fcf98a204f9d2cf4e6e11ae4715e53..e1762376bb70615cb1deccc9f87df5940ad51db2 100644 (file)
@@ -142,6 +142,11 @@ public:
   /// Returns state of constraints showing flag 
   bool isConstraintsShown() const { return myIsConstraintsShown; }
 
+  /// Returns true if the object is a current sketch sub feature of a result of the feature
+  /// \param theObject an object
+  /// \return boolean value
+  bool isObjectOfSketch(const ObjectPtr& theObject) const;
+
   /// Saves the current selection in the viewer into an internal container
   /// It obtains the selected attributes. The highlighted objects can be processes as the selected ones
   /// \param theHighlightedUse a boolean flag