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