feat: Reorient sketch planes to match Fusion 360 views
Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
This commit is contained in:
@@ -200,8 +200,8 @@ void ViewportWidget::paintGL()
|
||||
worldPos.setY(m_snapVertex.Y());
|
||||
worldPos.setZ(m_snapVertex.Z());
|
||||
} else if (m_isSnappingHorizontal) {
|
||||
if (m_currentPlane == SketchPlane::XY) worldPos.setY(m_firstLinePoint.Y());
|
||||
else if (m_currentPlane == SketchPlane::XZ) worldPos.setZ(m_firstLinePoint.Z());
|
||||
if (m_currentPlane == SketchPlane::XY) worldPos.setZ(m_firstLinePoint.Z());
|
||||
else if (m_currentPlane == SketchPlane::XZ) worldPos.setY(m_firstLinePoint.Y());
|
||||
else if (m_currentPlane == SketchPlane::YZ) worldPos.setZ(m_firstLinePoint.Z());
|
||||
} else if (m_isSnappingVertical) {
|
||||
if (m_currentPlane == SketchPlane::XY) worldPos.setX(m_firstLinePoint.X());
|
||||
@@ -225,22 +225,22 @@ void ViewportWidget::paintGL()
|
||||
|
||||
if (m_isSnappingHorizontal) {
|
||||
if (m_currentPlane == SketchPlane::XY) {
|
||||
glVertex3f(midPoint.x() - indicatorSize, midPoint.y() + indicatorOffset, midPoint.z());
|
||||
glVertex3f(midPoint.x() + indicatorSize, midPoint.y() + indicatorOffset, midPoint.z());
|
||||
} else if (m_currentPlane == SketchPlane::XZ) {
|
||||
glVertex3f(midPoint.x() - indicatorSize, midPoint.y(), midPoint.z() + indicatorOffset);
|
||||
glVertex3f(midPoint.x() + indicatorSize, midPoint.y(), midPoint.z() + indicatorOffset);
|
||||
} else if (m_currentPlane == SketchPlane::XZ) {
|
||||
glVertex3f(midPoint.x() - indicatorSize, midPoint.y() + indicatorOffset, midPoint.z());
|
||||
glVertex3f(midPoint.x() + indicatorSize, midPoint.y() + indicatorOffset, midPoint.z());
|
||||
} else if (m_currentPlane == SketchPlane::YZ) {
|
||||
glVertex3f(midPoint.x(), midPoint.y() - indicatorSize, midPoint.z() + indicatorOffset);
|
||||
glVertex3f(midPoint.x(), midPoint.y() + indicatorSize, midPoint.z() + indicatorOffset);
|
||||
}
|
||||
} else { // m_isSnappingVertical
|
||||
if (m_currentPlane == SketchPlane::XY) {
|
||||
glVertex3f(midPoint.x() + indicatorOffset, midPoint.y() - indicatorSize, midPoint.z());
|
||||
glVertex3f(midPoint.x() + indicatorOffset, midPoint.y() + indicatorSize, midPoint.z());
|
||||
} else if (m_currentPlane == SketchPlane::XZ) {
|
||||
glVertex3f(midPoint.x() + indicatorOffset, midPoint.y(), midPoint.z() - indicatorSize);
|
||||
glVertex3f(midPoint.x() + indicatorOffset, midPoint.y(), midPoint.z() + indicatorSize);
|
||||
} else if (m_currentPlane == SketchPlane::XZ) {
|
||||
glVertex3f(midPoint.x() + indicatorOffset, midPoint.y() - indicatorSize, midPoint.z());
|
||||
glVertex3f(midPoint.x() + indicatorOffset, midPoint.y() + indicatorSize, midPoint.z());
|
||||
} else if (m_currentPlane == SketchPlane::YZ) {
|
||||
glVertex3f(midPoint.x(), midPoint.y() + indicatorOffset, midPoint.z() - indicatorSize);
|
||||
glVertex3f(midPoint.x(), midPoint.y() + indicatorOffset, midPoint.z() + indicatorSize);
|
||||
@@ -287,8 +287,8 @@ void ViewportWidget::mousePressEvent(QMouseEvent *event)
|
||||
} else {
|
||||
QVector3D worldPos = unproject(event->pos());
|
||||
if (m_isSnappingHorizontal) {
|
||||
if (m_currentPlane == SketchPlane::XY) worldPos.setY(m_firstLinePoint.Y());
|
||||
else if (m_currentPlane == SketchPlane::XZ) worldPos.setZ(m_firstLinePoint.Z());
|
||||
if (m_currentPlane == SketchPlane::XY) worldPos.setZ(m_firstLinePoint.Z());
|
||||
else if (m_currentPlane == SketchPlane::XZ) worldPos.setY(m_firstLinePoint.Y());
|
||||
else if (m_currentPlane == SketchPlane::YZ) worldPos.setZ(m_firstLinePoint.Z());
|
||||
} else if (m_isSnappingVertical) {
|
||||
if (m_currentPlane == SketchPlane::XY) worldPos.setX(m_firstLinePoint.X());
|
||||
@@ -322,10 +322,10 @@ void ViewportWidget::mouseMoveEvent(QMouseEvent *event)
|
||||
|
||||
switch (m_currentPlane) {
|
||||
case SketchPlane::XY:
|
||||
shouldSnap = qAbs(worldPos.x()) < snapRectHalfSize && qAbs(worldPos.y()) < snapRectHalfSize;
|
||||
shouldSnap = qAbs(worldPos.x()) < snapRectHalfSize && qAbs(worldPos.z()) < snapRectHalfSize;
|
||||
break;
|
||||
case SketchPlane::XZ:
|
||||
shouldSnap = qAbs(worldPos.x()) < snapRectHalfSize && qAbs(worldPos.z()) < snapRectHalfSize;
|
||||
shouldSnap = qAbs(worldPos.x()) < snapRectHalfSize && qAbs(worldPos.y()) < snapRectHalfSize;
|
||||
break;
|
||||
case SketchPlane::YZ:
|
||||
shouldSnap = qAbs(worldPos.y()) < snapRectHalfSize && qAbs(worldPos.z()) < snapRectHalfSize;
|
||||
@@ -359,10 +359,10 @@ void ViewportWidget::mouseMoveEvent(QMouseEvent *event)
|
||||
bool isClose = false;
|
||||
switch (m_currentPlane) {
|
||||
case SketchPlane::XY:
|
||||
isClose = qAbs(worldPos.x() - vertex.X()) < snapRectHalfSize && qAbs(worldPos.y() - vertex.Y()) < snapRectHalfSize;
|
||||
isClose = qAbs(worldPos.x() - vertex.X()) < snapRectHalfSize && qAbs(worldPos.z() - vertex.Z()) < snapRectHalfSize;
|
||||
break;
|
||||
case SketchPlane::XZ:
|
||||
isClose = qAbs(worldPos.x() - vertex.X()) < snapRectHalfSize && qAbs(worldPos.z() - vertex.Z()) < snapRectHalfSize;
|
||||
isClose = qAbs(worldPos.x() - vertex.X()) < snapRectHalfSize && qAbs(worldPos.y() - vertex.Y()) < snapRectHalfSize;
|
||||
break;
|
||||
case SketchPlane::YZ:
|
||||
isClose = qAbs(worldPos.y() - vertex.Y()) < snapRectHalfSize && qAbs(worldPos.z() - vertex.Z()) < snapRectHalfSize;
|
||||
@@ -403,9 +403,9 @@ void ViewportWidget::mouseMoveEvent(QMouseEvent *event)
|
||||
double angle = 0;
|
||||
|
||||
if (m_currentPlane == SketchPlane::XY) {
|
||||
angle = atan2(delta.y(), delta.x());
|
||||
} else if (m_currentPlane == SketchPlane::XZ) {
|
||||
angle = atan2(delta.z(), delta.x());
|
||||
} else if (m_currentPlane == SketchPlane::XZ) {
|
||||
angle = atan2(delta.y(), delta.x());
|
||||
} else if (m_currentPlane == SketchPlane::YZ) {
|
||||
angle = atan2(delta.z(), delta.y());
|
||||
}
|
||||
@@ -476,12 +476,12 @@ void ViewportWidget::onSketchModeStarted(SketchPlane plane)
|
||||
float targetXRot = m_xRot;
|
||||
float targetYRot = m_yRot;
|
||||
switch (plane) {
|
||||
case SketchPlane::XY: // Front view
|
||||
targetXRot = 0;
|
||||
case SketchPlane::XY: // Top view
|
||||
targetXRot = -90 * 16;
|
||||
targetYRot = 0;
|
||||
break;
|
||||
case SketchPlane::XZ: // Top view
|
||||
targetXRot = -90 * 16;
|
||||
case SketchPlane::XZ: // Front view
|
||||
targetXRot = 0;
|
||||
targetYRot = 0;
|
||||
break;
|
||||
case SketchPlane::YZ: // Right view
|
||||
@@ -617,10 +617,10 @@ void ViewportWidget::drawAxisLabels(QPainter& painter, const QMatrix4x4& modelVi
|
||||
|
||||
if (m_currentPlane == SketchPlane::XY) {
|
||||
drawLabelsForAxis(0); // X
|
||||
drawLabelsForAxis(1); // Y
|
||||
drawLabelsForAxis(2); // Y
|
||||
} else if (m_currentPlane == SketchPlane::XZ) {
|
||||
drawLabelsForAxis(0); // X
|
||||
drawLabelsForAxis(2); // Z
|
||||
drawLabelsForAxis(1); // Z
|
||||
} else if (m_currentPlane == SketchPlane::YZ) {
|
||||
drawLabelsForAxis(1); // Y
|
||||
drawLabelsForAxis(2); // Z
|
||||
@@ -705,8 +705,8 @@ QVector3D ViewportWidget::unproject(const QPoint& screenPos)
|
||||
|
||||
QVector3D planeNormal;
|
||||
switch (m_currentPlane) {
|
||||
case SketchPlane::XY: planeNormal = QVector3D(0, 0, 1); break;
|
||||
case SketchPlane::XZ: planeNormal = QVector3D(0, 1, 0); break;
|
||||
case SketchPlane::XY: planeNormal = QVector3D(0, 1, 0); break;
|
||||
case SketchPlane::XZ: planeNormal = QVector3D(0, 0, 1); break;
|
||||
case SketchPlane::YZ: planeNormal = QVector3D(1, 0, 0); break;
|
||||
case SketchPlane::NONE: return QVector3D();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user