diff options
author | clifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c> | 2010-01-05 23:17:06 (GMT) |
---|---|---|
committer | clifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c> | 2010-01-05 23:17:06 (GMT) |
commit | 6f2f0016d1145a856b5ae2a647c7f8be51a3169e (patch) | |
tree | daed2a5d614c56cdc389250786922fce080c7a82 /mainwin.cc | |
parent | 8d732c87aacbbd7db7d12d7aae37bad6d5a51405 (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.cc | 36 |
1 files changed, 34 insertions, 2 deletions
@@ -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) { |