AGG中agg::ellipse如何渲染椭圆和多边形-创新互联
小编给大家分享一下AGG中agg::ellipse如何渲染椭圆和多边形,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
为丛台等地区用户提供了全套网页设计制作服务,及丛台网站建设行业解决方案。主营业务为网站设计、成都网站建设、丛台网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!8.1引言
圆是椭圆的一种,只不过是长短轴半径相等而已。在AGG中,必须给定椭圆的长短半轴的半径,才能够绘制椭圆。将横坐标半径称为rx,纵坐标半径称为ry。并且可以指定绘制的方向,是顺时针,还是逆时针。提供了一个参数,可以实现内接多边形的渲染。
8.2 函数定义
类定义文件:include/agg_ellipse.h
类的构造函数: ellipse(double x, double y, double rx, double ry,
unsigned num_steps=0, boolcw=false)
参数说明:x是圆心的X坐标,y是圆心的Y坐标,rx是圆形的X半径,ry是圆形的Y半径,当rx不等于ry的时候,渲染出来的实际上是一个椭圆,具体可调整参数根据第三和第四个参数可以了解到圆形可以是一个扁平的圆形,不一定就是一个规规矩矩的圆形。如果指定num_steps值,构建的是一个圆内接多边形。cw是顺时针,还是逆时针渲染。
8.3 例子回放
1)渲染实心圆
说明:在渲染的过程中,跳过agg::conv_stroke显示扩展线(也就是边界,下面有实例说明),绘制的是一个实心圆。
代码如下:
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();
2)渲染空心圆
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();
3)渲染虚线的空心圆
agg::ellipseell(200,200,50,100);
typedef agg::conv_dash
ell_cd_type cdccell(ell);
cdccell.add_dash(5,5);
typedef agg::conv_stroke
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实现了虚线的描绘。
4)仿射变换
主要是进行旋转,平移,缩放,圆心进行了偏移,如果需要回到当初的位置,平移肯定是必须的,这一点和agg::conv_contour扩展轮廓线不同。
代码如下:
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
ell_ct_type ctell(ell,mtx); //矩阵变换
typedef agg::conv_dash
ell_cd_type cdccell(ctell);
cdccell.add_dash(5,5);
typedef agg::conv_stroke
ell_cc_cs_type csccell(cdccell);
摘自:http://www.cnblogs.com/CoolJie/archive/2011/04/27/2030122.html
5)渲染圆内接多边形
说明:指定构造器的第五个参数为12,构建十二边形
代码如下:
agg::ellipse ell(300,300,130,130,12);
agg::conv_stroke
ras.add_path(stroke);
agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba8(255,0,0));
8.4 approximation_scale的困惑
说明:很多的类都有该函数,但是具体的该函数的实际意义并不了解!!
例子 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::render_scanlines_aa_solid(ras,sl,renb,agg::rgba8(255,0,0));
ras.reset();
以上是“AGG中agg::ellipse如何渲染椭圆和多边形”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
文章名称:AGG中agg::ellipse如何渲染椭圆和多边形-创新互联
文章网址:http://cdiso.cn/article/coposs.html