00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __CS_CRYSBALL_H__
00020 #define __CS_CRYSBALL_H__
00021
00046 #include "csutil/cstreend.h"
00047 #include "csgeom/vector3.h"
00048 #include "csgeom/math3d.h"
00049 #include "csgeom/transfrm.h"
00050 #include "ivaria/polymesh.h"
00051
00052 class csCrystalBall
00053 {
00054 class csCrystalBallVec : public csVector3
00055 {
00056 protected:
00057 int idx;
00058 public:
00059 csCrystalBallVec (int polyidx) { idx = polyidx; }
00060 inline int GetIndex () { return idx; }
00061 };
00062
00063 class csTriNode : public csTreeNode
00064 {
00065 public:
00066 enum
00067 {
00068 INSIDE = 0,
00069 OUTSIDE = 1
00070 };
00071
00072 int from, len;
00073 int divider;
00074 csTriNode (csTriNode *theParent=NULL, int from=-1, int len=0) : csTreeNode (theParent)
00075 {this->from = from; this->len = len;}
00076
00077
00078 int Add (const csCrystalBallVec *normal, int tri1, int tri2, int tri3,
00079 csVector *vP, csVector *vTP);
00080
00081
00082 void Adjust (int nPos);
00083
00084
00085 int Classify (const csVector3 &n, int i1, int i2, int i3,
00086 const csVector *vTP) const;
00087
00088
00089
00090
00091
00092 int SignMatches (const csVector3 *n1, const csVector3 *n2, const csVector3 *td,
00093 int useSign);
00094
00095
00096 bool SignMatches (const csVector3 *tn, int useSign);
00097
00098
00099
00100 void Transform (const csMatrix3 &m, csVector &indexVector,
00101 int useSign, long cookie,
00102 const csVector *vP, const csVector *vTP,
00103 const csVector3 &v1, const csVector3 &v2,
00104 const csVector3 &v3);
00105 };
00106
00107 protected:
00108 csVector vPoints;
00109 csVector vTrianglePoints;
00110 csTriNode tri[8];
00111
00112 public:
00113 csCrystalBall ();
00114 ~csCrystalBall ();
00115
00116
00117 void Build (iPolygonMesh *polyset);
00118
00119
00120 void InsertPolygon (iPolygonMesh *polyset, int idx);
00121
00122
00123
00124 void Transform (const csTransform &t, csVector &indexVector, int useSign, long cookie);
00125 };
00126
00127 #endif // __CS_CRYSBALL_H__