コンポの名前を変える
例:フッテージウィンドウにあるコンポジションすべてをhoge+番号という名前に変える
var n = [];
var undoName = "コンポの一斉名前変更";
app.beginUndoGroup(undoName);
for(var i=1;i<=app.project.numItems;i++){
var item = app.project.item(i);
if(item instanceof CompItem){
n[n.length] = item;
}
}
for(i in n){
n[i].name = "hoge" + i;
}
app.endUndoGroup();
解説
var n = [];
配列を初期化するのはこれでOK
var n = new Array();
と同じ意味
var undoName = "コンポの一斉名前変更";
アンドゥなしで作ると、forの回数分アンドゥしなくてはならないので、まとめてアンドゥさせるようにしたほうがよい
アンドゥグループ作成にはアンドゥの名前がいるので先に設定する。そして
app.beginUndoGroup(undoName);
で開始
正しくはAfterEffectsの操作の部分のアンドゥ。この場合はn[i].name = "hoge" + i;部分。
最初のコンポを判別してるforはAfterEffectsの操作には関わっていないので、アンドゥ対象にはならない。
forループでフッテージアイテムすべてからコンポジションだけ探しだす
フッテージウィンドウのアイテムの数は1から始まるのでvar i=1とする。
繰り返す数はapp.project.numItems。この数まで数えるので、等号を含める。
for(var i=1;i<=app.project.numItems;i++)
コンポジションかどうかはinstanceof CompItemで判断できる
フッテージウィンドウで判断できるものはコンポ、フッテージ、フォルダの3種類。
n[n.length]はちょっと変わった式だが便利。配列の末尾にどんどん追加していく。
初期化した段階では配列に何も入っていないのでn.lengthは0。
なので最初の段階ではn[n.length]はn[0]と同じことになる。
n[0]に代入されるとnのlengthは1となり、次はn[1]となる。
この繰り返し。
pushメソッドもあるので、そちらを使うのもOK
n.push(item);
と同じ意味
2回目のfor~inは
for(var i=0;i<n.length;i++){
n[i].name = "hoge" + i;
}
のほうが安全かも
app.endUndoGroup();
で締める。このアンドゥグループで囲んだ部分が1回のアンドゥに相当するようになる
プロトタイプを先に作っておくと今後、より簡単に。
Project.prototype.comps = function(){
var n = [];
for(var i=1;i<=app.project.numItems;i++){
var item = app.project.item(i);
if(item instanceof CompItem){
n[n.length] = item;
}
}
return n;
}();
//上のプロタイプをスクリプトスタートアップに入れておくとapp.project.compsと書くだけでコンポが取り出せるようになる
var undoName = "コンポの一斉名前変更";
app.beginUndoGroup(undoName);
for(i in app.project.comps){
app.project.comps[i].name = "hoge" + i;
}
app.endUndoGroup();