gg第十课gg: conv_stroke渲染轮廓线

gg: 1: conv_strokeagg: conv_strokeagg: conv_stroke

gg:: conv_contouragg: conv_contouragg: trans_affine McSeem

一行一般是complexobjectthan多边形。嗯,除非它是一个简单的锯齿状Bresenham线。所有linesareeventually转化为多边形,代表他们的轮廓。因此,在现代图形没有行,有* *。And conv_strokedoesthis job

2

examples/conv_stroke

1

2

3

4miter limit

3

1

enum line_cap_e

{

butt_cap,//

square_cap,//butt_cap

round_cap//

};

voidline_cap(line_cap_e lc)

2

voidwidth(double w)

3stroke

line_cap,widthstroke

m_width(0.5),

m_width_abs(0.5),

m_width_eps(0.5/1024.0),

m_width_sign(1),

m_miter_limit(4.0),

m_inner_miter_limit(1.01),

m_approx_scale(1.0),

m_line_cap(butt_cap),

m_line_join(miter_join),

m_inner_join(inner_miter)

4agg::conv_stroke

agg::conv_dash

agg::conv_dash

4

ras.reset();

agg::path_storage ps1;

ps1.move_to(200,200);

ps1.line_to(300,300);

agg::line_cap_e cap=agg::round_cap;//

agg::conv_stroke stroke(ps1);//

stroke.line_cap(cap);

stroke.width(50);//

ras.add_path(stroke);

agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba8(255,0,0));

5 shorten

1

conv_strokeconv_dashagg_conv_shorten_path

2

m_slider1(80, 250, 600-10,276, !flip_y)

add_ctrl(m_slider1);

m_slider1.range(0,300);

m_slider1.num_steps(30);

m_slider1.value(1);

//

agg::ellipse ell1(230,230,140,150);

agg::conv_stroke stroke1(ell1);

stroke1.width(30);

stroke1.shorten(m_slider1.value());

ras.add_path(stroke1);

//

agg::path_storage ps;

ps.move_to(20,30);

ps.line_to(440,30);

agg::conv_stroke stroke2(ps);

stroke2.width(30);

stroke2.shorten(m_slider1.value());

ras.add_path(stroke2);


gg第十课gg: conv_stroke渲染轮廓线