まとめ
- 「選択している〇〇」はたいてい、ゼロ始まりの配列。
- 「全ての〇〇」はたいてい、1始まりの配列風オブジェクト。
- どちらも読み込み専用なので、JavaScriptの配列メソッドを使って入れ替えなどはできない。あくまで「この要素を変数に入れて使います」というような指定に使う。
使いどころ
AEスクリプトにはゼロ始まりの配列の他、1始まりのものもあって、書いている最中に「あれ、どっちだっけな」となることは多いです。そんなときにお使いください。
配列
JavaScriptに準拠しているいわゆる配列。インデックスはゼロ始まり。
- 各要素の指定の仕方は〇〇[index]。
- 「選択している~」はたいていこれに含まれる。
■selection:プロジェクトパネル内の選択アイテム群。
上から順で各アイテムが入っている。
var mSel = app.project.selection;
for (var i = 0; i < mSel.length; i++) {
mSel[i].name = "item" + i;
}
■selectedLayers:コンポ内の選択レイヤー群。
選択順で各レイヤーが入っている。
var mAi = app.project.activeItem;
var mSls = mAi.selectedLayers;
for (var i = 0; i < mSls.length; i++) {
mSls[i].name = "layer" + i;
}
■selectedProperties:コンポ内、あるいはレイヤー内の選択プロパティ群。
上から順で各プロパティが入っている。
var mAi = app.project.activeItem;
var mSls = mAi.selectedLayers;
var mSl = mSls[0];
var mSps = mSl.selectedProperties;
for (var i = 0; i < mSps.length; i++) {
mSps[i].name = "property" + i;
}
レイヤー.selectedPropertiesだと特定レイヤー内の選択プロパティ群。
コンポ.selectedPropertiesだとコンポ内のレイヤーをまたいだ選択プロパティ群。
後者の場合、入っているプロパティ順は選択レイヤー順かつプロパティは上から順となる。
selectedPropertiesの要素となっているプロパティを複製、移動、削除すると、selectedPropertiesやその要素を入れた変数はリンクが外れます。つまりその変数からはプロパティ操作ができなくなります。なので、これらの処理はスクリプトの一番最後に、インデックスなどを駆使して慎重に行ったほうがよいです。
*リンクが外れる範囲はレイヤー内プロパティなので、別レイヤーの『レイヤー.selectedProperties』や、『コンポ.selectedProperties』の要素の中で別レイヤーのプロパティを指しているものはリンクが保たれます。
Collection object
AE独自の配列風オブジェクト。インデックスは1始まり。
- 各要素の指定の仕方は配列風に〇〇[index]。あるいはメソッドで〇〇の最後のs抜き(index)。
- 総数を表すnum〇〇は〇〇.lengthと数が一緒。
- 「全ての~」はたいていこれに含まれる。
■items:プロジェクトパネル内の全アイテム。
要素指定:items[index] あるいは item(index)。
総数:items.length あるいは numItems。
var mItms = app.project.items;
for (var i = 1; i <= mItms.length; i++) {
mItms[i].name = "item" + i;
}
『app.project.items』は、サブフォルダやサブフォルダ内アイテムも含む、全アイテム。
『app.project.フォルダアイテム.items』は特定フォルダ内の全アイテム。サブフォルダは含むが、サブフォルダ内のアイテムは含まない。
■layers:コンポ内の全レイヤー。
要素指定:layers[index] あるいは layer(index)。
総数:layers.length あるいは numLayers。
var mAi = app.project.activeItem;
var mLyrs = mAi.layers;
for (var i = 1; i <= mLyrs.length; i++) {
mLyrs[i].name = "layer" + i;
}
■プロパティズは無い:コンポ内、あるいはレイヤー内、プロパティグループ内の全プロパティを指定するCollection objectは無い。なので、プロパティについては以下のものを使って指定する。
要素指定:property(index)。
総数:numProperties。
var mAi = app.project.activeItem;
var mSls = mAi.selectedLayers;
var mSl = mSls[0];
var mEft = mSl.effect;
for (var i = 1; i <= mEft.numProperties; i++) {
mEft.property(i).name = "property" + i;
}
おまけ:activeItem
app.project.activeItem:たいてい、アクティブタイムラインコンポを指定するときに使う。
たいていのAEスクリプトはアクティブタイムラインコンポを使うため、activeItemを記述する機会はかなり多い。
activeItemはタイムラインパネルがフォーカスされていればアクティブタイムラインコンポを表す。プロジェクトパネルがフォーカスされていればパネル内で選択されている『1つ』のアイテムを表す。
後者の場合つまり、コンポでなくとも何か1つプロジェクトパネルで選択していればそれを指す。プロジェクトパネル内で何かが複数選ばれていれば『無し』とみなし、nullが返ってくる。