windingプロパティ

|
(section09-03 Flash Player 10の新しいGraphicsメソッドから抜粋)

 drawPath()の第3引数で設定するwindingプロパティは図形のパスが交差してできる領域を塗るかどうかの湾曲規則を指定します。初期値では"evenOdd"になっていて、重なりが奇数回の場合に塗ります。
 次の例ではdata1、data2、data3と3つの図形が重なったパスを使って図形を描いています。このとき、2度重なっている部分は色が塗られず、3回重なっている部分は色が塗られているのがわかります。
fig09-03-03.jpg
[:script:]重なりがある図形をwindingプロパティを"evenOdd"で塗る
var w:int=120;
var h:int=150;
var data1:Array=[0,0, w,0, w,h, 0,h, 0,0];
var data2:Array=[25,25, w+25,25, w+25,h+25, 25,h+25, 25,25];
var data3:Array=[50,50, w+50,50, w+50,h+50, 50,h+50, 50,50];
var datalist:Array=data1.concat(data2,data3);
var commands:Vector.<int>=Vector.<int>([1,2,3,2, 1,2,3,2, 1,2,2,2,2]);
var data:Vector.<Number>=Vector.<Number>(datalist);
//描画の交差領域の塗りの処理法
var winding:String=GraphicsPathWinding.EVEN_ODD;
//図形を描く
var shape:Shape=new Shape();
shape.graphics.beginFill(0xFF0000);
shape.graphics.drawPath(commands, data, winding)
shape.graphics.endFill();
shape.x=200;
shape.y=150;
addChild(shape);

 windingプロパティのもう一方の値は"nonZero"です。この値はGraphicsPathWinding.NON_ZEROとして定数が定義してあります。windingプロパティを"nonZero"に設定すると湾曲タイプ(点を順に線で結ぶ方向)が時計回りか反時計回りかで図形を区別します。時計回りの値を+1、反時計回りの値を-1とし、重なっている領域はこの値を合計します。そして、値の合計が0の領域は塗らず、0以外の領域は塗ります。
 次の例ではすべてがdata1、data2、data3の全部が時計回りで+1なので、重なっている領域で合計が0になるところはありません。したがって、すべての領域が塗られます。
fig09-03-04.jpg
[:script:]重なりがある図形をwindingプロパティを"nonZero"で塗る
var w:int=120;
var h:int=150;
var data1:Array=[0,0, w,0, w,h, 0,h, 0,0];//時計回り+1
var data2:Array=[25,25, w+25,25, w+25,h+25, 25,h+25, 25,25];//時計回り+1
var data3:Array=[50,50, w+50,50, w+50,h+50, 50,h+50, 50,50];//時計回り+1
var datalist:Array=data1.concat(data2,data3);
var commands:Vector.<int>=Vector.<int>([1,2,3,2, 1,2,3,2, 1,2,2,2,2]);
var data:Vector.<Number>=Vector.<Number>(datalist);
//描画の交差領域の塗りの処理法
var winding:String=GraphicsPathWinding.NON_ZERO;
//図形を描く
var shape:Shape=new Shape();
shape.graphics.beginFill(0xFF0000);
shape.graphics.drawPath(commands, data, winding)
shape.graphics.endFill();
shape.x=200;
shape.y=150;
addChild(shape);
 ここで次のようにdata3の座標を並べ替えて図形が反時計回りで描かれるようにすると、data3の値は-1になります。したがって、「data1+data2」は+2、「data1+data2+data3」は+1、「data1+data3」は0、「data2+data3」は0になります。つまり、data1とdata3が重なっている領域、そしてdata2とdata3が重なっている領域は色が塗られません。
[:script:]四角形が反時計回りに描かれるようにdata3の値を並べ替える
var data3:Array=[50,50, 50,h+50, w+50, h+50,w+50,50, 50,50];//反時計回り-1
fig09-03-05.jpg
まったく新しいAS3の世界!
694a.jpg
Adobe Flash CS4
詳細!ActionScript3.0入門ノート[完全改訂版](CD-ROM付)

楽しいActionScript。
新たなる1歩へと踏み出しましょう。
■内容は?→ 目次を見る
■評判は?→ 書評を読む
この本を書いたわけ

このブログ記事について

このページは、oshigeが2009年7月28日 10:18に書いたブログ記事です。

ひとつ前のブログ記事は「drawPath()を使って渦巻きを描く」です。

次のブログ記事は「これを読め!!」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

あわせて読みたいブログパーツ