From 0f00c6d2d1c39215f8d0e5c2aff5ddcff5186906 Mon Sep 17 00:00:00 2001 From: PaddleStroke Date: Sat, 22 Mar 2025 18:21:24 +0100 Subject: [PATCH] Sketcher: Slot tool: Enforce correctly when angle is set (#20269) --- src/Mod/Sketcher/Gui/DrawSketchHandlerSlot.h | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Mod/Sketcher/Gui/DrawSketchHandlerSlot.h b/src/Mod/Sketcher/Gui/DrawSketchHandlerSlot.h index 31f0dc096b..1108aa244e 100644 --- a/src/Mod/Sketcher/Gui/DrawSketchHandlerSlot.h +++ b/src/Mod/Sketcher/Gui/DrawSketchHandlerSlot.h @@ -410,8 +410,9 @@ void DSHSlotControllerBase::doEnforceControlParameters(Base::Vector2d& onSketchP if (onViewParameters[OnViewParameter::Fourth]->isSet) { double angle = Base::toRadians(onViewParameters[OnViewParameter::Fourth]->getValue()); - onSketchPos.x = handler->startPoint.x + cos(angle) * length; - onSketchPos.y = handler->startPoint.y + sin(angle) * length; + Base::Vector2d ovpDir(cos(angle), sin(angle)); + onSketchPos.ProjectToLine(onSketchPos - handler->startPoint, ovpDir); + onSketchPos += handler->startPoint; } } break; case SelectMode::SeekThird: { @@ -468,6 +469,16 @@ void DSHSlotController::adaptParameters(Base::Vector2d onSketchPos) Base::toDegrees(range), Base::Unit::Angle); } + else if (vec.Length() > Precision::Confusion()) { + double ovpRange = + Base::toRadians(onViewParameters[OnViewParameter::Fourth]->getValue()); + + if (fabs(range - ovpRange) > Precision::Confusion()) { + setOnViewParameterValue(OnViewParameter::Fourth, + Base::toDegrees(range), + Base::Unit::Angle); + } + } onViewParameters[OnViewParameter::Third]->setPoints(start, end); onViewParameters[OnViewParameter::Fourth]->setPoints(start, Base::Vector3d());