Revision: 20555
          http://sourceforge.net/p/jmol/code/20555
Author:   hansonr
Date:     2015-06-06 22:41:37 +0000 (Sat, 06 Jun 2015)
Log Message:
-----------
Jmol.___JmolVersion="14.3.14_2015.06.06"

code: refactoring of viewer.JC for label/echo business

new feature: set labeloffset range expanded to [-500,500]

new feature: set labelOffsetAbsolute x y  
 -- was undocumented as "set labelOffsetExact" but used in state (still 
available)
 -- sets label to specific value; same as set labelOffset, but allows 0 in x or 
y
 -- range [-500,500]
 
bug fix: dragging labels not working properly
bug fix: axisAngle (javajs.util.A4) not resetting angle to 0 --> wrong default 
orientation saved to state immediately after RESET (broken in 
14.1.6_dev_2014.01.16c)

Modified Paths:
--------------
    trunk/Jmol/src/org/jmol/adapter/readers/quantum/JaguarReader.java
    trunk/Jmol/src/org/jmol/adapter/readers/xml/XmlHandler.java
    trunk/Jmol/src/org/jmol/adapter/readers/xml/XmlReader.java
    trunk/Jmol/src/org/jmol/adapter/readers/xtal/VaspChgcarReader.java
    trunk/Jmol/src/org/jmol/export/__CartesianExporter.java
    trunk/Jmol/src/org/jmol/export/__RayTracerExporter.java
    trunk/Jmol/src/org/jmol/g3d/Graphics3D.java
    trunk/Jmol/src/org/jmol/g3d/HermiteRenderer.java
    trunk/Jmol/src/org/jmol/g3d/SphereRenderer.java
    trunk/Jmol/src/org/jmol/g3d/TriangleRenderer.java
    trunk/Jmol/src/org/jmol/i18n/Language.java
    trunk/Jmol/src/org/jmol/jvxl/readers/Pmesh4Reader.java
    trunk/Jmol/src/org/jmol/modelset/ModelSet.java
    trunk/Jmol/src/org/jmol/modelset/Object2d.java
    trunk/Jmol/src/org/jmol/modelset/Text.java
    trunk/Jmol/src/org/jmol/render/CageRenderer.java
    trunk/Jmol/src/org/jmol/render/EchoRenderer.java
    trunk/Jmol/src/org/jmol/render/LabelsRenderer.java
    trunk/Jmol/src/org/jmol/render/TextRenderer.java
    trunk/Jmol/src/org/jmol/renderbio/StrandsRenderer.java
    trunk/Jmol/src/org/jmol/renderspecial/DipolesRenderer.java
    trunk/Jmol/src/org/jmol/renderspecial/EllipsoidsRenderer.java
    trunk/Jmol/src/org/jmol/script/ScriptEval.java
    trunk/Jmol/src/org/jmol/shape/Echo.java
    trunk/Jmol/src/org/jmol/shape/Hover.java
    trunk/Jmol/src/org/jmol/shape/Labels.java
    trunk/Jmol/src/org/jmol/util/MeshCapper.java
    trunk/Jmol/src/org/jmol/util/Point3fi.java
    trunk/Jmol/src/org/jmol/viewer/JC.java
    trunk/Jmol/src/org/jmol/viewer/Jmol.properties
    trunk/Jmol/src/org/jmol/viewer/StateCreator.java

Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/JaguarReader.java
===================================================================
--- trunk/Jmol/src/org/jmol/adapter/readers/quantum/JaguarReader.java   
2015-06-06 17:04:42 UTC (rev 20554)
+++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/JaguarReader.java   
2015-06-06 22:41:37 UTC (rev 20555)
@@ -340,7 +340,7 @@
           occ = 0;
         }
         //TODO: SOMO? 
-        // mo.put("occupancy", Float.valueOf(occ));
+        mo.put("occupancy", Float.valueOf(occ));
         nMo++;
         for (int i = 0, pt =0; i < moCount; i++) {
           //String type = dataBlock[i][2];

Modified: trunk/Jmol/src/org/jmol/adapter/readers/xml/XmlHandler.java
===================================================================
--- trunk/Jmol/src/org/jmol/adapter/readers/xml/XmlHandler.java 2015-06-06 
17:04:42 UTC (rev 20554)
+++ trunk/Jmol/src/org/jmol/adapter/readers/xml/XmlHandler.java 2015-06-06 
22:41:37 UTC (rev 20555)
@@ -27,8 +27,6 @@
 
 import java.io.BufferedReader;
 
-import org.jmol.java.BS;
-import org.jmol.util.BSUtil;
 import org.jmol.util.Logger;
 import org.xml.sax.Attributes;
 import org.xml.sax.InputSource;

Modified: trunk/Jmol/src/org/jmol/adapter/readers/xml/XmlReader.java
===================================================================
--- trunk/Jmol/src/org/jmol/adapter/readers/xml/XmlReader.java  2015-06-06 
17:04:42 UTC (rev 20554)
+++ trunk/Jmol/src/org/jmol/adapter/readers/xml/XmlReader.java  2015-06-06 
22:41:37 UTC (rev 20555)
@@ -23,20 +23,17 @@
  */
 package org.jmol.adapter.readers.xml;
 
-import org.jmol.adapter.smarter.AtomSetCollectionReader;
-import org.jmol.adapter.smarter.AtomSetCollection;
-import org.jmol.adapter.smarter.Atom;
-import org.jmol.adapter.smarter.Resolver;
-import org.jmol.api.Interface;
-
 import java.io.BufferedInputStream;
 import java.util.Hashtable;
 import java.util.Map;
 
-import org.jmol.java.BS;
 import javajs.util.Rdr;
 
-import org.jmol.util.BSUtil;
+import org.jmol.adapter.smarter.Atom;
+import org.jmol.adapter.smarter.AtomSetCollection;
+import org.jmol.adapter.smarter.AtomSetCollectionReader;
+import org.jmol.adapter.smarter.Resolver;
+import org.jmol.api.Interface;
 import org.jmol.util.Logger;
 
 /**

Modified: trunk/Jmol/src/org/jmol/adapter/readers/xtal/VaspChgcarReader.java
===================================================================
--- trunk/Jmol/src/org/jmol/adapter/readers/xtal/VaspChgcarReader.java  
2015-06-06 17:04:42 UTC (rev 20554)
+++ trunk/Jmol/src/org/jmol/adapter/readers/xtal/VaspChgcarReader.java  
2015-06-06 22:41:37 UTC (rev 20555)
@@ -27,10 +27,6 @@
 
 package org.jmol.adapter.readers.xtal;
 
-import javajs.util.PT;
-
-import org.jmol.adapter.smarter.AtomSetCollectionReader;
-
 /**
  * http://cms.mpi.univie.ac.at/vasp/vasp/CHGCAR_file.html
  * 

Modified: trunk/Jmol/src/org/jmol/export/__CartesianExporter.java
===================================================================
--- trunk/Jmol/src/org/jmol/export/__CartesianExporter.java     2015-06-06 
17:04:42 UTC (rev 20554)
+++ trunk/Jmol/src/org/jmol/export/__CartesianExporter.java     2015-06-06 
22:41:37 UTC (rev 20555)
@@ -26,25 +26,21 @@
 package org.jmol.export;
 
 import java.util.Hashtable;
-
 import java.util.Map;
 
-
-import org.jmol.java.BS;
-import org.jmol.modelset.Atom;
-import org.jmol.util.C;
-import org.jmol.util.GData;
-
 import javajs.awt.Font;
+import javajs.util.A4;
 import javajs.util.Lst;
-
-import javajs.util.A4;
 import javajs.util.M3;
 import javajs.util.M4;
 import javajs.util.P3;
-import javajs.util.P3i;
 import javajs.util.T3;
 
+import org.jmol.java.BS;
+import org.jmol.modelset.Atom;
+import org.jmol.util.C;
+import org.jmol.util.GData;
+
 /*
  * for programs that use the standard 3D coordinates.
  * IDTF, Maya, OBJ, VRML, JS

Modified: trunk/Jmol/src/org/jmol/export/__RayTracerExporter.java
===================================================================
--- trunk/Jmol/src/org/jmol/export/__RayTracerExporter.java     2015-06-06 
17:04:42 UTC (rev 20554)
+++ trunk/Jmol/src/org/jmol/export/__RayTracerExporter.java     2015-06-06 
22:41:37 UTC (rev 20555)
@@ -28,16 +28,15 @@
 
 import java.util.Map;
 
-import org.jmol.modelset.Atom;
-import org.jmol.util.GData;
-import org.jmol.viewer.Viewer;
-
 import javajs.util.M3;
 import javajs.util.M4;
 import javajs.util.P3;
-import javajs.util.P3i;
 import javajs.util.T3;
 
+import org.jmol.modelset.Atom;
+import org.jmol.util.GData;
+import org.jmol.viewer.Viewer;
+
 /*
  * for PovRay and related ray tracers that use screen coordinates
  * 

Modified: trunk/Jmol/src/org/jmol/g3d/Graphics3D.java
===================================================================
--- trunk/Jmol/src/org/jmol/g3d/Graphics3D.java 2015-06-06 17:04:42 UTC (rev 
20554)
+++ trunk/Jmol/src/org/jmol/g3d/Graphics3D.java 2015-06-06 22:41:37 UTC (rev 
20555)
@@ -1761,8 +1761,8 @@
     }
   }
 
-  void plotPixelsUnclippedRasterBits(int count, int x, int y, int zAtLeft,
-                                 int zPastRight, Rgb16 rgb16Left,
+  void plotPixelsUnclippedRasterBits(int count, int x, int y, 
+                                 Rgb16 rgb16Left,
                                  Rgb16 rgb16Right, float a, float b) {
     // for isosurface Triangle3D.fillRaster
     

Modified: trunk/Jmol/src/org/jmol/g3d/HermiteRenderer.java
===================================================================
--- trunk/Jmol/src/org/jmol/g3d/HermiteRenderer.java    2015-06-06 17:04:42 UTC 
(rev 20554)
+++ trunk/Jmol/src/org/jmol/g3d/HermiteRenderer.java    2015-06-06 22:41:37 UTC 
(rev 20555)
@@ -31,7 +31,6 @@
 
 import org.jmol.api.JmolRendererInterface;
 import org.jmol.util.GData;
-import org.jmol.util.Point3fi;
 
 import javajs.util.P3;
 import javajs.util.P3i;

Modified: trunk/Jmol/src/org/jmol/g3d/SphereRenderer.java
===================================================================
--- trunk/Jmol/src/org/jmol/g3d/SphereRenderer.java     2015-06-06 17:04:42 UTC 
(rev 20554)
+++ trunk/Jmol/src/org/jmol/g3d/SphereRenderer.java     2015-06-06 22:41:37 UTC 
(rev 20555)
@@ -29,7 +29,6 @@
 import javajs.util.M3;
 import javajs.util.M4;
 import javajs.util.P3;
-import javajs.util.P3i;
 
 import org.jmol.util.Shader;
 

Modified: trunk/Jmol/src/org/jmol/g3d/TriangleRenderer.java
===================================================================
--- trunk/Jmol/src/org/jmol/g3d/TriangleRenderer.java   2015-06-06 17:04:42 UTC 
(rev 20554)
+++ trunk/Jmol/src/org/jmol/g3d/TriangleRenderer.java   2015-06-06 22:41:37 UTC 
(rev 20555)
@@ -392,7 +392,7 @@
             xW--;
           }
           if (pixelCount > 0)
-            g3d.plotPixelsUnclippedRasterBits(pixelCount, xW, yMin, azW[i], 
azE[i], null, null, aa[i], bb[i]);
+            g3d.plotPixelsUnclippedRasterBits(pixelCount, xW, yMin, null, 
null, aa[i], bb[i]);
         }
       }
     } else {

Modified: trunk/Jmol/src/org/jmol/i18n/Language.java
===================================================================
--- trunk/Jmol/src/org/jmol/i18n/Language.java  2015-06-06 17:04:42 UTC (rev 
20554)
+++ trunk/Jmol/src/org/jmol/i18n/Language.java  2015-06-06 22:41:37 UTC (rev 
20555)
@@ -25,8 +25,6 @@
 
 package org.jmol.i18n;
 
-import javajs.util.PT;
-
 public class Language {
 
   /**

Modified: trunk/Jmol/src/org/jmol/jvxl/readers/Pmesh4Reader.java
===================================================================
--- trunk/Jmol/src/org/jmol/jvxl/readers/Pmesh4Reader.java      2015-06-06 
17:04:42 UTC (rev 20554)
+++ trunk/Jmol/src/org/jmol/jvxl/readers/Pmesh4Reader.java      2015-06-06 
22:41:37 UTC (rev 20555)
@@ -78,7 +78,7 @@
   private String pmeshError;
   private String type;
   private int color;
-  private float transparency;
+  float transparency;
   private int nX;
   private int nY;
 

Modified: trunk/Jmol/src/org/jmol/modelset/ModelSet.java
===================================================================
--- trunk/Jmol/src/org/jmol/modelset/ModelSet.java      2015-06-06 17:04:42 UTC 
(rev 20554)
+++ trunk/Jmol/src/org/jmol/modelset/ModelSet.java      2015-06-06 22:41:37 UTC 
(rev 20555)
@@ -1143,7 +1143,7 @@
    * The default bounding box is created 
    * when the LOAD .... FILL BOUNDBOX or FILL UNITCELL
    * is use. 
-   * @return
+   * @return default bounding box, possibly null
    */
   private BoxInfo getDefaultBoundBox() {
     T3[] bbox = (T3[]) getInfoM("boundbox");

Modified: trunk/Jmol/src/org/jmol/modelset/Object2d.java
===================================================================
--- trunk/Jmol/src/org/jmol/modelset/Object2d.java      2015-06-06 17:04:42 UTC 
(rev 20554)
+++ trunk/Jmol/src/org/jmol/modelset/Object2d.java      2015-06-06 22:41:37 UTC 
(rev 20555)
@@ -61,7 +61,7 @@
     if (xyz == null)
       this.zSlab = Integer.MIN_VALUE;
     if (doAdjust) {
-      valign = (xyz == null ? JC.VALIGN_XY : JC.VALIGN_XYZ);
+      valign = (xyz == null ? JC.ECHO_XY : JC.ECHO_XYZ);
      adjustForWindow = (xyz == null);
     }
   }
@@ -76,13 +76,13 @@
   }
 
   private void setMovableX(int x) {
-    valign = (valign == JC.VALIGN_XYZ ? JC.VALIGN_XYZ : JC.VALIGN_XY);
+    valign = (valign == JC.ECHO_XYZ ? JC.ECHO_XYZ : JC.ECHO_XY);
     movableX = x;
     movableXPercent = Integer.MAX_VALUE;
   }
 
   private void setMovableY(int y) {
-    valign = (valign == JC.VALIGN_XYZ ? JC.VALIGN_XYZ : JC.VALIGN_XY);
+    valign = (valign == JC.ECHO_XYZ ? JC.ECHO_XYZ : JC.ECHO_XY);
     movableY = y;
     movableYPercent = Integer.MAX_VALUE;
   }
@@ -95,20 +95,20 @@
   //  }
 
   public void setMovableXPercent(int x) {
-    valign = (valign == JC.VALIGN_XYZ ? JC.VALIGN_XYZ : JC.VALIGN_XY);
+    valign = (valign == JC.ECHO_XYZ ? JC.ECHO_XYZ : JC.ECHO_XY);
     movableX = Integer.MAX_VALUE;
     movableXPercent = x;
   }
 
   public void setMovableYPercent(int y) {
-    valign = (valign == JC.VALIGN_XYZ ? JC.VALIGN_XYZ : JC.VALIGN_XY);
+    valign = (valign == JC.ECHO_XYZ ? JC.ECHO_XYZ : JC.ECHO_XY);
     movableY = Integer.MAX_VALUE;
     movableYPercent = y;
   }
 
   public void setMovableZPercent(int z) {
-    if (valign != JC.VALIGN_XYZ)
-      valign = JC.VALIGN_XY;
+    if (valign != JC.ECHO_XYZ)
+      valign = JC.ECHO_XY;
     movableZ = Integer.MAX_VALUE;
     movableZPercent = z;
   }
@@ -130,11 +130,11 @@
 
   public boolean setAlignmentLCR(String align) {
     if ("left".equals(align))
-      return setAlignment(JC.ALIGN_LEFT);
+      return setAlignment(JC.TEXT_ALIGN_LEFT);
     if ("center".equals(align))
-      return setAlignment(JC.ALIGN_CENTER);
+      return setAlignment(JC.TEXT_ALIGN_CENTER);
     if ("right".equals(align))
-      return setAlignment(JC.ALIGN_RIGHT);
+      return setAlignment(JC.TEXT_ALIGN_RIGHT);
     return false;
   }
 

Modified: trunk/Jmol/src/org/jmol/modelset/Text.java
===================================================================
--- trunk/Jmol/src/org/jmol/modelset/Text.java  2015-06-06 17:04:42 UTC (rev 
20554)
+++ trunk/Jmol/src/org/jmol/modelset/Text.java  2015-06-06 22:41:37 UTC (rev 
20555)
@@ -64,7 +64,7 @@
     offsetX = JC.getXOffset(offset);
     offsetY = JC.getYOffset(offset);
     pymolOffset = null;
-    valign = JC.VALIGN_XY;
+    valign = JC.ECHO_XY;
   }
 
   private int[] widths;
@@ -98,7 +98,7 @@
     t.set(font, colix, align, false, scalePixelsPerMicron, null);
     t.target = target;
     if (target.equals("error"))
-      valign = JC.VALIGN_TOP;
+      valign = JC.ECHO_TOP;
     t.valign = valign;
     t.z = 2;
     t.zSlab = Integer.MIN_VALUE;
@@ -306,7 +306,7 @@
   private void setPos(float scale) {
     float xLeft, xCenter, xRight;
     boolean is3dEcho = (xyz != null);
-    if (valign == JC.VALIGN_XY || valign == JC.VALIGN_XYZ) {
+    if (valign == JC.ECHO_XY || valign == JC.ECHO_XYZ) {
       float x = (movableXPercent != Integer.MAX_VALUE ? movableXPercent
           * windowWidth / 100 : is3dEcho ? movableX : movableX * scale);
       float offsetX = this.offsetX * scale;
@@ -321,10 +321,10 @@
 
     boxXY[0] = xLeft;
     switch (align) {
-    case JC.ALIGN_CENTER:
+    case JC.TEXT_ALIGN_CENTER:
       boxXY[0] = xCenter - boxWidth / 2;
       break;
-    case JC.ALIGN_RIGHT:
+    case JC.TEXT_ALIGN_RIGHT:
       boxXY[0] = xRight - boxWidth;
     }
 
@@ -332,12 +332,12 @@
 
     boxXY[1] = 0;
     switch (valign) {
-    case JC.VALIGN_TOP:
+    case JC.ECHO_TOP:
       break;
-    case JC.VALIGN_MIDDLE:
+    case JC.ECHO_MIDDLE:
       boxXY[1] = windowHeight / 2;
       break;
-    case JC.VALIGN_BOTTOM:
+    case JC.ECHO_BOTTOM:
       boxXY[1] = windowHeight;
       break;
     default:
@@ -346,7 +346,7 @@
       boxXY[1] = (is3dEcho ? y : (windowHeight - y)) + offsetY * scale;
     }
 
-    if (align == JC.ALIGN_CENTER)
+    if (align == JC.TEXT_ALIGN_CENTER)
       boxXY[1] -= (image != null ? boxHeight : xyz != null ? boxHeight 
           : ascent - boxHeight) / 2;
     else if (image != null)
@@ -432,10 +432,10 @@
     if (i == 0) {
       xy[2] = boxX;
       switch (align) {
-      case JC.ALIGN_CENTER:
+      case JC.TEXT_ALIGN_CENTER:
         xy[2] += boxWidth / 2;
         break;
-      case JC.ALIGN_RIGHT:
+      case JC.TEXT_ALIGN_RIGHT:
         xy[2] += boxWidth - xAdj;
         break;
       default:
@@ -445,10 +445,10 @@
       xy[1] = y0;
     }
     switch (align) {
-    case JC.ALIGN_CENTER:
+    case JC.TEXT_ALIGN_CENTER:
       xy[0] = xy[2] - widths[i] / 2;
       break;
-    case JC.ALIGN_RIGHT:
+    case JC.TEXT_ALIGN_RIGHT:
       xy[0] = xy[2] - widths[i];
     }
     xy[1] += lineHeight;

Modified: trunk/Jmol/src/org/jmol/render/CageRenderer.java
===================================================================
--- trunk/Jmol/src/org/jmol/render/CageRenderer.java    2015-06-06 17:04:42 UTC 
(rev 20554)
+++ trunk/Jmol/src/org/jmol/render/CageRenderer.java    2015-06-06 22:41:37 UTC 
(rev 20555)
@@ -27,7 +27,6 @@
 import org.jmol.shape.Bbcage;
 import org.jmol.shape.FontLineShape;
 import org.jmol.util.BoxInfo;
-import org.jmol.util.Point3fi;
 
 import javajs.util.P3;
 

Modified: trunk/Jmol/src/org/jmol/render/EchoRenderer.java
===================================================================
--- trunk/Jmol/src/org/jmol/render/EchoRenderer.java    2015-06-06 17:04:42 UTC 
(rev 20554)
+++ trunk/Jmol/src/org/jmol/render/EchoRenderer.java    2015-06-06 22:41:37 UTC 
(rev 20555)
@@ -51,22 +51,22 @@
         if (!((Atom) t.pointerPt).checkVisible())
           continue;
       }
-      if (t.valign == JC.VALIGN_XYZ) {
+      if (t.valign == JC.ECHO_XYZ) {
         tm.transformPtScr(t.xyz, pt0i);
         t.setXYZs(pt0i.x, pt0i.y, pt0i.z, pt0i.z);
       } 
       if (t.movableZPercent != Integer.MAX_VALUE) {
         int z = vwr.tm.zValueFromPercent(t.movableZPercent % 1000);
-        if (t.valign == JC.VALIGN_XYZ && Math.abs(t.movableZPercent)>= 1000)
+        if (t.valign == JC.ECHO_XYZ && Math.abs(t.movableZPercent)>= 1000)
           z = pt0i.z - vwr.tm.zValueFromPercent(0) + z;
         t.setZs(z, z);
       }
       if (t.zSlab >= zCutoff)
         continue;
       if (t.pointerPt == null) {
-        t.pointer = JC.POINTER_NONE;
+        t.pointer = JC.LABEL_POINTER_NONE;
       } else {
-        t.pointer = JC.POINTER_ON;
+        t.pointer = JC.LABEL_POINTER_ON;
         tm.transformPtScr(t.pointerPt, pt0i);
         t.atomX = pt0i.x;
         t.atomY = pt0i.y;

Modified: trunk/Jmol/src/org/jmol/render/LabelsRenderer.java
===================================================================
--- trunk/Jmol/src/org/jmol/render/LabelsRenderer.java  2015-06-06 17:04:42 UTC 
(rev 20554)
+++ trunk/Jmol/src/org/jmol/render/LabelsRenderer.java  2015-06-06 22:41:37 UTC 
(rev 20555)
@@ -48,12 +48,12 @@
   private P3i screen = new P3i();
 
   byte fidPrevious;
-  
+
   private P3 pTemp = new P3();
 
   protected short bgcolix;
   protected short labelColix;
-  
+
   private byte fid;
 
   private Atom atom;
@@ -76,7 +76,7 @@
   private float[] boxXY;
 
   private float scalePixelsPerMicron;
-  
+
   @Override
   protected boolean render() {
     fidPrevious = 0;
@@ -92,8 +92,7 @@
     short backgroundColixContrast = vwr.cm.colixBackgroundContrast;
     int backgroundColor = vwr.getBackgroundArgb();
     sppm = vwr.getScalePixelsPerAngstrom(true);
-    scalePixelsPerMicron = (vwr.getBoolean(T.fontscaling) ? sppm * 10000f
-        : 0);
+    scalePixelsPerMicron = (vwr.getBoolean(T.fontscaling) ? sppm * 10000f : 0);
     imageFontScaling = vwr.imageFontScaling;
     int iGroup = -1;
     minZ[0] = Integer.MAX_VALUE;
@@ -103,23 +102,23 @@
       if (!isVisibleForMe(atom))
         continue;
       String label = labelStrings[i];
-      if (label == null 
-          || label.length() == 0 || labels.mads != null
+      if (label == null || label.length() == 0 || labels.mads != null
           && labels.mads[i] < 0)
         continue;
       labelColix = labels.getColix2(i, atom, false);
       bgcolix = labels.getColix2(i, atom, true);
-      if (bgcolix == 0 && vwr.gdata.getColorArgbOrGray(labelColix) == 
backgroundColor)
+      if (bgcolix == 0
+          && vwr.gdata.getColorArgbOrGray(labelColix) == backgroundColor)
         labelColix = backgroundColixContrast;
       fid = ((fids == null || i >= fids.length || fids[i] == 0) ? 
labels.zeroFontId
           : fids[i]);
-      offset = (offsets == null || i >= offsets.length ? 0: offsets[i]);
-      boolean labelsFront = ((offset & JC.LABEL_FRONT_FLAG) != 0);
-      boolean labelsGroup = ((offset & JC.LABEL_GROUP_FLAG) != 0);
-      textAlign = Labels.getAlignment(offset);
+      offset = (offsets == null || i >= offsets.length ? 0 : offsets[i]);
+      boolean labelsFront = ((offset & JC.LABEL_ZPOS_FRONT) != 0);
+      boolean labelsGroup = ((offset & JC.LABEL_ZPOS_GROUP) != 0);
+      textAlign = JC.getAlignment(offset);
       isAbsolute = JC.isOffsetExplicit(offset);
-      
-      pointer = offset & JC.LABEL_POINTER_FLAGS;
+
+      pointer = JC.getPointer(offset);
       zSlab = atom.sZ - atom.sD / 2 - 3;
       if (zSlab > zCutoff)
         continue;
@@ -141,8 +140,7 @@
         zBox = 1;
 
       Text text = labels.getLabel(i);
-      boxXY = (!isExport || vwr.creatingImage ? labels.getBox(i)
-          : new float[5]);
+      boxXY = (!isExport || vwr.creatingImage ? labels.getBox(i) : new 
float[5]);
       if (boxXY == null)
         labels.putBox(i, boxXY = new float[5]);
       text = renderLabelOrMeasure(text, label);
@@ -158,7 +156,7 @@
   }
 
   protected void setZcutoff() {
-    zCutoff =(tm.zShadeEnabled ? tm.zSlabValue : Integer.MAX_VALUE);
+    zCutoff = (tm.zShadeEnabled ? tm.zSlabValue : Integer.MAX_VALUE);
   }
 
   protected Text renderLabelOrMeasure(Text text, String label) {
@@ -185,7 +183,7 @@
         text.setScalePixelsPerMicron(sppm);
       }
     } else {
-      boolean isLeft = (textAlign == JC.ALIGN_LEFT || textAlign == 
JC.ALIGN_NONE);
+      boolean isLeft = (textAlign == JC.TEXT_ALIGN_LEFT || textAlign == 
JC.TEXT_ALIGN_NONE);
       if (fid != fidPrevious || ascent == 0) {
         vwr.gdata.setFontFid(fid);
         fidPrevious = fid;
@@ -200,8 +198,8 @@
               && label.indexOf("|") < 0 && label.indexOf("<su") < 0 && label
               .indexOf("<co") < 0);
       if (isSimple) {
-        boolean doPointer = ((pointer & JC.POINTER_ON) != 0);
-        short pointerColix = ((pointer & JC.POINTER_BACKGROUND) != 0
+        boolean doPointer = ((pointer & JC.LABEL_POINTER_ON) != 0);
+        short pointerColix = ((pointer & JC.LABEL_POINTER_BACKGROUND) != 0
             && bgcolix != 0 ? bgcolix : labelColix);
         boxXY[0] = atomPt.sX;
         boxXY[1] = atomPt.sY;
@@ -220,7 +218,7 @@
     }
     if (text.pymolOffset == null) {
       text.setOffset(offset);
-      if (textAlign != JC.ALIGN_NONE)
+      if (textAlign != JC.TEXT_ALIGN_NONE)
         text.setAlignment(textAlign);
     }
     text.pointer = pointer;

Modified: trunk/Jmol/src/org/jmol/render/TextRenderer.java
===================================================================
--- trunk/Jmol/src/org/jmol/render/TextRenderer.java    2015-06-06 17:04:42 UTC 
(rev 20554)
+++ trunk/Jmol/src/org/jmol/render/TextRenderer.java    2015-06-06 22:41:37 UTC 
(rev 20555)
@@ -73,8 +73,8 @@
   static void drawPointer(Text text, JmolRendererInterface g3d) {
     // now draw the pointer, if requested
 
-    if ((text.pointer & JC.POINTER_ON) == 0
-        || !g3d.setC((text.pointer & JC.POINTER_BACKGROUND) != 0
+    if ((text.pointer & JC.LABEL_POINTER_ON) == 0
+        || !g3d.setC((text.pointer & JC.LABEL_POINTER_BACKGROUND) != 0
             && text.bgcolix != 0 ? text.bgcolix : text.colix))
       return;
     float w = text.boxWidth;

Modified: trunk/Jmol/src/org/jmol/renderbio/StrandsRenderer.java
===================================================================
--- trunk/Jmol/src/org/jmol/renderbio/StrandsRenderer.java      2015-06-06 
17:04:42 UTC (rev 20554)
+++ trunk/Jmol/src/org/jmol/renderbio/StrandsRenderer.java      2015-06-06 
22:41:37 UTC (rev 20555)
@@ -26,7 +26,6 @@
 
 
 import javajs.util.P3;
-import javajs.util.P3i;
 
 import org.jmol.shapebio.BioShape;
 import org.jmol.shapebio.Strands;

Modified: trunk/Jmol/src/org/jmol/renderspecial/DipolesRenderer.java
===================================================================
--- trunk/Jmol/src/org/jmol/renderspecial/DipolesRenderer.java  2015-06-06 
17:04:42 UTC (rev 20554)
+++ trunk/Jmol/src/org/jmol/renderspecial/DipolesRenderer.java  2015-06-06 
22:41:37 UTC (rev 20555)
@@ -26,6 +26,9 @@
 package org.jmol.renderspecial;
 
 
+import javajs.util.P3;
+import javajs.util.V3;
+
 import org.jmol.java.BS;
 import org.jmol.render.ShapeRenderer;
 import org.jmol.script.T;
@@ -33,9 +36,6 @@
 import org.jmol.shapespecial.Dipoles;
 import org.jmol.util.C;
 import org.jmol.util.GData;
-import javajs.util.P3;
-import javajs.util.P3i;
-import javajs.util.V3;
 
 public class DipolesRenderer extends ShapeRenderer {
 

Modified: trunk/Jmol/src/org/jmol/renderspecial/EllipsoidsRenderer.java
===================================================================
--- trunk/Jmol/src/org/jmol/renderspecial/EllipsoidsRenderer.java       
2015-06-06 17:04:42 UTC (rev 20554)
+++ trunk/Jmol/src/org/jmol/renderspecial/EllipsoidsRenderer.java       
2015-06-06 22:41:37 UTC (rev 20555)
@@ -34,7 +34,6 @@
 import javajs.util.M3;
 import javajs.util.M4;
 import javajs.util.P3;
-import javajs.util.P3i;
 
 import javajs.util.PT;
 import javajs.util.V3;

Modified: trunk/Jmol/src/org/jmol/script/ScriptEval.java
===================================================================
--- trunk/Jmol/src/org/jmol/script/ScriptEval.java      2015-06-06 17:04:42 UTC 
(rev 20554)
+++ trunk/Jmol/src/org/jmol/script/ScriptEval.java      2015-06-06 22:41:37 UTC 
(rev 20555)
@@ -7194,16 +7194,16 @@
         break;
       }
       if (str.equals("pointer")) {
-        int flags = JC.POINTER_NONE;
+        int flags = JC.LABEL_POINTER_NONE;
         switch (getToken(2).tok) {
         case T.off:
         case T.none:
           break;
         case T.background:
-          flags |= JC.POINTER_BACKGROUND;
+          flags |= JC.LABEL_POINTER_BACKGROUND;
           //$FALL-THROUGH$
         case T.on:
-          flags |= JC.POINTER_ON;
+          flags |= JC.LABEL_POINTER_ON;
           break;
         default:
           invArg();

Modified: trunk/Jmol/src/org/jmol/shape/Echo.java
===================================================================
--- trunk/Jmol/src/org/jmol/shape/Echo.java     2015-06-06 17:04:42 UTC (rev 
20554)
+++ trunk/Jmol/src/org/jmol/shape/Echo.java     2015-06-06 22:41:37 UTC (rev 
20555)
@@ -72,7 +72,7 @@
         return;
       Text t = (Text) currentObject;
       t.pointerPt = (value == null ? null : (P3) value); // could be an atom.
-      t.pointer = (value == null ? JC.POINTER_NONE : JC.POINTER_ON);
+      t.pointer = (value == null ? JC.LABEL_POINTER_NONE : 
JC.LABEL_POINTER_ON);
       return;
     }
     if ("xyz" == propertyName) {
@@ -137,16 +137,16 @@
         isAll = false;
         Text text = objects.get(target);
         if (text == null) {
-          int valign = JC.VALIGN_XY;
-          int halign = JC.ALIGN_LEFT;
+          int valign = JC.ECHO_XY;
+          int halign = JC.TEXT_ALIGN_LEFT;
           if ("top" == target) {
-            valign = JC.VALIGN_TOP;
-            halign = JC.ALIGN_CENTER;
+            valign = JC.ECHO_TOP;
+            halign = JC.TEXT_ALIGN_CENTER;
           } else if ("middle" == target) {
-            valign = JC.VALIGN_MIDDLE;
-            halign = JC.ALIGN_CENTER;
+            valign = JC.ECHO_MIDDLE;
+            halign = JC.TEXT_ALIGN_CENTER;
           } else if ("bottom" == target) {
-            valign = JC.VALIGN_BOTTOM;
+            valign = JC.ECHO_BOTTOM;
           }
           text = Text.newEcho(vwr, vwr.gdata.getFont3DFS(FONTFACE,
               FONTSIZE), target, COLOR, valign, halign, 0);

Modified: trunk/Jmol/src/org/jmol/shape/Hover.java
===================================================================
--- trunk/Jmol/src/org/jmol/shape/Hover.java    2015-06-06 17:04:42 UTC (rev 
20554)
+++ trunk/Jmol/src/org/jmol/shape/Hover.java    2015-06-06 22:41:37 UTC (rev 
20555)
@@ -55,7 +55,7 @@
     Font font3d = vwr.gdata.getFont3DFSS(FONTFACE, FONTSTYLE, FONTSIZE);
     short bgcolix = C.getColixS("#FFFFC3"); // 255, 255, 195
     short colix = C.BLACK;
-    currentObject = hoverText = Text.newLabel(vwr, font3d, null, colix, 
bgcolix, JC.ALIGN_LEFT, 0,
+    currentObject = hoverText = Text.newLabel(vwr, font3d, null, colix, 
bgcolix, JC.TEXT_ALIGN_LEFT, 0,
         null);
     hoverText.adjustForWindow = true;
   }

Modified: trunk/Jmol/src/org/jmol/shape/Labels.java
===================================================================
--- trunk/Jmol/src/org/jmol/shape/Labels.java   2015-06-06 17:04:42 UTC (rev 
20554)
+++ trunk/Jmol/src/org/jmol/shape/Labels.java   2015-06-06 22:41:37 UTC (rev 
20555)
@@ -263,16 +263,16 @@
 
     if ("align" == propertyName) {
       String type = (String) value;
-      int alignment = JC.ALIGN_LEFT;
+      int hAlignment = JC.TEXT_ALIGN_LEFT;
       if (type.equalsIgnoreCase("right"))
-        alignment = JC.ALIGN_RIGHT;
+        hAlignment = JC.TEXT_ALIGN_RIGHT;
       else if (type.equalsIgnoreCase("center"))
-        alignment = JC.ALIGN_CENTER;
+        hAlignment = JC.TEXT_ALIGN_CENTER;
       for (int i = bsSelected.nextSetBit(0); i >= 0 && i < ac; i = bsSelected
           .nextSetBit(i + 1))
-        setAlignment(i, alignment);
+        setHorizAlignment(i, hAlignment);
       if (setDefaults || !defaultsOnlyForNone)
-        defaultAlignment = alignment;
+        defaultAlignment = hAlignment;
       return;
     }
 
@@ -292,9 +292,9 @@
       if (!setDefaults)
         for (int i = bsSelected.nextSetBit(0); i >= 0 && i < ac; i = bsSelected
             .nextSetBit(i + 1))
-          setFront(i, TF);
+          setZPos(i, JC.LABEL_ZPOS_FRONT, TF);
       if (setDefaults || !defaultsOnlyForNone)
-        defaultZPos = (TF ? JC.LABEL_FRONT_FLAG : 0);
+        defaultZPos = (TF ? JC.LABEL_ZPOS_FRONT : 0);
       return;
     }
 
@@ -303,9 +303,9 @@
       if (!setDefaults)
         for (int i = bsSelected.nextSetBit(0); i >= 0 && i < ac; i = bsSelected
             .nextSetBit(i + 1))
-          setGroup(i, TF);
+          setZPos(i, JC.LABEL_ZPOS_GROUP, TF);
       if (setDefaults || !defaultsOnlyForNone)
-        defaultZPos = (TF ? JC.LABEL_GROUP_FLAG : 0);
+        defaultZPos = (TF ? JC.LABEL_ZPOS_GROUP : 0);
       return;
     }
 
@@ -455,13 +455,13 @@
     }
     if (defaultOffset != JC.LABEL_DEFAULT_OFFSET)
       setOffsets(i, defaultOffset);
-    if (defaultAlignment != JC.ALIGN_LEFT)
-      setAlignment(i, defaultAlignment);
-    if ((defaultZPos & JC.LABEL_FRONT_FLAG) != 0)
-      setFront(i, true);
-    else if ((defaultZPos & JC.LABEL_GROUP_FLAG) != 0)
-      setGroup(i, true);
-    if (defaultPointer != JC.POINTER_NONE)
+    if (defaultAlignment != JC.TEXT_ALIGN_LEFT)
+      setHorizAlignment(i, defaultAlignment);
+    if ((defaultZPos & JC.LABEL_ZPOS_FRONT) != 0)
+      setZPos(i, JC.LABEL_ZPOS_FRONT, true);
+    else if ((defaultZPos & JC.LABEL_ZPOS_GROUP) != 0)
+      setZPos(i, JC.LABEL_ZPOS_GROUP, true);
+    if (defaultPointer != JC.LABEL_POINTER_NONE)
       setPointer(i, defaultPointer);
     if (defaultColix != 0 || defaultPaletteID != 0)
       setLabelColix(i, defaultColix, defaultPaletteID);
@@ -550,52 +550,39 @@
       text.setOffset(offset);
   }
 
-  private void setAlignment(int i, int alignment) {
+  private void setHorizAlignment(int i, int hAlign) {
     if (offsets == null || i >= offsets.length) {
-      if (alignment == JC.ALIGN_LEFT)
+      if (hAlign == JC.TEXT_ALIGN_LEFT)
         return;
       offsets = AU.ensureLengthI(offsets, i + 1);
     }
-    offsets[i] = (offsets[i] & ~JC.LABEL_ALIGN_FLAGS) | (alignment << 2);
+    offsets[i] = JC.setHorizAlignment(offsets[i], hAlign);
     text = getLabel(i);
     if (text != null)
-      text.setAlignment(alignment);
+      text.setAlignment(hAlign);
   }
 
-  public static int getAlignment(int offset) {
-    return (offset & JC.LABEL_ALIGN_FLAGS) >> 2;
-  }
-  
   private void setPointer(int i, int pointer) {
     if (offsets == null || i >= offsets.length) {
-      if (pointer == JC.POINTER_NONE)
+      if (pointer == JC.LABEL_POINTER_NONE)
         return;
       offsets = AU.ensureLengthI(offsets, i + 1);
     }
-    offsets[i] = (offsets[i] & ~JC.LABEL_POINTER_FLAGS) + pointer;
+    offsets[i] = JC.setPointer(offsets[i], pointer);
     text = getLabel(i);
     if (text != null)
       text.pointer = pointer;
   }
 
-  private void setFront(int i, boolean TF) {
+  private void setZPos(int i, int flag, boolean TF) {
     if (offsets == null || i >= offsets.length) {
       if (!TF)
         return;
       offsets = AU.ensureLengthI(offsets, i + 1);
     }
-    offsets[i] = (offsets[i] & ~JC.LABEL_ZPOS_FLAGS) + (TF ? 
JC.LABEL_FRONT_FLAG : 0);
+    offsets[i] = JC.setZPosition(offsets[i], TF ? flag : 0);
   }
 
-  private void setGroup(int i, boolean TF) {
-    if (offsets == null || i >= offsets.length) {
-      if (!TF)
-        return;
-      offsets = AU.ensureLengthI(offsets, i + 1);
-    }
-    offsets[i] = (offsets[i] & ~JC.LABEL_ZPOS_FLAGS) + (TF ? 
JC.LABEL_GROUP_FLAG : 0);
-  }
-
   private void setFont(int i, byte fid) {
     if (fids == null || i >= fids.length) {
       if (fid == zeroFontId)

Modified: trunk/Jmol/src/org/jmol/util/MeshCapper.java
===================================================================
--- trunk/Jmol/src/org/jmol/util/MeshCapper.java        2015-06-06 17:04:42 UTC 
(rev 20554)
+++ trunk/Jmol/src/org/jmol/util/MeshCapper.java        2015-06-06 22:41:37 UTC 
(rev 20555)
@@ -59,7 +59,7 @@
   /**
    * for debugging
    */
-  private boolean dumping, testing;
+  private boolean dumping;
 
   /**
    * initialization only

Modified: trunk/Jmol/src/org/jmol/util/Point3fi.java
===================================================================
--- trunk/Jmol/src/org/jmol/util/Point3fi.java  2015-06-06 17:04:42 UTC (rev 
20554)
+++ trunk/Jmol/src/org/jmol/util/Point3fi.java  2015-06-06 22:41:37 UTC (rev 
20555)
@@ -25,7 +25,6 @@
 package org.jmol.util;
 
 import javajs.util.P3;
-import javajs.util.P3i;
 
 
 /**

Modified: trunk/Jmol/src/org/jmol/viewer/JC.java
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/JC.java      2015-06-06 17:04:42 UTC (rev 
20554)
+++ trunk/Jmol/src/org/jmol/viewer/JC.java      2015-06-06 22:41:37 UTC (rev 
20555)
@@ -834,49 +834,92 @@
     }
   }
 
+  ///////////////// LABEL and ECHO ///////////////////////
+  
+
+  // note that the y offset is positive upward
+  
+  //  3         2         1        
+  // 10987654321098765432109876543210
+  //  -x-offset--y-offset-___cafgaabp
+  //                      |||||||| ||_pointer on
+  //                      |||||||| |_background pointer color
+  //                      ||||||||_text alignment 0xC 
+  //                      |||||||_labels group 0x10
+  //                      ||||||_labels front  0x20
+  //                      |||||_absolute
+  //                      ||||_centered
+  //                      |||_reserved
+  //                      ||_reserved
+  //                      |_reserved
+
   public final static int LABEL_MINIMUM_FONTSIZE = 6;
   public final static int LABEL_MAXIMUM_FONTSIZE = 63;
   public final static int LABEL_DEFAULT_FONTSIZE = 13;
   public final static int LABEL_DEFAULT_X_OFFSET = 4;
   public final static int LABEL_DEFAULT_Y_OFFSET = 4;
-  public final static int LABEL_OFFSET_MAX       = 0x1F4; // 500 
-  private final static int LABEL_OFFSET_MASK     = 0x3FF; 
+  public final static int LABEL_OFFSET_MAX       = 500; // 0x1F4; 
+
+  private final static int LABEL_OFFSET_MASK          = 0x3FF; // 10 bits for 
each offset (-500 to 500)
+  private final static int LABEL_FLAGY_OFFSET_SHIFT   = 11;    // 11-20 is Y 
offset
+  private final static int LABEL_FLAGX_OFFSET_SHIFT   = 21;    // 21-30 is X 
offset
   
+  public final static int LABEL_FLAGS                 = 0x07F;
+  private final static int LABEL_POINTER_FLAGS        = 0x003;
+  public final static int LABEL_POINTER_NONE          = 0x000;
+  public final static int LABEL_POINTER_ON            = 0x001;  // add label 
pointer
+  public final static int LABEL_POINTER_BACKGROUND    = 0x002;  // add label 
pointer to background
+
+  private final static int TEXT_ALIGN_SHIFT           = 0x002;
+  private final static int TEXT_ALIGN_FLAGS           = 0x00C;
+  public final static int TEXT_ALIGN_NONE             = 0x000;
+  public final static int TEXT_ALIGN_LEFT             = 0x004;
+  public final static int TEXT_ALIGN_CENTER           = 0x008;
+  public final static int TEXT_ALIGN_RIGHT            = 0x00C;
   
-  public final static int LABEL_FRONT_FLAG        = 0x020;
-  public final static int LABEL_GROUP_FLAG        = 0x010;
-  public final static int LABEL_POINTER_FLAGS     = 0x003;
-  public final static int LABEL_ALIGN_FLAGS       = 0x00C;
-  public final static int LABEL_ZPOS_FLAGS        = 0x030;
-  public final static int LABEL_SCALE_FLAG        = 0x040;
-  public final static int LABEL_FLAGS             = 0x07F;
+  private final static int LABEL_ZPOS_FLAGS           = 0x030;
+  public final static int LABEL_ZPOS_GROUP            = 0x010;
+  public final static int LABEL_ZPOS_FRONT            = 0x020;
   
-  private final static int LABEL_EXPLICIT_OFFSET_FLAG = 0x080;
-  private final static int LABEL_CENTERED_FLAG     = 0x100;
-  private final static int LABEL_FLAGY_OFFSET = 9;
-  private final static int LABEL_FLAGX_OFFSET = 19;
+  private final static int LABEL_EXPLICIT             = 0x040;
   
+  private final static int LABEL_CENTERED             = 0x100;
+
   public static int LABEL_DEFAULT_OFFSET = 
-     (LABEL_DEFAULT_X_OFFSET << LABEL_FLAGX_OFFSET)
-   | (LABEL_DEFAULT_Y_OFFSET << LABEL_FLAGY_OFFSET);
+      (LABEL_DEFAULT_X_OFFSET << LABEL_FLAGX_OFFSET_SHIFT)
+    | (LABEL_DEFAULT_Y_OFFSET << LABEL_FLAGY_OFFSET_SHIFT);
 
-  
-  // note that the y offset is positive upward
-  
-  //  3         2         1        
-  // 10987654321098765432109876543210
-  //    -x-offset--y-offset-ntsfgaabp
-  //                        |||||| ||_pointer on
-  //                        |||||| |_background pointer color
-  //                        ||||||_text alignment 0xC 
-  //                        |||||_labels group 0x10
-  //                        ||||_labels front  0x20
-  //                        |||_scaled
-  //                        ||_explicit offset
-  //                        |_no_offset
+  public final static int ECHO_TOP      = 0;
+  public final static int ECHO_BOTTOM   = 1;
+  public final static int ECHO_MIDDLE   = 2;
+  public final static int ECHO_XY       = 3;
+  public final static int ECHO_XYZ      = 4;
 
+  private final static String[] echoNames = { "top", "bottom", "middle", "xy", 
"xyz" };
+
+  public static String getEchoName(int type) {
+    return echoNames[type];
+  }
+
+  public static int setZPosition(int offset, int pos) {
+    return (offset & ~LABEL_ZPOS_FLAGS) | pos;
+  }
+
+  public static int setPointer(int offset, int pointer) {
+    return (offset & ~LABEL_POINTER_FLAGS) | pointer;  
+  }
+
+  public static int getPointer(int offset) {
+    return offset & LABEL_POINTER_FLAGS;
+  }
+
+  public static String getPointerName(int pointer) {
+    return ((pointer & LABEL_POINTER_ON) == 0 ? ""
+        : (pointer & LABEL_POINTER_BACKGROUND) > 0 ? "background" : "on");
+  }   
+
   public static boolean isOffsetExplicit(int offset) {
-    return ((offset & JC.LABEL_EXPLICIT_OFFSET_FLAG) != 0);
+    return ((offset & LABEL_EXPLICIT) != 0);
   }
 
   /**
@@ -893,13 +936,13 @@
   public static int getOffset(int xOffset, int yOffset, boolean isAbsolute) {
     xOffset = Math.min(Math.max(xOffset, -LABEL_OFFSET_MAX), LABEL_OFFSET_MAX);
     yOffset = (Math.min(Math.max(yOffset, -LABEL_OFFSET_MAX), 
LABEL_OFFSET_MAX));
-    int offset = ((xOffset & LABEL_OFFSET_MASK) << LABEL_FLAGX_OFFSET)
-         | ((yOffset & LABEL_OFFSET_MASK) << LABEL_FLAGY_OFFSET)
-         | (isAbsolute ? LABEL_EXPLICIT_OFFSET_FLAG : 0);
-    if (offset == JC.LABEL_DEFAULT_OFFSET)
+    int offset = ((xOffset & LABEL_OFFSET_MASK) << LABEL_FLAGX_OFFSET_SHIFT)
+         | ((yOffset & LABEL_OFFSET_MASK) << LABEL_FLAGY_OFFSET_SHIFT)
+         | (isAbsolute ? LABEL_EXPLICIT : 0);
+    if (offset == LABEL_DEFAULT_OFFSET)
       offset = 0;
     else if (!isAbsolute && (xOffset == 0 || yOffset == 0))
-      offset |= JC.LABEL_CENTERED_FLAG;
+      offset |= LABEL_CENTERED;
     return offset;
   }
 
@@ -912,11 +955,8 @@
    * @return screen offset from left
    */
   public static int getXOffset(int offset) {
-    if (offset == 0)
-      return LABEL_DEFAULT_X_OFFSET;
-    int x = (offset >> LABEL_FLAGX_OFFSET) & LABEL_OFFSET_MASK;
-    if (x > LABEL_OFFSET_MAX)
-      x -= LABEL_OFFSET_MASK + 1;
+    int x = (offset >> LABEL_FLAGX_OFFSET_SHIFT) & LABEL_OFFSET_MASK;
+    x = (x > LABEL_OFFSET_MAX ? x - LABEL_OFFSET_MASK - 1 : x);
     return x;
   }
 
@@ -927,41 +967,24 @@
    * @return screen offset from bottom
    */
   public static int getYOffset(int offset) {
-    if (offset == 0)
-      return LABEL_DEFAULT_Y_OFFSET;
-    int y = (offset >> LABEL_FLAGY_OFFSET) & LABEL_OFFSET_MASK;
-    if (y > LABEL_OFFSET_MAX)
-      y -= LABEL_OFFSET_MASK + 1;
-    return y;
+    int y = (offset >> LABEL_FLAGY_OFFSET_SHIFT) & LABEL_OFFSET_MASK;
+    return (y > LABEL_OFFSET_MAX ? y - LABEL_OFFSET_MASK - 1 : y);
   }
   
-  public static String getAlignmentName(int align) {
-    return JC.hAlignNames[align & 3];
+  public static int getAlignment(int offset) {
+    return (offset & TEXT_ALIGN_FLAGS);
   }
 
-  public final static String[] hAlignNames = { "", "left", "center", "right",
-  "" };
-  public final static String[] vAlignNames = { "xy", "top", "bottom", "middle" 
};
+  public static int setHorizAlignment(int offset, int hAlign) {
+    return (offset & ~TEXT_ALIGN_FLAGS) | hAlign;
+  }
 
-  public static String getPointer(int pointer) {
-    return ((pointer & JC.POINTER_ON) == 0 ? ""
-        : (pointer & JC.POINTER_BACKGROUND) > 0 ? "background" : "on");
+  private final static String[] hAlignNames = { "", "left", "center", "right" 
};
+
+  public static String getHorizAlignmentName(int align) {
+    return hAlignNames[(align >> TEXT_ALIGN_SHIFT) & 3];
   }
-
-  public final static int POINTER_NONE = 0;
-  public final static int POINTER_ON = 1;
-  public final static int POINTER_BACKGROUND = 2;
-  final public static int VALIGN_XY = 0;
-  final public static int VALIGN_TOP = 1;
-  final public static int VALIGN_BOTTOM = 2;
-  final public static int VALIGN_MIDDLE = 3;
-  final public static int VALIGN_XYZ = 4;
-  public final static int ALIGN_NONE = 0;
-  public final static int ALIGN_LEFT = 1;
-  public final static int ALIGN_CENTER = 2;
-  public final static int ALIGN_RIGHT = 3;
   
-
   public static final int JSV_NOT = -1;
   public static final int JSV_SEND_JDXMOL = 0;
   public static final int JSV_SETPEAKS = 7;

Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Jmol.properties      2015-06-06 17:04:42 UTC 
(rev 20554)
+++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties      2015-06-06 22:41:37 UTC 
(rev 20555)
@@ -14,14 +14,19 @@
 
 TODO: remove HTML5 dependency on synchronous file loading (check SCRIPT 
command for problems)
 
-Jmol.___JmolVersion="14.3.14_2015.06.05"
+Jmol.___JmolVersion="14.3.14_2015.06.06"
 
+code: refactoring of viewer.JC for label/echo business
+
+new feature: set labeloffset range expanded to [-500,500]
+
 new feature: set labelOffsetAbsolute x y  
  -- was undocumented as "set labelOffsetExact" but used in state (still 
available)
  -- sets label to specific value; same as set labelOffset, but allows 0 in x 
or y
+ -- range [-500,500]
  
 bug fix: dragging labels not working properly
-bug fix: axisangle not resetting angle to 0 --> wrong default orientation 
saved to state after RESET (broken in 14.1.6_dev_2014.01.16c)
+bug fix: axisAngle (javajs.util.A4) not resetting angle to 0 --> wrong default 
orientation saved to state immediately after RESET (broken in 
14.1.6_dev_2014.01.16c)
 
 JmolVersion="14.3.14_2015.06.05"
 

Modified: trunk/Jmol/src/org/jmol/viewer/StateCreator.java
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/StateCreator.java    2015-06-06 17:04:42 UTC 
(rev 20554)
+++ trunk/Jmol/src/org/jmol/viewer/StateCreator.java    2015-06-06 22:41:37 UTC 
(rev 20555)
@@ -707,14 +707,14 @@
     app(s, "background label " + Shape.encodeColor(l.defaultBgcolix));
     app(s, "set labelOffset " + JC.getXOffset(l.defaultOffset)
         + " " + (JC.getYOffset(l.defaultOffset)));
-    String align = JC.getAlignmentName(l.defaultAlignment);
+    String align = JC.getHorizAlignmentName(l.defaultAlignment);
     app(s, "set labelAlignment " + (align.length() < 5 ? "left" : align));
-    String pointer = JC.getPointer(l.defaultPointer);
+    String pointer = JC.getPointerName(l.defaultPointer);
     app(s, "set labelPointer "
         + (pointer.length() == 0 ? "off" : pointer));
-    if ((l.defaultZPos & JC.LABEL_FRONT_FLAG) != 0)
+    if ((l.defaultZPos & JC.LABEL_ZPOS_FRONT) != 0)
       app(s, "set labelFront");
-    else if ((l.defaultZPos & JC.LABEL_GROUP_FLAG) != 0)
+    else if ((l.defaultZPos & JC.LABEL_ZPOS_GROUP) != 0)
       app(s, "set labelGroup");
     app(s, Shape.getFontCommand("label", Font
         .getFont3D(l.defaultFontId)));
@@ -1219,13 +1219,13 @@
                       + JC.getXOffset(offsetFull)
                       + " "
                       + JC.getYOffset(offsetFull));
-          String align = JC.getAlignmentName(offsetFull >> 2);
-          String pointer = JC.getPointer(offsetFull);
+          String align = JC.getHorizAlignmentName(offsetFull >> 2);
+          String pointer = JC.getPointerName(offsetFull);
           if (pointer.length() > 0)
             BSUtil.setMapBitSet(temp2, i, i, "set labelPointer " + pointer);
-          if ((offsetFull & JC.LABEL_FRONT_FLAG) != 0)
+          if ((offsetFull & JC.LABEL_ZPOS_FRONT) != 0)
             BSUtil.setMapBitSet(temp2, i, i, "set labelFront");
-          else if ((offsetFull & JC.LABEL_GROUP_FLAG) != 0)
+          else if ((offsetFull & JC.LABEL_ZPOS_GROUP) != 0)
             BSUtil.setMapBitSet(temp2, i, i, "set labelGroup");
           // labelAlignment must come last, so we put it in a separate hash
           // table
@@ -1291,7 +1291,7 @@
     String strOff = null;
     String echoCmd = "set echo ID " + PT.esc(t.target);
     switch (t.valign) {
-    case JC.VALIGN_XY:
+    case JC.ECHO_XY:
       if (t.movableXPercent == Integer.MAX_VALUE
           || t.movableYPercent == Integer.MAX_VALUE) {
         strOff = (t.movableXPercent == Integer.MAX_VALUE ? t.movableX + " "
@@ -1302,17 +1302,17 @@
         strOff = "[" + t.movableXPercent + " " + t.movableYPercent + "%]";
       }
       //$FALL-THROUGH$
-    case JC.VALIGN_XYZ:
+    case JC.ECHO_XYZ:
       if (strOff == null)
         strOff = Escape.eP(t.xyz);
       s.append("  ").append(echoCmd).append(" ").append(strOff);
-      if (t.align != JC.ALIGN_LEFT)
+      if (t.align != JC.TEXT_ALIGN_LEFT)
         s.append(";  ").append(echoCmd).append(" ").append(
-            JC.hAlignNames[t.align]);
+            JC.getHorizAlignmentName(t.align));
       break;
     default:
-      s.append("  set echo ").append(JC.vAlignNames[t.valign]).append(" ")
-          .append(JC.hAlignNames[t.align]);
+      s.append("  set echo ").append(JC.getEchoName(t.valign)).append(" ")
+          .append(JC.getHorizAlignmentName(t.align));
     }
     if (t.movableZPercent != Integer.MAX_VALUE)
       s.append(";  ").append(echoCmd).append(" depth ").appendI(

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
_______________________________________________
Jmol-commits mailing list
Jmol-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jmol-commits

Reply via email to