最初に描いたオブジェクトのパスのアンカーポイントへ、後から描いたオブジェクトを複製配置します。配置オブジェクトはグループ化もOKです。
// Illustrator Script: Last object's anchor points
// → Duplicate first object
function duplicateToAnchorPoints() {
var doc = app.activeDocument;
var sel = doc.selection;
if (sel.length !== 2) {
alert("2つのオブジェクトを選択してください。");
return;
}
// 最初に描いたオブジェクト(古い順)と
// 最後に描いたオブジェクト(新しい順)を取得
var firstObject = sel[0];
var lastObject = sel[1];
// 最後のオブジェクトがパスでなければエラー
if (!(lastObject.typename === "PathItem" ||
lastObject.typename === "CompoundPathItem")) {
alert("オブジェクトはパスオブジェクトである必要があります。");
return;
}
// アンカーポイントを取得
var anchorPoints = [];
if (lastObject.typename === "PathItem") {
for (var i = 0; i < lastObject.pathPoints.length; i++) {
var pt = lastObject.pathPoints[i].anchor;
anchorPoints.push(pt);
}
} else if (lastObject.typename === "CompoundPathItem") {
for (var j = 0; j < lastObject.pathItems.length; j++) {
var subPath = lastObject.pathItems[j];
for (var k = 0; k < subPath.pathPoints.length; k++) {
var pt = subPath.pathPoints[k].anchor;
anchorPoints.push(pt);
}
}
}
// 最後のオブジェクトの中心を取得
var bounds = firstObject.geometricBounds;
var centerX = (bounds[0] + bounds[2]) / 2;
var centerY = (bounds[1] + bounds[3]) / 2;
// 各アンカーポイントにオブジェクトを複製
for (var i = 0; i < anchorPoints.length; i++) {
var newObj = firstObject.duplicate();
var dx = anchorPoints[i][0] - centerX;
var dy = anchorPoints[i][1] - centerY;
newObj.position = [newObj.position[0] +
dx, newObj.position[1] + dy];
}
alert("複製が完了しました!");
}
duplicateToAnchorPoints();
最初に描いたオブジェクト(黄色の星)に後から描いた円(オレンジと赤の円をグループ化)の両方を選択して実行すれば・・・
最初に描いたオブジェクト(黄色の星)のアンカーポイント上に、後から描いた円(オレンジと赤の円をグループ化)を配置します。