+ QMap<ObjectPtr, QList<GeomShapePtr> > aFeatureShapes;
+ switch (theFlag) {
+ case ModuleBase_IModule::CustomizeArguments:
+ PartSet_OperationPrs::getFeatureShapes(myFeature, myWorkshop, aFeatureShapes);
+ break;
+ case ModuleBase_IModule::CustomizeResults:
+ PartSet_OperationPrs::getResultShapes(myFeature, myWorkshop, aFeatureShapes);
+ PartSet_OperationPrs::getPresentationShapes(myFeature, myWorkshop, aFeatureShapes, false);
+ break;
+ case ModuleBase_IModule::CustomizeHighlightedObjects:
+ PartSet_OperationPrs::getHighlightedShapes(myWorkshop, aFeatureShapes);
+ break;
+ default:
+ return isModified;
+ }
+ NCollection_DataMap<TopoDS_Shape, Handle(AIS_InteractiveObject)>& aShapeMap =
+ anOperationPrs->shapesMap();
+ PartSet_OperationPrs::fillShapeList(aFeatureShapes, myWorkshop, aShapeMap);
+
+ myPresentationIsEmpty = false;
+ // redisplay AIS objects
+ bool aRedisplayed = false;
+ Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext();
+ if (!aContext.IsNull() && !aContext->IsDisplayed(anOperationPrs)) {
+ // when the feature can not be visualized in the module, the operation preview should not
+ // be visualized also
+ if (anOperationPrs->hasShapes() && myWorkshop->module()->canDisplayObject(myFeature)) {
+ // set color here because it can be changed in preferences
+ Quantity_Color aShapeColor = getShapeColor(theFlag);
+ anOperationPrs->setShapeColor(aShapeColor);
+
+ PartSet_Module* aModule = dynamic_cast<PartSet_Module*>(myWorkshop->module());
+ XGUI_Workshop* aWorkshop = workshop();
+ aRedisplayed = aWorkshop->displayer()->displayAIS(myPresentations[theFlag],
+ false/*load object in selection*/, false);
+ aContext->SetZLayer(anOperationPrs, aModule->getVisualLayerId());
+ isModified = true;
+ }
+ }
+ else {
+ // when the feature can not be visualized in the module, the operation preview should not
+ // be visualized also
+ if (!anOperationPrs->hasShapes() || !myWorkshop->module()->canDisplayObject(myFeature)) {
+ aRedisplayed = erasePresentation(theFlag, false);
+ isModified = true;
+ }
+ else {
+ anOperationPrs->Redisplay();
+ isModified = true;
+ aRedisplayed = true;
+ }
+ }
+ if (myPresentationIsEmpty) {
+ aRedisplayed = erasePresentation(theFlag, false);
+ }
+ if (aRedisplayed && theUpdateViewer)
+ workshop()->displayer()->updateViewer();
+
+ return isModified;