From ad1a95fb7c09d70658c4d5579d40b7375ea37145 Mon Sep 17 00:00:00 2001 From: cnr-isti-vclab Date: Thu, 29 Apr 2010 07:00:46 +0000 Subject: [PATCH] added a new class Pos based on halfedge --- vcg/connectors/halfedge_pos.h | 149 ++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 vcg/connectors/halfedge_pos.h diff --git a/vcg/connectors/halfedge_pos.h b/vcg/connectors/halfedge_pos.h new file mode 100644 index 00000000..7d05fa7b --- /dev/null +++ b/vcg/connectors/halfedge_pos.h @@ -0,0 +1,149 @@ +#ifndef VCG_HEDGE_POS +#define VCG_HEDGE_POS + +namespace vcg +{ + namespace hedge + { + /*! + * \brief Class implementing a Pos using halfedges + * + */ + template class Pos + { + + public: + + typedef typename MeshType::VertexPointer VertexPointer; + typedef typename MeshType::EdgePointer EdgePointer; + typedef typename MeshType::HEdgePointer HEdgePointer; + typedef typename MeshType::FacePointer FacePointer; + + /*! + * Halfedge used to move in the mesh + */ + HEdgePointer he; + + /*! + * Direction of movement: + * + * 0 = clockwise + * + * 1 = counter-clockwise + */ + bool direction; + + /*! + * + */ + Pos(HEdgePointer hep, bool dir) + { + he = hep; + direction = dir; + } + + /*! + * + */ + Pos(HEdgePointer hep) + { + he = hep; + direction = 1; + } + + /*! + * Changes vertex mantaininge the same edge and the same face + */ + void FlipV() + { + direction = !direction; + } + + /*! + * Changes edge and hedge mantaining the same vertex and the same face + */ + void FlipE() + { + if(!direction) + he = he->HNp(); + else + if(he->HasHPrevAdjacency()) + he = he->HPp(); + else + { + HEdgePointer aux = he; + while(aux->HNp() != he) + aux = aux->HNp(); + he = aux; + } + + direction = !direction; + } + + /*! + * Changes face mantaininge the same vertex and the same edge + */ + void FlipF() + { + direction = !direction; + he = he->HOp(); + } + + /*! + * Gets pointed vertex + */ + VertexPointer V() + { + if(direction) + return he->HVp(); + else + return he->HOp()->HVp(); + } + + /*! + * Gets pointed hedge + */ + HEdgePointer HE() + { + return he; + } + + /*! + * Gets pointed edge + */ + EdgePointer E() + { + return he->HEp(); + } + + /*! + * Gets pointed face + */ + FacePointer F() + { + return he->HFp(); + } + + /*! + * Operator to check if two Pos are equal + */ + inline bool operator == ( Pos const & p ) const + { + return (he == p.he && direction == p.direction); + } + + /*! + * Operator to check if two Pos are different + */ + inline bool operator != ( Pos const & p ) const + { + return (he != p.he || direction != p.direction); + } + + }; + + } +} + +#endif // VCG_HEDGE_POS +