木曜日, 5月 28, 2026

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

以前作成した時はタイリングの数だけでしたが、今回は選択した矩形を分割する展開です。

main();

function main() {

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

var doc = app.activeDocument;

if (doc.selection.length !== 1) {
alert("矩形を1つだけ選択してください");
return;
}

var item = doc.selection[0];

if (!(item.typename === "PathItem" && item.closed)) {
alert("閉じたパス(矩形)を選択してください");
return;
}

var cols = parseInt(prompt("横方向の分割数(列数)", "5"), 10);
var rows = parseInt(prompt("縦方向の分割数(行数)", "5"), 10);

if (isNaN(cols) || isNaN(rows) || cols <= 0 || rows <= 0) {
alert("正しい数値を入力してください");
return;
}

var bounds = item.geometricBounds;
var left = bounds[0];
var top = bounds[1];
var right = bounds[2];
var bottom = bounds[3];

var width = right - left;
var height = top - bottom;

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

item.remove();

function randomColor() {
var c = new RGBColor();
c.red = Math.random() * 255;
c.green = Math.random() * 255;
c.blue = Math.random() * 255;
return c;
}

for (var r = 0; r < rows; r++) {
for (var c = 0; c < cols; c++) {

var x = left + c * cellW;
var y = top - r * cellH;

var rect = doc.pathItems.rectangle(y, x, cellW, cellH);

rect.stroked = false;
rect.filled = true;
rect.fillColor = randomColor();
}
}

alert("完了!");
}

任意の矩形を選択し、横方向(列)、縦方向(行)を指定すれば・・・

上はデフォルトの値を実行した結果。

上は横方向(列)を16、縦方向(行)を6とした結果です。