您好,登錄后才能下訂單哦!
小編給大家分享一下AGG中agg::ellipse如何渲染橢圓和多邊形,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
圓是橢圓的一種,只不過是長短軸半徑相等而已。在AGG中,必須給定橢圓的長短半軸的半徑,才能夠繪制橢圓。將橫坐標(biāo)半徑稱為rx,縱坐標(biāo)半徑稱為ry。并且可以指定繪制的方向,是順時(shí)針,還是逆時(shí)針。提供了一個(gè)參數(shù),可以實(shí)現(xiàn)內(nèi)接多邊形的渲染。
類定義文件:include/agg_ellipse.h
類的構(gòu)造函數(shù): ellipse(double x, double y, double rx, double ry,
unsigned num_steps=0, boolcw=false)
參數(shù)說明:x是圓心的X坐標(biāo),y是圓心的Y坐標(biāo),rx是圓形的X半徑,ry是圓形的Y半徑,當(dāng)rx不等于ry的時(shí)候,渲染出來的實(shí)際上是一個(gè)橢圓,具體可調(diào)整參數(shù)根據(jù)第三和第四個(gè)參數(shù)可以了解到圓形可以是一個(gè)扁平的圓形,不一定就是一個(gè)規(guī)規(guī)矩矩的圓形。如果指定num_steps值,構(gòu)建的是一個(gè)圓內(nèi)接多邊形。cw是順時(shí)針,還是逆時(shí)針渲染。
說明:在渲染的過程中,跳過agg::conv_stroke顯示擴(kuò)展線(也就是邊界,下面有實(shí)例說明),繪制的是一個(gè)實(shí)心圓。
代碼如下:
agg::ellipse ell(200,200,50,100);
ras.add_path(ell);
agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba8(255,0,0));
ras.reset();
agg::ellipse ell(200,200,50,100);
typedef agg::conv_stroke< agg::ellipse >ell_stroke;
ell_stroke stroke(ell);
ras.add_path(stroke);
agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba8(255,0,0));
ras.reset();
agg::ellipseell(200,200,50,100);
typedef agg::conv_dash<agg::ellipse> ell_cd_type;
ell_cd_type cdccell(ell);
cdccell.add_dash(5,5);
typedef agg::conv_stroke<ell_cd_type> ell_cc_cs_type;
ell_cc_cs_type csccell(cdccell);
ras.add_path(csccell);
rensl.color(agg::rgba8(255,0,0));
agg::render_scanlines(ras,sl,rensl);
ras.reset();
通過構(gòu)建agg::conv_dash模板,然后創(chuàng)建給agg::conv_stroke實(shí)現(xiàn)了虛線的描繪。
主要是進(jìn)行旋轉(zhuǎn),平移,縮放,圓心進(jìn)行了偏移,如果需要回到當(dāng)初的位置,平移肯定是必須的,這一點(diǎn)和agg::conv_contour擴(kuò)展輪廓線不同。
代碼如下:
agg::ellipse ell(200,200,50,100);
//坐標(biāo)轉(zhuǎn)換
agg::trans_affine mtx;
mtx.scale(0.5,1); //x軸縮小到原來的一半
mtx.rotate(agg::deg2rad(30));//旋轉(zhuǎn)30度
mtx.translate(200,200);//X,Y坐標(biāo)分別平移100
typedef agg::conv_transform<agg::ellipse> ell_ct_type;
ell_ct_type ctell(ell,mtx); //矩陣變換
typedef agg::conv_dash<ell_ct_type> ell_cd_type;
ell_cd_type cdccell(ctell);
cdccell.add_dash(5,5);
typedef agg::conv_stroke<ell_cd_type> ell_cc_cs_type;
ell_cc_cs_type csccell(cdccell);
摘自:http://www.cnblogs.com/CoolJie/archive/2011/04/27/2030122.html
說明:指定構(gòu)造器的第五個(gè)參數(shù)為12,構(gòu)建十二邊形
代碼如下:
agg::ellipse ell(300,300,130,130,12);
agg::conv_stroke<agg::ellipse> stroke(ell);
ras.add_path(stroke);
agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba8(255,0,0));
說明:很多的類都有該函數(shù),但是具體的該函數(shù)的實(shí)際意義并不了解?。?/p>
例子 inline void ellipse::approximation_scale(double scale):
agg::ellipse ell(300,300,240,240);
ell.approximation_scale(0.0001);//直線
ell.approximation_scale(0.001);//矩形
ell.approximation_scale(0.005);//正七邊形
ell.approximation_scale(0.0025);//正五邊形
agg::conv_stroke<agg::ellipse>stroke2(ell);
agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba8(255,0,0));
ras.reset();
以上是“AGG中agg::ellipse如何渲染橢圓和多邊形”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。