2025年1月26日日曜日

技術メモ JavaScriptでIllustratorを操作する

 Technical memo: Controlling Illustrator with JavaScript


I created a JavaScript that generates a B2-sized document in Illustrator and draws a grid. This is my first time using JavaScript, and it's very useful. I also learned that templates are even more useful as a next step.


立ち上げたIllustratorにB2判ドキュメントを生成し、グリッドを描画するJavaScriptを作成しました。JavaScriptの利用ははじめてで、とても便利です。また、次のステップとしてテンプレートがさらに便利であることを知りました。

1 B2判ドキュメントを生成しグリッドを描画するJavaScript

次の仕様のJavaScriptをChatGPT支援により作成しました。

1 ドキュメントを生成して、B2判アートボードを設定してアクティブにする。

2 横650mm、縦450mmの四角をアートボード中心に描く。

3 線幅は0.25pxとする。

4 四角を行9、列13のグリッドに分割する。

5 全てのグリッドをグループにまとめる。

6 カラーモードをRGBモードに設定する。

7 線の色は#0a009dとする。塗りはしない。

// ptをmmに変換する係数
var ptToMm = 2.83464567;

// 新規ドキュメントの作成と設定
if (app.documents.length === 0) {
    var doc = app.documents.add(DocumentColorSpace.RGB);
} else {
    var doc = app.activeDocument;
}

// B2アートボードの設定(B2: 728mm x 515mm)
var artboardWidthMm = 728; // mm
var artboardHeightMm = 515; // mm
var artboardWidthPt = artboardWidthMm * ptToMm; // ptに変換
var artboardHeightPt = artboardHeightMm * ptToMm; // ptに変換

doc.artboards[0].artboardRect = [
    0,                  // 左
    artboardHeightPt,   // 上
    artboardWidthPt,    // 右
    0                   // 下
];

// アートボードの中心座標
var centerX = artboardWidthPt / 2;
var centerY = artboardHeightPt / 2;

// 四角形を描画
var rectWidthMm = 650; // mm
var rectHeightMm = 450; // mm
var rectWidthPt = rectWidthMm * ptToMm; // ptに変換
var rectHeightPt = rectHeightMm * ptToMm; // ptに変換

var rect = doc.pathItems.rectangle(
    centerY + rectHeightPt / 2, // 四角の上
    centerX - rectWidthPt / 2,  // 四角の左
    rectWidthPt,                // 四角の幅
    rectHeightPt                // 四角の高さ
);
rect.stroked = true;
rect.strokeWidth = 0.25; // 線幅を0.25px
rect.strokeColor = new RGBColor();
rect.strokeColor.red = 10;
rect.strokeColor.green = 0;
rect.strokeColor.blue = 157;
rect.filled = false; // 塗りなし

// 四角形をグリッドに分割
var rows = 9; // 行
var columns = 13; // 列
var gridGroup = doc.groupItems.add();
for (var i = 0; i < rows; i++) {
    for (var j = 0; j < columns; j++) {
        var cellWidthPt = rectWidthPt / columns;
        var cellHeightPt = rectHeightPt / rows;
        var cell = gridGroup.pathItems.rectangle(
            rect.top - (cellHeightPt * i),       // セルの上
            rect.left + (cellWidthPt * j),       // セルの左
            cellWidthPt,                         // セルの幅
            cellHeightPt                         // セルの高さ
        );
        cell.stroked = true;
        cell.strokeWidth = 0.25;
        cell.strokeColor = rect.strokeColor;
        cell.filled = false;
    }
}

// グリッド全体をグループ化
gridGroup.move(doc.activeLayer, ElementPlacement.PLACEATEND);

// RGBカラーモードを設定
doc.documentColorSpace = DocumentColorSpace.RGB;

alert("スクリプトの実行が完了しました!(単位はmm対応)");
2 JavaScriptにより生成したドキュメント


JavaScriptにより生成したドキュメント(Illustrator画面)


JavaScriptにより生成したドキュメントの利用(Illustrator画面)

このドキュメントは有吉北貝塚北斜面貝層のセクション図を集成して1枚の貝層断面図にまとめるための「台紙」として使う目的で作成したものです。JavaScriptの変数を調整すれば、アートボードサイズやグリッド設定や線色を変更できますから、便利です。JavaScriptは規定の場所に置いて使っています。

3 テンプレート

セクション図集成作業ではグリッド番号や標高を記入する必要があるので、それらの数値例や時々必要となるゲージ(目盛)をアートボード内外に置いてあるファイルをテンプレートファイルとして作成し、活用しています。


テンプレート画面(Illustrator画面)

4 感想

JavaScriptの利用がとても便利であることをはじめて知りました。さらにそれ以上にテンプレート利用が便利であること知りました。テンプレートファイルは規定の場所に置くことは手間がかかるようなので、作業フォルダーに置いて使っています。


0 件のコメント:

コメントを投稿