日曜日, 3月 01, 2026

JavaScriptでAI遊び 88 
Illustratorで複数オブジェクトの間隔を統一

Illustratorで複数オブジェクトの間隔を指定数で統一します。

/*
Illustrator Script
選択したオブジェクト間の隙間を指定値で統一 。
*/

if (app.documents.length === 0) {
alert("ドキュメントがありません");
exit();
}

var sel = app.activeDocument.selection;

if (sel.length < 2) {
alert("2つ以上のオブジェクトを選択してください");
exit();
}

// mm → pt 変換係数
var MM_TO_PT = 2.83464567;

// 隙間入力(mm)
var gapMM =
    prompt("オブジェクト間の隙間(mm)を入力してください", "5");
if (gapMM === null || isNaN(gapMM)) {
alert("正しい数値を入力してください");
exit();
}
var gap = Number(gapMM) * MM_TO_PT;

// 方向選択
var isHorizontal =
    confirm("横方向に整列しますか?\nOK:横 / キャンセル:縦");

// 位置順でソート
sel.sort(function(a, b) {
var ab = a.geometricBounds;
var bb = b.geometricBounds;
return isHorizontal ? ab[0] - bb[0] : bb[1] - ab[1];
});

// 基準位置
var pos = isHorizontal
? sel[0].geometricBounds[0] // left
: sel[0].geometricBounds[1]; // top

// 整列処理
for (var i = 0; i < sel.length; i++) {
var item = sel[i];
var b = item.geometricBounds;
var w = b[2] - b[0];
var h = b[1] - b[3];

if (isHorizontal) {
item.left = pos;
pos += w + gap;
} else {
item.top = pos;
pos -= h + gap;
}
}

上の様にサイズの異なる複数のオブジェクトの間隔を統一したい場合は[ウィンドウ]>[整列]>[水平方向中央に整列]を思い浮かべますが・・・


オブジェクトの中心で間隔を設定してしまい、隙間は同じにはなりません。

そこで今回のスクリプトを使い、間隔を指定すれば・・・


左端のオブジェクトを軸に同じ間隔で再配置されます。

形状がバラバラでも大丈夫です。

間隔を指定すれば・・・


左端のオブジェクトを軸に同じ間隔で再配置されます。