忍者ブログ

ぼんぷろぐ

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

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

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

[イラレ]
スクリプトでできないことをSDKにお願いするプラグインを作った

イラレスクリプトから気軽にキーオブジェクトを取得したいっていう動機でScriptMessageのプラグインを作り始めたんですが、出来上がったのはほぼアピアランス操作のプラグインでした。

applyEffect等と組み合わせれば出来ることはかなり広がるんじゃないかと思います。
動いたとか動かなかったとか不具合とか意味わからんとか何でもいいので下のコメントかツイッターにご報告いただけるとうれしいです。


OnegaiSDK


何これ?

イラレのスクリプトだけでは手が届かないかゆいところ(主にアピアランス関係)に手を届かせるプラグインです。

Download

OnegaiSDK.aip  ver 0.2 (2019/10/27)

[win 2020用] [win CC2017~2019用] [win CS6用]
[mac 2020用] [mac CC2017以降用] [mac CS6用]

インストール

イラレを起動してない状態で、OnegaiSDK.aipを所定のプラグインフォルダに入れます。

プラグインフォルダは、
Windowsの場合
C:\Users\<ユーザー名>\AppData\Roaming\Adobe\Adobe Illustrator <バージョン番号> Settings\ja_JP\x64\プラグイン

macの場合
/Applications/Adobe Illustrator <バージョン>/Plug-ins.localized/
または
/Users/<名前>/Library/Application Support/Adobe/Adobe Illustrator <バージョン番号>/ja_JP/プラグイン/

※イラレの「環境設定」の「プラグイン・仮想記憶ディスク」で、任意のフォルダをプラグインフォルダにすることもできます。

使い方

appとpageItemのメソッド『sendScriptMessage』を使ってコマンドを実行できます。
第1引数は"OnegaiSDK"
第2引数はコマンド名
第3引数は下記の『in』(なしの場合は空白文字列"")
にします。

用語

後のコマンド説明のため、用語を決めておきます。

Paint:線または塗り
Effect:効果
Contents:アピアランスパネルの「文字」とか「内容」とか。パスアイテムには無い。
Pre Effects:アピアランスパネルで線・塗りより上にある効果
Post Effects:アピアランスパネルで線・塗りより下にある効果
Last Effect:Post Effectsの中でも一番下のもの。通常、スクリプトのapplyEffectで追加したものはこれになります。


以下、「n番目」と書いてある場合、一番上がn=0、次がn=1です。n=-1で一番下を指定することもできます。

app.sendScriptMessage で使えるコマンド

getKeyObject

in:なし
out:整数n
app.selection[n]がキーオブジェクトとなるようなnを取得します。
キーオブジェクトが無い場合は-1です。

pageItem.sendScriptMessage で使えるコマンド

getGraphicStyleName

in:なし
out:グラフィックスタイル名
適用されているグラフィックスタイルの名前を取得します。

addFill

in:なし
out:なし
塗りを追加します。

addStroke

in:なし
out:なし
線を追加します。

removePaint

in:整数n
out:なし
n番目のPaintを消去します。

movePaintTop

in:整数n
out:なし
n番目のPaintを一番上に移動します。

movePaintUp

in:整数n
out:なし
n番目のPaintを一つ上に移動します。

movePaintBottom

in:整数n
out:なし
n番目のPaintを一番下に移動します。

movePaintDown

in:整数n
out:なし
n番目のPaintを一つ下に移動します。

moveContentsTop

in:なし
out:なし
Contentsを一番上に移動します。

moveContentsUp

in:なし
out:なし
Contentsを一つ上に移動します。

moveContentsBottom

in:なし
out:なし
Contentsを一番下に移動します。

moveContentsDown

in:なし
out:なし
Contentsを一つ下に移動します。

moveLastEffectToPaint

in:整数n または”pre”
out:なし
Last Effectをn番目のPaintに移動します。”pre”の場合はPre Effectsに移動します。

focusPaint

in:整数n
out:なし
n番目のPaintにフォーカスします。

removeAllEffects

in:なし
out:なし
すべてのEffectを消去します。

removeEffectsOfPaint

in:整数n または”pre” , ”post”
out:なし
n番目のPaintにつけられたEffectをすべて消去します。”pre”の場合はPre Effects、"post"の場合はPost Effectsをすべて消去します。

getStyleString

in:なし
out:文字列
アピアランスの構造が大まかに分かる文字列を取得します。

copyStyle (ver0.2)

in:なし
out:なし
アピアランスの状態を取得し、プラグインに保持させます。

pasteStyle (ver0.2)

in:なし
out:なし
copyStyleで取得したアピアランスの状態を適用します。



使用例1

選択アイテムに塗りと『パスのオフセット』で青いフチをつけてみる
var sel0 = app.selection[0];
sel0.sendScriptMessage("OnegaiSDK","addFill","");
sel0.sendScriptMessage("OnegaiSDK","focusPaint","-1");
var c0 = new CMYKColor;
c0.cyan = 100 , c0.magenta = c0.yellow = c0.black = 0;
//sel0.fillColor=c0; //パスアイテムならこっちでいいけど
app.activeDocument.defaultFillColor = c0; //テキストならこっち
sel0.applyEffect ('<LiveEffect name="Adobe Offset Path"><Dict data="R mlim 4 R ofst 5 I jntp 2 " /></LiveEffect>');
sel0.sendScriptMessage("OnegaiSDK","moveLastEffectToPaint","-1");
sel0.sendScriptMessage("OnegaiSDK","moveContentsTop","");

使用例2

アピアランスを維持したままポイントテキスト←→エリアテキストを切り替える
(function(){
var sel=app.activeDocument.selection;
var frames=[];
var newSel=[];

if(sel.constructor.name=="TextRange")sel=sel.parent.textFrames;
for(var i=0;i<sel.length;i++)if(sel[i].constructor.name=="TextFrame")frames.push(sel[i]);
if(frames.length==0)return;
if(frames[0].kind== TextType.POINTTEXT)
    for(var i=0;i<frames.length;i++)newSel.push(changeToArea(sel[i]));
else if(frames[0].kind== TextType.AREATEXT)
    for(var i=0;i<frames.length;i++)newSel.push(changeToPoint(sel[i]));
else
    return;
    
app.activeDocument.selection=newSel;
return;

function changeToPoint(tf){
    if (tf.constructor.name!="TextFrame" || tf.kind== TextType.POINTTEXT) return tf;
    tf.sendScriptMessage("OnegaiSDK","copyStyle","");
    var tf2=tf.layer.textFrames.add();
    tf2.move(tf,ElementPlacement.PLACEBEFORE);
    tf.story.textRange.duplicate(tf2);
    tf2.position=tf.position;
    tf2.orientation=tf.orientation;
    tf.remove()
    tf2.sendScriptMessage("OnegaiSDK","pasteStyle","");
    return tf2;
}

function changeToArea(tf){
    if (tf.constructor.name!="TextFrame" || tf.kind== TextType.AREATEXT) return tf;
    tf.sendScriptMessage("OnegaiSDK","copyStyle","");
    var rec1=tf.layer.pathItems.rectangle(tf.top,tf.left,tf.width,tf.height);
    var tf2=tf.layer.textFrames.areaText(rec1);
    tf2.move(tf,ElementPlacement.PLACEBEFORE);
    tf.story.textRange.duplicate(tf2);
    tf2.position=tf.position;
    tf2.orientation=tf.orientation;
    tf.remove()
    tf2.sendScriptMessage("OnegaiSDK","pasteStyle","");
    return tf2;
}
})();
PR

コメント

お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字

動作報告です

win10 64bit CS6 環境

デフォルトプラグインフォルダにそのままコピー
デフォルトプラグインフォルダにフォルダを作成
その中にコピー
環境設定からフォルダ指定

以上すべて試しましたがプラグインの読み込みエラーとなってしまいました(--;

思い当たる原因などございましたらご教授くださいませ。

よろしくおねがいします。

Re:動作報告です

ご報告ありがとうございます。
すいません、
https://blog.cnobi.jp/v1/blog/user/c2165b95a8b473f47f31eef23be16d4f/1561054411
こちらで再度試してみていただけますか?

  • kawamoto_α
  • 2019/06/21(Fri.)

無題

早速のご対応ありがとうございました。
ご指定のファイルでインストールできました。
使用例も使えました!

ありがとうございました!

Re:無題

よかったです。
こちらのビルド設定のミスでVisual Studioがインストールされていない環境で動かないようでした。ご報告ありがとうございました!

  • kawamoto_α
  • 2019/06/21(Fri.)

プラグインの適用について

あるふぁ(仮)様


お忙しいところ申し訳ありません。
OnegaiSDK.aip ver 0.2 を利用したいと思い、ダウンロードして紹介されている方法で適用を試みたのですが上手く適用できません。
私の利用環境は
MacBook Pro (13-inch, 2019, Two Thunderbolt 3 ports)
OS:Mac catalina 10.15.6
Illustrator v.24.3
です。
一応、システム環境設定のプライバシーとセキュリティでの設定も試みました。
対策方法があれば教えていただければ幸いです。
お手数ですが、よろしくお願いいたします。

Re:プラグインの適用について

上手く適用できないというのがどういう状況なのかよく分からないですが、
イラレを起動して、メニューのヘルプ>システム情報 で表示されるものの中にOnegaiSDKがあるかどうか確かめてもらえますか?(非常に長いのでテキストエディタ等にコピペして検索すると良いです)

  • kawamoto_α
  • 2020/09/23(Wed.)

Re:Re:プラグインの適用について

あるふぁ(仮)様


返答ありがとうございます。
前回の質問で不明瞭な質問をしてしまい、申し訳ありません。

最初の質問の前日、お邪魔させていただいているこのページの「Download」の項目からMac版イラレ2020用のOnegai SDK.aipをダウンロードさせていただきました。そして「インストール」項目の説明通りのフォルダにダウンロードしたファイルを入れ、Illustratorを起動すると、「“OnegaiSDK.aip”は、開発元を検証できないため開けません。」と警告文が出てしまいました。
Macの方のセキュリティに引っかかってしまっていると思い、Macのシステム環境設定の「セキュリティとプライバシー」で「ダウンロードしたアプリケーションの実行許可」で「このまま実行」をクリックしました。変更できるように鍵は外しました。しかし、クリックしても反応はありませんでした。
そこで先述した警告文のキャンセル項目をクリックし、Illustratorを起動しても「プラグインの読み込みエラー」の警告文が出てしまいます。
あるふぁ(仮)様 の返信にありましたIllustratorのヘルプのシステム環境に「OnegaiSDK」はありました。
こういったプラグインを使用するのが初めてなので、対処方法を自分なりに調べたのですが、わかりません。
素晴らしいプラグインなので、ぜひとも利用したいです。何卒、アドバイスをいただければ幸いです。

Re:Re:Re:プラグインの適用について

詳しい情報をありがとうございます。
こちらのCatalina + Illustrator 24.3環境では、OnegaiSDKプラグインをビルドした環境でもあるせいか、特にエラーは出ません。
しかしadobeのフォーラム等で検索してみるとCatalinaになってセキュリティ関係のエラーでプラグインが動かなくなった、という話は結構あるみたいですね。

下のリンクはPhotoshopの話ですが、「macOS 10.15 用に作成されていない古いプラグインの回避策」の部分はIllustratorにも使えるかもしれません。

https://helpx.adobe.com/jp/photoshop/kb/photoshop-and-macos-catalina.html#%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%89%E3%81%AA%E3%81%84%E3%81%8B%E7%A2%BA%E8%AA%8D%E3%81%95%E3%82%8C%E3%81%AA%E3%81%84


私にもよく分かっておらず試してもいないことを人に勧めるのは大変しのびないのですが、ぜひとも使いたいと思っていただけているのでしたら、試してみてはいかがでしょう。

  • kawamoto_α
  • 2020/09/23(Wed.)

無題

初めまして。

非常に素晴らしいスクリプトをありがとうございます。

一点お伺いしたいのですが、こちらのスクリプトはダイアログを挟まずにtop→bottomのみを実行することは可能なのでしょうか?

お忙しいところ申し訳ありませんが、何卒よろしくお願いいたします。

Re:無題

一番上の塗りや線を一番下にって意味ですか?
"movePaintBottom"で第3引数を"0"にすればできると思います

  • kawamoto_α
  • 2020/10/28(Wed.)

Re:Re:無題

大変失礼いたしました。

他サイト様で公開されていたスクリプトのページと勘違いして書き込みを行ってしまいました。

頂いた回答を参考に調整してみたいと思います。

今後のサイト更新も楽しみにしております。

getStyleString の詳細な情報は取得できますでしょうか

Twitterで本プラグインを知り、とても便利で感動しております。

アピアランスで角丸が設定されたオブジェクトの角丸サイズを getStyleString もしくは他の方法で取得することは可能でしょうか。

よろしくお願いいたします。

Re:getStyleString の詳細な情報は取得できますでしょうか

そこまではできないですねー

  • kawamoto_α
  • 2021/07/25(Sun.)

M1 macにて

M1対応のIllustrator 2022で「OnegaiSDK.aip」「InnerSelectTool.aip」を利用しようとすると「一部のプラグインは、ARM ネイティブモードでllustrator をサポートしていません。これらのプラグインを使用するには、Intel エミュレーションモードでIlustrator を起動してください。」
となるのですが、ARMネイティブモードのまま使うことはできないでしょうか?

Re:M1 macにて

すいません、M1 Mac持ってないので対応できません。

  • kawamoto_α
  • 2022/01/26(Wed.)

getKeyObjectの結果が常に-1

スクリプト開発テスト中にOnegaiSDKの怪しい挙動を見つけましたので報告します。

OnegaiSDK.aip ver 0.2 win 2020用、正常に読み込めますがgetKeyObjectの結果が常に-1になるようです。2019版は正常に取得できています。
環境: Windows 10, Illustrator 2024(28.0)

// 実行したスクリプト。jsxとして保存しウインドウにドロップして実行
try {
sendScriptMessage('OnegaiSDK', 'getKeyObject', '');
} catch(e) {
alert(e);
}

Re:getKeyObjectの結果が常に-1

ありがとうございます。
プラグインは絶賛放置中になってしまっていますが、いつかまた改修したり新しいの作ったりしたい気持ちはあるので、そのときはよろしくお願いします。

  • kawamoto_α
  • 2023/11/16(Thu.)

プロフィール

kawamoto_α
(あるふぁ(仮))


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

ツイッタ

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



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



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



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