From 557840f6d2ee3a040fd2b7c989e23d1ad957a821 Mon Sep 17 00:00:00 2001 From: PaddleStroke Date: Sat, 22 Mar 2025 18:20:26 +0100 Subject: [PATCH] Sketcher: Line tool: Enforce correctly when angle is set (#20267) --- src/Mod/Sketcher/Gui/DrawSketchHandlerLine.h | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/Mod/Sketcher/Gui/DrawSketchHandlerLine.h b/src/Mod/Sketcher/Gui/DrawSketchHandlerLine.h index d75b73df23..efbe278b5e 100644 --- a/src/Mod/Sketcher/Gui/DrawSketchHandlerLine.h +++ b/src/Mod/Sketcher/Gui/DrawSketchHandlerLine.h @@ -409,8 +409,9 @@ void DSHLineControllerBase::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; } } else { @@ -492,6 +493,15 @@ void DSHLineController::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());