From 97d3665757d9527ca46172416a148ae4a1007194 Mon Sep 17 00:00:00 2001 From: Abdullah Tahiri Date: Tue, 14 Nov 2023 19:38:52 +0100 Subject: [PATCH] SketcherGui: Fix preselectAtPoint for non X-Y orientations --- src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index 18871d939f..f9716bc12b 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -358,9 +358,9 @@ void ViewProviderSketch::ParameterObserver::initParameters() }, nullptr}}, {"SegmentsPerGeometry", - {[this, packedDefaultGridColor](const std::string& string, + {[this](const std::string& string, [[maybe_unused]] App::Property* property) { - auto v = getPreferencesViewParameter(string, 50); + auto v = getPreferencesViewParameter(string, 50); //LINT Client.viewProviderParameters.stdCountSegments = v; }, nullptr}}, @@ -692,8 +692,6 @@ void ViewProviderSketch::preselectAtPoint(Base::Vector2d point) && Mode != STATUS_SKETCH_DragCurve && Mode != STATUS_SKETCH_DragConstraint && Mode != STATUS_SKETCH_UseRubberBand) { - SbVec3f sbpoint(point.x, point.y, 0.f); - Gui::MDIView* mdi = this->getActiveView(); Gui::View3DInventor* view = qobject_cast(mdi); @@ -702,6 +700,18 @@ void ViewProviderSketch::preselectAtPoint(Base::Vector2d point) Gui::View3DInventorViewer* viewer = view->getViewer(); + Base::Placement Plm = getEditingPlacement(); + + auto inPlacementCoords = [&Plm](const Base::Vector3d & point) { + Base::Vector3d pnt; + Plm.multVec(point, pnt); + return pnt; + }; + + auto pnt = inPlacementCoords(Base::Vector3d(point.x,point.y,0)); + + SbVec3f sbpoint(static_cast(pnt.x), static_cast(pnt.y), static_cast(pnt.z)); + SbVec2s screencoords = viewer->getPointOnViewport(sbpoint); std::unique_ptr Point(this->getPointOnRay(screencoords, viewer));