The Parametric Pseudo-Manifold (PPS) Library 1.0
halfedge_attribute.h
Go to the documentation of this file.
00001 
00027 #ifndef HALFEDGE_ATTRIBUTE_H
00028 #define HALFEDGE_ATTRIBUTE_H
00029 
00030 #include "halfedge.h"          // dcel::Halfedge
00031 
00032 #include "vertex_attribute.h"  // VertexAttribute
00033 #include "face_attribute.h"    // FaceAttribute
00034 
00035 
00050 namespace ppsfrompnt {
00051 
00052   //
00053   // Forward definition
00054   //
00055   class HalfedgeAttribute ;
00056 
00057 
00065   class HalfedgeAttribute {
00066   public:
00067     // ---------------------------------------------------------------
00068     //
00069     // Type definitions
00070     //
00071     // ---------------------------------------------------------------
00072 
00079     typedef dcel::Halfedge< 
00080                            VertexAttribute, 
00081                            FaceAttribute ,
00082                            int ,
00083                            HalfedgeAttribute
00084                           > 
00085       Halfedge ;
00086 
00087 
00088     // ---------------------------------------------------------------
00089     //
00090     // Public methods.
00091     //
00092     // ---------------------------------------------------------------
00093 
00099     HalfedgeAttribute()
00100     {
00101       set_owner( 0 ) ;
00102       set_pps_id( 0 ) ;
00103       set_pps_id_flag( false ) ;
00104       set_origin_vertex_degree( 0 ) ;
00105       set_degree_flag( false ) ;
00106     }
00107 
00108 
00116     HalfedgeAttribute( Halfedge* h )
00117     {
00118       set_owner( h ) ;
00119       set_pps_id( 0 ) ;
00120       set_pps_id_flag( false ) ;
00121       set_origin_vertex_degree( 0 ) ;
00122       set_degree_flag( false ) ;
00123     }
00124 
00125 
00133     HalfedgeAttribute( HalfedgeAttribute& a )
00134     {
00135       set_owner( a.get_owner() ) ;
00136       set_pps_id( a.get_pps_id() ) ;
00137       set_pps_id_flag( a.get_pps_id_flag() ) ;
00138       set_origin_vertex_degree( a.get_origin_vertex_degree() ) ;
00139       set_degree_flag( a.get_degree_flag() ) ;
00140     }
00141 
00142 
00149     ~HalfedgeAttribute() 
00150     {
00151       set_owner( 0 ) ;
00152     }
00153 
00154 
00163     Halfedge* get_owner() const 
00164     {
00165       return _owner ;  
00166     }
00167 
00168 
00177     void set_owner( Halfedge* h ) 
00178     {
00179       _owner = h ;  
00180     }
00181 
00182 
00199     unsigned get_pps_id()
00200     {
00201       if ( get_pps_id_flag() ) {
00202         return _id ;
00203       }
00204 
00211       set_pps_id( compute_pps_id() ) ;
00212 
00213       set_pps_id_flag( true ) ;
00214 
00215       return _id ;
00216     }
00217 
00218 
00228     void set_pps_id( unsigned id )
00229     {
00230       _id = id ;
00231     }
00232 
00233 
00245     bool get_pps_id_flag() const
00246     {
00247       return _id_flag ;
00248     }
00249 
00250 
00261     void set_pps_id_flag( bool flag )
00262     {
00263       _id_flag = flag ;
00264     }
00265 
00266 
00277     unsigned get_origin_vertex_degree()
00278     {
00279       if ( get_degree_flag() ) {
00280         return _degree ;
00281       }
00282 
00289       set_origin_vertex_degree( compute_origin_vertex_degree() ) ;
00290 
00291       set_degree_flag( true ) ;
00292 
00293       return _degree ;
00294     }
00295 
00296 
00305     void set_origin_vertex_degree( unsigned degree )
00306     {
00307       _degree = degree ;
00308     }
00309 
00310 
00322     bool get_degree_flag() const
00323     {
00324       return _degree_flag ;
00325     }
00326 
00327 
00338     void set_degree_flag( bool flag )
00339     {
00340       _degree_flag = flag ;
00341     }
00342 
00343 
00344   private:
00345     // ---------------------------------------------------------------
00346     //
00347     // Private methods
00348     //
00349     // ---------------------------------------------------------------
00358     unsigned compute_pps_id() const ;
00359 
00360 
00369     unsigned compute_origin_vertex_degree() const ;
00370 
00371 
00372     // ---------------------------------------------------------------
00373     //
00374     // Private data member
00375     //
00376     // ---------------------------------------------------------------
00377 
00378     Halfedge* _owner ;  
00379 
00380     unsigned _id ;  
00381 
00382     bool _id_flag ;   
00383 
00384     unsigned _degree ;  
00385 
00386     bool _degree_flag ;  
00387 
00388   } ;
00389 
00390 }
00391  //end of group class.
00393 
00394 #endif  // HALFEDGE_ATTRIBUTE_H