diff --git a/src/ViewportWidget.cpp b/src/ViewportWidget.cpp index f48c9f3..c9e4a00 100644 --- a/src/ViewportWidget.cpp +++ b/src/ViewportWidget.cpp @@ -690,6 +690,29 @@ void ViewportWidget::paintGL() else refDir = QVector3D(0, 1, 0); } + 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())); + + 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 >= 90 || relativeMouseAngle < -90) { + refDir = -refDir; + } + } + double refAngle, lineAngle; if (m_currentPlane == SketchPlane::XY) { refAngle = atan2(refDir.z(), refDir.x());