+ } else if (theFeature->getKind() == "Sketch" &&
+ std::dynamic_pointer_cast<Model_Document>((theFeature)->document())->executeFeatures()) {
+ // send event that sketch is prepared to be recomputed
+ static Events_ID anID = Events_Loop::eventByName("SketchPrepared");
+ std::shared_ptr<Events_Message> aMsg(new Events_Message(anID, this));
+ Events_Loop* aLoop = Events_Loop::loop();
+ // in case it is finish operation, flush for the sketch other events (#2450)
+ aLoop->flush(aLoop->eventByName(EVENT_OBJECT_UPDATED));
+ aLoop->send(aMsg);
+ // check that sub-elements of sketch are updated => sketch must be re-processed
+ std::set<FeaturePtr> aWholeR;
+ allReasons(theFeature, aWholeR);
+ std::set<FeaturePtr>::iterator aRIter = aWholeR.begin();
+ for(; aRIter != aWholeR.end(); aRIter++) {
+ if (myModified.find(*aRIter) != myModified.end()) {
+ processFeature(theFeature);
+ return true;
+ }
+ }