1. 程式人生 > >【渲染引擎】agg畫線介紹

【渲染引擎】agg畫線介紹

對於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方法,這個方法接受倆個引數,通過引數名字可以很容易看出其意義。