Code Search for Developers
 
 
  

agg_dda_line.h from matplotlib at Krugle


Show agg_dda_line.h syntax highlighted

//----------------------------------------------------------------------------
// 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 dda_line_interpolator, dda2_line_interpolator
//
//----------------------------------------------------------------------------

#ifndef AGG_DDA_LINE_INCLUDED
#define AGG_DDA_LINE_INCLUDED

#include <stdlib.h>
#include "agg_basics.h"

namespace agg
{

    //===================================================dda_line_interpolator
    template<int FractionShift, int YShift=0> class dda_line_interpolator
    {
    public:
        //--------------------------------------------------------------------
        dda_line_interpolator() {}

        //--------------------------------------------------------------------
        dda_line_interpolator(int y1, int y2, unsigned count) :
            m_y(y1),
            m_inc(((y2 - y1) << FractionShift) / int(count)),
            m_dy(0)
        {
        }

        //--------------------------------------------------------------------
        void operator ++ ()
        {
            m_dy += m_inc;
        }

        //--------------------------------------------------------------------
        void operator -- ()
        {
            m_dy -= m_inc;
        }

        //--------------------------------------------------------------------
        void operator += (unsigned n)
        {
            m_dy += m_inc * n;
        }

        //--------------------------------------------------------------------
        void operator -= (unsigned n)
        {
            m_dy -= m_inc * n;
        }


        //--------------------------------------------------------------------
        int y()  const { return m_y + (m_dy >> (FractionShift-YShift)); }
        int dy() const { return m_dy; }


    private:
        int m_y;
        int m_inc;
        int m_dy;
    };





    //=================================================dda2_line_interpolator
    class dda2_line_interpolator
    {
    public:
        typedef int save_data_type;
        enum { save_size = 2 };

        //--------------------------------------------------------------------
        dda2_line_interpolator() {}

        //-------------------------------------------- Forward-adjusted line
        dda2_line_interpolator(int y1, int y2, int count) :
            m_cnt(count <= 0 ? 1 : count),
            m_lft((y2 - y1) / m_cnt),
            m_rem((y2 - y1) % m_cnt),
            m_mod(m_rem),
            m_y(y1)
        {
            if(m_mod <= 0)
            {
                m_mod += count;
                m_rem += count;
                m_lft--;
            }
            m_mod -= count;
        }

        //-------------------------------------------- Backward-adjusted line
        dda2_line_interpolator(int y1, int y2, int count, int) :
            m_cnt(count <= 0 ? 1 : count),
            m_lft((y2 - y1) / m_cnt),
            m_rem((y2 - y1) % m_cnt),
            m_mod(m_rem),
            m_y(y1)
        {
            if(m_mod <= 0)
            {
                m_mod += count;
                m_rem += count;
                m_lft--;
            }
        }

        //-------------------------------------------- Backward-adjusted line
        dda2_line_interpolator(int y, int count) :
            m_cnt(count <= 0 ? 1 : count),
            m_lft(y / m_cnt),
            m_rem(y % m_cnt),
            m_mod(m_rem),
            m_y(0)
        {
            if(m_mod <= 0)
            {
                m_mod += count;
                m_rem += count;
                m_lft--;
            }
        }


        //--------------------------------------------------------------------
        void save(save_data_type* data) const
        {
            data[0] = m_mod;
            data[1] = m_y;
        }

        //--------------------------------------------------------------------
        void load(const save_data_type* data)
        {
            m_mod = data[0];
            m_y   = data[1];
        }

        //--------------------------------------------------------------------
        void operator++()
        {
            m_mod += m_rem;
            m_y += m_lft;
            if(m_mod > 0)
            {
                m_mod -= m_cnt;
                m_y++;
            }
        }

        //--------------------------------------------------------------------
        void operator--()
        {
            if(m_mod <= m_rem)
            {
                m_mod += m_cnt;
                m_y--;
            }
            m_mod -= m_rem;
            m_y -= m_lft;
        }

        //--------------------------------------------------------------------
        void adjust_forward()
        {
            m_mod -= m_cnt;
        }

        //--------------------------------------------------------------------
        void adjust_backward()
        {
            m_mod += m_cnt;
        }

        //--------------------------------------------------------------------
        int mod() const { return m_mod; }
        int rem() const { return m_rem; }
        int lft() const { return m_lft; }

        //--------------------------------------------------------------------
        int y() const { return m_y; }

    private:
        int m_cnt;
        int m_lft;
        int m_rem;
        int m_mod;
        int m_y;
    };







    //---------------------------------------------line_bresenham_interpolator
    class line_bresenham_interpolator
    {
    public:
        enum
        {
            subpixel_shift = 8,
            subpixel_size  = 1 << subpixel_shift,
            subpixel_mask  = subpixel_size - 1
        };

        //--------------------------------------------------------------------
        static int line_lr(int v) { return v >> subpixel_shift; }

        //--------------------------------------------------------------------
        line_bresenham_interpolator(int x1, int y1, int x2, int y2) :
            m_x1_lr(line_lr(x1)),
            m_y1_lr(line_lr(y1)),
            m_x2_lr(line_lr(x2)),
            m_y2_lr(line_lr(y2)),
            m_ver(abs(m_x2_lr - m_x1_lr) < abs(m_y2_lr - m_y1_lr)),
            m_len(m_ver ? abs(m_y2_lr - m_y1_lr) : 
                          abs(m_x2_lr - m_x1_lr)),
            m_inc(m_ver ? ((y2 > y1) ? 1 : -1) : ((x2 > x1) ? 1 : -1)),
            m_interpolator(m_ver ? x1 : y1, 
                           m_ver ? x2 : y2, 
                           m_len)
        {
        }
    
        //--------------------------------------------------------------------
        bool     is_ver() const { return m_ver; }
        unsigned len()    const { return m_len; }
        int      inc()    const { return m_inc; }

        //--------------------------------------------------------------------
        void hstep()
        {
            ++m_interpolator;
            m_x1_lr += m_inc;
        }

        //--------------------------------------------------------------------
        void vstep()
        {
            ++m_interpolator;
            m_y1_lr += m_inc;
        }

        //--------------------------------------------------------------------
        int x1() const { return m_x1_lr; }
        int y1() const { return m_y1_lr; }
        int x2() const { return line_lr(m_interpolator.y()); }
        int y2() const { return line_lr(m_interpolator.y()); }
        int x2_hr() const { return m_interpolator.y(); }
        int y2_hr() const { return m_interpolator.y(); }

    private:
        int                    m_x1_lr;
        int                    m_y1_lr;
        int                    m_x2_lr;
        int                    m_y2_lr;
        bool                   m_ver;
        unsigned               m_len;
        int                    m_inc;
        dda2_line_interpolator m_interpolator;

    };


}



#endif




See more files for this project here

matplotlib

Matplotlib is a pure python plotting library with the goal of making\r\npublication quality plots using a syntax familiar to matlab users. \r\nThe library uses Numeric for handling large\r\ndata sets and supports a variety of output backends

Project homepage: http://sourceforge.net/projects/matplotlib
Programming language(s): C,C++,Python
License: other

  ctrl/
  platform/
  util/
  Makefile.am
  agg_alpha_mask_u8.h
  agg_arc.h
  agg_array.h
  agg_arrowhead.h
  agg_basics.h
  agg_bezier_arc.h
  agg_bitset_iterator.h
  agg_bounding_rect.h
  agg_bspline.h
  agg_clip_liang_barsky.h
  agg_color_gray.h
  agg_color_rgba.h
  agg_config.h
  agg_conv_adaptor_vcgen.h
  agg_conv_adaptor_vpgen.h
  agg_conv_bspline.h
  agg_conv_clip_polygon.h
  agg_conv_clip_polyline.h
  agg_conv_close_polygon.h
  agg_conv_concat.h
  agg_conv_contour.h
  agg_conv_curve.h
  agg_conv_dash.h
  agg_conv_gpc.h
  agg_conv_marker.h
  agg_conv_marker_adaptor.h
  agg_conv_segmentator.h
  agg_conv_shorten_path.h
  agg_conv_smooth_poly1.h
  agg_conv_stroke.h
  agg_conv_transform.h
  agg_conv_unclose_polygon.h
  agg_curves.h
  agg_dda_line.h
  agg_ellipse.h
  agg_ellipse_bresenham.h
  agg_embedded_raster_fonts.h
  agg_font_cache_manager.h
  agg_gamma_functions.h
  agg_gamma_lut.h
  agg_glyph_raster_bin.h
  agg_gsv_text.h
  agg_image_filters.h
  agg_line_aa_basics.h
  agg_math.h
  agg_math_stroke.h
  agg_path_storage.h
  agg_path_storage_integer.h
  agg_pattern_filters_rgba.h
  agg_pixfmt_amask_adaptor.h
  agg_pixfmt_gray.h
  agg_pixfmt_rgb.h
  agg_pixfmt_rgb_packed.h
  agg_pixfmt_rgba.h
  agg_rasterizer_outline.h
  agg_rasterizer_outline_aa.h
  agg_rasterizer_scanline_aa.h
  agg_render_scanlines.h
  agg_renderer_base.h
  agg_renderer_markers.h
  agg_renderer_mclip.h
  agg_renderer_outline_aa.h
  agg_renderer_outline_image.h
  agg_renderer_primitives.h
  agg_renderer_raster_text.h
  agg_renderer_scanline.h
  agg_rendering_buffer.h
  agg_rendering_buffer_dynarow.h
  agg_rounded_rect.h
  agg_scanline_bin.h
  agg_scanline_boolean_algebra.h
  agg_scanline_p.h
  agg_scanline_storage_aa.h
  agg_scanline_storage_bin.h
  agg_scanline_u.h
  agg_shorten_path.h
  agg_simul_eq.h
  agg_span_allocator.h
  agg_span_converter.h
  agg_span_generator.h
  agg_span_gouraud.h
  agg_span_gouraud_gray.h
  agg_span_gouraud_rgba.h
  agg_span_gradient.h
  agg_span_gradient_alpha.h
  agg_span_image_filter.h
  agg_span_image_filter_gray.h
  agg_span_image_filter_rgb.h
  agg_span_image_filter_rgba.h
  agg_span_image_resample.h
  agg_span_image_resample_gray.h
  agg_span_image_resample_rgb.h
  agg_span_image_resample_rgba.h
  agg_span_interpolator_adaptor.h
  agg_span_interpolator_linear.h
  agg_span_interpolator_persp.h
  agg_span_interpolator_trans.h