指定したサイズ内にランダムな矩形を敷き詰めます。CMYK版ですが、RGBモードでも機能します。ちなみにCMYK版ではBlackは未使用で処理しています。
#target illustrator
function randomCMYKColor() {
var cmyk = new CMYKColor();
cmyk.cyan = Math.random() * 100;
cmyk.magenta = Math.random() * 100;
cmyk.yellow = Math.random() * 100;
cmyk.black = Math.random() * 0;
return cmyk;
}
function main() {
if (app.documents.length == 0) {
alert("ドキュメントを開いてください。");
return;
}
var doc = app.activeDocument;
// サイズ入力
var w =
Number(prompt("埋める領域の幅(mm)", "150"));
var h =
Number(prompt("埋める領域の高さ(mm)", "150"));
if (isNaN(w) || isNaN(h) || w <= 0 || h <= 0) {
alert("正しい数値を入力してください。");
return;
}
var mmToPt = 2.834645;
var totalWidth = w * mmToPt;
var totalHeight = h * mmToPt;
var startX = 0;
var startY = 0;
while (startY < totalHeight - 0.1) {
var remainingHeight = totalHeight - startY;
var rowHeight =
Math.min(remainingHeight, (Math.random() *
remainingHeight * 0.5) + 10);
if (rowHeight > remainingHeight) rowHeight =
remainingHeight;
var currentX = 0;
while (currentX < totalWidth - 0.1) {
var remainingWidth = totalWidth - currentX;
var rectWidth =
Math.min(remainingWidth, (Math.random() *
remainingWidth * 0.5) + 10);
if (rectWidth > remainingWidth) rectWidth =
remainingWidth;
var rect = doc.pathItems.rectangle(
-startY, // Y位置(Illustratorでは上がマイナス)
currentX, // X位置
rectWidth, // 幅
rowHeight // 高さ
);
rect.filled = true;
rect.fillColor = randomCMYKColor();
rect.stroked = false;
currentX += rectWidth;
}
startY += rowHeight;
}
}
main();
実行すると敷き詰める矩形のサイズを指定します。
処理結果。