Skip to main content
Inspiring
September 30, 2023
Answered

【Javascript】レイヤーパネルの「新規サブレイヤーに集める」をスクリプトで出来ないか

  • September 30, 2023
  • 1 reply
  • 436 views

お世話になります。

 

今までレイヤーパネルでレイヤーを選択して「新規サブレイヤーに集める」でやっていたことなのですが、かなり多用することに気づいたのでスクリプトでやりたいと思いました。

 

複数のレイヤーがある状態から、一番上のレイヤー以外を一つのレイヤーにサブレイヤーとして集めるということをしたいです。

 

var Doc = app.activeDocument;//アクティブドキュメント
var dmLayer = Doc.layers[0];//一番上のレイヤー

var newLayer = Doc.layers.add(); //新規レイヤー作成
newLayer.name = 'ここに集める'; //新規レイヤーの名前変更
newLayer.move(dmLayer, ElementPlacement.PLACEAFTER); //新規のレイヤーを一番上のレイヤーの下に移動

for (var i = Doc.layers.length - 1; i >= 0; i--) { //とりあえず移動してみた
    var currentLayer = Doc.layers[i];
    if (currentLayer !== dmLayer && currentLayer !== newLayer) {
        currentLayer.move(newLayer, ElementPlacement.PLACEATEND);
    }
}

 

これ以外の方法が分からなくてとりあえず移動してみましたが、これだと元々のレイヤーの順序が反転されてしまいます。

レイヤーの順番は元のデータのままで移動するにはどうしたらよいでしょうか?

 

レイヤーの移動じゃなくても、もっと簡単にスクリプトで実現できる方法があれば教えていただきたいです。

 

This topic has been closed for replies.
Correct answer nekkoneko

めっちゃアホでした。

currentLayer.move(newLayer, ElementPlacement.PLACEATEND);

ここを

currentLayer.move(newLayer, ElementPlacement.PLACEATBEGINNING);

 こう変えたら元のレイヤーの重なり順はそのままで移動できました。

 

自己解決はしましたが、他にも方法があれば教えてもらえると嬉しいです。

1 reply

nekkonekoAuthorCorrect answer
Inspiring
September 30, 2023

めっちゃアホでした。

currentLayer.move(newLayer, ElementPlacement.PLACEATEND);

ここを

currentLayer.move(newLayer, ElementPlacement.PLACEATBEGINNING);

 こう変えたら元のレイヤーの重なり順はそのままで移動できました。

 

自己解決はしましたが、他にも方法があれば教えてもらえると嬉しいです。