home *** CD-ROM | disk | FTP | other *** search
/ Hackers Magazine 57 / CdHackersMagazineNr57.iso / Software / Multimedia / k3d-setup-0.7.11.0.exe / include / k3d / k3dsdk / triangulator.h < prev    next >
Encoding:
C/C++ Source or Header  |  2009-02-07  |  2.6 KB  |  76 lines

  1. #ifndef K3DSDK_TRIANGULATOR_H
  2. #define K3DSDK_TRIANGULATOR_H
  3.  
  4. // K-3D
  5. // Copyright (c) 1995-2008, Timothy M. Shead
  6. //
  7. // Contact: tshead@k-3d.com
  8. //
  9. // This program is free software; you can redistribute it and/or
  10. // modify it under the terms of the GNU General Public
  11. // License as published by the Free Software Foundation; either
  12. // version 2 of the License, or (at your option) any later version.
  13. //
  14. // This program is distributed in the hope that it will be useful,
  15. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  17. // General Public License for more details.
  18. //
  19. // You should have received a copy of the GNU General Public
  20. // License along with this program; if not, write to the Free Software
  21. // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  22.  
  23. #include "mesh.h"
  24.  
  25. namespace k3d
  26. {
  27.  
  28. namespace polyhedron { class const_primitive; }
  29.  
  30. /// Provides a template design pattern object for triangulating polyhedra.
  31. /// To generate triangulated data, derive from k3d::triangulator and
  32. /// override the private virtual methods to process triangles
  33. class triangulator
  34. {
  35. public:
  36.     triangulator();
  37.     ~triangulator();
  38.  
  39.     /// Generates triangles for every face in a polyhedron
  40.     void process(const mesh& Mesh, const polyhedron::const_primitive& Polyhedron);
  41.  
  42.     /// Generates triangles for a single polyhedron face
  43.     void process(
  44.         const mesh::points_t& Points,
  45.         const mesh::indices_t& FaceFirstLoops,
  46.         const mesh::counts_t& FaceLoopCounts,
  47.         const mesh::indices_t& LoopFirstEdges,
  48.         const mesh::indices_t& EdgePoints,
  49.         const mesh::indices_t& ClockwiseEdges,
  50.         const uint_t Face);
  51.  
  52. private:
  53.     /// Called once before processin begins on the given mesh
  54.     virtual void start_processing(const mesh& SourceMesh);
  55.     /// Called once before processing begins on the given polygon face
  56.     virtual void start_face(const uint_t Face);
  57.     /// Called anytime the triangulation process needs to create a new vertex (e.g: when edges cross within a self-intersecting polygon)
  58.     virtual void add_vertex(const point3& Coordinates, uint_t Vertices[4], uint_t Edges[4], double_t Weights[4], uint_t& NewVertex);
  59.     /// Called once for each triangle generated
  60.     virtual void add_triangle(uint_t Vertices[3], uint_t Edges[3]);
  61.     /// Called once after processing for the given face has been completed
  62.     virtual void finish_face(const uint_t Face);
  63.     /// Called once after the entire mesh has been processed
  64.     virtual void finish_processing(const mesh& SourceMesh);
  65.  
  66.     class implementation;
  67.     implementation* const m_implementation;
  68.  
  69.     friend class implementation;
  70. };
  71.  
  72. } // namespace k3d
  73.  
  74. #endif // !K3DSDK_TRIANGULATOR_H
  75.  
  76.