Man Linux: Main Page and Category List

NAME

       SbTesselator -

       The SbTesselator class is used to tessellate polygons into triangles.

       SbTesselator is used within Coin to split polygons into triangles. It
       handles concave polygons, does Delaunay triangulation and avoids
       generating self-intersecting triangles.

SYNOPSIS

       #include <Inventor/SbTesselator.h>

   Public Member Functions
       SbTesselator (SbTesselatorCB *func=NULL, void *data=NULL)
       ~SbTesselator (void)
       void beginPolygon (SbBool keepVertices=0, const SbVec3f
           &normal=SbVec3f(0.0f, 0.0f, 0.0f))
       void addVertex (const SbVec3f &v, void *data)
       void endPolygon (void)
       void setCallback (SbTesselatorCB *func, void *data)

Detailed Description

       The SbTesselator class is used to tessellate polygons into triangles.

       SbTesselator is used within Coin to split polygons into triangles. It
       handles concave polygons, does Delaunay triangulation and avoids
       generating self-intersecting triangles.

       Here’s a simple example which shows how to tessellate a quad polygon
       with corners in <0, 0, 0>, <1, 0, 0>, <1, 1, 0> and <0, 1, 0>.

         // Callback function for the tessellator. Called once for each
         // generated triangle with the vertices.
         static void
         tess_cb(void * v0, void * v1, void * v2, void * cbdata)
         {
           SbVec3f * vtx0 = (SbVec3f *)v0;
           SbVec3f * vtx1 = (SbVec3f *)v1;
           SbVec3f * vtx2 = (SbVec3f *)v2;
           (void) fprintf(stdout, ’triangle: <%f, %f, %f> <%f, %f, %f> <%f, %f, %f>0,
             (*vtx0)[0], (*vtx0)[1], (*vtx0)[2],
             (*vtx1)[0], (*vtx1)[1], (*vtx1)[2],
             (*vtx2)[0], (*vtx2)[1], (*vtx2)[2]);

           // Do stuff with triangle here.
         }

         static SbVec3f vertices[] = {
           SbVec3f(1, 0, 0), SbVec3f(1, 1, 0),
           SbVec3f(0, 1, 0), SbVec3f(0, 0, 0)
         };

         SbTesselator mytessellator(tess_cb, NULL);
         mytessellator.beginPolygon();
         for (int i=0; i < 4; i++) {
           mytessellator.addVertex(vertices[i], &vertices[i]);
         }
         mytessellator.endPolygon();

       The call to SbTesselator::endPolygon() triggers the SbTesselator to
       spring into action, calling the tess_cb() function for each triangle it
       generates.

       The reason we use 2 arguments to SbTesselator::addVertex() and passes
       void pointers for the vertices to the callback function is to make it
       possible to have more complex structures than just the coordinates
       themselves (as in the example above), like material information,
       lighting information or whatever other attributes your vertices have.

       This class is not part of the original Open Inventor API.

       Another option for tessellating polygons is the tessellator of the GLU
       library. It has some features not part of SbTesselator (like handling
       hulls), but the GLU library is known to have bugs in various
       implementations and doesn’t do Delaunay triangulation. If you however
       still prefer to use the GLU tessellator instead of this one, that can
       be forced by setting an environment variable:

         (void) coin_setenv(’COIN_PREFER_GLU_TESSELLATOR’, ’1’, 1);

Constructor & Destructor Documentation

   SbTesselator::SbTesselator (SbTesselatorCB * func = NULL, void * data =
       NULL) Initializes a tessellator. The callback argument specifies a
       function which will be called for each triangle returned by the
       tessellator. The callback function will get three pointers to each
       vertex and the userdata pointer. The vertex pointers are specified in
       the SbTesselator::addVertex() method.
   SbTesselator::~SbTesselator (void) Destructor.

Member Function Documentation

   void SbTesselator::beginPolygon (SbBool keepVerts = 0, const SbVec3f &
       normal = SbVec3f(0.0f, 0.0f, 0.0f)) Initializes new polygon.
       You can explicitly set the polygon normal if you know what it is.
       Otherwise it will be calculated internally.

       If keepVerts is TRUE, all vertices will be included in the returned
       triangles, even though this might lead to triangles without area.

   void SbTesselator::addVertex (const SbVec3f & v, void * data) Adds a new
       vertex to the polygon. data will be returned as a vertex in the
       callback-function.
   void SbTesselator::endPolygon (void) Signals the tessellator to begin
       tessellating. The callback function specified in the constructor (or
       set using the SbTesselator::setCallback() method) will be called for
       each triangle before returning.
   void SbTesselator::setCallback (SbTesselatorCB * func, void * data) Sets
       the callback function for this tessellator.

Author

       Generated automatically by Doxygen for Coin from the source code.