:note

グループ化せずにグループっぽく座標を取得

InD-baord 「 選択したボックスをドキュメントサイズの左右センターに移動したい

をみて、複数オブジェクトの全体の座標とか取るのにグループ化するの、レイヤー違ってたらまとめられちゃってイヤだなーと思ったのでちょっと試したメモ。

(kanemuさんが似たようなことをしていたような気がするのだけど気のせいかな)

そういえば、doc.veiwPreferences.rulerOrigin = RulerOrigin.PAGE_ORIGIN の見開きページで左ページオブジェクトが完全に右ページにいかない限り、●●Boundsはページ幅より大っきくなるんだ(ページ幅が210mmでも 右座標 = 250mmとかになる)、RulerOrigin.SPREAD_ORIGIN にする必要は全然ないかも。よく考えてみたらあたりまえだ。

でも変形パネルだと PAGE_ORIGIN のときは、ちゃんと座標が右ページ基点にリセットされちゃう。 そっか…

グループ化せずにグループっぽく座標を取得 /images/2010/11/group_bounds.png
var doc = app.documents[0];
var dW = doc.documentPreferences.pageWidth;
var dH = doc.documentPreferences.pageHeight;

var sel = doc.selection;
var sel_bon = get_group_bounds(sel, 'g');
var sel_centr = [
  sel_bon[1]+(sel_bon[3]-sel_bon[1]) * 0.5, 
  sel_bon[0]+(sel_bon[2]-sel_bon[0]) * 0.5
  ];
for (var i=0, iL=sel.length; i < iL ; i++) {
  sel[i].move(undefined, [dW*0.5-sel_centr[0], dH*0.5-sel_centr[1]]);
};

/**
 * get bounds of selections
 * 
 * @param {Object} sel Collection of object
 * @param {String} gv 'g':geometricBounds, 'v':visibleBounds
 * @returns {Array} [top, right, bottom, left]
 */
function get_group_bounds (sel, gv) {
  var t = [], l = [], b = [], r = [];
  for (var i=0, iL=sel.length; i < iL ; i++) {
    var bo = gv === 'g' ? sel[i].geometricBounds : sel[i].visibleBounds;
    t.push(bo[0]);
    l.push(bo[1]);
    b.push(bo[2]);
    r.push(bo[3]);
  };
  var groupBon = [
    t.sort(function(a,b){return a > b})[0],
    l.sort(function(a,b){return a > b})[0],
    b.sort(function(a,b){return a < b})[0],
    r.sort(function(a,b){return a < b})[0]
  ];
  return groupBon;
}
 
comments powered by Disqus
back to top