- XGUI_Selection* aSelection = myWorkshop->selector()->selection();
- QList<ModuleBase_ViewerPrs> aSelected = aSelection->getSelected();
- if (!aSelected.empty()) {
- ModuleBase_ViewerPrs aPrs = aSelected.first();
- Handle(SelectMgr_EntityOwner) anOwner = aSelected.first().owner();
- if (isValid(anOwner)) {
- setSelection(anOwner);
-
- TopoDS_Shape aShape = aPrs.shape();
- if (!aShape.IsNull()) {
- erasePreviewPlanes();
- DataPtr aData = feature()->data();
- AttributeSelectionPtr aSelAttr = std::dynamic_pointer_cast<ModelAPI_AttributeSelection>
- (aData->attribute(SketchPlugin_SketchEntity::EXTERNAL_ID()));
- if (aSelAttr) {
- GeomShapePtr aShapePtr = aSelAttr->value();
- if (aShapePtr.get() == NULL || aShapePtr->isNull()) {
- std::shared_ptr<GeomAPI_Shape> aGShape(new GeomAPI_Shape);
- aGShape->setImpl(new TopoDS_Shape(aShape));
- // get plane parameters
- std::shared_ptr<GeomAPI_Pln> aPlane = GeomAlgoAPI_FaceBuilder::plane(aGShape);
- std::shared_ptr<GeomAPI_Dir> aDir = aPlane->direction();
-
- myWorkshop->viewer()->setViewProjection(aDir->x(), aDir->y(), aDir->z());
- }
- }
-
- // Clear text in the label
- myLabel->setText("");
- myLabel->setToolTip("");
- disconnect(myWorkshop->selector(), SIGNAL(selectionChanged()),
- this, SLOT(onPlaneSelected()));
- activateFilters(myWorkshop->module()->workshop(), false);
-
- // Clear selection mode and define sketching mode
- //XGUI_Displayer* aDisp = myWorkshop->displayer();
- //aDisp->closeLocalContexts();
- emit planeSelected(plane());
- setSketchingMode();
-
- // Update sketcher actions
- XGUI_ActionsMgr* anActMgr = myWorkshop->actionsMgr();
- anActMgr->update();
- myWorkshop->viewer()->update();
- }
+ // 2. set the selection to sketch
+ setSelectionCustom(aPrs);
+ // 3. hide main planes if they have been displayed
+ erasePreviewPlanes();
+ // 4. if the planes were displayed, change the view projection
+ TopoDS_Shape aShape = aPrs.shape();
+ std::shared_ptr<GeomAPI_Shape> aGShape;
+ // selection happens in OCC viewer
+ if (!aShape.IsNull()) {
+ aGShape = std::shared_ptr<GeomAPI_Shape>(new GeomAPI_Shape);
+ aGShape->setImpl(new TopoDS_Shape(aShape));
+ }
+ else { // selection happens in OCC viewer(on body) of in the OB browser
+ DataPtr aData = feature()->data();
+ AttributeSelectionPtr aSelAttr = std::dynamic_pointer_cast<ModelAPI_AttributeSelection>
+ (aData->attribute(SketchPlugin_SketchEntity::EXTERNAL_ID()));
+ if (aSelAttr) {
+ aGShape = aSelAttr->value();