diff --git a/src/Mod/Measure/Gui/ViewProviderMeasureBase.cpp b/src/Mod/Measure/Gui/ViewProviderMeasureBase.cpp index 9f972d915d..a73acd48f4 100644 --- a/src/Mod/Measure/Gui/ViewProviderMeasureBase.cpp +++ b/src/Mod/Measure/Gui/ViewProviderMeasureBase.cpp @@ -143,8 +143,12 @@ ViewProviderMeasureBase::ViewProviderMeasureBase() transformEngine->matrix.connectFrom(&matrixEngine->matrix); pLabelTranslation->translation.connectFrom(&transformEngine->point); + auto pTextPickStyle = new SoPickStyle(); + pTextPickStyle->style = SoPickStyle::SHAPE_ON_TOP; + pTextSeparator = new SoSeparator(); pTextSeparator->ref(); + pTextSeparator->addChild(pTextPickStyle); pTextSeparator->addChild(dragSeparator); pTextSeparator->addChild(pLabelTranslation); pTextSeparator->addChild(pLabel); @@ -341,11 +345,28 @@ void ViewProviderMeasureBase::updateIcon() pLabel->setIcon(Gui::BitmapFactory().pixmapFromSvg(sPixmap, QSize(20, 20), colorMap)); } +void ViewProviderMeasureBase::syncDraggerOrientationToView() +{ + Gui::View3DInventor* view = nullptr; + try { + view = dynamic_cast(this->getActiveView()); + } + catch (const Base::RuntimeError&) { + return; + } + if (view) { + auto* cam = view->getViewer()->getSoRenderManager()->getCamera(); + if (cam) { + pDraggerOrientation->rotation.connectFrom(&cam->orientation); + } + } +} void ViewProviderMeasureBase::attach(App::DocumentObject* pcObj) { ViewProviderDocumentObject::attach(pcObj); updateIcon(); + syncDraggerOrientationToView(); } @@ -621,21 +642,7 @@ ViewProviderMeasure::ViewProviderMeasure() points->numPoints = 1; lineSep->addChild(points); - // Connect dragger local orientation to view orientation - Gui::View3DInventor* view = nullptr; - try { - view = dynamic_cast(this->getActiveView()); - } - catch (const Base::RuntimeError&) { - Base::Console().log("ViewProviderMeasure::ViewProviderMeasure: Could not get active view\n"); - } - - if (view) { - Gui::View3DInventorViewer* viewer = view->getViewer(); - auto renderManager = viewer->getSoRenderManager(); - auto cam = renderManager->getCamera(); - pDraggerOrientation->rotation.connectFrom(&cam->orientation); - } + syncDraggerOrientationToView(); } ViewProviderMeasure::~ViewProviderMeasure() diff --git a/src/Mod/Measure/Gui/ViewProviderMeasureBase.h b/src/Mod/Measure/Gui/ViewProviderMeasureBase.h index b4b3083cbd..2874dac77c 100644 --- a/src/Mod/Measure/Gui/ViewProviderMeasureBase.h +++ b/src/Mod/Measure/Gui/ViewProviderMeasureBase.h @@ -139,6 +139,7 @@ protected: void setLabelValue(const QString& value); void setLabelTranslation(const SbVec3f& position); void updateIcon(); + void syncDraggerOrientationToView(); SoPickStyle* getSoPickStyle(); SoDrawStyle* getSoLineStylePrimary();