Practice makes Perfect !

ExtendedScript素人です。同じ境遇の方、一緒に脱素人を目指しましょう!

第1引数とか、第2引数とか。

オブジェクトの移動がわからなくて、つまづく…

InDesignのExtendedScriptを勉強し始めた当初は、とにかくネットでたくさんの情報を調べました。ネットに上がっているものをダウンロードしてESTKで開いて、どういう作りになっているのか考えて、それでもわからなくて…
最初はそんなことの繰り返しでしたが、やっぱり基本的なことから勉強したいと思ったところ、良書がいろいろと出ていることがわかりました。勉強させていただいている本に関してはいつかはまとめてみようかと思いますが、その中でも一番最初に読ませていただいたのは大間知 聡 様の著作「イチからわかる! InDesign JavaScript 指南書」でした。
cs5.booth.pm
こちらの本についてもいつか詳しくご紹介できたらと思います。
また、別冊「入門・基礎編 演習ドリル」と「問題の解答」も読ませていただいております。

勉強を始めて、だいぶ基本的なことが分かってきたかなと思ってた頃に、このドリルの「オブジェクトを指定した距離だけ動かしなさい」という問題を間違えたのです。

例えば「現在のドキュメントの最初の長方形を10ミリ動かす」という問題があったとすると、私は次のように書きました。

var rct = app.activeDocument.rectangles[0];
rct.move(["10mm", "0mm"]);

しかし、これを実行すると長方形がX:10mm, Y:0mmの位置に移動してしまいました。


あれ…何故ですか…?


なんせ素人ですので、こういうところでつまづくわけです。
第1引数に座標[x, y]を入れるときは「移動先の座標」を指定する場合で、「移動距離」を指定したい場合は、第1引数にundefined、第2引数に移動距離[x, y]を入れなければなりません。

つまり、正しくは次のように書かなくてはなりません。

var rct = app.activeDocument.rectangles[0];
rct.move(undefined, ["10mm", "0mm"]);

この第1引数のundefinedがあるかないかで結果が変わってくるんですね。
私はこれをよく理解していなかったのです。
まあ今でもそんなに理解していないですが…

上記に関しては中綴製作所様のサイトに詳しく書いてありますのでこちらを読まれたら良いと思います。
nakatoji.lolipop.jp


また以前に長方形の描画の仕方をまとめたのですが、実はadd関数にも第1引数から第4引数まであるとは知りませんでした。


第1引数 オブジェクトを追加したいレイヤー
第2引数 追加位置
第3引数 追加位置の基準となるオブジェクト
第4引数 プロパティ


こちらも詳しく中綴製作所様のサイトに書いてあります。
nakatoji.lolipop.jp


単純に、長方形を描くだけなら…

app.activeDocument.rectangles.add();

これだけで作成されます。
位置と大きさを指定して作成するにしても

app.activeDocument.rectangles.add(undefined, undefined, undefined, {geometricBounds:[0,0,50,50]});

と書かなくても

app.activeDocument.rectangles.add({geometricBounds:[0,0,50,50]});

でも作成されますし…。
この辺はまだまだ勉強しなくてはいけないと思っています。

さて、こんな簡単なスクリプトでも私はショートカットを設定して使っています。移動したい距離が決まっているなら変形パネルで調整するよりも速くて便利です。

というわけで、今回も簡単なスクリプトのご紹介でした。
選択オブジェクトを指定した距離分、移動するスクリプト

var selObj = app.activeDocument.selection[0];
selObj .move(undefined, ["10mm", "0mm"]);
//[x, y]に移動距離を指定