agg::ellipse画圆(扩展)

引言:在刚开始的时候对agg::conv_stroke不了解,认为她与agg::conv_dash是一路的货色,并且分别代表实线和虚线,其实不然,agg::conv_stroke此类存储线的位置,宽度,线端点形状,线连接方式等信息  ,通过使用虚线渲染圆,充分理解了,她们之间如何配合使用。

小节一:虚线的使用方法

例子如下:

    //Vertex Source顶点源,我更喜欢称之为端点集合,或者点集合矩阵
    //第一个参数是圆形圆心的X坐标,第二个参数是圆形圆心的Y坐标
    //第三个参数是圆形的X半径,第四个参数是圆形的Y半径
    //根据第三和第四个参数可以了解到圆形可以是一个扁平的圆形,
    //不一定就是一个规规矩矩的圆形
    agg::ellipse ell(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();

通过构建agg::conv_dash模板,然后创建给agg::conv_stroke实现了虚线的描绘。

小节二:放缩,偏移,旋转的转换

    //Vertex Source顶点源,我更喜欢称之为端点集合,或者点集合矩阵
    //第一个参数是圆形圆心的X坐标,第二个参数是圆形圆心的Y坐标
    //第三个参数是圆形的X半径,第四个参数是圆形的Y半径
    //根据第三和第四个参数可以了解到圆形可以是一个扁平的圆形,
    //不一定就是一个规规矩矩的圆形
    agg::ellipse ell(200,200,50,100);

    //坐标转换
    agg::trans_affine mtx;
    mtx.scale(0.5,1); //x轴缩小到原来的一半
    mtx.rotate(agg::deg2rad(30));//旋转30度
    mtx.translate(200,200);//X,Y坐标分别平移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

在这个例子中,发现很多的文章引入:agg::conv_contour,事实上去掉该东西,对于渲染也没有任何的影响,从这里可以看出AGG是一个非常松散的渲染工具,她提供了很多的工具,但是你可以很简单的渲染,也可以进行一系列的转换。

变换矩阵是一个非常不错的东西,核心是对坐标进行一系列的转换,实际上,当我们构建一个形状例如圆形,实际上AGG已经知道了所有形成的点坐标,然后对点的坐标进行操作。

注:trans_affine不 仅仅用于源顶点的变换,在AGG库中有不少地方都能看到它。比如后面会讲到的线段(span)生成器,通过变换矩阵,就能够 自由变换填充于多边形之内的图案。

时间: 2024-10-22 10:57:27

agg::ellipse画圆(扩展)的相关文章

agg::ellipse画圆

前言: path_storage是一个非常重要的顶点容器,并且也提供了很多的形状,在这里,我们看看path_storage是否可以描绘圆形,没有找到任何相关的函数支持直接画圆形,由于项目中并没有使用到任何贝塞尔曲线,所以也并不展开讨论相关的话题.因此引入了其他的顶点源,agg::ellipse去描绘一个圆形.该实例代码并没有引入坐标转换管道,该专业术语将会在一章描述.     //Vertex Source顶点源,我更喜欢称之为端点集合,或者点集合矩阵     //第一个参数是圆形圆心的X坐标,

12864 显示画圆多种图形

/*******************************************************************************************************/ //程序说明:本程序为12864(st7920)驱动程序,只实现了最简单的显示功能 /*****************************************************************************************************

简单谈谈自己对htm与css中画圆的理解。

近几天,在利用css编辑中,发现不少边框图像要求是矩形圆角或者直接画一个圆的例子,下面和大家一起分享下对画圆的看法. 在这次的分享中,我侧重给大家看一些例子来更好的理解, 我们都明白,画圆时要用到“border-radius:”,而且在每次画圆时,我们都应该先设定一个width和height. 那么我们可以这样理解, 我们的圆是在一个矩形(正方形)中进行裁剪的,而border-radius就是我们要裁剪的尺寸. 给大家一些图片,更好的去理解. 首先,我们设定一个width为100px,高度为10

圆角背景实现,如实现圆角按钮;用xml文件画圆

项目中为了更好的视觉效果,然后又懒的去弄图片做背景时,往往就会通过xml布局文件来实现圆角的效果. 在drawable目录下新建一个shape类型的xml文件,设置<corners android:radius="5dp" />,然后在需要设为圆角的控件中,如按钮或LinearLayout,设置他们的background为drawable="@drawable/...".即可达到圆角的效果 // 用xml文件画圆 用竖线连接ListView的各个item

汇编画圆

汇编画圆-->效果如下图 代码如下: 1 dseg segment 2 center_x dw 150 ;原点坐标_x 3 center_y dw 90 ;原点坐标_y 4 radius dw 50 ;半径_r 5 label_x dw ? ;外接正方形右边界 6 label_y dw ? ;外接正方形下边界 7 distance dw ? 8 dseg ends 9 cseg segment 10 assume cs:cseg , ds:dseg 11 start: 12 mov ax , d

中点画线法画圆

中点画线法已经在画直线的时候详细讲过了,画圆时我们也可以用这种方法.画一个圆心为坐标原点的1/4圆,然后对其进行简单几何变换,平移对称,就可以得到任意圆. 类似的用中点画线法,从(0,r)点开始,每次要么向右走,要么向右下走,直到x==y,即到达四分之一圆处: (1)当d<0时,中点在圆内,则取正右方的点,(x+1,y+0.5),此时d=d+2*x+3; (2) 当d>=0时,中点在圆外,则取右下方的点,(x+1,y-1),此时d=d+2*(x-y)+5; (3) d0=1-r,即点(0,r)

h5画圆

下面一段代码是,h5的画圆,半圆,四分之一圆等效果 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> div{ width: 300px; height: 300px; border: 1px solid red; border-radius: 150

Unity GL 画圆

Unity下GL没有画圆的函数,只能自己来了. 如果能帮到大家,我也很高兴. 虽然没有画圆的函数,但是能画直线,利用这一点,配合微积分什么的,就可以画出来了.反正就是花很多连在一起的直线,每条直线足够短的时候,就足够圆了 1 void DrawCircle(float x, float y, float z, float r, float accuracy) 2 { 3 GL.PushMatrix (); 4 //绘制2D图像 5 GL.LoadOrtho (); 6 7 float strid

agg::ellipse 方法approximation_scale()

摘自:http://franko.github.io/agg-intro/vertex-source.html In the previous section we have seen agg::path_storage object. While this object is very flexible and can be used to describe all kind of geometric shapes there are a few other vertex source pri