您好,登錄后才能下訂單哦!
輪廓線就是圖形的邊界,任何封閉的頂點源跳過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 complexobjectthan a polygon. Well, unless it's a simple jagged Bresenham line. All linesareeventually converted into polygons that represent their outlines. So that,inmodern graphics there are no lines,there are *strokes*. And conv_strokedoesthis job
執行examples/conv_stroke例程,提供如下的控制:
1)線段端點的切換
2)線段之間的連接方式
3)線段寬度
4)miter limit工件的鏈接切口
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)
4)agg::conv_stroke的線段樣式
采用的是實線的渲染方式,是否我們可以通過替換她,描述虛線:agg::conv_dash
結果發現:什么也沒有渲染出來!!agg::conv_dash會單獨描述!!
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));
在conv_stroke和conv_dash對象中添加了縮短路徑的方法。對于渲染帶粗線的箭頭非常有效。同時也有一個agg_conv_shorten_path轉換器對象,可以單獨使用。
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<agg::ellipse> 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<agg::path_storage> stroke2(ps);
stroke2.width(30);
stroke2.shorten(m_slider1.value());
ras.add_path(stroke2);
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。