選択した矩形オブジェクトをランダムに分割してみます。
function randomSplitRectangles() {
if (app.documents.length === 0) {
alert("ドキュメントがありません。");
return;
}
var doc = app.activeDocument;
if (doc.selection.length !== 1) {
alert("矩形を1つ選択してください。");
return;
}
var obj = doc.selection[0];
if (obj.typename != "PathItem") {
alert("PathItemを選択してください。");
return;
}
var count = parseInt(prompt("最終的な矩形数", "10"), 10);
if (isNaN(count) || count < 2) {
alert("2以上を入力してください。");
return;
}
// 元矩形
var b = obj.geometricBounds;
var rects = [];
rects.push({
left:b[0],
top:b[1],
right:b[2],
bottom:b[3]
});
// 元オブジェクトのスタイルを保存
var srcFilled = obj.filled;
var srcFillColor = obj.fillColor;
var srcStroked = obj.stroked;
var srcStrokeColor = obj.strokeColor;
var srcStrokeWidth = obj.strokeWidth;
obj.remove();
while(rects.length < count){
// 面積最大の矩形を探す
var index = 0;
var maxArea = 0;
for(var i=0;i<rects.length;i++){
var w = rects[i].right-rects[i].left;
var h = rects[i].top-rects[i].bottom;
var area = w*h;
if(area>maxArea){
maxArea=area;
index=i;
}
}
var r = rects[index];
var w = r.right-r.left;
var h = r.top-r.bottom;
// 小さすぎる場合は終了
if(w<8 || h<8) break;
var vertical = (Math.random()<0.5);
if(vertical){
var x = r.left + w*(0.3+Math.random()*0.4);
rects.splice(index,1);
rects.push({
left:r.left,
top:r.top,
right:x,
bottom:r.bottom
});
rects.push({
left:x,
top:r.top,
right:r.right,
bottom:r.bottom
});
}else{
var y = r.bottom + h*(0.3+Math.random()*0.4);
rects.splice(index,1);
rects.push({
left:r.left,
top:r.top,
right:r.right,
bottom:y
});
rects.push({
left:r.left,
top:y,
right:r.right,
bottom:r.bottom
});
}
}
// 描画
for(var i=0;i<rects.length;i++){
var r=rects[i];
var p = doc.pathItems.rectangle(
r.top,
r.left,
r.right-r.left,
r.top-r.bottom
);
// 元オブジェクトのスタイルをコピー
p.filled = srcFilled;
if (srcFilled) {
p.fillColor = srcFillColor;
}
p.stroked = srcStroked;
if (srcStroked) {
p.strokeColor = srcStrokeColor;
p.strokeWidth = srcStrokeWidth;
}
}
}
randomSplitRectangles();
ベースにした矩形
デフォルトの分割数10を実行すると・・・
分割数10の結果
分割数30を実行すると・・・
分割数30の結果
2026/07/06 修正
※Illustratorのアップデートで不具合が出る場合があります。気がついた時点でデバッグするように心がけていますが、すぐに対応できないのでご容赦ください。

