見出し画像

【イラレ用スクリプト】塗りと線の組み合わせごとに別レイヤに格納する


経緯

mac環境だとVectorMapMakerが使えないので基盤地図ビューアを使うことになりますが、これはpdfでしか書き出しができません。
選択 > 共通 > 塗りと線 で人力で選択してそれぞれをレイヤ作って移動して…という作業をしていましたが、面倒なのでこれを自動でやってくれるスクリプトが欲しいと思いました。

はじめに

  • macOS Sonoma 14.4.1

  • Adobe Illustrator 2024 (28.4.1)

上記の環境でのスクリプトなので、
その他の環境で使えるかはわからないです。
Javascriptの知識ゼロの人間が、
chatGPTさんと相談しながら作りました。

本題

var doc = app.activeDocument; // アクティブなドキュメントを取得

var objectsList = []; // オブジェクト一覧を格納する配列
var colorCombinations = {}; // 塗りと線の組み合わせを格納するオブジェクト

// ページアイテムを再帰的に検索する関数
function searchPageItems(items) {
    for (var i = 0; i < items.length; i++) {
        var currentItem = items[i];
        objectsList.push(currentItem); // オブジェクトをリストに追加
        if (currentItem.typename == "GroupItem") {
            searchPageItems(currentItem.pageItems); // グループ内のアイテムを検索
        }
    }
}

searchPageItems(doc.pageItems); // ドキュメント内のページアイテムを検索

// オブジェクトの塗りと線の組み合わせを取得
for (var j = 0; j < objectsList.length; j++) {
    var object = objectsList[j];
    var fillColor = getRGBValue(object.fillColor);
    var strokeColor = getRGBValue(object.strokeColor);
    var combinationKey = "Fill: " + fillColor + " | Stroke: " + strokeColor;
    if (!colorCombinations.hasOwnProperty(combinationKey)) {
        colorCombinations[combinationKey] = doc.layers.add(); // 新しいレイヤーを作成
        colorCombinations[combinationKey].name = combinationKey; // レイヤー名を設定
    }
    object.move(colorCombinations[combinationKey], ElementPlacement.PLACEATEND); // オブジェクトを対応するレイヤーに移動
}

// RGB値を取得する関数
function getRGBValue(color) {
    if (color && color.typename === "RGBColor") {
        return "RGB(" + color.red + ", " + color.green + ", " + color.blue + ")";
    } else {
        return "None";
    }
}

// レイヤーを名前の降順に並び替える
var layersArray = [];
for (var key in colorCombinations) {
    layersArray.push(colorCombinations[key]);
}
layersArray.sort(function(a, b) {
    return b.name.localeCompare(a.name); // 降順に並び替え
});
for (var k = 0; k < layersArray.length; k++) {
    layersArray[k].move(doc, ElementPlacement.PLACEATEND);
}

pdfをイラレで開いた状態で、
カラーモードがRGBなのを確認してスクリプト実行。

そうすると、
Fill: RGB(255, 178, 178) | Stroke: None
Fill: None | Stroke: RGB(77, 77, 128)
Fill: None | Stroke: None
のようなレイヤが作られて、それぞれ格納されます。
(塗り=Fill、線=Stroke という意味ですね、念のため)

元のレイヤ(例えば、「レイヤー1」)は、そのまま空のレイヤとして残るようにしてます。元のレイヤが複数ある場合も同様に、それぞれ空のレイヤとして残ります。

あとは、それぞれを「道路縁」とか「建物」とか、
自由にレイヤ名を変えて、色や線の太さなど自由に調整していけますね。

ちなみに、スクリプトの最後で降順に並び替えているのは、
Fill: None | Stroke: None の下地(白背景)を
一番下に持って行きたかっただけです。
が、テキストもこのレイヤに来るので改善の余地ありです。

処理時間については環境によりけりですが、
私の環境では1.5MBのpdfに対して1分くらいでした。

補足

スクリプトの保存場所:
アプリケーション > Adobe Illustrator 2024 > Presets > ja_JP > スクリプト 
など

実行方法:
ファイル > スクリプト > その他のスクリプト > (上記の保存場所のスクリプトを選択) > 開く
デフォルトなら command + F12 でショートカットです。

終わりに

その他には、線の太さごとに色分けされたdxfとかをレイヤ分けするのにも使えそうですね。

などとあとがきを書いているうちに思いついたのでついでに貼っときます。

  • 線の太さごとにレイヤ分け

  • 塗りと線と線の太さの組み合わせごとにレイヤ分け


記事は以上になります。

もし参考になったと思ってくれたら、
ちょっとした投げ銭してくれたら嬉しいです。
生きてて良かった〜と思えるので。

ここから先は

23字

¥ 100

この記事が気に入ったらチップで応援してみませんか?