摘自: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);