| Clazz.declarePackage ("J.export"); | |
| Clazz.load (["J.export.___Exporter", "JU.A4", "$.M4"], "J.export.__CartesianExporter", ["java.lang.Float", "java.util.Hashtable", "JU.M3", "$.P3", "JU.C", "$.Logger"], function () { | |
| c$ = Clazz.decorateAsClass (function () { | |
| this.viewpoint = null; | |
| this.canCapCylinders = false; | |
| this.noColor = false; | |
| this.sphereMatrix = null; | |
| Clazz.instantialize (this, arguments); | |
| }, J["export"], "__CartesianExporter", J["export"].___Exporter); | |
| Clazz.prepareFields (c$, function () { | |
| this.viewpoint = new JU.A4 (); | |
| this.sphereMatrix = new JU.M4 (); | |
| }); | |
| Clazz.makeConstructor (c$, | |
| function () { | |
| Clazz.superConstructor (this, J["export"].__CartesianExporter, []); | |
| this.exportType = 1; | |
| this.lineWidthMad = 100; | |
| }); | |
| Clazz.defineMethod (c$, "getModelCenter", | |
| function () { | |
| return this.referenceCenter; | |
| }); | |
| Clazz.defineMethod (c$, "getCameraPosition", | |
| function () { | |
| var ptCamera = new JU.P3 (); | |
| var pt = JU.P3.new3 (Clazz.doubleToInt (this.screenWidth / 2), Clazz.doubleToInt (this.screenHeight / 2), 0); | |
| this.tm.unTransformPoint (pt, ptCamera); | |
| ptCamera.sub (this.center); | |
| this.tempP3.set (Clazz.doubleToInt (this.screenWidth / 2), Clazz.doubleToInt (this.screenHeight / 2), this.cameraDistance * this.scalePixelsPerAngstrom); | |
| this.tm.unTransformPoint (this.tempP3, this.tempP3); | |
| this.tempP3.sub (this.center); | |
| ptCamera.add (this.tempP3); | |
| return this.cameraPosition; | |
| }); | |
| Clazz.defineMethod (c$, "setTempPoints", | |
| function (ptA, ptB, isCartesian) { | |
| if (isCartesian) { | |
| this.tempP1.setT (ptA); | |
| this.tempP2.setT (ptB); | |
| } else { | |
| this.tm.unTransformPoint (ptA, this.tempP1); | |
| this.tm.unTransformPoint (ptB, this.tempP2); | |
| }}, "JU.P3,JU.P3,~B"); | |
| Clazz.defineMethod (c$, "getCoordinateMap", | |
| function (vertices, coordMap, bsValid) { | |
| var n = 0; | |
| for (var i = 0; i < coordMap.length; i++) { | |
| if (bsValid != null && !bsValid.get (i) || Float.isNaN (vertices[i].x)) { | |
| if (bsValid != null) bsValid.clear (i); | |
| continue; | |
| }coordMap[i] = n++; | |
| } | |
| return n; | |
| }, "~A,~A,JU.BS"); | |
| Clazz.defineMethod (c$, "getNormalMap", | |
| function (normals, nNormals, bsValid, vNormals) { | |
| var htNormals = new java.util.Hashtable (); | |
| var normalMap = Clazz.newIntArray (nNormals, 0); | |
| for (var i = 0; i < nNormals; i++) { | |
| var s; | |
| if (bsValid != null && !bsValid.get (i) || Float.isNaN (normals[i].x)) { | |
| if (bsValid != null) bsValid.clear (i); | |
| continue; | |
| }s = this.getTriad (normals[i]) + "\n"; | |
| if (htNormals.containsKey (s)) { | |
| normalMap[i] = htNormals.get (s).intValue (); | |
| } else { | |
| normalMap[i] = vNormals.size (); | |
| vNormals.addLast (s); | |
| htNormals.put (s, Integer.$valueOf (normalMap[i])); | |
| }} | |
| return normalMap; | |
| }, "~A,~N,JU.BS,JU.Lst"); | |
| Clazz.defineMethod (c$, "outputIndices", | |
| function (indices, map, nPolygons, bsPolygons, faceVertexMax) { | |
| var isAll = (bsPolygons == null); | |
| var i0 = (isAll ? nPolygons - 1 : bsPolygons.nextSetBit (0)); | |
| for (var i = i0; i >= 0; i = (isAll ? i - 1 : bsPolygons.nextSetBit (i + 1))) this.outputFace (indices[i], map, faceVertexMax); | |
| }, "~A,~A,~N,JU.BS,~N"); | |
| Clazz.overrideMethod (c$, "plotText", | |
| function (x, y, z, colix, text, font3d) { | |
| this.gdata.plotText (x, y, z, this.gdata.getColorArgbOrGray (colix), 0, text, font3d, this.export3D); | |
| }, "~N,~N,~N,~N,~S,javajs.awt.Font"); | |
| Clazz.overrideMethod (c$, "plotImage", | |
| function (x, y, z, image, bgcolix, width, height) { | |
| }, "~N,~N,~N,~O,~N,~N,~N"); | |
| Clazz.overrideMethod (c$, "drawAtom", | |
| function (atom, radius) { | |
| if (JU.Logger.debugging) this.outputComment ("atom " + atom); | |
| var colix = atom.colixAtom; | |
| this.outputSphere (atom, radius == 0 ? atom.madAtom / 2000 : radius, colix, JU.C.isColixTranslucent (colix)); | |
| }, "JM.Atom,~N"); | |
| Clazz.overrideMethod (c$, "drawCircle", | |
| function (x, y, z, diameter, colix, doFill) { | |
| this.tempP3.set (x, y, z); | |
| this.tm.unTransformPoint (this.tempP3, this.tempP1); | |
| var radius = this.vwr.tm.unscaleToScreen (z, diameter) / 2; | |
| this.tempP3.set (x, y, z + 1); | |
| this.tm.unTransformPoint (this.tempP3, this.tempP3); | |
| this.outputCircle (this.tempP1, this.tempP3, radius, colix, doFill); | |
| }, "~N,~N,~N,~N,~N,~B"); | |
| Clazz.overrideMethod (c$, "drawEllipse", | |
| function (ptCenter, ptX, ptY, colix, doFill) { | |
| this.tempV1.sub2 (ptX, ptCenter); | |
| this.tempV2.sub2 (ptY, ptCenter); | |
| this.tempV2.cross (this.tempV1, this.tempV2); | |
| this.tempV2.normalize (); | |
| this.tempV2.scale (doFill ? 0.002 : 0.005); | |
| this.tempP1.sub2 (ptCenter, this.tempV2); | |
| this.tempP2.add2 (ptCenter, this.tempV2); | |
| return this.outputCylinder (ptCenter, this.tempP1, this.tempP2, colix, doFill ? 2 : 0, 1.01, ptX, ptY, true); | |
| }, "JU.P3,JU.P3,JU.P3,~N,~B"); | |
| Clazz.overrideMethod (c$, "drawPixel", | |
| function (colix, x, y, z, scale) { | |
| this.tempP3.set (x, y, z); | |
| this.tm.unTransformPoint (this.tempP3, this.tempP1); | |
| this.outputSphere (this.tempP1, 0.02 * scale, colix, true); | |
| }, "~N,~N,~N,~N,~N"); | |
| Clazz.overrideMethod (c$, "drawTextPixel", | |
| function (argb, x, y, z) { | |
| this.tempP3.set (x, y, z); | |
| this.tm.unTransformPoint (this.tempP3, this.tempP1); | |
| this.outputTextPixel (this.tempP1, argb); | |
| }, "~N,~N,~N,~N"); | |
| Clazz.overrideMethod (c$, "fillConeScreen", | |
| function (colix, endcap, screenDiameter, screenBase, screenTip, isBarb) { | |
| this.tm.unTransformPoint (screenBase, this.tempP1); | |
| this.tm.unTransformPoint (screenTip, this.tempP2); | |
| var radius = this.vwr.tm.unscaleToScreen (screenBase.z, screenDiameter) / 2; | |
| if (radius < 0.05) radius = 0.05; | |
| this.outputCone (this.tempP1, this.tempP2, radius, colix); | |
| }, "~N,~N,~N,JU.P3,JU.P3,~B"); | |
| Clazz.overrideMethod (c$, "drawCylinder", | |
| function (ptA, ptB, colix1, colix2, endcaps, mad, bondOrder) { | |
| this.setTempPoints (ptA, ptB, bondOrder < 0); | |
| var radius = mad / 2000; | |
| if (JU.Logger.debugging) this.outputComment ("bond " + ptA + " " + ptB); | |
| if (colix1 == colix2 || this.noColor) { | |
| this.outputCylinder (null, this.tempP1, this.tempP2, colix1, endcaps, radius, null, null, bondOrder != -1); | |
| } else { | |
| this.tempV2.ave (this.tempP2, this.tempP1); | |
| this.tempP3.setT (this.tempV2); | |
| if (this.solidOnly && endcaps == 0) endcaps = 2; | |
| else if (this.canCapCylinders && endcaps == 3) endcaps = (this.solidOnly ? 5 : 4); | |
| this.outputCylinder (null, this.tempP3, this.tempP1, colix1, (endcaps == 3 ? 0 : endcaps), radius, null, null, true); | |
| this.outputCylinder (null, this.tempP3, this.tempP2, colix2, (endcaps == 3 ? 0 : endcaps), radius, null, null, true); | |
| if (endcaps == 3) { | |
| this.outputSphere (this.tempP1, radius * 1.01, colix1, bondOrder != -2); | |
| this.outputSphere (this.tempP2, radius * 1.01, colix2, bondOrder != -2); | |
| }}}, "JU.P3,JU.P3,~N,~N,~N,~N,~N"); | |
| Clazz.overrideMethod (c$, "fillCylinderScreenMad", | |
| function (colix, endcaps, mad, screenA, screenB) { | |
| var radius = mad / 2000; | |
| this.setTempPoints (screenA, screenB, false); | |
| this.outputCylinder (null, this.tempP1, this.tempP2, colix, endcaps, radius, null, null, true); | |
| }, "~N,~N,~N,JU.P3,JU.P3"); | |
| Clazz.overrideMethod (c$, "fillCylinderScreen", | |
| function (colix, endcaps, screenDiameter, screenA, screenB, ptA, ptB, radius) { | |
| if (ptA != null) { | |
| this.drawCylinder (ptA, ptB, colix, colix, endcaps, Math.round (radius * 2000), -1); | |
| return; | |
| }var mad = Math.round (this.vwr.tm.unscaleToScreen ((screenA.z + screenB.z) / 2, screenDiameter) * 1000); | |
| this.fillCylinderScreenMad (colix, endcaps, mad, screenA, screenB); | |
| }, "~N,~N,~N,JU.P3,JU.P3,JU.P3,JU.P3,~N"); | |
| Clazz.overrideMethod (c$, "fillEllipsoid", | |
| function (center, points, colix, x, y, z, diameter, toEllipsoidal, coef, deriv, octantPoints) { | |
| this.outputEllipsoid (center, points, colix); | |
| }, "JU.P3,~A,~N,~N,~N,~N,~N,JU.M3,~A,JU.M4,~A"); | |
| Clazz.overrideMethod (c$, "fillSphere", | |
| function (colix, diameter, pt) { | |
| this.tm.unTransformPoint (pt, this.tempP1); | |
| this.outputSphere (this.tempP1, this.vwr.tm.unscaleToScreen (pt.z, diameter) / 2, colix, true); | |
| }, "~N,~N,JU.P3"); | |
| Clazz.overrideMethod (c$, "fillTriangle", | |
| function (colix, ptA, ptB, ptC, twoSided) { | |
| this.tm.unTransformPoint (ptA, this.tempP1); | |
| this.tm.unTransformPoint (ptB, this.tempP2); | |
| this.tm.unTransformPoint (ptC, this.tempP3); | |
| if (this.solidOnly) { | |
| this.outputSolidPlate (this.tempP1, this.tempP2, this.tempP3, colix); | |
| } else { | |
| this.outputTriangle (this.tempP1, this.tempP2, this.tempP3, colix); | |
| if (twoSided) this.outputTriangle (this.tempP1, this.tempP3, this.tempP2, colix); | |
| }}, "~N,JU.T3,JU.T3,JU.T3,~B"); | |
| Clazz.defineMethod (c$, "outputSolidPlate", | |
| function (tempP1, tempP2, tempP3, colix) { | |
| }, "JU.P3,JU.P3,JU.P3,~N"); | |
| Clazz.defineMethod (c$, "setSphereMatrix", | |
| function (center, rx, ry, rz, a, sphereMatrix) { | |
| if (a != null) { | |
| var m = new JU.M3 (); | |
| m.m00 = rx; | |
| m.m11 = ry; | |
| m.m22 = rz; | |
| var mq = new JU.M3 ().setAA (a); | |
| mq.mul (m); | |
| sphereMatrix.setToM3 (mq); | |
| } else { | |
| sphereMatrix.setIdentity (); | |
| sphereMatrix.m00 = rx; | |
| sphereMatrix.m11 = ry; | |
| sphereMatrix.m22 = rz; | |
| }sphereMatrix.m03 = center.x; | |
| sphereMatrix.m13 = center.y; | |
| sphereMatrix.m23 = center.z; | |
| sphereMatrix.m33 = 1; | |
| }, "JU.T3,~N,~N,~N,JU.A4,JU.M4"); | |
| }); | |