+void ModelAPI_Feature::setResult(const boost::shared_ptr<ModelAPI_Result>& theResult,
+ const int theIndex)
+{
+ std::list<boost::shared_ptr<ModelAPI_Result> >::iterator aResIter = myResults.begin();
+ for (int anIndex = 0; anIndex < theIndex; anIndex++) {
+ aResIter++;
+ }
+ if (aResIter == myResults.end()) { // append
+ myResults.push_back(theResult);
+ static Events_ID anEvent = Events_Loop::eventByName(EVENT_OBJECT_CREATED);
+ ModelAPI_EventCreator::get()->sendUpdated(theResult, anEvent);
+ // Create event for first Feature, send it to make "created" earlier than "updated"
+ // VSV: Commenting out of this statement causes problems with circle operation for example
+ Events_Loop::loop()->flush(anEvent);
+ } else { // update
+ *aResIter = theResult;
+ static Events_ID anEvent = Events_Loop::eventByName(EVENT_OBJECT_UPDATED);
+ ModelAPI_EventCreator::get()->sendUpdated(theResult, anEvent);
+ }
+}
+
+void ModelAPI_Feature::removeResult(const boost::shared_ptr<ModelAPI_Result>& theResult)
+{
+ std::list<boost::shared_ptr<ModelAPI_Result> >::iterator aResIter = myResults.begin();
+ for(; aResIter != myResults.end(); aResIter++) {
+ ResultPtr aRes = *aResIter;
+ if (aRes == theResult) {
+ std::string aGroup = aRes->groupName();
+ aRes->data()->erase();
+ myResults.erase(aResIter);
+
+ static Events_ID anEvent = Events_Loop::eventByName(EVENT_OBJECT_DELETED);
+ static Events_Loop* aLoop = Events_Loop::loop();
+ static Events_ID EVENT_DISP = aLoop->eventByName(EVENT_OBJECT_TO_REDISPLAY);
+ static const ModelAPI_EventCreator* aECreator = ModelAPI_EventCreator::get();
+ ModelAPI_EventCreator::get()->sendDeleted(document(), aGroup);
+ aECreator->sendUpdated(aRes, EVENT_DISP);
+ break;
+ }
+ }
+}
+
+void ModelAPI_Feature::eraseResults()
+{
+ if (!myResults.empty()) {
+ static Events_Loop* aLoop = Events_Loop::loop();
+ static Events_ID EVENT_DISP = aLoop->eventByName(EVENT_OBJECT_TO_REDISPLAY);
+ static const ModelAPI_EventCreator* aECreator = ModelAPI_EventCreator::get();
+
+ std::list<boost::shared_ptr<ModelAPI_Result> >::iterator aResIter = myResults.begin();
+ for(; aResIter != myResults.end(); aResIter++) {
+ (*aResIter)->data()->erase();
+ ModelAPI_EventCreator::get()->sendDeleted(document(), (*aResIter)->groupName());
+ aECreator->sendUpdated(*aResIter, EVENT_DISP);
+ }
+ myResults.clear();
+ // flush it to avoid left presentations after input of invalid arguments (radius=0)
+ static Events_ID anEvent = Events_Loop::eventByName(EVENT_OBJECT_DELETED);
+ Events_Loop::loop()->flush(anEvent);
+ }
+}
+