- DocumentPtr aDoc = Model_ResultPart::partDoc();
- if (aDoc.get() && aDoc->isOpened()) {
- const std::string& aBodyGroup = ModelAPI_ResultBody::group();
- TopoDS_Compound aResultComp;
- BRep_Builder aBuilder;
- aBuilder.MakeCompound(aResultComp);
- int aNumSubs = 0;
- for(int a = aDoc->size(aBodyGroup) - 1; a >= 0; a--) {
- ResultPtr aBody = std::dynamic_pointer_cast<ModelAPI_Result>(aDoc->object(aBodyGroup, a));
- // "object" method filters out disabled and concealed anyway, so don't check
- if (aBody.get() && aBody->shape().get()) {
- TopoDS_Shape aShape = *(aBody->shape()->implPtr<TopoDS_Shape>());
- if (!aShape.IsNull()) {
- aBuilder.Add(aResultComp, aShape);
- aNumSubs++;
+ SessionPtr aMgr = ModelAPI_Session::get();
+ bool aToSendUpdate = aMgr->isOperation(); // inside of operation may send an update event
+ if (myTrsf.get()) { // get shape of the base result and apply the transformation
+ ResultPtr anOrigResult = baseRef();
+ std::shared_ptr<GeomAPI_Shape> anOrigShape = anOrigResult->shape();
+ if (anOrigShape.get()) {
+ aResult = transformShape(anOrigShape, *myTrsf);
+ myShape = aResult->impl<TopoDS_Shape>();
+ }
+ if (!myShape.IsNull() && aToSendUpdate) {
+ static const Events_ID anEvent = Events_Loop::eventByName(EVENT_OBJECT_UPDATED);
+ ModelAPI_EventCreator::get()->sendUpdated(data()->owner(), anEvent);
+ }
+ return aResult;
+ } else {
+ DocumentPtr aDoc = Model_ResultPart::partDoc();
+ if (aDoc.get() && aDoc->isOpened()) {
+ const std::string& aBodyGroup = ModelAPI_ResultBody::group();
+ TopoDS_Compound aResultComp;
+ BRep_Builder aBuilder;
+ aBuilder.MakeCompound(aResultComp);
+ int aNumSubs = 0;
+ for(int a = aDoc->size(aBodyGroup) - 1; a >= 0; a--) {
+ ResultPtr aBody = std::dynamic_pointer_cast<ModelAPI_Result>(aDoc->object(aBodyGroup, a));
+ // "object" method filters out disabled and concealed anyway, so don't check
+ if (aBody.get() && aBody->data()->isValid() && aBody->shape().get()) {
+ TopoDS_Shape aShape = *(aBody->shape()->implPtr<TopoDS_Shape>());
+ if (!aShape.IsNull()) {
+ aBuilder.Add(aResultComp, aShape);
+ aNumSubs++;
+ }