|
はじめてJavaScriptを書こうと思っています。 数あるテキストフレームを、手動で個別に選択しながら 決まった位置、サイズにするというようなものです。
app.activeDocument.selection
この一文を何かの変数に入れて、 それに対して座標指定してあげればいいのかな? というところまでは 何となくわかったのですが、それ以降がまったく見当もつかず(-_-;)
どなたかお助けください。 よろしくお願いします。 (環境:Mac、CS3)
|
No.890 2008/03/27(Thu) 16:48:16
Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; ja-jp) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13
|
Re: テキストフレームの拡縮(JS) / せうぞー |
|
|
|
app.activeDocument.selection は現在開いているドキュメントの選択しているオブジェクトの「配列」です。 これを変数に入れるというのは var my_selection = app.activeDocument.selection; になります。「my_selection」は「app.activeDocument.selection」に名前を付けただけですので、やはり配列です。 my_selection[0]; がひとつ目のオブジェクトそのものになります。 これかたとえばテキストフレームだったとします。テキストフレームにはvisibleBounds(線幅を含む大きさ)という属性があり、これがオブジェクトの座標値を表しています。座標も配列になっていて「[y1, x1, y2, x2]」になっています。ですから、現在の座標が知りたければ my_selection[0].visibleBounds; とします。この座標値を変更すれば、オブジェクトの位置や大きさが変わります。 my_selection[0].visibleBounds = [10, 20, 110, 220]; あと、位置だけを変えたいならmove()というコマンドもあります。 少しずつやれば、難しくはありません。がんばってくださいね。
|
No.891 2008/03/27(Thu) 17:16:33
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_2; ja-jp) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13
|
|
Re: テキストフレームの拡縮(JS) / 梅花藻 |
|
|
|
CS3はあるものの、ほとんど触っていないのですが、 app.activeDocument.selection[0] を弄る形になるかと思います。 CS2の場合ですが、 app.activeDocument.selection[0].move([0,0]);//座標(0,0)に移動 app.activeDocument.selection[0].resize(200,200);//縦横200%に拡大 とか。
サンプルスクリプトのAddGuides.jsx(選択したオブジェクトの周囲にガイドを引く)とかを参考にするとよいかと思います。 (凝ったスクリプトなので、いらない部分はバスッバスッ切って、必要最低限なことから作る方がいいのかもしれないです)
|
No.892 2008/03/27(Thu) 17:16:51
Mozilla/5.0 (Macintosh; U; PPC Mac OS X; ja-jp) AppleWebKit/419 (KHTML, like Gecko) Safari/419.3
|
|
Re: テキストフレームの拡縮(JS) / (-_-メ) |
|
|
|
さっそくのお返事ありがとうございます。 お二人の書き込みを見て、だいたいわかりました。 で、私が考えていたものは1行で済むことがわかりました(^_^)
app.activeDocument.selection[0].visibleBounds = ["10mm","10mm","20mm","20mm"];
単位を入れないと、そのとき選択されている単位系に結果が左右されるんですね。
|
No.893 2008/03/27(Thu) 17:46:01
Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; ja-jp) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13
|
|
Re: テキストフレームの拡縮(JS) / 小泉 |
|
|
No.895 2008/03/27(Thu) 19:38:54
Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; ja-jp) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13
|
|
Re: テキストフレームの拡縮(JS) / (-_-メ) |
|
|
|
すみません、もう少しお付き合いください。
処理を施したいフレームは、サイズこそ同じですが、Xの値が それぞれ違いました。昨日書いた1行だと、ある決まった位置の フレームにしか適用できず、あまりに汎用性がないなと(;-_-メ;)
まぁ、条件といっても、それほど多くないので、 今回は条件分だけ、1行スクリプトを書こうかとも思ったんですが、 その条件そのものをスクリプトで書けないものかと考えはじめました。
調べてみると、if文で対処できそうなことがわかりました。
選択しているオブジェクトの座標を調べて 条件1と座標値が一致したら、処理1 条件2と座標値が一致したら、処理2 ……
というような処理です。
で、いったんどんな座標値が返ってくるのか調べてみたところ、 ドキュメント上では整数値なのに、スクリプトで返ってくるのは ものすごい桁数の数値なんです。しかも、なぜかx1、x2の値だけ。 (少数第13位まで返してきた(-_-;)) yはドキュメント上と同じ数値を返しました。
このせいかどうかわかりませんが、スクリプトを書いてみても まともに動いてくれません(ウンともスンともいわない)。
どこか私が勘違いしているような気がするんですが、 アドバイスの程、よろしくお願いします。
|
No.896 2008/03/28(Fri) 11:18:18
Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; ja-jp) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13
|
|
Re: テキストフレームの拡縮(JS) / 匿名A |
|
|
|
>まともに動いてくれません(ウンともスンともいわない)。 こういうときは、書いた物をアップした方が早いです。
|
No.897 2008/03/28(Fri) 11:22:24
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
|
|
Re: テキストフレームの拡縮(JS) / 小泉 |
|
|
|
jsはわかりませんが。
>しかも、なぜかx1、x2の値だけ。
座標がページ単位になっているとこうなると思います。 左ページだと×1。右ページだと×2。 処理前にスプレッド単位の処理にするスクリプトを追加すれば良いと思います。
>ものすごい桁数の数値なんです。 これは仕様と思ったほうがてっとり早いでしょう。 小数点以下を四捨五入する処理がjsにもあるでしょうからそれを使うとか、
(条件1-1)>条件1>(条件1+1)の場合。
のようなif文にするとか
|
No.898 2008/03/28(Fri) 11:41:35
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_2; ja-jp) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13
|
|
Re: テキストフレームの拡縮(JS) / 梅花藻 |
|
|
|
>ドキュメント上では整数値なのに、スクリプトで返ってくるのは >ものすごい桁数の数値
たとえば、x1の小数点以下4桁めを四捨五入して、小数点以下3桁までの数値に丸める x1 = Math.round(x1*1000)/1000.0; (1000倍して小数点以下を四捨五入し、1000で割る) という方法ではどうでしょう。
InDesignの内部で扱う単位系と、表示に用いる単位系の間の換算誤差というものもありますが、それだけでもないような感じでもあります。
ただ、誤差はかなりちいさな値ですので、上記のような形でたぶん大丈夫だったと思います。
|
No.903 2008/03/28(Fri) 17:18:20
Mozilla/5.0 (Macintosh; U; PPC Mac OS X; ja-jp) AppleWebKit/419 (KHTML, like Gecko) Safari/419.3
|
|
Re: テキストフレームの拡縮(JS) / 匿名A |
|
|
|
比較に使うだけなら、わざわざもう一度割らなくっても(^^
|
No.904 2008/03/28(Fri) 18:13:17
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
|
|
Re: テキストフレームの拡縮(JS) / 小泉 |
|
|
|
>比較に使うだけなら、わざわざもう一度割らなくっても(^^
小数点以下3桁とまではいかないまでも、 結構0.5刻みで処理させたい場合があったりするので、 そういう場合は私も梅花藻さんのような手法を使います。
この手のスクリプトを書いていく上では知ってて損はないですよ。
|
No.906 2008/03/28(Fri) 23:28:52
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_2; ja-jp) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13
|
|
Re: テキストフレームの拡縮(JS) / 匿名A |
|
|
|
私の文章から引用なので、私に対するコメントと理解して。
x1 = Math.round(x1*1000)/1000.0; でなくて、 x1 = Math.round(x1*1000); で充分用は足りるということです。 もちろん、0.5刻みでも同じ。
割り算は、2進数が得意な分野ではありません。不要なことはしなくても。
|
No.907 2008/03/29(Sat) 08:38:02
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)
|
|
Re: テキストフレームの拡縮(JS) / 小泉 |
|
|
|
あ、すみません。私が勘違いしているかも。 ASでいうところの。
-- set b to 50.1234 set x1 to 50.123
set b to (round (b * 1000)) / 1000 if x1 = b then beep --
こういう処理をするためかとおもいまして。
|
No.908 2008/03/29(Sat) 11:05:59
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_2; ja-jp) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13
|
|
Re: テキストフレームの拡縮(JS) / 匿名A |
|
|
|
>こういう処理をするためかとおもいまして。
それはあってます。 -- set b to 50.1234 set x1 to 50123
set b to (round (b * 1000)) if x1 = b then beep --
|
No.909 2008/03/29(Sat) 13:16:42
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)
|
|
Re: テキストフレームの拡縮(JS) / 梅花藻 |
|
|
|
x1 = Math.round(x1*1000)/1000.0;
>比較に使うだけなら、わざわざもう一度割らなくっても(^^
もちろん比較するためだけならば、割る必要はないのですが、ここはx1を小数点以下3桁に丸める処理をしているということです。
x1の値が前提としている値と違う、それが小数点以下13桁まであることに起因しているのではないかと思われる。 ならば、小数点以下3桁に丸めてみる。 この1行(ないし2行)を途中に挟むことで、書いたスクリプトの他の場所を弄らずに、考えた通りの動きをするか確認することが出来ます。
そういう意味もあって、x1を1000倍して丸め1000で割り、さらにx1に書き戻しているのです。
|
No.910 2008/03/29(Sat) 21:24:56
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)
|
|
Re: テキストフレームの拡縮(JS) / 小泉 |
|
|
|
梅花藻さんのいっていることを言いたかったのですが、 私がx1とbを逆に書いたからいけませんでした。
|
No.911 2008/03/30(Sun) 01:04:52
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_2; ja-jp) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13
|
|
Re: テキストフレームの拡縮(JS) / PICTRIX |
|
|
|
こんにちは。 双方正しいのではないでしょうか。 処理速度やコードの簡潔さなどを考慮すれば、No.907で匿名Aさんが書いていられる様に この割り算は使わない方がいいのでしょう。 基準にしたい比較する座標値も、最初から1000倍とかにしておけばいいのですから。 ただ「値は1000倍されている」って事を意識しないといけなくなりますが。 なんて事を思ったりしました。。。
|
No.912 2008/03/30(Sun) 09:50:57
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; ja-jp) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13
|
|
Re: テキストフレームの拡縮(JS) / 匿名A |
|
|
|
どうでも書ける部分で、あの文章に突っ込むところじゃないんですよ(^^ 「比較するだけなら」と断ってあるとおり。
で、「比較するだけなら」if文の条件として(割らずに)入れる。 値が必要なら、(割ってから)変数に代入する。
現実には、(今のマシンで、スクリプト程度なら)このコストはそんな高いわけじゃありません。どっちても構わない。
|
No.913 2008/03/30(Sun) 10:53:16
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
|
|
Re: テキストフレームの拡縮(JS) / 小泉 |
|
|
|
確かに「比較するだけなら」必要ないですね。 比較するだけって使い方をあまりしないのでよくわかってませんでした。
|
No.914 2008/03/31(Mon) 15:28:22
Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; ja-jp) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13
|
|
Re: テキストフレームの拡縮(JS) / (-_-メ) |
|
|
|
いろいろ書き込んでいただき、ありがとうございました。
結局、試行錯誤している時間がなくなってしまい、 今回、条件分岐を含めたスクリプトはあきらめて、 条件分だけ、1行スクリプトを書くというゴリ押しで(笑)
それでも手作業でやるよりははるかに速くて、間違いもない。 スクリプトって素晴らしいですね。
|
No.933 2008/04/02(Wed) 18:39:09
Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; ja-jp) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13
|
|