| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 | #ifndef DECOMPOSE_POLY_H#define DECOMPOSE_POLY_H#include "core/util/tVector.h"#include "math/mathTypes.h"#include "math/mPoint3.h"struct twoIndices{   U8 i1, i2;public:   twoIndices();   twoIndices(U8 a, U8 b);   bool operator==(const twoIndices&) const;};inline bool twoIndices::operator==(const twoIndices& _test) const{   return (((i1 == _test.i1) && (i2 == _test.i2)) || ((i1 == _test.i2) && (i2 == _test.i1)));}class decompTri{private:   U8 mVertIdx[3];public:   decompTri();   void setVert(U8 val, U8 idx);   U8 getVert(U8 idx);   twoIndices getOtherVerts(U8 idx);   void orderVerts();};class decompPoly{private:   Vector<Point3F>      mVertList;   Vector<twoIndices>   mEdgeList;   Vector<U8>           mInsideVerts;   Vector<decompTri>	   mTris;   decompTri            mTestTri;protected:   void initEdgeList();   bool sameSide(Point3F &p1, Point3F &p2, Point3F &l1, Point3F &l2);   bool isInside(decompTri &tri, U8 vertIdx);   U8 leftmost();   U8 rightmost();   U8 uppermost();   U8 lowermost();   twoIndices findEdges(U8 idx, bool ¬Unique);   decompTri formTriFromEdges(U8 idx1, U8 idx2);   twoIndices leftmostInsideVerts(U8 idx1, U8 idx2);   twoIndices rightmostInsideVerts(U8 idx1, U8 idx2);   twoIndices uppermostInsideVerts(U8 idx1, U8 idx2);   twoIndices lowermostInsideVerts(U8 idx1, U8 idx2);   void findPointsInside();   void addRemoveEdge(U8 idx1, U8 idx2);   bool isVertInEdgeList(U8 idx);public:   void addVert(Point3F &newVert);   Point3F getVert(U8 idx);   void newPoly();   U8 getNumVerts() { return mVertList.size(); }   U32 getNumTris() { return mTris.size(); }   U8 getTriIdx(U32 tri, U8 idx);   bool checkEdgeLength(F32 len);   bool decompose();};#endif
 |