/lib/ode/ode_source/OPCODE/Ice/IceIndexedTriangle.h

http://narutortsproject.googlecode.com/ · C++ Header · 76 lines · 50 code · 8 blank · 18 comment · 0 complexity · 94ba4928dcf19373e22e1ececf4cc33f MD5 · raw file

  1. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2. /**
  3. * Contains a handy indexed triangle class.
  4. * \file IceIndexedTriangle.h
  5. * \author Pierre Terdiman
  6. * \date January, 17, 2000
  7. */
  8. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  9. #include "ode/common.h"
  10. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  11. // Include Guard
  12. #ifndef __ICEINDEXEDTRIANGLE_H__
  13. #define __ICEINDEXEDTRIANGLE_H__
  14. // Forward declarations
  15. #ifdef _MSC_VER
  16. enum CubeIndex;
  17. #else
  18. typedef int CubeIndex;
  19. #endif
  20. // An indexed triangle class.
  21. class ICEMATHS_API IndexedTriangle
  22. {
  23. public:
  24. //! Constructor
  25. inline_ IndexedTriangle() {}
  26. //! Constructor
  27. inline_ IndexedTriangle(dTriIndex r0, dTriIndex r1, dTriIndex r2) { mVRef[0]=r0; mVRef[1]=r1; mVRef[2]=r2; }
  28. //! Copy constructor
  29. inline_ IndexedTriangle(const IndexedTriangle& triangle)
  30. {
  31. mVRef[0] = triangle.mVRef[0];
  32. mVRef[1] = triangle.mVRef[1];
  33. mVRef[2] = triangle.mVRef[2];
  34. }
  35. //! Destructor
  36. inline_ ~IndexedTriangle() {}
  37. //! Vertex-references
  38. dTriIndex mVRef[3];
  39. // Methods
  40. void Flip();
  41. float Area(const Point* verts) const;
  42. float Perimeter(const Point* verts) const;
  43. float Compacity(const Point* verts) const;
  44. void Normal(const Point* verts, Point& normal) const;
  45. void DenormalizedNormal(const Point* verts, Point& normal) const;
  46. void Center(const Point* verts, Point& center) const;
  47. void CenteredNormal(const Point* verts, Point& normal) const;
  48. void RandomPoint(const Point* verts, Point& random) const;
  49. bool IsVisible(const Point* verts, const Point& source) const;
  50. bool BackfaceCulling(const Point* verts, const Point& source) const;
  51. float ComputeOcclusionPotential(const Point* verts, const Point& view) const;
  52. bool ReplaceVertex(dTriIndex oldref, dTriIndex newref);
  53. bool IsDegenerate() const;
  54. bool HasVertex(dTriIndex ref) const;
  55. bool HasVertex(dTriIndex ref, dTriIndex* index) const;
  56. ubyte FindEdge(dTriIndex vref0, dTriIndex vref1) const;
  57. dTriIndex OppositeVertex(dTriIndex vref0, dTriIndex vref1) const;
  58. inline_ dTriIndex OppositeVertex(ubyte edgenb) const { return mVRef[2-edgenb]; }
  59. void GetVRefs(ubyte edgenb, dTriIndex& vref0, dTriIndex& vref1, dTriIndex& vref2) const;
  60. float MinEdgeLength(const Point* verts) const;
  61. float MaxEdgeLength(const Point* verts) const;
  62. void ComputePoint(const Point* verts, float u, float v, Point& pt, dTriIndex* nearvtx=null) const;
  63. float Angle(const IndexedTriangle& tri, const Point* verts) const;
  64. inline_ Plane PlaneEquation(const Point* verts) const { return Plane(verts[mVRef[0]], verts[mVRef[1]], verts[mVRef[2]]); }
  65. bool Equal(const IndexedTriangle& tri) const;
  66. CubeIndex ComputeCubeIndex(const Point* verts) const;
  67. };
  68. #endif // __ICEINDEXEDTRIANGLE_H__