![]() |
TAPs 0.7.7.3
|
00001 /****************************************************************************** 00002 TAPsHEHalfEdge.cpp 00003 00004 HE <==> Half-Edge 00005 HEHalfEdge class is a class for 3D half-edge. 00006 It contains: 00007 - originating vertex 00008 - incident face 00009 - pair of this half-edge 00010 - next half-edge (ccw) 00011 - previous half-edge (cw) 00012 00013 Not supposed to be a parent class. 00014 Support only manifold objects. 00015 00016 SUKITTI PUNAK (04/03/2005) 00017 UPDATE (04/15/2005) 00018 ******************************************************************************/ 00019 #include "TAPsHEHalfEdge.hpp" 00020 // Using Inclusion Model (i.e. definitions are included in declarations) 00021 // (this name.cpp is included in name.hpp) 00022 // Each friend is defined directly inside its declaration. 00023 00024 BEGIN_NAMESPACE_TAPs 00025 //============================================================================= 00026 // Constructor(s) and Destructor 00027 //----------------------------------------------------------------------------- 00028 template <typename T> 00029 HEHalfEdge<T>::HEHalfEdge ( HEVertex<T> * const ptrOrigVertex, 00030 HEFace<T> * const ptrIncidentFace, 00031 HEHalfEdge<T> * const ptrPrev, 00032 HEHalfEdge<T> * const ptrNext, 00033 HEHalfEdge<T> * const ptrPair ) 00034 : nOrigVertex ( ptrOrigVertex ), 00035 nIncidentFace ( ptrIncidentFace ), 00036 nPrev ( ptrPrev ), 00037 nNext ( ptrNext ), 00038 nPair ( ptrPair ) 00039 { 00040 // if ( ptrPrev != NULL ) nPrev = ptrPrev; 00041 // else nPrev = this; 00042 // if ( ptrNext != NULL ) nNext = ptrNext; 00043 // else nNext = this; 00044 } 00045 //----------------------------------------------------------------------------- 00046 template <typename T> 00047 HEHalfEdge<T>::HEHalfEdge ( HEHalfEdge<T> const &he ) 00048 : nOrigVertex ( he.nOrigVertex ), 00049 nIncidentFace ( he.nIncidentFace ), 00050 nPrev ( he.nPrev ), 00051 nNext ( he.nNext ), 00052 nPair ( he.nPair ) 00053 {} 00054 //----------------------------------------------------------------------------- 00055 template <typename T> 00056 HEHalfEdge<T>::~HEHalfEdge () 00057 {} 00058 //----------------------------------------------------------------------------- 00059 /* 00060 //============================================================================= 00061 // Operations 00062 //----------------------------------------------------------------------------- 00063 00064 template <typename T> 00065 HEHalfEdge<T> * HEHalfEdge<T>::Insert ( HEHalfEdge<T> * const n ) 00066 { 00067 HEHalfEdge<T> *c = nNext; 00068 n->nNext = c; 00069 n->nPrev = this; 00070 nNext = n; 00071 c->nPrev = n; 00072 return n; 00073 } 00074 //----------------------------------------------------------------------------- 00075 template <typename T> 00076 HEHalfEdge<T> * HEHalfEdge<T>::Remove () 00077 { 00078 if ( nPrev ) { 00079 nPrev->nNext = nNext; 00080 nPrev = NULL; 00081 } 00082 if ( nNext ) { 00083 nNext->nPrev = nPrev; 00084 nNext = NULL; 00085 } 00086 return this; 00087 } 00088 //----------------------------------------------------------------------------- 00089 template <typename T> 00090 void HEHalfEdge<T>::Delete () 00091 { 00092 delete Remove(); 00093 } 00094 //----------------------------------------------------------------------------- 00095 template <typename T> 00096 HEHalfEdge<T> * HEHalfEdge<T>::Splice ( HEHalfEdge<T> * const n ) 00097 { 00098 HEHalfEdge<T> *a = this; 00099 HEHalfEdge<T> *an = a->nNext; 00100 HEHalfEdge<T> *bn = b->nNext; 00101 a->nNext = bn; 00102 b->nNext = an; 00103 an->nPrev = b; 00104 bn->nPrev = a; 00105 } 00106 //----------------------------------------------------------------------------- 00107 template <typename T> 00108 void HEHalfEdge<T>::ClearExceptItself () 00109 { 00110 HEHalfEdge<T> *ptr = nNext; 00111 while ( nNext != this ) { 00112 nNext = nNext->nNext; 00113 nNext->nPrev = this; 00114 delete ptr; 00115 } 00116 } 00117 //*/ 00118 //----------------------------------------------------------------------------- 00119 //============================================================================= 00120 END_NAMESPACE_TAPs 00121 //345678901234567890123456789012345678901234567890123456789012345678901234567890 00122 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8