The Parametric Pseudo-Manifold (PPS) Library 1.0
|
00001 00026 #ifndef HALFEDGE_H 00027 #define HALFEDGE_H 00028 00029 #include "vertex.h" // Vertex 00030 #include "edge.h" // Edge 00031 00032 00048 namespace dcel { 00049 00053 template < 00054 typename VAttrib , 00055 typename FAttrib , 00056 typename EAttrib , 00057 typename HAttrib 00058 > 00059 class Face ; 00060 00061 00069 template < 00070 typename VAttrib , 00071 typename FAttrib , 00072 typename EAttrib , 00073 typename HAttrib 00074 > 00075 class Halfedge { 00076 public: 00077 // --------------------------------------------------------------- 00078 // 00079 // Type definitions 00080 // 00081 // --------------------------------------------------------------- 00082 00089 typedef dcel::Vertex< VAttrib, FAttrib , EAttrib , HAttrib > Vertex ; 00090 00097 typedef dcel::Edge< VAttrib, FAttrib , EAttrib , HAttrib > Edge ; 00098 00105 typedef dcel::Face< VAttrib, FAttrib , EAttrib , HAttrib > Face ; 00106 00107 00108 // --------------------------------------------------------------- 00109 // 00110 // Public methods 00111 // 00112 // --------------------------------------------------------------- 00113 00128 Halfedge( 00129 Vertex* vertex , 00130 Edge* edge , 00131 Face* face , 00132 Halfedge* next , 00133 Halfedge* prev 00134 ) 00135 { 00136 set_origin( vertex ) ; 00137 set_edge( edge ) ; 00138 set_face( face ) ; 00139 set_next( next ) ; 00140 set_prev( prev ) ; 00141 } 00142 00143 00149 ~Halfedge() 00150 { 00151 set_origin( 0 ) ; 00152 set_edge( 0 ) ; 00153 set_face( 0 ) ; 00154 set_next( 0 ) ; 00155 set_prev( 0 ) ; 00156 } 00157 00158 00167 Vertex* get_origin() const 00168 { 00169 return _vertex ; 00170 } 00171 00172 00182 void set_origin( Vertex* vertex ) 00183 { 00184 _vertex = vertex ; 00185 } 00186 00187 00195 Edge* get_edge() const 00196 { 00197 return _edge ; 00198 } 00199 00200 00209 void set_edge( Edge* edge ) 00210 { 00211 _edge = edge ; 00212 } 00213 00214 00224 Face* get_face() const 00225 { 00226 return _face ; 00227 } 00228 00229 00239 void set_face( Face* face ) 00240 { 00241 _face = face ; 00242 } 00243 00244 00254 Halfedge* get_next() const 00255 { 00256 return _next ; 00257 } 00258 00259 00269 void set_next( Halfedge* next ) 00270 { 00271 _next = next ; 00272 } 00273 00274 00284 Halfedge* get_prev() const 00285 { 00286 return _prev ; 00287 } 00288 00289 00300 void set_prev( Halfedge* prev ) 00301 { 00302 _prev = prev ; 00303 } 00304 00305 00314 Halfedge* get_mate() const 00315 { 00316 if ( get_edge()->get_first_halfedge() == this ) { 00317 return get_edge()->get_second_halfedge() ; 00318 } 00319 00320 return get_edge()->get_first_halfedge() ; 00321 } 00322 00331 HAttrib& get_attributes() 00332 { 00333 return _attributes ; 00334 } 00335 00336 00337 private: 00338 // --------------------------------------------------------------- 00339 // 00340 // Private data members 00341 // 00342 // --------------------------------------------------------------- 00343 00344 Vertex* _vertex ; 00345 00346 Edge* _edge ; 00347 00348 Face* _face ; 00349 00350 Halfedge* _next ; 00351 00352 Halfedge* _prev ; 00353 00354 HAttrib _attributes ; 00355 00356 } ; 00357 00358 } 00359 //end of group class. 00361 00362 #endif // HALFEDGE_H