]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Fixes for issue #1936, issue #1956, issue #2035. Undo of Part delete restores the...
authormpv <mpv@opencascade.com>
Wed, 5 Apr 2017 11:29:53 +0000 (14:29 +0300)
committermpv <mpv@opencascade.com>
Wed, 5 Apr 2017 11:29:53 +0000 (14:29 +0300)
src/Model/Model_Document.cpp
src/Model/Model_Document.h
src/Model/Model_Objects.cpp
src/Model/Model_Objects.h
src/ModelAPI/ModelAPI_Document.h
src/PartSetPlugin/PartSetPlugin_Part.cpp
src/PartSetPlugin/PartSetPlugin_Part.h

index 7c93ab7b596a35df445dca43627dc1d615ac12cd..bf263768d895e06125e3fbc25ab5c9a589b4dab9 100755 (executable)
@@ -1629,3 +1629,9 @@ void Model_Document::restoreNodesState(std::list<bool>& theStates) const
     }
   }
 }
+
+void Model_Document::eraseAllFeatures()
+{
+  if (myObjs)
+    myObjs->eraseAllFeatures();
+}
index 639d84b0b572c84c30f2fea5de99b22699e14c92..6d9c58b98969e353bc5d98dd55bdb7e4a2c17bc1 100644 (file)
@@ -225,6 +225,10 @@ class Model_Document : public ModelAPI_Document
   /// Returns true if theLater is in history of features creation later than theCurrent
   MODEL_EXPORT virtual bool isLater(FeaturePtr theLater, FeaturePtr theCurrent) const;
 
+  /// Just removes all features without touching the document data (to be able undo)
+  MODEL_EXPORT virtual void eraseAllFeatures();
+
+
  protected:
   //! Returns (creates if needed) the general label
   TDF_Label generalLabel() const;
index f635941b3aeecb60a10eb7658f76405799351d1c..b0964875d73c03b3de14be09f3ee13e0f217bcc9 100644 (file)
@@ -269,6 +269,13 @@ void Model_Objects::removeFeature(FeaturePtr theFeature)
   }
 }
 
+void Model_Objects::eraseAllFeatures()
+{
+  ModelAPI_EventCreator::get()->sendDeleted(myDoc, ModelAPI_Feature::group());
+  myFeatures.Clear(); // just remove features without modification of DS
+  updateHistory(ModelAPI_Feature::group());
+}
+
 void Model_Objects::moveFeature(FeaturePtr theMoved, FeaturePtr theAfterThis)
 {
   TDF_Label aFeaturesLab = featuresLabel();
@@ -667,7 +674,7 @@ void Model_Objects::synchronizeFeatures(
       aFeature = myFeatures.Find(aFeatureLabel);
       aKeptFeatures.insert(aFeature);
       if (anUpdatedMap.Contains(aFeatureLabel)) {
-        if (!theOpen) { // on abort/undo/redo reinitialize attributes is something is changed
+        if (!theOpen) { // on abort/undo/redo reinitialize attributes if something is changed
           std::list<std::shared_ptr<ModelAPI_Attribute> > anAttrs =
             aFeature->data()->attributes("");
           std::list<std::shared_ptr<ModelAPI_Attribute> >::iterator anAttr = anAttrs.begin();
@@ -1073,7 +1080,7 @@ void Model_Objects::updateResults(FeaturePtr theFeature, std::set<FeaturePtr>& t
   theProcessed.insert(theFeature);
   // for composites update subs recursively (sketch elements results are needed for the sketch)
   CompositeFeaturePtr aComp = std::dynamic_pointer_cast<ModelAPI_CompositeFeature>(theFeature);
-  if (aComp.get()) {
+  if (aComp.get() && aComp->getKind() != "Part") { // don't go inside of parts sub-features
     // update subs of composites first
     int aSubNum = aComp->numberOfSubs();
     for(int a = 0; a < aSubNum; a++) {
index c4bc24476d0c6debef193b6edfa8bee62ccd55eb..45b2ed0ba0b38009ea7ff0f23a5d57b0c60651cb 100644 (file)
@@ -212,6 +212,9 @@ class Model_Objects
   void synchronizeBackRefsForObject(
     const std::set<std::shared_ptr<ModelAPI_Attribute>>& theNewRefs, ObjectPtr theObject);
 
+  /// Just removes all features without touching the document data (to be able undo)
+  virtual void eraseAllFeatures();
+
  private:
   TDF_Label myMain; ///< main label of the data storage
 
index 427b332671e649461e7bef7ddad2798e9d2511f9..3d4d75f7f70422e6473f9d55da7277cf2b07c682 100644 (file)
@@ -184,6 +184,9 @@ public:
   /// Appends the values to theStates list.
   MODELAPI_EXPORT virtual void restoreNodesState(std::list<bool>& theStates) const = 0;
 
+  /// Just removes all features without touching the document data (to be able undo)
+  MODELAPI_EXPORT virtual void eraseAllFeatures() = 0;
+
 protected:
   //! Only for SWIG wrapping it is here
   MODELAPI_EXPORT ModelAPI_Document();
index 9c358dd7f2211a941863660d64204c6a9d6129f2..df8b645109bd5d87b6315a15134a99cb5bc9ac66 100644 (file)
@@ -107,3 +107,12 @@ bool PartSetPlugin_Part::isSub(ObjectPtr theObject) const
 void PartSetPlugin_Part::removeFeature(std::shared_ptr<ModelAPI_Feature> theFeature)
 {
 }
+
+void PartSetPlugin_Part::erase() {
+  ResultPartPtr aResult = std::dynamic_pointer_cast<ModelAPI_ResultPart>(firstResult());
+  if (aResult.get()) {
+    DocumentPtr aDoc = aResult->partDoc();
+    aDoc->eraseAllFeatures();
+  }
+  ModelAPI_Feature::erase();
+}
index 242848300acf36be66efb857f624a8c8d6fc9a62..d6300ae91a485278b3c9b5f87a5595ed4622aa6e 100644 (file)
@@ -70,6 +70,9 @@ class PartSetPlugin_Part : public ModelAPI_CompositeFeature
 
   /// Use plugin manager for features creation
   PartSetPlugin_Part();
+
+  /// Just removes all features of the part without touching the document data (to be able undo)
+  PARTSETPLUGIN_EXPORT virtual void erase();
 };
 
 #endif