公開日:2017年3月31日 最終更新日:2022年10月18日
InDesignでオブジェクトに名前をつけることはそうそうないので、「何に使うんだ」という感じですが…Illustratorでも動くので、むしろそっちのほうが使いみちがありそうです。InDesign CS5以降で動きます。
var selObj = app.activeDocument.selection;
var selCount=selObj.length;
if(selCount==0){
alert("オブジェクトが選択されていません")
}else{
var pr=prompt("任意のオブジェクト名を入力。入力なしなら番号だけ入る","");
var arr = [];
for (var i=0; i < selCount; i++) {
arr[i] = i+1;//1からスタートに
var Objname=pr+arr[i]
selObj[i].name = Objname;
}
}
Illustratorでは、visibleBoundsの順序がInDesignと違うため、順序はN型になります。IllustratorでZ型にする場合はこちら
//並べ替え関数。左上からZ型に並べ替えていくように。IllustratorだとN型になっちゃう
//-1が返る場合は前に、1が返る場合は後ろに。0は順番に変更なし
function sortselObj(a, b){
var y1 = a.visibleBounds[0];
var x1 = a.visibleBounds[1];
var y2 = b.visibleBounds[0];
var x2 = b.visibleBounds[1];
if (y1 > y2) {
return 1;
} else if (y1 < y2) {
return -1;
} else if (y1 == y2) {
if (x1 == x2) {
return 0;
} else if (x1 > x2) {
return 1;
} else if (x1 < x2) {
return -1;
}
}
}
var selObj = app.activeDocument.selection;
var selCount=selObj.length;
selObj.sort(sortselObj)//配列の順序を替える
if(selCount==0){
alert("オブジェクトが選択されていません")
}else{
var arr = [];
var pr=prompt("任意のオブジェクト名を入力。入力なしなら番号だけ入る","");
for (var i=0; i < selCount; i++) {
arr[i] = i+1;//1からスタートに
var Objname=pr+arr[i]
selObj[i].name = Objname;
}
}
最近作成していた「選択オブジェクト」を基準に動くスクリプト、ソーティングを入れて強化できるような気が…たとえば「選択したオブジェクトをそれぞれアートボードにする」とか。
2.のスクリプトからarr[i]を削除すると、選択オブジェクトに全部同じ名前をつけられます。
//並べ替え関数。左上からZ型に並べ替えていくように。IllustratorだとN型になっちゃう
//-1が返る場合は前に、1が返る場合は後ろに。0は順番に変更なし
function sortselObj(a, b){
var y1 = a.visibleBounds[0];
var x1 = a.visibleBounds[1];
var y2 = b.visibleBounds[0];
var x2 = b.visibleBounds[1];
if (y1 > y2) {
return 1;
} else if (y1 < y2) {
return -1;
} else if (y1 == y2) {
if (x1 == x2) {
return 0;
} else if (x1 > x2) {
return 1;
} else if (x1 < x2) {
return -1;
}
}
}
var selObj = app.activeDocument.selection;
var selCount=selObj.length;
selObj.sort(sortselObj)//配列の順序を替える
if(selCount==0){
alert("オブジェクトが選択されていません")
}else{
var arr = [];
var pr=prompt("任意のオブジェクト名を入力。入力なしなら番号だけ入る","");
for (var i=0; i < selCount; i++) {
var Objname=pr;
selObj[i].name = Objname;
}
}