忍者ブログ

ぼんぷろぐ

InDesignとかイラレとかのスクリプトよもやま話

新しいブログに引っ越しました。

こちらのブログはもう更新しませんが、コメント欄は生きてますので疑問、ご指摘などありましたらどうぞ。

[InDesign]
フレームを選択すると画像がセンタリングされてるか表示してくれるスクリプト

画像フレームを選択すると、中の画像がフレームの縦横中央にそれぞれ配置されてるかどうかをパレット(※1)に表示してくれるスクリプトです。

※1 パレットとはScriptUIで作るウインドウのうち、常に親アプリのウインドウより手前に表示され、アプリをモーダル(入力待ち)状態にはしないものです。「ドッキング可能なパネル」ではありません。



AJABONさんのお題にのっかって作ってみたものです。AJABONさん自身がスクリプト書きなので、必要な要素は適宜書き足して使ってくれるだろうということでかなりシンプルな作りになってます。実用にするなら複数選択時の処理とか中身の画像を選択したときの処理とかを追加しないと使いづらいでしょう。

そんな中途半端なスクリプトですが、「選択アイテムに関する情報をパレットに表示するスクリプト」の例として見るとかなり応用範囲が広いし、それ系のスクリプトが公開されてるのを見たことがないのでせっかくだから記事にしておきました。

#targetengine "testestest"
var w0=new Window("palette");
var tate=w0.add("statictext",undefined,"縦:?")
var yoko=w0.add("statictext",undefined,"横:?")
var ev0=app.addEventListener("afterSelectionChanged", function(ev){
   try{
    var sel=ev.target.selection;
    if (sel.length==1 && sel[0].hasOwnProperty("graphics")  && sel[0].graphics.length==1){
        var c0=checkCenter(sel[0]);
        tate.text=c0[0]?"縦:◯":"縦:×";
        yoko.text=c0[1]?"横:◯":"横:×";
    } else {
        tate.text="縦:?";
        yoko.text="横:?";
    }
    }catch(e){}
})
w0.onClose=function(){ev0.remove()}
w0.show()
function checkCenter(frame){
    var g0=frame.graphics[0];
    var vb1=frame.visibleBounds;
    var vb2=g0.visibleBounds;
    return [Math.pow((vb1[2]+vb1[0])-(vb2[2]+vb2[0]),2)<0.01,Math.pow((vb1[3]+vb1[1])-(vb2[3]+vb2[1]),2)<0.01];
}


ちょっと解説

1行目
#targetengine "testestest"
スクリプトが実行されるエンジンの名前を指定しています。名前はなんでもいいです。InDesignではターゲットエンジンを指定しないとパレットがすぐに消えてしまうため必要です。

5行目
var ev0=app.addEventListener("afterSelectionChanged",…
"afterSelectionChanged"は選択物を変更したときとか、なにも選択してない状態からなにかを選択したときに発生するイベントです。選択物を移動させるなど、選択物の状態を変えるようなことを行ったときにも発生させようと思ったら、同じ内容のイベントリスナーを"afterSelectionAttributeChanged"に対しても作ってやります。

7行目
var sel=ev.target.selection;
ここでevはEventオブジェクト、ev.targetはLayoutWindowオブジェクトになります。InDesignではレイアウトウインドウごとに別々のものを選択できるので、"afterSelectionChanged"イベントが発生するのはレイアウトウインドウです。それが親オブジェクトのドキュメント→アプリケーションへとbubble(伝搬)するため、appに作ったはずのイベントリスナーが発動します。

18行目
w0.onClose=function(){ev0.remove()}
パレットを閉じたときにイベントリスナーも削除されるように仕込んでいます。大事です。
PR

コメント

お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字

プロフィール

kawamoto_α
(あるふぁ(仮))


InDesignで新聞組版のようなことをしています。

ツイッタ

※ブラウザによっては当ブログからDLしたzipファイルが拡張子なしになることがあるようですが、.zipを補って開いてください。



イラレ用トーンカーブスクリプト(¥1500)



クロソイド式角丸長方形スクリプト(¥500)
Illustrator用
InDesign用



イラレスクリプトをキーボードショートカットで実行するやつ(Win用)