1 //----------------------------------------------------------------------------
2 // Anti-Grain Geometry - Version 2.3
3 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
5 // Permission to copy, use, modify, sell and distribute this software
6 // is granted provided this copyright notice appears in all copies.
7 // This software is provided "as is" without express or implied
8 // warranty, and with no claim as to its suitability for any purpose.
10 //----------------------------------------------------------------------------
11 // Contact: mcseem@antigrain.com
12 // mcseemagg@yahoo.com
13 // http://www.antigrain.com
14 //----------------------------------------------------------------------------
15 #ifndef AGG_RASTERIZER_OUTLINE_INCLUDED
16 #define AGG_RASTERIZER_OUTLINE_INCLUDED
18 #include "agg_basics.h"
22 //======================================================rasterizer_outline
23 template<class Renderer
> class rasterizer_outline
26 rasterizer_outline(Renderer
& ren
) :
34 //--------------------------------------------------------------------
35 void move_to(int x
, int y
)
38 m_ren
->move_to(m_start_x
= x
, m_start_y
= y
);
41 //--------------------------------------------------------------------
42 void line_to(int x
, int y
)
48 //--------------------------------------------------------------------
49 void move_to_d(double x
, double y
)
51 move_to(m_ren
->coord(x
), m_ren
->coord(y
));
54 //--------------------------------------------------------------------
55 void line_to_d(double x
, double y
)
57 line_to(m_ren
->coord(x
), m_ren
->coord(y
));
60 //--------------------------------------------------------------------
65 line_to(m_start_x
, m_start_y
);
70 //--------------------------------------------------------------------
71 void add_vertex(double x
, double y
, unsigned cmd
)
81 if(is_closed(cmd
)) close();
91 //--------------------------------------------------------------------
92 template<class VertexSource
>
93 void add_path(VertexSource
& vs
, unsigned id
=0)
100 while(!is_stop(cmd
= vs
.vertex(&x
, &y
)))
102 add_vertex(x
, y
, cmd
);
107 //--------------------------------------------------------------------
108 template<class VertexSource
, class ColorStorage
, class PathId
>
109 void render_all_paths(VertexSource
& vs
,
110 const ColorStorage
& colors
,
114 for(unsigned i
= 0; i
< num_paths
; i
++)
116 m_ren
->line_color(colors
[i
]);
122 //--------------------------------------------------------------------
123 template<class Ctrl
> void render_ctrl(Ctrl
& c
)
126 for(i
= 0; i
< c
.num_paths(); i
++)
128 m_ren
->line_color(c
.color(i
));