- // set parameters of preview into parameters of selection in the feature
- std::shared_ptr<ModelAPI_AttributeReference> aRefSelectedAttr =
- std::dynamic_pointer_cast<ModelAPI_AttributeReference>(
- feature()->data()->attribute(SketchPlugin_Trim::SELECTED_OBJECT()));
- std::shared_ptr<ModelAPI_AttributeReference> aRefPreviewAttr =
- std::dynamic_pointer_cast<ModelAPI_AttributeReference>(
- feature()->data()->attribute(SketchPlugin_Trim::PREVIEW_OBJECT()));
- aRefSelectedAttr->setValue(aRefPreviewAttr->value());
+ ModuleBase_ISelection* aSelection = myWorkshop->selection();
+ QList<ModuleBase_ViewerPrsPtr> aSelected =
+ aSelection->getSelected(ModuleBase_ISelection::Viewer);
+
+ ModuleBase_ViewerPrsPtr aPrs =
+ !aSelected.empty() ? aSelected.first() : ModuleBase_ViewerPrsPtr();
+ if (aPrs.get() && aPrs->object().get()) {
+ myPreviewObject = aSelection->getResult(aPrs);
+ GeomShapePtr aShape = aSelection->getShape(aPrs);
+ myExternalObjectMgr->getGeomSelection(aPrs, myPreviewObject, aShape,
+ myWorkshop, sketch(), true);
+ }
+ myPreviewPoint = PartSet_Tools::getPnt2d(theEvent, theWindow, mySketch);
+
+ ObjectPtr aPreviewObject;
+ GeomPnt2dPtr aPreviewPoint;
+ if (myHasPreview) {
+ std::shared_ptr<ModelAPI_AttributeReference> aRefPreviewAttr =
+ std::dynamic_pointer_cast<ModelAPI_AttributeReference>(
+ feature()->data()->attribute(myPreviewObjectAttribute));
+ aPreviewObject = aRefPreviewAttr->value();
+
+ std::shared_ptr<GeomDataAPI_Point2D> aPointPreviewAttr =
+ std::dynamic_pointer_cast<GeomDataAPI_Point2D>(
+ feature()->data()->attribute(myPreviewPointAttribute));
+ aPreviewPoint = aPointPreviewAttr->pnt();
+ }
+ else {
+ aPreviewObject = myPreviewObject;
+ aPreviewPoint = myPreviewPoint;
+ }
+
+ // do not move focus from the current widget if the object is not highlighted/selected
+ if (!aPreviewObject.get())
+ return;
+
+ // Do not use non-sketcher objects
+ if (!sketch()->isSub(aPreviewObject))
+ return;