Salome HOME
Tangent presentation correction
[modules/shaper.git] / src / Model / Model_Update.cpp
index 91751aa772becc664787e5ce6007dfe6f0c17507..51eba966c182977e5787340582512cc134b426e3 100644 (file)
@@ -67,8 +67,11 @@ void Model_Update::processEvent(const std::shared_ptr<Events_Message>& theMessag
   static const Events_ID kOpStartEvent = aLoop->eventByName("StartOperation");
   bool isAutomaticChanged = false;
   if (theMessage->eventID() == kChangedEvent) { // automatic and manual rebuild flag is changed
-    isAutomatic = 
-      Config_PropManager::findProp("Model update", "automatic_rebuild")->value() == "true";
+    bool aPropVal = 
+    Config_PropManager::findProp("Model update", "automatic_rebuild")->value() == "true";
+    if (aPropVal == isAutomatic)
+      return;// nothing to
+    isAutomatic = aPropVal;
   } else if (theMessage->eventID() == kRebuildEvent) { // the rebuild command
     if (isAutomatic == false) {
       isAutomaticChanged = true;
@@ -155,7 +158,7 @@ void Model_Update::updateInDoc(std::shared_ptr<ModelAPI_Document> theDoc)
   // all sub-documents one by one
   std::shared_ptr<Model_Document> aDoc = std::dynamic_pointer_cast<Model_Document>(theDoc);
   if (aDoc) {
-    const std::set<std::string>& aSubs = aDoc->subDocuments();
+    const std::set<std::string> aSubs = aDoc->subDocuments(true);
     for(std::set<std::string>::iterator aSub = aSubs.begin(); aSub != aSubs.end(); aSub++) {
       DocumentPtr aSubDoc = theDoc->subDocument(*aSub);
       if (aSubDoc) {
@@ -256,7 +259,8 @@ bool Model_Update::updateFeature(FeaturePtr theFeature)
                 std::shared_ptr<ModelAPI_AttributeSelection> aSel =
                   std::dynamic_pointer_cast<ModelAPI_AttributeSelection>(*aRefsIter);
                 if (!aSel->update()) { // this must be done on execution since it may be long operation
-                  if (!aFactory->isNotObligatory(theFeature->getKind(), theFeature->data()->id(aSel)))
+                  if (!aFactory->isNotObligatory(theFeature->getKind(), theFeature->data()->id(aSel)) &&
+                      aFactory->isCase(theFeature, theFeature->data()->id(aSel)))
                     aState = ModelAPI_StateInvalidArgument;
                 }
               }
@@ -270,7 +274,8 @@ bool Model_Update::updateFeature(FeaturePtr theFeature)
                   if (aSelAttr) {
                     if (!aSelAttr->update()) {
                       if (!aFactory->isNotObligatory(
-                          theFeature->getKind(), theFeature->data()->id(aSel)))
+                            theFeature->getKind(), theFeature->data()->id(aSel)) &&
+                          aFactory->isCase(theFeature, theFeature->data()->id(aSel)))
                         aState = ModelAPI_StateInvalidArgument;
                     }
                   }