]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Fix for the issue #1050
authormpv <mpv@opencascade.com>
Wed, 18 Nov 2015 07:11:49 +0000 (10:11 +0300)
committermpv <mpv@opencascade.com>
Wed, 18 Nov 2015 07:11:49 +0000 (10:11 +0300)
src/Model/Model_Document.cpp
src/Model/Model_Objects.cpp

index a5598b6a5d5cb28d6e7ce7b006e0447cf198a939..d96069a65fcac2111fd5972d2958e98be9d859ac 100755 (executable)
@@ -577,9 +577,9 @@ void Model_Document::abortOperation()
     if (!myNestedNum.empty())
       (*myNestedNum.rbegin())--;
     // roll back the needed number of transactions
-    // make commit/undo to get the modification delta
     //myDoc->AbortCommand();
-    if (myDoc->CommitCommand()) {
+    // instead of abort, do commit and undo: to get the delta of modifications
+    if (myDoc->CommitCommand())  {
       modifiedLabels(myDoc, aDeltaLabels);
       myDoc->Undo();
     }
index 045dfe44e09e25f08abd933711fce983973450a3..03e3db3df3ef0c08432081f43fb8c0a1dcf08f52 100644 (file)
@@ -340,8 +340,7 @@ void Model_Objects::createHistory(const std::string& theGroupID)
 {
   std::map<std::string, std::vector<ObjectPtr> >::iterator aHIter = myHistory.find(theGroupID);
   if (aHIter == myHistory.end()) {
-    myHistory[theGroupID] = std::vector<ObjectPtr>();
-    std::vector<ObjectPtr>& aResult = myHistory[theGroupID];
+    std::vector<ObjectPtr>& aResult = std::vector<ObjectPtr>();
     // iterate the array of references and get feature by feature from the array
     bool isFeature = theGroupID == ModelAPI_Feature::group();
     Handle(TDataStd_ReferenceArray) aRefs;
@@ -356,7 +355,8 @@ void Model_Objects::createHistory(const std::string& theGroupID)
                 aResult.push_back(aFeature);
               }
             } else if (!aFeature->isDisabled()) { // iterate all results of not-disabled feature
-              const std::list<std::shared_ptr<ModelAPI_Result> >& aResults = aFeature->results();
+              // do not use reference to the list here since results can be changed by "isConcealed"
+              const std::list<std::shared_ptr<ModelAPI_Result> > aResults = aFeature->results();
               std::list<std::shared_ptr<ModelAPI_Result> >::const_iterator aRIter = aResults.begin();
               for (; aRIter != aResults.cend(); aRIter++) {
                 ResultPtr aRes = *aRIter;
@@ -370,6 +370,9 @@ void Model_Objects::createHistory(const std::string& theGroupID)
         }
       }
     }
+    // to be sure that isConcealed did not update the history (issue 1089) during the iteration
+    if (myHistory.find(theGroupID) == myHistory.end())
+      myHistory[theGroupID] = aResult;
   }
 }