The Parametric Pseudo-Manifold (PPS) Library 1.0
halfedge.h
Go to the documentation of this file.
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