X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModel%2FModel_Objects.cpp;h=152aaaeb84ee27a8c4211c1c3d3618dae7221f50;hb=c57d2a7f1a57af01656e47e2e510990492404fce;hp=23481769153425c134bc16bf1e6440f521f40be1;hpb=c150c9edee7377d8b228c7d707b561e1a7d9243c;p=modules%2Fshaper.git diff --git a/src/Model/Model_Objects.cpp b/src/Model/Model_Objects.cpp index 234817691..152aaaeb8 100644 --- a/src/Model/Model_Objects.cpp +++ b/src/Model/Model_Objects.cpp @@ -32,6 +32,8 @@ #include #include #include +#include + #include #include @@ -874,11 +876,30 @@ void Model_Objects::synchronizeFeatures( if (anUpdatedMap.Contains(aFeatureLabel)) { if (!theOpen) { // on abort/undo/redo reinitialize attributes if something is changed - std::list > anAttrs = - anObject->data()->attributes(""); - std::list >::iterator anAttr = anAttrs.begin(); - for(; anAttr != anAttrs.end(); anAttr++) - (*anAttr)->reinit(); + FiltersFeaturePtr aFilter = std::dynamic_pointer_cast(anObject); + if (aFilter.get()) { // for filters attributes may be added/removed on undo/redo + std::dynamic_pointer_cast(aFilter->data())->clearAttributes(); + aFilter->initAttributes(); + } else { + std::list > anAttrs = + anObject->data()->attributes(""); + std::list >::iterator anAttr = anAttrs.begin(); + for(; anAttr != anAttrs.end(); anAttr++) + (*anAttr)->reinit(); + // if feature contains results, re-init them too + if (aFeature.get()) { + std::list aResults; + ModelAPI_Tools::allResults(aFeature, aResults); + std::list::iterator aResIter = aResults.begin(); + for(; aResIter != aResults.end(); aResIter++) { + std::list > anAttrs = + (*aResIter)->data()->attributes(""); + std::list >::iterator anAttr = anAttrs.begin(); + for(; anAttr != anAttrs.end(); anAttr++) + (*anAttr)->reinit(); + } + } + } } ModelAPI_EventCreator::get()->sendUpdated(anObject, anUpdateEvent); if (aFeature && aFeature->getKind() == "Parameter") { @@ -1827,6 +1848,10 @@ void Model_Objects::updateResults(FeaturePtr theFeature, std::set& t } } + // it may be on undo + if (!theFeature->data() || !theFeature->data()->isValid() || theFeature->isDisabled()) + return; + // check the existing results and remove them if there is nothing on the label std::list::const_iterator aResIter = theFeature->results().cbegin(); while(aResIter != theFeature->results().cend()) { @@ -1843,9 +1868,6 @@ void Model_Objects::updateResults(FeaturePtr theFeature, std::set& t } aResIter++; } - // it may be on undo - if (!theFeature->data() || !theFeature->data()->isValid() || theFeature->isDisabled()) - return; // check that results are presented on all labels int aResSize = int(theFeature->results().size()); TDF_ChildIterator aLabIter(resultLabel(theFeature->data(), 0).Father());