例文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);

この例ではわかりやすく名称を取得するに留めていますが、使用しているレイヤーすべてに対して何か処理を加えたい場合に応用が可能です。