アピアランス(LiveEffect)プラグインの検証

Illustrator SDK では、オリジナルの「効果」(アピアランス、LiveEffect)を作成することができます。

効果をIllustratorに登録するには、以下のような諸々の属性を設定する必要があります(AILiveEffectData)。

  • self : プラグイン・オブジェクト
  • name : 一意の識別名称
  • title : アピアランスパネルに表示される名称
  • majorVersion, minorVersion : プラグインのバージョン
  • preferAsInput : 処理対象の種類
  • styleFilterFlags : 効果の種類

また、メニュー項目に追加するために、別途以下の属性を設定する必要があります。(AddLiveEffectMenuData)。

  • category : 効果の分類名。
  • title : メニューに表示される名称。(categoryがNULLでない場合、categoryのサブメニューになる。)

SDKのリファレンスには、name について「一意の(unique)」と書かれているだけで、それ以上の規定やガイドラインはなさそうです。

もし nametitle が他の効果とかぶってしまったらどうなるのでしょうか。
というわけで、

2つの効果プラグインを作ってみました。

  • MyEffectA.aip - パスを五角形に変更する。name = MyEffectA, title = MyEffect
  • MyEffectB.aip - パスを三角形に変更する。name = MyEffectB, title = MyEffect

これらをプラグインフォルダに同居させると、効果メニューには MyEffect が2つ表示されます。

f:id:shspage:20200417080442j:plain

それぞれを選択するとそれぞれの効果が適用されます。title がかぶっても、メニューが分かりにくくなる以外の問題はなさそうです。

f:id:shspage:20200417080504j:plain

続いて、プラグインフォルダに MyEffectA.aip のほうだけを入れた状態で、円形のパスに MyEffect を適用して五角形にしたうえで、標準の「ジグザグ」効果を追加します。

f:id:shspage:20200417151139j:plain

これをいったん保存し、Illustratorを終了します。

MyEffectA.aipプラグインフォルダから退避させて上の書類を開くと、以下のメッセージが表示され、対象オブジェクトの効果は編集不可になります。編集はできませんが、効果適用後の状態は維持されます。

f:id:shspage:20200417081222j:plain

次に、プラグインフォルダに MyEffectB.aip を入れます。

保存したファイルを開くと、上と同じメッセージが表示されます。 メニューの表示名が同じでも、内部的な名称が違えば異なるものとして認識されるようです。

ここで、MyEffectB.aip の内部的な名称(name) を MyEffectA としたものを新たに作成し、プラグインフォルダに入れてみます。

MyEffectB.aip - name = MyEffectA, title = MyEffect )

書類を開くと、MyEffectA.aip がないにもかかわらず上のメッセージは表示されません。
効果を適用したパスは五角形のままです。

パネルから「ジグザグ」の設定画面を開いてパラメーターを調整してみます。

f:id:shspage:20200417151151j:plain

すると、五角形は三角形に変わってしまいました。 一連のアピアランスが改めて処理され、MyEffectB.aip の効果が適用されたわけです。

こうなるとアンドゥしても元の姿には戻りません。
ともあれ、この書類を保存せずに閉じます。

続いて、MyEffectB.aip の内部名称(name)を MyEffectB、メニュー表示名(title) を MyEffectA としたものを新たに作成し、プラグインフォルダに入れてみます。

混み入ってきたので整理すると、以下の MyEffectA.aipが元の効果を適用したプラグインMyEffectB.aip が現在入っているプラグインです。

  • MyEffectA.aip - name = MyEffectA, title = MyEffect
  • MyEffectB.aip - name = MyEffectB, title = MyEffectA

プラグイン名もnameもtitleも、それぞれ元のものとは違うのですが、書類を開くと、先ほどと同じようにアピアランスを編集した時点で五角形が三角形に変わるという挙動になります。 先ほどと違うのは、パネルの効果名称が MyEffectA になっていることです。

f:id:shspage:20200417151511j:plain

以上のことから、name または title が元の name と一致した場合に、対応するプラグインが適用される、と考えることができます。

データを渡した相手が、たまたま上の条件に一致する別のプラグインを導入していて、知らずに編集をした場合、思いがけないトラブルが起こる可能性も、ないとは言い切れません。

このため、効果プラグイン作成の際には、name にはまず間違いなく一意になる文字列を設定するのが望ましいと思われます。また、標準以外の効果プラグインを導入する際にも、可能であればこの点に配慮されているかを確認したほうがよいのかもしれません。

なお、以下のように name が同じプラグインを2つ同居させた場合は、効果メニューに両方とも表示され、それぞれが使用できるようです。

  • MyEffectA.aip - name = MyEffectA, title = MyEffect
  • MyEffectB.aip - name = MyEffectA, title = MyEffect

もはや内部的にどういう管理になっているのかよくわかりません。 ここではこれ以上の追究はしないことにします。

handleGlue (v.1.3.0) の日本語説明

Adobe Exchange に handleGlue というイラレ用エクステンションを載せて頂いているんですが、掲載ページの機能説明とかが基本英語なので、日本語の説明をこちらに載せておこうと思います。

掲載ページ: https://exchange.adobe.com/creativecloud.details.1648.html

以下の動画を見て頂ければ、どんなものかだいたい分かると思いますが、以降の説明を読んで頂くとオプションの機能や制限などもより分かって頂けると思います。

現バージョンでは、システム言語が日本語の場合はUIが日本語になります。

f:id:shspage:20200309211733j:plain

機能

選択オブジェクトの中のオープンパスの、選択されている端点をその他のパスに接する位置に移動します。その際、ハンドルの傾きが接点での接線の傾きに等しくなるように調整します。

使い方

移動したいアンカーポイント(端点)と、移動先になるパスを選択し、Runボタンを押してください。

オプション

最近点(ラジオボタン

選択されているアンカーポイントを移動先の最も近い位置に移動します。

角度(ラジオボタン

選択されているアンカーポイントを、ハンドルの傾きが移動先の接点での接線の傾きと同じになるような位置に移動します。

一括(チェックボックス

有効な場合、選択オブジェクトの中の全てのオープンパスの選択端点が移動対象になります。選択パスが全てオープンパスの場合は、最背面のパスが移動先になります。 無効の場合、最前面のオープンパスのみが移動対象になります。

接点にアンカー追加(チェックボックス

有効な場合、移動先の接点の箇所にアンカーポイントを追加します。

パス全体を移動(チェックボックス

有効な場合、選択アンカーと一緒にパス全体が移動されます。両端が選択されている場合は、両端の移動量の平均値がその他のアンカーポイントに適用されます。

曲率を調整(チェックボックス

有効な場合、移動元パスの選択端点での曲率が、移動先の接点での曲率に合うように、移動元のハンドルの長さの調整を試みます。結果のパスは見栄え良くフィットすることもあれば、大きく形が変わってしまうこともあります。 接点が直線上になるときや、移動元にハンドルがない場合、調整は行われません。調整に失敗した場合はメッセージを表示します。調整量の上限の目安はスクリプト中で設定されています(MAX_CURVATURE_ADJUST_RATIO)。

Undo(ボタン)

直前に実行した Run の前の状態への復元を試みます。 実際に行なっているのは、通常のUndoを行ってから、アンカーポイントの選択状態をRunの際に記憶したものに戻すことです。 ボタンを押した際の選択パスの数とそれぞれのアンカー数が直前のRunを実行したときと異なる場合は、メッセージを表示し、Undoを取り消します。 逆に同じであれば、選択パスがRun実行時と違っていてもUndoが行われます。 このとき、UndoされるのはRunの結果とは無関係の他の操作である場合もありえます(重要)。 という、不確かな機能のボタンなのですが、これで助かる場合もあるので設けています。

説明は以上です。

まだ発展途上のエクステンションではありますが、イラレで変な形を描きたい時にお役に立てれば幸いです。

正規表現で文字スタイル割り当て.jsx

先日、@jamierob さんとのやりとりの中で作ったスクリプトが自分にも便利でよく使っているので紹介しようと思います。

作ったと言っても、コアな部分は Adobeスクリプティングフォーラムの Select part of point text objects matching a regex expression で言及されていた pixxxel schubser さんのスクリプトで、私はUIをつけたりしただけです。

機能は選択されているテキストオブジェクトの内容を正規表現で検索して、一致した箇所に指定した文字スタイルを割り当てるというものです。

例えば画像のような設定で実行すると、テキストの行頭の数字を太字にできます。(Charcter Style 1 が太字のスタイル)

f:id:shspage:20181211201956p:plain

スクリプトでの文字スタイルの割り当てには、clearingOverrides というオプションがあり、これを有効にしないと文字スタイルが適用されない場合があります。 このオプションが何を意味するかは何となく分かるのですが、どういう時に有効/無効にする必要があるのか、私もよくわかっていません。よくわからないときは有効にしておけばよいものだと思います。

また、正規表現について、各テキストオブジェクトを順に処理するループの中で再定義しないとうまく動作しないようでした。これも実際どういう仕組みなのか、把握し切れていないのですが。

スクリプト@jamierob さんが以下で公開しています。 https://github.com/jamesw05/illustrator-shortcuts/blob/master/apply_Style_With_RegExp.jsx

現時点のバージョンのUIやメッセージを日本語にしたものを私のGistに置いておきます。 https://gist.github.com/shspage/82e70da926dc5c9bfdc591d1c4afb7d5

文字スタイルじゃなくて、書体とサイズを適用するようにしてもいいかなとも思いますが、UI 作るのが面倒だし、文字スタイルにしたほうが後から一括変更したい時などに融通も利くしなので、このままでもいいかなと思っています。 正直、このスクリプトを使うようになってから、文字スタイルをよく使うようになりました。