]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #2052 : really remove results if during the feature execution number of results...
authormpv <mpv@opencascade.com>
Tue, 4 Apr 2017 11:27:38 +0000 (14:27 +0300)
committermpv <mpv@opencascade.com>
Tue, 4 Apr 2017 11:27:38 +0000 (14:27 +0300)
src/Model/Model_AttributeSelection.cpp
src/Model/Model_Objects.cpp
src/Model/Model_Update.cpp
src/ModelAPI/ModelAPI_Feature.cpp
src/ModelAPI/ModelAPI_Feature.h

index 513c39d5c65b0afcc68d5d6793bed57ec070da0c..b2a4989dbac571ec9fd730f31e95d13bb0a46b5d 100644 (file)
@@ -538,7 +538,7 @@ void Model_AttributeSelection::selectBody(
     if (aFeatureOwner.get()) {
       aEraseResults = !aFeatureOwner->results().empty();
       if (aEraseResults) // erase results without flash deleted and redisplay: do it after Select
-        aFeatureOwner->removeResults(0, false);
+        aFeatureOwner->removeResults(0, false, false);
     }
     aSel.Select(aNewSub, aNewContext);
 
index 798e234c5c5c7b68a1c14bb6c0a5bf6d46f84d7e..f635941b3aeecb60a10eb7658f76405799351d1c 100644 (file)
@@ -75,7 +75,6 @@ Model_Objects::~Model_Objects()
     ModelAPI_EventCreator::get()->sendDeleted(myDoc, ModelAPI_Feature::group());
     ModelAPI_EventCreator::get()->sendUpdated(aFeature, EVENT_DISP);
     aFeature->removeResults(0, false);
-    //aFeature->eraseResults();
     aFeature->erase();
     myFeatures.UnBind(aFeaturesIter.Key());
   }
index 2c18d72bc9b6c673acce6543c69f36a40d20d7b4..ee2e42be886a5dc52239e7a13ea6ab219923911f 100755 (executable)
@@ -580,7 +580,7 @@ bool Model_Update::processFeature(FeaturePtr theFeature)
   #ifdef DEB_UPDATE
     std::cout<<"Invalid args "<<theFeature->name()<<std::endl;
   #endif
-    theFeature->eraseResults();
+    theFeature->eraseResults(false);
     redisplayWithResults(theFeature, ModelAPI_StateInvalidArgument); // result also must be updated
     return true; // so, feature is modified (results are erased)
   }
@@ -595,7 +595,7 @@ bool Model_Update::processFeature(FeaturePtr theFeature)
     #ifdef DEB_UPDATE
       std::cout<<"Feature is not valid, erase results "<<theFeature->name()<<std::endl;
     #endif
-    theFeature->eraseResults();
+    theFeature->eraseResults(false);
     redisplayWithResults(theFeature, ModelAPI_StateInvalidArgument); // result also must be updated
   }
   return true;
@@ -847,7 +847,7 @@ void Model_Update::executeFeature(FeaturePtr theFeature)
   // The macro feature has to be deleted in any case even its execution is failed
   myWaitForFinish.insert(theFeature);
   if (aState != ModelAPI_StateDone) {
-    theFeature->eraseResults();
+    theFeature->eraseResults(false);
   }
   theFeature->data()->setUpdateID(ModelAPI_Session::get()->transactionID());
   redisplayWithResults(theFeature, aState);
index bb387f81c92d22e435e60be0ec24141fc4123301..f83cf00a8d379592e284ec204e0c3e67f347156d 100644 (file)
@@ -104,7 +104,8 @@ void ModelAPI_Feature::eraseResultFromList(const std::shared_ptr<ModelAPI_Result
   }
 }
 
-void ModelAPI_Feature::removeResults(const int theSinceIndex, const bool theFlush)
+void ModelAPI_Feature::removeResults(
+  const int theSinceIndex, const bool theForever, const bool theFlush)
 {
   std::list<std::shared_ptr<ModelAPI_Result> >::iterator aResIter = myResults.begin();
   for(int anIndex = 0; anIndex < theSinceIndex && aResIter != myResults.end(); anIndex++)
@@ -115,12 +116,12 @@ void ModelAPI_Feature::removeResults(const int theSinceIndex, const bool theFlus
   while( aNextIter != myResults.end()) {
     aGroup = (*aNextIter)->groupName();
     // remove previously erased results: to enable later if needed only actual (of history change)
-    //if (theSinceIndex == 0 && (*aNextIter)->isDisabled()) {
-    //  aNextIter = myResults.erase(aNextIter);
-    //} else {
-      (*aNextIter)->setDisabled(*aNextIter, true); // just disable results
+    (*aNextIter)->setDisabled(*aNextIter, true); // just disable results
+    if (theForever) {
+      aNextIter = myResults.erase(aNextIter);
+    } else {
       aNextIter++;
-    //}
+    }
   }
   if (!aGroup.empty() && theFlush) {
     // flush visualisation changes
@@ -132,9 +133,9 @@ void ModelAPI_Feature::removeResults(const int theSinceIndex, const bool theFlus
   }
 }
 
-void ModelAPI_Feature::eraseResults()
+void ModelAPI_Feature::eraseResults(const bool theForever)
 {
-  removeResults(0);
+  removeResults(0, theForever, true);
 }
 
 const std::string& ModelAPI_Feature::documentToAdd()
@@ -192,7 +193,7 @@ bool ModelAPI_Feature::setDisabled(const bool theFlag)
   if (myIsDisabled != theFlag) {
     myIsDisabled = theFlag;
     if (myIsDisabled) {
-      removeResults(0, false); // flush will be in setCurrentFeature
+      removeResults(0, false, false); // flush will be in setCurrentFeature
     } else {
       // enable all disabled previously results
       std::list<std::shared_ptr<ModelAPI_Result> >::iterator aResIter = myResults.begin();
index 71bd251d8802d78f6717193f34659fa367ddac7a..e30978a69b3afe8cb8bacffdb30fbea6af3e6384 100644 (file)
@@ -87,10 +87,12 @@ class ModelAPI_Feature : public ModelAPI_Object
   MODELAPI_EXPORT void removeResult(const std::shared_ptr<ModelAPI_Result>& theResult);
   /// removes all results starting from the given index (zero-based)
   /// \param theSinceIndex - index of the deleted result and all after also will be deleted
+  /// \param theForever - removes results for long period (not just because of feature disabling)
   /// \param theFlush - if it is false, REDISPLAY message is not flushed
-  MODELAPI_EXPORT void removeResults(const int theSinceIndex, const bool theFlush = true);
+  MODELAPI_EXPORT void removeResults(const int theSinceIndex,
+    const bool theForever = true, const bool theFlush = true);
   /// removes all results from the feature
-  MODELAPI_EXPORT void eraseResults();
+  MODELAPI_EXPORT void eraseResults(const bool theForever = true);
   /// removes all fields from this feature: results, data, etc
   MODELAPI_EXPORT virtual void erase();
   /// removes the result from the list of feature (not doing in disabled): normally this