Subversion Repositories gelsvn

Rev

Rev 493 | Blame | Last modification | View Log | RSS feed

#include "VertexCirculator.h"

#include <cassert>

#include "VertexHandle.h"
#include "FaceHandle.h"

namespace HMesh
{
    /************************************
    * VertexCirculator functions
    *************************************/
    VertexCirculator::VertexCirculator(VertexHandle v)
        :   last(v.out()),
            he(last),
            steps(0)
    {}
    VertexCirculator::VertexCirculator(HalfEdgeHandle h)
        :   he(h),
            last(h),
            steps(0)
    {}
    HalfEdgeHandle VertexCirculator::halfedge() 
    {
        return he;
    }
    HalfEdgeHandle VertexCirculator::opp_halfedge() 
    {
        return he.opp();
    }
    VertexHandle VertexCirculator::vertex() 
    {
        return he.vert();
    }
    FaceHandle VertexCirculator::face() 
    {
        return he.face();
    }

    void VertexCirculator::operator++()
    {
        he = he.opp().next();
        ++steps;
    }

    void VertexCirculator::operator++(int)
    {
        ++(*this);
    }

    bool VertexCirculator::end()
    {
        return (he == last && steps > 0);
    }

    IndexType VertexCirculator::no_steps()
    {
        return steps;
    }

    /************************************
    * VertexCirculator functions
    *************************************/
    ConstVertexCirculator::ConstVertexCirculator(ConstVertexHandle v)
        :   last(v.out()), he(last), steps(0)
    {}

    ConstVertexCirculator::ConstVertexCirculator(ConstHalfEdgeHandle h)
        :   he(h), last(h), steps(0)
    {}

    ConstHalfEdgeHandle ConstVertexCirculator::halfedge() const
    {
        return he;
    }

    ConstHalfEdgeHandle ConstVertexCirculator::opp_halfedge() const
    {
        return he.opp();
    }

    ConstVertexHandle ConstVertexCirculator::vertex() const
    {
        return he.vert();
    }

    ConstFaceHandle ConstVertexCirculator::face() const
    {
        return he.face();
    }

    void ConstVertexCirculator::operator++()
    {
        he = he.opp().next();
        ++steps;
    }

    void ConstVertexCirculator::operator++(int)
    {
        ++(*this);
    }

    bool ConstVertexCirculator::end()
    {
        return (he == last && steps > 0);
    }

    IndexType ConstVertexCirculator::no_steps()
    {
        return steps;
    }

}