LoginSignup
1
2

More than 5 years have passed since last update.

Illustratorで特定レイヤーを削除するscript

Last updated at Posted at 2019-01-07

2019/01/08 コメントで指摘をいただいた「レイヤー削除」に関する処理を追加しました。

納品のたびに「レイヤーの削除」「アートボードの削除」をやっているが、手作業だと漏れがある。
毎回の作業なので半自動化するために、レイヤーとアートボードの命名規則を作り、scriptを組む。

命名規則の例

  • 削除したいレイヤー名
    • 「抜き罫」、「図面用」
  • 削除したいアートボード名
    • 「図面用」

レイヤー名を指定して削除

行う操作の順序は以下の通り。
1. 特定のレイヤー名を検索 1
2. 検索したレイヤーのindexNumberを保存
3. indexNumberに基づいて削除

抜き罫削除.js
// 「抜き罫」レイヤー削除
removeNUKIKEI(activeDocument);
function removeNUKIKEI(docObj)
{
    var i = searchLayerNum (docObj, "抜き罫");
    if( i == -1 ){
        // 抜き罫レイヤーがないなら何もしない
    }
    else{
        var layObj = docObj.layers;
        removeLayer(layObj, i);
    }
}

// レイヤー名検索
function searchLayerNum(docObj,layName){
    layObj = docObj.layers;
    for (i=0; i<layObj.length; i++){
        if( layObj[i].name == layName ){
            return i;
        }
    }
    return -1;  // 見つからなかったら-1を返す
}

// レイヤー削除
function removeLayer(layObj, tgtNum){
        layObj[tgtNum].locked = false;
        // 非表示レイヤはremove()しようとするとエラー失敗する
        layObj[tgtNum].visible = true;
        layObj[tgtNum].remove();
    }

アートボードも名前から削除

アートボードもレイヤーと同様に名前から検索し、削除することが可能。

図面用削除.js

// 図面用アートボードとレイヤーの削除
removeDRAWING(activeDocument);
function removeDRAWING(docObj){
    var i = searchArtboardNum (docObj, "図面用");
    if( i == -1 ){
        // 図面用アートボードがないなら何もしない   
    }
    else{
        var artObj = docObj.artboards;
        artObj[i].remove();
    }

    i = searchLayerNum (docObj, "図面用");
    if( i == -1 ){
        // 図面用レイヤーがないなら何もしない
    }
    else{
        var layObj = docObj.layers;
        removeLayer(layObj, i);
    }
}
// アートボード名検索
function searchArtboardNum(docObj,artName){
    artObj = docObj.artboards;
    for (i=0; i<artObj.length; i++){
        if( artObj[i].name == artName ){
            return i;
        }
    }
    return -1;  // 見つからなかったら-1を返す
}
// レイヤー名検索
function searchLayerNum(docObj,layName){
    layObj = docObj.layers;
    for (i=0; i<layObj.length; i++){
        if( layObj[i].name == layName ){
            return i;
        }
    }
    return -1;  // 見つからなかったら-1を返す
}

// レイヤー削除
function removeLayer(layObj, tgtNum){
        layObj[tgtNum].locked = false;
        // 非表示レイヤはremove()しようとするとエラー失敗する
        layObj[tgtNum].visible = true;
        layObj[tgtNum].remove();
    }

  1. 同名のレイヤーが存在しないことが前提。同名レイヤーをまとめて削除したい場合は、indexNumberを配列に格納すれば対応できるが、そもそも同名レイヤーがあると混乱の元なので避けたほうが良い。 

1
2
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2