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

例文02

選択しているレイヤーそれぞれのひとつ上の階層にヌルレイヤーを追加する


例文



//変数宣言&初期化
//(コード内に散在させてもいいのですが、個人的には各変数スコープの最初で宣言するようにしています)
//例文ではすべてグローバルスコープになっています。

//現在アクティブになっているコンポジションを取得。何もアクティブでない場合はnullが取得されます。

var activeComp= app.project.activeItem;
var newLayers = new Array();
var selectedLayers= new Array();
var tempLength, i, j;


//まず処理を加える前にactiveItem(アクティブになっているコンポジションの値)がnullでないことを確認します。
//同時にそのアイテムがCompItemであることを確認します。
//2つの条件が揃わない場合は、最後のアラートを表示してスクリプトは終了します。

if(activeComp&&(activeComp instanceof CompItem)){

    //アクティブなコンポジションで選択されているレイヤーの数を取得します。

    tempLength = activeComp.selectedLayers.length;


        //選択されているレイヤーの数が1以上の場合そのレイヤーの上にNullを追加します。

        if(tempLength > 0){

            //選択されているレイヤーを別の配列に一時的に格納します。

            for(i=0; i < tempLength; i++){
                        selectedLayers[i] = activeComp.selectedLayers[i];
                    }


            //addNull()を実行してからmoveBefore()を用いて選択レイヤーの上に移動させます。

            for (j=0; j < tempLength; j++) {
                        newLayers[j] = activeComp.layers.addNull();
                        newLayers[j].moveBefore(selectedLayers[j]);
            }


        } else {

            //レイヤーが選択されていない場合アラートを出すようにしています。

            alert('レイヤーが選択されていません'); 
        }

} else {

    //アクティブになっているアイテムが存在しない、あるいはアイテムがコンポジションでない場合はアラート表示

    alert('現在アクティブになっているコンポジションがありません');
}



解説


単純なことに思えるのですが、意外と「選択しているレイヤーに対して何かする」や「指定した場所にレイヤーを追加する」という処理は、手順を踏まないといけないので初心者が混乱しやすいと思います。

まず選択レイヤーを取得するには、そのレイヤーを含むコンポジションを指定する必要があります。この時に使用するのはactiveItemで、activeItemは必ずしもCompItem objectとは限りませんので注意してください。

//まず処理を加える前にactiveItem(アクティブになっているコンポジションの値)がnullでないことを確認します。
//同時にそのアイテムがCompItemであることを確認します。
//2つの条件が揃わない場合は、最後のアラートを表示してスクリプトは終了します。

if(activeComp&&(activeComp instanceof CompItem)){

activeItemがCompItemであった場合は選択しているレイヤーが1つ以上あるかを確認します。

activeItem(CompItem)のselectedLayersの配列の長さ(数)を取得してから、それが1以上であれば選択しているレイヤーが存在しているという方法で確認します。

tempLength = activeComp.selectedLayers.length;

条件をクリアしたら、選択しているレイヤーを総あたりで別の配列に格納します。これはヌルレイヤーを追加した際にselectedLayerに変化が生じるため、当初選択していた個々のLayer objectを後から特定するためです。

if(tempLength > 0){

//選択されているレイヤーを別の配列に一時的に格納します。

for(i=0; i < tempLength; i++){
selectedLayers[i] = activeComp.selectedLayers[i];
}

このあと、addNull()でレイヤー1つに対して1つのヌルレイヤーを追加します。追加されたヌルはそのままだとレイヤーの再前面に配置されますので、配列に格納したLayer Objectの1つ上にmoveBefore()で移動しています。

            //addNull()を実行してからmoveBefore()を用いて選択レイヤーの上に移動させます。

            for (j=0; j < tempLength; j++) {
                        newLayers[j] = activeComp.layers.addNull();
                        newLayers[j].moveBefore(selectedLayers[j]);
            }

Comments