From: <ha...@us...> - 2008-04-08 12:29:04
|
Revision: 9250 http://jmol.svn.sourceforge.net/jmol/?rev=9250&view=rev Author: hansonr Date: 2008-04-08 05:28:41 -0700 (Tue, 08 Apr 2008) Log Message: ----------- version=11.5.26_dev # bug fix: draw adds extra circle in 11.5.25 # bug fix: minimization out-of-plane energy calculation error # bug fix: better initial minimization parameters # bug fix: (applet) script termination callback should not be sent to message queue # bug fix: hover appears when a load script leaves an atom very close to (0,0) in the window Modified Paths: -------------- trunk/Jmol/src/org/jmol/applet/Jmol.java trunk/Jmol/src/org/jmol/minimize/Util.java trunk/Jmol/src/org/jmol/minimize/forcefield/Calculations.java trunk/Jmol/src/org/jmol/minimize/forcefield/CalculationsUFF.java trunk/Jmol/src/org/jmol/minimize/forcefield/ForceField.java trunk/Jmol/src/org/jmol/minimize/forcefield/ForceFieldUFF.java trunk/Jmol/src/org/jmol/modelset/BondCollection.java trunk/Jmol/src/org/jmol/modelset/ModelCollection.java trunk/Jmol/src/org/jmol/modelset/ModelSet.java trunk/Jmol/src/org/jmol/modelsetbio/AminoPolymer.java trunk/Jmol/src/org/jmol/modelsetbio/NucleicPolymer.java trunk/Jmol/src/org/jmol/shape/Sticks.java trunk/Jmol/src/org/jmol/shapespecial/Draw.java trunk/Jmol/src/org/jmol/shapespecial/DrawRenderer.java trunk/Jmol/src/org/jmol/viewer/Compiler.java trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/JmolConstants.java trunk/Jmol/src/org/jmol/viewer/MouseManager.java trunk/Jmol/src/org/jmol/viewer/Viewer.java trunk/Jmol/src/org/openscience/jmol/app/Jmol.java Modified: trunk/Jmol/src/org/jmol/applet/Jmol.java =================================================================== --- trunk/Jmol/src/org/jmol/applet/Jmol.java 2008-04-05 18:25:54 UTC (rev 9249) +++ trunk/Jmol/src/org/jmol/applet/Jmol.java 2008-04-08 12:28:41 UTC (rev 9250) @@ -974,10 +974,12 @@ break; case JmolConstants.CALLBACK_SCRIPT: showStatusAndConsole(strInfo); - if (!doCallback) - doCallback = ((callback = callbacks[type = JmolConstants.CALLBACK_MESSAGE]) != null); if (data.length == 4) // termination -- button legacy notifyScriptTermination(); + //termination messsage ONLY if script callback enabled -- not to message queue + //for compatibility reasons + else if (!doCallback) + doCallback = ((callback = callbacks[type = JmolConstants.CALLBACK_MESSAGE]) != null); break; case JmolConstants.CALLBACK_SYNC: sendSyncScript(doCallback, strInfo, (String) data[2]); Modified: trunk/Jmol/src/org/jmol/minimize/Util.java =================================================================== --- trunk/Jmol/src/org/jmol/minimize/Util.java 2008-04-05 18:25:54 UTC (rev 9249) +++ trunk/Jmol/src/org/jmol/minimize/Util.java 2008-04-08 12:28:41 UTC (rev 9250) @@ -122,10 +122,15 @@ Vector3d v1,Vector3d v2, Vector3d norm) { v1.sub(b, c); - v2.sub(c, d); + v2.sub(b, d); norm.cross(v1, v2); - v1.sub(a, c); - return Math.PI / 2.0 - vectorAngleRadians(norm, v1); + v2.add(v1); + v1.sub(b, a); + double angleA_CD = vectorAngleRadians(v2, v1); + double angleNorm = vectorAngleRadians(norm, v1); + if (angleNorm > Math.PI / 2) + angleNorm = Math.PI - angleNorm; + return Math.PI / 2.0 + (angleA_CD > Math.PI / 2.0 ? -angleNorm : angleNorm) ; } private static double vectorAngleRadians(Vector3d v1, Vector3d v2) { Modified: trunk/Jmol/src/org/jmol/minimize/forcefield/Calculations.java =================================================================== --- trunk/Jmol/src/org/jmol/minimize/forcefield/Calculations.java 2008-04-05 18:25:54 UTC (rev 9249) +++ trunk/Jmol/src/org/jmol/minimize/forcefield/Calculations.java 2008-04-08 12:28:41 UTC (rev 9250) @@ -48,9 +48,10 @@ final static int CALC_ES = 5; final static int CALC_MAX = 6; + ForceField ff; Vector[] calculations = new Vector[CALC_MAX]; public Hashtable ffParams; - + int atomCount; int bondCount; MinAtom[] atoms; @@ -60,14 +61,16 @@ double[] partialCharges; boolean havePartialCharges; Vector constraints; + boolean isPreliminary; public void setConstraints(Vector constraints) { this.constraints = constraints; } - Calculations(MinAtom[] minAtoms, MinBond[] minBonds, + Calculations(ForceField ff, MinAtom[] minAtoms, MinBond[] minBonds, int[][] angles, int[][] torsions, double[] partialCharges, Vector constraints) { + this.ff = ff; atoms = minAtoms; bonds = minBonds; this.angles = angles; @@ -138,12 +141,16 @@ boolean logging; boolean loggingEnabled; - public void setLoggingEnabled(boolean TF) { + void setLoggingEnabled(boolean TF) { loggingEnabled = TF; if (loggingEnabled) logData = new StringBuffer(); } + void setPreliminary(boolean TF) { + isPreliminary = TF; + } + private double calc(int iType, boolean gradients) { logging = loggingEnabled && !silent; this.gradients = gradients; Modified: trunk/Jmol/src/org/jmol/minimize/forcefield/CalculationsUFF.java =================================================================== --- trunk/Jmol/src/org/jmol/minimize/forcefield/CalculationsUFF.java 2008-04-05 18:25:54 UTC (rev 9249) +++ trunk/Jmol/src/org/jmol/minimize/forcefield/CalculationsUFF.java 2008-04-08 12:28:41 UTC (rev 9250) @@ -67,10 +67,10 @@ VDWCalc vdwCalc; ESCalc esCalc; - CalculationsUFF(MinAtom[] minAtoms, MinBond[] minBonds, + CalculationsUFF(ForceField ff, MinAtom[] minAtoms, MinBond[] minBonds, int[][] angles, int[][] torsions, double[] partialCharges, Vector constraints) { - super(minAtoms, minBonds, angles, torsions, partialCharges, constraints); + super(ff, minAtoms, minBonds, angles, torsions, partialCharges, constraints); bondCalc = new DistanceCalc(); angleCalc = new AngleCalc(); torsionCalc = new TorsionCalc(); @@ -284,6 +284,7 @@ a = atoms[ia = angle[0]]; b = atoms[ib = angle[1]]; c = atoms[ic = angle[2]]; + boolean isHXH = (a.type.equals("H_") && c.type.equals("H_")); parA = getParameter(a.type, ffParams); parB = getParameter(b.type, ffParams); @@ -335,7 +336,7 @@ * (3.0 * rab * rbc * (1.0 - cosT0 * cosT0) - rac * rac * cosT0); calc.addElement(new Object[] { new int[] { ia, ib, ic, coordination }, - new double[] { ka, c0 - c2, c1, 2 * c2, theta0 * RAD_TO_DEG } }); + new double[] { ka, c0 - c2, c1, 2 * c2, theta0 * RAD_TO_DEG, (isHXH ? ka * 10 : ka) } }); } double compute(Object[] dataIn) { @@ -345,7 +346,7 @@ ib = iData[1]; ic = iData[2]; int coordination = iData[3]; - double ka = dData[0]; + double ka = (isPreliminary ? dData[4] : dData[0]); double a0 = dData[1]; double a1 = dData[2]; double a2 = dData[3]; @@ -697,10 +698,10 @@ if ((a.type + c.type + d.type).indexOf("O_2") == 0) { koop += KCAL44; break; - } else if (b.type.lastIndexOf("R") == 2) + }/* else if (b.type.lastIndexOf("R") == 2) koop *= 10; // Bob's idea to force flat aromatic rings. // Who would EVER want otherwise? - break; +*/ break; case 7: case 8: break; @@ -731,23 +732,23 @@ koop /= 3.0; - // A-B-CD || C-B-AD PLANE = ABC + // A-BCD calc.addElement(new Object[] { new int[] { ia, ib, ic, id }, - new double[] { koop, a0, a1, a2 } }); + new double[] { koop, a0, a1, a2, koop * 10 } }); - // C-B-DA || D-B-CA PLANE BCD - calc.addElement(new Object[] { new int[] { id, ib, ic, ia }, - new double[] { koop, a0, a1, a2 } }); + // C-BDA + calc.addElement(new Object[] { new int[] { ic, ib, id, ia }, + new double[] { koop, a0, a1, a2, koop * 10 } }); - // A-B-DC || D-B-AC PLANE ABD - calc.addElement(new Object[] { new int[] { ia, ib, id, ic }, - new double[] { koop, a0, a1, a2 } }); + // D-BAC + calc.addElement(new Object[] { new int[] { id, ib, ia, ic }, + new double[] { koop, a0, a1, a2, koop * 10 } }); } double compute(Object[] dataIn) { getPointers(dataIn); - double koop = dData[0]; + double koop = (isPreliminary ? dData[4] : dData[0]); double a0 = dData[1]; double a1 = dData[2]; double a2 = dData[3]; @@ -764,7 +765,10 @@ if (gradients) { theta = Util.restorativeForceAndOutOfPlaneAngleRadians(da, db, dc, dd, v1, v2, v3); } else { - theta = Util.pointPlaneAngleRadians(dd, da, db, dc, v1, v2, v3); + //if (atoms[ib].atom.getAtomIndex() == 20) + //System.out.println(" atom palne angl " + atoms[ib].atom.getInfo()); + + theta = Util.pointPlaneAngleRadians(da, db, dc, dd, v1, v2, v3); } if (!Util.isFinite(theta)) @@ -777,6 +781,9 @@ double cosTheta = Math.cos(theta); energy = koop * (a0 + a1 * cosTheta + a2 * cosTheta * cosTheta); + //if (atoms[ib].atom.getAtomIndex() == 20) + //System.out.println(ib + " testing oop theta cosTheta=" + (theta * 180/Math.PI) + " " + cosTheta + " energy=" + energy + " koop=" + koop + " a0 a1 a2="+ a0 + " " + a1 + " "+ a2); + if (gradients) { // somehow we already get the -1 from the OOPDeriv -- so we'll omit it here // not checked in Java Modified: trunk/Jmol/src/org/jmol/minimize/forcefield/ForceField.java =================================================================== --- trunk/Jmol/src/org/jmol/minimize/forcefield/ForceField.java 2008-04-05 18:25:54 UTC (rev 9249) +++ trunk/Jmol/src/org/jmol/minimize/forcefield/ForceField.java 2008-04-08 12:28:41 UTC (rev 9250) @@ -28,6 +28,7 @@ import java.util.Hashtable; import java.util.Vector; +//import javax.vecmath.Point3f; import javax.vecmath.Vector3d; import org.jmol.minimize.MinAtom; @@ -109,11 +110,6 @@ ////////////// calculation ///////////////// - void steepestDescent(int steps, double econv) { - steepestDescentInitialize(steps, econv); - steepestDescentTakeNSteps(steps); - } - public void steepestDescentInitialize(int stepMax, double criterion) { this.stepMax = stepMax;//1000 this.criterion = criterion; //1e-3 @@ -126,6 +122,8 @@ Logger.info(s); if (calc.loggingEnabled) calc.appendLogData(calc.getAtomList("S T E E P E S T D E S C E N T")); + dE = 0; + calc.setPreliminary(stepMax > 0); e0 = energyFull(false, false); s = TextFormat.sprintf(" Initial E = %10.3f " + calc.getUnit() + " criterion = %8.6f max steps = " + stepMax, null, new float[] { (float) e0, (float) criterion }, null); @@ -142,7 +140,7 @@ public boolean steepestDescentTakeNSteps(int n) { if (stepMax == 0) return false; - + boolean isPreliminary = true; for (int iStep = 1; iStep <= n; iStep++) { currentStep++; calc.setSilent(true); @@ -157,7 +155,6 @@ double e1 = energyFull(false, false); dE = e1 - e0; - boolean done = Util.isNear(e1, e0, criterion); if (done || currentStep % 10 == 0 || stepMax <= currentStep) { @@ -168,7 +165,6 @@ calc.appendLogData(s); } e0 = e1; - if (done || stepMax <= currentStep) { if (calc.loggingEnabled) calc.appendLogData(calc.getAtomList("F I N A L G E O M E T R Y")); @@ -183,7 +179,10 @@ } return false; } - + if (isPreliminary && getNormalizedDE() >= 2) { + calc.setPreliminary(isPreliminary = false); + e0 = energyFull(false, false); + } } return true; // continue } @@ -219,9 +218,8 @@ atom.force[0] = -getDE(atom, terms, 0, delta); atom.force[1] = -getDE(atom, terms, 1, delta); atom.force[2] = -getDE(atom, terms, 2, delta); - //if (atom.atom.getAtomIndex() == 17) { - //System.out.println(" atom + " + atom.atom.getAtomIndex() + " " + atom.gradient[0] + " " + atom.gradient[1] + " " + atom.gradient[2] ); - //} + //if (atom.atom.getAtomIndex() == 2) + //System.out.println(" atom + " + atom.atom.getAtomIndex() + " force=" + atom.force[0] + " " + atom.force[1] + " " + atom.force[2] ); return; } @@ -230,9 +228,8 @@ atom.coord[i] += delta; double e = getEnergy(terms, false); atom.coord[i] -= delta; - //if (atom.atom.getAtomIndex() == 17) { - //System.out.println ("atom 17: " + atom.atom.getInfo() + " " + i + " " + (e - e0)); - //} + //if (atom.atom.getAtomIndex() == 2) + //System.out.println ((i==0 ? "\n" : "") + "atom 3: " + atom.atom.getInfo() + " " + i + " " + (e - e0) + " " + (Point3f)atom.atom + "{" + atom.coord[0] + " " + atom.coord[1] + " " + atom.coord[2] + "} delta=" + delta); return (e - e0) / delta; } @@ -270,8 +267,8 @@ if (gradients) clearForces(); - energy = energyBond(gradients) - + energyAngle(gradients) + energy = energyBond(gradients) + + energyAngle(gradients) + energyTorsion(gradients) + energyOOP(gradients) + energyVDW(gradients) @@ -337,8 +334,9 @@ private void linearSearch() { double alpha = 0.0; // Scale factor along direction vector - double step = 0.2; + double step = 0.23; double trustRadius = 0.3; // don't move further than 0.3 Angstroms + double trustRadius2 = trustRadius * trustRadius; double e1 = energyFull(false, true); @@ -348,12 +346,30 @@ if (bsFixed == null || !bsFixed.get(i)) { double[] force = atoms[i].force; double[] coord = atoms[i].coord; - for (int j = 0; j < 3; ++j) { + double f2 = (force[0] * force[0] + force[1] * force[1] + force[2] * force[2]); + if (f2 > trustRadius2 / step / step) { + f2 = trustRadius / Math.sqrt(f2) / step; + //if (i == 2) + //System.out.println("atom 3: force/coord " + force[0] + " " + force[1] + " " + force[2] + "/" + coord[0] + " " + coord[1] + " " + coord[2] + " " + f2); + force[0] *= f2; + force[1] *= f2; + force[2] *= f2; + } +/* if (i == 2) + f.println("#atom 3; draw " + + "{" + coord[0] + " " + coord[1] + " " + coord[2] + "} " + + "{" + + (coord[0] + force[0]) + " " + + (coord[1] + force[1]) + " " + + (coord[2] + force[2]) + +"}" + ); +*/ for (int j = 0; j < 3; ++j) { if (Util.isFinite(force[j])) { double tempStep = force[j] * step; if (tempStep > trustRadius) coord[j] += trustRadius; - else if (tempStep < -1.0 * trustRadius) + else if (tempStep < -trustRadius) coord[j] -= trustRadius; else coord[j] += tempStep; @@ -363,13 +379,12 @@ double e2 = energyFull(false, true); - //System.out.println("linearSearch e2=" + e2 + " e1=" + e1 + " step=" + step); - + //System.out.println("step is " + step + " " + (e2 < e1) + " " + e1 + " " + e2); if (Util.isNear(e2, e1, 1.0e-3)) break; if (e2 > e1) { step *= 0.1; - restoreCoordinates(); + restoreCoordinates(); } else if (e2 < e1) { e1 = e2; alpha += step; @@ -378,7 +393,7 @@ step = 1.0; } } - + //System.out.println("alpha = " + alpha); } private void saveCoordinates() { @@ -431,4 +446,8 @@ return calc.getLogData(); } + double getNormalizedDE() { + return Math.abs(dE/criterion); + } + } Modified: trunk/Jmol/src/org/jmol/minimize/forcefield/ForceFieldUFF.java =================================================================== --- trunk/Jmol/src/org/jmol/minimize/forcefield/ForceFieldUFF.java 2008-04-05 18:25:54 UTC (rev 9249) +++ trunk/Jmol/src/org/jmol/minimize/forcefield/ForceFieldUFF.java 2008-04-08 12:28:41 UTC (rev 9250) @@ -41,7 +41,7 @@ public void setModel(Minimizer m) { super.setModel(m); - calc = new CalculationsUFF(m.minAtoms, m.minBonds, + calc = new CalculationsUFF(this, m.minAtoms, m.minBonds, m.angles, m.torsions, m.partialCharges, m.constraints); } Modified: trunk/Jmol/src/org/jmol/modelset/BondCollection.java =================================================================== --- trunk/Jmol/src/org/jmol/modelset/BondCollection.java 2008-04-05 18:25:54 UTC (rev 9249) +++ trunk/Jmol/src/org/jmol/modelset/BondCollection.java 2008-04-08 12:28:41 UTC (rev 9250) @@ -29,6 +29,7 @@ import org.jmol.bspt.CubeIterator; import org.jmol.util.ArrayUtil; +import org.jmol.util.BitSetUtil; import org.jmol.util.Logger; import org.jmol.viewer.JmolConstants; import org.jmol.viewer.Token; @@ -144,9 +145,10 @@ i = atom.getBond(atomOther).index; } else { if (bondCount == bonds.length) - bonds = (Bond[]) ArrayUtil - .setLength(bonds, bondCount + bondGrowthIncrement); - if (order < 0 && (order & JmolConstants.BOND_HYDROGEN_MASK) == 0) + bonds = (Bond[]) ArrayUtil.setLength(bonds, bondCount + + bondGrowthIncrement); + if (order == JmolConstants.BOND_ORDER_NULL + || order == JmolConstants.BOND_ORDER_ANY) order = 1; i = setBond(bondCount++, bondMutually(atom, atomOther, order, mad)).index; } @@ -333,7 +335,6 @@ } protected void deleteBonds(BitSet bs) { - bsAromatic = new BitSet(); int iDst = 0; for (int iSrc = 0; iSrc < bondCount; ++iSrc) { Bond bond = bonds[iSrc]; @@ -345,7 +346,12 @@ for (int i = bondCount; --i >= iDst;) bonds[i] = null; bondCount = iDst; - viewer.setShapeProperty(JmolConstants.SHAPE_STICKS, "delete", bs); + BitSet[] sets = (BitSet[]) viewer.getShapeProperty( + JmolConstants.SHAPE_STICKS, "sets"); + for (int i = 0; i < sets.length; i++) + BitSetUtil.deleteBits(sets[i], bs); + BitSetUtil.deleteBits(bsPseudoHBonds, bs); + BitSetUtil.deleteBits(bsAromatic, bs); } private float hbondMax = 3.25f; @@ -373,12 +379,13 @@ || iter.foundDistance2() < hbondMin2 || atom.isBonded(atomNear)) continue; - getOrAddBond(atom, atomNear, JmolConstants.BOND_H_REGULAR, (short) 1, - bsPseudoHBonds); + getOrAddBond(atom, atomNear, JmolConstants.BOND_H_REGULAR, + (short) 1, bsPseudoHBonds); nNew++; } iter.release(); } + viewer.setShapeSize(JmolConstants.SHAPE_STICKS, Integer.MIN_VALUE, bsPseudoHBonds); if (showRebondTimes && Logger.debugging) { long timeEnd = System.currentTimeMillis(); Logger.debug("Time to hbond=" + (timeEnd - timeBegin)); Modified: trunk/Jmol/src/org/jmol/modelset/ModelCollection.java =================================================================== --- trunk/Jmol/src/org/jmol/modelset/ModelCollection.java 2008-04-05 18:25:54 UTC (rev 9249) +++ trunk/Jmol/src/org/jmol/modelset/ModelCollection.java 2008-04-08 12:28:41 UTC (rev 9250) @@ -1502,7 +1502,7 @@ Bond bond = bonds[i]; if (baseIndex >= 0 && models[bond.atom1.modelIndex].trajectoryBaseIndex != baseIndex - || (bond.order & JmolConstants.BOND_HBOND_CALC) == 0) + || (bond.order & JmolConstants.BOND_H_CALC_MASK) == 0) continue; if (bsAtoms != null && !bsAtoms.get(bond.atom1.atomIndex)) { models[baseIndex].hasCalculatedHBonds = true; @@ -1964,13 +1964,17 @@ nModified++; } } else { - bondAtoms(atomA, atomB, order, mad, bsBonds); + bsBonds.set( + bondAtoms(atomA, atomB, order, + mad, bsBonds).index); nNew++; } } } if (autoAromatize) assignAromaticBonds(true, bsBonds); + if (!identifyOnly) + viewer.setShapeSize(JmolConstants.SHAPE_STICKS, Integer.MIN_VALUE, bsBonds); return new int[] { nNew, nModified }; } Modified: trunk/Jmol/src/org/jmol/modelset/ModelSet.java =================================================================== --- trunk/Jmol/src/org/jmol/modelset/ModelSet.java 2008-04-05 18:25:54 UTC (rev 9249) +++ trunk/Jmol/src/org/jmol/modelset/ModelSet.java 2008-04-08 12:28:41 UTC (rev 9250) @@ -474,7 +474,7 @@ public int[] makeConnections(float minDistance, float maxDistance, short order, int connectOperation, BitSet bsA, BitSet bsB, BitSet bsBonds, boolean isBonds) { - if (connectOperation != JmolConstants.CONNECT_IDENTIFY_ONLY) { + if (connectOperation == JmolConstants.CONNECT_DELETE_BONDS) { String stateScript = "connect "; if (minDistance != JmolConstants.DEFAULT_MIN_CONNECT_DISTANCE) stateScript += minDistance + " "; @@ -482,9 +482,7 @@ stateScript += maxDistance + " "; addStateScript(stateScript, (isBonds? bsA : null), (isBonds? null : bsA), (isBonds ? null : bsB), - (connectOperation == JmolConstants.CONNECT_DELETE_BONDS ? "" : - JmolConstants.getBondOrderNameFromOrder(order) + " ") - + JmolConstants.connectOperationName(connectOperation) + ";", false); + " delete;", false); } return super.makeConnections(minDistance, maxDistance, order, connectOperation, bsA, bsB, bsBonds, isBonds); Modified: trunk/Jmol/src/org/jmol/modelsetbio/AminoPolymer.java =================================================================== --- trunk/Jmol/src/org/jmol/modelsetbio/AminoPolymer.java 2008-04-05 18:25:54 UTC (rev 9249) +++ trunk/Jmol/src/org/jmol/modelsetbio/AminoPolymer.java 2008-04-08 12:28:41 UTC (rev 9250) @@ -217,7 +217,7 @@ private void createResidueHydrogenBond(int indexAminoGroup, int indexCarbonylGroup, BitSet bsA, BitSet bsB) { - short order = JmolConstants.BOND_HBOND_CALC; + short order; int aminoBackboneHbondOffset = indexAminoGroup - indexCarbonylGroup; /* if (debugHbonds) Logger.debug("aminoBackboneHbondOffset=" + @@ -229,25 +229,25 @@ */ switch (aminoBackboneHbondOffset) { case 2: - order |= JmolConstants.BOND_H_PLUS_2; + order = JmolConstants.BOND_H_PLUS_2; break; case 3: - order |= JmolConstants.BOND_H_PLUS_3; + order = JmolConstants.BOND_H_PLUS_3; break; case 4: - order |= JmolConstants.BOND_H_PLUS_4; + order = JmolConstants.BOND_H_PLUS_4; break; case 5: - order |= JmolConstants.BOND_H_PLUS_5; + order = JmolConstants.BOND_H_PLUS_5; break; case -3: - order |= JmolConstants.BOND_H_MINUS_3; + order = JmolConstants.BOND_H_MINUS_3; break; case -4: - order |= JmolConstants.BOND_H_MINUS_4; + order = JmolConstants.BOND_H_MINUS_4; break; default: - order |= JmolConstants.BOND_H_REGULAR; + order = JmolConstants.BOND_H_CALC; } AminoMonomer donor = (AminoMonomer)monomers[indexAminoGroup]; Atom nitrogen = donor.getNitrogenAtom(); Modified: trunk/Jmol/src/org/jmol/modelsetbio/NucleicPolymer.java =================================================================== --- trunk/Jmol/src/org/jmol/modelsetbio/NucleicPolymer.java 2008-04-05 18:25:54 UTC (rev 9249) +++ trunk/Jmol/src/org/jmol/modelsetbio/NucleicPolymer.java 2008-04-08 12:28:41 UTC (rev 9250) @@ -51,7 +51,7 @@ } } - private final static short HBOND_MASK = JmolConstants.BOND_H_NUCLEOTIDE | JmolConstants.BOND_HBOND_CALC; + private final static short HBOND_MASK = JmolConstants.BOND_H_NUCLEOTIDE; void lookForHbonds(NucleicPolymer other, BitSet bsA, BitSet bsB) { //Logger.debug("NucleicPolymer.lookForHbonds()"); Modified: trunk/Jmol/src/org/jmol/shape/Sticks.java =================================================================== --- trunk/Jmol/src/org/jmol/shape/Sticks.java 2008-04-05 18:25:54 UTC (rev 9249) +++ trunk/Jmol/src/org/jmol/shape/Sticks.java 2008-04-08 12:28:41 UTC (rev 9250) @@ -41,6 +41,7 @@ short myMask; boolean reportAll; + BitSet bsOrderSet; BitSet bsSizeSet; BitSet bsColixSet; @@ -156,14 +157,6 @@ return; } - if ("delete" == propertyName) { - BitSet bs = (BitSet) value; - BitSetUtil.deleteBits(bsColixSet, bs); - BitSetUtil.deleteBits(bsSizeSet, bs); - BitSetUtil.deleteBits(bsOrderSet, bs); - return; - } - if ("deleteModelAtoms" == propertyName) { return; } @@ -174,6 +167,8 @@ public Object getProperty(String property, int index) { if (property.equals("selectionState")) return (selectedBonds != null ? "select BONDS " + Escape.escape(selectedBonds) + "\n":""); + if (property.equals("sets")) + return new BitSet[] { bsOrderSet, bsSizeSet, bsColixSet }; return null; } @@ -192,6 +187,8 @@ public String getShapeState() { Hashtable temp = new Hashtable(); + Hashtable temp2 = new Hashtable(); + boolean haveTainted = false; Bond[] bonds = modelSet.getBonds(); for (int i = modelSet.getBondCount(); --i >= 0;) { Bond bond = bonds[i]; @@ -205,13 +202,15 @@ if (bsColixSet != null && bsColixSet.get(i)) { short colix = bond.getColix(); if ((colix & Graphics3D.OPAQUE_MASK) == Graphics3D.USE_PALETTE) - setStateInfo(temp, i, getColorCommand("bonds", JmolConstants.PALETTE_CPK, colix)); + setStateInfo(temp, i, getColorCommand("bonds", + JmolConstants.PALETTE_CPK, colix)); else setStateInfo(temp, i, getColorCommand("bonds", colix)); - } } - - return getShapeCommands(temp, null, -1, "select BONDS") + "\n"; + + return getShapeCommands(temp, null, -1, "select BONDS") + "\n" + + (haveTainted ? getShapeCommands(temp2, null, -1, "select BONDS") + "\n" + : ""); } } Modified: trunk/Jmol/src/org/jmol/shapespecial/Draw.java =================================================================== --- trunk/Jmol/src/org/jmol/shapespecial/Draw.java 2008-04-05 18:25:54 UTC (rev 9249) +++ trunk/Jmol/src/org/jmol/shapespecial/Draw.java 2008-04-08 12:28:41 UTC (rev 9250) @@ -110,7 +110,7 @@ newScale = 0; ncoord = nbitsets = nidentifiers = 0; isFixed = isReversed = isRotated45 = isCrossed = false; - isCurve = isArrow = isPlane = isVertices = isPerpendicular = isVector = false; + isCurve = isArrow = isPlane = isVertices = isPerpendicular = isVector = isCircle = false; isVisible = isValid = true; length = Float.MAX_VALUE; diameter = 0; Modified: trunk/Jmol/src/org/jmol/shapespecial/DrawRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/shapespecial/DrawRenderer.java 2008-04-05 18:25:54 UTC (rev 9249) +++ trunk/Jmol/src/org/jmol/shapespecial/DrawRenderer.java 2008-04-08 12:28:41 UTC (rev 9250) @@ -78,6 +78,7 @@ switch (drawType) { default: super.render2(); + break; case JmolConstants.DRAW_CIRCLE: case JmolConstants.DRAW_CIRCULARPLANE: viewer.transformPoint(vertices[0], pt1i); Modified: trunk/Jmol/src/org/jmol/viewer/Compiler.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Compiler.java 2008-04-05 18:25:54 UTC (rev 9249) +++ trunk/Jmol/src/org/jmol/viewer/Compiler.java 2008-04-08 12:28:41 UTC (rev 9250) @@ -2427,7 +2427,7 @@ private final static String[] errors = { GT._("bad argument count"), // 0 GT._("invalid context for {0}"), // 1 - GT._("commandExpected"), // 2 + GT._("command expected"), // 2 GT._("comma or right parenthesis expected"), // 3 GT._("comparison operator expected"), // 4 GT._("{ number number number } expected"), // 5 Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-04-05 18:25:54 UTC (rev 9249) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-04-08 12:28:41 UTC (rev 9250) @@ -3250,7 +3250,6 @@ float radius = Float.NaN; int color = Integer.MIN_VALUE; int distanceCount = 0; - int atomSetCount = 0; short bondOrder = JmolConstants.BOND_ORDER_NULL; short bo; int operation = JmolConstants.CONNECT_MODIFY_OR_CREATE; @@ -3308,21 +3307,11 @@ break; case Token.bitset: case Token.expressionBegin: - if (++nAtomSets > 2 || isBonds && nAtomSets > 1) + if (nAtomSets > 2 || isBonds && nAtomSets > 0) error(ERROR_badArgumentCount); if (haveType || isColorOrRadius) error(ERROR_invalidParameterOrder); - atomSets[atomSetCount++] = expression(i); - if (atomSetCount == 2) { - int pt = iToken; - for (int j = i; j < pt; j++) - if (tokAt(j) == Token.identifier - && parameterAsString(j).equals("_1")) { - expression2 = i; - break; - } - iToken = pt; - } + atomSets[nAtomSets++] = expression(i); isBonds = isBondSet; i = iToken; // the for loop will increment i break; @@ -4083,7 +4072,7 @@ strLabel = null; } viewer.loadShape(JmolConstants.SHAPE_LABELS); - viewer.setLabel(strLabel); + viewer.setLabel(strLabel); } private void hover() throws ScriptException { Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-04-05 18:25:54 UTC (rev 9249) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-04-08 12:28:41 UTC (rev 9250) @@ -1,8 +1,14 @@ # Developers: to add a description of changes you have made, # add it on line starting with # below the "version=..." line -version=11.5.26_dev +version=11.5.26 +# bug fix: draw adds extra circle in 11.5.25 +# bug fix: minimization out-of-plane energy calculation error +# bug fix: better initial minimization parameters +# bug fix: (applet) script termination callback should not be sent to message queue +# bug fix: hover appears when a load script leaves an atom very close to (0,0) in the window + # ----------------------------------------------------------------------------- #version=11.5.25 Modified: trunk/Jmol/src/org/jmol/viewer/JmolConstants.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/JmolConstants.java 2008-04-05 18:25:54 UTC (rev 9249) +++ trunk/Jmol/src/org/jmol/viewer/JmolConstants.java 2008-04-08 12:28:41 UTC (rev 9250) @@ -271,7 +271,7 @@ * */ - // | calculated 1 << 15 + // | tainted 1 << 15 NOT IMPLEMENTED // ||| | Hydrogen bond 0x3800 F << 11 // |Stereo 0x400 1 << 10 // |Aromatic 0x200 1 << 9 @@ -284,29 +284,32 @@ public final static short BOND_ORDER_ANY = -2; public final static short BOND_ORDER_NULL = -1; - public final static short BOND_HBOND_SHIFT = 11; - public final static short BOND_HBOND_CALC = (short) (1 << 15); + public final static short BOND_HBOND_SHIFT = 11; + public final static short BOND_TAINTED = 0;//(short) (1 << 15); public final static short BOND_HYDROGEN_MASK = 0xF << 11; public final static short BOND_H_REGULAR = 1 << 11; - public final static short BOND_H_PLUS_2 = 2 << 11; - public final static short BOND_H_PLUS_3 = 3 << 11; - public final static short BOND_H_PLUS_4 = 4 << 11; - public final static short BOND_H_PLUS_5 = 5 << 11; - public final static short BOND_H_MINUS_3 = 6 << 11; - public final static short BOND_H_MINUS_4 = 7 << 11; - public final static short BOND_H_NUCLEOTIDE = 8 << 11; + public final static short BOND_H_CALC_MASK = 0xE << 11; // excludes regular + public final static short BOND_H_CALC = 2 << 11; + public final static short BOND_H_PLUS_2 = 3 << 11; + public final static short BOND_H_PLUS_3 = 4 << 11; + public final static short BOND_H_PLUS_4 = 5 << 11; + public final static short BOND_H_PLUS_5 = 6 << 11; + public final static short BOND_H_MINUS_3 = 7 << 11; + public final static short BOND_H_MINUS_4 = 8 << 11; + public final static short BOND_H_NUCLEOTIDE = 9 << 11; public final static int[] argbsHbondType = { - 0xFFFF69B4, // unused - pink - 0xFFFFFF00, // regular yellow - 0xFFFFFFFF, // +2 white - 0xFFFF00FF, // +3 magenta - 0xFFFF0000, // +4 red - 0xFFFFA500, // +5 orange - 0xFF00FFFF, // -3 cyan - 0xFF00FF00, // -4 green - 0xFFFF8080, // nucleotide + 0xFFFF69B4, // 0 unused - pink + 0xFFFFFF00, // 1 regular yellow + 0xFFFFFF00, // 2 calc -- unspecified; yellow + 0xFFFFFFFF, // 3 +2 white + 0xFFFF00FF, // 4 +3 magenta + 0xFFFF0000, // 5 +4 red + 0xFFFFA500, // 6 +5 orange + 0xFF00FFFF, // 7 -3 cyan + 0xFF00FF00, // 8 -4 green + 0xFFFF8080, // 9 nucleotide }; public static int getArgbHbondType(short order) { @@ -406,7 +409,6 @@ } public final static String getBondOrderNameFromOrder(short order) { - switch (order) { case BOND_ORDER_ANY: case BOND_ORDER_NULL: Modified: trunk/Jmol/src/org/jmol/viewer/MouseManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/MouseManager.java 2008-04-05 18:25:54 UTC (rev 9249) +++ trunk/Jmol/src/org/jmol/viewer/MouseManager.java 2008-04-08 12:28:41 UTC (rev 9250) @@ -23,7 +23,6 @@ */ package org.jmol.viewer; - import java.awt.Rectangle; import java.awt.Event; @@ -39,9 +38,10 @@ Thread hoverWatcherThread; int previousDragX, previousDragY; - int xCurrent, yCurrent; - long timeCurrent; - + int xCurrent = -1000; + int yCurrent = -1000; + long timeCurrent = -1; + boolean measurementMode = false; boolean drawMode = false; boolean measuresEnabled = true; @@ -59,28 +59,33 @@ if (display != null) display.addKeyListener(this); } - + void clear() { - startHoverWatcher(false); + startHoverWatcher(false); } - + synchronized void startHoverWatcher(boolean isStart) { if (isStart) { if (hoverWatcherThread != null) return; + timeCurrent = -1; hoverWatcherThread = new Thread(new HoverWatcher()); hoverWatcherThread.start(); } else { if (hoverWatcherThread == null) return; + timeCurrent = -1; hoverWatcherThread.interrupt(); hoverWatcherThread = null; } } - void removeMouseListeners11() {} - void removeMouseListeners14() {} + void removeMouseListeners11() { + } + void removeMouseListeners14() { + } + void setModeMouse(int modeMouse) { if (modeMouse == JmolConstants.MOUSE_NONE) { startHoverWatcher(false); @@ -102,7 +107,8 @@ int i = ke.getKeyCode(); int m = ke.getModifiers(); if (viewer.getBooleanProperty("showKeyStrokes", false)) - viewer.script("!set echo bottom left;!echo " + (i == 0 ? "" : i + " " + m)); + viewer.script("!set echo bottom left;!echo " + + (i == 0 ? "" : i + " " + m)); switch (i) { case KeyEvent.VK_UP: case KeyEvent.VK_DOWN: @@ -112,7 +118,7 @@ break; } } - + public void keyReleased(KeyEvent ke) { if (!viewer.getNavigationMode()) return; @@ -128,7 +134,7 @@ break; } } - + protected void processKeyEvent(KeyEvent ke) { //System.out.println("processKeyEvent"+ke); } @@ -157,12 +163,12 @@ } final static long MAX_DOUBLE_CLICK_MILLIS = 700; - + final static int LEFT = 16; - final static int MIDDLE = Event.ALT_MASK; // 8 note that MIDDLE - final static int ALT = Event.ALT_MASK; // 8 and ALT are the same - final static int RIGHT = Event.META_MASK; // 4 - final static int CTRL = Event.CTRL_MASK; // 2 + final static int MIDDLE = Event.ALT_MASK; // 8 note that MIDDLE + final static int ALT = Event.ALT_MASK; // 8 and ALT are the same + final static int RIGHT = Event.META_MASK; // 4 + final static int CTRL = Event.CTRL_MASK; // 2 public final static int SHIFT = Event.SHIFT_MASK; // 1 final static int MIDDLE_RIGHT = MIDDLE | RIGHT; final static int LEFT_MIDDLE_RIGHT = LEFT | MIDDLE | RIGHT; @@ -181,8 +187,8 @@ final static int SHIFT_RIGHT = SHIFT | RIGHT; final static int CTRL_SHIFT_RIGHT = CTRL | SHIFT | RIGHT; final static int CTRL_ALT_SHIFT_RIGHT = CTRL | ALT | SHIFT | RIGHT; - public final static int BUTTON_MODIFIER_MASK = - CTRL | ALT | SHIFT | LEFT | MIDDLE | RIGHT; + public final static int BUTTON_MODIFIER_MASK = CTRL | ALT | SHIFT | LEFT + | MIDDLE | RIGHT; int previousPressedX, previousPressedY; int previousPressedModifiers; @@ -192,9 +198,9 @@ void mousePressed(long time, int x, int y, int modifiers, boolean isPopupTrigger) { - if (previousPressedX == x && previousPressedY == y && - previousPressedModifiers == modifiers && - (time - previousPressedTime) < MAX_DOUBLE_CLICK_MILLIS) { + if (previousPressedX == x && previousPressedY == y + && previousPressedModifiers == modifiers + && (time - previousPressedTime) < MAX_DOUBLE_CLICK_MILLIS) { ++pressedCount; } else { pressedCount = 1; @@ -207,23 +213,23 @@ previousPressedTime = timeCurrent = time; if (logMouseEvents && Logger.debugging) - Logger.debug("mousePressed("+x+","+y+","+modifiers+ - " isPopupTrigger=" + isPopupTrigger+")"); + Logger.debug("mousePressed(" + x + "," + y + "," + modifiers + + " isPopupTrigger=" + isPopupTrigger + ")"); //viewer.setStatusUserAction("mousePressed: " + modifiers); - + switch (modifiers & BUTTON_MODIFIER_MASK) { - /**************************************************************** - * mth 2004 03 17 - * this isPopupTrigger stuff just doesn't work reliably for me - * and I don't have a Mac to test out CTRL-CLICK behavior - * Therefore ... we are going to implement both gestures - * to bring up the popup menu - * The fact that we are using CTRL_LEFT may - * interfere with other platforms if/when we - * need to support multiple selections, but we will - * cross that bridge when we come to it - ****************************************************************/ + /**************************************************************** + * mth 2004 03 17 + * this isPopupTrigger stuff just doesn't work reliably for me + * and I don't have a Mac to test out CTRL-CLICK behavior + * Therefore ... we are going to implement both gestures + * to bring up the popup menu + * The fact that we are using CTRL_LEFT may + * interfere with other platforms if/when we + * need to support multiple selections, but we will + * cross that bridge when we come to it + ****************************************************************/ case CTRL_LEFT: // on MacOSX this brings up popup case RIGHT: // with multi-button mice, this will too viewer.popupMenu(x, y); @@ -233,27 +239,30 @@ void mouseEntered(long time, int x, int y) { if (logMouseEvents && Logger.debugging) - Logger.debug("mouseEntered("+x+","+y+")"); + Logger.debug("mouseEntered(" + x + "," + y + ")"); hoverOff(); timeCurrent = time; - xCurrent = x; yCurrent = y; + xCurrent = x; + yCurrent = y; } void mouseExited(long time, int x, int y) { if (logMouseEvents && Logger.debugging) - Logger.debug("mouseExited("+x+","+y+")"); + Logger.debug("mouseExited(" + x + "," + y + ")"); hoverOff(); timeCurrent = time; - xCurrent = x; yCurrent = y; + xCurrent = x; + yCurrent = y; exitMeasurementMode(); } void mouseReleased(long time, int x, int y, int modifiers) { hoverOff(); timeCurrent = time; - xCurrent = x; yCurrent = y; + xCurrent = x; + yCurrent = y; if (logMouseEvents && Logger.debugging) - Logger.debug("mouseReleased("+x+","+y+","+modifiers+")"); + Logger.debug("mouseReleased(" + x + "," + y + "," + modifiers + ")"); viewer.setInMotion(false); viewer.setCursor(Viewer.CURSOR_DEFAULT); } @@ -286,37 +295,37 @@ } exitMeasurementMode(); } - + void mouseClicked(long time, int x, int y, int modifiers, int clickCount) { // clickCount is not reliable on some platforms // so we will just deal with it ourselves //viewer.setStatusUserAction("mouseClicked: " + modifiers); setMouseMode(); clickCount = 1; - if (previousClickX == x && previousClickY == y && - previousClickModifiers == modifiers && - (time - previousClickTime) < MAX_DOUBLE_CLICK_MILLIS) { + if (previousClickX == x && previousClickY == y + && previousClickModifiers == modifiers + && (time - previousClickTime) < MAX_DOUBLE_CLICK_MILLIS) { clickCount = previousClickCount + 1; } if (!viewer.getAwtComponent().hasFocus()) viewer.getAwtComponent().requestFocusInWindow(); hoverOff(); - xCurrent = previousClickX = x; yCurrent = previousClickY = y; + xCurrent = previousClickX = x; + yCurrent = previousClickY = y; previousClickModifiers = modifiers; previousClickCount = clickCount; timeCurrent = previousClickTime = time; if (logMouseEvents && Logger.debugging) - Logger.debug("mouseClicked("+x+","+y+","+modifiers+ - ",clickCount="+clickCount+ - ",time=" + (time - previousClickTime) + - ")"); - if (! viewer.haveModelSet()) + Logger.debug("mouseClicked(" + x + "," + y + "," + modifiers + + ",clickCount=" + clickCount + ",time=" + (time - previousClickTime) + + ")"); + if (!viewer.haveModelSet()) return; int nearestAtomIndex = (drawMode ? -1 : viewer.findNearestAtomIndex(x, y)); if (nearestAtomIndex >= 0 && !viewer.isInSelectionSubset(nearestAtomIndex)) - nearestAtomIndex = -1; + nearestAtomIndex = -1; if (clickCount == 1) mouseSingleClick(x, y, modifiers, nearestAtomIndex); else if (clickCount == 2) @@ -381,12 +390,13 @@ void mouseDragged(long time, int x, int y, int modifiers) { setMouseMode(); if (logMouseEvents && Logger.debugging) - Logger.debug("mouseDragged("+x+","+y+","+modifiers + ")"); + Logger.debug("mouseDragged(" + x + "," + y + "," + modifiers + ")"); int deltaX = x - previousDragX; int deltaY = y - previousDragY; hoverOff(); timeCurrent = time; - xCurrent = previousDragX = x; yCurrent = previousDragY = y; + xCurrent = previousDragX = x; + yCurrent = previousDragY = y; if (!viewer.getInMotion()) viewer.setCursor(Viewer.CURSOR_MOVE); viewer.setInMotion(true); @@ -423,9 +433,11 @@ viewer.rotateZBy(-deltaX); break; case SHIFT_RIGHT: // the one-button Mac folks won't get this gesture - viewer.rotateZBy((Math.abs(deltaY) > 5 * Math.abs(deltaX) - ? (xCurrent < viewer.getScreenWidth() / 2 ? deltaY : -deltaY) : 0) - + (yCurrent > viewer.getScreenHeight() / 2 ? deltaX : -deltaX)); + viewer + .rotateZBy((Math.abs(deltaY) > 5 * Math.abs(deltaX) ? (xCurrent < viewer + .getScreenWidth() / 2 ? deltaY : -deltaY) + : 0) + + (yCurrent > viewer.getScreenHeight() / 2 ? deltaX : -deltaX)); break; case CTRL_ALT_LEFT: /* @@ -469,31 +481,33 @@ void mouseMoved(long time, int x, int y, int modifiers) { /* - if (logMouseEvents) - Logger.debug("mouseMoved("+x+","+y+","+modifiers"+)"); - */ + if (logMouseEvents) + Logger.debug("mouseMoved("+x+","+y+","+modifiers"+)"); + */ hoverOff(); if (hoverWatcherThread == null) startHoverWatcher(true); timeCurrent = mouseMovedTime = time; - mouseMovedX = xCurrent = x; mouseMovedY = yCurrent = y; + mouseMovedX = xCurrent = x; + mouseMovedY = yCurrent = y; if (measurementMode || hoverActive) { int atomIndex = viewer.findNearestAtomIndex(x, y); - if (!measurementMode && atomIndex >= 0 && viewer.isInSelectionSubset(atomIndex)) - atomIndex = -1; + if (!measurementMode && atomIndex >= 0 + && viewer.isInSelectionSubset(atomIndex)) + atomIndex = -1; setAttractiveMeasurementTarget(atomIndex); } } final static float wheelClickFractionUp = 1.15f; - final static float wheelClickFractionDown = 1/wheelClickFractionUp; + final static float wheelClickFractionDown = 1 / wheelClickFractionUp; void mouseWheel(long time, int rotation, int modifiers) { if (!viewer.getAwtComponent().hasFocus()) - return; + return; // sun bug? noted by Charles Xie that wheeling on a Java page // effected inappropriate wheeling on this Java component - + hoverOff(); timeCurrent = time; //Logger.debug("mouseWheel time:" + time + " rotation:" + rotation + " modifiers:" + modifiers); @@ -511,7 +525,6 @@ viewer.zoomByFactor(zoomFactor); } } - abstract boolean handleOldJvm10Event(Event e); @@ -525,14 +538,16 @@ // the attractive target may be -1 void setAttractiveMeasurementTarget(int atomIndex) { - if (measurementCountPlusIndices[0] == measurementCount + 1 && - measurementCountPlusIndices[measurementCount + 1] == atomIndex) { - viewer.refresh(0, "MouseManager:setAttractiveMeasurementTarget("+atomIndex+")"); + if (measurementCountPlusIndices[0] == measurementCount + 1 + && measurementCountPlusIndices[measurementCount + 1] == atomIndex) { + viewer.refresh(0, "MouseManager:setAttractiveMeasurementTarget(" + + atomIndex + ")"); return; } for (int i = measurementCount; i > 0; --i) if (measurementCountPlusIndices[i] == atomIndex) { - viewer.refresh(0, "MouseManager:setAttractiveMeasurementTarget("+atomIndex+")"); + viewer.refresh(0, "MouseManager:setAttractiveMeasurementTarget(" + + atomIndex + ")"); return; } int attractiveCount = measurementCount + 1; @@ -546,7 +561,7 @@ exitMeasurementMode(); return; } - for (int i = measurementCount; --i >= 0; ) + for (int i = measurementCount; --i >= 0;) if (measurementCountPlusIndices[i + 1] == atomIndex) { // exitMeasurementMode(); return; @@ -579,7 +594,8 @@ void toggleMeasurement() { if (measurementCount >= 2 && measurementCount <= 4) { measurementCountPlusIndices[0] = measurementCount; - viewer.script("!" + Measurement.getMeasurementScript(measurementCountPlusIndices)); + viewer.script("!" + + Measurement.getMeasurementScript(measurementCountPlusIndices)); } exitMeasurementMode(); } @@ -605,7 +621,8 @@ long currentTime = System.currentTimeMillis(); int howLong = (int) (currentTime - mouseMovedTime); if (howLong > hoverDelay) { - if (hoverWatcherThread != null && !viewer.getInMotion() && !viewer.getSpinOn() + if (hoverWatcherThread != null && !viewer.getInMotion() + && !viewer.getSpinOn() && !viewer.checkObjectHovered(xCurrent, yCurrent)) { int atomIndex = viewer.findNearestAtomIndex(xCurrent, yCurrent); if (atomIndex >= 0) Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-04-05 18:25:54 UTC (rev 9249) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-04-08 12:28:41 UTC (rev 9250) @@ -3069,6 +3069,7 @@ } public void renderScreenImage(Graphics g, Dimension size, Rectangle clip) { + //System.out.println("renderScreenImage"); if (isTainted || getSlabEnabled()) setModelVisibility(); isTainted = false; @@ -3620,7 +3621,7 @@ argb | 0xFF000000)); } - Object getShapeProperty(int shapeType, String propertyName) { + public Object getShapeProperty(int shapeType, String propertyName) { return modelSet.getShapeProperty(shapeType, propertyName, Integer.MIN_VALUE); } Modified: trunk/Jmol/src/org/openscience/jmol/app/Jmol.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/Jmol.java 2008-04-05 18:25:54 UTC (rev 9249) +++ trunk/Jmol/src/org/openscience/jmol/app/Jmol.java 2008-04-08 12:28:41 UTC (rev 9250) @@ -1757,10 +1757,17 @@ case JmolConstants.CALLBACK_SCRIPT: if (scriptWindow == null) return; - if (data.length == 4) + switch (data.length) { + case 4: scriptWindow.notifyScriptTermination(); - else + break; + case 3: scriptWindow.notifyScriptStart(); + break; + case 2: + scriptWindow.sendConsoleMessage(strInfo); + break; + } break; case JmolConstants.CALLBACK_RESIZE: case JmolConstants.CALLBACK_SYNC: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |