2008年12月20日土曜日

InDesignスクリプトのArrayを拡張してみる

選択範囲の大きさを求める関数を、InDesignのArrayに拡張してみるテスト。
Arrayのprototypeに関数を設定してしまえばよい。
Array.prototype.visibleBounds=function(){
var ary=this[0].visibleBounds;
if(ary){
for(i=1;i<this.length;i++){
var follow=this[i].visibleBounds;
if(ary[0]>follow[0]) ary[0]=follow[0];
if(ary[1]>follow[1]) ary[1]=follow[1];
if(ary[2]<follow[2]) ary[2]=follow[2];
if(ary[3]<follow[3]) ary[3]=follow[3];
}
}
return ary;
};

Array.prototype.geometricBounds=function(){
var ary=this[0].geometricBounds;
if(ary){
for(i=1;i<this.length;i++){
var follow=this[i].geometricBounds;
if(ary[0]>follow[0]) ary[0]=follow[0];
if(ary[1]>follow[1]) ary[1]=follow[1];
if(ary[2]<follow[2]) ary[2]=follow[2];
if(ary[3]<follow[3]) ary[3]=follow[3];
}
}
return ary;
};

選択したもの全体の大きさを出したいときは、選択して
var objs=app.activeDocument.selection;
$.writeln(objs.visibleBounds());
$.writeln(objs.geometricBounds());

で、visibleBounds,geometricBoundsの形でとれる。
JavaScriptは不思議だー。

2 件のコメント:

初心者 さんのコメント...

参考になりました。
ありがとうございます。

kanemu1117nc さんのコメント...

いえいえ、どうもです。
なにか間違ってること書いてたら教えてください。