リンクをクリップボードにコピー
コピー完了
こんな感じ?
// 名称「001」のレイヤーがなければ、「001」レイヤーを新規追加する
if(!hasLayer(app.activeDocument,"001")){
var LAYS = app.activeDocument.layers;
var newLay = LAYS.add();
newLay.name = "001";
}
// その名称のレイヤーがあるかどうか
function hasLayer(docObj,layerName){
var layObj = docObj.layers;
for (i=0; i<layObj.length; i++){
if(layObj[i].name == layerName){
return true;
}
}
}
面白そうなので調べてみました。
一応 Layers.getByName(name) というメソッドがあるのですが、このメソッド、レイヤーがない場合にエラーになるというとんでも仕様でした(普通はnullを返すとかになるんですが)。
なのでこれを使った場合は
var lays = app.documents[0].layers; try { //存在する場合 var newLay = lays.getByName('レイヤー名'); } catch(e) { //存在しない場合 var newLay = lays.add(); newLay.name = 'レイヤー名'; }
このようにtry文を使わないといけません。ひどい……
ご返信ありがとうございます!
仰るようにLayersコレクションの中身を1つずつチェック→有無のフラグを作成、とすることでやりたいことが出来ました。
リンクをクリップボードにコピー
コピー完了
コード走らせられない状況なのでなんのチェックもしてませんが、連想配列的な事は出来ないのではないかと思います。ループしてLayersコレクションの中身一つづつチェックしないとダメだと思います。
リンクをクリップボードにコピー
コピー完了
ご返信ありがとうございます!
仰るようにLayersコレクションの中身を1つずつチェック→有無のフラグを作成、とすることでやりたいことが出来ました。
リンクをクリップボードにコピー
コピー完了
こんな感じ?
// 名称「001」のレイヤーがなければ、「001」レイヤーを新規追加する
if(!hasLayer(app.activeDocument,"001")){
var LAYS = app.activeDocument.layers;
var newLay = LAYS.add();
newLay.name = "001";
}
// その名称のレイヤーがあるかどうか
function hasLayer(docObj,layerName){
var layObj = docObj.layers;
for (i=0; i<layObj.length; i++){
if(layObj[i].name == layerName){
return true;
}
}
}
リンクをクリップボードにコピー
コピー完了
ご返信ありがとうございます!
関数の戻り値をboolean型にして条件分岐に使用するのは思いつきませんでした。
とても勉強になりました。
ありがとうございます。
リンクをクリップボードにコピー
コピー完了
面白そうなので調べてみました。
一応 Layers.getByName(name) というメソッドがあるのですが、このメソッド、レイヤーがない場合にエラーになるというとんでも仕様でした(普通はnullを返すとかになるんですが)。
なのでこれを使った場合は
var lays = app.documents[0].layers; try { //存在する場合 var newLay = lays.getByName('レイヤー名'); } catch(e) { //存在しない場合 var newLay = lays.add(); newLay.name = 'レイヤー名'; }
このようにtry文を使わないといけません。ひどい……
リンクをクリップボードにコピー
コピー完了
ご返信ありがとうございます!
getByNameメソッドなるものがあるのですね。
調べ方が甘く申し訳ありません。
仰るようにnullやundefinedではなくエラーを返すとは、なかなか使いにくいメソッドですね。
しかしtry文を使用することでループと条件分岐の組み合わせで書くより、コードの可読性は高くなると思いました。
リンクをクリップボードにコピー
コピー完了