マトリックスの世界:JavaScriptからイラストレーターに貼付けてある画像の拡大率と角度を得る

イラストレーターで配置した画像の変形情報をJavaScriptから参照できないか調べた。
AppleScriptの情報は出てくるのだけど、JavaScriptで書いたものが出てこない。
そこでいろんなところを参考にしながら、JavaScriptでとりあえず書いてみた。
どうも、「Matrix(マトリックス)」が鍵を握っているようなんだけど、
いまいち扱い方がよく判ってなかったりします。

参考にしたのは:
Adobe Forums: get text frame's angle of rotation
(DTPtechNote:1747) Re: Illustratorのオブジェクト情報

var matrixConvert ={
'isObj' : function(obj){return typeof obj == 'object' ? true : false},
'hasMatrix' : function(obj){return obj.hasOwnProperty ('matrix') ? true : false},
'isMirrorX' : function(obj){
				if(!this.isObj(obj) || !this.hasMatrix(obj))return false;
				return obj.matrix.mValueA > 0 ? false : true;
				},
'isMirrorY' :function(obj){
                if(!this.isObj(obj) || !this.hasMatrix(obj))return false;
                return obj.matrix.mValueD < 0 ? false : (this.getRotation(obj) < -90 ? true : false);
                },
'getAll' : function(obj){
                if(!this.isObj(obj) || !this.hasMatrix(obj))return false;
                return {'hs' : this.getHorizontalScale(obj),
                			'vs' : this.getVerticalScale(obj),
                			'angle' : this.getRotation(obj)
                		}	
                },
'getScale' : function(obj){
                if(!this.isObj(obj) || !this.hasMatrix(obj))return false;
                return {'hs' : this.getHorizontalScale(obj),
                			'vs' : this.getVerticalScale(obj)
                		}
                },
'getHorizontalScale' : function(obj){
                if(!this.isObj(obj) || !this.hasMatrix(obj))return false;
                return Math.round((Math.sqrt((Math.pow(obj.matrix.mValueA,2)) + (Math.pow(obj.matrix.mValueB,2)))*100000))/1000;
                },
'getVerticalScale' : function(obj){
                if(!this.isObj(obj) || !this.hasMatrix(obj))return false;
                return Math.round((Math.sqrt((Math.pow(obj.matrix.mValueC,2)) + (Math.pow(obj.matrix.mValueD,2)))*100000))/1000;
                },
'getRotation' : function(obj){
                if(!this.isObj(obj) || !this.hasMatrix(obj))return false;
                if(this.getHorizontalScale(obj) === this.getVerticalScale(obj)){
                var rad = Math.round((Math.atan2(obj.matrix.mValueC, obj.matrix.mValueD)*180/Math.PI)*1000)/1000;
                if(obj.constructor.name == 'PlacedItem')return rad > 0 ? rad-180 : rad+180;
                if(obj.constructor.name == 'TextFrame' || obj.constructor.name == 'RasterItem')return  rad*-1;
                if(obj.constructor.name == 'PatternColor' || obj.constructor.name == 'GradientColor')return rad;
                }
                return false;
                }
}


使う時はこんな感じ

//角度を得る
var object = app.activeDocument.selection[0]; //RasterItem or PlacedItem or TextFrame
//var object = app.activeDocument.selection[0].fillColor; //PatternColor or GradientColor
alert(matrixConvert.getRotation(object));

PatternColorとGradientColorにもマトリックスのプロパティがあるみたいなんでパターンの角度が判るようにしてみました。