#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();