From c43330fe5ef3c646c0b67730889bbfabd3fccd6c Mon Sep 17 00:00:00 2001 From: Tanner Collin Date: Mon, 16 Feb 2026 20:13:21 -0700 Subject: [PATCH] fix: Adjust chained line angle ref dir for free drawing Co-authored-by: aider (gemini/gemini-2.5-pro) --- src/ViewportWidget.cpp | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/src/ViewportWidget.cpp b/src/ViewportWidget.cpp index c9e4a00..c8cf913 100644 --- a/src/ViewportWidget.cpp +++ b/src/ViewportWidget.cpp @@ -394,6 +394,10 @@ void ViewportWidget::paintGL() if (relativeMouseAngle >= 90 || relativeMouseAngle < -90) { refDir = -refDir; } + } else { + if (property("isChainedLine").toBool()) { + refDir = -refDir; + } } double refAngle, lineAngle; @@ -693,22 +697,28 @@ void ViewportWidget::paintGL() QVector3D currentMouseWorldPosForText = unproject(m_currentMousePos, m_currentPlane); QVector3D mouseVecForText = currentMouseWorldPosForText - startPos; - if (mouseVecForText.length() > 1e-6) { - double mouseAngle; - if (m_currentPlane == SketchPlane::XY) mouseAngle = qRadiansToDegrees(atan2(mouseVecForText.z(), mouseVecForText.x())); - else if (m_currentPlane == SketchPlane::XZ) mouseAngle = qRadiansToDegrees(atan2(mouseVecForText.y(), mouseVecForText.x())); - else mouseAngle = qRadiansToDegrees(atan2(mouseVecForText.z(), mouseVecForText.y())); + if (angleFromInput) { + if (mouseVecForText.length() > 1e-6) { + double mouseAngle; + if (m_currentPlane == SketchPlane::XY) mouseAngle = qRadiansToDegrees(atan2(mouseVecForText.z(), mouseVecForText.x())); + else if (m_currentPlane == SketchPlane::XZ) mouseAngle = qRadiansToDegrees(atan2(mouseVecForText.y(), mouseVecForText.x())); + else mouseAngle = qRadiansToDegrees(atan2(mouseVecForText.z(), mouseVecForText.y())); - double refAngleForQuadrant; - if (m_currentPlane == SketchPlane::XY) refAngleForQuadrant = qRadiansToDegrees(atan2(refDir.z(), refDir.x())); - else if (m_currentPlane == SketchPlane::XZ) refAngleForQuadrant = qRadiansToDegrees(atan2(refDir.y(), refDir.x())); - else refAngleForQuadrant = qRadiansToDegrees(atan2(refDir.z(), refDir.y())); + double refAngleForQuadrant; + if (m_currentPlane == SketchPlane::XY) refAngleForQuadrant = qRadiansToDegrees(atan2(refDir.z(), refDir.x())); + else if (m_currentPlane == SketchPlane::XZ) refAngleForQuadrant = qRadiansToDegrees(atan2(refDir.y(), refDir.x())); + else refAngleForQuadrant = qRadiansToDegrees(atan2(refDir.z(), refDir.y())); - double relativeMouseAngle = mouseAngle - refAngleForQuadrant; - while (relativeMouseAngle <= -180.0) relativeMouseAngle += 360.0; - while (relativeMouseAngle > 180.0) relativeMouseAngle -= 360.0; + double relativeMouseAngle = mouseAngle - refAngleForQuadrant; + while (relativeMouseAngle <= -180.0) relativeMouseAngle += 360.0; + while (relativeMouseAngle > 180.0) relativeMouseAngle -= 360.0; - if (relativeMouseAngle >= 90 || relativeMouseAngle < -90) { + if (relativeMouseAngle >= 90 || relativeMouseAngle < -90) { + refDir = -refDir; + } + } + } else { + if (property("isChainedLine").toBool()) { refDir = -refDir; } }