fix: Move line tool specific logic from ViewportWidget to LineTool
Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
This commit is contained in:
@@ -153,7 +153,39 @@ void LineTool::mousePressEvent(QMouseEvent *event)
|
||||
|
||||
void LineTool::mouseMoveEvent(QMouseEvent *event)
|
||||
{
|
||||
// To be implemented
|
||||
bool oldIsSnappingHorizontal = m_viewport->isSnappingHorizontal();
|
||||
bool oldIsSnappingVertical = m_viewport->isSnappingVertical();
|
||||
m_viewport->setSnappingHorizontal(false);
|
||||
m_viewport->setSnappingVertical(false);
|
||||
|
||||
if (m_isDefiningLine && !m_viewport->isSnappingOrigin() && !m_viewport->isSnappingVertex()) {
|
||||
QVector3D worldPos = m_viewport->unproject(m_viewport->currentMousePos(), m_viewport->currentPlane());
|
||||
QVector3D startPos(m_firstLinePoint.X(), m_firstLinePoint.Y(), m_firstLinePoint.Z());
|
||||
QVector3D delta = worldPos - startPos;
|
||||
|
||||
if (delta.length() > 1e-6) {
|
||||
const double snapAngleThreshold = qDegreesToRadians(2.0);
|
||||
double angle = 0;
|
||||
|
||||
if (m_viewport->currentPlane() == ViewportWidget::SketchPlane::XY) {
|
||||
angle = atan2(delta.z(), delta.x());
|
||||
} else if (m_viewport->currentPlane() == ViewportWidget::SketchPlane::XZ) {
|
||||
angle = atan2(delta.y(), delta.x());
|
||||
} else if (m_viewport->currentPlane() == ViewportWidget::SketchPlane::YZ) {
|
||||
angle = atan2(delta.z(), delta.y());
|
||||
}
|
||||
|
||||
if (qAbs(sin(angle)) < sin(snapAngleThreshold)) {
|
||||
m_viewport->setSnappingHorizontal(true);
|
||||
} else if (qAbs(cos(angle)) < sin(snapAngleThreshold)) {
|
||||
m_viewport->setSnappingVertical(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (oldIsSnappingHorizontal != m_viewport->isSnappingHorizontal() || oldIsSnappingVertical != m_viewport->isSnappingVertical()) {
|
||||
m_viewport->update();
|
||||
}
|
||||
}
|
||||
|
||||
void LineTool::keyPressEvent(QKeyEvent *event)
|
||||
|
||||
Reference in New Issue
Block a user