例文04
コンポジション内に含まれるすべてのレイヤーの名前を取得する
今回は再帰処理を使ってコンポジション内にあるすべてのレイヤー(AVLayer object)の名称を取得します。レイヤーがコンポジションであった場合はその中のレイヤーも取得します。
例文
var myItem = app.project.activeItem;
var layerNames = [];
function getLayers(comp){
for(var i=1; i <= comp.layers.length; i++){
//レイヤー名を取得して配列に追加
layerNames.push(comp.layer(i).name);
//レイヤーがコンポジションだった場合は再度この関数を呼び出す
if(comp.layer(i).source instanceof CompItem){
getLayers(comp.layer(i).source);
}
}
return layerNames;
}
getLayers(myItem);
解説
今回は再帰処理を行うために、処理を関数にする必要があります。この関数内で各レイヤーの取得を行っています。
レイヤー名の取得は選択しているのは「レイヤーそれぞれのひとつ上の階層にヌルレイヤーを追加する」で解説したのと同じですので、そちらも併せて参照してください。
関数内では、各レイヤーの名称を取得していますが、もしレイヤーがCompItemだった場合は、再度関数に入れて名前を取得しています。
function getLayers(comp){
for(var i=1; i <= comp.layers.length; i++){
//レイヤー名を取得して配列に追加
layerNames.push(comp.layer(i).name);
//レイヤーがコンポジションだった場合は再度この関数を呼び出す
if(comp.layer(i).source instanceof CompItem){
getLayers(comp.layer(i).source);
}
}
return layerNames;
注意点はレイヤーがコンポジションだった場合はレイヤー(AVLayer object)でなく元のCompItemを関数の引数に渡すことです。そのためにsourceを参照してその元になったアイテム(Comp Item)を引数にしています。
getLayers(comp.layer(i).source);
この例ではわかりやすく名称を取得するに留めていますが、使用しているレイヤーすべてに対して何か処理を加えたい場合に応用が可能です。