Revision: 18281
          http://sourceforge.net/p/jmol/code/18281
Author:   hansonr
Date:     2013-06-04 23:48:28 +0000 (Tue, 04 Jun 2013)
Log Message:
-----------
___JmolVersion="13.1.16_dev_2013.06.04"

PyMOL: better scene restore; 

Modified Paths:
--------------
    trunk/Jmol/src/org/jmol/adapter/readers/pymol/JmolObject.java
    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/Jmol.properties

Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/JmolObject.java
===================================================================
--- trunk/Jmol/src/org/jmol/adapter/readers/pymol/JmolObject.java       
2013-06-04 23:27:41 UTC (rev 18280)
+++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/JmolObject.java       
2013-06-04 23:48:28 UTC (rev 18281)
@@ -137,8 +137,11 @@
       sm.viewer.displayAtoms(bsAtoms, false, false, T.add, true);
       return;
     case T.restrict:
-      sm.viewer.select(null, false, 0, true);
-      sm.restrictSelected(false, false);
+      // start of generating shapes; argb is modelIndex
+      BS bs = sm.viewer.getModelUndeletedAtomsBitSet(argb);
+      BSUtil.invertInPlace(bs, sm.viewer.getAtomCount());
+      sm.viewer.select(bs, false, 0, true);
+      sm.restrictSelected(false, true);
       return;
     case T.display:
     case T.hide:

Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java
===================================================================
--- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java      
2013-06-04 23:27:41 UTC (rev 18280)
+++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java      
2013-06-04 23:48:28 UTC (rev 18281)
@@ -227,7 +227,7 @@
     // create settings and uniqueSettings lists
     JmolList<Object> settings = getMapList(map, "settings");
     sceneOrder = getMapList(map, "scene_order");
-    haveScenes = (sceneOrder != null && sceneOrder.size() != 0);
+    haveScenes = getFrameScenes(map);
     JmolList<Object> file = listAt(settings, PyMOL.session_file);
     if (file != null)
       Logger.info("PyMOL session file: " + file.get(2));
@@ -394,6 +394,25 @@
   }
 
   /**
+   * remove all scenes that do not define a frame.
+   * @param map
+   * @return  true if there are scenes that define a frame
+   */
+  @SuppressWarnings("unchecked")
+  private boolean getFrameScenes(Map<String, Object> map) {
+    if (sceneOrder == null)
+      return false;
+    Map<String, Object> scenes = (Map<String, Object>) map.get("scene_dict");
+    for (int i = 0; i < sceneOrder.size(); i++) {
+      String name = stringAt(sceneOrder, i);
+      JmolList<Object> thisScene = getMapList(scenes, name);
+      if (thisScene == null || thisScene.get(2) == null)
+        sceneOrder.remove(i--);
+    }
+    return (sceneOrder != null && sceneOrder.size() != 0);
+  }
+
+  /**
    * Create uniqueSettings from the "unique_settings" map item.
    * This will be used later in processing molecule objects.
    * 
@@ -1213,13 +1232,12 @@
     Map<String, JmolList<Object>> htObjNames = PyMOLScene.listToMap(getMapList(
         map, "names"));
     if (haveScenes) {
-      JmolList<Object> order = getMapList(map, "scene_order");
       Map<String, Object> scenes = (Map<String, Object>) map.get("scene_dict");
       finalizeSceneData();
       Map<String, JmolList<Object>> htSecrets = PyMOLScene
           .listToMap(getMapList(map, "selector_secrets"));
-      for (int i = 0; i < order.size(); i++) {
-        String name = stringAt(order, i);
+      for (int i = 0; i < sceneOrder.size(); i++) {
+        String name = stringAt(sceneOrder, i);
         JmolList<Object> thisScene = getMapList(scenes, name);
         if (thisScene == null)
           continue;

Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLScene.java
===================================================================
--- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLScene.java       
2013-06-04 23:27:41 UTC (rev 18280)
+++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLScene.java       
2013-06-04 23:48:28 UTC (rev 18281)
@@ -267,6 +267,8 @@
 
   /**
    * 
+   * frame scenes only here
+   * 
    * @param name
    * @param thisScene
    * @param htObjNames
@@ -277,9 +279,6 @@
                   Map<String, JmolList<Object>> htObjNames,
                   Map<String, JmolList<Object>> htSecrets) {
     Object frame = thisScene.get(2);
-    if (frame == null)
-      return; // must have frame defined; ignore other scenes
-
     // generator : this
     // name : scene name
     // pymolFrame : specified frame
@@ -389,7 +388,7 @@
     setObject(name, istate);
     JmolList<Object> atomList = listAt(obj, 1);
     int k0 = (istate == 0 ? 1 : istate);
-    int k1 = (istate == 0 ? stateCount : istate + 1);
+    int k1 = (istate == 0 ? stateCount : istate);
     for (int k = k0; k <= k1; k++) {
       int[] atomMap = htAtomMap.get(fixName(name + "_" + k));
       if (atomMap == null)

Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Jmol.properties      2013-06-04 23:27:41 UTC 
(rev 18280)
+++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties      2013-06-04 23:48:28 UTC 
(rev 18281)
@@ -11,6 +11,7 @@
 
 ___JmolVersion="13.1.16_dev_2013.06.04"
 
+PyMOL: better scene restore; 
 bug fix: "display add" by itself should not do anything
 bug fix: Hall translation initialization problem
 bug fix: JavaScript reading of old-style JVXL files

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


------------------------------------------------------------------------------
How ServiceNow helps IT people transform IT departments:
1. A cloud service to automate IT design, transition and operations
2. Dashboards that offer high-level views of enterprise services
3. A single system of record for all IT processes
http://p.sf.net/sfu/servicenow-d2d-j
_______________________________________________
Jmol-commits mailing list
Jmol-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jmol-commits

Reply via email to