Revision: 20668
          http://sourceforge.net/p/jmol/code/20668
Author:   hansonr
Date:     2015-07-31 12:56:05 +0000 (Fri, 31 Jul 2015)
Log Message:
-----------
Jmol.___JmolVersion="14.2.15_2015.07.30b"

bug fix: JavaScript deletion of array elements fails for int[] arrays.

JmolVersion="14.3.15_2015.07.30"

new feature: set multipleBondBananas TRUE
  -- displays multiple bonds as banana bonds
  -- does not carry over after model loading
  
new feature: set multipleBondSpacing 0.15; set multipleBondRadiusFactor -1.0
  -- positive number for spacing but negative for radiusFactor rotates fixed 
multiple bonds 90 degrees.

bug fix: magnetic spin vectors do not render properly (broken in 
14.3.13_2015.05.12)

Modified Paths:
--------------
    trunk/Jmol/src/javajs/util/AU.java
    trunk/Jmol/src/org/jmol/render/SticksRenderer.java
    trunk/Jmol/src/org/jmol/renderspecial/DrawRenderer.java
    trunk/Jmol/src/org/jmol/renderspecial/VectorsRenderer.java
    trunk/Jmol/src/org/jmol/script/T.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: trunk/Jmol/src/javajs/util/AU.java
===================================================================
--- trunk/Jmol/src/javajs/util/AU.java  2015-07-30 13:50:57 UTC (rev 20667)
+++ trunk/Jmol/src/javajs/util/AU.java  2015-07-31 12:56:05 UTC (rev 20668)
@@ -163,16 +163,18 @@
    * @return array
    */
   private static Object newInstanceO(Object array, int n) {
+    if (isAI(array)) 
+      return new int[n];
     /**
      * @j2sNative
      * 
-     * if (!array.getClass().getComponentType)
+     * if (!array.getClass || !array.getClass().getComponentType)
      *          return new Array(n);
      * 
      */
     {
-      return Array.newInstance(array.getClass().getComponentType(), n);
     }
+    return Array.newInstance(array.getClass().getComponentType(), n);
   }
 
   public static int getLength(Object array) {

Modified: trunk/Jmol/src/org/jmol/render/SticksRenderer.java
===================================================================
--- trunk/Jmol/src/org/jmol/render/SticksRenderer.java  2015-07-30 13:50:57 UTC 
(rev 20667)
+++ trunk/Jmol/src/org/jmol/render/SticksRenderer.java  2015-07-31 12:56:05 UTC 
(rev 20668)
@@ -34,6 +34,9 @@
 import org.jmol.util.C;
 import org.jmol.util.GData;
 import org.jmol.util.Edge;
+
+import javajs.util.A4;
+import javajs.util.M3;
 import javajs.util.P3;
 import javajs.util.V3;
 import org.jmol.viewer.JC;
@@ -43,6 +46,8 @@
   private boolean showMultipleBonds;
   private float multipleBondSpacing;
   private float multipleBondRadiusFactor;
+  private boolean bondsPerp;
+  private boolean useBananas;
   private byte modeMultipleBond;
   private boolean isCartesian;
   //boolean showHydrogens;
@@ -113,14 +118,17 @@
     return needTranslucent;
   }
 
-//  if (haveMultipleBonds) {
-//    vwr.setFloatProperty("multipleBondSpacing", 0.15f);
-//    vwr.setFloatProperty("multipleBondRadiusFactor", 0.4f);
-//  }
-
   private void getMultipleBondSettings(boolean isPymol) {
+    useBananas = (vwr.getBoolean(T.multiplebondbananas) && !isPymol);
+    // negative spacing is relative, depending upon atom-atom distance;
+    // positive spacing is absolute, for fixed in-plane (radiusFactor > 0) or 
perp-plane (radiusFactor < 0)
     multipleBondSpacing = (isPymol ? 0.15f 
:vwr.getFloat(T.multiplebondspacing));
-    multipleBondRadiusFactor = (isPymol ? 0.4f : 
vwr.getFloat(T.multiplebondradiusfactor));    
+    // negative radius factor indicates perpendicular fixed double bond
+    multipleBondRadiusFactor = (isPymol ? 0.4f : 
vwr.getFloat(T.multiplebondradiusfactor));
+    bondsPerp = (useBananas || multipleBondSpacing > 0 && 
multipleBondRadiusFactor < 0);
+    if (useBananas)
+      multipleBondSpacing = (multipleBondSpacing < 0 ? -multipleBondSpacing * 
0.4f : multipleBondSpacing);
+    multipleBondRadiusFactor = Math.abs(multipleBondRadiusFactor);
     if (multipleBondSpacing == 0 && isCartesian)
       multipleBondSpacing = 0.2f;
     modeMultipleBond = vwr.g.modeMultipleBond;
@@ -335,9 +343,29 @@
         y.cross(y, x);
         y.normalize();
       }
+      if (bondsPerp)
+        y.cross(y, x);
       y.scale(multipleBondSpacing);
       x.setT(y);
       x.scale((bondOrder - 1) / 2f);
+      if (useBananas) {
+        drawBanana(a, b, x, 0);
+        switch (bondOrder) {
+        case 4:
+          drawBanana(a, b, x, 90);
+          drawBanana(a, b, x, -90);
+          //$FALL-THROUGH$
+        case 2:
+        default:
+          drawBanana(a, b, x, 180);
+          break;
+        case 3:
+          drawBanana(a, b, x, 120);
+          drawBanana(a, b, x, -120);
+          break;
+        }
+        return;
+      }
       p1.sub2(a, x);
       p2.sub2(b, x);
       while (true) {
@@ -380,6 +408,32 @@
     }
   }
 
+  private M3 rot;
+  private A4 a4;
+  private void drawBanana(Atom a, Atom b, V3 x, int deg) {
+    g3d.addRenderer(T.hermitelevel);
+    vectorT.sub2(b, a);
+    if (rot == null) {
+      rot = new M3();
+      a4 = new A4();
+    }
+    a4.setVA(vectorT, (float) (deg * Math.PI / 180));
+    rot.setAA(a4);
+    pointT.setT(a);
+    pointT3.setT(b);
+    pointT2.ave(a, b);
+    rot.rotate2(x, vectorT);
+    pointT2.add(vectorT);
+    tm.transformPtScrT3(a, pointT);
+    tm.transformPtScrT3(pointT2, pointT2);
+    tm.transformPtScrT3(b, pointT3);
+    int w = Math.max(width, 1);
+    g3d.setC(colixA);
+    g3d.fillHermite(5, w, w, w, pointT, pointT, pointT2, pointT3);
+    g3d.setC(colixB);
+    g3d.fillHermite(5, w, w, w, pointT, pointT2, pointT3, pointT3);
+  }
+
   private int xAxis1, yAxis1, xAxis2, yAxis2, dxStep, dyStep;
 
   private void resetAxisCoordinates() {

Modified: trunk/Jmol/src/org/jmol/renderspecial/DrawRenderer.java
===================================================================
--- trunk/Jmol/src/org/jmol/renderspecial/DrawRenderer.java     2015-07-30 
13:50:57 UTC (rev 20667)
+++ trunk/Jmol/src/org/jmol/renderspecial/DrawRenderer.java     2015-07-31 
12:56:05 UTC (rev 20668)
@@ -183,48 +183,14 @@
       //renderArrowHead(controlHermites[nHermites - 2], 
controlHermites[nHermites - 1], false);
       // 
       // {pt1} {pt2} {ptref} {nDegreesOffset, theta, fractionalOffset}
+      T3 ptRef = (vertexCount > 2 ? vertices[2] : Draw.randomPoint());
       float nDegreesOffset = (vertexCount > 3 ? vertices[3].x : 0);
       float theta = (vertexCount > 3 ? vertices[3].y : 360);
       if (theta == 0)
         return;
       float fractionalOffset = (vertexCount > 3 ? vertices[3].z : 0);
-      vTemp.sub2(vertices[1], vertices[0]);
-      // crossing point
-      pt1f.scaleAdd2(fractionalOffset, vTemp, vertices[0]);
-      // define rotational axis
-      M3 mat = new M3().setAA(A4.newVA(vTemp,
-          (float) (nDegreesOffset * Math.PI / 180)));
-      // vector to rotate
-      vTemp2.sub2(vertexCount > 2 ? vertices[2] : Draw.randomPoint(),
-          vertices[0]);
-      vTemp2.cross(vTemp, vTemp2);
-      vTemp2.cross(vTemp2, vTemp);
-      vTemp2.normalize();
-      vTemp2.scale(dmesh.scale / 2);
-      mat.rotate(vTemp2);
-      //control points
-      float degrees = theta / 5;
-      while (Math.abs(degrees) > 5)
-        degrees /= 2;
-      nPoints = Math.round(theta / degrees) + 1;
-      while (nPoints < 10) {
-        degrees /= 2;
-        nPoints = Math.round(theta / degrees) + 1;
-      }
-      mat.setAA(A4.newVA(vTemp, (float) (degrees * Math.PI / 180)));
-      screens = vwr.allocTempScreens(nPoints);
-      p3Screens = vwr.allocTempPoints(nPoints);
-      int iBase = nPoints - (dmesh.scale < 2 ? 3 : 3);
-      for (int i = 0; i < nPoints; i++) {
-        if (i == iBase)
-          pt0.setT(pt1);
-        pt1.scaleAdd2(1, vTemp2, pt1f);
-        if (i == 0)
-          pt2.setT(pt1);
-        tm.transformPtScr(pt1, screens[i]);
-        tm.transformPtScrT3(pt1, p3Screens[i]);
-        mat.rotate(vTemp2);
-      }
+      nPoints = setArc(vertices[0], vertices[1], ptRef, nDegreesOffset, theta,
+          fractionalOffset, dmesh.scale);
       if (dmesh.isVector && !dmesh.noHead) {
         renderArrowHead(pt0, pt1, 0.3f, false, false, dmesh.isBarb);
         tm.transformPtScr(pt1f, screens[nPoints - 1]);
@@ -267,6 +233,48 @@
 
   }
 
+  private int setArc(T3 v1, T3 v2, T3 ptRef, float nDegreesOffset,
+                       float theta, float fractionalOffset, float scale) {
+    vTemp.sub2(v2, v1);
+    // crossing point
+    pt1f.scaleAdd2(fractionalOffset, vTemp, v1);
+    // define rotational axis
+    M3 mat = new M3().setAA(A4.newVA(vTemp,
+        (float) (nDegreesOffset * Math.PI / 180)));
+    // vector to rotate
+    vTemp2.sub2(ptRef,
+        v1);
+    vTemp2.cross(vTemp, vTemp2);
+    vTemp2.cross(vTemp2, vTemp);
+    vTemp2.normalize();
+    vTemp2.scale(scale / 2);
+    mat.rotate(vTemp2);
+    //control points
+    float degrees = theta / 5;
+    while (Math.abs(degrees) > 5)
+      degrees /= 2;
+    int nPoints = Math.round(theta / degrees) + 1;
+    while (nPoints < 10) {
+      degrees /= 2;
+      nPoints = Math.round(theta / degrees) + 1;
+    }
+    mat.setAA(A4.newVA(vTemp, (float) (degrees * Math.PI / 180)));
+    screens = vwr.allocTempScreens(nPoints);
+    p3Screens = vwr.allocTempPoints(nPoints);
+    int iBase = nPoints - (dmesh.scale < 2 ? 3 : 3);
+    for (int i = 0; i < nPoints; i++) {
+      if (i == iBase)
+        pt0.setT(pt1);
+      pt1.scaleAdd2(1, vTemp2, pt1f);
+      if (i == 0)
+        pt2.setT(pt1);
+      tm.transformPtScr(pt1, screens[i]);
+      tm.transformPtScrT3(pt1, p3Screens[i]);
+      mat.rotate(vTemp2);
+    }
+    return nPoints;
+  }
+
   private void getConnectionPoints() {
     // now we screens and any adjustment to positions
     // we need to set the actual control points

Modified: trunk/Jmol/src/org/jmol/renderspecial/VectorsRenderer.java
===================================================================
--- trunk/Jmol/src/org/jmol/renderspecial/VectorsRenderer.java  2015-07-30 
13:50:57 UTC (rev 20667)
+++ trunk/Jmol/src/org/jmol/renderspecial/VectorsRenderer.java  2015-07-31 
12:56:05 UTC (rev 20668)
@@ -214,7 +214,7 @@
     }
     if (!standardVector) {
       tm.transformPtScrT3(pointVectorEnd, screenVectorEnd);
-      tm.transformPtScrT3(pointVectorStart, screenVectorEnd);
+      tm.transformPtScrT3(pointVectorStart, screenVectorStart);
       if (drawCap)
         pointArrowHead.add2(pointVectorEnd, headOffsetVector);
       else

Modified: trunk/Jmol/src/org/jmol/script/T.java
===================================================================
--- trunk/Jmol/src/org/jmol/script/T.java       2015-07-30 13:50:57 UTC (rev 
20667)
+++ trunk/Jmol/src/org/jmol/script/T.java       2015-07-31 12:56:05 UTC (rev 
20668)
@@ -1051,19 +1051,20 @@
   public final static int modelkitmode                   = booleanparam | 107; 
 // 12.0.RC15
   public final static int modulateoccupancy              = booleanparam | 108; 
 // 14.3.13
   public final static int monitorenergy                  = booleanparam | 109;
-  public final static int multiprocessor                 = booleanparam | 110;
-  public final static int navigatesurface                = booleanparam | 111;
-  public final static int navigationmode                 = booleanparam | 112;
-  public final static int navigationperiodic             = booleanparam | 113;
-  public final static int partialdots                    = booleanparam | 114; 
// 12.1.46
-  public final static int pdbaddhydrogens                = booleanparam | 115;
-  public final static int pdbgetheader                   = booleanparam | 116;
-  public final static int pdbsequential                  = booleanparam | 117;
-  public final static int perspectivedepth               = booleanparam | 118;
-  public final static int preservestate                  = booleanparam | 119;
-  public final static int rangeselected                  = booleanparam | 120;
-  public final static int refreshing                     = booleanparam | 121;
-  public final static int ribbonborder                   = booleanparam | 122;
+  public final static int multiplebondbananas            = booleanparam | 110;
+  public final static int multiprocessor                 = booleanparam | 111;
+  public final static int navigatesurface                = booleanparam | 112;
+  public final static int navigationmode                 = booleanparam | 113;
+  public final static int navigationperiodic             = booleanparam | 114;
+  public final static int partialdots                    = booleanparam | 115; 
// 12.1.46
+  public final static int pdbaddhydrogens                = booleanparam | 116;
+  public final static int pdbgetheader                   = booleanparam | 117;
+  public final static int pdbsequential                  = booleanparam | 118;
+  public final static int perspectivedepth               = booleanparam | 119;
+  public final static int preservestate                  = booleanparam | 120;
+  public final static int rangeselected                  = booleanparam | 121;
+  public final static int refreshing                     = booleanparam | 122;
+  public final static int ribbonborder                   = booleanparam | 123;
   public final static int rocketbarrels                  = booleanparam | 124;
   public final static int saveproteinstructurestate      = booleanparam | 126;
   public final static int scriptqueue                    = booleanparam | 128;
@@ -2578,6 +2579,7 @@
        "modelkitMode",
        "modulateOccupancy",
        "monitorEnergy",
+       "multiplebondbananas",
        "multipleBondRadiusFactor",
        "multipleBondSpacing",
        "multiProcessor",
@@ -3609,6 +3611,7 @@
         modelkitmode,                       //        "modelkitMode"
         modulateoccupancy,
         monitorenergy,                      //        "monitorEnergy"
+        multiplebondbananas,
         multiplebondradiusfactor,           //        
"multipleBondRadiusFactor"
         multiplebondspacing,                //        "multipleBondSpacing"
         multiprocessor,                     //        "multiProcessor"

Modified: trunk/Jmol/src/org/jmol/viewer/GlobalSettings.java
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/GlobalSettings.java  2015-07-30 13:50:57 UTC 
(rev 20667)
+++ trunk/Jmol/src/org/jmol/viewer/GlobalSettings.java  2015-07-31 12:56:05 UTC 
(rev 20668)
@@ -301,6 +301,7 @@
       setF("modulationScale", modulationScale);
       setB("monitorEnergy", monitorEnergy);
       setF("multipleBondRadiusFactor", multipleBondRadiusFactor);
+      setB("multipleBondBananas", multipleBondBananas);
       setF("multipleBondSpacing", multipleBondSpacing);
       setB("multiProcessor", multiProcessor && (Viewer.nProcessors > 1));
       setB("navigationMode", navigationMode);
@@ -525,6 +526,7 @@
     boolean ssbondsBackbone = false;
     float multipleBondSpacing = -1;     // 0.35?
     float multipleBondRadiusFactor = 0; // 0.75?
+    boolean multipleBondBananas = false;
 
     //secondary structure + Rasmol
 
@@ -1034,6 +1036,8 @@
       // these next two might be part of a 2D->3D operation
       app(str, "set minimizationCriterion  " + minimizationCriterion);
       app(str, "set minimizationSteps  " + minimizationSteps);
+      // Jmol 14.3.15 introduces bananas, but this setting should not carry 
through from one model to the next
+      app(str, "set multipleBondBananas false");
       app(
           str,
           "set pdbAddHydrogens "

Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Jmol.properties      2015-07-30 13:50:57 UTC 
(rev 20667)
+++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties      2015-07-31 12:56:05 UTC 
(rev 20668)
@@ -48,8 +48,26 @@
 
 TODO: there is something wrong with JSmol and zoneDemo. Just slow? or what?
 
-Jmol.___JmolVersion="14.3.15_2015.07.29"
+TODO: curved arrows overextend and with width settings do not truncate shaft 
properly
 
+
+Jmol.___JmolVersion="14.2.15_2015.07.30b"
+
+bug fix: JavaScript deletion of array elements fails for int[] arrays.
+
+JmolVersion="14.3.15_2015.07.30"
+
+new feature: set multipleBondBananas TRUE
+  -- displays multiple bonds as banana bonds
+  -- does not carry over after model loading
+  
+new feature: set multipleBondSpacing 0.15; set multipleBondRadiusFactor -1.0
+  -- positive number for spacing but negative for radiusFactor rotates fixed 
multiple bonds 90 degrees.
+
+bug fix: magnetic spin vectors do not render properly (broken in 
14.3.13_2015.05.12)
+
+JmolVersion="14.3.15_2015.07.29"
+
 new feature: [Font] button added to ScriptEditor
 
 bug fix: config 2 and  select config=2 may not work properly (still)

Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Viewer.java  2015-07-30 13:50:57 UTC (rev 
20667)
+++ trunk/Jmol/src/org/jmol/viewer/Viewer.java  2015-07-31 12:56:05 UTC (rev 
20668)
@@ -2531,6 +2531,7 @@
     setSelectionHalosEnabled(false);
     tm.setCenter();
     am.initializePointers(1);
+    setBooleanProperty("multipleBondBananas", false);
     if (!ms.getMSInfoB("isPyMOL")) {
       clearAtomSets();
       setCurrentModelIndex(0);
@@ -5040,6 +5041,8 @@
       return g.messageStyleChime;
     case T.modelkitmode:
       return g.modelKitMode;
+    case T.multiplebondbananas:
+      return g.multipleBondBananas;
     case T.navigationmode:
       return g.navigationMode;
     case T.navigationperiodic:
@@ -5857,6 +5860,10 @@
   private void setBooleanPropertyTok(String key, int tok, boolean value) {
     boolean doRepaint = true;
     switch (tok) {
+    case T.multiplebondbananas:
+      // 14.3.15
+      g.multipleBondBananas = value;
+      break;
     case T.modulateoccupancy:
       // 12.0.RC6
       g.modulateOccupancy = value;

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