IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    AGG入门(七) - 顶点源

    Shihira发表于 2012-07-24 08:30:00
    love 0

    一、修改模板

    现在终于进入了真正的矢量绘图阶段,我们的模版也需要有所改变;至于为什么,有什么作用,以后会说到;
    包含下面的头文件,并且在the_application类中添加两个成员。
    //扫描线和扫描线光栅器
    #include
    #include

    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

    类型定义

    typedef path_base<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
      ellipse(double x, double y, double rx, double ry, unsigned num_steps=0, bool cw=false)
      圆心(x, y)和长短半轴分别为rx, ry,步骤数位num_steps(无用),cw决定相交地方是否空出
    • #include
      arc(double x, double y, double rx, double ry, double a1, double a2, bool ccw=true)
      圆心为(x, y)和长短半轴分别为rx, ry,初始角度和终结角度为a1, a2
    • #include
      curve3(double x1, double y1, double x2, double y2, double x3, double y3)
      三个点,分别为:初始点,控制点一,终结点
    • #include
      curve4(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4)
      四个点,分别为:初始点,控制点一,控制点二,终结点
    • #include
      rounded_rect(double x1, double y1, double x2, double r)
      对角点的坐标和圆角半径

    至于怎样把他们画在渲染内存上呢,我们下一篇会讲到。
    头文件也渐渐地多了起来,包含头文件时的工作量有点大;我特地列了一个头文件,里面已经包含了所有的AGG头文件,以后大家只需要包含它就好了。
    下载处:
    http://www.cppblog.com/Files/Shihira/agg.h.zip



    Shihira 2012-07-24 16:30 发表评论


沪ICP备19023445号-2号
友情链接