路径填充规则
Quartz在填充区域时有两套规则:非零缠绕数规则(nonzero windingnumber rule)
和偶数-奇数规则(Even-odd)
。
-
非零缠绕数规则:为了确定一个点是否需要绘制,我们从该点开始绘制一条直线穿过绘图的边界。从0开始计数,每次路径片断从左到右穿过直线时,计数加1;而从右到左穿过直线时,计数减1。如果结果为0,则不绘制该点,否则绘制。注意这种规则下,路径片断绘制的方向会影响到结果。
-
偶数-奇数规则:为了确定一个点是否被绘制,我们从该点开始绘制一条直线穿过绘图的边界。计算穿过该直线的路径片断的数目。如果是奇数,则绘制该点,如果是偶数,则不绘制该点。这种情况下,路径片断绘制的方向不影响结果。
官方文档给出了下图来演示两种规则的效果。
不过今天测试了一下,发现与文档有出入,可能是理解不对。绘制代码如下图所示,
测试代码如下图所示,
绘制结果如下图所示。
填充规则除了这两种,还有Positive
和Negative
,有兴趣的可以研究一下。
参考