木曜日, 6月 04, 2026

JavaScriptでAI遊び 94 
Illustratorで選択矩形を指定数で分割タイリング(2)

今回は 予め作成したカラーチップを選択し、サイズと分割数を設定後に選択食をランラム設定します。

#target illustrator

function mmToPt(mm) {
return new UnitValue(mm, "mm").as("pt");
}

function main() {
if (app.documents.length === 0) {
alert("ドキュメントが開かれていません");
return;
}

var doc = app.activeDocument;
var sel = doc.selection;

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

// --- 色リスト取得 ---
var colors = [];
for (var i = 0; i < sel.length; i++) {
try {
if (sel[i].filled) {
colors.push(sel[i].fillColor);
}
} catch (e) {}
}

if (colors.length < 2) {
alert("塗り色のあるオブジェクトを複数選択してください");
return;
}

// --- 入力 ---
var widthMM = Number(prompt("矩形の幅(mm)", 200));
var heightMM = Number(prompt("矩形の高さ(mm)", 200));
var cols = Number(prompt("横分割数", 10));
var rows = Number(prompt("縦分割数", 10));

if (!widthMM || !heightMM || !cols || !rows) {
alert("数値を正しく入力してください");
return;
}

// --- mm → pt ---
var width = mmToPt(widthMM);
var height = mmToPt(heightMM);

var cellW = width / cols;
var cellH = height / rows;

// --- アートボード中央 ---
var ab = doc.artboards[doc.artboards.getActiveArtboardIndex()];
var rect = ab.artboardRect;

var centerX = (rect[0] + rect[2]) / 2;
var centerY = (rect[1] + rect[3]) / 2;

var startX = centerX - width / 2;
var startY = centerY + height / 2;

var group = doc.groupItems.add();

// --- グリッド生成 ---
for (var r = 0; r < rows; r++) {
for (var c = 0; c < cols; c++) {

var cell = group.pathItems.rectangle(
startY - r * cellH,
startX + c * cellW,
cellW,
cellH
);

cell.stroked = false;
cell.filled = true;

// ランダムに色選択
var idx = Math.floor(Math.random() * colors.length);
cell.fillColor = colors[idx];
}
}

alert("複数色ランダムで生成しました");
}

main();

カラーサンプル(数は任意)を選択して実行し、サイズと分割数を設定すれば・・・

ランダムに配色されます。

同じ結果は生まれません。