agg::conv_stroke显示轮廓线

5.1前言

轮廓线就是图形的边界,任何封闭的顶点源跳过agg::conv_stroke阶段,将会描绘实心的图形,填充的颜色和边界保持一致。如果不封闭的顶点源一旦跳过agg::conv_stroke就什么也不绘制。agg::conv_stroke就是用来描绘图形边界的。

agg::conv_contour对比可知,agg::conv_contour是扩展图形的轮廓线,通俗一点就是拓展图形的边界,对图形的边界进行放缩(但是和agg::trans_affine不同,这是中心位置不变的缩放)。

摘自:McSeem

A line is in general more complex objectthan a polygon. Well, unless it's a

simple jagged Bresenham line. All lines areeventually converted into polygons

that represent their outlines. So that, inmodern graphics there are no lines,

there are *strokes*. And conv_stroke doesthis job

5.2 官方例子

       执行examples/conv_stroke例程,提供如下的控制:

1)线段端点的切换

2)线段之间的连接方式

3)线段宽度

4Miterlimit 这种选择暂时不理解

 

5.2 轮廓线属性的设置

1)线段端点的形状

   enum line_cap_e

    {

       butt_cap,//按钮形状,实际和方形形状并无二致

       square_cap,//设置之后,长度比butt_cap长一些

       round_cap//半圆形状

};

设置函数:voidline_cap(line_cap_e lc)

2)线段的宽度

设置函数:voidwidth(double w)

3)介绍stroke的默认参数

当然我们可以不调用line_cap,也可以不调用width,因为stroke有默认的构造器,指定了默认的参数如下:

       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会单独描述!!

5.3 例子回放

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<agg::path_storage> 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));


你可能感兴趣的:(agg)