The Parametric Pseudo-Manifold (PPS) Library 1.0
|
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