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

AI rotaterの新版などを…

あけおめ、どぞよろ(^-^;
という事で、リクエスト来てたローテーターのアップデートです。
zxpパッケージは以下のリンクから
https://drive.google.com/open?id=1qwRLfqrMp9hdjUesZ_ArFzXkDxswo-3o

ZXP Installer等を利用してインストールして下さい。対応はver.17以降を全てサポートしています。

利用方法
このツールは曲線中のアンカーポイントにおける接線に対して平行にオブジェクトを自動的に配置するためのものです。平たく言うと選択したアンカーポイントを見て良い感じに一緒に選択したオブジェクトを回してくれるというものです。
例えは、以下のようにテキストとアンカーポイントを選択しておきます。

airotaterbefore

この状態からボタンをワンクリックで設定したオフセット位置に角度を合わせた状態に回転して配置し直してくれる優しい子です。

airotaterafter

もう一例挙げておきましょう。

airotaterrailway

この様に路線に対して駅の四角を手早く配置する際に便利です。

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で値を正常に取り出すことが出来ています。

nouiconsole

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

Corner Widget Switch (up to Illustrator CC)

Hi Everyone, Are corner widgets used? I do not use it at all. However, this widget is very useful. It is a waste not to use. But, it is true that there are times when this is very disturbing.
In that case, it is only necessary to cut off the display, but it is bother to select by pulling down from the menu each time. Moreover, it is unworthy of assign a shortcut key (Illustrator dose not accept “Control” key to use shory cut, why???). After all, after disappearing the display, it will not display regardless of the situation where there is no problem even if it is displayed.

皆様、コーナーウィジェットは利用されていますか? わたしは全く利用していません。しかしながら、この機能はとても便利なものです。利用しないというのはもったいないです。しかし、これがとても邪魔に感じるときもあるのも事実です。
その場合、表示を切ってしまえば良いのですが、いちいちメニューからプルダウンして選択するのも煩わしい。しかも、ショートカットキーを割り当てるのも勿体無い。で、結局表示を消した後表示しても問題ない状況にも関わらず表示しないままとなるわけで、己のものぐささを噛みしめる次第です。

Of course, Its nosense this situation. So, I managed to manage it somehow.

もちろん、こんな状況自体が勿体無い話なのです。ですから、何とかして使いやすくしようと考えました。

As you see left side of previouse image, one of my extension named “Selection Maker”. In this time I added switching button that we can change corner widget state in it.

今回以前作ったSelectionMakerってエクステンションにコーナーウィジェットの切り替え用のボタンを増設しました。

cornerwidget0

When we click “Corner Widget” button in previouse image, Corner Widget state change like below.
上の写真で「Corner Widget」ボタンをクリックすると下の写真の様に状態を切り替えることが出来ます。

cornerwidget1

That butto works alternately change Corner Widget state. Let’s Download below zxp file and try it. Have a funn!!!
ボタンの動作はオルタネート動作で状態を表示/非表示を交互に切り替えます。ダウンロードは以下から。

https://drive.google.com/open?id=0B8WPQj-WNG_TQmZSUzVGTXZIaDQ

Please note that You can use ZXP Installer and install zxp. Here is a link of ZXP Installer. However, If you aleady setup Player Debug Mode, You can use below zip package.
インストールにはZXPInstallerをご利用下さい。もしPlayerDebugModeを設定済みでしたら以下のリンクからzipパッケージを導入可能です。

https://drive.google.com/open?id=0B8WPQj-WNG_TZnhHck42N1dZeUU

最後になりましたが、ここ数週間はコード書いてません。これは主にオレンジ色のバッジが悪さをしているのですが、自然言語で色々と書く必要があり四苦八苦しております。しかしながら、「とても気持ちわるいこと」は考えていますのでお餅、いやお待ちいただけたらと思います(^-^)/

Reset Textframes Transformation.

texttransform1

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.

texttransform2texttransform3

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プロパティーを利用して変形を元に戻そうというものです。一つ注意が必要なのは変倍は長・平体へ適用されるためマトリクスには情報が含まれませんので戻しようがないところです。まあ、シアーとか微妙な回転をリセット出来るという点は便利ですが…

IllustratorCC2017新機能―サンプルテキストの割付を手懐ける

Illustrator CC2017がリリースされましたね。色々と新しい機能を試す方も多い事と存じます。
わたしはと言えば、当初からβテスターをしていた事もあり、なんだかぴんと来ていない状態です。また、前回のリリースで散々上げた情報がことごとく「でも、だって…」だった事も関係しているのですが、それはまた別のお話でございます。
今回は、例のアレです。デフォルトにサンプルテキストを勝手に流し込むアレです。余計なお世話系実装でブツブツ文句言うのもなんですが、もうちょっと爽やか系を求めたいと思いました。

続きを読む