見出し画像

【Illustrator JavaScript】アートボードのサイズを変えるのと、an Illustrator error occurred: 1346458189 ('PARM')について

シリーズ「任意のサイズのアートボードを作って必要なガイドを引いてくれる奴が欲しい」第三回です。
前回はこちら。

今回はアートボードのサイズを変更します。
実は「任意のサイズのアートボード」は複数欲しいのですが、ドキュメント新規作成時にアートボードの仕様を決める方法ですと、同じサイズのアートボードを複数作ることしかできないので、アートボードを作ってからサイズを変えることにします。

アートボードのサイズを変える

ちょっとコツが要ります。

// 新しいアートボードの、左上と右下の座標を、[左上のX, 左上のY, 右下のX, 右下のY]の順に指定する
var x1 = 0;
var y1 = 0;
var x2 = 100;
var y2 = 100;
var new_rect = [x1, y1, x2, y2];

// サイズを変更したいアートボードを取得する
var target_board = app.activeDocument.artboards[0]

// target_boardのartboradRectプロパティにnew_rectを代入
target_bord.artboardRect = new_rect;

これで、任意のサイズにアートボードをリサイズできます。
ドキュメント読むといきなり「Rect」を渡せって書いてあってRectが何かの説明が見当たらない(下の方にあるサンプルコードとか見れば書いてあるのかもしれないけど……)のでちょっと戸惑いますが、数値4つ入れた配列渡せばOKです。

このとき、数値は全てpxで渡します。

新しいアートボードのサイズを計算する

こっちの方が大変です。
「何でも良いからとにかくこの座標でこのサイズで!」って決め打ちで変更出来るなら良いんですけど、大体アートボードのサイズ変えたいときって「今あるアートボードを」「〇pxの大きさに変更したい」みたいな時じゃないですか。それを計算するロジック作るのがまあまあ面倒くさかったです。

// 変更するアートボードを取得
var target_board = app.activeDocument.artboards[0]

// 変更したいサイズを定義(px単位で)
var new_w_px = 500;
var new_h_px = 300;

// 現在のアートボードの左上と右下の座標を取得する
// このとき、ドキュメントの単位設定が何だろうが、座標はpxで取れる(多分)
var now_target_rect = new Rect(target_bord.artboardRect);

// 取得した座標からアートボードのサイズを求める
var x1_px = now_target_rect[0];
var y1_px = now_target_rect[1];
var x2_px = now_target_rect[2];
var y2_px = now_target_rect[3];
var now_w_px = x2_px - x1_px;
var noew_h_px = y1_px - y2_px;

// 横方向の増加量と、縦方向の増加量を求める
var w_increment = new_w_px - now_w_px;
var h_increment = new_h_px - now_h_px;

// 縦横方向の増加量をそれぞれ二等分して、現在の座標から足し引きする
var new_x1 = x1_px - (w_increment / 2);
var new_y1 = y1_px + (h_increment / 2);
var new_x2 = x2_px + (w_increment / 2);
var new_y2 = y2_px - (h_increment / 2);

// 新しいRectを作成する
var new_rect = [new_x1, new_y1, new_x2, new_y2];

// アートボードサイズを変更する
target_bord.artboardRect = new_rect;

ドキュメントの単位設定がmmなので、座標もmmで取れるのかなーと思ったらpxで取れてました。
また、Illustratorの画面上の「情報」タブで表示される座標と、Y軸のプラスマイナスが逆転してるっぽいです。ややこし。

座標の計算周りを疑似クラスに押し込んでしまうと便利

アートボードサイズの情報って、artboardRectで取れる座標しかなくて、単純にwidthやheightを取得することができないし、インデックスが直感的でないので、直感的に操作できる疑似クラスを作ってしまうと便利です。

function Rect(rect){
    // [x1,y1,x2,y2]の配列を受け取って操作しやすくする
    if(rect.length != 4){throw Error("Rectを生成するのには要素数4の配列が必要です")}
    this.x1_px = rect[0];
    this.y1_px = rect[1];
    this.x2_px = rect[2];
    this.y2_px = rect[3];

    this.w_px = this.x2_px - this.x1_px;
    this.h_px = this.y1_px - this.y2_px;
}

artboardRectで取得できる配列に、わかりやすいインデックスをつけてやって、あとは大きい方から小さい方引いてwidthとheight求められるようにしてあるだけの簡単な疑似クラスですが、作っておくと後がとても楽です。

ExtendsScriptで疑似クラスを使う方法についてはこちらの記事で。

an Illustrator error occurred: 1346458189 ('PARM')が出る場合の対応

このエラー、ちょっと調べた感じだと色々なところで発生しうるみたいで、正体不明のエラーとして恐れられています。イラレの再起動で直る場合もあるようです。
が、今回のアートボードリサイズの過程で発生する場合、こいつの意味する所は「Rectとして渡した配列に格納された数値の中身が変」です。
Rectは[左上のx座標, 左上のy座標, 右下のx座標, 右下のy座標]の順番で与える必要がありますが、この順番で解釈しようとした時に、左上のY座標より右下のY座標の方が大きくなっている、とかがあるとこのエラーが出るようです。

an Illustrator error occurred: 1095724867 ('AOoC')が出る場合

こっちが出た場合、どこかでRectの中身にNaNとかundefinedとかが入り込んでいる可能性があります。

この記事が気に入ったらサポートをしてみませんか?