JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / site / j2s / JU / A4.js
1 Clazz.declarePackage ("JU");\r
2 Clazz.load (["javajs.api.JSONEncodable"], "JU.A4", ["JU.T3"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.x = 0;\r
5 this.y = 0;\r
6 this.z = 0;\r
7 this.angle = 0;\r
8 Clazz.instantialize (this, arguments);\r
9 }, JU, "A4", null, [javajs.api.JSONEncodable, java.io.Serializable]);\r
10 Clazz.makeConstructor (c$, \r
11 function () {\r
12 this.z = 1.0;\r
13 });\r
14 c$.new4 = Clazz.defineMethod (c$, "new4", \r
15 function (x, y, z, angle) {\r
16 var a =  new JU.A4 ();\r
17 a.set4 (x, y, z, angle);\r
18 return a;\r
19 }, "~N,~N,~N,~N");\r
20 c$.newAA = Clazz.defineMethod (c$, "newAA", \r
21 function (a1) {\r
22 var a =  new JU.A4 ();\r
23 a.set4 (a1.x, a1.y, a1.z, a1.angle);\r
24 return a;\r
25 }, "JU.A4");\r
26 c$.newVA = Clazz.defineMethod (c$, "newVA", \r
27 function (axis, angle) {\r
28 var a =  new JU.A4 ();\r
29 a.setVA (axis, angle);\r
30 return a;\r
31 }, "JU.V3,~N");\r
32 Clazz.defineMethod (c$, "setVA", \r
33 function (axis, angle) {\r
34 this.x = axis.x;\r
35 this.y = axis.y;\r
36 this.z = axis.z;\r
37 this.angle = angle;\r
38 }, "JU.V3,~N");\r
39 Clazz.defineMethod (c$, "set4", \r
40 function (x, y, z, angle) {\r
41 this.x = x;\r
42 this.y = y;\r
43 this.z = z;\r
44 this.angle = angle;\r
45 }, "~N,~N,~N,~N");\r
46 Clazz.defineMethod (c$, "setAA", \r
47 function (a) {\r
48 this.x = a.x;\r
49 this.y = a.y;\r
50 this.z = a.z;\r
51 this.angle = a.angle;\r
52 }, "JU.A4");\r
53 Clazz.defineMethod (c$, "setM", \r
54 function (m1) {\r
55 this.setFromMat (m1.m00, m1.m01, m1.m02, m1.m10, m1.m11, m1.m12, m1.m20, m1.m21, m1.m22);\r
56 }, "JU.M3");\r
57 Clazz.defineMethod (c$, "setFromMat", \r
58  function (m00, m01, m02, m10, m11, m12, m20, m21, m22) {\r
59 var cos = (m00 + m11 + m22 - 1.0) * 0.5;\r
60 this.x = (m21 - m12);\r
61 this.y = (m02 - m20);\r
62 this.z = (m10 - m01);\r
63 var sin = 0.5 * Math.sqrt (this.x * this.x + this.y * this.y + this.z * this.z);\r
64 if (sin == 0 && cos == 1) {\r
65 this.x = this.y = 0;\r
66 this.z = 1;\r
67 } else {\r
68 this.angle = Math.atan2 (sin, cos);\r
69 }}, "~N,~N,~N,~N,~N,~N,~N,~N,~N");\r
70 Clazz.overrideMethod (c$, "hashCode", \r
71 function () {\r
72 return JU.T3.floatToIntBits0 (this.x) ^ JU.T3.floatToIntBits0 (this.y) ^ JU.T3.floatToIntBits0 (this.z) ^ JU.T3.floatToIntBits0 (this.angle);\r
73 });\r
74 Clazz.overrideMethod (c$, "equals", \r
75 function (o) {\r
76 if (!(Clazz.instanceOf (o, JU.A4))) return false;\r
77 var a1 = o;\r
78 return this.x == a1.x && this.y == a1.y && this.z == a1.z && this.angle == a1.angle;\r
79 }, "~O");\r
80 Clazz.overrideMethod (c$, "toString", \r
81 function () {\r
82 return "(" + this.x + ", " + this.y + ", " + this.z + ", " + this.angle + ")";\r
83 });\r
84 Clazz.overrideMethod (c$, "toJSON", \r
85 function () {\r
86 return "[" + this.x + "," + this.y + "," + this.z + "," + (this.angle * 180.0 / 3.141592653589793) + "]";\r
87 });\r
88 });\r