画像入れ替えスクリプトを作ろう① ~座標の入れ替え その①~
それでは、選択した2つの画像フレームを入れ替えるスクリプトの記事を書いていこうと思います。
処理はこんな感じを想定しています。
① 画像が入ったフレームを2つ選択する
② スクリプトを実行すると、2つの画像の位置とサイズが入れ替わる
③ オブジェクトスタイルは元のフレームに残す
④ 処理後、画像をフレームにフィットさせる(縦横比は固定)
⑤ 幅が大きい方の画像は背面に送る
⑥ 選択しないで実行、もしくは3つ以上選択アイテムがある場合は警告を出す
⑦ 画像フレーム以外が選択されている場合にも警告を出す
⑧ 元に戻したいときにはアンドゥ一発で直る
①はスクリプト外の操作なので、今回は②の処理を何回かに分けて説明していきます。
「位置とサイズが入れ替わる」とありますが、フレームの中身はそのままに、たがいの位置をそっくり入れ替えるという処理です。
さながら中身が入れ替わったかのように見えるわけですが、実際には「位置」つまり「座標」を入れ替えているだけなので、リンク情報には影響がありません。
前編ではいきなりスクリプトの書き方を紹介し、後編では説明しきれなかった部分を補いつつ、より詳しい説明を書こうと思います。
なので「前編だけで頭がいっぱいだよー」という方は、少し時間を置いてから後編を読んでもいいかもしれません。
まず、InDesignの座標は「visibleBounds」という命令文で取得できます(「geometricBounds」というのもありますが、のちに書きます)。
InDesign上に適当にフレームを作成して選択し「visibleBounds」で次のように選択アイテムを調べると…
var obj = app.selection[0]; var objPosi = obj.visibleBounds; alert(objPosi[0])・・・参考図の① alert(objPosi[1])・・・参考図の② alert(objPosi[2])・・・参考図の③ alert(objPosi[3])・・・参考図の④
「var objPosi = obj.visibleBounds;」とすることで、変数「objPosi」の中に、フレームの四隅の座標が入ります。
「alert(objPosi[数字])」とすることで、数字(インデックス番号)に対応した座標がアラートされます。
InDesignを普通に操作するときは、フレームは9つの座標点を持っていますが、スクリプトの場合は通常4つの座標点で指定するわけです。
visibleBoundsで取り出した座標は、次の順序で並んでいます。
[0]は左上のx座標
[1]は左上のy座標
[2]は右下のx座標
[3]は右下のy座標
※順序が間違ってました。正しくは↓の順序です。
[0]は左上のy座標
[1]は左上のx座標
[2]は右下のy座標
[3]は右下のx座標
[参考図]
スクリプト上でもこんなふうに書いてみました。
var obj = app.selection[0]; var objPosi = obj.visibleBounds; alert( "左上のy座標は"+objPosi[0]+"\r"+ "左上のx座標は"+objPosi[1]+"\r"+ "右下のy座標は"+objPosi[2]+"\r"+ "右下のx座標は"+objPosi[3]+"\r" )
小数点以下がすごいことになっていると思いますが(笑)。
~次回に続きます~