Shape object

記述

app.project.item(index).layer(index).property(index).property("maskShape").value

概要

Shape objectはシェイプレイヤーでシェイプを描画したりマスクのアウトラインシェイプを作成する際に必要な情報をカプセル化しています。AEプロパティの「マスクパス」およびシェイプレイヤーのAEプロパティ「パス」が該当します。

コンストラタnew Shape()を使用して新規に空のシェイプオブジェクトを作成し、シェイプを定義するための各アトリビュートを設定可能です。

var myShape = new Shape()

シェイプはアンカーポイントのセットまたは頂点(vertices)、1組の方向ハンドルあるいは接線ベクトルをアンカーポイント毎に持っています。接線ベクトルは(ロトマスクでない場合)は、アンカーポイントから引かれる線の方向を定義します。1つのイン側の接線ベクトル(inTangents)と1つのアウト側の接線(outTangents)ベクトルがシェイプの各頂点に結びつけられています。

接線の値は、頂点(アンカーポイント)からの相対的な位置を示す1組のx,y座標です。例えば[-1, -1]の接線は、頂点がどの場所に存在しているかに関わらず、頂点の左上方45度に位置しています。

長い接線ハンドルほど大きな影響を与えます。例えばシェイプのイン側のセグメントは、同じ方向から頂点(アンカーポイント)に向かっている場合でも、inTangentsが[-2, -2]の場合の方が[-1,-1]の場合よりも接線ベクトルに近づきます。

シェイプが閉じられていない場合、最初の頂点の inTangentsと最後の頂点の outTangentsは無視されます。シェイプが閉じられている場合、これら2つのベクトルが最後の頂点から最初の頂点を結ぶセグメントの接線ハンドルとなります。

ロトベジェ(rotoBezier)マスクは接線を自動計算します。もしシェイプがロトベジェを使用している場合、接線の値は無視されます。つまり、ロトベジェマスクでは頂点(vertices attribute)の値だけでシェイプを描画することができ、inTangentsoutTangents の値は null となります。新しいシェイプにアクセスする場合は、接線の値(inTangentsoutTangents)は自動的に計算された値が入れられています。

閉じられたマスクシェイプでは、変更可能な幅のフェザーポイントがマスクパスに沿って存在します。フェザーポイントはマスクパスのプロパティの一部です。フェザーポイントが出現したマスクパスのセグメント(隣接する頂点間の線の経路の部分)の番号で、指定したフェザーポイントを参照します。

注意: マスク上のフェザーポイントは、作成された順にが配列の中にリストされます。

注意: このリファレンスでは「フェザーポイント」と表記していますが、After Effectsの日本語ヘルプでは「ぼかしポイント」となっています。マスクには従来の境界のぼかしもあったりして紛らわしいので、フェザーポイントとして適宜注釈を入れています。

サンプル

四角形のマスクを作成

4つの頂点を指定して閉じられた四角形を作成します。inTangentsとoutTangentsは特に指定せずにデフォルト値の0になり、直線で結ばれます。

var myShape = new Shape();

myShape.vertices = [[0,0], [0,100], [100,100], [100,0]];

myShape.closed = true;

U字型のマスクを作成

上の例で使用したのと同じポイントを使用して開かれた「U」字型(1辺が開かれた四角形)のシェイプを作成。

var myShape = new Shape();

myShape.vertices = [[0,0], [0,100], [100,100], [100,0]];

myShape.closed = false;

楕円形を作成

楕円形は4つの頂点とinTangent, outTangentを使用した閉じたシェイプ。

var myShape = new Shape();

myShape.vertices = [[300,50],[200,150],[300,250],[400,150]];

myShape.inTangents = [[55.23,0],[0,-55.23],[-55.23,0],[0,55.23]];

myShape.outTangents = [[-55.23,0],[0,55.23],[55.23,0],[0,-55.23]];

myShape.closed = true;

2つのフェザーポイントを持った四角形のマスク

大きな四角形のマスクと2つのフェザーポイントを作成。フェザーポイントのうちの1つは2番目のセグメントの左端(下のエッジから離れて)近くに30ピクセルの半径で、もう1つは3番目のセグメントの中央(右のエッジから離れて)に100ピクセルの半径で作成。

var myShape = new Shape();

// segments drawn counterclockwise

myShape.vertices = [[100,100], [100,400], [400,400], [400,100]];

myShape.closed = true;

// segments are numbered starting at 0, so second segment is 1

myShape.featherSegLocs = [1,2];

// 0.15 is closer to the lower-left corner of the square

myShape.featherRelSegLocs = [0.15, 0.5];

// second feather point (on right-side segment) has a larger radius

myShape.featherRadii = [30, 100];

ノート

アトリビュートに直接値を代入しても変更はできません。

var myShape = app.project.item(1).layer(1).mask(1).property("maskShape").value

// 結果は反映されない

myShape.vertices = [[0,0], [0,100], [100,100], [100,0]];

myShape.closed = false;

setValue(), setValueAtTime()などを用いて設定します。

var myShape = new Shape();

myShape.vertices = [[0,0], [0,100], [100,100], [100,0]];

myShape.closed = false;

var myMask = app.project.item(1).layer(1).mask(1).property("maskShape");

myMask.setValue(myShape);

レイヤーにマスクが存在していない状態で新規にマスクを作成したい場合は、事前にaddProperty()でマスクプロパティを作成しておく必要があります。

app.project.item(1).layer(1).property('ADBE Mask Parade').addProperty('ADBE Mask Atom');

例文集リンク

新規の平面レイヤーを作成し、そのレイヤーに新規にマスクシェイプを設定する