00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00025 #ifndef _QUAD_EDGE_H_ 00026 #define _QUAD_EDGE_H_ 00027 00028 namespace EdgeAlgebra 00029 { 00030 00031 class Site; 00032 00033 enum Orientation 00034 { 00035 InvSym, 00036 Rot, 00037 Sym, 00038 InvRot 00039 }; 00040 00041 class QuadEdge 00042 { 00043 public: 00047 QuadEdge(void); 00048 00050 ~QuadEdge(void); 00051 00054 Site* GetOrigin(void) const; 00055 00058 Site* GetDestination(void) const; 00059 00062 QuadEdge* GetOnext(void) const; 00063 00066 QuadEdge* GetRnext(void) const; 00067 00070 QuadEdge* GetLnext(void) const; 00071 00074 QuadEdge* GetOprev(void) const; 00075 00078 QuadEdge* GetRprev(void) const; 00079 00082 QuadEdge* GetRot(void) const; 00083 00086 QuadEdge* GetSym(void) const; 00087 00090 QuadEdge* GetInvRot(void) const; 00091 00094 void SetOrigin(Site* origin); 00095 00098 void SetDestination(Site* destination); 00099 00102 void SetOnext(QuadEdge* Onext); 00103 00108 void Splice(QuadEdge* b); 00109 00114 QuadEdge* Connect(QuadEdge* b); 00115 00119 void DeleteEdge(void); 00120 00123 QuadEdge* GetPtr(void); 00124 00125 private: 00127 Site* m_org; 00128 00130 QuadEdge* m_Onext; 00131 00133 Orientation m_orientation; 00134 00136 QuadEdge** m_orientations; 00137 00139 bool m_deleteOrientations; 00140 00144 QuadEdge(QuadEdge** orientations, Orientation orientation); 00145 00147 QuadEdge(const QuadEdge&); 00148 00150 QuadEdge& operator=(const QuadEdge&); 00151 }; 00152 00153 } 00154 00155 #endif