00001 // -*- C++ -*- 00002 00008 #if !defined(__HDSFace_h__) 00009 #define __HDSFace_h__ 00010 00011 #include "../defs.h" 00012 00013 #include "HDSNode.h" 00014 00015 BEGIN_NAMESPACE_ADS 00016 00018 00023 template <class HDS> 00024 class HDSFace : 00025 public HDSNode<HDS> 00026 { 00027 private: 00028 00029 typedef HDSNode<HDS> base_type; 00030 typedef typename HDS::Face_Halfedge_circulator Face_Halfedge_circulator; 00031 typedef typename HDS::Face_Halfedge_const_circulator 00032 Face_Halfedge_const_circulator; 00033 00034 public: 00035 00036 // 00037 // Types 00038 // 00039 00041 typedef typename base_type::Halfedge_handle Halfedge_handle; 00042 00044 typedef typename base_type::Halfedge_const_handle Halfedge_const_handle; 00045 00046 public: 00047 00048 // 00049 // Constructors and Destructor 00050 // 00051 00053 HDSFace() : 00054 base_type() 00055 {} 00056 00058 HDSFace( Halfedge_handle h ) : 00059 base_type( h ) 00060 {} 00061 00063 HDSFace( const HDSFace& x ) : 00064 base_type( x ) 00065 {} 00066 00068 ~HDSFace() 00069 {} 00070 00071 // 00072 // Accessors 00073 // 00074 00076 Halfedge_const_handle 00077 halfedge() const 00078 { 00079 return base_type::halfedge(); 00080 } 00081 00082 // 00083 // Manipulators 00084 // 00085 00087 Halfedge_handle& 00088 halfedge() 00089 { 00090 return base_type::halfedge(); 00091 } 00092 00093 // 00094 // Assignment operators. 00095 // 00096 00098 HDSFace& 00099 operator=( const HDSFace& x ) 00100 { 00101 base_type::operator=( x ); 00102 return *this; 00103 } 00104 00105 // 00106 // Circulators 00107 // 00108 00110 Face_Halfedge_circulator 00111 halfedges_begin() 00112 { 00113 return Face_Halfedge_circulator( halfedge() ); 00114 } 00115 00117 Face_Halfedge_const_circulator 00118 halfedges_begin() const 00119 { 00120 return Face_Halfedge_const_circulator( halfedge() ); 00121 } 00122 00123 }; 00124 00125 END_NAMESPACE_ADS 00126 00127 #endif