Skip to main content
Inspiring
December 4, 2022
Answered

【JavaScript】グループ内も含めてレイヤーの一番上から順番にレイヤーを取得したい

  • December 4, 2022
  • 1 reply
  • 742 views

お世話になります。

 

レイヤーが何個も重なっていて、その中にはいくつかのレイヤーを含むグループ(レイヤーセット?)も含まれています。

 

上から順番にレイヤーを取得したくて、

var hoge = activeDocument.layers;

for(i=0;i<hoge.length;i++){
    alert(hoge[i]);
}

 

こうしてみましたが、グループになっているものまとめてレイヤーと認識してしまうんですね。

グループにはレイヤーマスクがかかっていたりするので、解除はしたくありません。

 

グループ解除はせずに、グループ内のレイヤーも上から順番に取得するにはどうしたら良いですか。

 

This topic has been closed for replies.
Correct answer nekkoneko
foo(app.activeDocument)

function foo(doc) {
    var layLength = doc.layers.length;

for (var i = 0; i < layLength; i++) {
       if(doc.layers[i].typename == 'ArtLayer'){
        layName = doc.layers[i].name;
        alert(layName);
       }else if (doc.layers[i].typename == 'LayerSet') {
            foo(doc.layers[i]);
        }
    }
};

 

なんかとりあえずできました。

間違えているところがあったら指摘してください。。

1 reply

nekkonekoAuthor
Inspiring
December 4, 2022
foo(app.activeDocument)

function foo(doc) {
    var layLength = doc.layers.length;

for (var i = 0; i < layLength; i++) {
        //処理内容
        layName = doc.layers[i].name;
        alert(layName);

var objType = doc.layers[i].typename;
        if (objType == 'LayerSet') {
            foo(doc.layers[i])
        }
    }
};

 

ネット上で探していたら見つかりましたが、

グループ自体のレイヤーは取得しなくていいということは可能でしょうか?

nekkonekoAuthorCorrect answer
Inspiring
December 4, 2022
foo(app.activeDocument)

function foo(doc) {
    var layLength = doc.layers.length;

for (var i = 0; i < layLength; i++) {
       if(doc.layers[i].typename == 'ArtLayer'){
        layName = doc.layers[i].name;
        alert(layName);
       }else if (doc.layers[i].typename == 'LayerSet') {
            foo(doc.layers[i]);
        }
    }
};

 

なんかとりあえずできました。

間違えているところがあったら指摘してください。。