X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModel%2FModel_Update.cpp;h=142f5c1e12557284b0c4420054f1eb4c42b94dfe;hb=6a7e53a3d3b52f1f798b7e3aa3c48de9c870d92b;hp=2390df8268e737bb4e0038bd0df4e4e4e38f58d6;hpb=a731f82dccbfdb67cbf8e8d617222a4d3e32018a;p=modules%2Fshaper.git diff --git a/src/Model/Model_Update.cpp b/src/Model/Model_Update.cpp index 2390df826..142f5c1e1 100644 --- a/src/Model/Model_Update.cpp +++ b/src/Model/Model_Update.cpp @@ -50,7 +50,7 @@ Model_Update::Model_Update() aLoop->registerListener(this, kOpStartEvent); Config_PropManager::registerProp("Model update", "automatic_rebuild", "Rebuild immediately", - Config_Prop::Bool, "false"); + Config_Prop::Boolean, "false"); myIsAutomatic = Config_PropManager::findProp("Model update", "automatic_rebuild")->value() == "true"; } @@ -112,7 +112,7 @@ void Model_Update::processEvent(const std::shared_ptr& theMessag for(aFIter = myJustCreatedOrUpdated.begin(); aFIter != myJustCreatedOrUpdated.end(); aFIter++) { FeaturePtr aF = std::dynamic_pointer_cast(*aFIter); - if (aF && aF->getKind() == "Extrusion") { + if (aF && aF->data().get() && aF->getKind() == "Extrusion") { AttributeSelectionListPtr aBase = aF->selectionList("base"); if (aBase.get()) { for(int a = aBase->size() - 1; a >= 0; a--) { @@ -221,8 +221,8 @@ bool Model_Update::updateFeature(FeaturePtr theFeature) CompositeFeaturePtr aComposite = std::dynamic_pointer_cast(theFeature); if (aComposite) { - int aSubsNum = aComposite->numberOfSubs(); - for(int a = 0; a < aSubsNum; a++) { + // number of subs can be changed in execution: like fillet + for(int a = 0; a < aComposite->numberOfSubs(); a++) { if (updateFeature(aComposite->subFeature(a))) aMustbeUpdated = true; } @@ -290,8 +290,8 @@ bool Model_Update::updateFeature(FeaturePtr theFeature) // for sketch after update of plane (by update of selection attribute) // but before execute, all sub-elements also must be updated (due to the plane changes) if (aComposite) { - int aSubsNum = aComposite->numberOfSubs(); - for(int a = 0; a < aSubsNum; a++) { + // number of subs can be changed in execution: like fillet + for(int a = 0; a < aComposite->numberOfSubs(); a++) { FeaturePtr aSub = aComposite->subFeature(a); bool aWasModified = myUpdated[aSub]; myUpdated.erase(myUpdated.find(aSub)); // erase to update for sure (plane may be changed) @@ -301,7 +301,7 @@ bool Model_Update::updateFeature(FeaturePtr theFeature) } // re-execute after update: solver may update the previous values, so, shapes must be // updated - for(int a = 0; a < aSubsNum; a++) { + for(int a = 0; a < aComposite->numberOfSubs(); a++) { if (aComposite->subFeature(a) && aFactory->validate(aComposite->subFeature(a))) aComposite->subFeature(a)->execute(); }