00001 00010 #ifndef _MESHLIB_EDGE_H_ 00011 #define _MESHLIB_EDGE_H_ 00012 00013 #include <assert.h> 00014 #include <stdlib.h> 00015 #include <math.h> 00016 #include <string> 00017 00018 namespace MeshLib{ 00019 00020 class CHalfEdge; 00021 class CVertex; 00022 00026 class CEdge 00027 { 00028 public: 00032 CEdge(){ m_halfedge[0] = NULL; m_halfedge[1] = NULL; }; 00036 ~CEdge(){}; 00037 00043 CHalfEdge * & halfedge( int id ) { assert( 0<=id && id < 2 ); return m_halfedge[id];}; 00047 bool boundary() { return (m_halfedge[0] == NULL && m_halfedge[1] != NULL ) || (m_halfedge[0] != NULL && m_halfedge[1] == NULL ); }; 00053 CHalfEdge * & other( CHalfEdge * he ) { return (he != m_halfedge[0] )?m_halfedge[0]:m_halfedge[1]; }; 00057 std::string & string() { return m_string; }; 00061 void _from_string() {}; 00065 void _to_string() {}; 00066 protected: 00070 CHalfEdge * m_halfedge[2]; 00074 std::string m_string; 00075 }; 00076 00077 00082 class CEdgeKey 00083 { 00084 public: 00090 CEdgeKey( int id1, int id2 ) 00091 { 00092 assert( id1 != id2 ); 00093 m_id[0] = (id1 < id2)?id1:id2; 00094 m_id[1] = (id1 < id2)?id2:id1; 00095 }; 00100 bool operator<( const CEdgeKey & key ) const 00101 { 00102 if( m_id[0] < key.m_id[0] ) return true; 00103 if( m_id[0] > key.m_id[0] ) return false; 00104 if( m_id[1] < key.m_id[1] ) return true; 00105 if( m_id[1] > key.m_id[1] ) return false; 00106 return false; 00107 }; 00113 bool operator==( const CEdgeKey & key ) const 00114 { 00115 if( m_id[0] != key.m_id[0] ) return false; 00116 if( m_id[1] != key.m_id[1] ) return false; 00117 return true; 00118 } 00123 ~CEdgeKey(){}; 00124 00125 protected: 00129 int m_id[2]; 00130 }; 00131 00132 }//name space MeshLib 00133 00134 #endif //_MESHLIB_EDGE_H_ defined