ワインディング規則の定義

Flash Player 10 および Adobe AIR 1.5 では、パスの「ワインディング」の概念も導入されました。これは、パスの方向を表します。パスのワインディングは、正(時計回り)または負(反時計回り)のいずれかです。data パラメータに対してベクターで提供される座標をレンダラーが解釈する順序により、ワインディングが決まります。

正のワインディングと負のワインディング
正のワインディングと負のワインディング

A.
矢印は描画の方向を示す。

B.
正のワインディング(時計回り)

C.
負のワインディング(反時計回り)

さらに、Graphics.drawPath() メソッドには「winding」という第 3 のオプションのパラメータがあります。

drawPath(commands:Vector.<int>, data:Vector.<Number>, winding:String = "evenOdd"):void

このコンテキストでは、3 番目のパラメータは交差するパスのワインディングつまり塗り規則を指定する文字列または定数です。定数値は、GraphicsPathWinding クラスで GraphicsPathWinding.EVEN_ODD または GraphicsPathWinding.NON_ZERO として定義されています。ワインディング規則は、パスが交差するときに重要です。

偶奇規則は、標準的なワインディング規則であり、以前の描画 API で使用されていた規則です。偶奇規則は、Graphics.drawPath() メソッドのデフォルトの規則でもあります。偶奇規則では、交差するすべてのパスは開いた塗りと閉じた塗りが交互になります。同じ塗りの交差を使用して 2 つの四角形を描画した場合、交差が発生している領域は塗りつぶされます。一般に、隣接する領域が、両方とも塗られること、または両方とも塗られないことはありません。

一方、非ゼロ規則は、ワインディング(描画方向)に基づいて、交差するパスによって定義されている領域を塗るかどうかを決定します。ワインディングが反対のパスが交差すると、定義される領域は塗られません。これは偶奇規則と同じです。ワインディングが同じパスの場合は、偶奇規則では塗られなかった領域が塗られます。

交差する領域のワインディング規則
交差する領域のワインディング規則

A.
偶奇ワインディング規則

B.
非ゼロワインディング規則