00001 // -*- C++ -*- 00002 // 00003 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 00004 // 00005 // Fehmi Cirak 00006 // California Institute of Technology 00007 // (C) 2003 All Rights Reserved 00008 // 00009 // <LicenseText> 00010 // 00011 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 00012 // 00013 #ifndef __Triangle_h__ 00014 #define __Triangle_h__ 00015 00016 00017 00018 namespace subdiv { 00019 00020 template <typename V> 00021 class Triangle { 00022 public: 00023 Triangle(){} 00024 Triangle(V* a, V* b, V* c) { 00025 _m_v[0]=a; 00026 _m_v[1]=b; 00027 _m_v[2]=c; 00028 _m_t[0]=NULL; 00029 _m_t[1]=NULL; 00030 _m_t[2]=NULL; 00031 } 00032 ~Triangle(){} 00033 00034 // interface 00035 V* a(){return _m_v[0];} 00036 V* b(){return _m_v[1];} 00037 V* c(){return _m_v[2];} 00038 00039 std::pair<V*, V*> vertexPairOnEdge(int i) { 00040 return std::make_pair(_m_v[i], _m_v[Next[i]]); 00041 } 00042 00043 // output 00044 void printConnectivityData(std::ostream& os) { 00045 os << _m_v[0]->number() << " "<< _m_v[1]->number() << " "<< _m_v[2]->number(); 00046 } 00047 00048 inline Triangle*& across( const V*, const V* ); 00049 inline Triangle*& neighbor(int i){return _m_t[i];} 00050 00051 private: 00052 V* _m_v[3]; // first vertex 00053 Triangle* _m_t[3]; // neighbouring triangles 00054 }; 00055 00056 #include "Triangle.cc" 00057 00058 } 00059 #endif /*__Triangle_h__*/