summaryrefslogtreecommitdiff
path: root/mainwin.cc
diff options
context:
space:
mode:
authorclifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c>2010-01-05 23:17:06 (GMT)
committerclifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c>2010-01-05 23:17:06 (GMT)
commit6f2f0016d1145a856b5ae2a647c7f8be51a3169e (patch)
treedaed2a5d614c56cdc389250786922fce080c7a82 /mainwin.cc
parent8d732c87aacbbd7db7d12d7aae37bad6d5a51405 (diff)
Clifford Wolf:
Improved 3d view of rendered 2d data git-svn-id: http://svn.clifford.at/openscad/trunk@206 b57f626f-c46c-0410-a088-ec61d464b74c
Diffstat (limited to 'mainwin.cc')
-rw-r--r--mainwin.cc36
1 files changed, 34 insertions, 2 deletions
diff --git a/mainwin.cc b/mainwin.cc
index b88baa7..2e7bbe2 100644
--- a/mainwin.cc
+++ b/mainwin.cc
@@ -112,6 +112,7 @@ MainWindow::MainWindow(const char *filename)
root_N = NULL;
recreate_cgal_ogl_p = false;
cgal_ogl_p = NULL;
+ cgal_ogl_ps = NULL;
#endif
highlights_chain = NULL;
@@ -290,6 +291,8 @@ MainWindow::~MainWindow()
CGAL::OGL::Polyhedron *p = (CGAL::OGL::Polyhedron*)cgal_ogl_p;
delete p;
}
+ if (cgal_ogl_ps)
+ cgal_ogl_ps->unlink();
#endif
}
@@ -1217,14 +1220,41 @@ static void renderGLviaCGAL(void *vp)
CGAL::OGL::Polyhedron *p = (CGAL::OGL::Polyhedron*)m->cgal_ogl_p;
delete p;
m->cgal_ogl_p = NULL;
+ if (m->cgal_ogl_ps)
+ m->cgal_ogl_ps->unlink();
+ m->cgal_ogl_ps = NULL;
}
if (m->root_N && m->root_N->dim == 2)
{
+ if (m->cgal_ogl_ps == NULL) {
+ DxfData dd(*m->root_N);
+ m->cgal_ogl_ps = new PolySet();
+ m->cgal_ogl_ps->is2d = true;
+ dxf_tesselate(m->cgal_ogl_ps, &dd, 0, true, 0);
+ }
+
+ glDisable(GL_LIGHTING);
+ glColor3d(0.0, 0.75, 0.6);
+
+ for (int i=0; i < m->cgal_ogl_ps->polygons.size(); i++) {
+ glBegin(GL_POLYGON);
+ for (int j=0; j < m->cgal_ogl_ps->polygons[i].size(); j++) {
+ PolySet::Point p = m->cgal_ogl_ps->polygons[i][j];
+ glVertex3d(p.x, p.y, -0.1);
+ }
+ glEnd();
+ }
+
typedef CGAL_Nef_polyhedron2::Explorer Explorer;
typedef Explorer::Face_const_iterator fci_t;
typedef Explorer::Halfedge_around_face_const_circulator heafcc_t;
typedef Explorer::Point Point;
Explorer E = m->root_N->p2.explorer();
+
+ glDisable(GL_DEPTH_TEST);
+ glDisable(GL_LIGHTING);
+ glLineWidth(2);
+ glColor3d(0.0, 0.0, 0.0);
for (fci_t fit = E.faces_begin(), fend = E.faces_end(); fit != fend; ++fit)
{
@@ -1240,14 +1270,16 @@ static void renderGLviaCGAL(void *vp)
fx = x, fy = y;
fset = true;
}
- glVertex3d(x, y, 0.0);
+ glVertex3d(x, y, -0.1);
}
}
if (fset) {
- glVertex3d(fx, fy, 0.0);
+ glVertex3d(fx, fy, -0.1);
glEnd();
}
}
+
+ glEnable(GL_DEPTH_TEST);
}
if (m->root_N && m->root_N->dim == 3)
{
contact: Jan Huwald // Impressum