#include "SketchGrid.h" SketchGrid::SketchGrid() { } SketchGrid::~SketchGrid() { } void SketchGrid::initializeGL() { initializeOpenGLFunctions(); } void SketchGrid::paintGL(SketchPlane plane, const QMatrix4x4& projection, const QMatrix4x4& modelview) { glMatrixMode(GL_PROJECTION); glLoadMatrixf(projection.constData()); glMatrixMode(GL_MODELVIEW); glLoadMatrixf(modelview.constData()); glPushAttrib(GL_LINE_BIT | GL_POINT_BIT | GL_CURRENT_BIT); glDisable(GL_DEPTH_TEST); drawGridLines(plane); drawAxes(plane); glEnable(GL_DEPTH_TEST); glPopAttrib(); } void SketchGrid::drawGridLines(SketchPlane plane) { const int gridSize = 50; const float darkFactor = 0.8f; // Lighter lines glColor3f(0.5f, 0.5f, 0.5f); glLineWidth(1.0f); glBegin(GL_LINES); for (int i = -gridSize; i <= gridSize; ++i) { if (i == 0 || i % 5 == 0) continue; 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(-gridSize, 0, i); glVertex3f(gridSize, 0, i); } else { // YZ glVertex3f(0, i, -gridSize); glVertex3f(0, i, gridSize); glVertex3f(0, -gridSize, i); glVertex3f(0, gridSize, i); } } glEnd(); // Darker lines glColor3f(0.5f * darkFactor, 0.5f * darkFactor, 0.5f * darkFactor); glLineWidth(1.5f); glBegin(GL_LINES); for (int i = -gridSize; i <= gridSize; i += 5) { if (i == 0) continue; 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(-gridSize, 0, i); glVertex3f(gridSize, 0, i); } else { // YZ glVertex3f(0, i, -gridSize); glVertex3f(0, i, gridSize); glVertex3f(0, -gridSize, i); glVertex3f(0, gridSize, i); } } glEnd(); } void SketchGrid::drawAxes(SketchPlane plane) { const int axisLength = 50; glLineWidth(2.0f); glBegin(GL_LINES); // X Axis (Red) if (plane == XY || plane == XZ) { glColor3f(1.0f, 0.0f, 0.0f); glVertex3f(-axisLength, 0, 0); glVertex3f(axisLength, 0, 0); } // Y Axis (Green) if (plane == XY || plane == YZ) { glColor3f(0.0f, 1.0f, 0.0f); glVertex3f(0, -axisLength, 0); glVertex3f(0, axisLength, 0); } // Z Axis (Blue) if (plane == XZ || plane == YZ) { glColor3f(0.0f, 0.0f, 1.0f); glVertex3f(0, 0, -axisLength); glVertex3f(0, 0, axisLength); } glEnd(); // Origin dot glPointSize(5.0f); glColor3f(1.0f, 1.0f, 1.0f); // White glBegin(GL_POINTS); glVertex3f(0, 0, 0); glEnd(); }