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());