VS CodeをExtendScript用にセットアップする。(Mac版)

年末進行の慌ただしい中、ESTKが停止して世界が阿鼻叫喚に見舞われたことは記憶にあたらしいのですが、そんな中でさらっとESTKは32bitだからもう捨てるね(^-^)/なんて話も飛び出してwwwまあ、大変だったのですが、VisualStudio Codeのプラグインがリリースする事が発表されたのは朗報と言うべきでしょう。以前からVS Code慣れとけって言ってたのはこれに対応する為だったのですが、どれだけの人が真に受けたのでしょうかw
しかしながら、コードヘルパーの実装は見送られるようです。これはいけない、なんとかしなければって思ったのですが、世界は広いものでVS CodeでES編集する手法がありました。
こちらなのですが、TypeScript型定義ファイルを用意してTypeScript上でExtendScriptを編集してしまおうという乱暴な方たちです。

続きを読む

広告

オブジェクトモデルについて

今回の投稿もAdobe Max Japan2018にて私が担当したワークショップ「使わないと損をする! Illustrator & InDesignのScript活用講座 〜あれもこれも便利になります〜」のフォーローアップエントリーとなります。
Workshopではオブジェクトモデルについて概要的な解説を行いました。今回はこのオブジェクトモデルについて少し掘り下げたいと思います。

続きを読む

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

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

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

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

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

続きを読む

ExtendScript用OpenCVラッパー

基本的にNoReferenceでのご提供でございます。

こちらは/Library/Framework/に投入。
https://drive.google.com/open?id=1g9yBguBj61pEcO_tTWcNe41tkYllRc3C

以下を解凍すると必要なものが揃っています。
https://drive.google.com/open?id=1me95GKDUjn0BI3nIXsyCYkp6p8s_XPOU
全部同じ階層においておけば動作可能。Frameworkはユニバーサル構成ですから32bitのESTKからも実行可能。ExternalObjectをコールして帰ってくるのは顔のバウンズです。とりあえずjsxファイルの構成を確認してご利用ください。

恐らくOSX10.9以降なら動作するとおもわれます。

[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);

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

[AI]アフィン変換の活用[AI]

アフィン変換の活用Illustratorはいくつかのオブジェクトがmatrixプロパティを持ちます。そして、appクラスには各種matrix操作メソッドがあり、それを利用することによって色々と出来ることがあります。例えば、

スクリーンショット 2018-02-21 12.31.58

こちらのようにinverseMatrixを利用して回転角・縮尺をリセットするような操作が可能です。もっと単純に処理できるのはテキストオブジェクトでスケール等の情報が全て級数や長平体に移行されるためmatrixが回転角のみとなります。その為matrixの一部の数値からasinを利用して回転角を計算することが可能です。

var m = app.selection[0].matrix;
alert(-Math.asin(m.mValueC)/Math.PI*180);

メソッドが返すのはラジアンですから上の様にdgreeに変換する必要があります。とまあ、こんな感じで上手く使うと非常に便利なアフィン変換のマトリクスですが、なんだかなぁ〜って思っている方に以下のブツをおすすめします。

var $_affine={
var $_affine={
 win:function(){
 var w = new Window ('dialog', "affine matrix", undefined);
 var p1 = w.add('panel',undefined,"a"); p1.size = [100,45];
 var tx1 = p1.add('edittext',undefined,'1',{multiline:false});
 tx1.characters = 5;
 var p2 = w.add('panel',undefined,"b");
 p2.size = [100,45];
 var tx2 = p2.add('edittext',undefined,'0',{multiline:false});
 tx2.characters = 5;
 var p3 = w.add('panel',undefined,"c");
 p3.size = [100,45];
 var tx3 = p3.add('edittext',undefined,'0',{multiline:false});
 tx3.characters = 5;
 var p4 = w.add('panel',undefined,"d");
 p4.size = [100,45];
 var tx4 = p4.add('edittext',undefined,'1',{multiline:false});
 tx4.characters = 5;
 var cl = w.add('button', undefined, 'cancel', {name:'cancel'});
 var bt = w.add('button', undefined , 'apply', {name:'ok'});
 bt.onClick = function (){
 $_affine.applyTransform(tx1.text,tx2.text,tx3.text,tx4.text);
 } w.show();
 },
 applyTransform:function(a,b,c,d){
 var tm = new Matrix();
 tm.mValueA = Number(a);
 tm.mValueB = Number(b);
 tm.mValueC = Number(c);
 tm.mValueD = Number(d);
 tm.mValueTX = 0;
 tm.mValueTY = 0;
 //alert(tm.mValueA+tm.mValueB+tm.mValueC+tm.mValueD);
 app.selection[0].transform(tm,true,true,true,true,1);
 app.redraw();
 }
 }
$_affine.win();

スクリーンショット 2018-02-21 12.40.07
ScriptUIで各パラメータを入力して選択したオブジェクトを回したり拡大したりと試せるようになっています。一度使ってみてください。