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