顶点源是一种可以产生多边形所需要的“带命令的顶点”的对象。比如三角形顶点源,就应该会产生一个带“MoveTo”命令的点,另外二 个带"LineTo"命令的点和最终闭合的“ClosePoly”命令。
头文件
#include <agg_path_storage.h> //path_storage
#include <agg_ellipse.h> // ellipse
#include <agg_arc.h> // arc
#include <agg_arrowhead.h> // arrowhead
#include <agg_curves.h> // curve3, curve4
#include <agg_gsv_text.h> // gsv_text, gsv_text_outline
#include <agg_rounded_rect.h> // rounded_rect
...
类型
自定义类 |
所有实现了void rewind(unsigned path_id);和unsigned vertex(double* x, double* y);的类。 |
ellipse |
圆,输入为中心点坐标和XY轴半径,本文所用的例子就 使用了这个顶点源 |
arc |
弧线,输入为中心点坐标和XY轴半径,以及起始和终止角(rad),顺时针/逆时针方向 |
curve3 |
贝塞尔曲线,输入为起点坐标、第一控制点坐标、终点点坐标 |
curve4 |
贝塞尔曲线,输入为起点坐标、第一控制点坐标、第二控制点坐标、终点坐标 |
gsv_text |
使用AGG自带字模的文字输出(只支持ASCII码),使用start_point方法指定文字位置,text方法指定 文字,flip指定是否上下倒转,size指定文字大小,适合与conv_stroke或gsv_text_outline配合。 |
gsv_text_outline<> |
可变换文字,输入为gsv_text和变换矩阵(默认为trans_affine,后文会提到)。width方法设置文 字宽度 |
rounded_rect |
圆角方形,输入为左上角右下角坐标和圆角半径 |
path_storage |
路径存储器,可以用join_path方法加入多个顶点源。而且path_storage本身支持move_to, line_to,curve和arc_to等画线功能 |
arrowhead |
箭头,它是作为标记点来用的 |
其中的arrowhead颇为特殊,它一般作为线段的标记点,具体用法是这样的:
arrowhead ah;
ah.head(d1,d2,d3,d4);
ah.tail(d1,d2,d3,d4);
VertexSource VS;
conv_stroke<VertexSource, vcgen_markers_term> csVS(VS);
...draw_term
conv_marker<vcgen_markers_term, arrowhead> arrow(csVS.markers(), ah);
ras.add_path(csVS);
ras.add_path(arrow);
...render
ah.head()和ah.tail()方法中的d1,d2,d3,d4参数的意义见下图
例,画一条简单的箭头直线(基于此处代码)
在on_draw()方法最后加上下列代码:
-
agg::arrowhead ah;
-
ah.head(0,10,5,5);
-
ah.tail(10,10,5,5);
-
-
agg::path_storage ps;
-
ps.move_to(160,60);
-
ps.line_to(100,100);
-
-
agg::conv_stroke<agg::path_storage, agg::vcgen_markers_term> csps(ps);
-
agg::conv_marker<agg::vcgen_markers_term, agg::arrowhead>
-
arrow(csps.markers(), ah);
-
-
ras.add_path(csps);
-
agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba8(0,0,0));
-
-
ras.add_path(arrow);
-
agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba8(255,0,0));
得到的图形是:
注意要加头文件:
#include "agg_conv_marker.h"
#include "agg_arrowhead.h"
#include "agg_path_storage.h"
#include "agg_vcgen_markers_term.h"
试验代码,自定义一个顶点源(基于此处代码)
为了对顶点源有更深入的了解,我们要自己实现一个顶点源,这个顶点源只是很简单的一个三角形。
前面说过,只要实现了 void rewind(unsigned path_id); 和 unsigned vertex(double* x, double* y); 方法就可以作为顶点源。
rewind方 法指示顶点源回到第一个顶点;vertex方 法取出当前顶点然后把当前顶点下移,返回值是当前顶点所带的命令。所谓的命令是一个enum path_commands_e类 型,定义如下:
-
enum path_commands_e
-
{
-
path_cmd_stop = 0,
-
path_cmd_move_to = 1,
-
path_cmd_line_to = 2,
-
path_cmd_curve3 = 3,
-
path_cmd_curve4 = 4,
-
path_cmd_curveN = 5,
-
path_cmd_catrom = 6,
-
path_cmd_ubspline = 7,
-
path_cmd_end_poly = 0x0F,
-
path_cmd_mask = 0x0F
-
};
path_commands_e还 能和path_flags_e组 合:
-
enum path_flags_e
-
{
-
path_flags_none = 0,
-
path_flags_ccw = 0x10,
-
path_flags_cw = 0x20,
-
path_flags_close = 0x40,
-
path_flags_mask = 0xF0
- };
vertex()返回的命令中含有path_cmd_stop时 表示结束。
-
-
class triangle{
-
public:
-
triangle(double cx, double cy, double r)
-
{
-
-
m_step = 0;
-
m_pt[0].x = cx; m_pt[0].y = cy-r;
-
m_pt[1].x = cx+r*0.866; m_pt[1].y = cy+r*0.5;
-
m_pt[2].x = cx-r*0.866; m_pt[2].y = cy+r*0.5;
-
-
}
-
void rewind(unsigned)
-
{
-
m_step = 0;
-
}
-
unsigned vertex(double* x, double* y)
-
{
-
switch(m_step++)
-
{
-
case 0:
-
-
*x = m_pt[0].x;
-
*y = m_pt[0].y;
-
return agg::path_cmd_move_to;
-
case 1:
-
case 2:
-
-
*x = m_pt[m_step-1].x;
-
*y = m_pt[m_step-1].y;
-
return agg::path_cmd_line_to;
-
case 3:
-
-
return agg::path_cmd_end_poly|agg::path_flags_close;
-
default:
-
-
return agg::path_cmd_stop;
-
}
-
}
-
private:
-
agg::point_d m_pt[3];
-
unsigned m_step;
-
};
在on_draw()方法里把
agg::ellipse ell(100,100,50
,50); 改成
triangle ell(100,100,50); typedef agg::conv_contour<
agg::ellipse> ell_cc_type;改成typedef agg::conv_contour<
triangle> ell_cc_type;
得到的图形是:
除了文字输出功能(gsv_text只能输出ASCII文字),上面这些顶点源提供的图形丰富程度已经超过了系统API。文字输出功能 将以单独的篇幅讲述。
相关推荐
压缩包中的"用AGG实现高质量图形输出"可能包含示例代码、教程文档或者演示程序,这些内容可以帮助开发者更好地理解和使用AGG库。通过学习和实践,开发者能够掌握如何利用AGG来创建精细的图形,实现复杂的设计效果,...
在Windows编程领域,MFC(Microsoft ...GDI适合简单快速的图形输出,而AGG则适用于需要高质量和高性能的图形应用。开发者可以根据实际需求选择合适的图形库,结合MFC的强大功能,构建出高效且美观的Windows应用程序。
它的高效性和灵活性使得它在需要高质量2D图形输出的场景中尤其受欢迎。通过学习和使用AGG,开发者能够创建出具有专业品质的2D图形,同时享受高度自定义和性能优化带来的好处。无论是为了个人项目还是商业应用,深入...
4、支持高质量的图形处理,支持反走样插值等高级功能; 5、支持任意方式的惭变色处理; 6、支持所有颜色格式; 7、支持对位图的多种处理; 8、支持直线的多种处理,类似于GDI+; 9、支持GPC,即通用...
AGG(Anti-Grain Geometry)是一个开源的2D图形渲染引擎,主要用于生成高质量的矢量图形。在Windows平台上,如果你需要使用AGG库进行图形处理或开发项目,你可能会遇到如何在Visual Studio 2013环境下编译和集成AGG...
总结来说,AGG是一个专业且功能强大的2D图形库,对于那些需要高质量图形输出和精细控制的项目来说,是一个不可多得的工具。通过研究"copy-agg-jj-2.5.zip_JJ"中的源码和文档,开发者可以深入了解其工作原理,并将其...
在计算机图形学的世界里,高质量的2D渲染引擎是不可或缺的一部分,它们为各种应用程序、游戏以及用户界面提供了精细、流畅的视觉体验。Anti-Grain Geometry(AGG)正是这样一款强大的C++库,专为实现高保真2D图形而...
1. **矢量图形渲染**:Agg支持绘制各种矢量图形,如直线、曲线、圆弧、贝塞尔曲线等,并且能够进行平滑的抗锯齿处理,提供高质量的图形输出。 2. **高效的绘图算法**:采用先进的算法优化,Agg引擎能够在保持高画质...
虽然有人可能会说它目前没有维护,但它仍然提供了一个高质量的图形引擎,可以与 cairo 等项目相媲美。 AGG 大量使用 C++ 模板,这是一个主要的优点,也是一个潜在的缺点。 一方面,底层色彩空间和色彩存储模型的...
通过结合 AGG 库的强大图形能力以及 FreeType 字体引擎的支持,可以实现高质量的地图和图形输出。此外,通过 Python 绑定提供的接口,使得开发者能够更容易地集成到现有的应用程序和服务中,增加了项目的灵活性和可...
这个库对于那些希望在Python环境中进行图形绘制,尤其是需要高性能和高质量图像输出的开发者来说非常有用。在Python世界里,aggdraw是一个相对小众但功能强大的工具,它弥补了Python标准库如turtle在复杂图形绘制...
Matplotlib支持多种后端,例如PS用于生成PostScript文件,SVG用于创建可缩放矢量图形,Agg用于高质量PNG输出。Matplotlib还支持在不同的图形用户界面(如Gtk+、Tkinter等)中嵌入图形。 用户还可以自定义Matplotlib...
Agg(Anti-Grain Geometry)是一个高质量、快速的2D图形库。 - **知识点**: - **抗锯齿技术**:Agg以其出色的抗锯齿处理而闻名,能够提供平滑、清晰的线条和曲线。 - **几何变换**:Agg支持多种几何变换,如旋转...
开发者可以利用matplotlib轻松地绘制出高质量的图形,这对于数据分析、科学计算以及任何需要将数据视觉化的项目都极其有用。 matplotlib的核心特性包括: 1. **可定制性**:matplotlib提供了大量的选项来调整图形的...
它提供了一个高级接口用于创建静态、动态、交互式的图形,支持多种输出格式,如SVG、PDF、PNG等,使得在各种平台上展示和打印高质量图形成为可能。 二、matplotlib的特性 1. **丰富的图形类型**:matplotlib可以...
像素农场 硬件和软件2D渲染库 硬件渲染技术: 该库使用OpenGL ES2 +及其阴影着色(GLSL)作为其硬件渲染器后端。 从svg文件中读取下面的狮子杯=>镶嵌并使用GLES ... 基于Agg的Painter提供了高质量的图形输出。 P
这表明 SCons-Man 中涉及了复杂的图形渲染和图像处理技术,为开发高性能的图形应用程序提供了支持。 ### 总结 SCons-Man 不仅是一份关于 SCons 构建工具的文档集合,更是一系列深入探讨 SCons 高级特性的资源。...
3. **多后端支持**:`matplotlib` 支持多种图形渲染后端,包括agg(用于非交互式输出)、GTK、GTKAgg、GTKCairo、GTK3Agg、MacOSX、Qt4Agg、Qt5Agg、TkAgg、WebAgg(用于Web应用)和WXAgg等,这意味着你可以根据需求...
用户可以通过savefig函数的参数来调整图形的分辨率和质量,以满足不同的输出需求。 7. Matplotlib配置和优化 Matplotlib允许用户通过配置文件matplotlibrc来定制图表的样式和行为。在进行大量数据可视化时,性能...