Illustratorで任意オブジェクトを楕円へ均等配置させます。前回の処理に回転設定の有無っを追加しました。
function distributeObjectsOnEllipse() {
if (app.documents.length === 0) {
alert("ドキュメントを開いてください。");
return;
}
var doc = app.activeDocument;
var selection = doc.selection;
if (selection.length !== 2) {
alert("配置オブジェクト、楕円の順に選択してください。");
return;
}
var ellipse, object;
// 楕円とオブジェクトを特定
if (selection[0].typename ===
"PathItem" && selection[0].pathPoints.length > 3) {
ellipse = selection[0];
object = selection[1];
} else if (selection[1].typename ===
"PathItem" && selection[1].pathPoints.length > 3) {
ellipse = selection[1];
object = selection[0];
} else {
alert("楕円(パス)と配置するオブジェクトを選択してください。");
return;
}
// ユーザーに配置する数を入力させる
var count = parseInt(prompt
("楕円周上に配置するオブジェクトの数を入力:", "6"), 10);
if (isNaN(count) || count < 1) {
alert("正しい数値を入力してください。");
return;
}
// 回転の有無を選択
var rotateOption =
confirm("オブジェクトを楕円の角度に沿って回転させますか?");
// 楕円の中心座標とサイズを取得
var centerX = ellipse.position[0] + ellipse.width / 2;
var centerY = ellipse.position[1] - ellipse.height / 2;
var radiusX = ellipse.width / 2;
var radiusY = ellipse.height / 2;
var angleStep = 360 / count;
for (var i = 0; i < count; i++) {
var angle = angleStep * i * (Math.PI / 180);
var x = centerX + radiusX * Math.cos(angle);
var y = centerY + radiusY * Math.sin(angle);
var newObj = object.duplicate();
newObj.position =
[x - newObj.width / 2, y + newObj.height / 2];
if (rotateOption) {
newObj.rotate(angleStep * i);
}
}
alert("オブジェクトを均等配置しました!");
}
distributeObjectsOnEllipse();
配置するオブジェクトはグループ化されていても問題ありません。ここではシンボル登録したモノを利用しました。なお、楕円はオブジェクトの後に作成またはペーストします。
事項鵜したらオブジェクトの数と回転の有無を入力するだけです。
「オブジェクトを楕円の角度に沿って回転させますか?」で「はい」をクリックした結果。楕円での均等配置は3D視点での見た目で均等配置にしています。
「オブジェクトを楕円の角度に沿って回転させますか?」で「いいえ」をクリックした結果。
もちろん正円でも問題ありません。