YahooAPIを利用してルビを振るやつ

だいたい8年ぐらい前にやったネタなんですけど、未だに動きます。ここはYahooさんに感謝したいところです。
そんなに長いコードではありませんが、44行目だけ自分でYahooAIPに登録してふりがなAPIを利用するためのアプリケーションIDというのを取得して設定しなければならない仕様になっています。詳しくは以下をご参照ください。

https://developer.yahoo.co.jp/webapi/jlp/

ExtendScriptでのソケット通信のお手本みたいな構成になっていますので、そこら辺の事を重点的に見ていただくと勉強になるかもしれません。
もちろん、総ルビとかで息絶え絶えになりそうなときなんかに役に立ちます。コード自体は以下から取ってきてください。

https://github.com/ten-A/Extend_Script_experimentals/blob/master/group_ruby.jsx

繰り返しになりますが、YahooAPIのアプリケーションIDを書き換えないと動かないのでそこらへんの事にご注意ください。
ちなみに、わたし自身はこれで総ルビ振った後にMonoRubyエクステンションで手を加えていくようなワークフローで処理しています。(^-^)/

 

 


[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操作メソッドがあり、それを利用することによって色々と出来ることがあります。

上の画像のように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();


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


IllustratorCC2017のNoUIでのスクリプティング

moluappleのサジェスチョンです。

https://forums.adobe.com/thread/2386561

なんだこりゃ?って事で調べてみるとver.21でaddDocumentNoUIsaveNoUIというメソッドが追加されてましたw

IDのvisibleフラグをfalseにした時と同じような挙動になるのですが…

var prst = new DocumentPreset();
var dc = app.documents.addDocumentNoUI(prst);
var tx = dc.textFrames.add();
for (var i=0;i<10;i++){
   tx.contents += i + "\n";
   }
$.writeln(tx.contents);
var fl = new File("~/Desktop/testNoUI.ai");
dc.saveNoUI(fl);
dc.close();

とりあえずテストコードですが、この例では「saveNoUI」でスクリプトエンジンがクラッシュします。また前述のmoluappleの書き込みでもredrawメソッドでクラッシュすると報告されています。しかしながら、上の例では以下の様に$.writelnで値を正常に取り出すことが出来ています。

ちょっと、PRで報告してくる〜(^ー^)/


Reset Textframes Transformation.

Here is a little working concept code you can reset your selected textFrames shear, rotate and reflection. TextFrames have transform matrix. Here is a snipet of get it from a selected textFrames.

alert(app.selection[0].matrix); //Select only target textFrame.

We can invert it using applications method like below

alert(app.invertMatrix(app.selection[0].matrix));

Previouse two snipets return same “[Matrix]”. However, 2nd matrix is inverted values as you see below that make the Property Explorer’s result.

You can use below to test how it works.

var mtx = app.invertMatrix(app.selection[0].matrix);
 mtx.mValueTX = 0;
 mtx.mValueTY = 0;
 app.selection[0].transform(mtx)

*Both TX and TY values are global position. when you inverse it, object moves to outside of maximum canvas size range. Therefor, we need reset these values to 0.

For Japanese…

という事で、諸事情により当面こういった入り混じり系のCodeで話しましょうw状態になります。
今回のものはテキストフレームが持つMatrixプロパティーを利用して変形を元に戻そうというものです。一つ注意が必要なのは変倍は長・平体へ適用されるためマトリクスには情報が含まれませんので戻しようがないところです。まあ、シアーとか微妙な回転をリセット出来るという点は便利ですが…


workspaceをなんとかするスクリプト

workspaceSwitcherって書いちゃうとまたやってるのかwって思われてしまうのであえてタイトルにしないというのはわたしのささやかな抵抗なのですが、今回のものはInDesign用です。おそらくCS6でも動きますのスクリプトなのですが、思ったよりスイッチングが早かったので前から作っているプラグインバージョンは必要ないかもしれないなって80%程やる気を失っていしまっているのはまた別のおはなしです。いや、苦戦しているのは確かなのですがPrefixIDの問題とか色々なハードルがございましてなかなか一筋縄では行かない状態なのです。で、いっその事ロジックから一新してしまうのもありかなって思ったのでやってみるとそれなりに動作してしまったというわけなのです。現在、テストを兼ねてスタートアップに放り込んでIDを動作させていますが安定しているので一旦このバージョンを放流してお茶を濁しておこうという了見なのです。はい、まあ動くからいいじゃないですかぁw
SDKの方はある程度の事は出来るようになったのですが、中々一人では超えられない壁にぶち当たっている状況です。まあ、デベロッパーフィー払ってサポート受けるのが最短ではありますが、ブロンズでも年間$400以上ですのでパトロンでも見つけないとムリぽwww

続きを読む……