|
Mac OS 10.6.3/InDesign CS5 Javascript
いつもお世話になっております。 Javascriptを勉強し始めたばかりです。 選択した画像ボックスをドキュメントサイズの左右センターに移動するスクリプトを作りたいのですが、画像ボックスが複数になるとうまく行きません。 画像ボックスが複数の場合は、それぞれの位置関係をたもったまま移動したいのですが、現状だと全てのボックスがセンターに集まってしまいます。 そもそも考え方(Javascriptの作り方)が間違っているのでしょうか。 ご教授いただけると助かります。
以下、現時点でのスクリプトです。
selected_box(app.selection); function selected_box(motoobj){ for(var N = 0; N < motoobj.length;N++){ var moto_bounds = motoobj[N].geometricBounds; var y1 = moto_bounds[0]; var x1 = moto_bounds[1]; var Obj_w = moto_bounds[3] - moto_bounds[1]; var Obj_h = moto_bounds[2] - moto_bounds[0]; var Doc_w = app.activeDocument.documentPreferences.pageWidth; var Doc_h = app.activeDocument.documentPreferences.pageHeight; var Doc_w = (Doc_w - Obj_w)/2; var Doc_h = (Doc_h - Obj_h)/2; var x2 = Doc_w - x1; var y2 = Doc_h - y1; motoobj[N].move("by",[x2,y2]); } }
宜しくお願いします。
|
No.5281 2010/11/10(Wed) 12:12:10
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; ja-jp) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5
|
Re: 選択したボックスをドキュメントサイズの左右センターに移動したい / (z-) |
|
|
|
なんかいつも回答前に質問し返してるようですみませんが ^;
・画像フレームA,B,Cの3つが横並びしているとする場合、左端にあるフレームAの左端から、右端にあるフレームCの右端の座標まで、の距離のセンターをページのセンターに合わせたい(縦についても同じ) こういうことですね?
現時点のコードはオブジェクトを1つづつ操作しています。 フレームAを操作する時、他のフレームB、フレームCがどの位置にあろうが関係ない、という事になっています。 「まとめて動いたようにする」には、移動を開始する前にオブジェクト群の天地左右それぞれの端にある物の座標を割り出す必要があります。それさえ出てしまえば、あとは割り算でオブジェクト群の現状のセンター座標を出し、ページのセンターとの差分だけ各々のオブジェクトを移動する、という流れです。
---------------------- きわめて単純な構造のレイアウトだけを相手にするのであれば(グループとかごちゃごちゃしていなければ)現状の選択範囲でグループを作成、そのグループのgeometricBoundsを拾ってすぐdocument.undo() という手もあります。
|
No.5282 2010/11/10(Wed) 12:41:31
Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; ja-jp) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/4.1.2 Safari/533.18.5
|
|
Re: 選択したボックスをドキュメントサイズの左右センターに移動したい / kangaroo |
|
|
|
(z-)さん いつもありがとうございます。
>画像フレームA,B,Cの3つが横並びしているとする場合、左端にあるフレームAの左端から、右端にあるフレームCの右端の座標まで、の距離のセンターをページのセンターに合わせたい(縦についても同じ) こういうことですね?
はい。そうです。 説明が足りず、すみません。
>オブジェクト群の天地左右それぞれの端にある物の座標を割り出す >現状の選択範囲でグループを作成、そのグループのgeometricBoundsを拾ってすぐdocument.undo()
今回は、簡単なレイアウトなのでグループにする方向で勉強してみます。 (どちらもやり方がわからないのですが調べてみます)
ありがとうございました。
|
No.5283 2010/11/10(Wed) 13:26:05
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; ja-jp) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5
|
|
Re: 選択したボックスをドキュメントサイズの左右センターに移動したい / kangaroo |
|
|
|
選択した画像フレームをグループ化してドキュメントのセンターに移動することが出来ました! が、グループ解除の方法がわかりません。 (z-)さんにおっしゃって頂いたdocument.undo() がそれにあたると思うのですが、どこに入れたら良いのでしょうか。 もう少しおつきあい頂けると助かります。 よろしくお願いします。
var selObj = app.activeDocument.groups.add(app.selection); y1 = selObj .geometricBounds[0]; x1 = selObj .geometricBounds[1]; Obj_w = selObj .geometricBounds[3] - selObj .geometricBounds[1]; Obj_h = selObj .geometricBounds[2] - selObj .geometricBounds[0]; Doc_w = app.activeDocument.documentPreferences.pageWidth; Doc_h = app.activeDocument.documentPreferences.pageHeight; Doc_w = (Doc_w - Obj_w)/2; Doc_h = (Doc_h - Obj_h)/2; x2 = Doc_w - x1; y2 = Doc_h - y1; selObj .move("by",[x2,y2]);
|
No.5284 2010/11/10(Wed) 14:55:40
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; ja-jp) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5
|
|
Re: 選択したボックスをドキュメントサイズの左右センターに移動したい / (z-) |
|
|
|
ええと、「全体のセンター座標を出す」ためのグループです。座標がわかったらグループ作成を取り消しして、1こずつ差分を移動してやって下さい、というニュアンスでしたすみません。 Illustratorなんかだとungroupというのがありますが、InDesignでスクリプトによるグループ解除はちょっと..なので。
|
No.5285 2010/11/10(Wed) 15:58:18
Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; ja-jp) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/4.1.2 Safari/533.18.5
|
|
Re: 選択したボックスをドキュメントサイズの左右センターに移動したい / kangaroo |
|
|
|
グループにして、まとめて移動して、グループ解除… という方法かと早とちりしてました。グループ解除はダメなのですね。 もう一度、最初からやってみます。 ありがとうございます。
|
No.5286 2010/11/10(Wed) 16:15:45
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; ja-jp) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5
|
|
Re: 選択したボックスをドキュメントサイズの左右センターに移動したい / こに |
|
|
|
selObj .move("by",[x2,y2]); の後に、 selObj.ungroup(); でグループ解除になりませんか?
|
No.5287 2010/11/10(Wed) 17:48:38
Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; ja-jp) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/4.1.2 Safari/533.18.5
|
|
Re: 選択したボックスをドキュメントサイズの左右センターに移動したい / kangaroo |
|
|
|
(z-)さん >「全体のセンター座標を出す」ためのグループです。座標がわかったらグループ作成を取り消しして、1こずつ差分を移動して…
出来ました!ありがとうございます。
>こにさん グループ解除も出来ました! ありがとうございます。
いろいろと勉強になりました。 ありがとうございました。
|
No.5288 2010/11/10(Wed) 18:06:08
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; ja-jp) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5
|
|
Re: 選択したボックスをドキュメントサイズの左右センターに移動したい / (z-) |
|
|
|
..すみません、ungroup() がないのはIllustratorの方でした。うそついてすみません。まこと軽卒でした。
|
No.5289 2010/11/10(Wed) 22:07:27
Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; ja-jp) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/4.1.2 Safari/533.18.5
|
|
Re: 選択したボックスをドキュメントサイズの左右センターに移動したい / mg |
|
|
|
個人的にはグループ化はレイヤーまたがりとか、グループ化前後が同一でないのはいやだな。 素直に各geometricBoundsの最大値最小値取った方がいい気がします。 ちゃんと使うにはルーラをSpreadになってる必要とかあります
var doc = app.documents[0]; var sel = doc.selection; alert(groupy_bon(sel));
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; }
|
No.5290 2010/11/11(Thu) 12:36:30
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12
|
|
Re: 選択したボックスをドキュメントサイズの左右センターに移動したい / (z-) |
|
|
|
ちょっと悪知恵ですけど ・オブジェクトの重なり順なんか関係ない ・連結テキストなんかない ・geometricBoundsじゃなくてvisibleBoundsで構わない という条件下でしか使えませんが
app.clipboardPreferences.pasteRemembersLayers=true; app.menuActions.item("$ID/Selection Tool").invoke(); app.menuActions.itemByName("スプレッド全体").invoke(); app.cut(); app.paste();
で線幅の外側で計った真ん中にきます。
|
No.5296 2010/11/11(Thu) 21:14:37
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; ja-jp) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5
|
|
Re: 選択したボックスをドキュメントサイズの左右センターに移動したい / kangaroo |
|
|
|
>mgさん 今回はレイヤーのまたがり等もなく、ごく単純なレイアウトでの動作を望んでいましたので、グループ化でも問題なさそうでした。 しかし、いろんな事を想定しながらスクリプトを作らなくてはいけないと 勉強になりました。落ち着いたらmgさんに提示していただいたスクリプトも勉強してみたいと思います。(現時点でほとんどわかっていません…) ありがとうございました。
(z-)さん また、違った方向からのアプローチをありがとうございます。 条件はほとんど揃っていますが、こちらもまたあとで勉強させていただきたいと思います。 ありがとうございました。
|
No.5314 2010/11/15(Mon) 09:23:56
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; ja-jp) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5
|
|