千家信息网

AGG第十课 agg::conv_stroke 渲染轮廓线

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,1前言轮廓线就是图形的边界,任何封闭的顶点源跳过agg::conv_stroke阶段,将会描绘实心的图形,填充的颜色和边界保持一致。如果不封闭的顶点源一旦跳过agg::conv_stroke就什么也不
千家信息网最后更新 2026年10月31日AGG第十课 agg::conv_stroke 渲染轮廓线

1前言

轮廓线就是图形的边界,任何封闭的顶点源跳过agg::conv_stroke阶段,将会描绘实心的图形,填充的颜色和边界保持一致。如果不封闭的顶点源一旦跳过agg::conv_stroke就什么也不绘制。agg::conv_stroke就是用来描绘图形边界的。

和agg::conv_contour对比可知,agg::conv_contour是扩展图形的轮廓线,通俗一点就是拓展图形的边界,对图形的边界进行放缩(但是和agg::trans_affine不同,这是中心位置不变的缩放)。

摘自:McSeem

A line is in general more complexobjectthan a polygon. Well, unless it's a simple jagged Bresenham line. All linesareeventually converted into polygons that represent their outlines. So that,inmodern graphics there are no lines,there are *strokes*. And conv_strokedoesthis job

2 官方例子

执行examples/conv_stroke例程,提供如下的控制:

1)线段端点的切换

2)线段之间的连接方式

3)线段宽度

4)miter limit工件的链接切口

3 轮廓线属性的设置

1)线段端点的形状

enum line_cap_e

{

butt_cap,//按钮形状,实际和方形形状并无二致

square_cap,//设置之后,长度比butt_cap长一些

round_cap//半圆形状

};

设置函数:voidline_cap(line_cap_e lc)

2)线段的宽度

设置函数:voidwidth(double w)

3)介绍stroke的默认参数

当然我们可以不调用line_cap,也可以不调用width,因为stroke有默认的构造器,指定了默认的参数如下:

m_width(0.5),

m_width_abs(0.5),

m_width_eps(0.5/1024.0),

m_width_sign(1),

m_miter_limit(4.0),

m_inner_miter_limit(1.01),

m_approx_scale(1.0),

m_line_cap(butt_cap),

m_line_join(miter_join),

m_inner_join(inner_miter)

4)agg::conv_stroke的线段样式

采用的是实线的渲染方式,是否我们可以通过替换她,描述虚线:agg::conv_dash

结果发现:什么也没有渲染出来!!agg::conv_dash会单独描述!!

4 例子

ras.reset();

agg::path_storage ps1;

ps1.move_to(200,200);

ps1.line_to(300,300);

agg::line_cap_e cap = agg::round_cap;//设置线段端点的形状

agg::conv_stroke stroke(ps1);//线段的样式

stroke.line_cap(cap);

stroke.width(50);//设置线段的宽度

ras.add_path(stroke);

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

5 shorten函数的用法

1说明

在conv_stroke和conv_dash对象中添加了缩短路径的方法。对于渲染带粗线的箭头非常有效。同时也有一个agg_conv_shorten_path转换器对象,可以单独使用。

2示例

m_slider1(80, 250, 600-10,276, !flip_y)

add_ctrl(m_slider1);

m_slider1.range(0,300);

m_slider1.num_steps(30);

m_slider1.value(1);

//一种坍塌式的减少过程

agg::ellipse ell1(230,230,140,150);

agg::conv_stroke stroke1(ell1);

stroke1.width(30);

stroke1.shorten(m_slider1.value());

ras.add_path(stroke1);

//类似于缩短

agg::path_storage ps;

ps.move_to(20,30);

ps.line_to(440,30);

agg::conv_stroke stroke2(ps);

stroke2.width(30);

stroke2.shorten(m_slider1.value());

ras.add_path(stroke2);


线段 图形 形状 边界 轮廓 函数 宽度 就是 端点 例子 参数 对象 方式 样式 点源 不同 有效 通俗 一致 并无二致 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 山东特亿宝互联网科技有限公司 科技互联网企业 互联网通讯科技 奇酷互联网络科技 碳银互联网科技有限公司 深圳艾佳互联网科技 科技类的互联网平台 卓越科技互联网 招聘 深圳市运趣互联网科技有限公司 互联网科技实习生岗位职责 栖莱科技互联网股份有限公司 赶超互联网科技 微信多开 健康食品互联网创新科技园项目 中国互联网公司排名锤子科技 朱啸虎曾投资哪些互联网科技企业 保险科技服务互联网营销体系 杭州披云加互联网科技有限公司 产业互联网科技服务公司 同城互联网络科技 长沙易易互联网科技有限公司 新华互联网科技 互联网科技公司华为 科技创新与互联网经济 互联网科技小贷 鑫亿盛互联网科技 中国最先进互联网科技公司 深圳市运趣互联网科技有限公司 栖莱科技互联网股份有限公司 梅州GM互联网络科技有限公司 互联网的黑科技实验室
0