obj2center.jsx
先日InDesignの勉強部屋のInD-Boardにて、選択オブジェクト群をページのセンターへ移動させるスクリプトの話題が上がっていた。
複数のオブジェクトを位置関係をそのまま、ページの中心へ移動させるというものだ。
グループ化すれば簡単かもしれないが、そうするとひとつのレイヤーにオブジェクトが集まってしまう。
そこで、
・選択オブジェクト群をグループ化せず、かつ位置関係を保ったままセンタリングしたい。
・見開き時、左ページのセンターに揃えたいのか、右ページのセンターに揃えたいのか。はたまたスプレッドのセンターに揃えたいのか。それらを選択できるようにしたい。
それらを踏まえ、書いてみた。
サブルーチンは上記リンク先のレスの中で、mgさんが書いておられたソースをそのまま利用させていただいた。
選択肢の最初のヤツ、(先頭ページ用)は余分だったかも。
ここまで書いてから気付いた。すでにmgさんご自身が書いておられる。
書いちゃったもんは晒す。
////////////////////////////////////////////エラー処理 function myerror(mess) { if (arguments.length > 0) { alert(mess); } exit(); } ////////////////////////////////////////////ラジオダイアログ /* myTitle ダイアログ(バー)のタイトル myPrompt メッセージ myList ラジオボタンに展開するリスト result 選択したリスト番号 */ function radioDialog(my_title, my_prompt, my_list){ var my_dialog = app.dialogs.add({name:my_title, canCancel:true}); with(my_dialog) { with(dialogColumns.add()) { // プロンプト staticTexts.add({staticLabel:my_prompt}); with (borderPanels.add()) { var my_radio_group = radiobuttonGroups.add(); with (my_radio_group) { for (var i = 0; i < my_list.length; i++){ if (i == 0) { radiobuttonControls.add({staticLabel:my_list[i], checkedState:true}); } else { radiobuttonControls.add({staticLabel:my_list[i]}); } } } } } } if (my_dialog.show() == true) { var ans = my_radio_group.selectedButton; //正常にダイアログを片付ける my_dialog.destroy(); //選択したアイテムの番号を返す return ans; } else { // ユーザが「キャンセル」をクリックしたので、メモリからダイアログボックスを削除 my_dialog.destroy(); } } ////実行 if (app.documents.length == 0) {myerror("ドキュメントが開かれていません")} var doc = app.activeDocument; var sel = doc.selection; ////////////////処理の選択 var myList = ["ページのセンターに(先頭ページ用)", "ページのセンターに(見開きの左ページ用)", "ページのセンターに(見開きの右ページ用)", "スプレッドのセンターに",]; var ans_int = radioDialog("obj2center", "選択オブジェクトを移動します。処理を選択してください\n", myList); //myList[ans_int]; ////////////////選択した処理を実行 if (ans_int == 0) {//ページのセンターに(先頭ページ用) //ドキュメントのrulerOriginを保存 var oldRular = doc.viewPreferences.rulerOrigin; //ドキュメントのrulerOriginをページに変更 doc.viewPreferences.rulerOrigin = 1380143215; x1 = groupy_bon(sel)[1]; y1 = groupy_bon(sel)[0]; Obj_w = groupy_bon(sel)[3] - groupy_bon(sel)[1]; Obj_h = groupy_bon(sel)[2] - groupy_bon(sel)[0]; Doc_w = app.activeDocument.documentPreferences.pageWidth; Doc_h = app.activeDocument.documentPreferences.pageHeight; x2=Doc_w/2-(x1+Obj_w/2); y2=Doc_h/2-(y1+Obj_h/2); for (var i=0, iL=sel.length; i < iL ; i++) { sel[i].move("to",[x2,y2]); }; doc.viewPreferences.rulerOrigin = oldRular; } else if (ans_int == 1) {//ページのセンターに(見開きの左ページ用) //ドキュメントのrulerOriginを保存 var oldRular = doc.viewPreferences.rulerOrigin; //ドキュメントのrulerOriginをスプレッドに変更 doc.viewPreferences.rulerOrigin = 1380143983; x1 = groupy_bon(sel)[1]; y1 = groupy_bon(sel)[0]; Obj_w = groupy_bon(sel)[3] - groupy_bon(sel)[1]; Obj_h = groupy_bon(sel)[2] - groupy_bon(sel)[0]; Doc_w = app.activeDocument.documentPreferences.pageWidth; Doc_h = app.activeDocument.documentPreferences.pageHeight; x2=Doc_w-(x1+Obj_w/2); y2=Doc_h/2-(y1+Obj_h/2); for (var i=0, iL=sel.length; i < iL ; i++) { sel[i].move("to",[x2-Doc_w/2,y2]); }; doc.viewPreferences.rulerOrigin = oldRular; } else if (ans_int == 2) {//ページのセンターに(見開きの右ページ用) //ドキュメントのrulerOriginを保存 var oldRular = doc.viewPreferences.rulerOrigin; //ドキュメントのrulerOriginをスプレッドに変更 doc.viewPreferences.rulerOrigin = 1380143983; x1 = groupy_bon(sel)[1]; y1 = groupy_bon(sel)[0]; Obj_w = groupy_bon(sel)[3] - groupy_bon(sel)[1]; Obj_h = groupy_bon(sel)[2] - groupy_bon(sel)[0]; Doc_w = app.activeDocument.documentPreferences.pageWidth; Doc_h = app.activeDocument.documentPreferences.pageHeight; x2=Doc_w-(x1+Obj_w/2); y2=Doc_h/2-(y1+Obj_h/2); for (var i=0, iL=sel.length; i < iL ; i++) { sel[i].move("to",[x2+Doc_w/2,y2]); }; doc.viewPreferences.rulerOrigin = oldRular; } else if (ans_int == 3) {//スプレッドのセンターに //ドキュメントのrulerOriginを保存 var oldRular = doc.viewPreferences.rulerOrigin; //ドキュメントのrulerOriginをスプレッドに変更 doc.viewPreferences.rulerOrigin = 1380143983; x1 = groupy_bon(sel)[1]; y1 = groupy_bon(sel)[0]; Obj_w = groupy_bon(sel)[3] - groupy_bon(sel)[1]; Obj_h = groupy_bon(sel)[2] - groupy_bon(sel)[0]; Doc_w = app.activeDocument.documentPreferences.pageWidth; Doc_h = app.activeDocument.documentPreferences.pageHeight; x2=Doc_w-(x1+Obj_w/2); y2=Doc_h/2-(y1+Obj_h/2); for (var i=0, iL=sel.length; i < iL ; i++) { sel[i].move("to",[x2,y2]); }; doc.viewPreferences.rulerOrigin = oldRular; } ///////////サブルーチン function groupy_bon (sel) { var t = [], l = [], b = [], r = []; for (var i=0, iL=sel.length; i < iL ; i++) { var bo = sel[i].geometricBounds; t.push(bo[0]); l.push(bo[1]); b.push(bo[2]); r.push(bo[3]); }; var groupyBon = [ t.sort(function(a,b){return a > b})[0], l.sort(function(a,b){return a > b})[0], b.sort(function(a,b){return a < b})[0], r.sort(function(a,b){return a < b})[0] ]; return groupyBon; }