シェイプレイヤーを作る

空のシェイプレイヤーを作成する

var comp = app.project.activeItem;

var myShapeLayer = comp.layers.addShape();

これで何も無いシェイプレイヤーができる。

この段階ではまだmyShapeLayerはただのレイヤーなのでシェイプのプロパティを指定しなければならない。

シェイププロパティのルートは[ADBE Root Vectors Group]と呼ばれるものなのでまずはこれを指定

var shapeProperty = myShapeLayer.property('ADBE Root Vectors Group');

このままでは空のコンテンツの状態なのでここに長方形パスや、パス、塗りなどの属性を追加していく

パスを追加する場合

var myShapePath = shapeProperty.addProperty('ADBE Vector Shape - Group')

これでコンテンツ直下にパスの属性が追加される

このパスにパスポイントを追加するにはnew Shape()したオブジェクトを渡す。

まずnew Shape()してShapeオブジェクトを作る

var myShape = new Shape()

ポイントは配列で作成。ただしポイント数分のxy座標なので2次元配列

配列はShapeオブジェクトのverticesプロパティに作る

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

myShape.closed = true; //パスを閉じるかどうか

このShapeオブジェクトをシェイプレイヤーのパスにsetValue()する

その前にaddProperty('ADBE Vector Shape - Group')としてパスの属性をつけると

配下に

1:[ADBE Vector Shape Direction]

2:[ADBE Vector Shape]

というプロパティができる。

先のShapeオブジェクトをsetValue()するのは[ADBE Vector Shape]なので

myShapePath(2).setValue(myShape)

ということになる

これでパスが描画されたと思いきや、原点がどうやらレイヤー(コンポ?)の中心のようなので、verticesの値を付ける時は注意。

グループを追加した場合にも同じように

addProperty('ADBE Vector Group')をした時点で

[ADBE Vector Blend Mode]

[ADBE Vectors Group]

[ADBE Vector Transform Group]

が追加されているのでパスなどの属性は2番目の[ADBE Vectors Group]にaddする。

これもaddするプロパティの番号が2で決まっているので

var myGroup= shapeProperty.addProperty('ADBE Vector Group')

myGroup(2).addProperty('ADBE Vector Shape - Group')

などとする

具体的に、長方形ツールからドラッグしてcyシェイプを作った場合、以下のような構造になっている

グループが最初から付いている状態になっている

数字が付いてるのは固定されたプロパティ番号

1:[ADBE Root Vectors Group] //コンテンツ

    ├ [ADBE Vector Group] //長方形(という名前のグループ)

    |    ├ 1:[ADBE Vector Blend Mode] //横の描画モード

    |    ├ 2:[ADBE Vectors Group] //不可視グループ

    |    |        [ADBE Vector Shape - Rect] //長方形パス 1

    |    |          ├ 1:[ADBE Vector Shape Direction] //横のパスの方向ボタン

    |    |          ├ 2:[ADBE Vector Rect Size] //サイズ

    |    |          ├ 3:[ADBE Vector Rect Position] //位置

    |    |          └  4:[ADBE Vector Rect Roundness] //角丸の半径

    |    └ 3:[ADBE Vector Transform Group] //トランスフォーム:長方形 1

コンテンツに描画モードを追加したい場合などにはグループを作る必要があるので注意

まとめ

var comp = app.project.activeItem;

var myShapeLayer = comp.layers.addShape();

var shapeProperty = myShapeLayer.property('ADBE Root Vectors Group');

var myShapePath = shapeProperty.addProperty('ADBE Vector Shape - Group');

var myShape = new Shape()

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

myShape.closed = true; //パスを閉じるかどうか

myShapePath(2).setValue(myShape);

追加出来る属性

[ADBE Vector Group] //空のグループ

------------------------------------------------

[ADBE Vector Shape - Rect] //長方形

[ADBE Vector Shape - Ellipse] //楕円形

[ADBE Vector Shape - Star] //多角形

[ADBE Vector Shape - Group] //パス

------------------------------------------------

[ADBE Vector Graphic - Fill] //塗り

[ADBE Vector Graphic - Stroke] //線

[ADBE Vector Graphic - G-Fill] //グラデーションの塗り

[ADBE Vector Graphic - G-Stroke] //グラデーションの線

------------------------------------------------

[ADBE Vector Filter - Merge] //パスを結合

[ADBE Vector Filter - Offset] //パスのオフセット

[ADBE Vector Filter - PB] //パンク・膨張

[ADBE Vector Filter - Repeater] //リピーター

[ADBE Vector Filter - RC] //角を丸くする

[ADBE Vector Filter - Trim] //パスのトリミング

[ADBE Vector Filter - Twist] //旋回

[ADBE Vector Filter - Roughen] //パスのウィグル

[ADBE Vector Filter - Wiggler] //トランスフォームのウィグル

[ADBE Vector Filter - Zigzag] //ジグザグ