Illustrator preferences 1

最終更新日

Comments: 3

アスパラガスが最盛期を迎えています。毎朝数本収穫します。それらは直ちに茹で上げられ、朝の食卓とお弁当のおかずにへんしんします。アスパラガスというのは鮮度が命です。流通に乗るとあの独特の青臭さが強くなり、糖質も分解されるため甘味も低下します。うちでは収穫→調理まで長くて5分です。根本的に味が異なると思って下さい。とっても美味しいのですw
本題です。えー、イラストレータのOMV眺めていると使い方の分からないメソッド(解説されていない、あるいは引数に当てるキー値が公開されていない、そもそも解説する気すらない)ものが山のように存在するのは皆様ご存知の通りです。わたしとしましても、そう言った状況は「全くおもしろくない」ものだと言うのは当然なのですが、教えてくれないよーって泣いているだけではそこらへんの幼児とかわりません。基本的に手元で使える(無料で)リソースと経験をカンを総動員して調査を行うわけです。
今回のもOMVで見るとメソッドはしっかり解説されています。しかし、「Preference Key」は何処探してもありません。ググるセンセに聞いてもつれないお返事ですので、またもやあの手この手を使って…となりました。
先に感想を書いておきますが、これ、連綿と書き足された為にかなりカオスな状態です。全く整理されていませんし、検証も中途半端な状態の様な気がします。
とりあえず設定項目を順番に見て行きますが途中で変なのが出たりするのはご愛嬌と言う事にしておきます。

さて、まずはメッソッドを見ておきましょう。

app.preferences.getBooleanPreference("startup/showSplashScreen");

という感じの使い方をします。こちらは読み出しですが、preferenceオブジェクトには「Real」「Integer」「Boolean」「String」等の種類がありますので読み出し書き出し共にそれぞれに対応するメソッドが用意されています。この例では「startup/showSplashScreen」がキー値となっています。
さて、書き込みはというと

app.preferences.setBooleanPreference("startup/showSplashScreen",false);

引数が2つになり、キー値とセットしたい値を並べて渡します。
このキーはスクリプトからしかアクセスできない物です。一度動かしてみて下さい。
どうでしょう?これは、スタート時にスプラッシュスクリーンの表示をさせない設定です。こんなのが色々とあったりします。

では、パネルを見てみます。まずは最初の項目「一般」です

こんな感じですね。キー値は以下の様になっています。

■一般
cursorKeyLength : Real・・・キー入力
constrain/angle : Real・・・角丸の制限
constrain/cos : Real
constrain/sin : Real
ovalRadius : Real・・・角丸の半径
pen/disableAutoAddDelete : Boolean・・・自動追加/削除しない
usePreciseCursors : Boolean・・・十字カーソルを使う
showToolTips : Boolean・・・ツールヒント
antialias/graphic : Boolean・・・アートワークのアンチエイリアス
(antialias/text)
(antialias/image)
selectSameTintPercentage : Boolean・・・同じ濃度を選択
fileFormatGetFile/ConvertedInFilename : Boolean・・・以前のバージョンファイルを開く時...
doubleClickToIsolate : Boolean・・・ダブルクリックして編集モード
cropMarkStyle : Boolean・・・日本式トンボを使用する
transformPatterns : Boolean・・・パターンも変形する
scaleLineWeight : Boolean・・・線幅と効果も拡大・縮小
includeStrokeInBounds : Boolean・・・プレビュー境界を使用

まあ、素直な感じで変な部分はありません。続くクラウド周りの扱いは全く別扱いになっており、実際に「preferences」の後に追加されています。また、少々仕組みが異なっておりますので今回はパスと言う事にして次に行きます。

こんな画面です。選択範囲の設定では数値入力にはReal型のプレファレンスが当てられています。ではリストを見てみます。

■選択範囲
selectionTolerance : Integer・・・許容値
hitShapeOnPreview : Integer(0 as checked)・・・オブジェクトの選択範囲をパスに制限
snapToPoint : Boolean・・・ポイントにスナップ
snappingTolerance : Integer
selectBehind : Boolean・・・Cmd+クリックで背面のオブジェクトを選択
アンカーポイントとハンドルの表示
selectedAnchorMarkType :Integer(2,9)・・・アンカー
unselectedAnchorMarkType : Integer(1,8)
directionHandleMarkType : Integer(4,10,11)・・・ハンドル
highlightAnchorOnMouseOver : Boolean・・・カーソルを合せた時にアンカーを強調表示
showDirectionHandles : Boolean・・・複数アンカーを選択時にハンドルを表示
liveCorners/hideCornerWidgetBasedOnAngle : Boolean・・・次の角度より大きい時にコーナー...
liveCorners/cornerAngleLimit : Real

ここで注目すべき点は「hitShapeOnPreview」です。この項目はチェックボックスで表現されています。しかし、実際にはInteger型のプレファレンスであり、チェックを入れると「0」にセットされると言う非常にへそ曲がりのものなのです。わたしはここで小一時間ハマリました。
次のテキストにも同様のハマリどころが存在します。

■テキスト
text/sizeIncrement : Real・・・サイズ/行送り
text/kernIncrement : Integer・・・トラッキング
text/riseIncrement : Real・・・ベースラインシフト
言語オプション
showAsianTextOptions : Boolean・・・東アジア言語
AI WorldReadiness Dict Key: Boolean・・・インド言語(Must be radio button)
hitTypeShapeOnPreview : Integer(0 as checked)・・・テキストオブジェクトの選択範囲
text/useEnglishFontNames : Boolean・・・フォント名を英語表記
text/recentFontMenu/showNEntries : Integer・・・最近使用したフォントの表示数
text/fontMenu/showInFace : Boolean・・・フォントプレビュー
text/fontMenu/faceSizeMultiplier : Real(0.75,1,1.25)
text/doFontLocking : Boolean・・・見つからない字形の保護をにする
text/doNonLatinInlineInput : Boolean () ラテン文字以外にインライン入力を利用

「hitTypeShapeOnPreview」がIntegerとなっており、且つ真偽値が逆転しています。そして、東アジア言語オプションとインド言語は相反する関係ですが、同時にチェックするとミドルイーストな雰囲気に。テキストツールも左から右へ文字が流れるヤツがデフォルトになります。ラジオボタンにしなかったのはこう言った理由ですかねえ?掃除にチェックするとパネルでのチェックボックスが消えてパネルから設定を戻せなくなるのでご注意を。
そして、フォントプレビューのサイズの設定ですが、3つの選択肢がありますのでIntegerかなって思いますよね???でもRealです。この「text/fontMenu/faceSizeMultiplier」というのは中央値を1.0と設定し、0.75倍、1.25倍という倍率を直接設定させています。

今回解説するのはここまでですが、ちょっとした利用方法を添えておきます。

var prefs = [["cursorKeyLength",
     "constrain/angle",
     "constrain/cos",
     "constrain/sin",
     "ovalRadius",
     "liveCorners/cornerAngleLimit",
     "text/sizeIncrement",
     "text/riseIncrement",
     "text/fontMenu/faceSizeMultiplier"
     ],[
     "pen/disableAutoAddDelete",
     "usePreciseCursors",
     "showToolTips",
     "antialias/graphic",
     "antialias/text",
     "antialias/image",
     "selectSameTintPercentage",
     "fileFormatGetFile/ConvertedInFilename",
     "doubleClickToIsolate",
     "cropMarkStyle",
     "transformPatterns",
     "scaleLineWeight",
     "includeStrokeInBounds",
     "snapToPoint",
     "selectBehind",
     "highlightAnchorOnMouseOver",
     "showDirectionHandles",
     "liveCorners/hideCornerWidgetBasedOnAngle",
     "showAsianTextOptions",
     "text/useEnglishFontNames",
     "text/recentFontMenu/showNEntries",
     "text/fontMenu/showInFace",
     "text/doFontLocking",
     "text/doNonLatinInlineInput",
     "artNamesAreXMLIDs"
     ],[
     "selectionTolerance",
     "hitShapeOnPreview",
     "hitTypeShapeOnPreview",
     "snappingTolerance",
     "selectedAnchorMarkType",
     "unselectedAnchorMarkType",
     "directionHandleMarkType",
     "text/kernIncrement",
     "rulerType",
     "strokeUnits",
     "text/units",
     "text/asianunits",
     "numbersArePoints"]];
var i,j;
var rslt = [];
for (i=0;i<prefs.length;i++){
     rslt[i] = [];
     for (j=0;j<prefs[i].length;j++){
          switch (i){
               case 0:
                    rslt[i].push(app.preferences.getRealPreference(prefs[i][j]));
                    break;
               case 1:
                    rslt[i].push(app.preferences.getIntegerPreference(prefs[i][j]));
                    break;
               case 2:
                    rslt[i].push(app.preferences.getBooleanPreference(prefs[i][j]));
                    break;
                    }
          }
     }

var f = File.saveDialog("save preferences file","ini");
if (f.open("w")){
     for (i=0;i<rslt.length;i++)
          f.writeln(rslt[i].join());
     f.close();
     }

このスクリプトは初期設定をテキストデータとして保存する為の物です。ここまでのキー値を抜き出してファイル名を付けて保存する事が出来ます。
ちなみに、主要なpreferencesのキー値にはString型がありません。

結果はこんな感じ

0.1417322835,0,1,0,8.5039370079,177,0.7086614173,0.3543307087,1
0,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,1,5,1,1,1,0
true,true,true,true,true,true,true,true,true,true,true,true,false

配列をjoinして3行書き込みます。
リストアする場合は各行を読み込んで先程と逆の処理を行ないます。次回お届けの予定です。

ten_a

Graphic Designer, Scripter and Coder. Adobe Community Professional.

シェアする

3件のフィードバック

  1. はじめまして。GOROLIB DESIGNと申します。
    いつも有益な情報を拝見しております。
    コメントからのご挨拶、ご容赦くださいませ…。
    当方、イラストレーターCC2015にて、整列パネルの整列基準の値、
    ・選択範囲に整列
    ・キーオブジェクトに整列(これはできなくても大丈夫です)
    ・アートボードに整列
    をスクリプトで変更したいと研究しております。
    貴殿のブログを目を皿のようにして読んでいましたが、万策尽きてしまいました…。失礼を承知でご相談いたしたく、何卒よろしくお願いいたします。
    参考:http://gorolib.blog.jp/archives/52388066.html
    なお「プレビュー境界を使用」を変更するスクリプトについては、貴殿の以下の記事にて実装完了しました。
    参考:http://chuwa.iobb.net/tech/archive/2014/04/illustrator-preferences-1.html
    参考:http://gorolib.blog.jp/archives/52322965.html
    同じようなやり方にて、整列基準も変更できればと思いますが行き詰まってしまいました。
    なお、当方かなりの初心者にて「基本がわかっていない」ところが多々ございますが、何かヒントがありましたら、ご教示いただければ幸いでございます。
    どうぞよろしくお願いいたします。

  2. 残念な事にIllustraorのオブジェクトモデルは実装にばらつきがあります。特にプラグイン系をプッシュするタイプのオブジェクトはこの傾向が顕著で、Adobe社純正のプラグインであっても全くオブジェクトモデルを提供しないものからJavascriptからプッシュ可能なScriptingMessageに対応したものまで様々です。
    そして、件の整列パレットに関してはプラグインが初期化するタイミング以外でプレファレンスキーを読み込みません。初期化のタイミングはプラグインが読み込まれたタイミングで行われますからIllustratorが起動するタイミングでしかプレファレンスキーを読まない事になります。
    わたし自身はこう言った理由から純正の整列パレットとは別にエクステンションを用意して併用しています。

  3. お世話になっております。GOROLIB DESIGNの渋谷です。丁寧な回答をいただき大変恐縮です。ありがとうございます。お手数をおかけいたしました。
    初期化のタイミングつまり起動時のみ参照可能とのこと。大変勉強になりました。エクステンションを併用されているとのことで、私もそのような方向で検討してみます(パネルごと自作すれば様々勉強できそうですし…)
    貴重なお時間をありがとうございます。心より感謝いたします。それでは失礼いたします。

ten へ返信する コメントをキャンセル