/** * TransformMatrix.as * * Matrix helper for Flash MX drawing functions * * Christopher Thilgen * Macromedia * January 16, 2002 * * I just ported this class to AS2, original source can be found at www.flashadvisor.com/forum/viewtopic.php?t=380&start=0 */ class com.jR.Drawing.TransformMatrix { public var a:Number; public var b:Number; public var c:Number = 0; public var d:Number; public var e:Number; public var f:Number = 0; public var g:Number; public var h:Number; public var i:Number = 1; private var _empty:Boolean = true; public function TransformMatrix(_a:Number, _b:Number, _d:Number, _e:Number, _g:Number, _h:Number) { if (arguments.length>0) { a = _a; b = _b; d = _d; e = _e; g = _g; h = _h; _empty = false; } } public function concat(matrix:TransformMatrix):Void { if (_empty == true) { a = matrix.a; d = matrix.d; g = matrix.g; b = matrix.b; e = matrix.e; h = matrix.h; c = matrix.c; f = matrix.f; i = matrix.i; } else { var result = new TransformMatrix(); result.a = a*matrix.a+b*matrix.d+c*matrix.g; result.b = a*matrix.b+b*matrix.e+c*matrix.h; result.c = a*matrix.c+b*matrix.f+c*matrix.i; result.d = d*matrix.a+e*matrix.d+f*matrix.g; result.e = d*matrix.b+e*matrix.e+f*matrix.h; result.f = d*matrix.c+e*matrix.f+f*matrix.i; result.g = g*matrix.a+h*matrix.d+i*matrix.g; result.h = g*matrix.b+h*matrix.e+i*matrix.h; result.i = g*matrix.c+h*matrix.f+i*matrix.i; a = result.a; d = result.d; g = result.g; b = result.b; e = result.e; h = result.h; c = result.c; f = result.f; i = result.i; } _empty = false; } public function scale(sx:Number, sy:Number) { var m:TransformMatrix = new TransformMatrix(sx, 0, 0, sy, 0, 0); return concat(m); } public function translate(tx:Number, ty:Number) { var m:TransformMatrix = new TransformMatrix(1, 0, 0, 1, tx, ty); return concat(m); } public function rotate(r:Number) { var rad = ( r / 180 ) * Math.PI; var cosVal = Math.cos(rad); var sinVal = Math.sin(rad); var m = new TransformMatrix(cosVal, sinVal, -sinVal, cosVal, 0, 0); return concat(m); } }