Illustratorでパスのオフセットを制御してみます。
なお、IllustratorはスクリプトAPI制限のため、
幾何学的な「パスのオフセット」ではなく、
「バウンディングボックスのサイズ拡張」を使用。
パスの形状によっては均等な結果にならない場合があります。
線の太さを考慮していません。
デフォルトの太さで処理後に調整してください。
/*
Illustrator Script
パスのオフセットを制御
*/
(function() {
// ドキュメントが開かれているか確認
if (app.documents.length === 0) {
alert("ドキュメントを開いてください。");
return;
}
var doc = app.activeDocument;
var sel = doc.selection;
// オブジェクトが選択されているか確認
if (sel.length === 0) {
alert("オブジェクトを選択してください。");
return;
}
// --- UI作成 ---
var win = new Window("dialog", "多重オフセット複製");
win.orientation = "column";
win.alignChildren = "fill";
// 間隔の入力
var group1 = win.add("group");
group1.add("statictext", undefined, "間隔 (mm):");
var inputOffset = group1.add("edittext", undefined, "5");
inputOffset.characters = 10;
// 回数の入力
var group2 = win.add("group");
group2.add("statictext", undefined, "回数:");
var inputCount = group2.add("edittext", undefined, "3");
inputCount.characters = 10;
// ボタン
var groupBtn = win.add("group");
groupBtn.alignment = "center";
var btnCancel = groupBtn.add("button",
undefined, "キャンセル", {name: "cancel"});
var btnOk = groupBtn.add("button",
undefined, "実行", {name: "ok"});
// --- 実行処理 ---
btnOk.onClick = function() {
var offsetMM = parseFloat(inputOffset.text);
var repeatCount = parseInt(inputCount.text);
if (isNaN(offsetMM) || isNaN(repeatCount)) {
alert("数値のみ入力可能です。");
return;
}
// mm を pt に変換 (1mm = 2.834645 pt)
var offsetPt = offsetMM * 2.83464567;
for (var i = 0; i < sel.length; i++) {
var originalItem = sel[i];
// 元の座標とサイズを取得
// 線幅を含まない座標値を使用
var bounds = originalItem.geometricBounds;
var w = bounds[2] - bounds[0];
var h = bounds[1] - bounds[3];
var centerX = bounds[0] + w / 2;
var centerY = bounds[1] - h / 2;
for (var j = 1; j <= repeatCount; j++) {
// オブジェクトを複製
var newItem = originalItem.duplicate();
// 新しいサイズを計算(元のサイズ + (間隔 * 2 * 回数目))
var addedSize = (offsetPt * 2) * j;
var newW = w + addedSize;
var newH = h + addedSize;
// サイズ適用
newItem.width = newW;
newItem.height = newH;
// 中心位置を戻す
newItem.left = centerX - (newW / 2);
newItem.top = centerY + (newH / 2);
}
}
win.close();
}
win.show();
})();
任意のオブジェクトを選択して実行すると・・・
間隔(デフォルト:5)と回数(デフォルト:3)を指定すれば完了です。
間隔で-値もデフォルト環境と同様に有効です。




