見出し画像

【Illustrator JavaScript】ExtendScriptで直線を描いてガイド化する

シリーズ「任意のサイズの新規ドキュメントを作って必要なガイドを配置してくれるスクリプトが欲しい」第二回です。

第一回はこちら

一年空きましたが実はまだ必要なスクリプトが作れていなかったので、改めて続きを作っていきます。
今回はガイドを引いていきます。

Photoshopのガイドは横一直線か縦一直線しかないので簡単に引けるんですが、Illustratorのガイドはどんな形でもガイドに出来るので、「先ずパスを作る」「それをガイドにする」という手順で作らないと行けません。

パスを作成する

var start_coordinate = [ 0, 0 ];
var end_coordinate = [ 100, 100 ];

var target_document = app.activeDocument;
var path_item = target_document.pathItems.add();
path_item.setEntirePath([start_coordinate,end_coordinate]);

とりあえず今回は直線なので、2点の座標を渡して直線を描かせます。
手順があんまり直感的でないのですが、

1・まっさらなpathItemオブジェクトを作成する
2・pathItemオブジェクトにアンカーポイントの座標を渡す
3・直線のできあがり(三つ四つと座標を渡せば複雑なパスも書けるはず)

で、パスを書くことが出来ます。

座標の渡し方

座標は2つの数値を持つ配列で渡します。

[ x座標 , y座標 ]

という書式で、数値(Number)型の配列を渡すだけでOKです。

ただしこのとき、ドキュメントの単位の設定がミリだろうがセンチだろうがパイカだろうが、スクリプトからはピクセル単位の数値を渡す必要があります。UnitValueは渡せません。(なんでだよ!)

また、座標の原点はドキュメント上の座標の原点になります。
基本的には「1枚目のアートボードの左下を[0,0]として、数学のグラフと同じように、上に行けばyが増え、右に行けばxが増える」という形式になりますが、アートボード作る時に座標指定したり、アートボードをアートボードツールで動かしたりしているとズレるはずです。

なので、現実的には基準にするオブジェクトやアートボードの座標を取得して、その座標をrulerUnitに合わせてpxに変換して、相対的な座標を計算して渡して上げるか、もしくはアートボード作成から一気にスクリプトで処理するかになると思います。

取得したオブジェクト等のサイズの、単位を調べる

じゃあオブジェクトの座標やサイズを取得して云々やりましたが、これってmmなのpxなのptなのinchなの???ってなると思います。
(ドキュメントの新規作成から一気にやる場合、ドキュメントの単位を指定して作ることが出来るので、「まあmmが来るやろ!」という実装も出来ますが……)

と言うわけで調べます。

var ruler_units = app.activeDocument.rulerUnits

これで、現在のドキュメントの単位が何になっているかが分かります。
とりあえずざっくりはこれで取れます。

が、線の太さとかテキストのサイズとかだけ別の単位使ってたりしますよね。その辺ももうちょっと詳しく取りたいときは、「getBooleanPreference」というメソッドについて検索すると幸せになれます。
(とても幸せになれる記事を見つけたのですが見失ってしまったので、とりあえず手がかりだけ書き残しておきます)
(単位の設定を取りたい時は「getIntegerPreference」を使うんですが、Booleanで調べた方が記事が充実しているように見えるので)

単位が分かったら、後は変換に必要な定数を使って掛けたり割ったりしてpxに変換してあげればOKです。

ガイド化する

パスが書けたらガイドにします。

path_item.guides = true;

先ほど作ったpath_itemオブジェクトのguidesプロパティをtrueに変更すれば、そのパスオブジェクトはガイドになります。それだけ。おしまい。

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