【解決】Illustratorスクリプトで選択をもっと速くしたい!

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る
高速選択スクリプト アイキャッチ図版

Illustratorのスクリプトで,条件に当てはまるオブジェクトをすべて選択するという処理をしたいことがよくあります。でも,普通にやるとIllustratorがクラッシュしたり,動作が遅すぎて固まることがしばしば。撃墜王の称号をつけたくなりますね。

そこで今回は,Illustratorスクリプトでオブジェクトの選択を速くする方法を紹介します。スクリプトを書かない人には何の役にも立たないのでご注意ください。

例として,縦線だけを選択するスクリプトを挙げます。pathItemが1000個あるうち,以下のように縦の線だけを選択します。

高速選択スクリプト アイキャッチ図版

selectedをtrueにする➡8482ms

普通に書いたらこのように,条件にあてはまる線のselectedをtrueに変える処理を書くのではないでしょうか。

このコードを私の環境(Mac OS 10.10,メモリ8GB,Illustrator CS6)で試したところ,8482msかかりました。単位はミリ秒で,1000分の1秒を表します。数値が小さいほど速いことを意味します。

selectionに配列を渡す➡8579ms

selectedを1つひとつ切り替えるのでなく,selectionに丸ごと配列を渡します。私はselectedをいちいち切り替えるより速いと思っていたのですが,測ってみたら大して変わらないどころかちょっと遅くなってしまいました。書くのは楽です。

「オブジェクトを選択」アクションを利用➡119ms

アクションにはメモ欄に同じ文字が入っているオブジェクトを選択する機能があり,CS6以降ではJavaScriptからでもそれを利用できます。メモは属性パネルの下のほうにあるテキストフィールドで付与でき,スクリプトからはPageItem.noteにアクセスすることで編集可能です。選択はアクションパネルメニューの「オブジェクトを選択…」アクションで実現します。

これは速さが桁違いです。selectionに配列を渡す方法に比べて70〜80倍くらい高速です。
ちなみに,昔のIllustratorには選択メニューに[共通:メモ]があった気がするのですが,今は見当たりません。まあ誰も使ってなかったのでしょうね。

ロックして全ロック解除➡79ms

「すべてをロック解除」を実行したとき,ロックされていたオブジェクトすべてが選択されます。これを利用し,一旦スクリプトで条件に当てはまるオブジェクトをロックしてから全ロック解除することで,選択範囲を変更するという作戦です。

selectionに配列を渡す方法に比べて100倍くらい速くなりました。

ただし,スクリプトとは関係なくすでにロックされていたオブジェクトがある場合,選択範囲がおかしくなります。ロックされているオブジェクトが完全に把握できているなら使える方法ですね。

ちなみにロックでなく隠すを利用した場合,84msくらいでした。ほとんど変わりないですが,ややロックのほうが速い印象です。見た目を変えなくていい分ロックのほうが速いのかもしれません。

結論

使っているバージョンが対応している限り,なるべくスクリプトに地道な選択をさせず,doScript()やexecuteMenuCommand()を使ったほうが良い。

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

コードはこちら

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

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

SNSでもご購読できます。

広告

コメントを残す