From: <ha...@us...> - 2012-04-16 22:45:33
|
Revision: 17006 http://jmol.svn.sourceforge.net/jmol/?rev=17006&view=rev Author: hansonr Date: 2012-04-16 22:45:26 +0000 (Mon, 16 Apr 2012) Log Message: ----------- version=12.2.22_dev # bug fix: "connect;" command in states saved prior to 11.9.24 and then read by versions after that # The order in which Jmol created bonds changed in 11.9.24. Due to this, Jmol must check for the # version number of Jmol used to create a state, and if it was before this point, it must # apply "legacy" autobonding methods. Unfortunately, if that state from pre-11.9.24 versions # contains the "connect;" command, which it would if someone used the CONNECT command by itself # to regenerate all bonds in a model PRIOR to saving the state (Proteopedia does this), then # those scripts will be misread in versions 11.9.24-12.2.21/12.3.21. Modified Paths: -------------- branches/v12_2/Jmol/src/org/jmol/modelset/ModelCollection.java branches/v12_2/Jmol/src/org/jmol/script/ScriptEvaluator.java branches/v12_2/Jmol/src/org/jmol/viewer/Jmol.properties branches/v12_2/Jmol/src/org/jmol/viewer/Viewer.java Modified: branches/v12_2/Jmol/src/org/jmol/modelset/ModelCollection.java =================================================================== --- branches/v12_2/Jmol/src/org/jmol/modelset/ModelCollection.java 2012-04-16 22:43:58 UTC (rev 17005) +++ branches/v12_2/Jmol/src/org/jmol/modelset/ModelCollection.java 2012-04-16 22:45:26 UTC (rev 17006) @@ -646,7 +646,7 @@ } public boolean isConnect() { - return (script1.indexOf("connect") == 0); + return (script1.indexOf("connect") >= 0); } public boolean deleteAtoms(int modelIndex, BitSet bsBonds, BitSet bsAtoms) { @@ -2453,9 +2453,10 @@ case Token.delete: return deleteConnections(minDistance, maxDistance, order, bsA, bsB, isBonds, matchNull, minDistanceSquared, maxDistanceSquared); + case Token.legacyautobonding: case Token.auto: if (order != JmolEdge.BOND_AROMATIC) - return autoBond(bsA, bsB, bsBonds, isBonds, matchHbond); + return autoBond(bsA, bsB, bsBonds, isBonds, matchHbond, connectOperation == Token.legacyautobonding); modifyOnly = true; autoAromatize = true; break; @@ -2728,7 +2729,7 @@ } private int[] autoBond(BitSet bsA, BitSet bsB, BitSet bsBonds, - boolean isBonds, boolean matchHbond) { + boolean isBonds, boolean matchHbond, boolean legacyAutoBond) { if (isBonds) { BitSet bs = bsA; bsA = new BitSet(); @@ -2740,7 +2741,7 @@ } return new int[] { matchHbond ? autoHbond(bsA, bsB) - : autoBond(bsA, bsB, null, bsBonds, viewer.getMadBond(), false), 0 }; + : autoBond(bsA, bsB, null, bsBonds, viewer.getMadBond(), legacyAutoBond), 0 }; } private static float hbondMin = 2.5f; Modified: branches/v12_2/Jmol/src/org/jmol/script/ScriptEvaluator.java =================================================================== --- branches/v12_2/Jmol/src/org/jmol/script/ScriptEvaluator.java 2012-04-16 22:43:58 UTC (rev 17005) +++ branches/v12_2/Jmol/src/org/jmol/script/ScriptEvaluator.java 2012-04-16 22:45:26 UTC (rev 17006) @@ -7121,7 +7121,7 @@ */ if (statementLength == 1) { - viewer.rebond(); + viewer.rebond(isStateScript); return; } @@ -7131,7 +7131,7 @@ case Token.off: checkLength(2); if (!isSyntaxCheck) - viewer.rebond(); + viewer.rebond(isStateScript); return; case Token.integer: case Token.decimal: @@ -7196,7 +7196,7 @@ boolean isAuto = (tokAt(2) == Token.auto); checkLength(isAuto ? 3 : 2); if (!isSyntaxCheck) - viewer.setPdbConectBonding(isAuto); + viewer.setPdbConectBonding(isAuto, isStateScript); return; case Token.adjust: case Token.auto: Modified: branches/v12_2/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v12_2/Jmol/src/org/jmol/viewer/Jmol.properties 2012-04-16 22:43:58 UTC (rev 17005) +++ branches/v12_2/Jmol/src/org/jmol/viewer/Jmol.properties 2012-04-16 22:45:26 UTC (rev 17006) @@ -6,6 +6,13 @@ version=12.2.22_dev +# bug fix: "connect;" command in states saved prior to 11.9.24 and then read by versions after that +# The order in which Jmol created bonds changed in 11.9.24. Due to this, Jmol must check for the +# version number of Jmol used to create a state, and if it was before this point, it must +# apply "legacy" autobonding methods. Unfortunately, if that state from pre-11.9.24 versions +# contains the "connect;" command, which it would if someone used the CONNECT command by itself +# to regenerate all bonds in a model PRIOR to saving the state (Proteopedia does this), then +# those scripts will be misread in versions 11.9.24-12.2.21/12.3.21. # bug fix: antialiasDisplay does not show drag-box properly # bug fix: SMARTS syntax [${xxx}n] and [${xxx}m-n] changed to [$n{xxx}] and [$m-n{xxx}] # to avoid conflict with specifying isotope Modified: branches/v12_2/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- branches/v12_2/Jmol/src/org/jmol/viewer/Viewer.java 2012-04-16 22:43:58 UTC (rev 17005) +++ branches/v12_2/Jmol/src/org/jmol/viewer/Viewer.java 2012-04-16 22:45:26 UTC (rev 17006) @@ -7175,22 +7175,30 @@ @Override public void rebond() { - // Eval, PreferencesDialog + // PreferencesDialog + rebond(false); + } + + public void rebond(boolean isStateScript) { + // Eval CONNECT clearModelDependentObjects(); modelSet.deleteAllBonds(); - modelSet.autoBond(null, null, null, null, getMadBond(), false); - addStateScript("connect;", false, true); + boolean isLegacy = isStateScript && checkAutoBondLegacy(); + modelSet.autoBond(null, null, null, null, getMadBond(), isLegacy); + addStateScript((isLegacy ? "set legacyAutoBonding TRUE;connect;set legacyAutoBonding FALSE;" : "connect;"), false, true); } - public void setPdbConectBonding(boolean isAuto) { + public void setPdbConectBonding(boolean isAuto, boolean isStateScript) { // from eval clearModelDependentObjects(); modelSet.deleteAllBonds(); BitSet bsExclude = new BitSet(); modelSet.setPdbConectBonding(0, 0, bsExclude); if (isAuto) { - modelSet.autoBond(null, null, bsExclude, null, getMadBond(), false); - addStateScript("connect PDB AUTO;", false, true); + boolean isLegacy = isStateScript && checkAutoBondLegacy(); + modelSet.autoBond(null, null, bsExclude, null, getMadBond(), isLegacy); + addStateScript( + (isLegacy ? "set legacyAutoBonding TRUE;connect PDB AUTO;set legacyAutoBonding FALSE;" : "connect PDB auto;"), false, true); return; } addStateScript("connect PDB;", false, true); @@ -9937,7 +9945,7 @@ // } } - global.legacyAutoBonding = false; + setBooleanProperty("legacyautobonding", false); stateScriptVersionInt = Integer.MAX_VALUE; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |