From c9c1b38f45a979c47c07fe47ce9f1d4a669a6303 Mon Sep 17 00:00:00 2001 From: Tanner Collin Date: Mon, 16 Feb 2026 19:47:03 -0700 Subject: [PATCH] fix: Redefine angle dimension quadrant snapping Co-authored-by: aider (gemini/gemini-2.5-pro) --- src/ViewportWidget.cpp | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/src/ViewportWidget.cpp b/src/ViewportWidget.cpp index e0cae3f..baeaaac 100644 --- a/src/ViewportWidget.cpp +++ b/src/ViewportWidget.cpp @@ -250,14 +250,14 @@ void ViewportWidget::paintGL() while (relativeMouseAngle > 180.0) relativeMouseAngle -= 360.0; double snappedAngle = 0; - if (relativeMouseAngle >= -45 && relativeMouseAngle < 45) { + if (relativeMouseAngle >= 0 && relativeMouseAngle < 90) { // Quadrant 1 snappedAngle = inputAngleDegrees; - } else if (relativeMouseAngle >= 45 && relativeMouseAngle < 135) { - snappedAngle = 180 - inputAngleDegrees; - } else if (relativeMouseAngle >= 135 || relativeMouseAngle < -135) { - snappedAngle = inputAngleDegrees + 180.0; - } else { // -135 to -45 - snappedAngle = 360 - inputAngleDegrees; + } else if (relativeMouseAngle >= 90 && relativeMouseAngle <= 180) { // Quadrant 2 + snappedAngle = 180.0 - inputAngleDegrees; + } else if (relativeMouseAngle < -90) { // Quadrant 3 + snappedAngle = -180.0 + inputAngleDegrees; + } else { // Quadrant 4 + snappedAngle = -inputAngleDegrees; } double finalAngleRad = qDegreesToRadians(refAngle + snappedAngle); @@ -803,10 +803,15 @@ void ViewportWidget::mousePressEvent(QMouseEvent *event) while (relativeMouseAngle <= -180.0) relativeMouseAngle += 360.0; while (relativeMouseAngle > 180.0) relativeMouseAngle -= 360.0; double snappedAngle = 0; - if (relativeMouseAngle >= -45 && relativeMouseAngle < 45) snappedAngle = inputAngleDegrees; - else if (relativeMouseAngle >= 45 && relativeMouseAngle < 135) snappedAngle = 180 - inputAngleDegrees; - else if (relativeMouseAngle >= 135 || relativeMouseAngle < -135) snappedAngle = inputAngleDegrees + 180.0; - else snappedAngle = 360 - inputAngleDegrees; + if (relativeMouseAngle >= 0 && relativeMouseAngle < 90) { // Quadrant 1 + snappedAngle = inputAngleDegrees; + } else if (relativeMouseAngle >= 90 && relativeMouseAngle <= 180) { // Quadrant 2 + snappedAngle = 180.0 - inputAngleDegrees; + } else if (relativeMouseAngle < -90) { // Quadrant 3 + snappedAngle = -180.0 + inputAngleDegrees; + } else { // Quadrant 4 + snappedAngle = -inputAngleDegrees; + } double finalAngleRad = qDegreesToRadians(refAngle + snappedAngle); QVector3D finalDir; if (m_currentPlane == SketchPlane::XY) finalDir = QVector3D(cos(finalAngleRad), 0, sin(finalAngleRad)); @@ -1089,10 +1094,15 @@ void ViewportWidget::keyPressEvent(QKeyEvent *event) while (relativeMouseAngle <= -180.0) relativeMouseAngle += 360.0; while (relativeMouseAngle > 180.0) relativeMouseAngle -= 360.0; double snappedAngle = 0; - if (relativeMouseAngle >= -45 && relativeMouseAngle < 45) snappedAngle = inputAngleDegrees; - else if (relativeMouseAngle >= 45 && relativeMouseAngle < 135) snappedAngle = 180 - inputAngleDegrees; - else if (relativeMouseAngle >= 135 || relativeMouseAngle < -135) snappedAngle = inputAngleDegrees + 180.0; - else snappedAngle = 360 - inputAngleDegrees; + if (relativeMouseAngle >= 0 && relativeMouseAngle < 90) { // Quadrant 1 + snappedAngle = inputAngleDegrees; + } else if (relativeMouseAngle >= 90 && relativeMouseAngle <= 180) { // Quadrant 2 + snappedAngle = 180.0 - inputAngleDegrees; + } else if (relativeMouseAngle < -90) { // Quadrant 3 + snappedAngle = -180.0 + inputAngleDegrees; + } else { // Quadrant 4 + snappedAngle = -inputAngleDegrees; + } double finalAngleRad = qDegreesToRadians(refAngle + snappedAngle); QVector3D finalDir; if (m_currentPlane == SketchPlane::XY) finalDir = QVector3D(cos(finalAngleRad), 0, sin(finalAngleRad));