JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / site / j2s / JU / M3.js
1 Clazz.declarePackage ("JU");\r
2 Clazz.load (["JU.M34"], "JU.M3", ["JU.T3"], function () {\r
3 c$ = Clazz.declareType (JU, "M3", JU.M34, java.io.Serializable);\r
4 c$.newA9 = Clazz.defineMethod (c$, "newA9", \r
5 function (v) {\r
6 var m =  new JU.M3 ();\r
7 m.setA (v);\r
8 return m;\r
9 }, "~A");\r
10 c$.newM3 = Clazz.defineMethod (c$, "newM3", \r
11 function (m1) {\r
12 var m =  new JU.M3 ();\r
13 if (m1 == null) {\r
14 m.setScale (1);\r
15 return m;\r
16 }m.m00 = m1.m00;\r
17 m.m01 = m1.m01;\r
18 m.m02 = m1.m02;\r
19 m.m10 = m1.m10;\r
20 m.m11 = m1.m11;\r
21 m.m12 = m1.m12;\r
22 m.m20 = m1.m20;\r
23 m.m21 = m1.m21;\r
24 m.m22 = m1.m22;\r
25 return m;\r
26 }, "JU.M3");\r
27 Clazz.defineMethod (c$, "setScale", \r
28 function (scale) {\r
29 this.clear33 ();\r
30 this.m00 = this.m11 = this.m22 = scale;\r
31 }, "~N");\r
32 Clazz.defineMethod (c$, "setM3", \r
33 function (m1) {\r
34 this.setM33 (m1);\r
35 }, "JU.M34");\r
36 Clazz.defineMethod (c$, "setA", \r
37 function (m) {\r
38 this.m00 = m[0];\r
39 this.m01 = m[1];\r
40 this.m02 = m[2];\r
41 this.m10 = m[3];\r
42 this.m11 = m[4];\r
43 this.m12 = m[5];\r
44 this.m20 = m[6];\r
45 this.m21 = m[7];\r
46 this.m22 = m[8];\r
47 }, "~A");\r
48 Clazz.defineMethod (c$, "setElement", \r
49 function (row, col, v) {\r
50 this.set33 (row, col, v);\r
51 }, "~N,~N,~N");\r
52 Clazz.defineMethod (c$, "getElement", \r
53 function (row, col) {\r
54 return this.get33 (row, col);\r
55 }, "~N,~N");\r
56 Clazz.defineMethod (c$, "setRow", \r
57 function (row, x, y, z) {\r
58 switch (row) {\r
59 case 0:\r
60 this.m00 = x;\r
61 this.m01 = y;\r
62 this.m02 = z;\r
63 return;\r
64 case 1:\r
65 this.m10 = x;\r
66 this.m11 = y;\r
67 this.m12 = z;\r
68 return;\r
69 case 2:\r
70 this.m20 = x;\r
71 this.m21 = y;\r
72 this.m22 = z;\r
73 return;\r
74 default:\r
75 this.err ();\r
76 }\r
77 }, "~N,~N,~N,~N");\r
78 Clazz.defineMethod (c$, "setRowV", \r
79 function (row, v) {\r
80 switch (row) {\r
81 case 0:\r
82 this.m00 = v.x;\r
83 this.m01 = v.y;\r
84 this.m02 = v.z;\r
85 return;\r
86 case 1:\r
87 this.m10 = v.x;\r
88 this.m11 = v.y;\r
89 this.m12 = v.z;\r
90 return;\r
91 case 2:\r
92 this.m20 = v.x;\r
93 this.m21 = v.y;\r
94 this.m22 = v.z;\r
95 return;\r
96 default:\r
97 this.err ();\r
98 }\r
99 }, "~N,JU.T3");\r
100 Clazz.defineMethod (c$, "setRowA", \r
101 function (row, v) {\r
102 this.setRow33 (row, v);\r
103 }, "~N,~A");\r
104 Clazz.overrideMethod (c$, "getRow", \r
105 function (row, v) {\r
106 this.getRow33 (row, v);\r
107 }, "~N,~A");\r
108 Clazz.defineMethod (c$, "setColumn3", \r
109 function (column, x, y, z) {\r
110 switch (column) {\r
111 case 0:\r
112 this.m00 = x;\r
113 this.m10 = y;\r
114 this.m20 = z;\r
115 break;\r
116 case 1:\r
117 this.m01 = x;\r
118 this.m11 = y;\r
119 this.m21 = z;\r
120 break;\r
121 case 2:\r
122 this.m02 = x;\r
123 this.m12 = y;\r
124 this.m22 = z;\r
125 break;\r
126 default:\r
127 this.err ();\r
128 }\r
129 }, "~N,~N,~N,~N");\r
130 Clazz.defineMethod (c$, "setColumnV", \r
131 function (column, v) {\r
132 switch (column) {\r
133 case 0:\r
134 this.m00 = v.x;\r
135 this.m10 = v.y;\r
136 this.m20 = v.z;\r
137 break;\r
138 case 1:\r
139 this.m01 = v.x;\r
140 this.m11 = v.y;\r
141 this.m21 = v.z;\r
142 break;\r
143 case 2:\r
144 this.m02 = v.x;\r
145 this.m12 = v.y;\r
146 this.m22 = v.z;\r
147 break;\r
148 default:\r
149 this.err ();\r
150 }\r
151 }, "~N,JU.T3");\r
152 Clazz.defineMethod (c$, "getColumnV", \r
153 function (column, v) {\r
154 switch (column) {\r
155 case 0:\r
156 v.x = this.m00;\r
157 v.y = this.m10;\r
158 v.z = this.m20;\r
159 break;\r
160 case 1:\r
161 v.x = this.m01;\r
162 v.y = this.m11;\r
163 v.z = this.m21;\r
164 break;\r
165 case 2:\r
166 v.x = this.m02;\r
167 v.y = this.m12;\r
168 v.z = this.m22;\r
169 break;\r
170 default:\r
171 this.err ();\r
172 }\r
173 }, "~N,JU.T3");\r
174 Clazz.defineMethod (c$, "setColumnA", \r
175 function (column, v) {\r
176 this.setColumn33 (column, v);\r
177 }, "~N,~A");\r
178 Clazz.defineMethod (c$, "getColumn", \r
179 function (column, v) {\r
180 this.getColumn33 (column, v);\r
181 }, "~N,~A");\r
182 Clazz.defineMethod (c$, "add", \r
183 function (m1) {\r
184 this.add33 (m1);\r
185 }, "JU.M3");\r
186 Clazz.defineMethod (c$, "sub", \r
187 function (m1) {\r
188 this.sub33 (m1);\r
189 }, "JU.M3");\r
190 Clazz.defineMethod (c$, "transpose", \r
191 function () {\r
192 this.transpose33 ();\r
193 });\r
194 Clazz.defineMethod (c$, "transposeM", \r
195 function (m1) {\r
196 this.setM33 (m1);\r
197 this.transpose33 ();\r
198 }, "JU.M3");\r
199 Clazz.defineMethod (c$, "invertM", \r
200 function (m1) {\r
201 this.setM33 (m1);\r
202 this.invert ();\r
203 }, "JU.M3");\r
204 Clazz.defineMethod (c$, "invert", \r
205 function () {\r
206 var s = this.determinant3 ();\r
207 if (s == 0.0) return;\r
208 s = 1 / s;\r
209 this.set9 (this.m11 * this.m22 - this.m12 * this.m21, this.m02 * this.m21 - this.m01 * this.m22, this.m01 * this.m12 - this.m02 * this.m11, this.m12 * this.m20 - this.m10 * this.m22, this.m00 * this.m22 - this.m02 * this.m20, this.m02 * this.m10 - this.m00 * this.m12, this.m10 * this.m21 - this.m11 * this.m20, this.m01 * this.m20 - this.m00 * this.m21, this.m00 * this.m11 - this.m01 * this.m10);\r
210 this.scale (s);\r
211 });\r
212 Clazz.defineMethod (c$, "setAsXRotation", \r
213 function (angle) {\r
214 this.setXRot (angle);\r
215 return this;\r
216 }, "~N");\r
217 Clazz.defineMethod (c$, "setAsYRotation", \r
218 function (angle) {\r
219 this.setYRot (angle);\r
220 return this;\r
221 }, "~N");\r
222 Clazz.defineMethod (c$, "setAsZRotation", \r
223 function (angle) {\r
224 this.setZRot (angle);\r
225 return this;\r
226 }, "~N");\r
227 Clazz.defineMethod (c$, "scale", \r
228 function (scalar) {\r
229 this.mul33 (scalar);\r
230 }, "~N");\r
231 Clazz.defineMethod (c$, "mul", \r
232 function (m1) {\r
233 this.mul2 (this, m1);\r
234 }, "JU.M3");\r
235 Clazz.defineMethod (c$, "mul2", \r
236 function (m1, m2) {\r
237 this.set9 (m1.m00 * m2.m00 + m1.m01 * m2.m10 + m1.m02 * m2.m20, m1.m00 * m2.m01 + m1.m01 * m2.m11 + m1.m02 * m2.m21, m1.m00 * m2.m02 + m1.m01 * m2.m12 + m1.m02 * m2.m22, m1.m10 * m2.m00 + m1.m11 * m2.m10 + m1.m12 * m2.m20, m1.m10 * m2.m01 + m1.m11 * m2.m11 + m1.m12 * m2.m21, m1.m10 * m2.m02 + m1.m11 * m2.m12 + m1.m12 * m2.m22, m1.m20 * m2.m00 + m1.m21 * m2.m10 + m1.m22 * m2.m20, m1.m20 * m2.m01 + m1.m21 * m2.m11 + m1.m22 * m2.m21, m1.m20 * m2.m02 + m1.m21 * m2.m12 + m1.m22 * m2.m22);\r
238 }, "JU.M3,JU.M3");\r
239 Clazz.overrideMethod (c$, "equals", \r
240 function (o) {\r
241 if (!(Clazz.instanceOf (o, JU.M3))) return false;\r
242 var m = o;\r
243 return this.m00 == m.m00 && this.m01 == m.m01 && this.m02 == m.m02 && this.m10 == m.m10 && this.m11 == m.m11 && this.m12 == m.m12 && this.m20 == m.m20 && this.m21 == m.m21 && this.m22 == m.m22;\r
244 }, "~O");\r
245 Clazz.overrideMethod (c$, "hashCode", \r
246 function () {\r
247 return JU.T3.floatToIntBits0 (this.m00) ^ JU.T3.floatToIntBits0 (this.m01) ^ JU.T3.floatToIntBits0 (this.m02) ^ JU.T3.floatToIntBits0 (this.m10) ^ JU.T3.floatToIntBits0 (this.m11) ^ JU.T3.floatToIntBits0 (this.m12) ^ JU.T3.floatToIntBits0 (this.m20) ^ JU.T3.floatToIntBits0 (this.m21) ^ JU.T3.floatToIntBits0 (this.m22);\r
248 });\r
249 Clazz.defineMethod (c$, "setZero", \r
250 function () {\r
251 this.clear33 ();\r
252 });\r
253 Clazz.defineMethod (c$, "set9", \r
254  function (m00, m01, m02, m10, m11, m12, m20, m21, m22) {\r
255 this.m00 = m00;\r
256 this.m01 = m01;\r
257 this.m02 = m02;\r
258 this.m10 = m10;\r
259 this.m11 = m11;\r
260 this.m12 = m12;\r
261 this.m20 = m20;\r
262 this.m21 = m21;\r
263 this.m22 = m22;\r
264 }, "~N,~N,~N,~N,~N,~N,~N,~N,~N");\r
265 Clazz.overrideMethod (c$, "toString", \r
266 function () {\r
267 return "[\n  [" + this.m00 + "\t" + this.m01 + "\t" + this.m02 + "]" + "\n  [" + this.m10 + "\t" + this.m11 + "\t" + this.m12 + "]" + "\n  [" + this.m20 + "\t" + this.m21 + "\t" + this.m22 + "] ]";\r
268 });\r
269 Clazz.defineMethod (c$, "setAA", \r
270 function (a) {\r
271 this.setAA33 (a);\r
272 return this;\r
273 }, "JU.A4");\r
274 Clazz.defineMethod (c$, "setAsBallRotation", \r
275 function (responseFactor, dx, dy) {\r
276 var r = Math.sqrt (dx * dx + dy * dy);\r
277 var th = r * responseFactor;\r
278 if (th == 0) {\r
279 this.setScale (1);\r
280 return false;\r
281 }var c = Math.cos (th);\r
282 var s = Math.sin (th);\r
283 var nx = -dy / r;\r
284 var ny = dx / r;\r
285 var c1 = c - 1;\r
286 this.m00 = 1 + c1 * nx * nx;\r
287 this.m01 = this.m10 = c1 * nx * ny;\r
288 this.m20 = -(this.m02 = s * nx);\r
289 this.m11 = 1 + c1 * ny * ny;\r
290 this.m21 = -(this.m12 = s * ny);\r
291 this.m22 = c;\r
292 return true;\r
293 }, "~N,~N,~N");\r
294 Clazz.defineMethod (c$, "isRotation", \r
295 function () {\r
296 return (Math.abs (this.determinant3 () - 1) < 0.001);\r
297 });\r
298 });\r