忍者ブログ

ぼんぷろぐ

InDesignとかイラレとかのスクリプトよもやま話

新しいブログに引っ越しました。

こちらのブログはもう更新しませんが、コメント欄は生きてますので疑問、ご指摘などありましたらどうぞ。

[イラレ]
Bスプライン曲線を描く効果のプラグインを作ったー

イラレのアピアランスの効果のことを、プラグイン界隈の人はライブエフェクトと呼びますが、「イラレのパスオブジェクトを、アンカーポイントを制御点とする3次Bスプライン曲線に変換するライブエフェクト」のプラグインを作りました。


3次Bスプライン曲線とは何かといいますと、Wikipedia見てもなんだかよくわかりませんが、ともかく複数の制御点から定義される曲線で、区分的には3次関数で媒介変数表示できて、曲率が連続であり、制御点の個数をいくつでも増やせるような曲線です。

対してイラレのパスに使われている3次ベジェ曲線は、3次関数で媒介変数表示できる点は同じですが、制御点の個数は4つと決まっています。
イラレ上ではもっと多くの点からパスを描画していますが、これは複数の3次ベジェ曲線をつないでいるわけです。
そのつなぎ目(アンカーポイント)において、イラレの機能では、『向き』を一致させることはできますが、その微分である『曲率』を一致させることはできません。

したがって3次Bスプライン曲線を使えば、3次ベジェ曲線では難しい曲率連続の曲線を描くことができ、よりなめらかな印象になることが期待できます。
一方、「3次ベジェ曲線のようにハンドルで接線の向きを決めることができない」「始点と終点以外の制御点を通らない」ので、曲線の向きや通る点をベジェ曲線ほど細かく制御できないというデメリットがあります。




さて、このプラグインをインストールすると、効果メニューに『B-Spline(A)』『B-Spline(B)』『B-Spline(C)』の3つが追加されます。

B-Spline(A)…すべてのアンカーポイントを3次Bスプライン曲線の制御点として、なめらかな曲線を描きます。
B-Spline(B)…ハンドルが出ていないアンカーポイントを角(3次Bスプライン曲線の端点)にします。
B-Spline(C)…ハンドルが出ているアンカーポイントを角にします。

※ハンドルの向きや長さは曲線に影響を与えません。「ハンドルが出てるか出てないか」だけが(B)(C)に影響します。



ライブエフェクトのいいところは、アンカーポイントを動かすなどすると即座に効果も更新されるところですが、残念ながら「アンカーポイントを動かしている最中(マウスドラッグ中)」までは更新されません。
作図ツールとして使おうと思うとやはりこの点が致命的で、だからまあこのプラグインはそれほど実用的なものにはならないと思います。

もうちょっとプラグインの勉強をすればもっとガシガシ使えるBスプラインツールも作れるかも…。期待せずにお待ちください。


ダウンロード

BSplineEffect  ver0.1 (2019/09/26)

[win CC2017以降用]     [win CS6用]
[mac CC2017以降用]

インストール方法

BSplineEffect.aip を所定のプラグインフォルダに入れるか、または適当なフォルダに入れてイラレの環境設定>プラグイン・仮想記憶ディスクでそのフォルダを追加します。
PR

[ExtendScript]
IllustratorスクリプトとInDesignスクリプトの違い

1.実行方法

実行方法はほぼ同じで、主に以下の3つの方法があります。

①ESTKなど外部から実行
②アプリケーション上で実行
 InDesign:スクリプトパネルまたはキーボードショートカット
 Illustrator:ファイルメニューのスクリプト>その他のスクリプト
③エクスプローラー上でjsxファイルをダブルクリック
 #targetでターゲットアプリケーションを指定している場合に限る

※最近はESTKの代わりにVisual Studio Codeを使ってる方もいます。

2.エンジンの違い

ExtendScriptは#targetengineで実行エンジンの名前を指定できます。
同じ名前のエンジンで実行するとグローバル変数などを共有できます。
また、1回実行するごとにリセットされ、グローバル変数などが引き継がれない特殊なエンジンもあります(使い捨てのエンジンと呼ぶことにします)。

Illustrator InDesign
ESTKから実行時のデフォルトのエンジン名 main main
アプリケーション上で実行時のデフォルトのエンジン名 transient main
jsxをダブルクリックで実行時のデフォルトのエンジン名 main(※1) main(※1)
使い捨てのエンジン名 transient main
ESTKから実行時にエンジンを指定できる? できない できる
アプリケーション上で実行時にエンジンを指定できる? できる できる
jsxをダブルクリックで実行時にエンジンを指定できる? できない できない

※1 BridgeTalk経由で実行される

重要なのは同じ"main"エンジンが、InDesignでは使い捨てであり、Illustratorではそうでないという点です。
Illustratorの使い捨てのエンジン名はtransientですが、これをESTKから指定することはできません。

したがって、IllustratorでESTKを使う場合、1つのmainエンジンでスクリプトを何度も実行することになります。
各所で配布されているIllustratorスクリプトで、全体を(function(){.....})()で囲み、極力グローバル変数を作らないようにしているものが多いのはこうした事情によるものです(たぶん)。

3.テキスト選択時のselection

InDesignではテキストオブジェクトが入った配列です。
Illustratorではテキストオブジェクトそのものになります。配列のつもりで書いてたらエラーになります。よくやらかします。

4.y軸の方向

InDesignは下が正、Illustratorは上が正です。

5.visibleBoundsとかgeometricBoundsとかの順番

InDesignは上左下右、Illustratorは左上右下です。

6.InDesignはexit()が使える

7.Illustratorはなぜかappとか省略できる

8.サロゲートペア文字

text.charactersにおいて、サロゲートペア文字はInDesignだと1文字、Illustratorだと2文字とカウントされます。

9.ScriptUIでモーダルダイアログ

モーダルダイアログっていうのはダイアログが出ている間アプリを操作できない系のダイアログのことです。
Illustratorではモーダルダイアログが出てる間もスクリプトからはDOMをいじることができ、app.redraw()で表示を更新できます。
しかし、InDesignではできません。つまりInDesignでは、モーダルだけどプレビューを更新できる系のダイアログを作ることができません。なんとかならんかな。

10.ほかにもいーっぱいあるよ


[イラレ]
Sppyに「Alt単押しの無効化」などの機能を追加しました

イラレのスクリプトをキーボードショートカットで実行する『Sppy』を更新しました。
ダウンロードはこちら

変更点1:スクリプトフォルダ内の『jsxファイルへのショートカット』も使えるようにした

これ便利ですね。
ショートカット先のファイルがあるフォルダ内で実行されたことになるので、#includeするファイルなども移動させる必要はありません。

変更点2:Alt単押しでメニューバーにフォーカスが行くのを阻止する機能を追加

これ、喜ぶ人が私以外にいるのか分わからないのですが、
Windowsでは、Altキーだけを1回押すとメニューバーにフォーカスが当たりますが、
イラレやInDesignでAlt+スクロールによる拡大縮小を使った後などに、これが意図せず発生してしまうことが、特にWin10になってから頻発するようになった気がするのです。

発生すると矢印キーや一部のショートカットキーがメニュー操作に奪われてしまい、ちょっとだけイラッとします。

そもそもこのAlt単押しでメニューバーにフォーカスが行く機能、全く使いません。
どうやらAutoHotkeyの
*~Alt::Send {Blind}{vk07}
無効化できるらしいと分かったのでSppyに組み込んでみました。


Sppyのタスクトレイアイコンを右クリックし、『Alt単押しの無効化』を選択すると、このようなダイアログが出ます。

『Illustratorのみ』を選ぶとIllustratorだけ、『すべてのウィンドウ』を選ぶとIllustratorを含むすべてのウィンドウで、Alt単押しでメニューバーにフォーカスが行くのを防ぎます。

※設定後1回目だけは無効化できてないみたいです

[イラレ]
選択アイテム群をキーオブジェクトのレイヤーに移動するスクリプト

OnegaiSDKの使用例です。
イラレでは複数のアイテムを選択しているとき、その中の一つをさらにクリックすることで、そのアイテムを『キーオブジェクト』にできます。
この状態にあるとき、すべての選択アイテムをキーオブジェクトのあるレイヤーに集める、というスクリプトを作ってみました。
InDesignの方では同じ機能のスクリプトいつも使ってるんですが結構便利です。


プラグインOnegaiSDKがインストールされていることが必要です。
http://sysys.blog.shinobi.jp/Entry/104/

(function() {
    sel = app.selection;
    if (sel instanceof Array && sel.length > 1) {
        var n = +app.sendScriptMessage("OnegaiSDK", "getKeyObject", "");
        if (n > -1) {
            var layer0 = sel[n].layer;
            for (var i = n - 1; i >= 0; i--) {
                if (sel[i].layer != layer0) sel[i].move(layer0, ElementPlacement.PLACEATBEGINNING);
            }
            for (var i = n + 1; i < sel.length; i++) {
                if (sel[i].layer != layer0) sel[i].move(layer0, ElementPlacement.PLACEATEND);
            }
        }
    }
})();

プロフィール

kawamoto_α
(あるふぁ(仮))


InDesignで新聞組版のようなことをしています。

ツイッタ

※ブラウザによっては当ブログからDLしたzipファイルが拡張子なしになることがあるようですが、.zipを補って開いてください。



イラレ用トーンカーブスクリプト(¥1500)



クロソイド式角丸長方形スクリプト(¥500)
Illustrator用
InDesign用



イラレスクリプトをキーボードショートカットで実行するやつ(Win用)