agg::conv_contour无法应用于自交的封闭图形

测试代码:

void DrawIntersectContour()

{

agg::rendering_buffer &rbuf = rbuf_window();

agg::pixfmt_bgr24 pixf(rbuf);

typedef agg::renderer_base<agg::pixfmt_bgr24> renderer_base_type;

renderer_base_type renb(pixf);

typedef agg::renderer_scanline_aa_solid<renderer_base_type> renderder_scanline_type;

renderder_scanline_type rensl(renb);

agg::rasterizer_scanline_aa<> ras;

agg::scanline_u8 sl;

ras.reset();

agg::path_storage ps;

ps.move_to(200,400);

ps.line_to(500,500);

ps.line_to(200,500);

ps.line_to(500,400);

ps.line_to(200,400);

agg::conv_contour<agg::path_storage> contour(ps);

agg::conv_stroke<agg::conv_contour<agg::path_storage> > stroke(contour);

ras.add_path(stroke);

//     agg::conv_stroke<agg::path_storage> stroke1(ps);

//     ras.add_path(stroke1);

agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba8(0,255,0));

}

结果分析:尝试绘制一个三角形漏斗,但是通过扩展轮廓线模块,发现没有进行封闭,可通过取消注释,查看具体的情况。

如下是作者的描述:

You can use conv_contour in your vector pipeline. See

examples/conv_contour.cpp for details. The only problem is it won‘twork for

self-intersecting contours, because the direction of the polygons is

essential, but we can‘t talk about the polygon direction if itintersects

itself.

时间: 2024-10-14 11:47:15

agg::conv_contour无法应用于自交的封闭图形的相关文章

AGG第二十一课 agg::conv_contour 扩展轮廓线

1前言 轮廓线就是图形的边界,任何封闭的顶点源跳过agg::conv_stroke阶段,将会描绘实心的图形,填充的颜色和边界保持一致.如果不封闭的顶点源一旦跳过agg::conv_stroke就什么也不绘制.agg::conv_stroke就是用来描绘图形边界的. 和agg::trans_affine对比可知,agg::conv_contour是扩展图形的轮廓线,通俗一点就是拓展图形的边界,对图形的边界进行放缩(但是和agg::trans_affine仿射变换不同,这是中心位置不变的缩放). 2

agg::conv_contour函数auto_detect_orientation作用

正如名称所言:自动检测方向,什么方向,可能很多人不了解,通过AGG邮件了解到几点:扩展轮廓线跟图形的绘制方向有关(也就是move_to,line_to,构成的图形的顺时针,还是逆时针).如下的两个例子,一个是顺时针绘制矩形,一个是逆时针绘制矩形,然后扩展轮廓线. 例子1逆时针 agg::path_storage ps; ps.move_to(395.5,200.5); ps.line_to(295.5,200.5); ps.line_to(295.5,210.5); ps.line_to(395

[ACdream 1215 Get Out!]判断点在封闭图形内

大致题意:在二维平面上,给一些圆形岛屿的坐标和半径,以及圆形船的位置和半径,问能否划到无穷远的地方去 思路:考虑任意两点,如果a和b之间船不能通过,则连一条边,则问题转化为判断点是否在多边形中.先进行坐标变换,将船变到原点,以从原点到每个点的有向角作为状态,每条边的边权为这条边对有向角的改变量,那么点在多边形内相当于存在负权环,用SPFA判负环即可. #pragma comment(linker, "/STACK:10240000") #include <map> #inc

AGG第二十二课 conv_contour函数auto_detect_orientation的字体应用

1 提供如下的代码结构渲染字体 agg::conv_transform<...> conv (path,matrix); agg::conv_curve<...> curve (conv); agg::conv_contour<...> contour(curve); curve.approximaltion_scale (scale); contour.auto_detect_orientation (true); contour.width (bold); 当bol

agg::ellipse画圆

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

agg::ellipse画圆(扩展)

引言:在刚开始的时候对agg::conv_stroke不了解,认为她与agg::conv_dash是一路的货色,并且分别代表实线和虚线,其实不然,agg::conv_stroke此类存储线的位置,宽度,线端点形状,线连接方式等信息  ,通过使用虚线渲染圆,充分理解了,她们之间如何配合使用. 小节一:虚线的使用方法 例子如下:     //Vertex Source顶点源,我更喜欢称之为端点集合,或者点集合矩阵     //第一个参数是圆形圆心的X坐标,第二个参数是圆形圆心的Y坐标     //第

封闭填充实体另一种颜色渲染边框

绘制封闭图形时,采用一种颜色填充,然后采用另一个颜色描绘边框 操作步骤: 1 直接渲染顶点源 2 通过agg::conv_stroke提取顶点源的轮廓线 3 采用另一种颜色描绘轮廓线 实例代码: 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(); agg::conv_stroke<agg:

(转)用AGG实现高质量图形输出(二)

本文上接<用AGG实现高质量图形输出(一)>,分别介绍了AGG显示流程中的各个环节. 上次讲了AGG的显示原理并举了一个简单的例子,这一篇文章开始讲AGG工作流程里的每个环节.为了方便对照,再放一次AGG显示流程 图 另外,上一篇文章里的例程也很重要,后面的例子都将基于这个代码. 下面,我们来考察AGG显示流程中的每个环节.理解每个环节最好的方法是编写实验代码,建议先参照这里建 立一个可以运行的AGG实验环境. 顶点源(Vertex Source) 顶点源是一种可以产生多边形所需要的“带命令的

conv_contour的真正应用价值

1引言 在整个实验的过程中,很多的例子都会使用agg::conv_contour 这个部件,然后大家异口同声的说:进行轮廓变换!!构造参数为VertexSource width属性决定扩展或收缩轮廓.是在已有的例子中,即使去除该部件的转换,也 没有看到有什么的异样!! 网上提供的一般逻辑: 矩阵变换agg::conv_transform 轮廓变换agg::conv_contour 转换成多义线agg::conv_stroke 2代码分析: conv_contour实际上是由vcgen_conto