#include <ModelAPI_ResultConstruction.h>
#include <ModelAPI_AttributeRefList.h>
#include <ModelAPI_AttributeSelectionList.h>
+#include <ModelAPI_Events.h>
#include <ModelAPI_Session.h>
#include <ModelAPI_Validator.h>
{
AttributeSelectionListPtr aMirrorObjectRefs =
selectionList(SketchPlugin_ConstraintMirror::MIRROR_LIST_ID());
- if (!aMirrorObjectRefs->isInitialized())
- return;
+
+ // Wait all objects being created, then send update events
+ static Events_ID anUpdateEvent = Events_Loop::eventByName(EVENT_OBJECT_UPDATED);
+ bool isUpdateFlushed = Events_Loop::loop()->isFlushed(anUpdateEvent);
+ if (isUpdateFlushed)
+ Events_Loop::loop()->setFlushed(anUpdateEvent, false);
std::shared_ptr<ModelAPI_Data> aData = data();
AttributeRefListPtr aRefListOfShapes = std::dynamic_pointer_cast<ModelAPI_AttributeRefList>(
ResultConstructionPtr aRC =
std::dynamic_pointer_cast<ModelAPI_ResultConstruction>(*aMirrorIter);
DocumentPtr aDoc = aRC ? aRC->document() : DocumentPtr();
- FeaturePtr aFeature = aDoc ? std::dynamic_pointer_cast<SketchPlugin_Feature>(
- aDoc->feature(aRC)) : FeaturePtr();
+ FeaturePtr aFeature = aDoc ? aDoc->feature(aRC) : FeaturePtr();
if (aFeature)
aDoc->removeFeature(aFeature);
}
aMirrorIter++;
}
+ static Events_ID aRedisplayEvent = Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY);
+
// Check consistency of initial list and mirrored list
anInitialList = aRefListOfShapes->list();
anInitIter = anInitialList.begin();
if (aMirrorIter != aMirroredList.end())
break; // the lists are inconsistent
// There is no mirrored object yet, create it
- FeaturePtr aNewFeature = sketch()->addFeature(aFeatureIn->getKind());
- aFeatureIn->data()->copyTo(aNewFeature->data());
+ FeaturePtr aNewFeature = SketchPlugin_Sketch::addUniqueNamedCopiedFeature(aFeatureIn, sketch());
aNewFeature->execute();
+ ModelAPI_EventCreator::get()->sendUpdated(aNewFeature, aRedisplayEvent);
std::shared_ptr<GeomAPI_Shape> aShapeIn = aRCIn->shape();
const std::list<ResultPtr>& aResults = aNewFeature->results();
aRefListOfMirrored->append(aNewFeature);
}
}
+
+ // send events to update the sub-features by the solver
+ if (isUpdateFlushed)
+ Events_Loop::loop()->setFlushed(anUpdateEvent, true);
}
AISObjectPtr SketchPlugin_ConstraintMirror::getAISObject(AISObjectPtr thePrevious)
return thePrevious;
AISObjectPtr anAIS = thePrevious;
- /// TODO: Equal constraint presentation should be put here
+ if (!anAIS) {
+ anAIS = SketcherPrs_Factory::mirrorConstraint(this, sketch()->coordinatePlane());
+ }
return anAIS;
}