例文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 objectとMaskPropertyGroup objectとShape 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 objectをaddProperty()で追加しないといけません。
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;