フレームサイズで条件分岐
フレーム幅を条件にした処理をしたいときの話。
たとえば幅60mmのテキストフレームだけにある処理をしたいよーというとき、まず思いつくのはこんな書き方ではないでしょうか。
var myTF = app.activeDocument.textFrames; for (var i=0; i<myTF.length; i++) { var y1 = myTF[i].visibleBounds[0]; //左上y var x1 = myTF[i].visibleBounds[1]; //左上x var y2 = myTF[i].visibleBounds[2]; //右下y var x2 = myTF[i].visibleBounds[3]; //右下x if (x2-x1 == 60){ なんらかの処理 }
でもこの書き方だと、条件に合致するにも関わらず処理が行われない場合が。ナゼ?
それは、InDesignの画面上ではたしかにW=60mmですが、InDesignの内部的には59.99999……
みたいな寸法になっていることがあるからなのです(ESTKのデータブラウザで確認可)。
なので、if文をこんな感じで書くと、フレームの寸法を条件化することができマス。
if (x2-x1 > 59.9 && x2-x1 <60.1){ なんらかの処理 }
roundを使って四捨五入するのが本筋なのかもしれませんが、この方が楽なのでこっちを使ってます。
もっとスマートな書き方があれば教えてくださいませ…