Marker Renderer

摘自:http://www.cnblogs.com/muxue/archive/2010/06/03/1751094.html

头文件: agg_renderer_markers.h

 

marker renderer 可以描画或是 alpha混合沉浸下面的这些图形:

 

enum marker_e

{

   marker_square,

   marker_diamond,

   marker_circle,

   marker_crossed_circle,

   marker_semiellipse_left,

   marker_semiellipse_right,

   marker_semiellipse_up,

   marker_semiellipse_down,

   marker_triangle_left,

   marker_triangle_right,

   marker_triangle_up,

   marker_triangle_down,

   marker_four_rays,

   marker_cross,

   marker_x,

   marker_dash,

   marker_dot,

   marker_pixel

};

Declaration

 

template<class BaseRenderer> classrenderer_markers :

publicrenderer_primitives<BaseRenderer>

{

public:

   typedef renderer_primitives<BaseRenderer> base_type;

   typedef BaseRenderer base_ren_type;

   typedef typename base_ren_type::color_type color_type;

   // . . .

};

Creation

 

renderer_markers(base_ren_type& rbuf) :

                        base_type(rbuf)

{}

正如你所见,构造的过程和 renderer_primitives 是一样简单的。

 

Member Functions

 

marker 的所有函数都接受 x y 和半径作为参数,这些值以像素数来衡量。在pixel() 中,半径值没有任何作用。填充(fill)和边线(line)颜色都来自renderer_primitives 基类。

 

void square(int x, int y, int r);

void diamond(int x, int y, int r);

void circle(int x, int y, int r);

void crossed_circle(int x, int y, int r);

void semiellipse_left(int x, int y, int r);

void semiellipse_right(int x, int y, intr);

void semiellipse_up(int x, int y, int r);

void semiellipse_down(int x, int y, int r);

void triangle_left(int x, int y, int r);

void triangle_right(int x, int y, int r);

void triangle_up(int x, int y, int r);

void triangle_down(int x, int y, int r);

void four_rays(int x, int y, int r);

void cross(int x, int y, int r);

void xing(int x, int y, int r);

void dash(int x, int y, int r);

void dot(int x, int y, int r);

void pixel(int x, int y, int);

当然,有一些为图方便的函数存在,这些函数基本上就是使用 switch/case 来构造:

 

void marker(int x, int y, int r, marker_etype);

根据给定的类型来描画一个 marker

 

template<class T>

void markers(int n, const T* x, const T* y,T r, marker_e type);

根据给定的类型描画一系列的 marker,坐标存储在 x y 两个数组中。

 

template<class T>

void markers(int n, const T* x, const T* y,const T* r, marker_e type);

根据给定的类型描画一系列的 marker,坐标和半径值分别存储在 x y r 三个数组中。

 

template<class T>

void markers(int n, const T* x, const T* y,const T* r,

            const color_type* fill_colors,

            marker_e type);

根据给定的类型描画一系列的 marker,坐标、半径值以及颜色分别存储在 x y r fill_colors 四个数组中。

 

template<class T>

void markers(int n, const T* x, const T* y,const T* r,

            const color_type* fc, const color_type* lc,

            marker_e type);

根据给定的类型描画一系列的 marker,坐标、半径值以及颜色分别存储在 x y r fc lc 等数组中。


例子:

    agg::rendering_buffer &rbuf = rbuf_window();

    agg::pixfmt_bgr24 pixf(rbuf);


    typedef agg::renderer_base<agg::pixfmt_bgr24> renderer_base_type;

    renderer_base_type renb(pixf);


    renb.clear(agg::rgba8(255,255,255));


    agg::renderer_markers<renderer_base_type> marker(renb);

    marker.fill_color(agg::rgba8(0,255,0));

    marker.dot(120,140,50);




你可能感兴趣的:(renderer,agg,markers)