Illustratorの「Diacritics Position」について

昨日目の前をdiacVPosっていうのがとおりすぎていったんですが、こいつって発音記号の縦位置関連のプロパティーだったよなぁ…と思っているうちに見失いました。
後で思い出そうと頑張ってみましたがはっきりとしたことはわからなかったのですが、通勤電車の中でちょっと思い出しました。こいつってあらびっくやへぶらいな方々の為に用意された機能なのです。で、先程大急ぎで調べました。

characterAttributeschilddiacVPosdiacXOffsetdiacYOffsetの3つのプロパティが存在します。では試してみましょう。

diac1
グレイで表示されているのがDiacVPosType.DEFAULT_POSITIONです。ピンクがDiacVPosType.LOOSE_POSITION、ブルーがDiacVPosType.TIGHT_POSITIONです。enumeratorにはあとひとつOPENTYPEがあるのですが、現在はOpenTypeフォントを利用しますのでおおよそのケースではDEFAULTと同じになります。

更に数値でダイレクトにdiacritical markを動かしてみます。

app.selection.characterAttributes.diacXOffset = 500;

結果は…

diac2黄色いほうが500移動したものです。

同様に縦方向は

app.selection.characterAttributes.diacYOffset = 500;

として、結果は以下のようになります。

diac3

※スクリプト実行時はテキストツールで全体を選択した状態でtextRangeに対して処理を行います。

 

パスオブジェクトを水平にしよう

みなさまにおかれましてはご清祥のこととお慶び申し上げます。

ということで、すでに本年も10%程経過してしましました。なにそれ、こわい! で、結構多忙で何もかも進まない状態のどん詰まりなのですが、ここんとこ結構冷え込んでオフトゥンから脱出するのが一苦労な状況です。みなさまにおかれましてはぱげでそれどころではないものと存じます。ということで、こっそりスクリプトを置いておきます。

続きを読む

[CEP] スクロールバーが邪魔な時のCSS

CEPエクステンションにおいてパネルをリサイズした時にスクロールバーがとても邪魔な場合があります。特に小さいサイズのパネルだとスクロールバーが表示されると殺意を覚えたりしがちです。
そういった場合に心の平穏を取り戻すためにはどうしたら良いかという事をお伝えしたいと思います(^-^)/
続きを読む

[AI]スクリプトからのエフェクト操作

今回の投稿はクリスマスシーズンに入りましたので、DTPアドベントカレンダーへの投稿として簡単にまとめてみました。
これから年末にかけて多忙な日が続くとは思いますが、皆様が健康にクリスマス〜新年を迎えられますように(^-^)/
さて、IllustratorのスクリプトではapplyEffectというメソッドが存在します。これはIllustratorの効果メニューの各項目をスクリプトから適用するためのメソッドです。これに関しては
で言及してあります。しかし、この記事にも限界があります。FXG形式の書き出しはCS6以降では廃止された為、それ以降に実装された効果に関しては引数であるXMLを組み立てるためのパラメータがわからないのです。
ということで様々な方たちが色々なところを掘り返してパラメータを調べ始めました。以降でまとめられる手法は上海のスクリプターmoluappleがまとめたものを解説したものです。

コンテンツリカバリーモードを設定する

以下のスクリプトをIllustratorで1回実行し、コンテンツリカバリーモードを設定する。(on/offトグル動作なのでもう一度実行するとリカバリモードを抜ける)
app.preferences.setBooleanPreference("aiFileFormat/enableContentRecovery", 
!app.preferences.getBooleanPreference("aiFileFormat/enableContentRecovery"));

Illustrator書類をテキストエディタで開けるようにする

効果をかけたオブジェクトを含むファイルを予め作成しておき、そのファイルをコンテンツリカバリモードで保存します。
  1. Illustrator上でファイルを開くダイアログを表示。(まだファイルを開いてはいけません)
  2. 対象ファイルを選択した状態で「Command + Option + Shift(Mac)」「Ctrl + Alt + Shift (Windows)」をプレスしたまま開くボタンをクリックする。
  3. 空のドキュメントが開いた状態で対象ファイルが開かれるのでそのまま閉じる。
以上の手順で対象ファイルと同一のフォルダに頭に「_」が付いたファイルが保存されています。
このファイルをテキストエディタで開いて以下の正規表現で検索します。
「BasicFilter\s:\n\((.+?)\)\s1\s0\s\/Filter」
以下は「角を丸くする…」の記述部分がヒットしたものです。
/BasicFilter :
(Adobe Round Corners) 1 0 /Filter ,
1 /Visible ,
(Adobe Illustrator.app) /PluginFileName ,
(\212p\202\360\212\333\202\255\202\267\202\351) /Title ,
/Dictionary : /NotRecorded ,
2 /Real (radius) ,←逆ポーランド記法で値とDict名称が書かれている。
; /Dict ;
 /Part ,
このままではapplyEffectメソッドの引数のXML構造にはなりませんので整形が必要となります。
テンプレート
'<LiveEffect name="">'
+'<Dict data="'
+' '
+' I Adobe Effect Expand Before Version 16 " />'
+'</LiveEffect>'
上記のテンプレートのDict dataの値として検索でヒットした/Dictのパラメータを成形加工します。
角を丸くする…コマンドの/Dictは以下に抜き出した1行のみです。
2 /Real (radius) 
  ↓
R radius 2(データ型を表すアルファベット1文字、データ名称、数値の3点をスペース区切りで記述する)
上記のパターンで/Dictにエントリされている全てのパラメータを整形します。
データ型は、Real→R、Integer→I、Boolean→Bの3点が存在します。
この例ではDictエントリが1点だけなので最終的なXMLは以下の様になります。
'<LiveEffect name="Adobe Round Corners">'
+'<Dict data="'
+'R radius 2 '
+'I Adobe Effect Expand Before Version 16 " />'
+'</LiveEffect>'
これを用いてスクリプトを書くと「角を丸くする…」は以下のようなスクリプトになります。
var xmlstring = '<LiveEffect name="Adobe Round Corners">'
+'<Dict data="'
+'R radius 2 '
+'I Adobe Effect Expand Before Version 16 " />'
+'</LiveEffect>';
 app.selection[0].applyEffect(xmlstring);
エフェクトを検索する作業も楽しいので是非お試し下さい。

スクリプト環境の整備(AdobeMaxJapan2018フォローアップ1)

今回の投稿はAdobe Max Japan2018にて私が担当したワークショップ「使わないと損をする! Illustrator & InDesignのScript活用講座 〜あれもこれも便利になります〜」のフォーローアップエントリーになります。
不幸な事に当日は丁度ExtendScript Toolkit CCが不具合が発生した当日で、不具合を起こしたプラットフォームがMacintoshだったこともありWindowsを利用していたためワークショップ中はわたし自身も全く気がついていませんでした。実際に参加者の皆様の中にはESTKが動作しなくて困られた方もおられたようで申し訳ない状況でした。
この不具合に関する情報収集及び対処方法等を確認する作業を優先させたためにフォローアップが後手に回ってしまいました。申し訳ございません。

しかし、結果としてはESTKの修正処理の簡素化等成果が出ていますのでスクリプトを学び、活用して行こうと考えられている方々にはこれで良かったのだろうとは思っています。
ESTKのエラーに関しては以下のAdobe フォーラムのドキュメントをご確認いただきご自身の手で修正作業を行っていただきたいと思います。

https://forums.adobe.com/docs/DOC-9621

さて、フォローアップについてです。今回のワークショップのテーマはスクリプトを活用することでどの様に日頃の作業を楽にできるかと言う部分をお見せし、体感していただくことでした。その中でスクリプトによる操作の概念なども簡単にご説明させていただきました。しかしながら、短い時間という事もあり概要的な解説になっています。この様な部分は充分に時間をかけて説明するべき部分なのです。今回から数回の連載という形で関連情報及び解説をお届けしようと思います。

続きを読む

[AI]世界一単純な図形交差検出関数

Illustratorに限らずオブジェクトの重なりの判断というのは2次元空間内における座標を取得して曲線ならバーンスタインがどうとかこうとか演算が必須となっております。おそらくみんな泣きながらやればある程度のものは出来るんじゃないかなぁって思うのです。

スクリーンショット 2018-07-11 12.36.08.png

 

しかしながら、一言申し添えると「面倒くさい」です。こんなん、手早く書き捨てたいと思うぐらいものなんですけどそうも行かないのが世の常なのです。で、今回はその圧倒的に面倒くさい部分を全てショートカットする仕組みを提供いたします。

続きを読む

[AI]回転された配置画像の縮尺を計算するスクリプト

これ、この前詰まってた数学的な問題を解消できたやつです。
元ネタはいつものごとくフォーラムです。
https://forums.adobe.com/thread/2455224
して、コードはこちら

var tg = app.selection[0];
var mx = tg.matrix;
var deg = Math.atan2(mx.mValueB, mx.mValueA) * 180 / Math.PI;
var nm = new Matrix;
nm.mValueA = nm.mValueD = 1;
nm.mValueB = nm.mValueC = 0;
var rtmx = app.concatenateRotationMatrix(nm, deg);
var sc = mx.mValueA / rtmx.mValueA;
alert(sc*100);

選択した画像の縮尺を計算します。(^-^)/