UIBezierPathusesEvenOddFillRule
のプロパティがどのように機能し、どこで使用できるかを説明できる人はいますか?
反対票が投じられる可能性があることはわかっていますが、Apple のドキュメントでは説明がわかりませんでした。
UIBezierPathusesEvenOddFillRule
のプロパティがどのように機能し、どこで使用できるかを説明できる人はいますか?
反対票が投じられる可能性があることはわかっていますが、Apple のドキュメントでは説明がわかりませんでした。
偶奇塗りつぶしルールは、パスのどの領域がパスの「内側」であるかパスの「外側」であるかを判断する 1 つの方法です。これは、パスの内部を塗りつぶすときに知っておくことが重要です。それらは通常、パス自体に穴が開いている場合にのみ異なります。通常、偶奇ルールはこれらの領域をシェーディングしませんが、他のオプションは通常シェーディングします。
偶奇規則は単純に次のとおりです。
パスを含むキャンバスを一直線に横切って進みながら、パスを横切った回数を数えます。奇数回横断した場合は、パスの「内側」にいます。偶数回横断した場合は、パスの外にあります。
したがって、パスがブルズアイ形状の 2 つの同心円で構成されている場合、偶奇規則では、2 つの円の間の領域が「内側」であり、中央の領域が「外側」であると見なされます。
もう 1 つのオプションは、非ゼロ ワインディング ルールと呼ばれます。(これは の場合に使用されusesEvenOddFillRule
ますNO
)。ゼロ以外の場合も、パスを横切る直線を考慮しますが、交差点のカウントは少し異なります。パスが描かれた方向が考慮されます (つまり、反時計回りの円は時計回りの円と同じではありません)。したがって、次のようになります。
パスを含むキャンバスを直線で横切って進むとき、0 から始まるカウンターを保持します。パスが左から右に進むパスの一部を横切るたびに (パスを横切る線から観察されるように) )、カウンターに1を追加します。パスが右から左に進む線を横切るたびに、カウンターから 1 を引きます。カウンターがゼロ以外の場合は、パス内にあります。そうでなければ、あなたは外にいます。
したがって、同じ同心円の例で、両方の円が同じ方向に描かれた場合、中心円の内側と外側の両方の領域全体がパスの「内側」と見なされます。円が反対方向に描かれた場合、偶奇規則のように、中央領域はパスの「外側」と見なされます。
ここでは、コンピュータ グラフィックスの塗りつぶし規則について適切に説明しています。(これは .NET リファレンスにありますが、まったく同じ原則が Quartz にも当てはまります。)
http://msdn.microsoft.com/en-us/library/system.windows.media.fillrule.aspx
要するに、偶奇塗りつぶしルールは、すべてのエッジが出力グラフィックスに表示されることを意味します (その結果、「穴」を持つ単一の塗りつぶされたパスになる可能性があります)。一方、ゼロ以外の塗りつぶしルールは、ほとんどの場合、つまり、自己交差が含まれていても、描画された形状はほとんどソリッドです。
簡単な例を以下に示します。左の画像は偶奇の塗りつぶし規則を使用しており、右の画像はゼロ以外の塗りつぶし規則を使用しています。