Home‎ > ‎例文と解説‎ > ‎

Example 4

コンポジション内に含まれるすべてのレイヤーの名前を取得する


今回は再帰処理を使ってコンポジション内にあるすべてのレイヤー(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);

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



Comments