【JSX】レイヤーセット内を含むすべてのレイヤーを取得する

 レイヤーセット内を含むすべてのレイヤーを取得してみました。
 layersオブジェクトからレイヤーの一覧を取得するとレイヤーセット内のレイヤーまでは取得できないので、レイヤーセット内も含めすべて検索する関数を作りました

コード

// 全てのレイヤーを取得
// resultList = 結果を返すための空の配列
// layers = 検索元のレイヤー(主に「app.activeDocument.layers」)
// conditionsName = 検索条件の名前。条件をつけない場合は""
// conditionsLayerSet = レイヤーセットを含む場合はtrue
function GetLayers(resultList,layers,conditionsName,conditionsLayerSet){
	for( var i = 0 ; i &lt layers.length ; i ++ ){
		if( layers[i].name.indexOf(conditionsName) != -1){
			if( conditionsLayerSet == true){
				resultList.push(layers[i]);
			}else{
				if(layers[i].typename != "LayerSet" ){
					resultList.push(layers[i]);
				}
			}
		}
		if( layers[i].typename == "LayerSet" ){
			GetLayers(resultList,layers[i].layers,conditionsName,conditionsLayerSet);
		}
	}
}
var resultList = new Array();
GetLayers( resultList, app.activeDocument.layers, ".png", true);

一応使い方

GetLayers( resultList, app.activeDocument.layers, ".png", true);

 あらかじめ結果を受け取る空の配列(resultList)を作って、それを渡しています。

 すべてのレイヤーの場合、基点は「app.activeDocument.layers」

 特定の文字列を含むレイヤーだけを取得したい場合用に検索用文字列も渡せるようにしてあります。(↑の場合は「.png」の文字列を含むレイヤーだけ取得しています。いらなければ””)

 最後の引数でレイヤーセット自身をリストに含むかどうかを指定。(どちらにせよレイヤーセットの中身は検索する)

 まあ帰ってきたリストからもレイヤーのタイプは判別できるので、後ろの二つは機能として入れる必要はなかったかも^^;

 ざっくりですがこんな感じで。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です