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