DTPab

印刷やデザイン、アドビ製アプリやスクリプトなど、雑多な技術ブログ

add()メソッドへの引数の渡し方

p-makes-p.hatenablog.com

くれそんさんの記事にコメントを書いたので、別のベクトルでちょっとだけ補足。

例えば、Rectangles.add()メソッドなんかでフレームを生成するときに、そのとき与えたい情報は一度に与えてしまったほうがいいですよ、という話。

function MakeFrame(){
  var slagOffset = parseInt(result, 10);
  var actPage = app.activeWindow.activePage;
  var matrix = [
    actPage.bounds[0] - slagOffset,
    actPage.bounds[1] - slagOffset,
    actPage.bounds[2] + slagOffset,
    actPage.bounds[3] + slagOffset,
  ];
  var rct = actPage.rectangles.add(
    {
      geometricBounds: matrix,
      contentType: ContentType.graphicType
    }
  );
  rct.select();
}

こうすることで、フレームの生成が丸ごとUndo1回で済みます。

蛇足

座標やオブジェクトの大きさを扱うときは、格納した数値が「長さ・大きさ」を示すものか「座標」を示すものか、意識しやすくするために、あまり計算式を介さず必要な値を必要な場所で最小限に呼び出すのがおすすめです。

add()メソッドに引数を渡す際、オブジェクトなら{key: value}の形で渡せるし、入れ子の場合は{key1: {key2: value}}という書き方で対応します。
例えばこんな感じ。

function genTextFrame() {
  var page = app.activeWindow.activePage;
  page.textFrames.add({
    geometricBounds: [0, 0, 50, 50],
    contents: "テキスト",
    transparencySettings: {
      blendingSettings: {
        blendMode: BlendMode.MULTIPLY
      }
    }
  });
}

こうすると、テキストフレームの透明効果を「乗算」に設定できます。

Undoにまつわるトラブルは、スクリプトを使ってもらう側に起こりやすいので、作る際はUndoしたらどうなるかな? まで気を遣ってあげられるといいなと思います。