解決済み
特定の名称が入ったレイヤーのみを表示して書き出すスクリプトをネスト少な目で作成したい
特定の名称が入ったレイヤーのみを表示して書き出すスクリプトを制作中なのですが、どうしてもループが2重、3重になってしまいます。
うまい解決方法はございますでしょうか?
レイヤーセットが「レイヤーセット→レイヤー」のように1層ならなんとか作れたのですが、「レイヤーセット→レイヤーセット→レイヤー」のように2層となると
可読性が著しく悪く素人目にもよくないものになってしまって……。
具体的には線画と影色を分けて書き出したいと考えております。
ご教示いただけると助かります。
【レイヤーセット1層の例】
レイヤーセット「人物」→レイヤー「影」
【レイヤーセット2層の例】
レイヤーセット「人物」→レイヤーセット「太郎くん」→レイヤー「影」
下記は1層の場合のコード例です。
//レイヤーセット名がキー、レイヤー名がバリューとなる連想配列を作成する
function get_asso_layersets_list(){
var layersets_list = [];
var tmp_list = [];
var associative_list = {};
var layer_name = "";
for(var i=0; i < document.layerSets.length; i++){
layersets_list.push(document.layerSets[i].name);
for(var j=0; j < document.layerSets[i].artLayers.length;j++){
layer_name = document.layerSets[i].artLayers[j].name;
tmp_list.push(layer_name);
}
associative_list[layersets_list[i]] = tmp_list;
tmp_list = [];
}
return associative_list;
}
//get_asso_layersets_listで取得した配列から「影」レイヤーを含まないレイヤーセットを削除する
function get_shadow_layersets_list(){
var asso_list = get_asso_layersets_list();
var layer_name = "";
for(key in asso_list){
layer_name = asso_list[key].toString();
if(layer_name.indexOf("影") == -1){
delete asso_list[key];
}
}
return asso_list;
}
//「影」レイヤーを書き出す
function save_shadow_files(){
var layerset_list = get_shadow_layersets_list();
var raw_filename = get_filename(); //psdファイル名を取得する関数
var l_file_name = get_layersets_filename_list(); // 影をshadowのようにファイル名用の名前に変える関数
var save_file_name = "";
//一回すべてのレイヤーを非表示にする
for(key in layerset_list){
document.layerSets[key].visible = false;
for(var i =0; i < layerset_list[key].length;i++){
document.layerSets[key].artLayers[layerset_list[key][i]].visible = false;
}
}
//書き出す
for(key in layerset_list){
for(var i =0; i < layerset_list[key].length;i++){
document.layerSets[key].visible = true;
document.layerSets[key].artLayers[layerset_list[key][i]].visible = true;
save_file_name = raw_filename +"_" + key + (i+1) + "_"+ l_file_name[key][i];
save_tga(save_file_name); //tga ファイルで書き出す関数
document.layerSets[key].artLayers[layerset_list[key][i]].visible = false;
}
document.layerSets[key].visible = false;
}
}
