コモノExtendScript100本ノック

超初心者のDTPオペレーターが週にひとつスクリプトを書くブログ

012.【ID】選択した2つのオブジェクトの距離を取得

書いたコード

#targetengine "getDistance"
var i = 0;
var doc = app.activeDocument;
var selObjs = doc.selection;
var resultX = "";
var resultY = "";

if (selObjs.length !== 2) {
  alert("2つのオブジェクトを選択してください");
} else {
  // X軸の差分を求める
  var x1_1 = selObjs[0].geometricBounds[1];
  var x1_2 = selObjs[0].geometricBounds[3];
  var x2_1 = selObjs[1].geometricBounds[1];
  var x2_2 = selObjs[1].geometricBounds[3];
  if (x1_2 < x2_2) {
    leftObj = selObjs[0];
    rightObj = selObjs[1];
  } else {
    leftObj = selObjs[1];
    rightObj = selObjs[0];
  }
  if (leftObj.geometricBounds[3] > rightObj.geometricBounds[1]) { // 重なっていたら 
    resultX = "--";
  } else {
    resultX = rightObj.geometricBounds[1] - leftObj.geometricBounds[3];
  }
  // Y軸の差分を求める
  var y1_1 = selObjs[0].geometricBounds[0];
  var y1_2 = selObjs[0].geometricBounds[2];
  var y2_1 = selObjs[1].geometricBounds[0];
  var y2_2 = selObjs[1].geometricBounds[2];
  if (y1_2 < y2_2) {
    topObj = selObjs[0];
    bottomObj = selObjs[1];
  } else {
    topObj = selObjs[1];
    bottomObj = selObjs[0];
  }
  if (topObj.geometricBounds[2] > bottomObj.geometricBounds[0]) { // 重なっていたら 
    resultY = "--";
  } else {
    resultY = bottomObj.geometricBounds[0] - topObj.geometricBounds[2];
  }

  // ウィンドウ表示
  var myDlg = new Window("palette", "距離");
  var main = myDlg.add("group {alignChildren: 'left', orientation: 'column'}");
  var Xrow = main.add("group");
  var Xtitle = Xrow.add("statictext", undefined, "X: ");
  var Xtxt = Xrow.add("edittext", [0, 0, 110, 20], resultX);
  var Yrow = main.add("group");
  var Ytitle = Yrow.add("statictext", undefined, "Y: ");
  var Ytxt = Yrow.add("edittext", [0, 0, 110, 20], resultY);
  myDlg.show();
}

メモ

積み残し

参考