aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/ode-0.9/OPCODE/Ice/IceTriangle.h
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/ode-0.9/OPCODE/Ice/IceTriangle.h')
-rw-r--r--libraries/ode-0.9/OPCODE/Ice/IceTriangle.h68
1 files changed, 68 insertions, 0 deletions
diff --git a/libraries/ode-0.9/OPCODE/Ice/IceTriangle.h b/libraries/ode-0.9/OPCODE/Ice/IceTriangle.h
new file mode 100644
index 0000000..a984db8
--- /dev/null
+++ b/libraries/ode-0.9/OPCODE/Ice/IceTriangle.h
@@ -0,0 +1,68 @@
1///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2/**
3 * Contains a handy triangle class.
4 * \file IceTriangle.h
5 * \author Pierre Terdiman
6 * \date January, 17, 2000
7 */
8///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
9
10///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
11// Include Guard
12#ifndef __ICETRIANGLE_H__
13#define __ICETRIANGLE_H__
14
15 // Forward declarations
16 class Moment;
17
18 // Partitioning values
19 enum PartVal
20 {
21 TRI_MINUS_SPACE = 0, //!< Triangle is in the negative space
22 TRI_PLUS_SPACE = 1, //!< Triangle is in the positive space
23 TRI_INTERSECT = 2, //!< Triangle intersects plane
24 TRI_ON_PLANE = 3, //!< Triangle and plane are coplanar
25
26 TRI_FORCEDWORD = 0x7fffffff
27 };
28
29 // A triangle class.
30 class ICEMATHS_API Triangle
31 {
32 public:
33 //! Constructor
34 inline_ Triangle() {}
35 //! Constructor
36 inline_ Triangle(const Point& p0, const Point& p1, const Point& p2) { mVerts[0]=p0; mVerts[1]=p1; mVerts[2]=p2; }
37 //! Copy constructor
38 inline_ Triangle(const Triangle& triangle)
39 {
40 mVerts[0] = triangle.mVerts[0];
41 mVerts[1] = triangle.mVerts[1];
42 mVerts[2] = triangle.mVerts[2];
43 }
44 //! Destructor
45 inline_ ~Triangle() {}
46 //! Vertices
47 Point mVerts[3];
48
49 // Methods
50 void Flip();
51 float Area() const;
52 float Perimeter() const;
53 float Compacity() const;
54 void Normal(Point& normal) const;
55 void DenormalizedNormal(Point& normal) const;
56 void Center(Point& center) const;
57 inline_ Plane PlaneEquation() const { return Plane(mVerts[0], mVerts[1], mVerts[2]); }
58
59 PartVal TestAgainstPlane(const Plane& plane, float epsilon) const;
60// float Distance(Point& cp, Point& cq, Tri& tri);
61 void ComputeMoment(Moment& m);
62 float MinEdgeLength() const;
63 float MaxEdgeLength() const;
64 void ComputePoint(float u, float v, Point& pt, udword* nearvtx=null) const;
65 void Inflate(float fat_coeff, bool constant_border);
66 };
67
68#endif // __ICETRIANGLE_H__