113 lines
3.0 KiB
C++
113 lines
3.0 KiB
C++
#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();
|
|
}
|