agg_renderer_outline_aa.h

来自「这是VCF框架的代码」· C头文件 代码 · 共 1,846 行 · 第 1/5 页

H
1,846
字号
//----------------------------------------------------------------------------// Anti-Grain Geometry - Version 2.4// 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//----------------------------------------------------------------------------#ifndef AGG_RENDERER_OUTLINE_AA_INCLUDED#define AGG_RENDERER_OUTLINE_AA_INCLUDED#include "agg_basics.h"#include "agg_math.h"#include "agg_line_aa_basics.h"#include "agg_dda_line.h"#include "agg_ellipse_bresenham.h"#include "agg_renderer_base.h"#include "agg_gamma_functions.h"#include "agg_clip_liang_barsky.h"namespace agg{    //===================================================distance_interpolator0    class distance_interpolator0    {    public:        //---------------------------------------------------------------------        distance_interpolator0() {}        distance_interpolator0(int x1, int y1, int x2, int y2, int x, int y) :            m_dx(line_mr(x2) - line_mr(x1)),            m_dy(line_mr(y2) - line_mr(y1)),            m_dist((line_mr(x + line_subpixel_scale/2) - line_mr(x2)) * m_dy -                    (line_mr(y + line_subpixel_scale/2) - line_mr(y2)) * m_dx)        {            m_dx <<= line_mr_subpixel_shift;            m_dy <<= line_mr_subpixel_shift;        }        //---------------------------------------------------------------------        void inc_x() { m_dist += m_dy; }        int  dist() const { return m_dist; }    private:        //---------------------------------------------------------------------        int m_dx;        int m_dy;        int m_dist;    };    //==================================================distance_interpolator00    class distance_interpolator00    {    public:        //---------------------------------------------------------------------        distance_interpolator00() {}        distance_interpolator00(int xc, int yc,                                 int x1, int y1, int x2, int y2,                                 int x,  int y) :            m_dx1(line_mr(x1) - line_mr(xc)),            m_dy1(line_mr(y1) - line_mr(yc)),            m_dx2(line_mr(x2) - line_mr(xc)),            m_dy2(line_mr(y2) - line_mr(yc)),            m_dist1((line_mr(x + line_subpixel_scale/2) - line_mr(x1)) * m_dy1 -                     (line_mr(y + line_subpixel_scale/2) - line_mr(y1)) * m_dx1),            m_dist2((line_mr(x + line_subpixel_scale/2) - line_mr(x2)) * m_dy2 -                     (line_mr(y + line_subpixel_scale/2) - line_mr(y2)) * m_dx2)        {            m_dx1 <<= line_mr_subpixel_shift;            m_dy1 <<= line_mr_subpixel_shift;            m_dx2 <<= line_mr_subpixel_shift;            m_dy2 <<= line_mr_subpixel_shift;        }        //---------------------------------------------------------------------        void inc_x() { m_dist1 += m_dy1; m_dist2 += m_dy2; }        int  dist1() const { return m_dist1; }        int  dist2() const { return m_dist2; }    private:        //---------------------------------------------------------------------        int m_dx1;        int m_dy1;        int m_dx2;        int m_dy2;        int m_dist1;        int m_dist2;    };    //===================================================distance_interpolator1    class distance_interpolator1    {    public:        //---------------------------------------------------------------------        distance_interpolator1() {}        distance_interpolator1(int x1, int y1, int x2, int y2, int x, int y) :            m_dx(x2 - x1),            m_dy(y2 - y1),            m_dist(iround(double(x + line_subpixel_scale/2 - x2) * double(m_dy) -                           double(y + line_subpixel_scale/2 - y2) * double(m_dx)))        {            m_dx <<= line_subpixel_shift;            m_dy <<= line_subpixel_shift;        }        //---------------------------------------------------------------------        void inc_x() { m_dist += m_dy; }        void dec_x() { m_dist -= m_dy; }        void inc_y() { m_dist -= m_dx; }        void dec_y() { m_dist += m_dx; }        //---------------------------------------------------------------------        void inc_x(int dy)        {            m_dist += m_dy;             if(dy > 0) m_dist -= m_dx;             if(dy < 0) m_dist += m_dx;         }        //---------------------------------------------------------------------        void dec_x(int dy)        {            m_dist -= m_dy;             if(dy > 0) m_dist -= m_dx;             if(dy < 0) m_dist += m_dx;         }        //---------------------------------------------------------------------        void inc_y(int dx)        {            m_dist -= m_dx;             if(dx > 0) m_dist += m_dy;             if(dx < 0) m_dist -= m_dy;         }        void dec_y(int dx)        //---------------------------------------------------------------------        {            m_dist += m_dx;             if(dx > 0) m_dist += m_dy;             if(dx < 0) m_dist -= m_dy;         }        //---------------------------------------------------------------------        int dist() const { return m_dist; }        int dx()   const { return m_dx;   }        int dy()   const { return m_dy;   }    private:        //---------------------------------------------------------------------        int m_dx;        int m_dy;        int m_dist;    };    //===================================================distance_interpolator2    class distance_interpolator2    {    public:        //---------------------------------------------------------------------        distance_interpolator2() {}        distance_interpolator2(int x1, int y1, int x2, int y2,                               int sx, int sy, int x,  int y) :            m_dx(x2 - x1),            m_dy(y2 - y1),            m_dx_start(line_mr(sx) - line_mr(x1)),            m_dy_start(line_mr(sy) - line_mr(y1)),            m_dist(iround(double(x + line_subpixel_scale/2 - x2) * double(m_dy) -                           double(y + line_subpixel_scale/2 - y2) * double(m_dx))),            m_dist_start((line_mr(x + line_subpixel_scale/2) - line_mr(sx)) * m_dy_start -                          (line_mr(y + line_subpixel_scale/2) - line_mr(sy)) * m_dx_start)        {            m_dx       <<= line_subpixel_shift;            m_dy       <<= line_subpixel_shift;            m_dx_start <<= line_mr_subpixel_shift;            m_dy_start <<= line_mr_subpixel_shift;        }        distance_interpolator2(int x1, int y1, int x2, int y2,                               int ex, int ey, int x,  int y, int) :            m_dx(x2 - x1),            m_dy(y2 - y1),            m_dx_start(line_mr(ex) - line_mr(x2)),            m_dy_start(line_mr(ey) - line_mr(y2)),            m_dist(iround(double(x + line_subpixel_scale/2 - x2) * double(m_dy) -                           double(y + line_subpixel_scale/2 - y2) * double(m_dx))),            m_dist_start((line_mr(x + line_subpixel_scale/2) - line_mr(ex)) * m_dy_start -                          (line_mr(y + line_subpixel_scale/2) - line_mr(ey)) * m_dx_start)        {            m_dx       <<= line_subpixel_shift;            m_dy       <<= line_subpixel_shift;            m_dx_start <<= line_mr_subpixel_shift;            m_dy_start <<= line_mr_subpixel_shift;        }        //---------------------------------------------------------------------        void inc_x() { m_dist += m_dy; m_dist_start += m_dy_start; }        void dec_x() { m_dist -= m_dy; m_dist_start -= m_dy_start; }        void inc_y() { m_dist -= m_dx; m_dist_start -= m_dx_start; }        void dec_y() { m_dist += m_dx; m_dist_start += m_dx_start; }        //---------------------------------------------------------------------        void inc_x(int dy)        {            m_dist       += m_dy;             m_dist_start += m_dy_start;             if(dy > 0)            {                m_dist       -= m_dx;                 m_dist_start -= m_dx_start;             }            if(dy < 0)            {                m_dist       += m_dx;                 m_dist_start += m_dx_start;             }        }        //---------------------------------------------------------------------        void dec_x(int dy)        {            m_dist       -= m_dy;             m_dist_start -= m_dy_start;             if(dy > 0)            {                m_dist       -= m_dx;                 m_dist_start -= m_dx_start;             }            if(dy < 0)            {                m_dist       += m_dx;                 m_dist_start += m_dx_start;             }        }        //---------------------------------------------------------------------        void inc_y(int dx)        {            m_dist       -= m_dx;             m_dist_start -= m_dx_start;             if(dx > 0)            {                m_dist       += m_dy;                 m_dist_start += m_dy_start;             }            if(dx < 0)            {                m_dist       -= m_dy;                 m_dist_start -= m_dy_start;             }        }        //---------------------------------------------------------------------        void dec_y(int dx)        {            m_dist       += m_dx;             m_dist_start += m_dx_start;             if(dx > 0)            {                m_dist       += m_dy;                 m_dist_start += m_dy_start;             }            if(dx < 0)            {                m_dist       -= m_dy;                 m_dist_start -= m_dy_start;             }        }        //---------------------------------------------------------------------        int dist()       const { return m_dist;       }        int dist_start() const { return m_dist_start; }        int dist_end()   const { return m_dist_start; }        //---------------------------------------------------------------------        int dx()       const { return m_dx;       }        int dy()       const { return m_dy;       }        int dx_start() const { return m_dx_start; }        int dy_start() const { return m_dy_start; }        int dx_end()   const { return m_dx_start; }        int dy_end()   const { return m_dy_start; }    private:        //---------------------------------------------------------------------        int m_dx;        int m_dy;        int m_dx_start;        int m_dy_start;        int m_dist;        int m_dist_start;    };    //===================================================distance_interpolator3    class distance_interpolator3    {    public:        //---------------------------------------------------------------------        distance_interpolator3() {}        distance_interpolator3(int x1, int y1, int x2, int y2,                               int sx, int sy, int ex, int ey,                                int x,  int y) :            m_dx(x2 - x1),            m_dy(y2 - y1),            m_dx_start(line_mr(sx) - line_mr(x1)),            m_dy_start(line_mr(sy) - line_mr(y1)),            m_dx_end(line_mr(ex) - line_mr(x2)),            m_dy_end(line_mr(ey) - line_mr(y2)),            m_dist(iround(double(x + line_subpixel_scale/2 - x2) * double(m_dy) -                           double(y + line_subpixel_scale/2 - y2) * double(m_dx))),            m_dist_start((line_mr(x + line_subpixel_scale/2) - line_mr(sx)) * m_dy_start -                          (line_mr(y + line_subpixel_scale/2) - line_mr(sy)) * m_dx_start),            m_dist_end((line_mr(x + line_subpixel_scale/2) - line_mr(ex)) * m_dy_end -                        (line_mr(y + line_subpixel_scale/2) - line_mr(ey)) * m_dx_end)        {            m_dx       <<= line_subpixel_shift;            m_dy       <<= line_subpixel_shift;            m_dx_start <<= line_mr_subpixel_shift;            m_dy_start <<= line_mr_subpixel_shift;            m_dx_end   <<= line_mr_subpixel_shift;            m_dy_end   <<= line_mr_subpixel_shift;        }        //---------------------------------------------------------------------        void inc_x() { m_dist += m_dy; m_dist_start += m_dy_start; m_dist_end += m_dy_end; }        void dec_x() { m_dist -= m_dy; m_dist_start -= m_dy_start; m_dist_end -= m_dy_end; }        void inc_y() { m_dist -= m_dx; m_dist_start -= m_dx_start; m_dist_end -= m_dx_end; }        void dec_y() { m_dist += m_dx; m_dist_start += m_dx_start; m_dist_end += m_dx_end; }        //---------------------------------------------------------------------        void inc_x(int dy)        {            m_dist       += m_dy;             m_dist_start += m_dy_start;             m_dist_end   += m_dy_end;            if(dy > 0)            {                m_dist       -= m_dx;                 m_dist_start -= m_dx_start;                 m_dist_end   -= m_dx_end;            }            if(dy < 0)            {                m_dist       += m_dx;                 m_dist_start += m_dx_start;                 m_dist_end   += m_dx_end;            }        }

⌨️ 快捷键说明

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