diff options
author | dan miller | 2007-10-19 05:20:48 +0000 |
---|---|---|
committer | dan miller | 2007-10-19 05:20:48 +0000 |
commit | d48ea5bb797037069d641da41da0f195f0124491 (patch) | |
tree | 40ff433d94859d629aac933d5ec73b382f62ba1a /libraries/ode-0.9/OPCODE/Ice/IceIndexedTriangle.h | |
parent | dont ask (diff) | |
download | opensim-SC_OLD-d48ea5bb797037069d641da41da0f195f0124491.zip opensim-SC_OLD-d48ea5bb797037069d641da41da0f195f0124491.tar.gz opensim-SC_OLD-d48ea5bb797037069d641da41da0f195f0124491.tar.bz2 opensim-SC_OLD-d48ea5bb797037069d641da41da0f195f0124491.tar.xz |
one more for the gipper
Diffstat (limited to 'libraries/ode-0.9/OPCODE/Ice/IceIndexedTriangle.h')
-rw-r--r-- | libraries/ode-0.9/OPCODE/Ice/IceIndexedTriangle.h | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/libraries/ode-0.9/OPCODE/Ice/IceIndexedTriangle.h b/libraries/ode-0.9/OPCODE/Ice/IceIndexedTriangle.h new file mode 100644 index 0000000..b34c485 --- /dev/null +++ b/libraries/ode-0.9/OPCODE/Ice/IceIndexedTriangle.h | |||
@@ -0,0 +1,72 @@ | |||
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 | |||
10 | /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
11 | // Include Guard | ||
12 | #ifndef __ICEINDEXEDTRIANGLE_H__ | ||
13 | #define __ICEINDEXEDTRIANGLE_H__ | ||
14 | |||
15 | // Forward declarations | ||
16 | #ifdef _MSC_VER | ||
17 | enum CubeIndex; | ||
18 | #else | ||
19 | typedef int CubeIndex; | ||
20 | #endif | ||
21 | |||
22 | // An indexed triangle class. | ||
23 | class ICEMATHS_API IndexedTriangle | ||
24 | { | ||
25 | public: | ||
26 | //! Constructor | ||
27 | inline_ IndexedTriangle() {} | ||
28 | //! Constructor | ||
29 | inline_ IndexedTriangle(udword r0, udword r1, udword r2) { mVRef[0]=r0; mVRef[1]=r1; mVRef[2]=r2; } | ||
30 | //! Copy constructor | ||
31 | inline_ IndexedTriangle(const IndexedTriangle& triangle) | ||
32 | { | ||
33 | mVRef[0] = triangle.mVRef[0]; | ||
34 | mVRef[1] = triangle.mVRef[1]; | ||
35 | mVRef[2] = triangle.mVRef[2]; | ||
36 | } | ||
37 | //! Destructor | ||
38 | inline_ ~IndexedTriangle() {} | ||
39 | //! Vertex-references | ||
40 | udword mVRef[3]; | ||
41 | |||
42 | // Methods | ||
43 | void Flip(); | ||
44 | float Area(const Point* verts) const; | ||
45 | float Perimeter(const Point* verts) const; | ||
46 | float Compacity(const Point* verts) const; | ||
47 | void Normal(const Point* verts, Point& normal) const; | ||
48 | void DenormalizedNormal(const Point* verts, Point& normal) const; | ||
49 | void Center(const Point* verts, Point& center) const; | ||
50 | void CenteredNormal(const Point* verts, Point& normal) const; | ||
51 | void RandomPoint(const Point* verts, Point& random) const; | ||
52 | bool IsVisible(const Point* verts, const Point& source) const; | ||
53 | bool BackfaceCulling(const Point* verts, const Point& source) const; | ||
54 | float ComputeOcclusionPotential(const Point* verts, const Point& view) const; | ||
55 | bool ReplaceVertex(udword oldref, udword newref); | ||
56 | bool IsDegenerate() const; | ||
57 | bool HasVertex(udword ref) const; | ||
58 | bool HasVertex(udword ref, udword* index) const; | ||
59 | ubyte FindEdge(udword vref0, udword vref1) const; | ||
60 | udword OppositeVertex(udword vref0, udword vref1) const; | ||
61 | inline_ udword OppositeVertex(ubyte edgenb) const { return mVRef[2-edgenb]; } | ||
62 | void GetVRefs(ubyte edgenb, udword& vref0, udword& vref1, udword& vref2) const; | ||
63 | float MinEdgeLength(const Point* verts) const; | ||
64 | float MaxEdgeLength(const Point* verts) const; | ||
65 | void ComputePoint(const Point* verts, float u, float v, Point& pt, udword* nearvtx=null) const; | ||
66 | float Angle(const IndexedTriangle& tri, const Point* verts) const; | ||
67 | inline_ Plane PlaneEquation(const Point* verts) const { return Plane(verts[mVRef[0]], verts[mVRef[1]], verts[mVRef[2]]); } | ||
68 | bool Equal(const IndexedTriangle& tri) const; | ||
69 | CubeIndex ComputeCubeIndex(const Point* verts) const; | ||
70 | }; | ||
71 | |||
72 | #endif // __ICEINDEXEDTRIANGLE_H__ | ||