Cleaned up the OGL_helper patches a bit

stl_dim
Marius Kintel 2011-09-29 23:13:22 +02:00
parent c1fa2f9675
commit 1b31c32638
3 changed files with 97 additions and 25 deletions

View File

@ -0,0 +1,80 @@
--- OGL_helper.h 2011-09-29 23:02:04.000000000 +0200
+++ ../src/OGL_helper.h 2011-09-29 23:01:27.000000000 +0200
@@ -263,7 +263,7 @@
enum { SNC_BOUNDARY, SNC_SKELETON };
class Polyhedron : public OGL_base_object {
-
+ protected:
std::list<DPoint> vertices_;
std::list<DSegment> edges_;
std::list<DFacet> halffacets_;
@@ -356,11 +356,17 @@
Bbox_3 bbox() const { return bbox_; }
Bbox_3& bbox() { return bbox_; }
+ virtual CGAL::Color getVertexColor(Vertex_iterator v) const
+ {
+ CGAL::Color cf(CGAL_NEF3_MARKED_VERTEX_COLOR),
+ ct(CGAL_NEF3_UNMARKED_VERTEX_COLOR); // more blue-ish
+ CGAL::Color c = v->mark() ? ct : cf;
+ return c;
+ }
+
void draw(Vertex_iterator v) const {
// CGAL_NEF_TRACEN("drawing vertex "<<*v);
- CGAL::Color cf(CGAL_NEF3_MARKED_VERTEX_COLOR),
- ct(CGAL_NEF3_UNMARKED_VERTEX_COLOR); // more blue-ish
- CGAL::Color c = v->mark() ? ct : cf;
+ CGAL::Color c = getVertexColor(v);
glPointSize(10);
glColor3ub(c.red(), c.green(), c.blue());
glBegin(GL_POINTS);
@@ -372,12 +378,18 @@
glEnd();
}
+ virtual CGAL::Color getEdgeColor(Edge_iterator e) const
+ {
+ CGAL::Color cf(CGAL_NEF3_MARKED_EDGE_COLOR),
+ ct(CGAL_NEF3_UNMARKED_EDGE_COLOR); // more blue-ish
+ CGAL::Color c = e->mark() ? ct : cf;
+ return c;
+ }
+
void draw(Edge_iterator e) const {
// CGAL_NEF_TRACEN("drawing edge "<<*e);
Double_point p = e->source(), q = e->target();
- CGAL::Color cf(CGAL_NEF3_MARKED_EDGE_COLOR),
- ct(CGAL_NEF3_UNMARKED_EDGE_COLOR); // more blue-ish
- CGAL::Color c = e->mark() ? ct : cf;
+ CGAL::Color c = getEdgeColor(e);
glLineWidth(5);
glColor3ub(c.red(),c.green(),c.blue());
glBegin(GL_LINE_STRIP);
@@ -386,6 +398,14 @@
glEnd();
}
+ virtual CGAL::Color getFacetColor(Halffacet_iterator f) const
+ {
+ CGAL::Color cf(CGAL_NEF3_MARKED_FACET_COLOR),
+ ct(CGAL_NEF3_UNMARKED_FACET_COLOR); // more blue-ish
+ CGAL::Color c = (f->mark() ? ct : cf);
+ return c;
+ }
+
void draw(Halffacet_iterator f) const {
// CGAL_NEF_TRACEN("drawing facet "<<(f->debug(),""));
GLUtesselator* tess_ = gluNewTess();
@@ -403,9 +423,7 @@
GLU_TESS_WINDING_POSITIVE);
DFacet::Coord_const_iterator cit;
- CGAL::Color cf(CGAL_NEF3_MARKED_FACET_COLOR),
- ct(CGAL_NEF3_UNMARKED_FACET_COLOR); // more blue-ish
- CGAL::Color c = (f->mark() ? ct : cf);
+ CGAL::Color c = getFacetColor(f);
glColor3ub(c.red(),c.green(),c.blue());
gluTessBeginPolygon(tess_,f->normal());
// CGAL_NEF_TRACEN(" ");

View File

@ -1,12 +1,11 @@
--- CGAL-3.4/include/CGAL/Nef_3/OGL_helper.h
+++ CGAL-3.4/include/CGAL/Nef_3/OGL_helper.h
@@ -243,6 +243,23 @@
--- ../../libraries/install/include/CGAL/Nef_3/OGL_helper.h 2010-06-09 21:00:52.000000000 +0200
+++ OGL_helper.h 2011-09-29 23:09:47.000000000 +0200
@@ -243,6 +243,22 @@
glVertex3dv(pc);
}
+ inline void CGAL_GLU_TESS_CALLBACK combineCallback(GLdouble coords[3], GLvoid *d[4], GLfloat w[4], GLvoid **dataOut)
+ {
+ static std::list<GLdouble*> pcache;
+ inline void CGAL_GLU_TESS_CALLBACK combineCallback(GLdouble coords[3], GLvoid *[4], GLfloat [4], GLvoid **dataOut)
+ { static std::list<GLdouble*> pcache;
+ if (dataOut) {
+ GLdouble *n = new GLdouble[3];
+ n[0] = coords[0];
@ -24,7 +23,7 @@
enum { SNC_AXES};
enum { SNC_BOUNDARY, SNC_SKELETON };
@@ -376,6 +393,8 @@
@@ -376,6 +392,8 @@
GLUtesselator* tess_ = gluNewTess();
gluTessCallback(tess_, GLenum(GLU_TESS_VERTEX_DATA),
(GLvoid (CGAL_GLU_TESS_CALLBACK *)(CGAL_GLU_TESS_DOTS)) &vertexCallback);
@ -33,11 +32,3 @@
gluTessCallback(tess_, GLenum(GLU_TESS_BEGIN),
(GLvoid (CGAL_GLU_TESS_CALLBACK *)(CGAL_GLU_TESS_DOTS)) &beginCallback);
gluTessCallback(tess_, GLenum(GLU_TESS_END),
@@ -410,6 +429,7 @@
gluTessEndPolygon(tess_);
// CGAL_NEF_TRACEN("End Polygon");
gluDeleteTess(tess_);
+ combineCallback(NULL, NULL, NULL, NULL);
}
void construct_axes() const

View File

@ -11,7 +11,7 @@
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
//
// $URL: svn+ssh://scm.gforge.inria.fr/svn/cgal/branches/CGAL-3.7-branch/Nef_3/include/CGAL/Nef_3/OGL_helper.h $
// $URL: svn+ssh://scm.gforge.inria.fr/svn/cgal/trunk/Nef_3/include/CGAL/Nef_3/OGL_helper.h $
// $Id: OGL_helper.h 56667 2010-06-09 07:37:13Z sloriot $
//
//
@ -246,19 +246,20 @@ namespace OGL {
inline void CGAL_GLU_TESS_CALLBACK combineCallback(GLdouble coords[3], GLvoid *[4], GLfloat [4], GLvoid **dataOut)
{ static std::list<GLdouble*> pcache;
if (dataOut) {
GLdouble *n = new GLdouble[3];
n[0] = coords[0];
n[1] = coords[1];
n[2] = coords[2];
pcache.push_back(n);
*dataOut = n;
GLdouble *n = new GLdouble[3];
n[0] = coords[0];
n[1] = coords[1];
n[2] = coords[2];
pcache.push_back(n);
*dataOut = n;
} else {
for (std::list<GLdouble*>::const_iterator i = pcache.begin(); i != pcache.end(); i++)
delete[] *i;
pcache.clear();
for (std::list<GLdouble*>::const_iterator i = pcache.begin(); i != pcache.end(); i++)
delete[] *i;
pcache.clear();
}
}
enum { SNC_AXES};
enum { SNC_BOUNDARY, SNC_SKELETON };