Revision: 18277
          http://sourceforge.net/p/jmol/code/18277
Author:   hansonr
Date:     2013-06-03 02:09:09 +0000 (Mon, 03 Jun 2013)
Log Message:
-----------
___JmolVersion="13.1.16_dev_2013.06.01"

Modified Paths:
--------------
    trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java
    trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLScene.java
    trunk/Jmol/src/org/jmol/viewer/StateManager.java

Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java
===================================================================
--- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java      
2013-06-02 19:32:41 UTC (rev 18276)
+++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java      
2013-06-03 02:09:09 UTC (rev 18277)
@@ -37,7 +37,7 @@
 import org.jmol.api.PymolAtomReader;
 import org.jmol.constant.EnumStructure;
 import org.jmol.script.T;
-import org.jmol.util.BoxInfo; //import org.jmol.util.Escape;
+import org.jmol.util.BoxInfo;
 import org.jmol.util.BS;
 import org.jmol.util.BSUtil;
 import org.jmol.util.C;
@@ -45,7 +45,6 @@
 import org.jmol.util.Logger;
 import org.jmol.util.P3;
 import org.jmol.util.TextFormat;
-import org.jmol.viewer.JC;
 
 /**
  * PyMOL PSE (binary Python session) file reader.
@@ -365,14 +364,14 @@
     }
     for (int i = 1; i < n; i++)
       processObject(listAt(names, i), false, 0);
-    pymolScene.setObjectInfo(null, 0, null, false, null, null);
+    pymolScene.setObjectInfo(null, 0, null, false, null, null, null);
 
     // not currently generating selections
     //processSelections();
 
     // meshes are special objects that depend upon grid map data
     if (mapObjects != null && allowSurface)
-      processMeshes();
+      processMeshes(); 
 
     // trajectories are not supported yet
     if (isTrajectory) {
@@ -531,7 +530,7 @@
     if (haveFrames && !haveCommands && !haveViews) {
       // simple animation
       isMovie = true;
-      pymolScene.setObjectInfo(null, 0, null, false, null, null);
+      pymolScene.setObjectInfo(null, 0, null, false, null, null, null);
       pymolScene.setFrameObject(T.movie, movie);
     } else {
       //isMovie = true;  for now, no scripted movies
@@ -562,8 +561,8 @@
   }
   
   /**
-   * The main object processor. 
-   * Not implemented: ALIGNMENT, CALLBACK, SLICE, SURFACE 
+   * The main object processor. Not implemented: ALIGNMENT, CALLBACK, SLICE,
+   * SURFACE
    * 
    * @param execObject
    * @param moleculeOnly
@@ -580,8 +579,17 @@
     if ((type == PyMOL.OBJECT_MOLECULE) != moleculeOnly || 
!checkObject(execObject))
       return;
     JmolList<Object> pymolObject = listAt(execObject, 5);
-    if (iState > 0 && (type != PyMOL.OBJECT_MOLECULE || 
!moleculeHasState(iState, pymolObject)))
+    JmolList<Object> stateSettings = null;
+    if (type == PyMOL.OBJECT_MOLECULE) {
+      JmolList<Object> states = listAt(pymolObject, 4);
+      JmolList<Object> state = listAt(states, iState);
+      JmolList<Object> idxToAtm = listAt(state, 3);
+      if (iState > 0 && (idxToAtm == null || idxToAtm.size() == 0))
         return;
+      stateSettings = listAt(state, 7);
+    } else   if (iState > 0) {
+        return;
+    }
     
     Logger.info("PyMOL model " + (nModels) + " Object " + objectName
         + (isHidden ? " (hidden)" : " (visible)"));
@@ -590,7 +598,7 @@
         execObject, 6));
     if (" ".equals(parentGroupName))
       parentGroupName = null;
-    pymolScene.setObjectInfo(objectName, type, parentGroupName, isHidden, 
listAt(objectHeader, 8), (moleculeOnly ? "_" + (iState + 1) : ""));
+    pymolScene.setObjectInfo(objectName, type, parentGroupName, isHidden, 
listAt(objectHeader, 8), stateSettings, (moleculeOnly ? "_" + (iState + 1) : 
""));
     BS bsAtoms = null;
     boolean doExclude = (bsBytesExcluded != null);
     String msg = null;
@@ -660,13 +668,6 @@
       Logger.error("Unprocessed object type " + msg + " " + objectName);
   }
 
-  private boolean moleculeHasState(int iState, JmolList<Object> pymolObject) {
-    JmolList<Object> states = listAt(pymolObject, 4);
-    JmolList<Object> state = listAt(states, iState);
-    JmolList<Object> idxToAtm = listAt(state, 3);
-    return (idxToAtm != null && idxToAtm.size() > 0);
-  }
-
   /**
    * Create a CGO JmolObject, just passing on key information. 
    * 
@@ -678,10 +679,8 @@
     if (isHidden)
       return;
     JmolList<Object> data = listAt(listAt(pymolObject, 2), 0);
-    data.addLast(objectName);
-    JmolObject jo = addJmolObject(JC.SHAPE_CGO, null, data);
-    jo.argb = PyMOL.getRGB(intAt(listAt(pymolObject, 0), 2));
-    jo.translucency = pymolScene.floatSetting(PyMOL.cgo_transparency);
+    int color = PyMOL.getRGB(intAt(listAt(pymolObject, 0), 2));
+    pymolScene.addCGO(data, color);
     appendLoadNote("CGO " + PyMOLScene.fixName(objectName));
   }
 

Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLScene.java
===================================================================
--- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLScene.java       
2013-06-02 19:32:41 UTC (rev 18276)
+++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLScene.java       
2013-06-03 02:09:09 UTC (rev 18277)
@@ -63,6 +63,7 @@
     colixes = null;
     atomColorList = null;
     objectSettings = null;
+    stateSettings = null;
     if (!isAll)
       return;
     groups = null;
@@ -74,6 +75,7 @@
     htObjectGroups = null;
     htObjectAtoms = null;
     htObjectSettings = null;
+    htStateSettings = null;
     objectInfo = null;
     settings = null;
     uniqueSettings = null;
@@ -97,6 +99,8 @@
   private Map<String, Map<Integer, JmolList<Object>>> htObjectSettings = new 
Hashtable<String, Map<Integer, JmolList<Object>>>();
   private Map<String, Object[]> objectInfo = new Hashtable<String, Object[]>();
   private JmolList<Object> settings;
+  private Map<String, Map<Integer, JmolList<Object>>> htStateSettings = new 
Hashtable<String, Map<Integer, JmolList<Object>>>();
+  private Map<Integer, JmolList<Object>>  stateSettings;
   private Map<Integer, JmolList<Object>> uniqueSettings;
 
   private int bgRgb;
@@ -161,14 +165,15 @@
         0, labelPosition0);
   }
 
-  @SuppressWarnings("unchecked")
   void setObjectInfo(String name, int type, String groupName, boolean isHidden,
-                     JmolList<Object> list, String ext) {
+                     JmolList<Object> listObjSettings,
+                     JmolList<Object> listStateSettings, String ext) {
     objectName = name;
     objectHidden = isHidden;
     objectNameID = (objectName == null ? null : PyMOLScene.fixName(objectName
         + ext));
     objectSettings = new Hashtable<Integer, JmolList<Object>>();
+    stateSettings = new Hashtable<Integer, JmolList<Object>>();
     if (objectName != null) {
       objectSelectionName = getSelectionName(name);
       if (groupName != null) {
@@ -177,19 +182,31 @@
       }
       objectInfo.put(objectName, new Object[] { objectNameID,
           Integer.valueOf(type) });
-      htObjectSettings.put(objectName, objectSettings);
-      if (list != null && list.size() != 0) {
-        if (Logger.debugging)
-          Logger.info(objectName + " local settings: " + list.toString());
-        for (int i = list.size(); --i >= 0;) {
-          JmolList<Object> setting = (JmolList<Object>) list.get(i);
-          objectSettings.put((Integer) setting.get(0), setting);
-        }
+      if (htObjectSettings.get(objectName) == null) {
+        listToSettings(listObjSettings, objectSettings);
+        htObjectSettings.put(objectName, objectSettings);
       }
+      if (htStateSettings.get(objectNameID) == null) {
+        listToSettings(listStateSettings, stateSettings);
+        htStateSettings.put(objectNameID, stateSettings);
+      }
     }
     getObjectSettings();
   }
 
+  @SuppressWarnings("unchecked")
+  private static void listToSettings(JmolList<Object> list,
+                              Map<Integer, JmolList<Object>> objectSettings) {
+    if (list != null && list.size() != 0) {
+//      if (Logger.debugging)
+//        Logger.info(objectName + " local settings: " + list.toString());
+      for (int i = list.size(); --i >= 0;) {
+        JmolList<Object> setting = (JmolList<Object>) list.get(i);
+        objectSettings.put((Integer) setting.get(0), setting);
+      }
+    }
+  }
+
   private void getObjectSettings() {
     nonBondedSize = floatSetting(PyMOL.nonbonded_size);
     sphereScale = floatSetting(PyMOL.sphere_scale);
@@ -442,6 +459,7 @@
     String groupName = htObjectGroups.get(objectName);
     objectHidden = (htHiddenObjects.containsKey(name) || groupName != null
         && !groups.get(groupName).visible);
+    stateSettings = htStateSettings.get(objectName+"_" + istate);
     getObjectSettings();
   }
 
@@ -454,6 +472,7 @@
     //    for (int m = moleculeNames.size(); --m >= 0;) {
     for (int m = 0; m < moleculeNames.size(); m++) {
       setObject(moleculeNames.get(m), istate);
+      getObjectSettings();
       if (objectHidden)
         continue;
       BS[] molReps = new BS[PyMOL.REP_JMOL_MAX];
@@ -786,34 +805,36 @@
     return (floatSetting(i) != 0);
   }
 
-  @SuppressWarnings("unchecked")
   float floatSetting(int i) {
     try {
-      JmolList<Object> setting = null;
-      if (objectSettings != null)
-        setting = objectSettings.get(Integer.valueOf(i));
-      if (setting == null)
-        setting = (JmolList<Object>) settings.get(i);
+      JmolList<Object> setting = getSetting(i);
       return ((Number) setting.get(2)).floatValue();
     } catch (Exception e) {
       return PyMOL.getDefaultSetting(i, pymolVersion);
     }
   }
 
-  @SuppressWarnings("unchecked")
   String stringSetting(int i) {
     try {
-      JmolList<Object> setting = null;
-      if (objectSettings != null)
-        setting = objectSettings.get(Integer.valueOf(i));
-      if (setting == null)
-        setting = (JmolList<Object>) settings.get(i);
+      JmolList<Object> setting = getSetting(i);
       return setting.get(2).toString();
     } catch (Exception e) {
       return null;
     }
   }
 
+  @SuppressWarnings("unchecked")
+  private JmolList<Object> getSetting(int i) {
+    JmolList<Object> setting = null;
+    if (stateSettings != null)
+      setting = stateSettings.get(Integer.valueOf(i));
+    if (setting == null && objectSettings != null)
+      setting = objectSettings.get(Integer.valueOf(i));
+    if (setting == null)
+      setting = (JmolList<Object>) settings.get(i);
+    return setting;
+  }
+
   static P3 pointAt(JmolList<Object> list, int i, P3 pt) {
     pt.set(floatAt(list, i++), floatAt(list, i++), floatAt(list, i));
     return pt;
@@ -847,6 +868,13 @@
     return labelPos;
   }
 
+  void addCGO(JmolList<Object> data, int color) {
+    data.addLast(objectName);
+    JmolObject jo = addJmolObject(JC.SHAPE_CGO, null, data);
+    jo.argb = color;
+    jo.translucency = floatSetting(PyMOL.cgo_transparency);
+  }
+  
   boolean addMeasurements(MeasurementData[] mdList, int nCoord,
                           JmolList<Object> list, BS bsReps, int color,
                           JmolList<Object> offsets, boolean haveLabels) {

Modified: trunk/Jmol/src/org/jmol/viewer/StateManager.java
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/StateManager.java    2013-06-02 19:32:41 UTC 
(rev 18276)
+++ trunk/Jmol/src/org/jmol/viewer/StateManager.java    2013-06-03 02:09:09 UTC 
(rev 18277)
@@ -430,7 +430,7 @@
     }
 
     public String getMoveToText(boolean asCommand) {
-      return (asCommand ? "  " + moveToText + "\n  save orientation " 
+      return (asCommand ? "   " + moveToText + "\n  save orientation " 
           + Escape.eS(saveName.substring(12)) + ";\n" : moveToText);
     }
     

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


------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite
It's a free troubleshooting tool designed for production
Get down to code-level detail for bottlenecks, with <2% overhead.
Download for free and get started troubleshooting in minutes.
http://p.sf.net/sfu/appdyn_d2d_ap2
_______________________________________________
Jmol-commits mailing list
Jmol-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jmol-commits

Reply via email to