例文03

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

レイヤーはアクティブになっているコンポジションに作成されます。マスクシェイプはコンポジションよりも100ピクセル内側の矩形とします。

例文

var myActiveItem = app.project.activeItem;

var mySolidCol = [0.75, 0, 0];

var mySolidName = 'Mask layer';

var myShape = new Shape();

var mergin = 100;

if(myActiveItem !==null && myActiveItem instanceof CompItem){

// シェイプの形状を設定します。

// ちょっとわかりずらいですが、コンポジションのサイズからマージンを引いて頂点の位置を設定しています。

myShape.vertices = [[mergin, mergin],

[(myActiveItem.width - mergin ), mergin],

[(myActiveItem.width - mergin ),(myActiveItem.height - mergin)],

[mergin, (myActiveItem.height - mergin )]];

//新規に平面レイヤーを作成します。

var mySolid = myActiveItem.layers.addSolid( mySolidCol,

mySolidName,

myActiveItem.width,

myActiveItem.height,

myActiveItem.pixelAspect );

//平面レイヤーのマスクプロパティに新しいシェイプグループを作成します。

var myShapeGroup = mySolid.mask.addProperty('ADBE Mask Atom');

myShapeGroup.name = 'Mask mergin'; //マスクシェイプの名前

//マスクシェイプを設定

myShapeGroup.maskShape.setValue(myShape);

//マスクの境界を25ピクセル(プロパティ)

myShapeGroup.property('ADBE Mask Offset').setValue(25);

//マスクを反転する(アトリビュート)

myShapeGroup.inverted = true;

}

解説

マスクシェイプを新規に作成するのも少し手順がややこしく、理解しにくくなっています。この例ではPropertyBase objectMaskPropertyGroup objectShape objectのそれぞれの役割に注目してサンプルを作成してみました。

マスクシェイプの形状は、冒頭のShape objectに格納します。この例では直線だけの矩形なのでverticesの設定のみです。

var myShape = new Shape();

myShape.vertices = [[mergin, mergin],

[(myActiveItem.width - mergin ), mergin],

[(myActiveItem.width - mergin ),(myActiveItem.height - mergin)],

[mergin, (myActiveItem.height - mergin )]];

これ自体はマスクの形状の情報だけですので、新規平面にマスクを追加して、そのマスクシェイププロパティとして設定する必要があります。

マスクがまったくない状態からマスクシェイプを作成するには、まず平面のLayer objectのマスクプロパティにMaskPropertyGroup objectaddProperty()で追加しないといけません。

var myShapeGroup = mySolid.mask.addProperty('ADBE Mask Atom');

ここのmaskShapeプロパティに、先に設定したShape objectをsetValue()で設定することで、やっとマスクシェイプが描かれます。

myShapeGroup.maskShape.setValue(myShape);

myShapeGroupはMaskPropertyGroup objectなのですが、マスクの境界のぼかしや拡張などは、これの子オブジェクトの

PropertyGroup objectから設定するのですが、マスクの反転などはアトリビュートで設定するという点に注意してください。この辺が混乱しがちです。

//マスクの境界を25ピクセル(プロパティ)

myShapeGroup.property('ADBE Mask Offset').setValue(25);

//マスクを反転する(アトリビュート)

myShapeGroup.inverted = true;