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