Graphic 矢量图形的区域填充与缠绕规则
来源:互联网 发布:java按钮监听器 编辑:程序博客网 时间:2024/04/24 20:44
1. 缠绕规则概念
增强的绘图 API 还引入了路径“缠绕”的概念:路径的方向。
路径的缠绕可以是正向的(顺时针),也可以是负向的(逆时针)。渲染器为 data 参数解释矢量所提供坐标的顺序确定了缠绕的方向。
- A.
- 指示绘制方向的箭头
- B.
- 正向缠绕(顺时针)
- C.
- 负向缠绕(逆时针)
此外,请注意 Graphics.drawPath() 方法可选的第三个参数“winding”:
drawPath(commands:Vector.<int>, data:Vector.<Number>, winding:String = "evenOdd"):void
在这种情况下,第三个参数是一个字符串或常量,用于指定相交路径的缠绕或填充规则。(这些常量值在 GraphicsPathWinding 类中定义为 GraphicsPathWinding.EVEN_ODD 或GraphicsPathWinding.NON_ZERO。)当路径相交时,缠绕规则十分重要。
奇偶规则是标准的缠绕规则,早期的绘图 API 都使用此规则。奇偶规则也是 Graphics.drawPath() 方法的默认规则。
使用奇偶缠绕规则时,任何相交路径都交替使用开放填充与闭合填充。如果使用同一填充绘制的两个正方形相交,则不会填充相交的区域。通常,相邻区域不会都填充或都不填充。
另一方面,非零规则依靠缠绕(绘制方向)来确定是否填充相交路径定义的区域。当相对缠绕的路径相交时,不填充所定义的区域,这与奇偶规则十分类似。对于相同缠绕的路径,将填充本来不填充的区域:
- A.
- 奇偶缠绕规则
- B.
- 非零缠绕规则
2. 缠绕规则
这些名称系指用于定义如何管理填充的更具体规则。正向缠绕路径将得到赋值 +1;负向缠绕路径将得到赋值 -1。
以形状上闭合区域中的一点为起点,绘制一个从该点向外无限延伸的线条。使用该线条与路径相交的次数以及这些路径的组合值来确定填充。
对于奇偶缠绕,使用该线条与路径相交的次数。如果计数为奇数,则填充相交区域。如果计数为偶数,则不填充相交区域。
对于非零缠绕,使用赋予路径的值。如果路径的组合值不为 0,则填充相交区域。如果组合值为 0,则不填充相交区域。
- A.
- 奇偶缠绕规则
- B.
- 非零缠绕规则
3. 缠绕使用
这些填充规则很复杂,但有些情况下必须使用它们。例如绘制星形时。如果使用标准奇偶规则,该形状需要十个不同的线条。如果使用非零缠绕规则,所需十个线条将减少为五个。下面的 ActionScript 使用五个线条和非零缠绕规则来绘制星形:
graphics.beginFill(0x60A0FF); graphics.drawPath( Vector.<int>([1,2,2,2,2]), Vector.<Number>([66,10, 23,127, 122,50, 10,49, 109,127]), GraphicsPathWinding.NON_ZERO);
星形如下所示:
- A.
- 奇偶 10 个线条
- B.
- 奇偶 5 个线条
- C.
- 非零 5 个线条
如果对图像进行了动画处理,或图像用作三维对象上的纹理且发生重叠,则缠绕规则会变得更为重要。
- Graphic 矢量图形的区域填充与缠绕规则
- 规则区域填充
- 理解SVG的图形填充规则
- 理解SVG的图形填充规则
- 多边形的扫描转换与区域填充
- 多边形的扫描转换与区域填充
- Python使用matplotlib填充图形指定区域
- [Win32]画笔和规则区域填充
- “与图形结构无关”的矢量绘图算法
- 奇偶规则和非零缠绕规则
- 矢量图形和矢量图形创建软件的修改
- 矢量图形的一些资料
- WINDING方式不能填充所有内部区域的图形的例子
- 多边形的扫描转换与区域填充算法
- canvas封闭图形填充与
- 圆形区域的半透明填充
- c#使用Region对图形区域构造和填充
- 学习 图形着色器-理论与实践 graphic shaders - glman
- PowerDesigner name和code取消同步
- 关于epoll
- 计时器
- log4j的配置文件介绍(一)
- gcc 使用中常用的参数及命令
- Graphic 矢量图形的区域填充与缠绕规则
- arm的堆栈结构
- Understanding SCSI Sense
- 让VS2010支持Windows2000
- maven deploy到nexus报错:Return code is: 401, ReasonPhrase:Unauthorized
- 给超链接(a标签)加onclick事件
- centos中g++编译c++II标准的程序
- JS 函数中的arguments,call,apply
- 慎用ArrayList的contains方法,使用HashSet的contains方法代替