TAPs 0.7.7.3
TAPsHEHalfEdge.cpp
Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines