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