Subversion Repositories gelsvn

Rev

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

#include "FaceCirculator.h"

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


namespace HMesh
{
    /*****************************
    * FaceCirculator
    ******************************/
    FaceCirculator::FaceCirculator(FaceHandle f)
        :   last(f.last()),
            he(last),
            steps(0)
    {}
    FaceCirculator::FaceCirculator(HalfEdgeHandle h)
        :   he(h),
            last(h),
            steps(0)
    {}

    VertexHandle FaceCirculator::vertex() 
    {
        return he.vert();
    }
    FaceHandle FaceCirculator::face() 
    {
        return he.next().opp().face();
    }
    HalfEdgeHandle FaceCirculator::next_halfedge()
    {
        return he.next();
    }

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

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

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

    IndexType FaceCirculator::no_steps() const
    {
        return steps;
    }

    /*****************************
    * ConstFaceCirculator
    ******************************/
    ConstFaceCirculator::ConstFaceCirculator(ConstFaceHandle f)
        :   last(f.last()), he(last), steps(0)
    {}
    ConstFaceCirculator::ConstFaceCirculator(ConstHalfEdgeHandle h)
        :   he(h), last(h), steps(0)
    {}

    ConstVertexHandle ConstFaceCirculator::vertex() const
    {
        return he.vert();
    }
    ConstFaceHandle ConstFaceCirculator::face() const
    {
        return he.next().opp().face();
    }
    ConstHalfEdgeHandle ConstFaceCirculator::next_halfedge() const
    {
        return he.next();
    }

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

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

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

    IndexType ConstFaceCirculator::no_steps() const
    {
        return steps;
    }
}