Revision: 21144
          http://sourceforge.net/p/jmol/code/21144
Author:   hansonr
Date:     2016-06-15 04:36:56 +0000 (Wed, 15 Jun 2016)
Log Message:
-----------
Jmol.___JmolVersion="14.6.0_2016.06.14"

bug fix: reading of protein structure for a group that is not in a polymer 
causes null pointer exception

set hiddenLinesDashed for boundbox and unitcell

Modified Paths:
--------------
    branches/v14_6/Jmol/src/org/jmol/modelsetbio/BioModelSet.java
    branches/v14_6/Jmol/src/org/jmol/viewer/Jmol.properties
    trunk/Jmol/src/javajs/util/Measure.java
    trunk/Jmol/src/org/jmol/modelset/Text.java
    trunk/Jmol/src/org/jmol/modelsetbio/BioModelSet.java
    trunk/Jmol/src/org/jmol/render/BbcageRenderer.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/UccageRenderer.java
    trunk/Jmol/src/org/jmol/script/ScriptEval.java
    trunk/Jmol/src/org/jmol/script/T.java
    trunk/Jmol/src/org/jmol/scriptext/MathExt.java
    trunk/Jmol/src/org/jmol/shape/Echo.java
    trunk/Jmol/src/org/jmol/util/BoxInfo.java
    trunk/Jmol/src/org/jmol/viewer/GlobalSettings.java
    trunk/Jmol/src/org/jmol/viewer/Jmol.properties
    trunk/Jmol/src/org/jmol/viewer/Viewer.java

Modified: branches/v14_6/Jmol/src/org/jmol/modelsetbio/BioModelSet.java
===================================================================
--- branches/v14_6/Jmol/src/org/jmol/modelsetbio/BioModelSet.java       
2016-06-08 21:56:33 UTC (rev 21143)
+++ branches/v14_6/Jmol/src/org/jmol/modelsetbio/BioModelSet.java       
2016-06-15 04:36:56 UTC (rev 21144)
@@ -564,13 +564,15 @@
     Atom[] at = ms.at;
     Model[] am = ms.am;
     for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i + 1)) {
-      if (at[i].group.isAdded(i))
+      Atom a = at[i];
+      Group g = a.group;
+      if (g.isAdded(i) || g.getBioPolymerLength() == 0) 
         continue;
-      monomerIndexCurrent = at[i].group.setProteinStructureType(type,
+      monomerIndexCurrent = g.setProteinStructureType(type,
           iLast == i - 1 ? monomerIndexCurrent : -1);
-      int modelIndex = at[i].mi;
+      int modelIndex = a.mi;
       ms.proteinStructureTainted = am[modelIndex].structureTainted = true;
-      iLast = i = at[i].group.lastAtomIndex;
+      iLast = i = g.lastAtomIndex;
     }
     int[] lastStrucNo = new int[ms.mc];
     for (int i = 0; i < ms.ac; i++) {

Modified: branches/v14_6/Jmol/src/org/jmol/viewer/Jmol.properties
===================================================================
--- branches/v14_6/Jmol/src/org/jmol/viewer/Jmol.properties     2016-06-08 
21:56:33 UTC (rev 21143)
+++ branches/v14_6/Jmol/src/org/jmol/viewer/Jmol.properties     2016-06-15 
04:36:56 UTC (rev 21144)
@@ -7,8 +7,12 @@
 # see also http://chemapps.stolaf.edu/jmol/zip for daily updates       
 
 
-Jmol.___JmolVersion="14.6.0_2016.05.26"
+Jmol.___JmolVersion="14.6.0_2016.06.14"
 
+bug fix: reading of protein structure for a group that is not in a polymer 
causes null pointer exception
+
+JmolVersion="14.6.0_2016.05.26"
+
 bug fix: set hermiteLevel -4 allows hermite during mouse move but not spinning
 
 bug fix: polyhedron faces not generated correctly when postions are very close 
together (still)

Modified: trunk/Jmol/src/javajs/util/Measure.java
===================================================================
--- trunk/Jmol/src/javajs/util/Measure.java     2016-06-08 21:56:33 UTC (rev 
21143)
+++ trunk/Jmol/src/javajs/util/Measure.java     2016-06-15 04:36:56 UTC (rev 
21144)
@@ -206,7 +206,7 @@
    * @param vAB
    */
   public static void calcNormalizedNormal(T3 pointA, T3 pointB,
-         T3 pointC, V3 vNormNorm, V3 vAB) {
+         T3 pointC, T3 vNormNorm, T3 vAB) {
     vAB.sub2(pointB, pointA);
     vNormNorm.sub2(pointC, pointA);
     vNormNorm.cross(vAB, vNormNorm);
@@ -241,7 +241,7 @@
    * @return w
    */
   public static float getNormalThroughPoints(T3 pointA, T3 pointB,
-                                   T3 pointC, V3 vNorm, V3 vTemp) {
+                                   T3 pointC, T3 vNorm, T3 vTemp) {
     // for Polyhedra
     calcNormalizedNormal(pointA, pointB, pointC, vNorm, vTemp);
     // ax + by + cz + d = 0

Modified: trunk/Jmol/src/org/jmol/modelset/Text.java
===================================================================
--- trunk/Jmol/src/org/jmol/modelset/Text.java  2016-06-08 21:56:33 UTC (rev 
21143)
+++ trunk/Jmol/src/org/jmol/modelset/Text.java  2016-06-15 04:36:56 UTC (rev 
21144)
@@ -25,6 +25,7 @@
 
 import javajs.awt.Font;
 import javajs.util.P3;
+import javajs.util.P3i;
 import javajs.util.PT;
 import javajs.util.SB;
 
@@ -641,4 +642,20 @@
         + boxHeight);
   }
 
+  public void getPymolScreenOffset(P3 atomPt, P3i screen, int zSlab, P3 pTemp, 
float sppm) {
+    if (atomPt != null && Math.abs(pymolOffset[0]) == 1)
+      pTemp.setT(atomPt);
+    else
+      pTemp.set(0, 0, 0);
+    pTemp.add3(pymolOffset[4], pymolOffset[5],
+        pymolOffset[6]);
+    vwr.tm.transformPtScr(pTemp, screen);
+    setXYZs(screen.x, screen.y, screen.z, zSlab);
+    setScalePixelsPerMicron(sppm);
+
+    
+    // TODO
+    
+  }
+
 }

Modified: trunk/Jmol/src/org/jmol/modelsetbio/BioModelSet.java
===================================================================
--- trunk/Jmol/src/org/jmol/modelsetbio/BioModelSet.java        2016-06-08 
21:56:33 UTC (rev 21143)
+++ trunk/Jmol/src/org/jmol/modelsetbio/BioModelSet.java        2016-06-15 
04:36:56 UTC (rev 21144)
@@ -564,13 +564,15 @@
     Atom[] at = ms.at;
     Model[] am = ms.am;
     for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i + 1)) {
-      if (at[i].group.isAdded(i))
+      Atom a = at[i];
+      Group g = a.group;
+      if (g.isAdded(i) || g.getBioPolymerLength() == 0) 
         continue;
-      monomerIndexCurrent = at[i].group.setProteinStructureType(type,
+      monomerIndexCurrent = g.setProteinStructureType(type,
           iLast == i - 1 ? monomerIndexCurrent : -1);
-      int modelIndex = at[i].mi;
+      int modelIndex = a.mi;
       ms.proteinStructureTainted = am[modelIndex].structureTainted = true;
-      iLast = i = at[i].group.lastAtomIndex;
+      iLast = i = g.lastAtomIndex;
     }
     int[] lastStrucNo = new int[ms.mc];
     for (int i = 0; i < ms.ac; i++) {

Modified: trunk/Jmol/src/org/jmol/render/BbcageRenderer.java
===================================================================
--- trunk/Jmol/src/org/jmol/render/BbcageRenderer.java  2016-06-08 21:56:33 UTC 
(rev 21143)
+++ trunk/Jmol/src/org/jmol/render/BbcageRenderer.java  2016-06-15 04:36:56 UTC 
(rev 21144)
@@ -23,6 +23,7 @@
  */
 package org.jmol.render;
 
+import org.jmol.script.T;
 import org.jmol.shape.Bbcage;
 import org.jmol.util.BoxInfo;
 import org.jmol.viewer.StateManager;
@@ -37,11 +38,12 @@
   @Override
   protected boolean render() {
     Bbcage bbox = (Bbcage) shape;
+    boolean hiddenLines = (vwr.getBoolean(T.hiddenlinesdashed));
     // no translucent bounding box
     if (bbox.isVisible && (isExport || g3d.checkTranslucent(false))
         && !vwr.isJmolDataFrame()) {
       colix = vwr.getObjectColix(StateManager.OBJ_BOUNDBOX);
-      renderCage(vwr.getObjectMad10(StateManager.OBJ_BOUNDBOX), 
ms.getBBoxVertices(), null, 0, 0xFF, 0xFF, 1);
+      renderCage(vwr.getObjectMad10(StateManager.OBJ_BOUNDBOX), 
ms.getBBoxVertices(), (hiddenLines ? BoxInfo.facePoints : null), null, 0, 0xFF, 
0xFF, 1);
     }
     return false;
   }

Modified: trunk/Jmol/src/org/jmol/render/CageRenderer.java
===================================================================
--- trunk/Jmol/src/org/jmol/render/CageRenderer.java    2016-06-08 21:56:33 UTC 
(rev 21143)
+++ trunk/Jmol/src/org/jmol/render/CageRenderer.java    2016-06-15 04:36:56 UTC 
(rev 21144)
@@ -24,11 +24,14 @@
 package org.jmol.render;
 
 
+import org.jmol.java.BS;
 import org.jmol.shape.Bbcage;
 import org.jmol.shape.FontLineShape;
 import org.jmol.util.BoxInfo;
 
+import javajs.util.Measure;
 import javajs.util.P3;
+import javajs.util.P3i;
 
 abstract class CageRenderer extends FontLineShapeRenderer {
 
@@ -46,10 +49,11 @@
   protected boolean isPolymer;
   
   private P3 pt = new P3();
+  private P3 pt1 = new P3();
   
-  protected void renderCage(int mad, P3[] vertices, P3[] axisPoints,
-                        int firstLine, int allowedEdges0, int allowedEdges1,
-                        float scale) {
+  protected void renderCage(int mad, P3[] vertices, P3i[] faces,
+                        P3[] axisPoints, int firstLine, int allowedEdges0,
+                        int allowedEdges1, float scale) {
     //clearBox();
     g3d.setC(colix);
     FontLineShape fls = (FontLineShape) shape;
@@ -64,17 +68,33 @@
         pt.scaleAdd2(scale, pt, vertices[0]);
       }
       tm.transformPtNoClip(pt, p3Screens[i]);
+      System.out.println(i + " " + p3Screens[i]);
       zSum += p3Screens[i].z;
     }
-    
+    BS bsSolid = new BS();
+    if (faces != null)
+      for (int i = 12; --i >= 0;) {
+        P3i face = faces[i];
+        Measure.getNormalThroughPoints(p3Screens[face.x], p3Screens[face.y], 
p3Screens[face.z], pt1, pt);
+        System.out.println(i + " " + face + " " + pt1);
+        if (pt1.z <= 0) {
+          bsSolid.set(face.x);
+          bsSolid.set(face.y);
+          bsSolid.set(face.z);
+        }
+      }
+    System.out.println(bsSolid);
     int diameter = getDiameter((int) Math.floor(zSum / 8), mad);
     int axisPt = 2;
     char edge = 0;
     allowedEdges0 &= (isPolymer ? 0x1 : isSlab ? 0x55 : 0xFF);
     allowedEdges1 &= (isPolymer ? 0x10 : isSlab ? 0x55 : 0xFF);
     for (int i = firstLine * 2; i < 24; i += 2) {
+      int d = diameter;
       int edge0 = BoxInfo.edges[i];
       int edge1 = BoxInfo.edges[i + 1];
+      if (!bsSolid.get(edge0) || !bsSolid.get(edge1))
+        d = -Math.abs(diameter);
       if (axisPoints != null && edge0 == 0)
         tm.transformPtNoClip(axisPoints[axisPt--], p3Screens[0]);
       if ((allowedEdges0 & (1 << edge0)) == 0 
@@ -106,7 +126,7 @@
         else
           tickInfo.first = start;
       }
-      renderLine(p3Screens[edge0], p3Screens[edge1], diameter,
+      renderLine(p3Screens[edge0], p3Screens[edge1], d,
           drawTicks);
     }
   }

Modified: trunk/Jmol/src/org/jmol/render/EchoRenderer.java
===================================================================
--- trunk/Jmol/src/org/jmol/render/EchoRenderer.java    2016-06-08 21:56:33 UTC 
(rev 21143)
+++ trunk/Jmol/src/org/jmol/render/EchoRenderer.java    2016-06-15 04:36:56 UTC 
(rev 21144)
@@ -38,7 +38,7 @@
     if (vwr.isPreviewOnly)
       return false;
     Echo echo = (Echo) shape;
-    float scalePixelsPerMicron = (vwr.getBoolean(T.fontscaling) ? vwr
+    sppm = (vwr.getBoolean(T.fontscaling) ? vwr
         .getScalePixelsPerAngstrom(true) * 10000 : 0);
     imageFontScaling = vwr.imageFontScaling;
     boolean haveTranslucent = false;
@@ -54,7 +54,9 @@
         tm.transformPtScr(t.xyz, pt0i);
         t.setXYZs(pt0i.x, pt0i.y, pt0i.z, pt0i.z);
       }
-      if (t.movableZPercent != Integer.MAX_VALUE) {
+      if (t.pymolOffset != null)
+        t.getPymolScreenOffset(t.xyz, pt0i, zSlab, pTemp, sppm);
+      else if (t.movableZPercent != Integer.MAX_VALUE) {
         int z = vwr.tm.zValueFromPercent(t.movableZPercent % 1000);
         if (t.valign == JC.ECHO_XYZ && Math.abs(t.movableZPercent) >= 1000)
           z = pt0i.z - vwr.tm.zValueFromPercent(0) + z;
@@ -71,7 +73,7 @@
         if (t.zSlab == Integer.MIN_VALUE)
           t.zSlab = 1;
       }
-      if (TextRenderer.render(t, g3d, scalePixelsPerMicron, imageFontScaling,
+      if (TextRenderer.render(t, g3d, sppm, imageFontScaling,
           false, null, xy)
           && t.valign == JC.ECHO_BOTTOM
           && t.align == JC.TEXT_ALIGN_RIGHT)

Modified: trunk/Jmol/src/org/jmol/render/LabelsRenderer.java
===================================================================
--- trunk/Jmol/src/org/jmol/render/LabelsRenderer.java  2016-06-08 21:56:33 UTC 
(rev 21143)
+++ trunk/Jmol/src/org/jmol/render/LabelsRenderer.java  2016-06-15 04:36:56 UTC 
(rev 21144)
@@ -49,7 +49,7 @@
 
   byte fidPrevious;
 
-  private P3 pTemp = new P3();
+  protected P3 pTemp = new P3();
 
   protected short bgcolix;
   protected short labelColix;
@@ -163,15 +163,7 @@
         text.colix = labelColix;
         text.bgcolix = bgcolix;
       } else {
-        if (Math.abs(text.pymolOffset[0]) == 1)
-          pTemp.setT(atomPt);
-        else
-          pTemp.set(0, 0, 0);
-        pTemp.add3(text.pymolOffset[4], text.pymolOffset[5],
-            text.pymolOffset[6]);
-        tm.transformPtScr(pTemp, screen);
-        text.setXYZs(screen.x, screen.y, screen.z, zSlab);
-        text.setScalePixelsPerMicron(sppm);
+        text.getPymolScreenOffset(atomPt, screen, zSlab, pTemp, sppm);
       }
     } else {
       boolean isLeft = (textAlign == JC.TEXT_ALIGN_LEFT || textAlign == 
JC.TEXT_ALIGN_NONE);

Modified: trunk/Jmol/src/org/jmol/render/UccageRenderer.java
===================================================================
--- trunk/Jmol/src/org/jmol/render/UccageRenderer.java  2016-06-08 21:56:33 UTC 
(rev 21143)
+++ trunk/Jmol/src/org/jmol/render/UccageRenderer.java  2016-06-15 04:36:56 UTC 
(rev 21144)
@@ -96,7 +96,7 @@
     offsetT.setT(unitcell.getFractionalOrigin());
     unitcell.toCartesian(offsetT, true);
     offset.sub(offsetT);
-
+    boolean hiddenLines = vwr.getBoolean(T.hiddenlinesdashed);
     P3 fset = unitcell.getUnitCellMultiplier();
     boolean haveMultiple = (fset != null && fset.distanceSquared(fset0) != 0);
     if (!haveMultiple)
@@ -136,7 +136,7 @@
         unitcell.toCartesian(v, true);
         verticesT[i].add2(v, offsetT);
       }
-      renderCage(mad10, verticesT, aPoints, firstLine, allow0, allow1, 1);
+      renderCage(mad10, verticesT, (hiddenLines ? BoxInfo.facePoints : null), 
aPoints, firstLine, allow0, allow1, 1);
     } else
       for (int x = (int) cell0.x; x < cell1.x; x++) {
         for (int y = (int) cell0.y; y < cell1.y; y++) {
@@ -156,8 +156,8 @@
             allow1 = 0xFF;
             for (int i = 8; --i >= 0;)
               verticesT[i].add2(vertices[i], offsetT);
-            renderCage(mad10, verticesT, aPoints, firstLine, allow0, allow1,
-                scale);
+            renderCage(mad10, verticesT, null, aPoints, firstLine, allow0,
+                allow1, scale);
           }
         }
       }

Modified: trunk/Jmol/src/org/jmol/script/ScriptEval.java
===================================================================
--- trunk/Jmol/src/org/jmol/script/ScriptEval.java      2016-06-08 21:56:33 UTC 
(rev 21143)
+++ trunk/Jmol/src/org/jmol/script/ScriptEval.java      2016-06-15 04:36:56 UTC 
(rev 21144)
@@ -7264,6 +7264,16 @@
         checkLength(pt);
         setShapeProperty(JC.SHAPE_ECHO, namex, Integer.valueOf(posx));
         break;
+      case T.offset:
+        P3 pt3 = getPoint3f(pt, false);
+        if (isPoint3f(pt)) {
+          // minus 1 here means from Jmol, not from PyMOL
+          propertyValue = new float[] { -1, pt3.x, pt3.y, pt3.z, 0, 0, 0 };
+        } else if (isArrayParameter(2)) {
+          // PyMOL offsets -- [1, scrx, scry, scrz, molx, moly, molz] in 
angstroms
+          propertyValue = floatParameterSet(2, 7, 7);
+        }
+        break;
       case T.off:
         propertyName = "off";
         break;
@@ -7287,7 +7297,8 @@
             getShapePropertyData(JC.SHAPE_ECHO, "currentTarget", data);
             id = data[0];
           }
-          if (!chk && vwr.ms.getEchoStateActive() && 
vwr.fm.loadImage(getToken(pt).value, id, !useThreads()))
+          if (!chk && vwr.ms.getEchoStateActive()
+              && vwr.fm.loadImage(getToken(pt).value, id, !useThreads()))
             throw new ScriptInterruption(this, "setEchoImage", 1);
           return;
         }
@@ -7295,7 +7306,8 @@
         return;
       case T.point:
         propertyName = "point";
-        propertyValue = (isCenterParameter(pt) ? centerParameter(pt, null) : 
null);
+        propertyValue = (isCenterParameter(pt) ? centerParameter(pt, null)
+            : null);
         pt = iToken + 1;
         break;
       default:

Modified: trunk/Jmol/src/org/jmol/script/T.java
===================================================================
--- trunk/Jmol/src/org/jmol/script/T.java       2016-06-08 21:56:33 UTC (rev 
21143)
+++ trunk/Jmol/src/org/jmol/script/T.java       2016-06-15 04:36:56 UTC (rev 
21144)
@@ -1001,6 +1001,7 @@
   public final static int hbondsrasmol                   = booleanparam | 77;
   public final static int hbondssolid                    = booleanparam | 78;
 // see predefinedset  public final static int hetero                         = 
booleanparam | 80;
+  public final static int hiddenlinesdashed              = booleanparam | 80;
   public final static int hidenameinpopup                = booleanparam | 82;
   public final static int hidenavigationpoint            = booleanparam | 84;
   public final static int hidenotselected                = booleanparam | 86;
@@ -2237,6 +2238,7 @@
        "functionXY",
        "functionXYZ",
        "gridPoints",
+       "hiddenLinesDashed",
        "homo",
        "ignore",
        "InChI",
@@ -3277,6 +3279,7 @@
         functionxy,                         //        "functionXY"
         functionxyz,                        //        "functionXYZ"
         gridpoints,                         //        "gridPoints"
+        hiddenlinesdashed,                  //        "hiddenLinesDashed"
         homo,                               //        "homo"
         ignore,                             //        "ignore"
         inchi,                              //        "InChI"

Modified: trunk/Jmol/src/org/jmol/scriptext/MathExt.java
===================================================================
--- trunk/Jmol/src/org/jmol/scriptext/MathExt.java      2016-06-08 21:56:33 UTC 
(rev 21143)
+++ trunk/Jmol/src/org/jmol/scriptext/MathExt.java      2016-06-15 04:36:56 UTC 
(rev 21144)
@@ -1040,9 +1040,10 @@
     // x = data(someData,ptrFieldOrColumn,nBytes,firstLine) # extraction of a
     // column of data based on a field (nBytes = 0) or column range (nBytes >
     // 0)
-    String selected = SV.sValue(args[0]);
+    String selected = (args.length == 0 ? "" : SV.sValue(args[0]));
     String type = "";
     switch (args.length) {
+    case 0:
     case 1:
       break;
     case 2:

Modified: trunk/Jmol/src/org/jmol/shape/Echo.java
===================================================================
--- trunk/Jmol/src/org/jmol/shape/Echo.java     2016-06-08 21:56:33 UTC (rev 
21143)
+++ trunk/Jmol/src/org/jmol/shape/Echo.java     2016-06-15 04:36:56 UTC (rev 
21144)
@@ -182,6 +182,13 @@
       return;
     }
 
+    if ("offset" == propertyName) {
+      if (currentObject != null) {
+        currentObject.pymolOffset = (float[]) value;
+      }
+      return;
+    }
+    
     if ("target" == propertyName) {
       thisID = null;
       String target = ((String) value).intern().toLowerCase();

Modified: trunk/Jmol/src/org/jmol/util/BoxInfo.java
===================================================================
--- trunk/Jmol/src/org/jmol/util/BoxInfo.java   2016-06-08 21:56:33 UTC (rev 
21143)
+++ trunk/Jmol/src/org/jmol/util/BoxInfo.java   2016-06-15 04:36:56 UTC (rev 
21144)
@@ -145,6 +145,13 @@
     P3i.new3(1, 3, 0),
     P3i.new3(6, 2, 7), 
     P3i.new3(1, 0, 5), 
+    
+    P3i.new3(0, 2, 6),
+    P3i.new3(6, 7, 5), 
+    P3i.new3(7, 3, 1), 
+    P3i.new3(3, 2, 0),
+    P3i.new3(2, 3, 7), 
+    P3i.new3(0, 4, 5), 
   };
 
   public final static int[] toCanonical = new int[] {0, 3, 4, 7, 1, 2, 5, 6};

Modified: trunk/Jmol/src/org/jmol/viewer/GlobalSettings.java
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/GlobalSettings.java  2016-06-08 21:56:33 UTC 
(rev 21143)
+++ trunk/Jmol/src/org/jmol/viewer/GlobalSettings.java  2016-06-15 04:36:56 UTC 
(rev 21144)
@@ -274,6 +274,7 @@
     setI("hermiteLevel", hermiteLevel);
     setB("hideNameInPopup", hideNameInPopup);
     setB("hideNavigationPoint", hideNavigationPoint);
+    setB("hiddenLinesDashed", hiddenLinesDashed);
     setB("highResolution", highResolutionFlag);
     setF("hoverDelay", hoverDelayMs / 1000f);
     setB("imageState", imageState);
@@ -561,6 +562,9 @@
   boolean allowModelkit = true;
   boolean allowMultiTouch = true; // but you still need to set the parameter 
multiTouchSparshUI=true
   boolean allowKeyStrokes = false;
+  
+  boolean hiddenLinesDashed = false;
+  
   int animationFps = 10;
   boolean atomPicking = true;
   boolean autoFps = false;

Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Jmol.properties      2016-06-08 21:56:33 UTC 
(rev 21143)
+++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties      2016-06-15 04:36:56 UTC 
(rev 21144)
@@ -42,8 +42,19 @@
 
 TODO: slightly stronger unitcell lines for near point?
 
-Jmol.___JmolVersion="14.7.0_2016.05.27"
+Jmol.___JmolVersion="14.7.0_2016.06.14"
 
+bug fix: reading of protein structure for a group that is not in a polymer 
causes null pointer exception
+
+new feature: set echo OFFSET {sx sy sz}
+ -- sets the echo offset to a specific screen pixel offset
+ 
+new feature: set hiddenLinesDashed
+ -- when set TRUE, hidden lines in unit cells and boundbox are rendered as 
dashed lines.
+ -- default is FALSE
+ 
+JmolVersion="14.7.0_2016.05.27"
+
 new feature: polyhedron -x.x ....
  -- sets maximum radius for gap calculation to be x.x
   

Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Viewer.java  2016-06-08 21:56:33 UTC (rev 
21143)
+++ trunk/Jmol/src/org/jmol/viewer/Viewer.java  2016-06-15 04:36:56 UTC (rev 
21144)
@@ -5084,6 +5084,8 @@
   @Override
   public boolean getBoolean(int tok) {
     switch (tok) {
+    case T.hiddenlinesdashed:
+      return g.hiddenLinesDashed;
     case T.pdb:
       return ms.getMSInfoB("isPDB");
     case T.allowgestures:
@@ -6030,6 +6032,10 @@
   private void setBooleanPropertyTok(String key, int tok, boolean value) {
     boolean doRepaint = true;
     switch (tok) {
+    case T.hiddenlinesdashed:
+      // 14.5.1
+      g.hiddenLinesDashed = value;
+      break;
     case T.multiplebondbananas:
       // 14.3.15
       g.multipleBondBananas = value;

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


------------------------------------------------------------------------------
What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
patterns at an interface-level. Reveals which users, apps, and protocols are 
consuming the most bandwidth. Provides multi-vendor support for NetFlow, 
J-Flow, sFlow and other flows. Make informed decisions using capacity planning
reports. http://pubads.g.doubleclick.net/gampad/clk?id=1444514421&iu=/41014381
_______________________________________________
Jmol-commits mailing list
Jmol-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jmol-commits

Reply via email to