- isExecuted = true;
- std::list<std::shared_ptr<ModelAPI_Document> > aDocs;
- std::shared_ptr<ModelAPI_ObjectUpdatedMessage> aMsg =
- std::dynamic_pointer_cast<ModelAPI_ObjectUpdatedMessage>(theMessage);
- if (aMsg) myInitial = aMsg->objects();
- else {
- myInitial.clear();
- // on change flag all documents must be updated
- if (isAutomatic) {
- aDocs = ModelAPI_Session::get()->allOpenedDocuments();
- }
- }
- // collect all documents involved into the update process
- set<std::shared_ptr<ModelAPI_Object> >::iterator aFIter = myInitial.begin();
- for (; aFIter != myInitial.end(); aFIter++) {
- aDocs.push_back((*aFIter)->document());
- }
- // iterate all features of features-documents to update them (including hidden)
- std::set<std::shared_ptr<ModelAPI_Document> > alreadyUsed;
- list<std::shared_ptr<ModelAPI_Document> >::iterator aDIter = aDocs.begin();
- for (; aDIter != aDocs.end(); aDIter++) {
- if (alreadyUsed.find(*aDIter) != alreadyUsed.end())
- continue;
- alreadyUsed.insert(*aDIter);
- int aNbFeatures = (*aDIter)->size(ModelAPI_Feature::group(), true);
- for (int aFIndex = 0; aFIndex < aNbFeatures; aFIndex++) {
- FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(
- (*aDIter)->object(ModelAPI_Feature::group(), aFIndex, true));
- if (aFeature)
- updateFeature(aFeature);
- }
- }