summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkintel <kintel@b57f626f-c46c-0410-a088-ec61d464b74c>2010-01-15 13:03:42 (GMT)
committerkintel <kintel@b57f626f-c46c-0410-a088-ec61d464b74c>2010-01-15 13:03:42 (GMT)
commit4c53f4ec2281b0aeff77ec1bbd91daf6890fbce0 (patch)
treeae4e6d53a49ebe2e4b4b340b94571e630ec7a0fd
parent4e3548fe03cc6ac78381e556d5e8da753759b510 (diff)
Added CROSSHAIR_COLOR, refactored parts of the public GLView interface
git-svn-id: http://svn.clifford.at/openscad/trunk@313 b57f626f-c46c-0410-a088-ec61d464b74c
-rw-r--r--GLView.h39
-rw-r--r--Preferences.cc1
-rw-r--r--Preferences.h3
-rw-r--r--glview.cc21
-rw-r--r--mainwin.cc24
5 files changed, 57 insertions, 31 deletions
diff --git a/GLView.h b/GLView.h
index ca269ce..dd896fc 100644
--- a/GLView.h
+++ b/GLView.h
@@ -12,34 +12,49 @@
class GLView : public QGLWidget
{
Q_OBJECT
+ Q_PROPERTY(bool showAxes READ showAxes WRITE setShowAxes);
+ Q_PROPERTY(bool showCrosshairs READ showCrosshairs WRITE setShowCrosshairs);
+ Q_PROPERTY(bool orthoMode READ orthoMode WRITE setOrthoMode);
public:
- void (*renderfunc)(void*);
- void *renderfunc_vp;
-
- bool orthomode;
- bool showaxes;
- bool showcrosshairs;
+ GLView(QWidget *parent = NULL);
+ void setRenderFunc(void (*func)(void*), void *userdata);
+#ifdef ENABLE_OPENCSG
+ bool hasOpenCSGSupport() { return this->opencsg_support; }
+#endif
+ // Properties
+ bool showAxes() const { return this->showaxes; }
+ void setShowAxes(bool enabled) { this->showaxes = enabled; }
+ bool showCrosshairs() const { return this->showcrosshairs; }
+ void setShowCrosshairs(bool enabled) { this->showcrosshairs = enabled; }
+ bool orthoMode() const { return this->orthomode; }
+ void setOrthoMode(bool enabled) { this->orthomode = enabled; }
- double viewer_distance;
+ QLabel *statusLabel;
double object_rot_x;
double object_rot_y;
double object_rot_z;
double object_trans_x;
double object_trans_y;
double object_trans_z;
+ GLint shaderinfo[11];
+
+private:
+ void (*renderfunc)(void*);
+ void *renderfunc_vp;
+
+ bool showaxes;
+ bool showcrosshairs;
+ bool orthomode;
+
+ double viewer_distance;
double w_h_ratio;
- GLint shaderinfo[11];
- QLabel *statusLabel;
#ifdef ENABLE_OPENCSG
bool opencsg_support;
#endif
- GLView(QWidget *parent = NULL);
-
-protected:
bool mouse_drag_active;
int last_mouse_x;
int last_mouse_y;
diff --git a/Preferences.cc b/Preferences.cc
index cf3ac55..f098ab4 100644
--- a/Preferences.cc
+++ b/Preferences.cc
@@ -35,6 +35,7 @@ Preferences::Preferences(QWidget *parent) : QMainWindow(parent)
this->colormap[CGAL_EDGE_FRONT_COLOR] = QColor(0xff, 0x00, 0x00);
this->colormap[CGAL_EDGE_BACK_COLOR] = QColor(0xff, 0x00, 0x00);
this->colormap[CGAL_EDGE_2D_COLOR] = QColor(0xff, 0x00, 0x00);
+ this->colormap[CROSSHAIR_COLOR] = QColor(0x80, 0x00, 0x00);
QActionGroup *group = new QActionGroup(this);
group->addAction(prefsAction3DView);
diff --git a/Preferences.h b/Preferences.h
index 88cd590..96ae4ca 100644
--- a/Preferences.h
+++ b/Preferences.h
@@ -21,7 +21,8 @@ public:
CGAL_FACE_BACK_COLOR,
CGAL_EDGE_FRONT_COLOR,
CGAL_EDGE_BACK_COLOR,
- CGAL_EDGE_2D_COLOR
+ CGAL_EDGE_2D_COLOR,
+ CROSSHAIR_COLOR
};
void setColor(RenderColor idx, const QColor &color) { this->colormap[idx] = color; }
const QColor &color(RenderColor idx) { return this->colormap[idx]; }
diff --git a/glview.cc b/glview.cc
index 45727cf..18260f8 100644
--- a/glview.cc
+++ b/glview.cc
@@ -20,6 +20,7 @@
#include "openscad.h"
#include "GLView.h"
+#include "Preferences.h"
#include <QApplication>
#include <QWheelEvent>
@@ -61,7 +62,11 @@ GLView::GLView(QWidget *parent) : QGLWidget(parent)
#endif
}
-extern GLint e1, e2, e3;
+void GLView::setRenderFunc(void (*func)(void*), void *userdata)
+{
+ this->renderfunc = func;
+ this->renderfunc_vp = userdata;
+}
void GLView::initializeGL()
{
@@ -71,7 +76,8 @@ void GLView::initializeGL()
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glClearColor(1.0, 1.0, 0.9, 0.0);
+ const QColor &col = Preferences::inst()->color(Preferences::BACKGROUND_COLOR);
+ glClearColor(col.redF(), col.greenF(), col.blueF(), 0.0);
#ifdef ENABLE_OPENCSG
GLenum err = glewInit();
@@ -234,7 +240,8 @@ void GLView::paintGL()
if (showcrosshairs)
{
glLineWidth(3);
- glColor3d(0.5, 0.0, 0.0);
+ const QColor &col = Preferences::inst()->color(Preferences::CROSSHAIR_COLOR);
+ glColor3f(col.redF(), col.greenF(), col.blueF());
glBegin(GL_LINES);
for (double xf = -1; xf <= +1; xf += 2)
for (double yf = -1; yf <= +1; yf += 2) {
@@ -247,6 +254,7 @@ void GLView::paintGL()
glTranslated(object_trans_x, object_trans_y, object_trans_z);
+ // Large gray axis cross inline with the model
if (showaxes)
{
glLineWidth(1);
@@ -271,6 +279,8 @@ void GLView::paintGL()
if (renderfunc)
renderfunc(renderfunc_vp);
+ // Small axis cross in the lower left corner
+ // FIXME: Adjust color to keep contrast with background
if (showaxes)
{
glDepthFunc(GL_ALWAYS);
@@ -290,10 +300,12 @@ void GLView::paintGL()
glRotated(object_rot_z, 0.0, 0.0, 1.0);
glLineWidth(1);
- glColor3d(0.0, 0.0, 1.0);
glBegin(GL_LINES);
+ glColor3d(1.0, 0.0, 0.0);
glVertex3d(0, 0, 0); glVertex3d(10, 0, 0);
+ glColor3d(0.0, 1.0, 0.0);
glVertex3d(0, 0, 0); glVertex3d(0, 10, 0);
+ glColor3d(0.0, 0.0, 1.0);
glVertex3d(0, 0, 0); glVertex3d(0, 0, 10);
glEnd();
@@ -326,6 +338,7 @@ void GLView::paintGL()
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
+ // FIXME: Adjust color to keep contrast with background
glColor3d(0.0, 0.0, 0.0);
glBegin(GL_LINES);
// X Label
diff --git a/mainwin.cc b/mainwin.cc
index ef47008..bf6bdf7 100644
--- a/mainwin.cc
+++ b/mainwin.cc
@@ -214,7 +214,7 @@ MainWindow::MainWindow(const char *filename)
this->viewActionOpenCSG->setVisible(false);
#else
connect(this->viewActionOpenCSG, SIGNAL(triggered()), this, SLOT(viewModeOpenCSG()));
- if (!screen->opencsg_support) {
+ if (!screen->hasOpenCSGSupport()) {
this->viewActionOpenCSG->setEnabled(false);
}
#endif
@@ -1293,11 +1293,10 @@ static void renderGLviaOpenCSG(void *vp)
*/
void MainWindow::viewModeOpenCSG()
{
- if (screen->opencsg_support) {
+ if (screen->hasOpenCSGSupport()) {
viewModeActionsUncheck();
viewActionOpenCSG->setChecked(true);
- screen->renderfunc = renderGLviaOpenCSG;
- screen->renderfunc_vp = this;
+ screen->setRenderFunc(renderGLviaOpenCSG, this);
screen->updateGL();
} else {
viewModeThrownTogether();
@@ -1426,8 +1425,7 @@ void MainWindow::viewModeCGALSurface()
{
viewModeActionsUncheck();
viewActionCGALSurfaces->setChecked(true);
- screen->renderfunc = renderGLviaCGAL;
- screen->renderfunc_vp = this;
+ screen->setRenderFunc(renderGLviaCGAL, this);
screen->updateGL();
}
@@ -1435,8 +1433,7 @@ void MainWindow::viewModeCGALGrid()
{
viewModeActionsUncheck();
viewActionCGALGrid->setChecked(true);
- screen->renderfunc = renderGLviaCGAL;
- screen->renderfunc_vp = this;
+ screen->setRenderFunc(renderGLviaCGAL, this);
screen->updateGL();
}
@@ -1526,8 +1523,7 @@ void MainWindow::viewModeThrownTogether()
{
viewModeActionsUncheck();
viewActionThrownTogether->setChecked(true);
- screen->renderfunc = renderGLThrownTogether;
- screen->renderfunc_vp = this;
+ screen->setRenderFunc(renderGLThrownTogether, this);
screen->updateGL();
}
@@ -1538,13 +1534,13 @@ void MainWindow::viewModeShowEdges()
void MainWindow::viewModeShowAxes()
{
- screen->showaxes = viewActionShowAxes->isChecked();
+ screen->setShowAxes(viewActionShowAxes->isChecked());
screen->updateGL();
}
void MainWindow::viewModeShowCrosshairs()
{
- screen->showcrosshairs = viewActionShowCrosshairs->isChecked();
+ screen->setShowCrosshairs(viewActionShowCrosshairs->isChecked());
screen->updateGL();
}
@@ -1649,7 +1645,7 @@ void MainWindow::viewPerspective()
{
viewActionPerspective->setChecked(true);
viewActionOrthogonal->setChecked(false);
- screen->orthomode = false;
+ screen->setOrthoMode(false);
screen->updateGL();
}
@@ -1657,7 +1653,7 @@ void MainWindow::viewOrthogonal()
{
viewActionPerspective->setChecked(false);
viewActionOrthogonal->setChecked(true);
- screen->orthomode = true;
+ screen->setOrthoMode(true);
screen->updateGL();
}
contact: Jan Huwald // Impressum