【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とかが入り込んでいる可能性があります。
この記事が気に入ったらサポートをしてみませんか?