【渲染引擎】agg画线介绍

时间:2021-09-23 05:39:02

对于agg的字体进行了一个很简单的介绍,下面就再对agg的画线进行一个简单的说明。
首先对于画线来说,有几种线条比如普通线, 虚实线,点阵状的线条。agg对于每种线条都有支持。另外对于线条的起始的结束样式也有几种,这个属性一般都是以linecap来标识。只有绘制较宽线段时,它才有效。这个属性的合法值如下表所示。默认值是:”butt”。

  1. “butt” 这个默认值指定了线段应该没有线帽。线条的末点是平直的而且和线条的方向正交,这条线段在其端点之外没有扩展;
  2. “round” 这个值指定了线段应该带有一个半圆形的线帽,半圆的直径等于线段的宽度,并且线段在端点之外扩展了线段宽度的一半;
  3. “square” 这个值表示线段应该带有一个矩形线帽。这个值和 “butt” 一样,但是线段扩展了自己的宽度的一半。
    在agg中相应的也有三个属性与其对应。
    下面我们对agg中画虚实线的方法进行介绍。对于agg来说,其虚实线主要实现是在agg_conv_dash.h头文件中,可以看到其主要提供了几个方法
template<class VertexSource, class Markers=null_markers> 
struct conv_dash : public conv_adaptor_vcgen<VertexSource, vcgen_dash, Markers>
{
typedef Markers marker_type;
typedef conv_adaptor_vcgen<VertexSource, vcgen_dash, Markers> base_type;

conv_dash(VertexSource& vs) :
conv_adaptor_vcgen<VertexSource, vcgen_dash, Markers>(vs)
{
}

void remove_all_dashes()
{
base_type::generator().remove_all_dashes();
}

void add_dash(double dash_len, double gap_len)
{
base_type::generator().add_dash(dash_len, gap_len);
}

void dash_start(double ds)
{
base_type::generator().dash_start(ds);
}

void shorten(double s) { base_type::generator().shorten(s); }
double shorten() const { return base_type::generator().shorten(); }

在我们的开发中主要就是使用add_dash方法,这个方法接受俩个参数,通过参数名字可以很容易看出其意义。