UNPKG

biojs-vis-pdbviewer

Version:

A BioJS 2.0 component to view protein structures

229 lines (227 loc) 10.4 kB
Clazz.declarePackage ("J.export"); Clazz.load (["J.export.__RayTracerExporter", "$.UseTable"], "J.export._TachyonExporter", ["java.lang.Float", "JU.SB", "JV.Viewer"], function () { c$ = Clazz.decorateAsClass (function () { this.wasPerspectiveDepth = false; this.lighting = null; this.phong = null; this.textures = null; this.textureCode = null; Clazz.instantialize (this, arguments); }, J["export"], "_TachyonExporter", J["export"].__RayTracerExporter); Clazz.prepareFields (c$, function () { this.textures = new J["export"].UseTable (" "); }); Clazz.makeConstructor (c$, function () { Clazz.superConstructor (this, J["export"]._TachyonExporter, []); this.commentChar = "# "; }); Clazz.overrideMethod (c$, "initializeOutput", function (vwr, privateKey, g3d, params) { this.getLightingInfo (); return this.initOutput (vwr, privateKey, g3d, params); }, "JV.Viewer,~N,JU.GData,java.util.Map"); Clazz.defineMethod (c$, "getLightingInfo", function () { this.lighting = " AMBIENT " + J["export"].___Exporter.round (this.g3d.getAmbientPercent () / 100) + " DIFFUSE " + J["export"].___Exporter.round (this.g3d.getDiffusePercent () / 100) + " SPECULAR " + J["export"].___Exporter.round (this.g3d.getSpecularPercent () / 100); this.phong = " Phong Plastic 0.5 Phong_size " + this.g3d.getSpecularExponent (); }); Clazz.overrideMethod (c$, "outputHeader", function () { this.initVars (); this.output ("# ******************************************************\n"); this.output ("# Created by Jmol " + JV.Viewer.getJmolVersion () + "\n"); this.output ("#\n"); this.output ("# This script was generated on " + this.getExportDate () + "\n"); this.output ("#\n"); this.output ("# Requires Tachyon version 0.98.7 or newer\n"); this.output ("#\n"); this.output ("# Default tachyon rendering command for this scene:\n"); this.output ("# tachyon -aasamples 12 %s -format TARGA -o %s.tga\n"); this.output ("#\n"); this.output ("# ******************************************************\n"); this.output ("\n"); this.output (this.getJmolPerspective ()); this.output ("\n"); this.output ("Begin_Scene\n"); this.output ("Resolution " + this.screenWidth + " " + this.screenHeight + "\n"); this.output ("Shader_Mode Medium\n"); this.output (" Trans_VMD\n"); this.output (" Fog_VMD\n"); this.output ("End_Shader_Mode\n"); this.output ("Camera\n"); this.output (" Zoom 3.0\n"); this.output (" Aspectratio 1\n"); this.output (" Antialiasing 12\n"); this.output (" Raydepth 8\n"); this.output (" Center " + this.triad (Clazz.doubleToInt (this.screenWidth / 2), Clazz.doubleToInt (this.screenHeight / 2), 0) + "\n"); this.output (" Viewdir 0 0 1\n"); this.output (" Updir 0 1 0\n"); this.output ("End_Camera\n"); this.output ("Directional_Light Direction " + J["export"].___Exporter.round (this.lightSource) + " Color 1 1 1\n"); this.output ("\n"); this.output ("Background " + this.rgbFractionalFromColix (this.backgroundColix) + "\n"); this.output ("\n"); }); Clazz.overrideMethod (c$, "outputFooter", function () { this.output ("End_Scene\n"); }); Clazz.defineMethod (c$, "output", function (pt) { this.output (this.triad (pt)); }, "JU.T3"); Clazz.defineMethod (c$, "triad", function (x, y, z) { return Clazz.floatToInt (x) + " " + Clazz.floatToInt (-y) + " " + Clazz.floatToInt (z); }, "~N,~N,~N"); Clazz.defineMethod (c$, "triad", function (pt) { if (Float.isNaN (pt.x)) return "0 0 0"; return this.triad (pt.x, pt.y, pt.z); }, "JU.T3"); Clazz.defineMethod (c$, "outputTextureCode", function () { this.output (this.textureCode); this.output ("\n"); }); Clazz.defineMethod (c$, "outputTexture", function (colix, useTexDef) { this.outputTexture2 (this.rgbFractionalFromColix (colix), J["export"].___Exporter.opacityFractionalFromColix (colix), useTexDef); }, "~N,~B"); Clazz.defineMethod (c$, "outputTexture", function (argb, useTexDef) { this.outputTexture2 (this.rgbFractionalFromArgb (argb), J["export"].___Exporter.opacityFractionalFromArgb (argb), useTexDef); }, "~N,~B"); Clazz.defineMethod (c$, "outputTexture2", function (rgb, opacity, useTexDef) { this.textureCode = (useTexDef ? this.textures.getDef ("t" + rgb + opacity) : null); if (useTexDef && this.textureCode.startsWith (" ")) return; var sb = new JU.SB (); sb.append (this.lighting); sb.append (" Opacity " + opacity); sb.append (this.phong); sb.append (" Color " + rgb); sb.append (" TexFunc 0\n"); if (!useTexDef) { this.textureCode = "Texture " + sb; return; }this.output ("TexDef " + this.textureCode); this.output (sb.toString ()); this.textureCode = " " + this.textureCode; }, "~S,~S,~B"); Clazz.overrideMethod (c$, "outputCircle", function (x, y, z, radius, colix, doFill) { this.tempV1.set (0, 0, -1); this.outputRing (x, y, z, this.tempV1, radius, colix, doFill); }, "~N,~N,~N,~N,~N,~B"); Clazz.defineMethod (c$, "outputRing", function (x, y, z, tempV1, radius, colix, doFill) { this.outputTexture (colix, true); this.output ("Ring Center "); this.output (this.triad (x, y, z)); this.output (" Normal " + this.triad (tempV1)); this.output (" Inner " + J["export"].___Exporter.round ((doFill ? 0 : radius * 0.95))); this.output (" Outer " + J["export"].___Exporter.round (radius)); this.outputTextureCode (); }, "~N,~N,~N,JU.V3,~N,~N,~B"); Clazz.overrideMethod (c$, "outputCone", function (screenBase, screenTip, radius, colix, isBarb) { this.tm.unTransformPoint (screenBase, this.tempP1); this.tm.unTransformPoint (screenTip, this.tempP2); radius = this.vwr.tm.unscaleToScreen (screenBase.z, radius); var matRotateScale = this.getRotationMatrix (this.tempP1, this.tempP2, radius); this.jmolRenderer.drawSurface (J["export"].___Exporter.getConeMesh (this.tempP1, matRotateScale, colix), colix); }, "JU.P3,JU.P3,~N,~N,~B"); Clazz.overrideMethod (c$, "outputCylinder", function (screenA, screenB, radius, colix, withCaps) { this.outputTexture (colix, true); this.output ("FCylinder Base "); this.output (this.triad (screenA)); this.output (" Apex "); this.output (this.triad (screenB)); this.output (" Rad " + J["export"].___Exporter.round (radius)); this.outputTextureCode (); if (withCaps && radius > 1) { this.tempV1.sub2 (screenA, screenB); this.outputRing (Clazz.floatToInt (screenA.x), Clazz.floatToInt (screenA.y), Clazz.floatToInt (screenA.z), this.tempV1, radius, colix, true); this.tempV1.scale (-1); this.outputRing (Clazz.floatToInt (screenB.x), Clazz.floatToInt (screenB.y), Clazz.floatToInt (screenB.z), this.tempV1, radius, colix, true); }}, "JU.P3,JU.P3,~N,~N,~B"); Clazz.overrideMethod (c$, "fillConicalCylinder", function (screenA, screenB, madBond, colix, endcaps) { var diameter = Clazz.floatToInt (this.vwr.tm.scaleToScreen (Clazz.floatToInt ((screenA.z + screenB.z) / 2), madBond)); this.fillCylinderScreenMad (colix, endcaps, diameter, screenA, screenB); }, "JU.P3,JU.P3,~N,~N,~N"); Clazz.overrideMethod (c$, "outputCylinderConical", function (screenA, screenB, radius1, radius2, colix) { }, "JU.P3,JU.P3,~N,~N,~N"); Clazz.overrideMethod (c$, "outputEllipsoid", function (center, radius, coef, colix) { this.tm.transformPt3f (center, this.tempP1); this.outputSphere (this.tempP1.x, this.tempP1.y, this.tempP1.z, radius, colix); }, "JU.P3,~N,~A,~N"); Clazz.overrideMethod (c$, "outputSurface", function (vertices, normals, colixes, indices, polygonColixes, nVertices, nPolygons, nFaces, bsPolygons, faceVertexMax, colix, colorList, htColixes, offset) { if (polygonColixes != null) { 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))) { J["export"].___Exporter.setTempVertex (vertices[indices[i][0]], offset, this.tempP1); J["export"].___Exporter.setTempVertex (vertices[indices[i][1]], offset, this.tempP2); J["export"].___Exporter.setTempVertex (vertices[indices[i][2]], offset, this.tempP3); this.tm.transformPt3f (this.tempP1, this.tempP1); this.tm.transformPt3f (this.tempP2, this.tempP2); this.tm.transformPt3f (this.tempP3, this.tempP3); this.outputTriangle (this.tempP1, this.tempP2, this.tempP3, colix); } return; }this.outputTexture (colixes == null ? colix : colixes[0], false); this.output ("VertexArray Numverts " + nVertices + "\nCoords\n"); for (var i = 0; i < nVertices; i++) this.outputVertex (vertices[i], offset); this.output ("\nNormals\n"); for (var i = 0; i < nVertices; i++) { J["export"].___Exporter.setTempVertex (vertices[i], offset, this.tempP1); this.output (this.triad (this.getScreenNormal (this.tempP1, normals[i], 10)) + "\n"); } var rgb = (colixes == null ? this.rgbFractionalFromColix (colix) : null); this.output ("\nColors\n"); for (var i = 0; i < nVertices; i++) { this.output ((colixes == null ? rgb : this.rgbFractionalFromColix (colixes[i])) + "\n"); } this.outputTextureCode (); this.output ("\nTriMesh " + nFaces + "\n"); 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.output (indices[i][0] + " " + indices[i][1] + " " + indices[i][2] + "\n"); if (faceVertexMax == 4 && indices[i].length == 4) this.output (indices[i][0] + " " + indices[i][2] + " " + indices[i][3] + "\n"); } this.output ("\nEnd_VertexArray\n"); }, "~A,~A,~A,~A,~A,~N,~N,~N,JU.BS,~N,~N,JU.Lst,java.util.Map,JU.P3"); Clazz.overrideMethod (c$, "outputSphere", function (x, y, z, radius, colix) { this.outputTexture (colix, true); this.output ("Sphere Center "); this.output (this.triad (x, y, z)); this.output (" Rad " + J["export"].___Exporter.round (radius)); this.outputTextureCode (); }, "~N,~N,~N,~N,~N"); Clazz.overrideMethod (c$, "outputTextPixel", function (x, y, z, argb) { this.outputTexture (argb, true); this.output ("Sphere Center "); this.output (this.triad (x, y, z)); this.output (" Rad 1"); this.outputTextureCode (); }, "~N,~N,~N,~N"); Clazz.overrideMethod (c$, "outputTriangle", function (ptA, ptB, ptC, colix) { this.outputTexture (colix, true); this.output ("TRI"); this.output (" V0 " + this.triad (ptA)); this.output (" V1 " + this.triad (ptB)); this.output (" V2 " + this.triad (ptC)); this.outputTextureCode (); }, "JU.P3,JU.P3,JU.P3,~N"); });