svnno****@sourc*****
svnno****@sourc*****
2009年 6月 4日 (木) 20:09:04 JST
Revision: 1201
http://svn.sourceforge.jp/view?root=sie&view=rev&rev=1201
Author: dhrname
Date: 2009-06-04 20:09:04 +0900 (Thu, 04 Jun 2009)
Log Message:
-----------
Modified Paths:
--------------
branches/05x/050/sie.js
Modified: branches/05x/050/sie.js
===================================================================
--- branches/05x/050/sie.js 2009-06-04 11:06:02 UTC (rev 1200)
+++ branches/05x/050/sie.js 2009-06-04 11:09:04 UTC (rev 1201)
@@ -558,7 +558,7 @@
var x = 0, y = 0; //現在の点の絶対座標
var x0 = 0, y0 = 0; //subpath の始点の絶対座標
var dx = 0, dy = 0;
- var tma = ttm[0][0], tmb = ttm[1][0], tmc = ttm[0][1], tmd = ttm[1][1], tme = ttm[0][2], tmf = ttm[1][2];
+ var tma = ttm.a, tmb = ttm.b, tmc = ttm.c, tmd = ttm.d, tme = ttm.e, tmf = ttm.f;
for (var i = 0, Dli = D.length; i < Dli; ++i) {
var F = D[i];
var com = F[0].toLowerCase(); //F[0]の値はコマンド文字
@@ -875,14 +875,14 @@
var ptt = pt.matrixTransform(ttm);
ts.left = ptt.x+ "px";
ts.top = ptt.y+ "px";
- ts.width = this.width.value * ttm[0][0]+ "px";
- ts.height = this.height.value * ttm[1][1]+ "px";
- if (ttm[1][0] !== 0 || ttm[0][1] !== 0 || this.paint.fillopacity != 1) {//フィルター プロパティを使うと、PNGの透過性がなくなるので注意
+ ts.width = this.width.value * ttm.a+ "px";
+ ts.height = this.height.value * ttm.d+ "px";
+ if (ttm.b !== 0 || ttm.c !== 0 || this.paint.fillopacity != 1) {//フィルター プロパティを使うと、PNGの透過性がなくなるので注意
ts.filter = "progid:DXImageTransform.Microsoft.Matrix progid:DXImageTransform.Microsoft.Alpha";
var ttfi = this.tar.filters.item('DXImageTransform.Microsoft.Matrix');
ttfi.M11 = 1;
- ttfi.M12 = ttm[1][0];
- ttfi.M21 = ttm[0][1];
+ ttfi.M12 = ttm.b;
+ ttfi.M21 = ttm.c;
ttfi.M22 = 1;
ttfi.sizingMethod = "auto expand";
var ttfia = this.tar.filters.item('DXImageTransform.Microsoft.Alpha');
@@ -1450,7 +1450,7 @@
break;
}
}
- matri = [[a,c,e], [b,d,f], [0,0,1]];
+ matri = new Matrix(a,b,c,d,e,f);
matrix = matrix.multiply(matri);
lis = com = deg = rad = null;
}
@@ -1466,8 +1466,8 @@
return this;
}
Point.prototype.matrixTransform = function pmatrixtransform( /*Matrix*/ m) {
- var x = parseInt(m[0][0] * this.x + m[0][1] * this.y + m[0][2]);
- var y = parseInt(m[1][0] * this.x + m[1][1] * this.y + m[1][2]);
+ var x = parseInt(m.a * this.x + m.c * this.y + m.e);
+ var y = parseInt(m.b * this.x + m.d * this.y + m.f);
if (-1 < x && x < 1) {x=1;}
if (-1 < y && y < 1) {y=1;}
var s = new Point(x,y);
@@ -1496,22 +1496,19 @@
return s;
}
-//Matrixは2次元配列で処理
+//SVGMatrixを参照。行列
+function Matrix(a,b,c,d,e,f) { //引数はすべてNumber型
+ this.a = a; this.b = b; this.c = c; this.d = d; this.e = e; this.f = f;
+ return this;
+}
//Matrix同士の積を算出
-Array.prototype.multiply = function (m) {
- var s = [[],[],[0,0,1]];
- for (var i=0;i<2;++i) {
- var n = this[i];
- for (var j=0;j<3;++j) {
- s[i][j] = m[0][j]*n[0] + m[1][j]*n[1] + m[2][j]*n[2];
- }
- }
+Matrix.prototype.multiply = function matrixmultiply( /*Matrix*/ m) {
+ var s = new Matrix(this.a * m.a + this.c * m.b,this.b * m.a + this.d * m.b,this.a * m.c + this.c * m.d,this.b * m.c + this.d * m.d,this.a * m.e + this.c * m.f + this.e,this.b * m.e + this.d * m.f + this.f);
return s;
}
-
//行列式
-Array.prototype.determinant = function () {
- return (this[0][0] * this[1][1] - this[1][0] * this[0][1]);
+Matrix.prototype.determinant = function() {
+ return (this.a * this.d - this.b * this.c);
}
//SVGViewSpecを参照
@@ -1563,7 +1560,7 @@
try {
if (!vB) {
this._tx = this._ty = 0;
- return [[1, 0, 0], [0, 1, 0], [0, 0, 1]];
+ return new Matrix(1, 0, 0, 1, 0, 0);
}
var vbx = vB.x, vby = vB.y, vbw = vB.width, vbh = vB.height;
var rw = vw / vbw, rh = vh / vbh;
@@ -1612,7 +1609,7 @@
this._ty = ty;
ttps.marginLeft = this._tx+ "px";
ttps.marginTop = this._ty+ "px";
- var m = [[xr, 0, 0], [0, yr, 0], [0, 0, 1]];
+ var m = new Matrix(xr, 0, 0, yr, 0, 0);
return m;
} catch(e) {stlog.add(e,1031);}
}