Faster, cleaner, smaler, more capabilities



code: careful attention to core functions yields results in 10% reduction in core download size:
  --                        uncompressed(former)     gzipped                     
  -- JSmol.min.nojq.js          134K                  38K
  -- core.z.js                 1586K(1781K)          364K
  -- corescript.z.js            378K (436K)           95K
  -- TOTAL                     2098K(2217K)          497K
                             (9.5% reduction)
  -- JmolApplet0.jar           1038K                1005K
  -- Thus, the "real" transfer size -- based on server-side gzipping -- is half the size of Jmol/Java.

new feature: adds remote logging for applet and app via http:// and via function for applet using
    jmolApplet0._applet.viewer.setLogfile(function(data) {......})

new feature compare {1.1} {2.1} BONDS "smiles"
  -- does flexible fit based on dihedrals.
  -- does internal rotation even if ROTATION TRANSLATION are not given
      (considered a possible bug)
  -- concatenation of:
       list = compare({1.1},{2.1},"smiles","BONDS")
       rotate branch @list 1
          compare {1.1} {2.1} SMARTS "smiles" rotate translate
        so, for example:
   load files "$tyrosine" "$lysergamide"
   select 1.1; color bonds red
   select 2.1; color bonds yellow
   sm = "c1ccccc1CCN"
   compare {1.1} {2.1} BONDS @sm rotate translate
new feature: show BEST ROTATION / show BEST VOLUME (better than undocumented show rotation best, show rotation volume)

new feature: set animationMode "ONCE" "LOOP" "PALINDROME"
new feature: show animationMode; x = animationMode

new feature: CAPTURE command, including ROCK and SPIN
    -- application and signed applet only (no JS)
    -- creates animated GIF
    -- uses ANIMATION FPS to determine play-back rate.
    CAPTURE "filename"
      -- starts capturing
      -- uses ANIMATION MODE to determine looping
      -- both PALINDROME and LOOP create looping; ONCE (default) does not
    CAPTURE "filename" ROCK x|y|z degrees
      -- does a clean rocking of the molecule about one of the three major axes
      -- axis and degrees optional; y 5 assumed
      -- based on: rotate Y 10 10;delay 2.0; rotate Y -10 -10; delay 2.0;rotate Y -10 -10; delay 2.0;rotate Y 10 10;delay 2.0
      -- uses LOOP mode
    CAPTURE "filename" SPIN x|y|z
      -- does a full spin of the molecule about one of the three major axes
      -- axis optional; y assumed
      -- based on: rotate Y 360 30;delay 15.0;
      -- uses LOOP mode
    CAPTURE off/on
      -- temporarily disables/enables capturing
    CAPTURE "" or just CAPTURE
      -- end capturing

new feature: set drawFontSize // defaults to 14.0

FEATURE CHANGE: added bindings: "drag" and "up" -- may affect power users who use BIND command
                new: _center                   CTRL+SHIFT+LEFT+click
                new: _reset                    SHIFT+LEFT+double+click

                mouse actions include one (each) of:
                    SINGLE DOUBLE
                    LEFT MIDDLE RIGHT WHEEL
                    DOWN DRAG UP CLICK
                for example:
                defaults are SINGLE, LEFT, and CLICK
                sequence is always:
                    (click) (only if no drag)
                Any of these actions may be tapped using
                    bind "<some mouse action>" "<jmol action or script>"
                Note that adding "+:" to an action
                    bind "<some mouse action" "+:<script...>"
                does not replace the Jmol action, just supplements it.
$ show mouse
_assignNew                LEFT+click              assign/new atom or bond (requires set picking assignAtom_??/assignBond_?)
_center                   CTRL+SHIFT+LEFT+click    center
_clickFrank               LEFT+click              pop up recent context menu (click on Jmol frank)
_pickConnect              LEFT+click              connect atoms (requires set picking CONNECT)
_deleteAtom               LEFT+click              delete atom (requires set picking DELETE ATOM)
_deleteBond               LEFT+click              delete bond (requires set picking DELETE BOND)
_depth                    CTRL+SHIFT+LEFT+double+drag    adjust depth (back plane; requires SLAB ON)
_dragAtom                 LEFT+drag               move atom (requires set picking DRAGATOM)
_dragDrawObject           SHIFT+LEFT+drag         move whole DRAW object (requires set picking DRAW)
_dragDrawPoint            ALT+LEFT+drag           move specific DRAW point (requires set picking DRAW)
_dragLabel                SHIFT+LEFT+drag         move label (requires set picking LABEL)
_dragMinimize             LEFT+drag               move atom and minimize molecule (requires set picking DRAGMINIMIZE)
_dragMinimizeMolecule     LEFT+drag               move and minimize molecule (requires set picking DRAGMINIMIZEMOLECULE)
_dragSelected             ALT+SHIFT+LEFT+drag     move selected atoms (requires set DRAGSELECTED)
_dragZ                    SHIFT+LEFT+drag         drag atoms in Z direction (requires set DRAGSELECTED)
_navTranslate             LEFT+drag               translate navigation point (requires set NAVIGATIONMODE and set picking NAVIGATE)
_pickAtom                 LEFT+click              pick an atom
_pickIsosurface           LEFT+click              pick an ISOSURFACE point (requires set DRAWPICKING
_pickLabel                LEFT+click              pick a label to toggle it hidden/displayed (requires set picking LABEL)
_pickMeasure              LEFT+click              pick an atom to include it in a measurement (after starting a measurement or after set picking DISTANCE/ANGLE/TORSION)
_pickNavigate             CTRL+SHIFT+LEFT+click    pick a point or atom to navigate to (requires set NAVIGATIONMODE)
_pickPoint                LEFT+click              pick a DRAW point (for measurements) (requires set DRAWPICKING
_popupMenu                CTRL+LEFT+down, RIGHT+down    pop up the full context menu
_reset                    SHIFT+LEFT+double+click, MIDDLE+double+click    reset (when clicked off the model)
_rotate                   LEFT+drag               rotate
_rotateBranch             SHIFT+LEFT+drag         rotate branch around bond (requires set picking ROTATEBOND)
_rotateSelected           ALT+LEFT+drag           rotate selected atoms (requires set DRAGSELECTED)
_rotateZ                  ALT+LEFT+drag, SHIFT+RIGHT+drag    rotate Z
_rotateZorZoom            SHIFT+LEFT+drag, MIDDLE+drag    rotate Z (horizontal motion of mouse) or zoom (vertical motion of mouse)
_select                   LEFT+double+click       select an atom (requires set pickingStyle EXTENDEDSELECT)
_selectToggleOr           LEFT+click              if all are selected, unselect all, otherwise add this group of atoms to the set of selected atoms (requires set pickingStyle DRAG)
_setMeasure               LEFT+double+click       pick an atom to initiate or conclude a measurement
_slab                     CTRL+SHIFT+LEFT+drag    adjust slab (front plane; requires SLAB ON)
_slabAndDepth             CTRL+ALT+SHIFT+LEFT+drag    move slab/depth window (both planes; requires SLAB ON)
_slideZoom                LEFT+drag               zoom (along right edge of window)
_spinDrawObjectCCW        LEFT+drag               click on two points to spin around axis counterclockwise (requires set picking SPIN)
_spinDrawObjectCW         SHIFT+LEFT+drag         click on two points to spin around axis clockwise (requires set picking SPIN)
_stopMotion               LEFT+double+click       stop motion (requires set waitForMoveTo FALSE)
_swipe                    LEFT+drag               spin model (swipe and release button and stop motion simultaneously)
_translate                CTRL+ALT+LEFT+drag, CTRL+RIGHT+drag, SHIFT+LEFT+double+drag, MIDDLE+double+drag    translate
_wheelZoom                WHEEL                   zoom

bug fix: JSON NIO port SYNC broken
bug fix: print getProperty("image", "width=200;height=300;type=png") not working

bug fix: write IMAGE "t.png" not working
bug fix: rotate -10 -10 not working

bug fix: mouse bindings not distinguishing DOWN/CLICK/DRAG/UP properly
bug fix: mouse bindings _center and _reset not working
bug fix: show MOUSE not including user-defined mouse bindings

bug fix: chains improperly selected in JSmol/HTML5
bug fix: JSmol/HTML5 not allowing drag-drop or file loading from a local drive.
bug fix: JSmol/HTML5 not allowing WRITE FILE ?
bug fix: JSmol/HTML5 not allowing WRITE xxx.pdb, xxx.mol, etc

bug fix: platformSpeed persists     but appears unreadable after loading a state
bug fix: JavaScript version InputStreamReader not processing non-UTF data correctly
bug fix: second reading of older PNG files with embedded script fails
         due to improper png file caching

code: overhaul of image creation methods

code: continued refactoring of ScriptEvaluator to ScriptExt
code: refactoring to isolate LabelToken and Labels from core JavaScript load
code: refactoring, simplification of image output and export
  -- folders created: org.jmol.image, org.jmol.dialog
  -- JpgEncoder, Jpg64Encoder, PngEncoder brought to org.jmol.image
     and made subclasses of ImageEncoder
  -- PpmEncoder fixed
  -- ImageEncoder stripped of all unnecessary ImageConsumer/producer business
  -- org.jmol.export.image.ImageCreator and parts of org.jmol.viewer.stateCreator reorganized
     into org.jmol.OutputManager, org.jmol.OutputManagerAwt, and org.jmol.OutputManagerJS
  -- clipboard functions moved into org.jmol.awt and org.jmol.awtjs2d
  -- now serves for just about all output needs.
code: major simplification and consolidation of file I/O methods, including exporters, using JmolOutputChannel class.
code: only FileOutputStream reference is one reference in org.jmol.awt.
code: code merge between 13.2 and 13.3   18 Sept 2013
code: major clean-up of ActionManager

Robert M. Hanson
Larson-Anderson Professor of Chemistry
St. Olaf College
Northfield, MN

If nature does not answer first what we want,
it is better to take what answer we get.

-- Josiah Willard Gibbs, Lecture XXX, Monday, February 5, 1900