JSExporter
Date: 2019-10-22

org.jmol.export

## Class JSExporter

- java.lang.Object
- - org.jmol.export.___Exporter
  - - org.jmol.export.__CartesianExporter
    - - org.jmol.export.JSExporter

-     public class JSExporter
      extends __CartesianExporter

  A class to output WebGL graphics. Only minimally fleshed out. No text, for instance. This class demonstrates a way of interacting with JavaScript that other classes in Jmol do not use. The methods here that start with "js" -- jsInitExport, jsEndExport, etc., are all implemented in JSmolGLmol.js -- that is, they are overridden in the JavaScript. The advantage to this is that this code references just the one line of JavaScript below, which is a static call and serves to extend the prototype. extendJSExporter is in JSmolGLmol.js.

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `(package private) java.lang.Object` | `html5Applet`
    `private java.util.Map<java.lang.String,java.lang.Object[]>` | `htObjects`
    `private java.util.Map<java.lang.String,java.lang.Boolean>` | `htSpheresRendered`
    `private java.lang.String[]` | `ret`
    `private UseTable` | `useTable`

    - ### Fields inherited from class org.jmol.export.__CartesianExporter

      `canCapCylinders, noColor, sphereMatrix, viewpoint`

    - ### Fields inherited from class org.jmol.export.___Exporter

      `apertureAngle, backgroundColix, cameraDistance, cameraPosition, center, commandLineOptions, commentChar, degreesPerRadian, depthZ, export3D, exportScale, exportType, fileName, fixedRotationCenter, gdata, lightSource, lineWidthMad, out, privateKey, referenceCenter, scalePixelsPerAngstrom, screenHeight, screenWidth, slabZ, solidOnly, tempP1, tempP2, tempP3, tempV1, tempV2, tm, vwr`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `JSExporter()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `private java.lang.Integer` | `getColor(short colix)`
    `private int[]` | `getColors(short[] colixes)`
    `private void` | `jsCylinder(java.lang.Object applet, java.lang.String id, boolean isNew, javajs.util.P3 pt1, javajs.util.P3 pt2, java.lang.Object[] o)`
    `private void` | `jsEndExport(java.lang.Object applet)`
    `private void` | `jsInitExport(java.lang.Object applet)`
    `private void` | `jsSphere(java.lang.Object applet, java.lang.String id, boolean isNew, javajs.util.T3 pt, java.lang.Object[] o)`
    `protected void` | `jsSurface(java.lang.Object applet, javajs.util.T3[] vertices, javajs.util.T3[] normals, int[][] indices, int nVertices, int nPolygons, int nFaces, javajs.util.BS bsPolygons, int faceVertexMax, int color, int[] vertexColors, int[] polygonColors)`
    `(package private) void` | `jsTriangle(java.lang.Object applet, int color, javajs.util.T3 pt1, javajs.util.T3 pt2, javajs.util.T3 pt3)`
    `protected void` | `output(javajs.util.T3 pt)`
    `protected void` | `outputCircle(javajs.util.P3 pt1, javajs.util.P3 pt2, float radius, short colix, boolean doFill)`
    `protected void` | `outputCone(javajs.util.P3 ptBase, javajs.util.P3 ptTip, float radius, short colix)`
    `protected boolean` | `outputCylinder(javajs.util.P3 ptCenter, javajs.util.P3 pt1, javajs.util.P3 pt2, short colix, byte endcaps, float radius, javajs.util.P3 ptX, javajs.util.P3 ptY, boolean checkRadius)`
    `protected void` | `outputEllipsoid(javajs.util.P3 center, javajs.util.P3[] points, short colix)`
    `protected void` | `outputFace(int[] is, int[] coordMap, int faceVertexMax)`
    `protected void` | `outputFooter()`
    `protected void` | `outputHeader()`
    `protected void` | `outputSphere(javajs.util.P3 ptCenter, float radius, short colix, boolean checkRadius)`
    `protected void` | `outputSurface(javajs.util.T3[] vertices, javajs.util.T3[] normals, short[] vertexColixes, int[][] indices, short[] polygonColixes, int nVertices, int nPolygons, int nTriangles, javajs.util.BS bsPolygons, int faceVertexMax, short colix, javajs.util.Lst<java.lang.Short> colorList, java.util.Map<java.lang.Short,java.lang.Integer> htColixes, javajs.util.P3 offset)`
    `protected void` | `outputTextPixel(javajs.util.P3 pt, int argb)`
    `protected void` | `outputTriangle(javajs.util.T3 pt1, javajs.util.T3 pt2, javajs.util.T3 pt3, short colix)`
    `(package private) void` | `plotImage(int x, int y, int z, java.lang.Object image, short bgcolix, int width, int height)`
    `(package private) void` | `plotText(int x, int y, int z, short colix, java.lang.String text, Font font3d)`

    - ### Methods inherited from class org.jmol.export.__CartesianExporter

      `drawAtom, drawCircle, drawCylinder, drawEllipse, drawPixel, drawTextPixel, fillConeScreen, fillCylinderScreen, fillCylinderScreenMad, fillEllipsoid, fillSphere, fillTriangle, getCameraPosition, getCoordinateMap, getModelCenter, getNormalMap, outputIndices, outputSolidPlate, setSphereMatrix`

    - ### Methods inherited from class org.jmol.export.___Exporter

      `drawFilledCircle, drawSurface, finalizeOutput, finalizeOutput2, fixScreenZ, getByteCount, getColorList, getConeMesh, getExportDate, getJmolPerspective, getRotationMatrix, getRotationMatrix, getTriad, getTriadC, initializeOutput, initOutput, opacityFractionalFromArgb, opacityFractionalFromColix, output, outputComment, outputJmolPerspective, outputVertex, outputVertices, rgbFractionalFromArgb, rgbFractionalFromColix, round, round, setTempVertex, translucencyFractionalFromColix`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### htSpheresRendered

          private java.util.Map<java.lang.String,java.lang.Boolean> htSpheresRendered

    - #### htObjects

          private java.util.Map<java.lang.String,java.lang.Object[]> htObjects

    - #### html5Applet

          java.lang.Object html5Applet

    - #### useTable

          private UseTable useTable

    - #### ret

          private java.lang.String[] ret

  - ### Constructor Detail

    - #### JSExporter

          public JSExporter()

  - ### Method Detail

    - #### jsInitExport

          private void jsInitExport(java.lang.Object applet)

      Parameters:
        `applet` -

    - #### jsEndExport

          private void jsEndExport(java.lang.Object applet)

      Parameters:
        `applet` -

    - #### jsCylinder

          private void jsCylinder(java.lang.Object applet,
                                  java.lang.String id,
                                  boolean isNew,
                                  javajs.util.P3 pt1,
                                  javajs.util.P3 pt2,
                                  java.lang.Object[] o)

      Parameters:
        `applet` -
        `id` -
        `isNew` -
        `pt1` -
        `pt2` -
        `o` -

    - #### jsSphere

          private void jsSphere(java.lang.Object applet,
                                java.lang.String id,
                                boolean isNew,
                                javajs.util.T3 pt,
                                java.lang.Object[] o)

      Parameters:
        `applet` -
        `id` -
        `isNew` -
        `pt` -
        `o` -

    - #### jsSurface

          protected void jsSurface(java.lang.Object applet,
                                   javajs.util.T3[] vertices,
                                   javajs.util.T3[] normals,
                                   int[][] indices,
                                   int nVertices,
                                   int nPolygons,
                                   int nFaces,
                                   javajs.util.BS bsPolygons,
                                   int faceVertexMax,
                                   int color,
                                   int[] vertexColors,
                                   int[] polygonColors)

      Parameters:
        `applet` -
        `vertices` -
        `normals` -
        `indices` -
        `nVertices` -
        `nPolygons` -
        `nFaces` -
        `bsPolygons` -
        `faceVertexMax` -
        `color` -
        `vertexColors` -
        `polygonColors` -

    - #### jsTriangle

          void jsTriangle(java.lang.Object applet,
                          int color,
                          javajs.util.T3 pt1,
                          javajs.util.T3 pt2,
                          javajs.util.T3 pt3)

      Parameters:
        `applet` -
        `color` -
        `pt1` -
        `pt2` -
        `pt3` -

    - #### outputHeader

          protected void outputHeader()

      Specified by:
        `outputHeader` in class `___Exporter`

    - #### outputFooter

          protected void outputFooter()

      Overrides:
        `outputFooter` in class `___Exporter`

    - #### outputSphere

          protected void outputSphere(javajs.util.P3 ptCenter,
                                      float radius,
                                      short colix,
                                      boolean checkRadius)

      Specified by:
        `outputSphere` in class `__CartesianExporter`

    - #### outputCylinder

          protected boolean outputCylinder(javajs.util.P3 ptCenter,
                                           javajs.util.P3 pt1,
                                           javajs.util.P3 pt2,
                                           short colix,
                                           byte endcaps,
                                           float radius,
                                           javajs.util.P3 ptX,
                                           javajs.util.P3 ptY,
                                           boolean checkRadius)

      Specified by:
        `outputCylinder` in class `__CartesianExporter`

    - #### outputCircle

          protected void outputCircle(javajs.util.P3 pt1,
                                      javajs.util.P3 pt2,
                                      float radius,
                                      short colix,
                                      boolean doFill)

      Specified by:
        `outputCircle` in class `__CartesianExporter`

    - #### outputEllipsoid

          protected void outputEllipsoid(javajs.util.P3 center,
                                         javajs.util.P3[] points,
                                         short colix)

      Specified by:
        `outputEllipsoid` in class `__CartesianExporter`

    - #### outputCone

          protected void outputCone(javajs.util.P3 ptBase,
                                    javajs.util.P3 ptTip,
                                    float radius,
                                    short colix)

      Specified by:
        `outputCone` in class `__CartesianExporter`

    - #### getColor

          private java.lang.Integer getColor(short colix)

    - #### outputSurface

          protected void outputSurface(javajs.util.T3[] vertices,
                                       javajs.util.T3[] normals,
                                       short[] vertexColixes,
                                       int[][] indices,
                                       short[] polygonColixes,
                                       int nVertices,
                                       int nPolygons,
                                       int nTriangles,
                                       javajs.util.BS bsPolygons,
                                       int faceVertexMax,
                                       short colix,
                                       javajs.util.Lst<java.lang.Short> colorList,
                                       java.util.Map<java.lang.Short,java.lang.Integer> htColixes,
                                       javajs.util.P3 offset)

      Overrides:
        `outputSurface` in class `___Exporter`
      Parameters:
        `vertices` - generally unique vertices [0:nVertices)
        `normals` - one per vertex
        `vertexColixes` - one per vertex, or null
        `indices` - one per triangular or quad polygon; may have additional elements beyond vertex indices if faceVertexMax = 3 triangular if faceVertexMax == 3; 3 or 4 if face VertexMax = 4
        `polygonColixes` - face-based colixes
        `nVertices` - vertices[nVertices-1] is last vertex
        `nPolygons` - indices[nPolygons - 1] is last polygon
        `nTriangles` - number of triangular faces required
        `bsPolygons` - number of polygons (triangles or quads)
        `faceVertexMax` - (3) triangles only, indices[][i] may have more elements (4) triangles and quads; indices[][i].length determines
        `colix` - overall (solid) color index
        `colorList` - list of unique color IDs
        `htColixes` - map of color IDs to colorList

    - #### outputTriangle

          protected void outputTriangle(javajs.util.T3 pt1,
                                        javajs.util.T3 pt2,
                                        javajs.util.T3 pt3,
                                        short colix)

      Specified by:
        `outputTriangle` in class `__CartesianExporter`

    - #### outputTextPixel

          protected void outputTextPixel(javajs.util.P3 pt,
                                         int argb)

      Specified by:
        `outputTextPixel` in class `__CartesianExporter`

    - #### outputFace

          protected void outputFace(int[] is,
                                    int[] coordMap,
                                    int faceVertexMax)

      Specified by:
        `outputFace` in class `__CartesianExporter`

    - #### output

          protected void output(javajs.util.T3 pt)

      Specified by:
        `output` in class `___Exporter`

    - #### plotImage

          void plotImage(int x,
                         int y,
                         int z,
                         java.lang.Object image,
                         short bgcolix,
                         int width,
                         int height)

      Overrides:
        `plotImage` in class `__CartesianExporter`

    - #### plotText

          void plotText(int x,
                        int y,
                        int z,
                        short colix,
                        java.lang.String text,
                        Font font3d)

      Overrides:
        `plotText` in class `__CartesianExporter`

    - #### getColors

          private int[] getColors(short[] colixes)