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:
@@ -43,11 +43,11 @@ void SketchGrid::drawGridLines(SketchPlane plane)
|
|||||||
{
|
{
|
||||||
if (i == 0 || i % 5 == 0) continue;
|
if (i == 0 || i % 5 == 0) continue;
|
||||||
if (plane == XY) {
|
if (plane == XY) {
|
||||||
glVertex3f(i, -gridSize, 0); glVertex3f(i, gridSize, 0);
|
|
||||||
glVertex3f(-gridSize, i, 0); glVertex3f(gridSize, i, 0);
|
|
||||||
} else if (plane == XZ) {
|
|
||||||
glVertex3f(i, 0, -gridSize); glVertex3f(i, 0, gridSize);
|
glVertex3f(i, 0, -gridSize); glVertex3f(i, 0, gridSize);
|
||||||
glVertex3f(-gridSize, 0, i); glVertex3f(gridSize, 0, i);
|
glVertex3f(-gridSize, 0, i); glVertex3f(gridSize, 0, i);
|
||||||
|
} else if (plane == XZ) {
|
||||||
|
glVertex3f(i, -gridSize, 0); glVertex3f(i, gridSize, 0);
|
||||||
|
glVertex3f(-gridSize, i, 0); glVertex3f(gridSize, i, 0);
|
||||||
} else { // YZ
|
} else { // YZ
|
||||||
glVertex3f(0, i, -gridSize); glVertex3f(0, i, gridSize);
|
glVertex3f(0, i, -gridSize); glVertex3f(0, i, gridSize);
|
||||||
glVertex3f(0, -gridSize, i); glVertex3f(0, gridSize, i);
|
glVertex3f(0, -gridSize, i); glVertex3f(0, gridSize, i);
|
||||||
@@ -63,11 +63,11 @@ void SketchGrid::drawGridLines(SketchPlane plane)
|
|||||||
{
|
{
|
||||||
if (i == 0) continue;
|
if (i == 0) continue;
|
||||||
if (plane == XY) {
|
if (plane == XY) {
|
||||||
glVertex3f(i, -gridSize, 0); glVertex3f(i, gridSize, 0);
|
|
||||||
glVertex3f(-gridSize, i, 0); glVertex3f(gridSize, i, 0);
|
|
||||||
} else if (plane == XZ) {
|
|
||||||
glVertex3f(i, 0, -gridSize); glVertex3f(i, 0, gridSize);
|
glVertex3f(i, 0, -gridSize); glVertex3f(i, 0, gridSize);
|
||||||
glVertex3f(-gridSize, 0, i); glVertex3f(gridSize, 0, i);
|
glVertex3f(-gridSize, 0, i); glVertex3f(gridSize, 0, i);
|
||||||
|
} else if (plane == XZ) {
|
||||||
|
glVertex3f(i, -gridSize, 0); glVertex3f(i, gridSize, 0);
|
||||||
|
glVertex3f(-gridSize, i, 0); glVertex3f(gridSize, i, 0);
|
||||||
} else { // YZ
|
} else { // YZ
|
||||||
glVertex3f(0, i, -gridSize); glVertex3f(0, i, gridSize);
|
glVertex3f(0, i, -gridSize); glVertex3f(0, i, gridSize);
|
||||||
glVertex3f(0, -gridSize, i); glVertex3f(0, gridSize, i);
|
glVertex3f(0, -gridSize, i); glVertex3f(0, gridSize, i);
|
||||||
@@ -92,14 +92,14 @@ void SketchGrid::drawAxes(SketchPlane plane)
|
|||||||
// Y Axis (Green)
|
// Y Axis (Green)
|
||||||
if (plane == XY || plane == YZ) {
|
if (plane == XY || plane == YZ) {
|
||||||
glColor3f(0.0f, 1.0f, 0.0f);
|
glColor3f(0.0f, 1.0f, 0.0f);
|
||||||
glVertex3f(0, -axisLength, 0);
|
glVertex3f(0, 0, -axisLength);
|
||||||
glVertex3f(0, axisLength, 0);
|
glVertex3f(0, 0, axisLength);
|
||||||
}
|
}
|
||||||
// Z Axis (Blue)
|
// Z Axis (Blue)
|
||||||
if (plane == XZ || plane == YZ) {
|
if (plane == XZ || plane == YZ) {
|
||||||
glColor3f(0.0f, 0.0f, 1.0f);
|
glColor3f(0.0f, 0.0f, 1.0f);
|
||||||
glVertex3f(0, 0, -axisLength);
|
glVertex3f(0, -axisLength, 0);
|
||||||
glVertex3f(0, 0, axisLength);
|
glVertex3f(0, axisLength, 0);
|
||||||
}
|
}
|
||||||
glEnd();
|
glEnd();
|
||||||
|
|
||||||
|
|||||||
@@ -200,8 +200,8 @@ void ViewportWidget::paintGL()
|
|||||||
worldPos.setY(m_snapVertex.Y());
|
worldPos.setY(m_snapVertex.Y());
|
||||||
worldPos.setZ(m_snapVertex.Z());
|
worldPos.setZ(m_snapVertex.Z());
|
||||||
} else if (m_isSnappingHorizontal) {
|
} else if (m_isSnappingHorizontal) {
|
||||||
if (m_currentPlane == SketchPlane::XY) worldPos.setY(m_firstLinePoint.Y());
|
if (m_currentPlane == SketchPlane::XY) worldPos.setZ(m_firstLinePoint.Z());
|
||||||
else if (m_currentPlane == SketchPlane::XZ) 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_currentPlane == SketchPlane::YZ) worldPos.setZ(m_firstLinePoint.Z());
|
||||||
} else if (m_isSnappingVertical) {
|
} else if (m_isSnappingVertical) {
|
||||||
if (m_currentPlane == SketchPlane::XY) worldPos.setX(m_firstLinePoint.X());
|
if (m_currentPlane == SketchPlane::XY) worldPos.setX(m_firstLinePoint.X());
|
||||||
@@ -225,22 +225,22 @@ void ViewportWidget::paintGL()
|
|||||||
|
|
||||||
if (m_isSnappingHorizontal) {
|
if (m_isSnappingHorizontal) {
|
||||||
if (m_currentPlane == SketchPlane::XY) {
|
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);
|
||||||
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) {
|
} else if (m_currentPlane == SketchPlane::YZ) {
|
||||||
glVertex3f(midPoint.x(), midPoint.y() - indicatorSize, midPoint.z() + indicatorOffset);
|
glVertex3f(midPoint.x(), midPoint.y() - indicatorSize, midPoint.z() + indicatorOffset);
|
||||||
glVertex3f(midPoint.x(), midPoint.y() + indicatorSize, midPoint.z() + indicatorOffset);
|
glVertex3f(midPoint.x(), midPoint.y() + indicatorSize, midPoint.z() + indicatorOffset);
|
||||||
}
|
}
|
||||||
} else { // m_isSnappingVertical
|
} else { // m_isSnappingVertical
|
||||||
if (m_currentPlane == SketchPlane::XY) {
|
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);
|
||||||
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) {
|
} else if (m_currentPlane == SketchPlane::YZ) {
|
||||||
glVertex3f(midPoint.x(), midPoint.y() + indicatorOffset, midPoint.z() - indicatorSize);
|
glVertex3f(midPoint.x(), midPoint.y() + indicatorOffset, midPoint.z() - indicatorSize);
|
||||||
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 {
|
} else {
|
||||||
QVector3D worldPos = unproject(event->pos());
|
QVector3D worldPos = unproject(event->pos());
|
||||||
if (m_isSnappingHorizontal) {
|
if (m_isSnappingHorizontal) {
|
||||||
if (m_currentPlane == SketchPlane::XY) worldPos.setY(m_firstLinePoint.Y());
|
if (m_currentPlane == SketchPlane::XY) worldPos.setZ(m_firstLinePoint.Z());
|
||||||
else if (m_currentPlane == SketchPlane::XZ) 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_currentPlane == SketchPlane::YZ) worldPos.setZ(m_firstLinePoint.Z());
|
||||||
} else if (m_isSnappingVertical) {
|
} else if (m_isSnappingVertical) {
|
||||||
if (m_currentPlane == SketchPlane::XY) worldPos.setX(m_firstLinePoint.X());
|
if (m_currentPlane == SketchPlane::XY) worldPos.setX(m_firstLinePoint.X());
|
||||||
@@ -322,10 +322,10 @@ void ViewportWidget::mouseMoveEvent(QMouseEvent *event)
|
|||||||
|
|
||||||
switch (m_currentPlane) {
|
switch (m_currentPlane) {
|
||||||
case SketchPlane::XY:
|
case SketchPlane::XY:
|
||||||
shouldSnap = qAbs(worldPos.x()) < snapRectHalfSize && qAbs(worldPos.y()) < snapRectHalfSize;
|
shouldSnap = qAbs(worldPos.x()) < snapRectHalfSize && qAbs(worldPos.z()) < snapRectHalfSize;
|
||||||
break;
|
break;
|
||||||
case SketchPlane::XZ:
|
case SketchPlane::XZ:
|
||||||
shouldSnap = qAbs(worldPos.x()) < snapRectHalfSize && qAbs(worldPos.z()) < snapRectHalfSize;
|
shouldSnap = qAbs(worldPos.x()) < snapRectHalfSize && qAbs(worldPos.y()) < snapRectHalfSize;
|
||||||
break;
|
break;
|
||||||
case SketchPlane::YZ:
|
case SketchPlane::YZ:
|
||||||
shouldSnap = qAbs(worldPos.y()) < snapRectHalfSize && qAbs(worldPos.z()) < snapRectHalfSize;
|
shouldSnap = qAbs(worldPos.y()) < snapRectHalfSize && qAbs(worldPos.z()) < snapRectHalfSize;
|
||||||
@@ -359,10 +359,10 @@ void ViewportWidget::mouseMoveEvent(QMouseEvent *event)
|
|||||||
bool isClose = false;
|
bool isClose = false;
|
||||||
switch (m_currentPlane) {
|
switch (m_currentPlane) {
|
||||||
case SketchPlane::XY:
|
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;
|
break;
|
||||||
case SketchPlane::XZ:
|
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;
|
break;
|
||||||
case SketchPlane::YZ:
|
case SketchPlane::YZ:
|
||||||
isClose = qAbs(worldPos.y() - vertex.Y()) < snapRectHalfSize && qAbs(worldPos.z() - vertex.Z()) < snapRectHalfSize;
|
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;
|
double angle = 0;
|
||||||
|
|
||||||
if (m_currentPlane == SketchPlane::XY) {
|
if (m_currentPlane == SketchPlane::XY) {
|
||||||
angle = atan2(delta.y(), delta.x());
|
|
||||||
} else if (m_currentPlane == SketchPlane::XZ) {
|
|
||||||
angle = atan2(delta.z(), delta.x());
|
angle = atan2(delta.z(), delta.x());
|
||||||
|
} else if (m_currentPlane == SketchPlane::XZ) {
|
||||||
|
angle = atan2(delta.y(), delta.x());
|
||||||
} else if (m_currentPlane == SketchPlane::YZ) {
|
} else if (m_currentPlane == SketchPlane::YZ) {
|
||||||
angle = atan2(delta.z(), delta.y());
|
angle = atan2(delta.z(), delta.y());
|
||||||
}
|
}
|
||||||
@@ -476,12 +476,12 @@ void ViewportWidget::onSketchModeStarted(SketchPlane plane)
|
|||||||
float targetXRot = m_xRot;
|
float targetXRot = m_xRot;
|
||||||
float targetYRot = m_yRot;
|
float targetYRot = m_yRot;
|
||||||
switch (plane) {
|
switch (plane) {
|
||||||
case SketchPlane::XY: // Front view
|
case SketchPlane::XY: // Top view
|
||||||
targetXRot = 0;
|
targetXRot = -90 * 16;
|
||||||
targetYRot = 0;
|
targetYRot = 0;
|
||||||
break;
|
break;
|
||||||
case SketchPlane::XZ: // Top view
|
case SketchPlane::XZ: // Front view
|
||||||
targetXRot = -90 * 16;
|
targetXRot = 0;
|
||||||
targetYRot = 0;
|
targetYRot = 0;
|
||||||
break;
|
break;
|
||||||
case SketchPlane::YZ: // Right view
|
case SketchPlane::YZ: // Right view
|
||||||
@@ -617,10 +617,10 @@ void ViewportWidget::drawAxisLabels(QPainter& painter, const QMatrix4x4& modelVi
|
|||||||
|
|
||||||
if (m_currentPlane == SketchPlane::XY) {
|
if (m_currentPlane == SketchPlane::XY) {
|
||||||
drawLabelsForAxis(0); // X
|
drawLabelsForAxis(0); // X
|
||||||
drawLabelsForAxis(1); // Y
|
drawLabelsForAxis(2); // Y
|
||||||
} else if (m_currentPlane == SketchPlane::XZ) {
|
} else if (m_currentPlane == SketchPlane::XZ) {
|
||||||
drawLabelsForAxis(0); // X
|
drawLabelsForAxis(0); // X
|
||||||
drawLabelsForAxis(2); // Z
|
drawLabelsForAxis(1); // Z
|
||||||
} else if (m_currentPlane == SketchPlane::YZ) {
|
} else if (m_currentPlane == SketchPlane::YZ) {
|
||||||
drawLabelsForAxis(1); // Y
|
drawLabelsForAxis(1); // Y
|
||||||
drawLabelsForAxis(2); // Z
|
drawLabelsForAxis(2); // Z
|
||||||
@@ -705,8 +705,8 @@ QVector3D ViewportWidget::unproject(const QPoint& screenPos)
|
|||||||
|
|
||||||
QVector3D planeNormal;
|
QVector3D planeNormal;
|
||||||
switch (m_currentPlane) {
|
switch (m_currentPlane) {
|
||||||
case SketchPlane::XY: planeNormal = QVector3D(0, 0, 1); break;
|
case SketchPlane::XY: planeNormal = QVector3D(0, 1, 0); break;
|
||||||
case SketchPlane::XZ: 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::YZ: planeNormal = QVector3D(1, 0, 0); break;
|
||||||
case SketchPlane::NONE: return QVector3D();
|
case SketchPlane::NONE: return QVector3D();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user