Clazz.declarePackage ("JV"); Clazz.load (["JV.TransformManager", "JU.M4", "$.P4", "$.V3"], "JV.TransformManager4D", ["JU.T4"], function () { c$ = Clazz.decorateAsClass (function () { this.is4D = false; this.mouseMode = 3; this.m2_rotate = null; this.m3_toScreen = null; this.zOffset = 0; this.v1 = null; this.m4 = null; this.p4 = null; this.zero = null; Clazz.instantialize (this, arguments); }, JV, "TransformManager4D", JV.TransformManager); Clazz.prepareFields (c$, function () { this.m3_toScreen = new JU.M4 (); this.v1 = new JU.V3 (); this.m4 = new JU.M4 (); this.p4 = new JU.P4 (); this.zero = new JU.V3 (); }); Clazz.makeConstructor (c$, function () { Clazz.superConstructor (this, JV.TransformManager4D, []); }); Clazz.overrideMethod (c$, "resetRotation", function () { if (this.m2_rotate != null) this.m2_rotate.setIdentity (); this.matrixRotate.setScale (1); }); Clazz.overrideMethod (c$, "rotateXYBy", function (xDelta, yDelta, bsAtoms) { this.rotate3DBall (xDelta, yDelta, bsAtoms); switch (this.is4D && bsAtoms == null ? this.mouseMode : 0) { case 0: this.m2_rotate = null; break; case 1: this.checkM2 (); this.rotate4DBall (0, xDelta, yDelta); break; case 2: this.checkM2 (); this.rotate4DBall (xDelta, 0, yDelta); break; case 3: this.checkM2 (); this.rotate4DBall (xDelta, yDelta, 0); break; } }, "~N,~N,JU.BS"); Clazz.defineMethod (c$, "rotate4DBall", function (xDelta, yDelta, zDelta) { var scale = 50; this.setAsBallRotation (this.m4, scale, xDelta, yDelta, zDelta); this.m2_rotate.mul2 (this.m4, this.m2_rotate); }, "~N,~N,~N"); Clazz.defineMethod (c$, "setAsBallRotation", function (m, scale, dx, dy, dz) { var dxyz2 = dx * dx + dy * dy + dz * dz; var sxyz = Math.sqrt (dxyz2); var th = sxyz / scale; var c = Math.cos (th); var s = Math.sin (th); var nx = dx / sxyz; var ny = dy / sxyz; var nz = dz / sxyz; var c1 = c - 1; m.m00 = 1 + c1 * nx * nx; m.m11 = 1 + c1 * ny * ny; m.m22 = 1 + c1 * nz * nz; m.m33 = c; m.m01 = m.m10 = c1 * nx * ny; m.m02 = m.m20 = c1 * nx * nz; m.m12 = m.m21 = c1 * ny * nz; m.m30 = -(m.m03 = s * nx); m.m31 = -(m.m13 = s * ny); m.m32 = -(m.m23 = s * nz); }, "JU.M4,~N,~N,~N,~N"); Clazz.defineMethod (c$, "checkM2", function () { if (this.m2_rotate == null) this.m2_rotate = JU.M4.newMV (this.matrixRotate, this.zero); }); Clazz.defineMethod (c$, "calcTransformMatrix", function () { Clazz.superCall (this, JV.TransformManager4D, "calcTransformMatrix", []); this.doTransform4D = (this.is4D && !this.stereoFrame && this.mode != 1); if (!this.doTransform4D) return; this.v1.sub2 (this.frameOffset, this.fixedRotationCenter); this.checkM2 (); this.m3_toScreen.setIdentity (); this.m3_toScreen.m00 = this.m3_toScreen.m11 = this.m3_toScreen.m22 = this.scalePixelsPerAngstrom; this.m3_toScreen.m11 = this.m3_toScreen.m22 = -this.scalePixelsPerAngstrom; System.out.println (this.m2_rotate); this.zOffset = this.modelCenterOffset; }); Clazz.overrideMethod (c$, "getScreenTemp", function (ptXYZ) { if (this.doTransform4D && Clazz.instanceOf (ptXYZ, JU.T4)) { this.p4.add2 (ptXYZ, this.v1); this.m2_rotate.rotate (this.p4); this.fScrPt.setT (this.p4); this.m3_toScreen.rotTrans (this.fScrPt); this.fScrPt.z += this.zOffset; } else { this.matrixTransform.rotTrans2 (ptXYZ, this.fScrPt); }}, "JU.T3"); Clazz.defineStatics (c$, "MODE_3D", 0, "MODE_4D_WX", 1, "MODE_4D_WY", 2, "MODE_4D_WZ", 3); });