【解決】スクリプトでのアクション動的生成を簡単にしたい!

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る
スクリプト即時生成アイキャッチ

Illustratorには,手動では使えるもののスクリプトだとコントロールできない機能がたくさんあります。例えば「ブレンド」「段組設定」などですね。

それらを自由に操作するため先人たちは,アクションのソースコードをスクリプトで即時生成・編集して実行する,という技を編み出しました。

でもその技術を使うにはそれなりの知識を持っている必要があります。また,相応の知識を持っていても実際に使おうとすると結構面倒そうです。「これなら諦めて手作業にしたほうが速いかな」なんて予感がよぎり,憂鬱になってしまいますよね。

そこで今回はアクションの即時生成と実行をサポートするJavaScriptのfunctionを紹介します。コピー&ペーストで使えることを目標に書いていますので,読んだ後はある程度簡単に即時生成をコントロールできるようになると思いますよ。
なおスクリプトを書かない方は,読んでもまったく理解できないと思いますのでご注意ください。

まずは参考サイトです。即時生成のことを初めて知った方は手抜きLabさんの記事を読めば雰囲気がつかめると思います。

ではスクリプトの紹介に入ります。functionのソースコードは最後に載せることにして,使用方法を中心にお伝えします。

アクションのソースコードの生成・編集

まずアクションを文字列として記述するわけですが,複数行の文字列を書くには文字を+演算子で何回も連結するなど,何らかの工夫が必要です。とても大変ですね。そこでtemplateというfunctionを作りました。以下のように記述することで,改行を含む文字列を見た目通りに表現できるようになります。

このfunctionでは${ }という形式で式展開ができるようにしてあります。例えば以下のようにして使います。

さて,Illustratorアクションのソースコードではアクション名などを特殊な暗号のようなもので表しています。これらを編集するためustringというfunctionを作りました。以下のようにして使います。

実際にアクションのソースコードを作ってみると次のようになります。パスオブジェクトの中心点を非表示にするアクションです。例では特に必要なかったのでustringは使っていません。

アクションの読み込みと実行

次に,作ったソースコードをファイルとして書き出します。それをapp.loadActionでアクションとして読み込み,実行することになります。

ここで問題になるのはエラー処理です。テキストを書き出したりアクションを実行する過程でエラーが起きた際には,書きかけのファイルを安全に閉じたり,いらなくなったファイルをゴミ箱に入れたりといった雑務が山ほど出てきます。エラーなしで正常に終了する場合もまた,同じような雑務に追われます。

今回作ったtempActionというfunctionではそれらを全自動でやります。以下のように使ってください。actionCodeにアクションのソースコードが記録されている前提です。

これは一見して何をやっているかわからないと思いますが,ソースコードを解析してIllustratorに読み込み,アクションセット内の1つ目のアクションを実行しているところです。
セット名やアクション名はfunction内で自動取得されるため,スクリプトを書く人間はそれらを覚えておく必要はありません。また,ループの中で何度もアクション生成と破棄を繰り返すような無駄を避けられるよう,ブロック構文にしてあります。

アクション実行は次のように表すこともできます。

それでは実際に使えるスクリプトを用意しました。選択したオブジェクトの中心点を非表示にするスクリプトです。

これを改造すればもうアクション生成は自由自在です!

これでまた少し仕事が速くなりました。今日もさっさと仕事を切り上げて好きなことをしましょう!

コードはこちら

2016.07.21 追記 ここから

あるふぁ(仮)さんのアドバイスに基づき追記します。
templateの式展開は,templateを呼び出したスコープでなくtemplateを定義したスコープで実行されるため,ローカル変数が展開できないという問題があるようです。
以下のように変えるとローカル変数を呼び出せるようになる,と教えていただきました。

また,この機能はjsxbinで保存すると使えなくなってしまいます。ご注意ください。

2016.07.21 追記 ここまで

2017.12.21 追記 ここから

すっかり書くのを忘れていたのですが,ExtendScriptでは '''シングルクォート3つ''' や """ダブルクォート3つ""" で囲むと複数行の文字列を記述できます。
変数の展開は下のような形式で表現します。

せっかく作ったtemplate機能も必要なくなってしまいました……

2017.12.21 追記 ここまで

このスクリプトは無断で転載・配布・編集してもかまいませんが,無断で販売することは禁じます。
使用により生じたあらゆる損害について,私どもは責任を負いません。
スクリプトやファイルのダウンロードを行った時点で,上記の規定に同意したとみなします。

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。

広告

コメントを残す