⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 agg_vertex_iterator.h.svn-base

📁 okular
💻 SVN-BASE
字号:
//----------------------------------------------------------------------------// Anti-Grain Geometry - Version 2.3// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)//// Permission to copy, use, modify, sell and distribute this software // is granted provided this copyright notice appears in all copies. // This software is provided "as is" without express or implied// warranty, and with no claim as to its suitability for any purpose.////----------------------------------------------------------------------------// Contact: mcseem@antigrain.com//          mcseemagg@yahoo.com//          http://www.antigrain.com//----------------------------------------------------------------------------//// classes: vertex_iterator //          vertex_source_adaptor //          vertex_source_adaptor_with_id////----------------------------------------------------------------------------#ifndef AGG_VERTEX_ITERATOR_INCLUDED#define AGG_VERTEX_ITERATOR_INCLUDED#include "agg_basics.h"namespace agg{    //---------------------------------------------------------vertex_iterator    template<class VertexSource> class vertex_iterator    {    public:        vertex_iterator() {}        vertex_iterator(unsigned cmd) { m_vertex.cmd = cmd; }        vertex_iterator(const vertex_iterator& i) : m_vs(i.m_vs), m_vertex(i.m_vertex) {}        vertex_iterator(VertexSource& vs, unsigned id) : m_vs(&vs)        {            m_vs->rewind(id);            m_vertex.cmd = m_vs->vertex(&m_vertex.x, &m_vertex.y);        }        vertex_iterator& operator++()         {            m_vertex.cmd = m_vs->vertex(&m_vertex.x, &m_vertex.y);            return *this;        }        const vertex_type& operator*() const { return m_vertex; }        const vertex_type* operator->() const { return &m_vertex; }        bool operator != (const vertex_iterator& i)         {             return m_vertex.cmd != i.m_vertex.cmd;         }    private:        VertexSource* m_vs;        vertex_type   m_vertex;    };    //---------------------------------------------------vertex_source_adaptor    template<class VertexContainer> class vertex_source_adaptor    {    public:        vertex_source_adaptor(const VertexContainer& container) :            m_container(&container) {}                void rewind(unsigned)        {            m_iterator = m_container->begin();            m_end = m_container->end();        }        unsigned vertex(double* x, double* y)        {            unsigned cmd = path_cmd_stop;            if(m_iterator != m_end)            {                *x  = m_iterator->x;                *y  = m_iterator->y;                cmd = m_iterator->cmd;                ++m_iterator;            }            return cmd;        }    private:        const VertexContainer* m_container;        typename VertexContainer::const_iterator m_iterator;        typename VertexContainer::const_iterator m_end;    };    //-------------------------------------------vertex_source_adaptor_with_id    template<class VertexContainer> class vertex_source_adaptor_with_id    {    public:        vertex_source_adaptor_with_id(const VertexContainer& container) :            m_container(&container) {}                void rewind(unsigned id)        {            m_iterator = m_container->begin(id);            m_end = m_container->end();        }        unsigned vertex(double* x, double* y)        {            unsigned cmd = path_cmd_stop;            if(m_iterator != m_end)            {                *x  = m_iterator->x;                *y  = m_iterator->y;                cmd = m_iterator->cmd;                ++m_iterator;            }            return cmd;        }    private:        const VertexContainer* m_container;        typename VertexContainer::const_iterator m_iterator;        typename VertexContainer::const_iterator m_end;    };}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -