一、修改模板
現在終于進入了真正的矢量繪圖階段,我們的模版也需要有所改變;至于為什么,有什么作用,以后會說到;
包含下面的頭文件,并且在the_application類中添加兩個成員。
//掃描線和掃描線光柵器
#include <agg_scanline_u.h>
#include <agg_rasterizer_scanline_aa.h>
private:
//掃描線和掃描線光柵器
agg::scanline_u8 scanline;
agg::rasterizer_scanline_aa<> rasterizer;
二、頂點源
頂點源(Vertex Source)不是一個類,而是一種類的模式。這種類里面有rewind()函數和vertex()函數給AGG內部調用(沒錯,這就是它的定義)。類如其名,頂點源就是為繪圖系統提供頂點信息的,大家能想象得出這兩個函數的作用了嗎?
rewind():回到最開始個步驟;
vertex(double* x, double* y):每調用一次,跳一個步驟(點),每一個步驟都輸出頂點的x,y坐標(灰色字),以及這個坐標的繪圖命令(紫色字);

三、內置頂點源
AGG內置了大量的頂點源,我們可以直接調用,他們包括:
agg::path_storage
agg::arc
agg::rounded_rect
agg::ellipse
agg::curve3
agg::curve4 ......
等等,為什么沒有線、點頂點源?其實,path_storage已經內置了畫線函數、畫弧函數、畫貝塞爾曲線函數,你可以用path_storage創造幾乎任何的圖形。至于畫點,copy_pixel()或者用橢圓吧……
四、路徑儲存器
Path storage 是用來管理路徑、畫復雜圖形的。在上面可以任意添加直線、曲線、其他路徑。
頭文件
#include <agg_path_storage.h>
類型定義
typedef path_base<vertex_block_storage<double> > path_storage;
基本成員函數
- move_to()
添加命令為 path_cmd_move_to 的頂點,意為下一條線從這個點開始畫;
- line_to()
添加命令為 path_cmd_line_to 的頂點,意為畫線到這個點;
- arc_to(double rx, double ry, double angle, bool large_arc_flag, bool sweep_flag, double x, double y)
添加一條弧路徑,畫軸長為rx, ry,角度為angle,優/劣弧,順逆時針,終點在(x,y)。
- curve3_to()
添加貝塞爾曲線,參數為一個控制點和終點的坐標
- curve4_to()
添加貝塞爾曲線,參數為兩個控制點和終點的坐標
- join_path()
添加一個頂點源,即組合
- vertex(unsigned idx, double* x, double* y)
last_vertex(double* x, double* y)
vertex(double* x, double* y)
取頂點位置,前者為已知步驟,后兩者為順序或倒序獲取
- modify_vertex()
modify_command()
修改步驟為idx的頂點坐標和命令
五、其他頂點源
其他頂點源就不一一介紹了,只列出其頭文件和構造函數:
- #include <agg_ellipse.h>
ellipse(double x, double y, double rx, double ry, unsigned num_steps=0, bool cw=false)
圓心(x, y)和長短半軸分別為rx, ry,步驟數位num_steps(無用),cw決定相交地方是否空出
- #include <agg_arc.h>
arc(double x, double y, double rx, double ry, double a1, double a2, bool ccw=true)
圓心為(x, y)和長短半軸分別為rx, ry,初始角度和終結角度為a1, a2
- #include <agg_curves.h>
curve3(double x1, double y1, double x2, double y2, double x3, double y3)
三個點,分別為:初始點,控制點一,終結點
- #include <agg_curves.h>
curve4(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4)
四個點,分別為:初始點,控制點一,控制點二,終結點
- #include <agg_rounded_rect.h>
rounded_rect(double x1, double y1, double x2, double r)
對角點的坐標和圓角半徑
至于怎樣把他們畫在渲染內存上呢,我們下一篇會講到。
頭文件也漸漸地多了起來,包含頭文件時的工作量有點大;我特地列了一個頭文件,里面已經包含了所有的AGG頭文件,以后大家只需要包含它就好了。
下載處:http://www.shnenglu.com/Files/Shihira/agg.h.zip