From c117ff3a8a5979abf8754220577d9108a287e45d Mon Sep 17 00:00:00 2001 From: Tanner Collin Date: Mon, 16 Feb 2026 19:31:23 -0700 Subject: [PATCH] fix: Adjust angle dimension arc direction on quadrant snap Co-authored-by: aider (gemini/gemini-2.5-pro) --- src/ViewportWidget.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/ViewportWidget.cpp b/src/ViewportWidget.cpp index 326150d..e0cae3f 100644 --- a/src/ViewportWidget.cpp +++ b/src/ViewportWidget.cpp @@ -373,6 +373,30 @@ void ViewportWidget::paintGL() else refDir = QVector3D(0, 1, 0); } + if (angleFromInput) { + QVector3D currentMouseWorldPos = unproject(m_currentMousePos, m_currentPlane); + QVector3D mouseVec = currentMouseWorldPos - startPos; + + double mouseAngle; + if (m_currentPlane == SketchPlane::XY) mouseAngle = qRadiansToDegrees(atan2(mouseVec.z(), mouseVec.x())); + else if (m_currentPlane == SketchPlane::XZ) mouseAngle = qRadiansToDegrees(atan2(mouseVec.y(), mouseVec.x())); + else mouseAngle = qRadiansToDegrees(atan2(mouseVec.z(), mouseVec.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; + + if ((relativeMouseAngle >= 45 && relativeMouseAngle < 135) || + (relativeMouseAngle >= 135 || relativeMouseAngle < -135)) { + refDir = -refDir; + } + } + double refAngle, lineAngle; if (m_currentPlane == SketchPlane::XY) { refAngle = atan2(refDir.z(), refDir.x());