From: <ha...@us...> - 2008-08-05 19:00:41
|
Revision: 9671 http://jmol.svn.sourceforge.net/jmol/?rev=9671&view=rev Author: hansonr Date: 2008-08-05 19:00:33 +0000 (Tue, 05 Aug 2008) Log Message: ----------- version=11.5.53_dev pointgroups # new feature: pointgroups with vibration vectors # bug fix: more testing with pointgroups Modified Paths: -------------- trunk/Jmol/src/org/jmol/modelset/ModelSet.java trunk/Jmol/src/org/jmol/shapespecial/Vectors.java Modified: trunk/Jmol/src/org/jmol/modelset/ModelSet.java =================================================================== --- trunk/Jmol/src/org/jmol/modelset/ModelSet.java 2008-08-05 18:40:14 UTC (rev 9670) +++ trunk/Jmol/src/org/jmol/modelset/ModelSet.java 2008-08-05 19:00:33 UTC (rev 9671) @@ -429,8 +429,10 @@ } private int calculatePointGroupForFirstModel(BitSet bsAtoms, boolean forceNew) { + int modelIndex = viewer.getCurrentModelIndex(); int iAtom = BitSetUtil.firstSetBit(bsAtoms); - int modelIndex = (iAtom < 0 ? -1 : atoms[iAtom].getModelIndex()); + if (modelIndex < 0 && iAtom >= 0) + modelIndex = atoms[iAtom].getModelIndex(); if (modelIndex < 0) { modelIndex = BitSetUtil.firstSetBit(viewer.getVisibleFramesBitSet()); bsAtoms = null; @@ -443,6 +445,10 @@ if (!bsAtoms.get(i)) bs.clear(i); iAtom = BitSetUtil.firstSetBit(bs); + if (iAtom < 0) { + bs = getModelAtomBitSet(modelIndex, true); + iAtom = BitSetUtil.firstSetBit(bs); + } Object obj = getShapeProperty(JmolConstants.SHAPE_VECTORS, "mad", iAtom); boolean haveVibration = (obj != null && ((Integer)obj).intValue() != 0 || viewer.isVibrationOn()); Modified: trunk/Jmol/src/org/jmol/shapespecial/Vectors.java =================================================================== --- trunk/Jmol/src/org/jmol/shapespecial/Vectors.java 2008-08-05 18:40:14 UTC (rev 9670) +++ trunk/Jmol/src/org/jmol/shapespecial/Vectors.java 2008-08-05 19:00:33 UTC (rev 9671) @@ -44,7 +44,7 @@ public Object getProperty(String propertyName, int param) { if (propertyName == "mad") - return new Integer(mads == null || mads.length <= param ? 0 : mads[param]); + return new Integer(mads == null || param < 0 || mads.length <= param ? 0 : mads[param]); return super.getProperty(propertyName, param); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-08-06 06:09:43
|
Revision: 9676 http://jmol.svn.sourceforge.net/jmol/?rev=9676&view=rev Author: hansonr Date: 2008-08-06 06:09:36 +0000 (Wed, 06 Aug 2008) Log Message: ----------- version=11.6.RC1 # bug fix: measures were messed up # new feature: echo myecho IMAGE "filename" # -- reads a JPG, GIF, or PNG image and displays it the # same as text is displayed. # new feature: echo myecho DEPTH xx # -- sets the depth in percent (0% far back, 100% front) for the placement of the image # -- note that images can be placed in 3D, just as for text. # -- setting "background echo xxx" then specifies the color # that is to be designated as the background color (the color that should be omitted). # -- using "background echo none" specifies that the first pixel # of the image specifies the color that should be omitted. # bug fix: 11.5.52 may have lost "true" as a keyword # new feature: pointgroups with vibration vectors # bug fix: more testing with pointgroups # new feature: spacefill/dots/geosurface/cartoon/trace/etc. ONLY # -- show only this rendering type # -- same as restrict not selected; spacefill ON # bug fix: application rubberband selecting inappropriately selects atoms not visible # new feature: wildcard at beginning for draw/pmesh/isosurface/etc. *xxx on/off/delete allowed # bug fix: in draw pointGroup -- height of cylinder was too small # bug fix: longstanding exception: isosurface fullylit --> isosurface backlit --> isosurface frontlit Modified Paths: -------------- trunk/Jmol/src/org/jmol/shape/Measures.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/jmol/shape/Measures.java =================================================================== --- trunk/Jmol/src/org/jmol/shape/Measures.java 2008-08-06 05:58:05 UTC (rev 9675) +++ trunk/Jmol/src/org/jmol/shape/Measures.java 2008-08-06 06:09:36 UTC (rev 9676) @@ -173,14 +173,14 @@ } else if ("deleteVector".equals(propertyName)) { define(setSingleItem((Vector) value), true, false, false); setIndices(); - } else if ("defineVector_ALL".equals(propertyName)) { + } else if ("defineVector_All".equals(propertyName)) { define((Vector) value, false, false, false); - } else if ("deleteVector_ALL".equals(propertyName)) { + } else if ("deleteVector_All".equals(propertyName)) { define((Vector) value, true, false, false); setIndices(); - } else if ("hideVector_ALL".equals(propertyName)) { + } else if ("hideVector_All".equals(propertyName)) { define((Vector) value, false, false, true); - } else if ("showVector_ALL".equals(propertyName)) { + } else if ("showVector_All".equals(propertyName)) { define((Vector) value, false, true, false); } else if ("deleteModelAtoms".equals(propertyName)) { atoms = (Atom[])((Object[])value)[1]; @@ -415,7 +415,7 @@ boolean isHide) { if (thispt > ptLastAtom) { // all atom bitsets have been iterated - if (isAllConnected && !isConnected(m, ptLastAtom)) + if (isAllConnected && !isConnected(m, thispt)) return; int iThis = findMeasurement(m); if (iThis >= 0) { Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-06 05:58:05 UTC (rev 9675) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-06 06:09:36 UTC (rev 9676) @@ -1,8 +1,9 @@ # Developers: to add a description of changes you have made, # add it on line starting with # below the "version=..." line -version=11.6.RC1_dev +version=11.6.RC1 +# bug fix: measures were messed up # new feature: echo myecho IMAGE "filename" # -- reads a JPG, GIF, or PNG image and displays it the # same as text is displayed. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-08-06 14:40:47
|
Revision: 9679 http://jmol.svn.sourceforge.net/jmol/?rev=9679&view=rev Author: hansonr Date: 2008-08-06 14:40:42 +0000 (Wed, 06 Aug 2008) Log Message: ----------- version=11.6.RC1 (pointgroup enhancements) # new feature: write/show pointgroup gives counts and tab-separated listing; # new feature: write pointgroup draw delivers draw commands # new feature: better draw pointgroup # new feature: no saving of point group -- just recalculated each time # bug fix: measures were messed up Modified Paths: -------------- trunk/Jmol/src/org/jmol/modelset/ModelSet.java trunk/Jmol/src/org/jmol/symmetry/PointGroup.java trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/modelset/ModelSet.java =================================================================== --- trunk/Jmol/src/org/jmol/modelset/ModelSet.java 2008-08-06 06:59:49 UTC (rev 9678) +++ trunk/Jmol/src/org/jmol/modelset/ModelSet.java 2008-08-06 14:40:42 UTC (rev 9679) @@ -424,11 +424,16 @@ } public String calculatePointGroup(BitSet bsAtoms) { - int modelIndex = calculatePointGroupForFirstModel(bsAtoms, true); - return models[modelIndex].pointGroup.getName(); + return calculatePointGroupForFirstModel(bsAtoms, true).getName(); } - private int calculatePointGroupForFirstModel(BitSet bsAtoms, boolean forceNew) { + public String getPointGroupAsString(BitSet bsAtoms, boolean asDraw) { + PointGroup pg = calculatePointGroupForFirstModel(bsAtoms, false); + return (modelCount > 1 ? "frame " + getModelNumberDotted(pg.getModelIndex()) + "; " + : "") + pg.getInfo(asDraw); + } + + private PointGroup calculatePointGroupForFirstModel(BitSet bsAtoms, boolean forceNew) { int modelIndex = viewer.getCurrentModelIndex(); int iAtom = BitSetUtil.firstSetBit(bsAtoms); if (modelIndex < 0 && iAtom >= 0) @@ -437,7 +442,6 @@ modelIndex = BitSetUtil.firstSetBit(viewer.getVisibleFramesBitSet()); bsAtoms = null; } - if (forceNew || models[modelIndex].pointGroup == null) { BitSet bs = getModelAtomBitSet(modelIndex, true); if (bsAtoms != null) for (int i = 0; i < atomCount; i++) @@ -452,18 +456,9 @@ Object obj = getShapeProperty(JmolConstants.SHAPE_VECTORS, "mad", iAtom); boolean haveVibration = (obj != null && ((Integer)obj).intValue() != 0 || viewer.isVibrationOn()); - PointGroup pg = new PointGroup(atoms, bs, haveVibration); - models[modelIndex].pointGroup = pg; - } - return modelIndex; + return new PointGroup(atoms, bs, haveVibration, modelIndex); } - public String getPointGroupDraw(BitSet bsAtoms) { - int modelIndex = calculatePointGroupForFirstModel(bsAtoms, false); - return (modelCount > 1 ? "frame " + getModelNumberDotted(modelIndex) + "; " : "") - + models[modelIndex].pointGroup.drawInfo(); - } - private BitSet modelsOf(BitSet bsAtoms, BitSet bsAllAtoms) { BitSet bsModels = new BitSet(modelCount); for (int i = 0; i < atomCount; i++) { Modified: trunk/Jmol/src/org/jmol/symmetry/PointGroup.java =================================================================== --- trunk/Jmol/src/org/jmol/symmetry/PointGroup.java 2008-08-06 06:59:49 UTC (rev 9678) +++ trunk/Jmol/src/org/jmol/symmetry/PointGroup.java 2008-08-06 14:40:42 UTC (rev 9679) @@ -33,6 +33,7 @@ import org.jmol.util.Escape; import org.jmol.util.Logger; import org.jmol.util.Quaternion; +import org.jmol.util.TextFormat; /* * Bob Hanson 7/2008 @@ -69,6 +70,32 @@ 1, // C8 }; + private final static int[] nUnique = new int[] { + 1, // used for plane count + 0, // n/a + 0, // not used -- would be S2 (inversion) + 2, // S3 + 2, // S4 + 4, // S5 + 2, // S6 + 0, // n/a + 4, // S8 + 0, // n/a + 4, // S10 + 0, // n/a + 4, // S12 + 0, // n/a + 0, // n/a firstProper = 14 + 0, // n/a + 1, // C2 + 2, // C3 + 2, // C4 + 4, // C5 + 2, // C6 + 0, // C7 + 4, // C8 + }; + private final static int s3 = 3; private final static int s4 = 4; private final static int s5 = 5; @@ -85,11 +112,16 @@ private final static int c8 = firstProper + 8; private final static int maxAxis = axesMaxN.length; - private int[] nAxes; - private Operation[][] axes; - + private int[] nAxes = new int[maxAxis]; + private Operation[][] axes = new Operation[maxAxis][]; + private int nAtoms; private String name = "C_1?"; + private int modelIndex; + public int getModelIndex() { + return modelIndex; + } + public String getName() { return name; } @@ -100,9 +132,8 @@ final private Point3f center = new Point3f(); - public PointGroup(Atom[] atomset, BitSet bsAtoms, boolean haveVibration) { - nAxes = new int[maxAxis]; - axes = new Operation[maxAxis][]; + public PointGroup(Atom[] atomset, BitSet bsAtoms, boolean haveVibration, int modelIndex) { + this.modelIndex = modelIndex; Point3f[] atoms; if ((atoms = getCenter(atomset, bsAtoms)) == null) { Logger.error("Too many atoms for point group calculation"); @@ -236,7 +267,7 @@ Atom[] atoms = new Atom[atomCount]; if (atomCount == 0) return atoms; - int nAtoms = 0; + nAtoms = 0; for (int i = BitSetUtil.length(bsAtoms); --i >= 0;) if (bsAtoms.get(i)) { atoms[nAtoms] = atomset[i]; @@ -742,7 +773,7 @@ public String getLabel() { switch (type) { case OPERATION_PLANE: - return ""; + return "Cs"; case OPERATION_IMPROPER_AXIS: return "S" + order; default: @@ -751,64 +782,112 @@ } } - public String drawInfo() { + public String getInfo(boolean asDraw) { Vector3f v = new Vector3f(); Operation op; - int n = 0; - int[] nType = new int[4]; - for (int i = 1; i < maxAxis; i++) { - n += nAxes[i]; + int[][] nType = new int[4][2]; + for (int i = 1; i < maxAxis; i++) for (int j = nAxes[i]; --j >= 0;) - nType[axes[i][j].type]++; - } - StringBuffer sb = new StringBuffer("set perspectivedepth off;\n"); - sb.append("draw p0" + (haveInversionCenter ? "inv " : " ") + Escape.escape(center) - + (haveInversionCenter ? "\"i\";\n" : ";\n")); - for (int i = 2; i < maxAxis; i++) { - for (int j = 0; j < nAxes[i]; j++) { - op = axes[i][j]; + nType[axes[i][j].type][0]++; + StringBuffer sb = new StringBuffer("# " + nAtoms + " atoms\n"); + if (asDraw) { + String m = "_" + modelIndex + "_"; + sb.append("draw delete pg0" + m + "*;draw delete pgva" + m + "*;draw delete pgvp" + m + "*;"); + sb.append("set perspectivedepth off;\n"); + sb.append("draw pg0").append(m).append(haveInversionCenter ? "inv " : " "); + sb.append(Escape.escape(center) + (haveInversionCenter ? "\"i\";\n" : ";\n")); + for (int i = 2; i < maxAxis; i++) { + for (int j = 0; j < nAxes[i]; j++) { + op = axes[i][j]; + v.set(op.normalOrAxis); + v.add(center); + float scale = (4.0f + op.order / 4.0f) + * (op.type == OPERATION_IMPROPER_AXIS ? -1 : 1); + sb.append("draw pgva").append(m).append(op.getLabel()).append("_").append(j + 1) + .append(" width 0.05 scale " + scale + " ").append( + Escape.escape(v)); + v.scaleAdd(-2, op.normalOrAxis, v); + sb.append(Escape.escape(v)).append("\"" + op.getLabel() + "\"") + .append(op.type == OPERATION_IMPROPER_AXIS ? " color red" : "") + .append(";\n"); + } + } + for (int j = 0; j < nAxes[0]; j++) { + op = axes[0][j]; v.set(op.normalOrAxis); + v.scale(0.025f); v.add(center); - float scale = (4.0f + op.order / 4.0f) * (op.type == OPERATION_IMPROPER_AXIS ? -1 : 1); - sb.append("draw va").append(op.getLabel()).append("_").append(j).append( - " width 0.05 scale " + scale + " ").append(Escape.escape(v)); + sb.append("draw pgvp").append(m).append(j + 1).append("disk width 6.0 cylinder ") + .append(Escape.escape(v)); + v.scaleAdd(-0.05f, op.normalOrAxis, v); + sb.append(Escape.escape(v)).append(" color translucent;\n"); + + v.set(op.normalOrAxis); + v.add(center); + sb.append("draw pgvp").append(m).append(j + 1).append( + "ring width 0.05 scale 3.0 arc ").append(Escape.escape(v)); v.scaleAdd(-2, op.normalOrAxis, v); - sb.append(Escape.escape(v)).append("\"" + op.getLabel() + "\"").append( - op.type == OPERATION_IMPROPER_AXIS ? " color red" : "").append( - ";\n"); + sb.append(Escape.escape(v)); + v.x += 0.011; + v.y += 0.012; + v.z += 0.013; + sb.append(Escape.escape(v)).append("{0 360 0.5} color red;\n"); } - } - for (int j = 0; j < nAxes[0]; j++) { - op = axes[0][j]; - v.set(op.normalOrAxis); - v.scale(0.025f); - v.add(center); - sb.append("draw vp").append(j).append("disk width 6.0 cylinder ").append( - Escape.escape(v)); - v.scaleAdd(-0.05f, op.normalOrAxis, v); - sb.append(Escape.escape(v)).append(" color translucent;\n"); + sb.append("# name=" + name); + sb.append(", nCi=" + (haveInversionCenter ? 1 : 0)); + sb.append(", nCs=" + nAxes[0]); + sb.append(", nCn=" + nType[OPERATION_PROPER_AXIS][0]); + sb.append(", nSn=" + nType[OPERATION_IMPROPER_AXIS][0]); + sb.append(": "); + for (int i = maxAxis; --i >= 2;) + if (nAxes[i] > 0) + sb.append(" n" + (i < firstProper ? "S" : "C") + (i % firstProper) + + "=" + nAxes[i]); + sb.append(";\n"); + } else { + int n = 0; + int nTotal = 1; + for (int i = maxAxis; --i >= 0;) { + if (nAxes[i] > 0) { + n = nUnique[i]; + String label = axes[i][0].getLabel(); + sb.append("\n\n" + name + "\tn" + label + "\t" + nAxes[i] + "\t" + n); + n *= nAxes[i]; + nTotal += n; + nType[axes[i][0].type][1] += n; + for (int j = 0; j < nAxes[i]; j++) { + sb.append("\n" + name + "\t" + label + "_" + (j + 1) + "\t" + + axes[i][j].normalOrAxis); + } + } + } + if (haveInversionCenter) { + nTotal++; + sb.append("\n\n" + name + "\tCi\t" + Escape.escape(center)); + } + sb.append("\n"); + sb.append("\n" + name + "\ttype\tnType\tnUnique"); + sb.append("\n" + name + "\tE\t 1\t 1"); + + n = (haveInversionCenter ? 1 : 0); + sb.append("\n" + name + "\tCi\t " + n + "\t " + n); + + sb.append("\n" + name + "\tCs\t"); + TextFormat.rFill(sb, " ",nAxes[0] + "\t"); + TextFormat.rFill(sb, " ",nAxes[0] + "\n"); - v.set(op.normalOrAxis); - v.add(center); - sb.append("draw vp").append(j).append("ring width 0.05 scale 3.0 arc ") - .append(Escape.escape(v)); - v.scaleAdd(-2, op.normalOrAxis, v); - sb.append(Escape.escape(v)); - v.x += 0.011; - v.y += 0.012; - v.z += 0.013; - sb.append(Escape.escape(v)).append("{0 360 0.5} color red;\n"); + sb.append(name + "\tCn\t"); + TextFormat.rFill(sb, " ",nType[OPERATION_PROPER_AXIS][0] + "\t"); + TextFormat.rFill(sb, " ",nType[OPERATION_PROPER_AXIS][1] + "\n"); + + sb.append(name + "\tSn\t"); + TextFormat.rFill(sb, " ",nType[OPERATION_IMPROPER_AXIS][0] + "\t"); + TextFormat.rFill(sb, " ",nType[OPERATION_IMPROPER_AXIS][1] + "\n"); + + sb.append(name + "\t\tTOTAL\t"); + TextFormat.rFill(sb, " ",nTotal + "\n"); } - sb.append("# name=" + name); - sb.append(", nCi=" + (haveInversionCenter ? 1 : 0)); - sb.append(", nCs=" + nAxes[0]); - sb.append(", nCn=" + nType[OPERATION_PROPER_AXIS]); - sb.append(", nSn=" + nType[OPERATION_IMPROPER_AXIS]); - sb.append(": "); - for (int i = maxAxis; --i >= 2; ) - if (nAxes[i] > 0) - sb.append(" n" + (i < firstProper ? "S" : "C") + (i % firstProper) + "=" + nAxes[i]); - sb.append(";\n"); return sb.toString(); } + } Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-08-06 06:59:49 UTC (rev 9678) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-08-06 14:40:42 UTC (rev 9679) @@ -6233,7 +6233,7 @@ if (isSyntaxCheck) return; if (tokAt(0) == Token.draw) - runScript(viewer.getPointGroupDraw()); + runScript(viewer.getPointGroupAsString(true)); else showString(viewer.calculatePointGroup()); return; @@ -8744,6 +8744,9 @@ case Token.pointgroup: type = "PGRP"; pt++; + type2 = Token.sValue(tokenAt(pt, args)).toLowerCase(); + if (type2.equals("draw")) + pt++; break; case Token.quaternion: pt++; @@ -8946,7 +8949,7 @@ return ""; } } else if (data == "PGRP") { - data = viewer.getPointGroupDraw(); + data = viewer.getPointGroupAsString((type2.equals("draw"))); } else if (data == "PDB") { data = viewer.getPdbData(null); } else if (data == "XYZ" || data == "MOL") { @@ -9341,6 +9344,10 @@ if (!isSyntaxCheck) msg = viewer.getPDBHeader(); break; + case Token.pointgroup: + if (!isSyntaxCheck) + msg = viewer.getPointGroupAsString(false); + break; case Token.symmetry: if (!isSyntaxCheck) msg = viewer.getSymmetryInfoAsString(); Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-06 06:59:49 UTC (rev 9678) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-06 14:40:42 UTC (rev 9679) @@ -3,6 +3,10 @@ version=11.6.RC1 +# new feature: write/show pointgroup gives counts and tab-separated listing; +# new feature: write pointgroup draw delivers draw commands +# new feature: better draw pointgroup +# new feature: no saving of point group -- just recalculated each time # bug fix: measures were messed up # new feature: echo myecho IMAGE "filename" # -- reads a JPG, GIF, or PNG image and displays it the Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-08-06 06:59:49 UTC (rev 9678) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-08-06 14:40:42 UTC (rev 9679) @@ -6825,8 +6825,8 @@ return modelSet.calculatePointGroup(selectionManager.bsSelection); } - public String getPointGroupDraw() { - return modelSet.getPointGroupDraw(selectionManager.bsSelection); + public String getPointGroupAsString(boolean asDraw) { + return modelSet.getPointGroupAsString(selectionManager.bsSelection, asDraw); } Object getFileAsImage(String pathName, Hashtable htParams) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-08-06 15:25:50
|
Revision: 9682 http://jmol.svn.sourceforge.net/jmol/?rev=9682&view=rev Author: hansonr Date: 2008-08-06 15:25:44 +0000 (Wed, 06 Aug 2008) Log Message: ----------- version=11.6.RC1 (c) # bug fix: LOAD "..." nn loading of model numbers for PDB files should read real model number, not sequentially. Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2008-08-06 15:08:51 UTC (rev 9681) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2008-08-06 15:25:44 UTC (rev 9682) @@ -120,7 +120,9 @@ if (isModel) { getHeader = false; iHaveModelStatement = true; - if (++modelNumber != desiredModelNumber && desiredModelNumber > 0) { + // PDB is different -- targets actual model number + int modelNumber = getModelNumber(); + if (desiredModelNumber != Integer.MIN_VALUE && modelNumber != desiredModelNumber) { if (iHaveModel) break; continue; @@ -129,7 +131,7 @@ atomSetCollection.connectAll(maxSerial); applySymmetry(); //supposedly MODEL is only for NMR - model(); + model(modelNumber); continue; } /* @@ -631,8 +633,19 @@ endSequenceNumber, endInsertionCode); atomSetCollection.addStructure(structure); } - - void model() { + + private int getModelNumber() { + try { + int startModelColumn = 6; // should be 10 0-based + int endModelColumn = 14; + if (endModelColumn > lineLength) + endModelColumn = lineLength; + return modelNumber = parseInt(line, startModelColumn, endModelColumn); + } catch (NumberFormatException e) { + return 0; + } + } + void model(int modelNumber) { /**************************************************************** * mth 2004 02 28 * note that the pdb spec says: @@ -644,19 +657,10 @@ * but I received a file with the serial * number right after the word MODEL :-( ****************************************************************/ - try { - int startModelColumn = 6; // should be 10 0-based - int endModelColumn = 14; - if (endModelColumn > lineLength) - endModelColumn = lineLength; - int modelNumber = parseInt(line, startModelColumn, endModelColumn); haveMappedSerials = false; atomSetCollection.newAtomSet(); atomSetCollection.setAtomSetAuxiliaryInfo("isPDB", Boolean.TRUE); atomSetCollection.setAtomSetNumber(modelNumber); - } catch (NumberFormatException e) { - //ingore model number errors - } } void cryst1() throws Exception { Modified: trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2008-08-06 15:08:51 UTC (rev 9681) +++ trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2008-08-06 15:25:44 UTC (rev 9682) @@ -224,7 +224,7 @@ public void initialize() { // called by the resolver modelNumber = 0; - desiredModelNumber = -1; + desiredModelNumber = Integer.MIN_VALUE; iHaveDesiredModel = false; getHeader = false; latticeCells[0] = latticeCells[1] = latticeCells[2] = 0; Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-08-06 15:08:51 UTC (rev 9681) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-08-06 15:25:44 UTC (rev 9682) @@ -4213,6 +4213,7 @@ boolean appendNew = viewer.getAppendNew(); StringBuffer loadScript = new StringBuffer("load"); int[] params = new int[4]; + params[0] = Integer.MIN_VALUE; int nFiles = 1; Point3f unitCells = viewer.getDefaultLattice(); Hashtable htParams = new Hashtable(); @@ -4246,7 +4247,7 @@ loadScript.append(" " + modelName); isAppend = (modelName.equalsIgnoreCase("append")); if (modelName.equalsIgnoreCase("trajectory")) - params[0] = -1; + params[0] = Integer.MIN_VALUE; } if (getToken(i).tok != Token.string) error(ERROR_filenameExpected); Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-06 15:08:51 UTC (rev 9681) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-06 15:25:44 UTC (rev 9682) @@ -3,6 +3,8 @@ version=11.6.RC1 +# bug fix: LOAD "..." nn loading of model numbers for PDB files should read real model number, not sequentially. + # new feature: write/show pointgroup gives counts and tab-separated listing; # new feature: write pointgroup draw delivers draw commands # new feature: better draw pointgroup This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-08-06 18:07:15
|
Revision: 9685 http://jmol.svn.sourceforge.net/jmol/?rev=9685&view=rev Author: hansonr Date: 2008-08-06 18:07:10 +0000 (Wed, 06 Aug 2008) Log Message: ----------- version=11.6.RC1 # bug fix: D3h point group Modified Paths: -------------- trunk/Jmol/src/org/jmol/symmetry/PointGroup.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/jmol/symmetry/PointGroup.java =================================================================== --- trunk/Jmol/src/org/jmol/symmetry/PointGroup.java 2008-08-06 16:42:44 UTC (rev 9684) +++ trunk/Jmol/src/org/jmol/symmetry/PointGroup.java 2008-08-06 18:07:10 UTC (rev 9685) @@ -641,9 +641,6 @@ } private int findPlanes(Point3f[] atoms, int[] elements) { - Operation[] axesC2 = axes[c2]; - int nC2 = nAxes[c2]; - Point3f pt = new Point3f(); Vector3f v1 = new Vector3f(); Vector3f v2 = new Vector3f(); @@ -685,10 +682,11 @@ } } - // also look for planes normal to any C2 axis + // also look for planes normal to any C axis - for (int i = 0; i < nC2; i++) - nPlanes = getPlane(nPlanes, axesC2[i].normalOrAxis, atoms, elements, + for (int i = c2; i < maxAxis; i++) + for (int j = 0; j < nAxes[i]; i++) + nPlanes = getPlane(nPlanes, axes[i][j].normalOrAxis, atoms, elements, center); return nPlanes; } Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-06 16:42:44 UTC (rev 9684) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-06 18:07:10 UTC (rev 9685) @@ -3,6 +3,7 @@ version=11.6.RC1 +# bug fix: D3h point group # bug fix: LOAD "..." nn loading of model numbers for PDB files should read real model number, not sequentially. # new feature: write/show pointgroup gives counts and tab-separated listing; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-08-07 14:12:42
|
Revision: 9689 http://jmol.svn.sourceforge.net/jmol/?rev=9689&view=rev Author: hansonr Date: 2008-08-07 14:12:38 +0000 (Thu, 07 Aug 2008) Log Message: ----------- version=11.6.RC2 bug fixes; help menu in console; Java permissions # bug fix: Cs pointgroup not found # bug fix: set echo DEPTH/IMAGE # bug fix: workaround for Java 1.6.0_10 diallowing popup menu # new feature: in Java 1.6.0_10, right-click activates the console, and the # console has a menubar menu item "Jmol" that is the pop-up menu. # new feature: applet console has "help" menu item, which includes several hundred items. Modified Paths: -------------- trunk/Jmol/src/org/jmol/shape/Object2d.java trunk/Jmol/src/org/jmol/shape/Text.java trunk/Jmol/src/org/jmol/symmetry/PointGroup.java trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/jmol/shape/Object2d.java =================================================================== --- trunk/Jmol/src/org/jmol/shape/Object2d.java 2008-08-07 03:09:39 UTC (rev 9688) +++ trunk/Jmol/src/org/jmol/shape/Object2d.java 2008-08-07 14:12:38 UTC (rev 9689) @@ -154,7 +154,7 @@ } public void setMovableZ(int z) { - if (valign == VALIGN_XYZ) + if (valign != VALIGN_XYZ) valign = VALIGN_XY; movableZ = z; movableZPercent = Integer.MAX_VALUE; @@ -173,7 +173,7 @@ } public void setMovableZPercent(int z) { - if (valign == VALIGN_XYZ) + if (valign != VALIGN_XYZ) valign = VALIGN_XY; movableZ = Integer.MAX_VALUE; movableZPercent = z; @@ -318,7 +318,7 @@ boxXY[1] = windowHeight; break; default: - float y = (movableXPercent != Integer.MAX_VALUE ? movableYPercent + float y = (movableYPercent != Integer.MAX_VALUE ? movableYPercent * windowHeight / 100 : is3dEcho? movableY : movableY * scale); float offsetY = this.offsetY * scale; boxXY[1] = (is3dEcho ? y : (windowHeight - y)) + offsetY; Modified: trunk/Jmol/src/org/jmol/shape/Text.java =================================================================== --- trunk/Jmol/src/org/jmol/shape/Text.java 2008-08-07 03:09:39 UTC (rev 9688) +++ trunk/Jmol/src/org/jmol/shape/Text.java 2008-08-07 14:12:38 UTC (rev 9689) @@ -208,7 +208,7 @@ // adjust positions if necessary if (adjustForWindow) - setBoxOffsetsInWindow(fontScale, isLabelOrHover ? 16 * fontScale + setBoxOffsetsInWindow(image == null ? fontScale : 0, isLabelOrHover ? 16 * fontScale + lineHeight : 0, boxY - textHeight); // draw the box if necessary @@ -220,25 +220,25 @@ // now set x and y positions for text from (new?) box position - int adj = (fontScale >= 2 ? 8 : 4); - int x0 = (int) boxX; - switch (align) { - case ALIGN_CENTER: - x0 += boxWidth / 2; - break; - case ALIGN_RIGHT: - x0 += boxWidth - adj; - break; - default: - x0 += adj; - } - if (image != null) { g3d.drawImage(image, (int) boxX, (int) boxY, z, zSlab, (int) boxWidth, (int) boxHeight, bgcolix); } else { // now write properly aligned text + int adj = (fontScale >= 2 ? 8 : 4); + int x0 = (int) boxX; + switch (align) { + case ALIGN_CENTER: + x0 += boxWidth / 2; + break; + case ALIGN_RIGHT: + x0 += boxWidth - adj; + break; + default: + x0 += adj; + } + float x = x0; float y = boxY + ascent + adj; //System.out.println("scale=" + fontScale + " boxwidth/height=" + boxWidth Modified: trunk/Jmol/src/org/jmol/symmetry/PointGroup.java =================================================================== --- trunk/Jmol/src/org/jmol/symmetry/PointGroup.java 2008-08-07 03:09:39 UTC (rev 9688) +++ trunk/Jmol/src/org/jmol/symmetry/PointGroup.java 2008-08-07 14:12:38 UTC (rev 9689) @@ -646,13 +646,14 @@ Vector3f v2 = new Vector3f(); Vector3f v3 = new Vector3f(); int nPlanes = 0; + boolean haveAxes = (getHighestOrder() > 1); for (int i = atoms.length; --i >= 0;) { if (i == centerAtomIndex) continue; Point3f a1 = atoms[i]; int e1 = elements[i]; for (int j = atoms.length; --j > i;) { - if (elements[j] != e1) + if (haveAxes && elements[j] != e1) continue; // plane are treated as S2 axes here @@ -683,11 +684,11 @@ } // also look for planes normal to any C axis - - for (int i = c2; i < maxAxis; i++) - for (int j = 0; j < nAxes[i]; i++) - nPlanes = getPlane(nPlanes, axes[i][j].normalOrAxis, atoms, elements, - center); + if (haveAxes) + for (int i = c2; i < maxAxis; i++) + for (int j = 0; j < nAxes[i]; i++) + nPlanes = getPlane(nPlanes, axes[i][j].normalOrAxis, atoms, elements, + center); return nPlanes; } Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-08-07 03:09:39 UTC (rev 9688) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-08-07 14:12:38 UTC (rev 9689) @@ -8277,16 +8277,14 @@ case Token.script: propertyName = "script"; propertyValue = parameterAsString(4); - setShapeProperty(JmolConstants.SHAPE_ECHO, propertyName, propertyValue); - return; + break; case Token.model: int modelIndex = modelNumberParameter(4); if (!isSyntaxCheck && modelIndex >= viewer.getModelCount()) error(ERROR_invalidArgument); propertyName = "model"; propertyValue = new Integer(modelIndex); - setShapeProperty(JmolConstants.SHAPE_ECHO, propertyName, propertyValue); - return; + break; case Token.image: //set echo name image "xxx" echo(4, true); @@ -8294,6 +8292,10 @@ case Token.depth: propertyName = "%zpos"; propertyValue = new Integer((int) floatParameter(4)); + break; + } + if (propertyValue != null) { + setShapeProperty(JmolConstants.SHAPE_ECHO, propertyName, propertyValue); return; } } @@ -8308,9 +8310,8 @@ setShapeProperty(JmolConstants.SHAPE_ECHO, "xyz", centerParameter(i)); return; } - propertyValue = xypParameter(i); String type = "xypos"; - if (propertyValue == null) { + if ((propertyValue = xypParameter(i)) == null) { int pos = intParameter(i++); propertyValue = new Integer(pos); if (tokAt(i) == Token.percent) { Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-07 03:09:39 UTC (rev 9688) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-07 14:12:38 UTC (rev 9689) @@ -1,8 +1,10 @@ # Developers: to add a description of changes you have made, # add it on line starting onlwith # below the "version=..." line -version=11.6.RC2_dev +version=11.6.RC2 +# bug fix: Cs pointgroup not found +# bug fix: set echo DEPTH/IMAGE # bug fix: workaround for Java 1.6.0_10 diallowing popup menu # new feature: in Java 1.6.0_10, right-click activates the console, and the # console has a menubar menu item "Jmol" that is the pop-up menu. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-08-07 14:39:42
|
Revision: 9690 http://jmol.svn.sourceforge.net/jmol/?rev=9690&view=rev Author: hansonr Date: 2008-08-07 14:39:33 +0000 (Thu, 07 Aug 2008) Log Message: ----------- version=11.6.RC2 point group tolerances # new feature: set pointGroupDistanceTolerance (default 0.2 angstroms) # new feature: set pointGroupLinearTolerance (default 8 degrees) Modified Paths: -------------- trunk/Jmol/src/org/jmol/modelset/ModelSet.java trunk/Jmol/src/org/jmol/symmetry/PointGroup.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/StateManager.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/modelset/ModelSet.java =================================================================== --- trunk/Jmol/src/org/jmol/modelset/ModelSet.java 2008-08-07 14:12:38 UTC (rev 9689) +++ trunk/Jmol/src/org/jmol/modelset/ModelSet.java 2008-08-07 14:39:33 UTC (rev 9690) @@ -433,7 +433,8 @@ : "") + pg.getInfo(asDraw); } - private PointGroup calculatePointGroupForFirstModel(BitSet bsAtoms, boolean forceNew) { + private PointGroup calculatePointGroupForFirstModel(BitSet bsAtoms, + boolean forceNew) { int modelIndex = viewer.getCurrentModelIndex(); int iAtom = BitSetUtil.firstSetBit(bsAtoms); if (modelIndex < 0 && iAtom >= 0) @@ -442,21 +443,22 @@ modelIndex = BitSetUtil.firstSetBit(viewer.getVisibleFramesBitSet()); bsAtoms = null; } - BitSet bs = getModelAtomBitSet(modelIndex, true); - if (bsAtoms != null) - for (int i = 0; i < atomCount; i++) - if (atoms[i].modelIndex == modelIndex) - if (!bsAtoms.get(i)) - bs.clear(i); + BitSet bs = getModelAtomBitSet(modelIndex, true); + if (bsAtoms != null) + for (int i = 0; i < atomCount; i++) + if (atoms[i].modelIndex == modelIndex) + if (!bsAtoms.get(i)) + bs.clear(i); + iAtom = BitSetUtil.firstSetBit(bs); + if (iAtom < 0) { + bs = getModelAtomBitSet(modelIndex, true); iAtom = BitSetUtil.firstSetBit(bs); - if (iAtom < 0) { - bs = getModelAtomBitSet(modelIndex, true); - iAtom = BitSetUtil.firstSetBit(bs); - } - Object obj = getShapeProperty(JmolConstants.SHAPE_VECTORS, "mad", iAtom); - boolean haveVibration = (obj != null && ((Integer)obj).intValue() != 0 - || viewer.isVibrationOn()); - return new PointGroup(atoms, bs, haveVibration, modelIndex); + } + Object obj = getShapeProperty(JmolConstants.SHAPE_VECTORS, "mad", iAtom); + boolean haveVibration = (obj != null && ((Integer) obj).intValue() != 0 || viewer + .isVibrationOn()); + return new PointGroup(atoms, bs, haveVibration, modelIndex, viewer + .getPointGroupTolerance(0), viewer.getPointGroupTolerance(1)); } private BitSet modelsOf(BitSet bsAtoms, BitSet bsAllAtoms) { Modified: trunk/Jmol/src/org/jmol/symmetry/PointGroup.java =================================================================== --- trunk/Jmol/src/org/jmol/symmetry/PointGroup.java 2008-08-07 14:12:38 UTC (rev 9689) +++ trunk/Jmol/src/org/jmol/symmetry/PointGroup.java 2008-08-07 14:39:33 UTC (rev 9690) @@ -117,6 +117,8 @@ private int nAtoms; private String name = "C_1?"; private int modelIndex; + private float distanceTolerance = 0.2f; + private float linearTolerance = 0.99f; // 8 degrees public int getModelIndex() { return modelIndex; @@ -132,12 +134,16 @@ final private Point3f center = new Point3f(); - public PointGroup(Atom[] atomset, BitSet bsAtoms, boolean haveVibration, int modelIndex) { + public PointGroup(Atom[] atomset, BitSet bsAtoms, boolean haveVibration, + int modelIndex, float distanceTolerance, float linearTolerance) { this.modelIndex = modelIndex; + this.distanceTolerance = distanceTolerance; + this.linearTolerance = (float) (Math.cos(linearTolerance / 180 * Math.PI)); Point3f[] atoms; if ((atoms = getCenter(atomset, bsAtoms)) == null) { Logger.error("Too many atoms for point group calculation"); - name = "point group not determined -- atomCount > " + ATOM_COUNT_MAX + " -- select fewer atoms and try again."; + name = "point group not determined -- atomCount > " + ATOM_COUNT_MAX + + " -- select fewer atoms and try again."; return; } int[] elements = new int[atoms.length]; @@ -152,7 +158,7 @@ Point3f[] atomVibs = new Point3f[atoms.length]; for (int i = atoms.length; --i >= 0;) { atomVibs[i] = new Point3f(atoms[i]); - Vector3f v = ((Atom)atoms[i]).getVibrationVector(); + Vector3f v = ((Atom) atoms[i]).getVibrationVector(); if (v != null) atomVibs[i].add(v); } @@ -290,7 +296,6 @@ } } - private final static float DISTANCE_TOLERANCE = 0.2f; private boolean checkOperation(Point3f[] atoms, int[] elements, Quaternion q, Point3f center, int iOrder) { Point3f pt = new Point3f(); @@ -321,7 +326,7 @@ vTemp.sub(center, pt); pt.scaleAdd(2, vTemp, pt); } - if ((q != null || isInversion) && pt.distance(a1) < DISTANCE_TOLERANCE) { + if ((q != null || isInversion) && pt.distance(a1) < distanceTolerance) { nFound++; continue; } @@ -331,7 +336,7 @@ Point3f a2 = atoms[j]; // System.out.println(i + " " + j + " " + a1 + " " + a2 + " " + pt // + nFound + " " + pt.distance(a2)); - if (pt.distance(a2) < DISTANCE_TOLERANCE) { + if (pt.distance(a2) < distanceTolerance) { nFound++; continue out; } @@ -360,10 +365,9 @@ return true; } - private final static float LINEAR_DOT_MINIMUM = 0.99f; // 8 degrees - - private static boolean isParallel(Vector3f v1, Vector3f v2) { - return (Math.abs(v1.dot(v2)) >= LINEAR_DOT_MINIMUM); + private boolean isParallel(Vector3f v1, Vector3f v2) { + // note -- these MUST be unit vectors + return (Math.abs(v1.dot(v2)) >= linearTolerance); } int maxElement = 0; Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-07 14:12:38 UTC (rev 9689) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-07 14:39:33 UTC (rev 9690) @@ -3,6 +3,9 @@ version=11.6.RC2 +# new feature: set pointGroupDistanceTolerance (default 0.2 angstroms) +# new feature: set pointGroupLinearTolerance (default 8 degrees) + # bug fix: Cs pointgroup not found # bug fix: set echo DEPTH/IMAGE # bug fix: workaround for Java 1.6.0_10 diallowing popup menu Modified: trunk/Jmol/src/org/jmol/viewer/StateManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/StateManager.java 2008-08-07 14:12:38 UTC (rev 9689) +++ trunk/Jmol/src/org/jmol/viewer/StateManager.java 2008-08-07 14:39:33 UTC (rev 9690) @@ -621,6 +621,8 @@ boolean messageStyleChime = false; int pickingSpinRate = 10; String pickLabel = ""; + float pointGroupDistanceTolerance = 0.2f; + float pointGroupLinearTolerance = 8.0f; String propertyColorScheme = "roygb"; String quaternionFrame = "c"; float solventProbeRadius = 1.2f; @@ -1178,6 +1180,8 @@ setParameterValue("pickingSpinRate", pickingSpinRate); setParameterValue("pickingStyle", "toggle"); setParameterValue("pickLabel", pickLabel); + setParameterValue("pointGroupLinearTolerance", pointGroupLinearTolerance); + setParameterValue("pointGroupDistanceTolerance", pointGroupDistanceTolerance); setParameterValue("propertyColorScheme", propertyColorScheme); setParameterValue("propertyDataField", 0); setParameterValue("propertyAtomNumberField", 0); Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-08-07 14:12:38 UTC (rev 9689) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-08-07 14:39:33 UTC (rev 9690) @@ -4348,6 +4348,16 @@ //Eval boolean notFound = false; while (true) { + //11.6.RC2// + if (key.equalsIgnoreCase("pointGroupDistanceTolerance")) { + setPointGroupTolerance(value, 0); + break; + } + if (key.equalsIgnoreCase("pointGroupLinearTolerance")) { + setPointGroupTolerance(value, 1); + break; + } + //11.5.30// if (key.equalsIgnoreCase("ellipsoidAxisDiameter")) { if (isInt) @@ -4488,7 +4498,7 @@ else global.setUserVariable(key, new Token(Token.decimal, new Float(value))); return true; - } + } public void setIntProperty(String key, int value) { if (key.charAt(0) == '_') { @@ -6829,6 +6839,27 @@ return modelSet.getPointGroupAsString(selectionManager.bsSelection, asDraw); } + private void setPointGroupTolerance(float value, int type) { + switch (type) { + case 0: + global.pointGroupDistanceTolerance = value; + break; + case 1: + global.pointGroupLinearTolerance = value; + break; + } + } + + public float getPointGroupTolerance(int type) { + switch (type) { + case 0: + return global.pointGroupDistanceTolerance; + case 1: + return global.pointGroupLinearTolerance; + } + return 0; + } + Object getFileAsImage(String pathName, Hashtable htParams) { if (!haveDisplay) return "no display"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-08-07 15:29:38
|
Revision: 9691 http://jmol.svn.sourceforge.net/jmol/?rev=9691&view=rev Author: hansonr Date: 2008-08-07 15:29:30 +0000 (Thu, 07 Aug 2008) Log Message: ----------- version=11.6.RC2 (b) # bug fix: image background transparency Modified Paths: -------------- trunk/Jmol/src/org/jmol/g3d/Platform3D.java trunk/Jmol/src/org/jmol/g3d/Text3D.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/jmol/g3d/Platform3D.java =================================================================== --- trunk/Jmol/src/org/jmol/g3d/Platform3D.java 2008-08-07 14:39:33 UTC (rev 9690) +++ trunk/Jmol/src/org/jmol/g3d/Platform3D.java 2008-08-07 15:29:30 UTC (rev 9691) @@ -175,12 +175,12 @@ abstract Image allocateOffscreenImage(int width, int height); abstract Graphics getGraphics(Image imageOffscreen); - void checkOffscreenSize(int width, int height) { + boolean checkOffscreenSize(int width, int height) { if (width <= widthOffscreen && height <= heightOffscreen) - return; + return true; if (imageOffscreen != null) { - gOffscreen.dispose(); - imageOffscreen.flush(); + gOffscreen.dispose(); + imageOffscreen.flush(); } if (width > widthOffscreen) widthOffscreen = (width + 63) & ~63; @@ -188,6 +188,7 @@ heightOffscreen = (height + 15) & ~15; imageOffscreen = allocateOffscreenImage(widthOffscreen, heightOffscreen); gOffscreen = getGraphics(imageOffscreen); + return false; } class ClearingThread extends Thread implements Runnable { Modified: trunk/Jmol/src/org/jmol/g3d/Text3D.java =================================================================== --- trunk/Jmol/src/org/jmol/g3d/Text3D.java 2008-08-07 14:39:33 UTC (rev 9690) +++ trunk/Jmol/src/org/jmol/g3d/Text3D.java 2008-08-07 15:29:30 UTC (rev 9691) @@ -121,6 +121,7 @@ return; g3d.platform.checkOffscreenSize(width, height); Graphics g = g3d.platform.gOffscreen; + g.clearRect(0,0,width,height); if (g3d.isAntialiased()) { g.drawImage(image, 0, 0, width, height, 0, 0, width >> 1, height >> 1, null); } else { @@ -150,12 +151,14 @@ if (jmolRenderer == null) jmolRenderer = g3d; int bgcolor = (argbBackground == 0 ? buffer[0] : argbBackground); - for (int i = 0, offset = 0; i < height; i++) + for (int i = 0, offset = 0; i < height; i++) { + //System.out.println(Integer.toHexString(buffer[offset])); for (int j = 0; j < width; j++) { int argb = buffer[offset++]; - if (argb != bgcolor) + if (argb != bgcolor && (argb & 0xFF000000) == 0xFF000000) jmolRenderer.plotPixelClippedNoSlab(argb, x + j, y + i, z); } + } } private static void plotImageUnClipped(int x, int y, int z, Graphics3D g3d, @@ -169,10 +172,11 @@ int offset = 0; int bgcolor = (argbBackground == 0 ? buffer[0] : argbBackground); while (i < textHeight) { + //System.out.println(Integer.toHexString(buffer[offset])); while (j < textWidth) { if (z < zbuf[pbufOffset]) { int argb = buffer[offset]; - if (argb != bgcolor) + if (argb != bgcolor && (argb & 0xFF000000) == 0xFF000000) g3d.addPixel(pbufOffset, z, argb); } ++offset; Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-07 14:39:33 UTC (rev 9690) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-07 15:29:30 UTC (rev 9691) @@ -3,6 +3,8 @@ version=11.6.RC2 +# bug fix: image background transparency + # new feature: set pointGroupDistanceTolerance (default 0.2 angstroms) # new feature: set pointGroupLinearTolerance (default 8 degrees) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-08-08 15:15:09
|
Revision: 9693 http://jmol.svn.sourceforge.net/jmol/?rev=9693&view=rev Author: hansonr Date: 2008-08-08 15:15:03 +0000 (Fri, 08 Aug 2008) Log Message: ----------- version=11.6.RC3_dev pointgroup enhancements, dot Density # new feature: set dotDensity [-3 to 3] # bug fix: minor error in pointgroup # new feature: draw pointGroup [type] [index] SCALE [x] # where [type] is one of Cs, Ci, Cn, or Sn, where n is an integer or the character "n" Modified Paths: -------------- trunk/Jmol/src/org/jmol/applet/Jmol.java trunk/Jmol/src/org/jmol/modelset/ModelSet.java trunk/Jmol/src/org/jmol/shape/DotsRenderer.java trunk/Jmol/src/org/jmol/symmetry/PointGroup.java trunk/Jmol/src/org/jmol/util/Quaternion.java trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/StateManager.java trunk/Jmol/src/org/jmol/viewer/Token.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/applet/Jmol.java =================================================================== --- trunk/Jmol/src/org/jmol/applet/Jmol.java 2008-08-07 19:09:42 UTC (rev 9692) +++ trunk/Jmol/src/org/jmol/applet/Jmol.java 2008-08-08 15:15:03 UTC (rev 9693) @@ -377,7 +377,7 @@ "setWindowAlwaysOnTop")); } } catch (Exception e) { - popupMenuAllowed = false; + //popupMenuAllowed = false; System.out.println("popup menu not available"); } getPopupMenu(false); Modified: trunk/Jmol/src/org/jmol/modelset/ModelSet.java =================================================================== --- trunk/Jmol/src/org/jmol/modelset/ModelSet.java 2008-08-07 19:09:42 UTC (rev 9692) +++ trunk/Jmol/src/org/jmol/modelset/ModelSet.java 2008-08-08 15:15:03 UTC (rev 9693) @@ -427,10 +427,12 @@ return calculatePointGroupForFirstModel(bsAtoms, true).getName(); } - public String getPointGroupAsString(BitSet bsAtoms, boolean asDraw) { + public String getPointGroupAsString(BitSet bsAtoms, boolean asDraw, + String type, int index, float scale) { PointGroup pg = calculatePointGroupForFirstModel(bsAtoms, false); - return (modelCount > 1 ? "frame " + getModelNumberDotted(pg.getModelIndex()) + "; " - : "") + pg.getInfo(asDraw); + return (modelCount > 1 ? "frame " + + getModelNumberDotted(pg.getModelIndex()) + "; " : "") + + pg.getInfo(asDraw, type, index, scale); } private PointGroup calculatePointGroupForFirstModel(BitSet bsAtoms, Modified: trunk/Jmol/src/org/jmol/shape/DotsRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/shape/DotsRenderer.java 2008-08-07 19:09:42 UTC (rev 9692) +++ trunk/Jmol/src/org/jmol/shape/DotsRenderer.java 2008-08-08 15:15:03 UTC (rev 9693) @@ -63,6 +63,10 @@ int sppa = (int) viewer.getScalePixelsPerAngstrom(); screenLevel = (iShowSolid || sppa > 20 ? 3 : sppa > 10 ? 2 : sppa > 5 ? 1 : 0); + if (!iShowSolid) { + screenLevel += viewer.getDotDensity() - 3; + screenLevel = Math.max(Math.min(screenLevel, 3), 0); + } screenDotCount = Geodesic.getVertexCount(screenLevel); for (int i = screenDotCount; --i >= 0;) viewer.transformVector(Geodesic.getVertexVector(i), Modified: trunk/Jmol/src/org/jmol/symmetry/PointGroup.java =================================================================== --- trunk/Jmol/src/org/jmol/symmetry/PointGroup.java 2008-08-07 19:09:42 UTC (rev 9692) +++ trunk/Jmol/src/org/jmol/symmetry/PointGroup.java 2008-08-08 15:15:03 UTC (rev 9693) @@ -119,6 +119,8 @@ private int modelIndex; private float distanceTolerance = 0.2f; private float linearTolerance = 0.99f; // 8 degrees + private Operation principalAxis = new Operation(null); + private Operation principalPlane = new Operation(null); public int getModelIndex() { return modelIndex; @@ -172,6 +174,13 @@ } else { name = "C(infinity)v"; } + vTemp.sub(atoms[1], atoms[0]); + addAxis(c2, vTemp); + principalAxis = axes[c2][0]; + if (haveInversionCenter) { + axes[0] = new Operation[1]; + principalPlane = axes[0][nAxes[0]++] = new Operation(vTemp); + } return; } axes[0] = new Operation[15]; @@ -227,6 +236,7 @@ // and more than one C2 if even order (since the one will be part of the // principal axis + principalAxis = setPrincipalAxis(n, nPlanes); if (nPlanes == 0) { if (n < firstProper) { name = "S" + n; @@ -247,14 +257,18 @@ } } else if (nPlanes == 0) { // Cn, S3, S6 + principalAxis = axes[n][0]; if (n < firstProper) { name = "S" + n; } else { name = "C" + (n - firstProper); } } else if (nPlanes == n - firstProper) { + principalAxis = axes[n][0]; name = "C" + nPlanes + "v"; } else { + principalAxis = axes[n < firstProper ? n + firstProper : n][0]; + principalPlane = axes[0][0]; if (n < firstProper) n /= 2; else @@ -265,6 +279,47 @@ //System.out.println(drawInfo()); } + private Operation setPrincipalAxis(int n, int nPlanes) { + Operation principalPlane = setPrincipalPlane(n, nPlanes); + if (nPlanes == 0 && n < firstProper || nAxes[n] == 1) { + if (nPlanes > 0 && n < firstProper) + n = firstProper + n / 2; + return axes[n][0]; + } + // D2, D2d, D2h -- which c2 axis is it? + if (principalPlane == null) + return null; + for (int i = 0; i < nAxes[c2]; i++) + if (isParallel(principalPlane.normalOrAxis, axes[c2][i].normalOrAxis)) { + if (i != 0) { + Operation o = axes[c2][0]; + axes[c2][0] = axes[c2][i]; + axes[c2][i] = o; + } + return axes[c2][0]; + } + return null; + } + + private Operation setPrincipalPlane(int n, int nPlanes) { + // principal plane is perpendicular to more than two other planes + if (nPlanes == 1) + return principalPlane = axes[0][0]; + if (nPlanes == 0 || nPlanes == n - firstProper) + return null; + for (int i = 0; i < nPlanes; i++) + for (int j = 0, nPerp = 0; j < nPlanes; j++) + if (isPerpendicular(axes[0][i].normalOrAxis, axes[0][j].normalOrAxis) && ++nPerp > 2) { + if (i != 0) { + Operation o = axes[0][0]; + axes[0][0] = axes[0][i]; + axes[0][i] = o; + } + return principalPlane = axes[0][0]; + } + return null; + } + private final static int ATOM_COUNT_MAX = 100; private Atom[] getCenter(Atom[] atomset, BitSet bsAtoms) { int atomCount = BitSetUtil.cardinalityOf(bsAtoms); @@ -370,6 +425,11 @@ return (Math.abs(v1.dot(v2)) >= linearTolerance); } + private boolean isPerpendicular(Vector3f v1, Vector3f v2) { + // note -- these MUST be unit vectors + return (Math.abs(v1.dot(v2)) <= 1 - linearTolerance); + } + int maxElement = 0; int[] eCounts; @@ -690,7 +750,7 @@ // also look for planes normal to any C axis if (haveAxes) for (int i = c2; i < maxAxis; i++) - for (int j = 0; j < nAxes[i]; i++) + for (int j = 0; j < nAxes[i]; j++) nPlanes = getPlane(nPlanes, axes[i][j].normalOrAxis, atoms, elements, center); return nPlanes; @@ -740,32 +800,38 @@ final static String[] typeNames = { "plane", "proper axis", "improper axis", "center of inversion" }; + int nOps = 0; public class Operation { - int type; int order; + int index; Vector3f normalOrAxis; Operation() { + index = ++nOps; type = OPERATION_INVERSION_CENTER; - //if (Logger.debugging) + order = 1; + if (Logger.debugging) Logger.info("new operation -- " + typeNames[type]); - order = 1; } Operation(Vector3f v, int i) { + index = ++nOps; type = (i < firstProper ? OPERATION_IMPROPER_AXIS : OPERATION_PROPER_AXIS); order = i % firstProper; normalOrAxis = new Quaternion(v, 180).getNormal(); - //if (Logger.debugging) + if (Logger.debugging) Logger.info("new operation -- " + (order == i ? "S" : "C") + order + " " + normalOrAxis); } Operation(Vector3f v) { + if (v == null) + return; + index = ++nOps; type = OPERATION_PLANE; normalOrAxis = new Quaternion(v, 180).getNormal(); - //if (Logger.debugging) + if (Logger.debugging) Logger.info("new operation -- plane " + normalOrAxis); } @@ -785,57 +851,84 @@ } } - public String getInfo(boolean asDraw) { + public String getInfo(boolean asDraw, String type, int index, + float scaleFactor) { Vector3f v = new Vector3f(); Operation op; + if (scaleFactor == 0) + scaleFactor = 1; int[][] nType = new int[4][2]; for (int i = 1; i < maxAxis; i++) for (int j = nAxes[i]; --j >= 0;) nType[axes[i][j].type][0]++; StringBuffer sb = new StringBuffer("# " + nAtoms + " atoms\n"); if (asDraw) { + boolean haveType = (type.length() > 0); + boolean anyProperAxis = (type.equalsIgnoreCase("Cn")); + boolean anyImproperAxis = (type.equalsIgnoreCase("Sn")); + sb.append("set perspectivedepth off;\n"); String m = "_" + modelIndex + "_"; - sb.append("draw delete pg0" + m + "*;draw delete pgva" + m + "*;draw delete pgvp" + m + "*;"); - sb.append("set perspectivedepth off;\n"); - sb.append("draw pg0").append(m).append(haveInversionCenter ? "inv " : " "); - sb.append(Escape.escape(center) + (haveInversionCenter ? "\"i\";\n" : ";\n")); + if (!haveType) + sb.append("draw delete pg0" + m + "*;draw delete pgva" + m + + "*;draw delete pgvp" + m + "*;"); + if (!haveType || type.equalsIgnoreCase("Ci")) + sb.append("draw pg0").append(m).append( + haveInversionCenter ? "inv " : " ").append( + Escape.escape(center) + (haveInversionCenter ? "\"i\";\n" : ";\n")); for (int i = 2; i < maxAxis; i++) { + if (nAxes[i] == 0) + continue; + String label = axes[i][0].getLabel(); + if (!haveType || type.equalsIgnoreCase(label) + || anyProperAxis && i >= firstProper + || anyImproperAxis && i < firstProper) for (int j = 0; j < nAxes[i]; j++) { + if (index > 0 && j + 1 != index) + continue; op = axes[i][j]; v.set(op.normalOrAxis); v.add(center); - float scale = (4.0f + op.order / 4.0f) - * (op.type == OPERATION_IMPROPER_AXIS ? -1 : 1); - sb.append("draw pgva").append(m).append(op.getLabel()).append("_").append(j + 1) - .append(" width 0.05 scale " + scale + " ").append( - Escape.escape(v)); + float scale = scaleFactor * (4.0f + op.order / 4.0f) + * (op.type == OPERATION_IMPROPER_AXIS ? -1 : 1); + sb.append("draw pgva").append(m).append(label).append("_").append( + j + 1).append(" width 0.05 scale " + scale + " ").append( + Escape.escape(v)); + v.scaleAdd(-2, op.normalOrAxis, v); + sb.append(Escape.escape(v)).append("\"" + label + + (op.index == principalAxis.index ? "*" : "") + "\" color ").append( + op.index == principalAxis.index ? "red" + : op.type == OPERATION_IMPROPER_AXIS ? "blue" : "yellow") + .append(";\n"); + } + } + if (!haveType || type.equalsIgnoreCase("Cs")) + for (int j = 0; j < nAxes[0]; j++) { + if (index > 0 && j + 1 != index) + continue; + op = axes[0][j]; + v.set(op.normalOrAxis); + v.scale(0.025f); + v.add(center); + sb.append("draw pgvp").append(m).append(j + 1).append( + "disk width " + (scaleFactor * 6.0) + " cylinder ").append( + Escape.escape(v)); + v.scaleAdd(-0.05f, op.normalOrAxis, v); + sb.append(Escape.escape(v)).append(" color translucent yellow;\n"); + v.set(op.normalOrAxis); + v.add(center); + sb.append("draw pgvp").append(m).append(j + 1).append( + "ring width 0.05 scale " + (scaleFactor * 3.0) + " arc ").append( + Escape.escape(v)); v.scaleAdd(-2, op.normalOrAxis, v); - sb.append(Escape.escape(v)).append("\"" + op.getLabel() + "\"") - .append(op.type == OPERATION_IMPROPER_AXIS ? " color red" : "") + sb.append(Escape.escape(v)); + v.x += 0.011; + v.y += 0.012; + v.z += 0.013; + sb.append(Escape.escape(v)) + .append("{0 360 0.5} color ") + .append(op.index == principalPlane.index ? "red" : "blue") .append(";\n"); } - } - for (int j = 0; j < nAxes[0]; j++) { - op = axes[0][j]; - v.set(op.normalOrAxis); - v.scale(0.025f); - v.add(center); - sb.append("draw pgvp").append(m).append(j + 1).append("disk width 6.0 cylinder ") - .append(Escape.escape(v)); - v.scaleAdd(-0.05f, op.normalOrAxis, v); - sb.append(Escape.escape(v)).append(" color translucent;\n"); - - v.set(op.normalOrAxis); - v.add(center); - sb.append("draw pgvp").append(m).append(j + 1).append( - "ring width 0.05 scale 3.0 arc ").append(Escape.escape(v)); - v.scaleAdd(-2, op.normalOrAxis, v); - sb.append(Escape.escape(v)); - v.x += 0.011; - v.y += 0.012; - v.z += 0.013; - sb.append(Escape.escape(v)).append("{0 360 0.5} color red;\n"); - } sb.append("# name=" + name); sb.append(", nCi=" + (haveInversionCenter ? 1 : 0)); sb.append(", nCs=" + nAxes[0]); @@ -871,24 +964,24 @@ sb.append("\n"); sb.append("\n" + name + "\ttype\tnType\tnUnique"); sb.append("\n" + name + "\tE\t 1\t 1"); - + n = (haveInversionCenter ? 1 : 0); sb.append("\n" + name + "\tCi\t " + n + "\t " + n); - + sb.append("\n" + name + "\tCs\t"); - TextFormat.rFill(sb, " ",nAxes[0] + "\t"); - TextFormat.rFill(sb, " ",nAxes[0] + "\n"); + TextFormat.rFill(sb, " ", nAxes[0] + "\t"); + TextFormat.rFill(sb, " ", nAxes[0] + "\n"); sb.append(name + "\tCn\t"); - TextFormat.rFill(sb, " ",nType[OPERATION_PROPER_AXIS][0] + "\t"); - TextFormat.rFill(sb, " ",nType[OPERATION_PROPER_AXIS][1] + "\n"); + TextFormat.rFill(sb, " ", nType[OPERATION_PROPER_AXIS][0] + "\t"); + TextFormat.rFill(sb, " ", nType[OPERATION_PROPER_AXIS][1] + "\n"); sb.append(name + "\tSn\t"); - TextFormat.rFill(sb, " ",nType[OPERATION_IMPROPER_AXIS][0] + "\t"); - TextFormat.rFill(sb, " ",nType[OPERATION_IMPROPER_AXIS][1] + "\n"); - + TextFormat.rFill(sb, " ", nType[OPERATION_IMPROPER_AXIS][0] + "\t"); + TextFormat.rFill(sb, " ", nType[OPERATION_IMPROPER_AXIS][1] + "\n"); + sb.append(name + "\t\tTOTAL\t"); - TextFormat.rFill(sb, " ",nTotal + "\n"); + TextFormat.rFill(sb, " ", nTotal + "\n"); } return sb.toString(); } Modified: trunk/Jmol/src/org/jmol/util/Quaternion.java =================================================================== --- trunk/Jmol/src/org/jmol/util/Quaternion.java 2008-08-07 19:09:42 UTC (rev 9692) +++ trunk/Jmol/src/org/jmol/util/Quaternion.java 2008-08-08 15:15:03 UTC (rev 9693) @@ -365,7 +365,8 @@ } private void fixQ(Quaternion qNew) { - float f = (q0 < 0 ? -1 : 1); + float f = (q0 < 0 || q0 == 0 + && (q1 < 0 || q1 == 0 && (q2 < 0 || q2 == 0 && q3 < 0)) ? -1 : 1); qNew.q0 = q0 * f; qNew.q1 = q1 * f; qNew.q2 = q2 * f; Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-08-07 19:09:42 UTC (rev 9692) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-08-08 15:15:03 UTC (rev 9693) @@ -6005,7 +6005,7 @@ } break; case 3: - if (parameterAsString(1).equalsIgnoreCase("scale")) { + if (tokAt(1) == Token.scale) { setFloatProperty("vectorScale", floatParameter(2, -10, 10)); return; } @@ -6176,12 +6176,11 @@ checkLength(2); period = floatParameter(1); break; + case Token.scale: + setFloatProperty("vibrationScale", floatParameter(2, -10, 10)); + return; case Token.identifier: String cmd = optParameterAsString(1); - if (cmd.equalsIgnoreCase("scale")) { - setFloatProperty("vibrationScale", floatParameter(2, -10, 10)); - return; - } if (cmd.equalsIgnoreCase("period")) { setFloatProperty("vibrationPeriod", floatParameter(2)); return; @@ -6231,12 +6230,7 @@ } return; case Token.pointgroup: - if (isSyntaxCheck) - return; - if (tokAt(0) == Token.draw) - runScript(viewer.getPointGroupAsString(true)); - else - showString(viewer.calculatePointGroup()); + pointGroup(); return; case Token.surface: isSurface = true; @@ -6298,6 +6292,32 @@ "aromatic? hbonds? polymers? straightness? structure? surfaceDistance FROM? surfaceDistance WITHIN?"); } + private void pointGroup() throws ScriptException { + switch (tokAt(0)) { + case Token.calculate: + if (!isSyntaxCheck) + showString(viewer.calculatePointGroup()); + return; + case Token.show: + if (!isSyntaxCheck) + showString(viewer.getPointGroupAsString(false, null, 0, 0)); + return; + } + // draw pointgroup [C2|C3|Cs|Ci|etc.] [n] [scale x] + int pt = 2; + String type = (tokAt(pt) == Token.scale ? "" : optParameterAsString(pt)); + float scale = 1; + int index = 0; + if (type.length() > 0) { + if (isFloatParameter(++pt)) + index = intParameter(pt++); + } + if (tokAt(pt) == Token.scale) + scale = floatParameter(++pt); + if (!isSyntaxCheck) + runScript(viewer.getPointGroupAsString(true, type, index, scale)); + } + private void dots(int iShape) throws ScriptException { if (!isSyntaxCheck) viewer.loadShape(iShape); @@ -8951,7 +8971,7 @@ return ""; } } else if (data == "PGRP") { - data = viewer.getPointGroupAsString((type2.equals("draw"))); + data = viewer.getPointGroupAsString(type2.equals("draw"), null, 0, 1.0f); } else if (data == "PDB") { data = viewer.getPdbData(null); } else if (data == "XYZ" || data == "MOL") { @@ -9347,9 +9367,8 @@ msg = viewer.getPDBHeader(); break; case Token.pointgroup: - if (!isSyntaxCheck) - msg = viewer.getPointGroupAsString(false); - break; + pointGroup(); + return; case Token.symmetry: if (!isSyntaxCheck) msg = viewer.getSymmetryInfoAsString(); @@ -9601,7 +9620,7 @@ return; break; case Token.pointgroup: - calculate(); + pointGroup(); return; case Token.quaternion: dataFrame(JmolConstants.JMOL_DATA_QUATERNION); @@ -9699,6 +9718,18 @@ intScale = intParameter(i); } break; + case Token.scale: + if (++i >= statementLength) + error(ERROR_numberExpected); + switch (getToken(i).tok) { + case Token.integer: + intScale = intParameter(i); + continue; + case Token.decimal: + intScale = (int) (floatParameter(i) * 100); + continue; + } + error(ERROR_numberExpected); case Token.times: case Token.identifier: String str = parameterAsString(i); @@ -9768,20 +9799,6 @@ propertyValue = pt; break; } - if (str.equalsIgnoreCase("SCALE")) { - if (++i >= statementLength) - error(ERROR_numberExpected); - switch (getToken(i).tok) { - case Token.integer: - intScale = intParameter(i); - continue; - case Token.decimal: - intScale = (int) (floatParameter(i) * 100); - continue; - default: - error(ERROR_numberExpected); - } - } if (str.equalsIgnoreCase("DIAMETER")) { //pixels propertyValue = new Float(floatParameter(++i)); propertyName = (tokAt(i) == Token.decimal ? "width" : "diameter"); @@ -9812,7 +9829,7 @@ break; case Token.color: i++; - //fall through + //fall through case Token.translucent: case Token.opaque: isTranslucent = false; @@ -9856,8 +9873,8 @@ setShapeProperty(JmolConstants.SHAPE_DRAW, "set", null); } if (colorArgb != Integer.MIN_VALUE) - setShapeProperty(JmolConstants.SHAPE_DRAW, "color", new Integer( - colorArgb)); + setShapeProperty(JmolConstants.SHAPE_DRAW, "color", + new Integer(colorArgb)); if (isTranslucent) setShapeTranslucency(JmolConstants.SHAPE_DRAW, "", "translucent", translucentLevel); @@ -9865,7 +9882,7 @@ setShapeProperty(JmolConstants.SHAPE_DRAW, "scale", new Integer(intScale)); } if (iptDisplayProperty > 0) { - if (!setMeshDisplayProperty(JmolConstants.SHAPE_DRAW, iptDisplayProperty, + if (!setMeshDisplayProperty(JmolConstants.SHAPE_DRAW, iptDisplayProperty, getToken(iptDisplayProperty).tok)) error(ERROR_invalidArgument); } @@ -10178,13 +10195,12 @@ propertyValue = parameterAsString(++i); } break; + case Token.scale: + propertyName = "scale"; + propertyValue = new Float(floatParameter(++i)); + break; case Token.identifier: String str = parameterAsString(i); - if (str.equalsIgnoreCase("SCALE")) { - propertyName = "scale"; - propertyValue = new Float(floatParameter(++i)); - break; - } if (str.equalsIgnoreCase("MOLECULAR")) { propertyName = "molecular"; break; @@ -10257,6 +10273,10 @@ propertyName = "plane"; propertyValue = planeParameter(2); break; + case Token.scale: + propertyName = "scale"; + propertyValue = new Float(floatParameter(2)); + break; case Token.identifier: str = parameterAsString(1); if ((offset = moOffset(1)) != Integer.MAX_VALUE) { @@ -10279,11 +10299,6 @@ propertyValue = new Float(floatParameter(2)); break; } - if (str.equalsIgnoreCase("SCALE")) { - propertyName = "scale"; - propertyValue = new Float(floatParameter(2)); - break; - } if (str.equalsIgnoreCase("SQUARED")) { propertyName = "squareData"; propertyValue = Boolean.TRUE; @@ -10624,6 +10639,10 @@ propertyValue = planeParameter(++i); i = iToken; break; + case Token.scale: + propertyName = "scale"; + propertyValue = new Float(floatParameter(++i)); + break; case Token.identifier: str = parameterAsString(i); if (str.equalsIgnoreCase("id")) { @@ -10697,11 +10716,6 @@ propertyValue = Boolean.FALSE; break; } - if (str.equalsIgnoreCase("SCALE")) { - propertyName = "scale"; - propertyValue = new Float(floatParameter(++i)); - break; - } if (str.equalsIgnoreCase("MINSET")) { propertyName = "minset"; propertyValue = new Integer(intParameter(++i)); Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-07 19:09:42 UTC (rev 9692) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-08 15:15:03 UTC (rev 9693) @@ -3,6 +3,11 @@ version=11.6.RC3_dev +# new feature: set dotDensity [-3 to 3] +# bug fix: minor error in pointgroup +# new feature: draw pointGroup [type] [index] SCALE [x] +# where [type] is one of Cs, Ci, Cn, or Sn, where n is an integer or the character "n" + # ----------------------------------------------------------------------------- #version=11.6.RC2 Modified: trunk/Jmol/src/org/jmol/viewer/StateManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/StateManager.java 2008-08-07 19:09:42 UTC (rev 9692) +++ trunk/Jmol/src/org/jmol/viewer/StateManager.java 2008-08-08 15:15:03 UTC (rev 9693) @@ -564,6 +564,7 @@ boolean displayCellParameters = true; boolean dotsSelectedOnly = false; boolean dotSurface = true; + int dotDensity = 3; boolean dynamicMeasurements = false; boolean greyscaleRendering = false; boolean isosurfacePropertySmoothing = true; @@ -1128,6 +1129,7 @@ setParameterValue("dipoleScale", dipoleScale); setParameterValue("disablePopupMenu", disablePopupMenu); setParameterValue("displayCellParameters", displayCellParameters); + setParameterValue("dotDensity", dotDensity); setParameterValue("dotsSelectedOnly", dotsSelectedOnly); setParameterValue("dotSurface", dotSurface); setParameterValue("drawHover", false); Modified: trunk/Jmol/src/org/jmol/viewer/Token.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Token.java 2008-08-07 19:09:42 UTC (rev 9692) +++ trunk/Jmol/src/org/jmol/viewer/Token.java 2008-08-08 15:15:03 UTC (rev 9693) @@ -957,6 +957,7 @@ final static int absolute = misc | 1; final static int average = misc | 2; + final static int axis = misc | 3; final static int babel = misc | 4; final static int back = misc | 5; final public static int backlit = misc | 6; @@ -1010,20 +1011,21 @@ final static int rotation = misc | 50; final static int rubberband = misc | 51; final static int sasurface = misc | 52; - final static int shape = misc | 53; - final static int shapely = misc | 54; - final static int solid = misc | 55; - final static int spacegroup = misc | 56; - final static int state = misc | 57; - final static int top = misc | 58; - final static int torsion = misc | 59; - final static int transform = misc | 60; - final static int translation = misc | 61; - final public static int translucent = misc | 62; - final public static int triangles = misc | 63; - final static int url = misc | 64; - final static int user = misc | 65; //color option - final static int qw = misc | 66; + final static int scale = misc | 53; + final static int shape = misc | 54; + final static int shapely = misc | 55; + final static int solid = misc | 56; + final static int spacegroup = misc | 57; + final static int state = misc | 58; + final static int top = misc | 59; + final static int torsion = misc | 60; + final static int transform = misc | 61; + final static int translation = misc | 62; + final public static int translucent = misc | 63; + final public static int triangles = misc | 64; + final static int url = misc | 65; + final static int user = misc | 66; //color option + final static int qw = misc | 67; // predefined Tokens: @@ -1214,7 +1216,8 @@ "fontsize", new Token(fontsize), "picking", new Token(picking), "pickingStyle", new Token(pickingStyle), - "radius", new Token(radius), + "radius", new Token(radius), + "scale", new Token(scale), "scale3D", new Token(scale3d), // lighting @@ -1232,7 +1235,8 @@ // show parameters "atom", new Token(atoms), - "atoms", null, + "atoms", null, + "axis", new Token(axis), "axisangle", new Token(axisangle), "orientation", new Token(orientation), "pdbheader", new Token(pdbheader), Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-08-07 19:09:42 UTC (rev 9692) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-08-08 15:15:03 UTC (rev 9693) @@ -4513,6 +4513,13 @@ private void setIntProperty(String key, int value, boolean defineNew) { boolean notFound = false; while (true) { + + //11.6.RC2// + if (key.equalsIgnoreCase("dotDensity")) { + setDotDensity(value); + break; + } + //11.5.30// // ellipsoidDotCount" just handled as getParameter() @@ -5194,6 +5201,15 @@ global.dotsSelectedOnly = TF; } + private void setDotDensity(int value) { + global.dotDensity = value; + refresh(0, "Viewer:setDotDensity()"); + } + + public int getDotDensity() { + return global.dotDensity; + } + public boolean isRangeSelected() { return global.rangeSelected; } @@ -6835,8 +6851,10 @@ return modelSet.calculatePointGroup(selectionManager.bsSelection); } - public String getPointGroupAsString(boolean asDraw) { - return modelSet.getPointGroupAsString(selectionManager.bsSelection, asDraw); + public String getPointGroupAsString(boolean asDraw, String type, int index, + float scale) { + return modelSet.getPointGroupAsString(selectionManager.bsSelection, asDraw, + type, index, scale); } private void setPointGroupTolerance(float value, int type) { @@ -6877,5 +6895,5 @@ } return image; } - + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-08-08 19:53:43
|
Revision: 9696 http://jmol.svn.sourceforge.net/jmol/?rev=9696&view=rev Author: hansonr Date: 2008-08-08 19:53:36 +0000 (Fri, 08 Aug 2008) Log Message: ----------- 11.6.RC3 -- final revision # bug fix: minor error in pointgroup; dimension tied to radius Modified Paths: -------------- trunk/Jmol/src/org/jmol/modelset/ModelSet.java trunk/Jmol/src/org/jmol/symmetry/PointGroup.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/jmol/modelset/ModelSet.java =================================================================== --- trunk/Jmol/src/org/jmol/modelset/ModelSet.java 2008-08-08 19:39:49 UTC (rev 9695) +++ trunk/Jmol/src/org/jmol/modelset/ModelSet.java 2008-08-08 19:53:36 UTC (rev 9696) @@ -459,8 +459,8 @@ Object obj = getShapeProperty(JmolConstants.SHAPE_VECTORS, "mad", iAtom); boolean haveVibration = (obj != null && ((Integer) obj).intValue() != 0 || viewer .isVibrationOn()); - return new PointGroup(atoms, bs, haveVibration, modelIndex, viewer - .getPointGroupTolerance(0), viewer.getPointGroupTolerance(1)); + return new PointGroup(atoms, bs, haveVibration, modelIndex, + viewer.getPointGroupTolerance(0), viewer.getPointGroupTolerance(1)); } private BitSet modelsOf(BitSet bsAtoms, BitSet bsAllAtoms) { Modified: trunk/Jmol/src/org/jmol/symmetry/PointGroup.java =================================================================== --- trunk/Jmol/src/org/jmol/symmetry/PointGroup.java 2008-08-08 19:39:49 UTC (rev 9695) +++ trunk/Jmol/src/org/jmol/symmetry/PointGroup.java 2008-08-08 19:53:36 UTC (rev 9696) @@ -115,10 +115,11 @@ private int[] nAxes = new int[maxAxis]; private Operation[][] axes = new Operation[maxAxis][]; private int nAtoms; - private String name = "C_1?"; + private float radius; private int modelIndex; private float distanceTolerance = 0.2f; private float linearTolerance = 0.99f; // 8 degrees + private String name = "C_1?"; private Operation principalAxis = new Operation(null); private Operation principalPlane = new Operation(null); @@ -133,16 +134,18 @@ private final Vector3f vTemp = new Vector3f(); private int centerAtomIndex = -1; private boolean haveInversionCenter; - + final private Point3f center = new Point3f(); - public PointGroup(Atom[] atomset, BitSet bsAtoms, boolean haveVibration, - int modelIndex, float distanceTolerance, float linearTolerance) { + public PointGroup(Atom[] atomset, BitSet bsAtoms, + boolean haveVibration, int modelIndex, + float distanceTolerance, float linearTolerance) { this.modelIndex = modelIndex; this.distanceTolerance = distanceTolerance; this.linearTolerance = (float) (Math.cos(linearTolerance / 180 * Math.PI)); + Point3f[] atoms; - if ((atoms = getCenter(atomset, bsAtoms)) == null) { + if ((atoms = getAtoms(atomset, bsAtoms)) == null) { Logger.error("Too many atoms for point group calculation"); name = "point group not determined -- atomCount > " + ATOM_COUNT_MAX + " -- select fewer atoms and try again."; @@ -276,7 +279,6 @@ name = "C" + n + "h"; } } - //System.out.println(drawInfo()); } private Operation setPrincipalAxis(int n, int nPlanes) { @@ -321,7 +323,7 @@ } private final static int ATOM_COUNT_MAX = 100; - private Atom[] getCenter(Atom[] atomset, BitSet bsAtoms) { + private Atom[] getAtoms(Atom[] atomset, BitSet bsAtoms) { int atomCount = BitSetUtil.cardinalityOf(bsAtoms); if (atomCount > ATOM_COUNT_MAX) return null; @@ -335,11 +337,12 @@ center.add(atoms[nAtoms++]); } center.scale(1f / nAtoms); - for (int i = nAtoms; --i >= 0;) - if (atoms[i].distance(center) < 0.1) { + for (int i = nAtoms; --i >= 0;) { + float r = center.distance(atoms[i]); + if (r < distanceTolerance) centerAtomIndex = i; - break; - } + radius = Math.max(radius, r); + } return atoms; } @@ -389,8 +392,6 @@ if (j == i || elements[j] != e1) continue; Point3f a2 = atoms[j]; - // System.out.println(i + " " + j + " " + a1 + " " + a2 + " " + pt - // + nFound + " " + pt.distance(a2)); if (pt.distance(a2) < distanceTolerance) { nFound++; continue out; @@ -693,7 +694,6 @@ private boolean haveAxis(int iOrder, Vector3f v) { if (nAxes[iOrder] == axesMaxN[iOrder]) { - //System.out.println(iOrder + " " + (iOrder-firstProper) + " is maxed at " + axesMaxN[iOrder]); return true; } if (nAxes[iOrder] > 0) @@ -875,31 +875,36 @@ sb.append("draw pg0").append(m).append( haveInversionCenter ? "inv " : " ").append( Escape.escape(center) + (haveInversionCenter ? "\"i\";\n" : ";\n")); + float offset = 0.1f; for (int i = 2; i < maxAxis; i++) { + if (i == firstProper) + offset = 0.1f; if (nAxes[i] == 0) continue; String label = axes[i][0].getLabel(); - if (!haveType || type.equalsIgnoreCase(label) - || anyProperAxis && i >= firstProper - || anyImproperAxis && i < firstProper) - for (int j = 0; j < nAxes[i]; j++) { - if (index > 0 && j + 1 != index) - continue; - op = axes[i][j]; - v.set(op.normalOrAxis); - v.add(center); - float scale = scaleFactor * (4.0f + op.order / 4.0f) - * (op.type == OPERATION_IMPROPER_AXIS ? -1 : 1); + offset += 0.25f; + float scale = scaleFactor * radius + offset; + if (!haveType || type.equalsIgnoreCase(label) || anyProperAxis + && i >= firstProper || anyImproperAxis && i < firstProper) + for (int j = 0; j < nAxes[i]; j++) { + if (index > 0 && j + 1 != index) + continue; + op = axes[i][j]; + v.set(op.normalOrAxis); + v.add(center); + if (op.type == OPERATION_IMPROPER_AXIS) + scale = -scale; sb.append("draw pgva").append(m).append(label).append("_").append( j + 1).append(" width 0.05 scale " + scale + " ").append( Escape.escape(v)); v.scaleAdd(-2, op.normalOrAxis, v); - sb.append(Escape.escape(v)).append("\"" + label + - (op.index == principalAxis.index ? "*" : "") + "\" color ").append( + sb.append(Escape.escape(v)).append( + "\"" + label + (op.index == principalAxis.index ? "*" : "") + + "\" color ").append( op.index == principalAxis.index ? "red" : op.type == OPERATION_IMPROPER_AXIS ? "blue" : "yellow") .append(";\n"); - } + } } if (!haveType || type.equalsIgnoreCase("Cs")) for (int j = 0; j < nAxes[0]; j++) { @@ -910,24 +915,22 @@ v.scale(0.025f); v.add(center); sb.append("draw pgvp").append(m).append(j + 1).append( - "disk width " + (scaleFactor * 6.0) + " cylinder ").append( - Escape.escape(v)); + "disk width " + (scaleFactor * radius * 2) + " cylinder ") + .append(Escape.escape(v)); v.scaleAdd(-0.05f, op.normalOrAxis, v); sb.append(Escape.escape(v)).append(" color translucent yellow;\n"); v.set(op.normalOrAxis); v.add(center); sb.append("draw pgvp").append(m).append(j + 1).append( - "ring width 0.05 scale " + (scaleFactor * 3.0) + " arc ").append( - Escape.escape(v)); + "ring width 0.05 scale " + (scaleFactor * radius) + " arc ") + .append(Escape.escape(v)); v.scaleAdd(-2, op.normalOrAxis, v); sb.append(Escape.escape(v)); v.x += 0.011; v.y += 0.012; v.z += 0.013; - sb.append(Escape.escape(v)) - .append("{0 360 0.5} color ") - .append(op.index == principalPlane.index ? "red" : "blue") - .append(";\n"); + sb.append(Escape.escape(v)).append("{0 360 0.5} color ").append( + op.index == principalPlane.index ? "red" : "blue").append(";\n"); } sb.append("# name=" + name); sb.append(", nCi=" + (haveInversionCenter ? 1 : 0)); Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-08 19:39:49 UTC (rev 9695) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-08 19:53:36 UTC (rev 9696) @@ -1,14 +1,10 @@ # Developers: to add a description of changes you have made, # add it on a line starting with # below the "version=..." line -version=11.6.RC4_dev - -# ----------------------------------------------------------------------------- - #version=11.6.RC3 +# bug fix: minor error in pointgroup; dimension tied to radius # new feature: set dotDensity [-3 to 3] -# bug fix: minor error in pointgroup # new feature: draw pointGroup [type] [index] SCALE [x] # where [type] is one of Cs, Ci, Cn, or Sn, where n is an integer or the character "n" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-08-11 13:03:11
|
Revision: 9704 http://jmol.svn.sourceforge.net/jmol/?rev=9704&view=rev Author: hansonr Date: 2008-08-11 13:02:36 +0000 (Mon, 11 Aug 2008) Log Message: ----------- version=11.6.RC5_dev # new feature: background IMAGE "filename" Modified Paths: -------------- trunk/Jmol/src/org/jmol/api/JmolExportInterface.java trunk/Jmol/src/org/jmol/api/JmolRendererInterface.java trunk/Jmol/src/org/jmol/export/Export3D.java trunk/Jmol/src/org/jmol/export/_MayaExporter.java trunk/Jmol/src/org/jmol/export/_PovrayExporter.java trunk/Jmol/src/org/jmol/export/_VrmlExporter.java trunk/Jmol/src/org/jmol/g3d/Graphics3D.java trunk/Jmol/src/org/jmol/g3d/Text3D.java trunk/Jmol/src/org/jmol/shape/Text.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/StateManager.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/api/JmolExportInterface.java =================================================================== --- trunk/Jmol/src/org/jmol/api/JmolExportInterface.java 2008-08-10 19:48:31 UTC (rev 9703) +++ trunk/Jmol/src/org/jmol/api/JmolExportInterface.java 2008-08-11 13:02:36 UTC (rev 9704) @@ -77,7 +77,7 @@ abstract void plotText(int x, int y, int z, int argb, String text, Font3D font3d); - abstract void plotImage(int x, int y, int z, Image image, int width, int height, short bgcolix); + abstract void plotImage(int x, int y, int z, Image image, short bgcolix); // NOT IMPLEMENTED, but could be if needed: Modified: trunk/Jmol/src/org/jmol/api/JmolRendererInterface.java =================================================================== --- trunk/Jmol/src/org/jmol/api/JmolRendererInterface.java 2008-08-10 19:48:31 UTC (rev 9703) +++ trunk/Jmol/src/org/jmol/api/JmolRendererInterface.java 2008-08-11 13:02:36 UTC (rev 9704) @@ -320,7 +320,7 @@ public abstract void renderEllipsoid(int x, int y, int z, int diameter, Matrix3f mToEllipsoidal, double[] coef, Matrix4f mDeriv, int selectedOctant, Point3i[] octantPoints); - public abstract void drawImage(Image image, int x, int y, int z, int zslab, int width, int height, short bgcolix); + public abstract void drawImage(Image image, int x, int y, int z, int zslab, short bgcolix); } Modified: trunk/Jmol/src/org/jmol/export/Export3D.java =================================================================== --- trunk/Jmol/src/org/jmol/export/Export3D.java 2008-08-10 19:48:31 UTC (rev 9703) +++ trunk/Jmol/src/org/jmol/export/Export3D.java 2008-08-11 13:02:36 UTC (rev 9704) @@ -294,14 +294,13 @@ z, getColixArgb(colix), str, font3d); } - public void drawImage(Image image, int x, int y, int z, int zSlab, int width, - int height, short bgcolix) { + public void drawImage(Image image, int x, int y, int z, int zSlab, short bgcolix) { if (image == null || width == 0 || height == 0) return; if (isClippedZ(zSlab)) return; z = Math.max(slab, z); - exporter.plotImage(x, y, z, image, width, height, bgcolix); + exporter.plotImage(x, y, z, image, bgcolix); } //mostly public drawing methods -- add "public" if you need to Modified: trunk/Jmol/src/org/jmol/export/_MayaExporter.java =================================================================== --- trunk/Jmol/src/org/jmol/export/_MayaExporter.java 2008-08-10 19:48:31 UTC (rev 9703) +++ trunk/Jmol/src/org/jmol/export/_MayaExporter.java 2008-08-11 13:02:36 UTC (rev 9704) @@ -229,7 +229,7 @@ } - public void plotImage(int x, int y, int z, Image image, int width, int height, short bgcolix) { + public void plotImage(int x, int y, int z, Image image, short bgcolix) { // TODO } Modified: trunk/Jmol/src/org/jmol/export/_PovrayExporter.java =================================================================== --- trunk/Jmol/src/org/jmol/export/_PovrayExporter.java 2008-08-10 19:48:31 UTC (rev 9703) +++ trunk/Jmol/src/org/jmol/export/_PovrayExporter.java 2008-08-11 13:02:36 UTC (rev 9704) @@ -629,9 +629,9 @@ output("// end text " + nText + ": " + text + "\n"); } - public void plotImage(int x, int y, int z, Image image, int width, int height, short bgcolix) { + public void plotImage(int x, int y, int z, Image image, short bgcolix) { output("// start image " + (++nImage) + "\n"); - g3d.plotImage(x, y, z, image, width, height, jmolRenderer, bgcolix); + g3d.plotImage(x, y, z, image, jmolRenderer, bgcolix); output("// end image " + nImage + "\n"); } // not needed: Modified: trunk/Jmol/src/org/jmol/export/_VrmlExporter.java =================================================================== --- trunk/Jmol/src/org/jmol/export/_VrmlExporter.java 2008-08-10 19:48:31 UTC (rev 9703) +++ trunk/Jmol/src/org/jmol/export/_VrmlExporter.java 2008-08-11 13:02:36 UTC (rev 9704) @@ -240,7 +240,7 @@ } - public void plotImage(int x, int y, int z, Image image, int width, int height, short bgcolix) { + public void plotImage(int x, int y, int z, Image image, short bgcolix) { // TODO } Modified: trunk/Jmol/src/org/jmol/g3d/Graphics3D.java =================================================================== --- trunk/Jmol/src/org/jmol/g3d/Graphics3D.java 2008-08-10 19:48:31 UTC (rev 9703) +++ trunk/Jmol/src/org/jmol/g3d/Graphics3D.java 2008-08-11 13:02:36 UTC (rev 9704) @@ -351,6 +351,8 @@ setWidthHeight(antialiasThisFrame); //setRectClip(clipX, clipY, clipWidth, clipHeight); platform.obtainScreenBuffer(); + if (backgroundImage != null) + plotImage(Integer.MIN_VALUE, 0, Integer.MIN_VALUE, backgroundImage, null, (short) 0); } private void releaseBuffers() { @@ -490,6 +492,7 @@ } private int backgroundArgb; + private Image backgroundImage; public int bgcolor; /** @@ -502,8 +505,14 @@ bgcolor = argb; backgroundArgb = argb + ((argb & 0xFF) == 0xFF ? -1 : 1); platform.setBackground(backgroundArgb); + backgroundImage = null; } + public void setBackgroundImage(Image image) { + backgroundImage = image; + } + + /** * controls greyscale rendering * @param greyscaleMode Flag for greyscale rendering @@ -1033,22 +1042,20 @@ antialiasThisFrame); } - public void drawImage(Image image, int x, int y, int z, int zSlab, int width, int height, short bgcolix) { + public void drawImage(Image image, int x, int y, int z, int zSlab, short bgcolix) { if (image == null || width == 0 || height == 0) return; if (isClippedZ(zSlab)) return; - plotImage(x, y, z, image, width, height, null, bgcolix); + plotImage(x, y, z, image, null, bgcolix); } - public void plotImage(int x, int y, int z, Image image, int width, - int height, JmolRendererInterface jmolRenderer, + public void plotImage(int x, int y, int z, Image image, JmolRendererInterface jmolRenderer, short bgcolix) { setColix(bgcolix); if (bgcolix == 0) argbCurrent = 0; - Text3D.plotImage(x, y, z, image, width, height, this, jmolRenderer, - antialiasThisFrame, argbCurrent); + Text3D.plotImage(x, y, z, image, this, jmolRenderer, antialiasThisFrame, argbCurrent); } public void setFont(byte fid) { Modified: trunk/Jmol/src/org/jmol/g3d/Text3D.java =================================================================== --- trunk/Jmol/src/org/jmol/g3d/Text3D.java 2008-08-10 19:48:31 UTC (rev 9703) +++ trunk/Jmol/src/org/jmol/g3d/Text3D.java 2008-08-11 13:02:36 UTC (rev 9704) @@ -108,21 +108,33 @@ return textWidth; } - public static void plotImage(int x, int y, int z, Image image, int width, - int height, Graphics3D g3d, - JmolRendererInterface jmolRenderer, - boolean antialias, int argbBackground) { + public static void plotImage(int x, int y, int z, Image image, Graphics3D g3d, + JmolRendererInterface jmolRenderer, boolean antialias, + int argbBackground) { //System.out.println(x + " " + width + ", " + y + " " + height + " w/h " + g3d.width + " " + g3d.height + " " + g3d.isAntialiased()); - if (g3d.isAntialiased()) { + boolean isBackground = (x == Integer.MIN_VALUE); + int width = image.getWidth(null); + int height = image.getHeight(null); + if (isBackground) { + x = 0; + z = Integer.MAX_VALUE - 1; + width = g3d.width; + height = g3d.height; + } else if (x + width < 0 || x > g3d.width || y + height < 0 || y > g3d.height) { + return; + } else if (g3d.isAntialiased()) { width += width; height += height; } - if (x + width < 0 || x > g3d.width || y + height < 0 || y > g3d.height) - return; + g3d.platform.checkOffscreenSize(width, height); Graphics g = g3d.platform.gOffscreen; g.clearRect(0,0,width,height); - if (g3d.isAntialiased()) { + if (isBackground) { + g.drawImage(image, 0, 0, width, height, 0, 0, image.getWidth(null), image.getHeight(null), null); + width = g3d.width; + height = g3d.height; + } else if (g3d.isAntialiased()) { g.drawImage(image, 0, 0, width, height, 0, 0, width >> 1, height >> 1, null); } else { g.drawImage(image, 0, 0, null); @@ -136,21 +148,21 @@ return; } int[] buffer = (int[]) pixelGrabber.getPixels(); + int bgcolor = (isBackground ? 0 : argbBackground == 0 ? buffer[0] : argbBackground); if (jmolRenderer != null || (x < 0 || x + width > g3d.width || y < 0 || y + height > g3d.height)) - plotImageClipped(x, y, z, g3d, jmolRenderer, width, height, buffer, argbBackground); + plotImageClipped(x, y, z, g3d, jmolRenderer, width, height, buffer, bgcolor); else - plotImageUnClipped(x, y, z, g3d, width, height, buffer, argbBackground); + plotImageUnClipped(x, y, z, g3d, width, height, buffer, bgcolor); return; } private static void plotImageClipped(int x, int y, int z, Graphics3D g3d, JmolRendererInterface jmolRenderer, int width, int height, - int[] buffer, int argbBackground) { + int[] buffer, int bgcolor) { if (jmolRenderer == null) jmolRenderer = g3d; - int bgcolor = (argbBackground == 0 ? buffer[0] : argbBackground); for (int i = 0, offset = 0; i < height; i++) { //System.out.println(Integer.toHexString(buffer[offset])); for (int j = 0; j < width; j++) { @@ -163,14 +175,13 @@ private static void plotImageUnClipped(int x, int y, int z, Graphics3D g3d, int textWidth, int textHeight, - int[] buffer, int argbBackground) { + int[] buffer, int bgcolor) { int[] zbuf = g3d.zbuf; int renderWidth = g3d.width; int pbufOffset = y * renderWidth + x; int i = 0; int j = 0; int offset = 0; - int bgcolor = (argbBackground == 0 ? buffer[0] : argbBackground); while (i < textHeight) { //System.out.println(Integer.toHexString(buffer[offset])); while (j < textWidth) { Modified: trunk/Jmol/src/org/jmol/shape/Text.java =================================================================== --- trunk/Jmol/src/org/jmol/shape/Text.java 2008-08-10 19:48:31 UTC (rev 9703) +++ trunk/Jmol/src/org/jmol/shape/Text.java 2008-08-11 13:02:36 UTC (rev 9704) @@ -221,8 +221,7 @@ // now set x and y positions for text from (new?) box position if (image != null) { - g3d.drawImage(image, (int) boxX, (int) boxY, z, zSlab, (int) boxWidth, - (int) boxHeight, bgcolix); + g3d.drawImage(image, (int) boxX, (int) boxY, z, zSlab, bgcolix); } else { // now write properly aligned text Modified: trunk/Jmol/src/org/jmol/viewer/Compiler.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Compiler.java 2008-08-10 19:48:31 UTC (rev 9703) +++ trunk/Jmol/src/org/jmol/viewer/Compiler.java 2008-08-11 13:02:36 UTC (rev 9704) @@ -456,7 +456,7 @@ if (lookingAtString()) { if (cchToken < 0) return error(ERROR_endOfCommandUnexpected); - String str = ((tokCommand == Token.load || tokCommand == Token.script) + String str = ((tokCommand == Token.load || tokCommand == Token.background || tokCommand == Token.script) && !iHaveQuotedString ? script.substring(ichToken + 1, ichToken + cchToken - 1) : getUnescapedStringLiteral()); addTokenToPrefix(new Token(Token.string, str)); Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-08-10 19:48:31 UTC (rev 9703) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-08-11 13:02:36 UTC (rev 9704) @@ -43,6 +43,7 @@ import org.jmol.modelset.Bond.BondSet; +import java.awt.Image; import java.io.*; import java.util.Arrays; import java.util.BitSet; @@ -3572,6 +3573,21 @@ private void background(int i) throws ScriptException { getToken(i); int argb; + if (theTok == Token.image) { + // background IMAGE "xxxx.jpg" + checkLength(3); + if (isSyntaxCheck) + return; + Hashtable htParams = new Hashtable(); + String file = parameterAsString(++i); + Object image = (Image) null; + if (!file.equalsIgnoreCase("none") && file.length() > 0) + image = viewer.getFileAsImage(file, htParams); + if (image instanceof String) + evalError((String) image); + viewer.setBackgroundImage((String) htParams.get("fullPathName"), (Image) image); + return; + } if (isColorParam(i) || theTok == Token.none) { argb = getArgbParamLast(i, true); if (!isSyntaxCheck) Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-10 19:48:31 UTC (rev 9703) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-11 13:02:36 UTC (rev 9704) @@ -3,6 +3,8 @@ version=11.6.RC5_dev +# new feature: background IMAGE "filename" + # ----------------------------------------------------------------------------- #version=11.6.RC4 Modified: trunk/Jmol/src/org/jmol/viewer/StateManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/StateManager.java 2008-08-10 19:48:31 UTC (rev 9703) +++ trunk/Jmol/src/org/jmol/viewer/StateManager.java 2008-08-11 13:02:36 UTC (rev 9704) @@ -572,7 +572,8 @@ boolean showMeasurements = true; boolean zoomLarge = true; //false would be like Chime boolean zShade = false; - + String backgroundImageFileName; + //atoms and bonds boolean bondModeOr = false; @@ -676,6 +677,8 @@ if (objColors[i] != 0) appendCmd(str, getObjectNameFromId(i) + "Color = \"" + Escape.escapeColor(objColors[i]) + '"'); + if (backgroundImageFileName != null) + appendCmd(str, "background IMAGE /*file*/" + Escape.escape(backgroundImageFileName)); str.append(getSpecularState()); if (stereoState != null) appendCmd(str, "stereo" + stereoState); Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-08-10 19:48:31 UTC (rev 9703) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-08-11 13:02:36 UTC (rev 9704) @@ -1191,11 +1191,17 @@ case StateManager.OBJ_BACKGROUND: g3d.setBackgroundArgb(argb); colorManager.setColixBackgroundContrast(argb); + global.backgroundImageFileName = null; break; } global.setParameterValue(name + "Color", Escape.escapeColor(argb)); } + public void setBackgroundImage(String fileName, Image image) { + global.backgroundImageFileName = fileName; + g3d.setBackgroundImage(image); + } + int getObjectArgb(int objId) { return global.objColors[objId]; } @@ -6894,5 +6900,4 @@ } return image; } - } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-08-11 13:45:34
|
Revision: 9705 http://jmol.svn.sourceforge.net/jmol/?rev=9705&view=rev Author: hansonr Date: 2008-08-11 13:45:19 +0000 (Mon, 11 Aug 2008) Log Message: ----------- version=11.6.RC5_dev # new feature: background IMAGE "filename" Modified Paths: -------------- trunk/Jmol/src/org/jmol/api/JmolExportInterface.java trunk/Jmol/src/org/jmol/api/JmolRendererInterface.java trunk/Jmol/src/org/jmol/export/Export3D.java trunk/Jmol/src/org/jmol/export/_Exporter.java trunk/Jmol/src/org/jmol/export/_MayaExporter.java trunk/Jmol/src/org/jmol/export/_PovrayExporter.java trunk/Jmol/src/org/jmol/export/_VrmlExporter.java trunk/Jmol/src/org/jmol/g3d/Graphics3D.java trunk/Jmol/src/org/jmol/viewer/FrameRenderer.java Modified: trunk/Jmol/src/org/jmol/api/JmolExportInterface.java =================================================================== --- trunk/Jmol/src/org/jmol/api/JmolExportInterface.java 2008-08-11 13:02:36 UTC (rev 9704) +++ trunk/Jmol/src/org/jmol/api/JmolExportInterface.java 2008-08-11 13:45:19 UTC (rev 9705) @@ -99,4 +99,5 @@ abstract void renderEllipsoid(short colix, int x, int y, int z, int diameter, double[] coef, Point3i[] selectedPoints); + abstract void renderBackground(); } \ No newline at end of file Modified: trunk/Jmol/src/org/jmol/api/JmolRendererInterface.java =================================================================== --- trunk/Jmol/src/org/jmol/api/JmolRendererInterface.java 2008-08-11 13:02:36 UTC (rev 9704) +++ trunk/Jmol/src/org/jmol/api/JmolRendererInterface.java 2008-08-11 13:45:19 UTC (rev 9705) @@ -322,5 +322,4 @@ public abstract void drawImage(Image image, int x, int y, int z, int zslab, short bgcolix); - } Modified: trunk/Jmol/src/org/jmol/export/Export3D.java =================================================================== --- trunk/Jmol/src/org/jmol/export/Export3D.java 2008-08-11 13:02:36 UTC (rev 9704) +++ trunk/Jmol/src/org/jmol/export/Export3D.java 2008-08-11 13:45:19 UTC (rev 9705) @@ -85,6 +85,10 @@ // this.shapeRenderer = shapeRenderer; } + public void renderBackground() { + exporter.renderBackground(); + } + /** * draws a screened circle ... every other dot is turned on * Modified: trunk/Jmol/src/org/jmol/export/_Exporter.java =================================================================== --- trunk/Jmol/src/org/jmol/export/_Exporter.java 2008-08-11 13:02:36 UTC (rev 9704) +++ trunk/Jmol/src/org/jmol/export/_Exporter.java 2008-08-11 13:45:19 UTC (rev 9705) @@ -257,5 +257,5 @@ if (Graphics3D.isColixTranslucent(colix)) return new StringBuffer().append(translevel / 255f).toString(); return new StringBuffer().append(0f).toString(); - } + } } Modified: trunk/Jmol/src/org/jmol/export/_MayaExporter.java =================================================================== --- trunk/Jmol/src/org/jmol/export/_MayaExporter.java 2008-08-11 13:02:36 UTC (rev 9704) +++ trunk/Jmol/src/org/jmol/export/_MayaExporter.java 2008-08-11 13:45:19 UTC (rev 9705) @@ -234,4 +234,9 @@ } + public void renderBackground() { + // TODO + + } + } Modified: trunk/Jmol/src/org/jmol/export/_PovrayExporter.java =================================================================== --- trunk/Jmol/src/org/jmol/export/_PovrayExporter.java 2008-08-11 13:02:36 UTC (rev 9704) +++ trunk/Jmol/src/org/jmol/export/_PovrayExporter.java 2008-08-11 13:45:19 UTC (rev 9705) @@ -683,4 +683,9 @@ + "," + tempP1.x + "," + tempP1.y + "," + tempP1.z + ")\n"); } + public void renderBackground() { + // VERY inefficient, but it works. + g3d.renderBackground(jmolRenderer); + } + } Modified: trunk/Jmol/src/org/jmol/export/_VrmlExporter.java =================================================================== --- trunk/Jmol/src/org/jmol/export/_VrmlExporter.java 2008-08-11 13:02:36 UTC (rev 9704) +++ trunk/Jmol/src/org/jmol/export/_VrmlExporter.java 2008-08-11 13:45:19 UTC (rev 9705) @@ -244,5 +244,10 @@ // TODO } + + public void renderBackground() { + // TODO + + } } Modified: trunk/Jmol/src/org/jmol/g3d/Graphics3D.java =================================================================== --- trunk/Jmol/src/org/jmol/g3d/Graphics3D.java 2008-08-11 13:02:36 UTC (rev 9704) +++ trunk/Jmol/src/org/jmol/g3d/Graphics3D.java 2008-08-11 13:45:19 UTC (rev 9705) @@ -492,7 +492,7 @@ } private int backgroundArgb; - private Image backgroundImage; + public Image backgroundImage; public int bgcolor; /** @@ -2932,4 +2932,9 @@ return normix3d.getVector(normix); } + public void renderBackground(JmolRendererInterface jmolRenderer) { + if (backgroundImage != null) + plotImage(Integer.MIN_VALUE, 0, Integer.MIN_VALUE, backgroundImage, jmolRenderer, (short) 0); + } + } Modified: trunk/Jmol/src/org/jmol/viewer/FrameRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/FrameRenderer.java 2008-08-11 13:02:36 UTC (rev 9704) +++ trunk/Jmol/src/org/jmol/viewer/FrameRenderer.java 2008-08-11 13:45:19 UTC (rev 9705) @@ -58,6 +58,7 @@ if (logTime) Logger.startTimer(); + g3d.renderBackground(null); for (int i = 0; i < JmolConstants.SHAPE_MAX && g3d.currentlyRendering(); ++i) { Shape shape = modelSet.getShape(i); @@ -119,6 +120,7 @@ exporter.getHeader(); g3dExport.setg3dExporter(g3d, exporter); + exporter.renderBackground(); for (int i = 0; i < JmolConstants.SHAPE_MAX; ++i) { Shape shape = modelSet.getShape(i); if (shape == null) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-08-12 22:18:02
|
Revision: 9712 http://jmol.svn.sourceforge.net/jmol/?rev=9712&view=rev Author: hansonr Date: 2008-08-12 22:17:55 +0000 (Tue, 12 Aug 2008) Log Message: ----------- version=11.6.RC5_dev bug fixes # bug fix: set fontscaling with multiple echo texts/images at the same xyz location only scaling the first item # bug fix: set echo xxxx 30 40 # bug fix: WAY more streamlined refreshing # bug fix: createImage(), not getImage() in order to allow dynamic file change # bug fix: halo size for antialiased display Modified Paths: -------------- trunk/Jmol/src/org/jmol/api/JmolExportInterface.java trunk/Jmol/src/org/jmol/api/JmolRendererInterface.java trunk/Jmol/src/org/jmol/export/Export3D.java trunk/Jmol/src/org/jmol/export/_MayaExporter.java trunk/Jmol/src/org/jmol/export/_PovrayExporter.java trunk/Jmol/src/org/jmol/export/_VrmlExporter.java trunk/Jmol/src/org/jmol/g3d/Graphics3D.java trunk/Jmol/src/org/jmol/g3d/Text3D.java trunk/Jmol/src/org/jmol/shape/Echo.java trunk/Jmol/src/org/jmol/shape/HalosRenderer.java trunk/Jmol/src/org/jmol/shape/Object2d.java trunk/Jmol/src/org/jmol/shape/Text.java trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/FileManager.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/RepaintManager.java trunk/Jmol/src/org/jmol/viewer/StateManager.java trunk/Jmol/src/org/jmol/viewer/StatusManager.java trunk/Jmol/src/org/jmol/viewer/TransformManager.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/api/JmolExportInterface.java =================================================================== --- trunk/Jmol/src/org/jmol/api/JmolExportInterface.java 2008-08-12 18:45:54 UTC (rev 9711) +++ trunk/Jmol/src/org/jmol/api/JmolExportInterface.java 2008-08-12 22:17:55 UTC (rev 9712) @@ -77,7 +77,8 @@ abstract void plotText(int x, int y, int z, int argb, String text, Font3D font3d); - abstract void plotImage(int x, int y, int z, Image image, short bgcolix); + abstract void plotImage(int x, int y, int z, Image image, short bgcolix, + int width, int height); // NOT IMPLEMENTED, but could be if needed: Modified: trunk/Jmol/src/org/jmol/api/JmolRendererInterface.java =================================================================== --- trunk/Jmol/src/org/jmol/api/JmolRendererInterface.java 2008-08-12 18:45:54 UTC (rev 9711) +++ trunk/Jmol/src/org/jmol/api/JmolRendererInterface.java 2008-08-12 22:17:55 UTC (rev 9712) @@ -320,6 +320,6 @@ public abstract void renderEllipsoid(int x, int y, int z, int diameter, Matrix3f mToEllipsoidal, double[] coef, Matrix4f mDeriv, int selectedOctant, Point3i[] octantPoints); - public abstract void drawImage(Image image, int x, int y, int z, int zslab, short bgcolix); + public abstract void drawImage(Image image, int x, int y, int z, int zslab, short bgcolix, int width, int height); } Modified: trunk/Jmol/src/org/jmol/export/Export3D.java =================================================================== --- trunk/Jmol/src/org/jmol/export/Export3D.java 2008-08-12 18:45:54 UTC (rev 9711) +++ trunk/Jmol/src/org/jmol/export/Export3D.java 2008-08-12 22:17:55 UTC (rev 9712) @@ -298,13 +298,14 @@ z, getColixArgb(colix), str, font3d); } - public void drawImage(Image image, int x, int y, int z, int zSlab, short bgcolix) { + public void drawImage(Image image, int x, int y, int z, int zSlab, + short bgcolix, int width, int height) { if (image == null || width == 0 || height == 0) return; if (isClippedZ(zSlab)) return; z = Math.max(slab, z); - exporter.plotImage(x, y, z, image, bgcolix); + exporter.plotImage(x, y, z, image, bgcolix, width, height); } //mostly public drawing methods -- add "public" if you need to Modified: trunk/Jmol/src/org/jmol/export/_MayaExporter.java =================================================================== --- trunk/Jmol/src/org/jmol/export/_MayaExporter.java 2008-08-12 18:45:54 UTC (rev 9711) +++ trunk/Jmol/src/org/jmol/export/_MayaExporter.java 2008-08-12 22:17:55 UTC (rev 9712) @@ -229,7 +229,7 @@ } - public void plotImage(int x, int y, int z, Image image, short bgcolix) { + public void plotImage(int x, int y, int z, Image image, short bgcolix, int width, int height) { // TODO } Modified: trunk/Jmol/src/org/jmol/export/_PovrayExporter.java =================================================================== --- trunk/Jmol/src/org/jmol/export/_PovrayExporter.java 2008-08-12 18:45:54 UTC (rev 9711) +++ trunk/Jmol/src/org/jmol/export/_PovrayExporter.java 2008-08-12 22:17:55 UTC (rev 9712) @@ -629,9 +629,10 @@ output("// end text " + nText + ": " + text + "\n"); } - public void plotImage(int x, int y, int z, Image image, short bgcolix) { + public void plotImage(int x, int y, int z, Image image, short bgcolix, + int width, int height) { output("// start image " + (++nImage) + "\n"); - g3d.plotImage(x, y, z, image, jmolRenderer, bgcolix); + g3d.plotImage(x, y, z, image, jmolRenderer, bgcolix, width, height); output("// end image " + nImage + "\n"); } // not needed: Modified: trunk/Jmol/src/org/jmol/export/_VrmlExporter.java =================================================================== --- trunk/Jmol/src/org/jmol/export/_VrmlExporter.java 2008-08-12 18:45:54 UTC (rev 9711) +++ trunk/Jmol/src/org/jmol/export/_VrmlExporter.java 2008-08-12 22:17:55 UTC (rev 9712) @@ -240,7 +240,8 @@ } - public void plotImage(int x, int y, int z, Image image, short bgcolix) { + public void plotImage(int x, int y, int z, Image image, short bgcolix, + int width, int height) { // TODO } Modified: trunk/Jmol/src/org/jmol/g3d/Graphics3D.java =================================================================== --- trunk/Jmol/src/org/jmol/g3d/Graphics3D.java 2008-08-12 18:45:54 UTC (rev 9711) +++ trunk/Jmol/src/org/jmol/g3d/Graphics3D.java 2008-08-12 22:17:55 UTC (rev 9712) @@ -352,7 +352,7 @@ //setRectClip(clipX, clipY, clipWidth, clipHeight); platform.obtainScreenBuffer(); if (backgroundImage != null) - plotImage(Integer.MIN_VALUE, 0, Integer.MIN_VALUE, backgroundImage, null, (short) 0); + plotImage(Integer.MIN_VALUE, 0, Integer.MIN_VALUE, backgroundImage, null, (short) 0, 0, 0); } private void releaseBuffers() { @@ -1042,20 +1042,22 @@ antialiasThisFrame); } - public void drawImage(Image image, int x, int y, int z, int zSlab, short bgcolix) { + public void drawImage(Image image, int x, int y, int z, int zSlab, + short bgcolix, int width, int height) { if (image == null || width == 0 || height == 0) return; if (isClippedZ(zSlab)) return; - plotImage(x, y, z, image, null, bgcolix); + plotImage(x, y, z, image, null, bgcolix, width, height); } public void plotImage(int x, int y, int z, Image image, JmolRendererInterface jmolRenderer, - short bgcolix) { + short bgcolix, int width, int height) { setColix(bgcolix); if (bgcolix == 0) argbCurrent = 0; - Text3D.plotImage(x, y, z, image, this, jmolRenderer, antialiasThisFrame, argbCurrent); + Text3D.plotImage(x, y, z, image, this, jmolRenderer, antialiasThisFrame, argbCurrent, + width, height); } public void setFont(byte fid) { @@ -2934,7 +2936,8 @@ public void renderBackground(JmolRendererInterface jmolRenderer) { if (backgroundImage != null) - plotImage(Integer.MIN_VALUE, 0, Integer.MIN_VALUE, backgroundImage, jmolRenderer, (short) 0); + plotImage(Integer.MIN_VALUE, 0, Integer.MIN_VALUE, backgroundImage, + jmolRenderer, (short) 0, 0, 0); } } Modified: trunk/Jmol/src/org/jmol/g3d/Text3D.java =================================================================== --- trunk/Jmol/src/org/jmol/g3d/Text3D.java 2008-08-12 18:45:54 UTC (rev 9711) +++ trunk/Jmol/src/org/jmol/g3d/Text3D.java 2008-08-12 22:17:55 UTC (rev 9712) @@ -95,9 +95,11 @@ int textWidth = text3d.width; int textHeight = text3d.height; int mapWidth = text3d.mapWidth; - if (x + textWidth < 0 || x > g3d.width || y + textHeight < 0 - || y > g3d.height) + if (x + textWidth <= 0 || x >= g3d.width || y + textHeight <= 0 + || y >= g3d.height) return textWidth; + //TODO: text width/height are calculated 4x correct size here when antialiased. + // this is wasteful, as it requires drawing larger than necessary images if (jmolRenderer != null || (x < 0 || x + textWidth > g3d.width || y < 0 || y + textHeight > g3d.height)) @@ -110,35 +112,25 @@ public static void plotImage(int x, int y, int z, Image image, Graphics3D g3d, JmolRendererInterface jmolRenderer, boolean antialias, - int argbBackground) { - //System.out.println(x + " " + width + ", " + y + " " + height + " w/h " + g3d.width + " " + g3d.height + " " + g3d.isAntialiased()); + int argbBackground, int width, int height) { boolean isBackground = (x == Integer.MIN_VALUE); - int width = image.getWidth(null); - int height = image.getHeight(null); + int width0 = image.getWidth(null); + int height0 = image.getHeight(null); if (isBackground) { x = 0; z = Integer.MAX_VALUE - 1; width = g3d.width; height = g3d.height; - } else if (x + width < 0 || x > g3d.width || y + height < 0 || y > g3d.height) { - return; } else if (g3d.isAntialiased()) { width += width; height += height; } - + if (x + width <= 0 || x >= g3d.width || y + height <= 0 || y >= g3d.height) + return; g3d.platform.checkOffscreenSize(width, height); Graphics g = g3d.platform.gOffscreen; g.clearRect(0,0,width,height); - if (isBackground) { - g.drawImage(image, 0, 0, width, height, 0, 0, image.getWidth(null), image.getHeight(null), null); - width = g3d.width; - height = g3d.height; - } else if (g3d.isAntialiased()) { - g.drawImage(image, 0, 0, width, height, 0, 0, width >> 1, height >> 1, null); - } else { - g.drawImage(image, 0, 0, null); - } + g.drawImage(image, 0, 0, width, height, 0, 0, width0, height0, null); PixelGrabber pixelGrabber = new PixelGrabber(g3d.platform.imageOffscreen, 0, 0, width, height, true); try { @@ -164,7 +156,6 @@ if (jmolRenderer == null) jmolRenderer = g3d; for (int i = 0, offset = 0; i < height; i++) { - //System.out.println(Integer.toHexString(buffer[offset])); for (int j = 0; j < width; j++) { int argb = buffer[offset++]; if (argb != bgcolor && (argb & 0xFF000000) == 0xFF000000) @@ -183,7 +174,6 @@ int j = 0; int offset = 0; while (i < textHeight) { - //System.out.println(Integer.toHexString(buffer[offset])); while (j < textWidth) { if (z < zbuf[pbufOffset]) { int argb = buffer[offset]; Modified: trunk/Jmol/src/org/jmol/shape/Echo.java =================================================================== --- trunk/Jmol/src/org/jmol/shape/Echo.java 2008-08-12 18:45:54 UTC (rev 9711) +++ trunk/Jmol/src/org/jmol/shape/Echo.java 2008-08-12 22:17:55 UTC (rev 9712) @@ -106,7 +106,6 @@ text.setTranslucent(currentTranslucentLevel, false); if (currentBgTranslucentLevel != 0) text.setTranslucent(currentBgTranslucentLevel, true); - } currentObject = text; return; @@ -117,17 +116,9 @@ public String getShapeState() { StringBuffer s = new StringBuffer("\n set echo off;\n"); - String lastFormat = ""; Enumeration e = objects.elements(); - while (e.hasMoreElements()) { - Text t = (Text) e.nextElement(); - s.append(t.getState(true)); - String format = t.getState(false); - if (format.equals(lastFormat)) - continue; - lastFormat = format; - s.append(format); - } + while (e.hasMoreElements()) + s.append(((Text) e.nextElement()).getState()); return s.toString(); } } Modified: trunk/Jmol/src/org/jmol/shape/HalosRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/shape/HalosRenderer.java 2008-08-12 18:45:54 UTC (rev 9711) +++ trunk/Jmol/src/org/jmol/shape/HalosRenderer.java 2008-08-12 22:17:55 UTC (rev 9712) @@ -33,6 +33,7 @@ public class HalosRenderer extends ShapeRenderer { + boolean isAntialiased; protected void render() { Halos halos = (Halos) shape; boolean selectDisplayTrue = viewer.getSelectionHaloEnabled(); @@ -40,6 +41,7 @@ .getShowHiddenSelectionHalos()); if (halos.mads == null && !selectDisplayTrue) return; + isAntialiased = g3d.isAntialiased(); Atom[] atoms = modelSet.atoms; BitSet bsSelected = (selectDisplayTrue ? viewer.getSelectionSet() : null); for (int i = modelSet.getAtomCount(); --i >= 0;) { @@ -75,7 +77,6 @@ void render1(Atom atom, short mad, short colix) { int z = atom.screenZ; int diameter = mad; - int halowidth = 0; if (diameter < 0) { //unsized selection diameter = atom.screenDiameter; if (diameter == 0) { @@ -89,15 +90,21 @@ } else { diameter = viewer.scaleToScreen(z, mad); } - halowidth = (diameter / 4); - if (halowidth < 4) - halowidth = 4; - if (halowidth > 10) - halowidth = 10; - int haloDiameter = diameter + 2 * halowidth; - if (haloDiameter <= 0) + float d = diameter; + if (isAntialiased) + d /= 2; + float haloDiameter = (d / 4); + if (haloDiameter < 4) + haloDiameter = 4; + if (haloDiameter > 10) + haloDiameter = 10; + haloDiameter = d + 2 * haloDiameter; + if (isAntialiased) + haloDiameter *= 2; + int haloWidth = (int) haloDiameter; + if (haloWidth <= 0) return; - g3d.fillScreenedCircleCentered(colix, haloDiameter, atom.screenX, + g3d.fillScreenedCircleCentered(colix, haloWidth, atom.screenX, atom.screenY, atom.screenZ); } } Modified: trunk/Jmol/src/org/jmol/shape/Object2d.java =================================================================== --- trunk/Jmol/src/org/jmol/shape/Object2d.java 2008-08-12 18:45:54 UTC (rev 9711) +++ trunk/Jmol/src/org/jmol/shape/Object2d.java 2008-08-12 22:17:55 UTC (rev 9712) @@ -355,12 +355,11 @@ } - protected void setBoxOffsetsInWindow(float scale, float vMargin, float vTop) { + protected void setBoxOffsetsInWindow(float margin, float vMargin, float vTop) { // not labels // these coordinates are (0,0) in top left // (user coordinates are (0,0) in bottom left) - float margin = 5 * scale; float bw = boxWidth + margin; float x = boxX; if (x + bw > windowWidth) Modified: trunk/Jmol/src/org/jmol/shape/Text.java =================================================================== --- trunk/Jmol/src/org/jmol/shape/Text.java 2008-08-12 18:45:54 UTC (rev 9711) +++ trunk/Jmol/src/org/jmol/shape/Text.java 2008-08-12 22:17:55 UTC (rev 9712) @@ -64,7 +64,6 @@ short bgcolix, int x, int y, int z, int zSlab, int textAlign, float scalePixelsPerMicron) { this.scalePixelsPerMicron = scalePixelsPerMicron; - //System.out.println("Text scalePixelsPerMicron=" + scalePixelsPerMicron); this.viewer = null; this.g3d = g3d; isLabelOrHover = true; @@ -123,7 +122,6 @@ if (font == null) return; fid = font.fid; - //System.out.println("setFont fontSize/nominal now " + font.fontSize + "/" + font.fontSizeNominal); getFontMetrics(); recalc(); } @@ -148,8 +146,8 @@ protected void recalc() { if (image != null) { textWidth = textHeight = 0; - boxWidth = image.getWidth(null); - boxHeight = image.getHeight(null); + boxWidth = image.getWidth(null) * fontScale; + boxHeight = image.getHeight(null) * fontScale; return; } if (text == null) { @@ -168,8 +166,6 @@ textHeight = lines.length * lineHeight; boxWidth = textWidth + (fontScale >= 2 ? 16 : 8); boxHeight = textHeight + (fontScale >= 2 ? 16 : 8); - //System.out.println("Text recalc fontScale,font.fontScale,font.fontScaleNominal=" - // +fontScale + " "+ font.fontSize + " "+ font.fontSizeNominal); } private void formatText() { @@ -182,13 +178,11 @@ float imageFontScaling) { if (text == null) return; - //System.out.println("render scalePixelsPerMicron=" + scalePixelsPerMicron + " imageFontScaling=" + imageFontScaling); setWindow(g3d, scalePixelsPerMicron); if (scalePixelsPerMicron != 0 && this.scalePixelsPerMicron != 0) setFontScale(scalePixelsPerMicron / this.scalePixelsPerMicron); else if (fontScale != imageFontScaling) setFontScale(imageFontScaling); - if (doFormatText) formatText(); @@ -208,11 +202,10 @@ // adjust positions if necessary if (adjustForWindow) - setBoxOffsetsInWindow(image == null ? fontScale : 0, isLabelOrHover ? 16 * fontScale - + lineHeight : 0, boxY - textHeight); + setBoxOffsetsInWindow(image == null ? fontScale * 5 : 0, isLabelOrHover ? 16 + * fontScale + lineHeight : 0, boxY - textHeight); // draw the box if necessary - if (image == null && bgcolix != 0 && g3d.setColix(bgcolix)) showBox(g3d, colix, bgcolix, (int) boxX, (int) boxY, z + 2, zSlab, (int) boxWidth, (int) boxHeight, fontScale, isLabelOrHover); @@ -221,7 +214,8 @@ // now set x and y positions for text from (new?) box position if (image != null) { - g3d.drawImage(image, (int) boxX, (int) boxY, z, zSlab, bgcolix); + g3d.drawImage(image, (int) boxX, (int) boxY, z, zSlab, bgcolix, + (int) boxWidth, (int) boxHeight); } else { // now write properly aligned text @@ -240,9 +234,6 @@ float x = x0; float y = boxY + ascent + adj; - //System.out.println("scale=" + fontScale + " boxwidth/height=" + boxWidth - // + "/" + boxHeight + " ascent=" + ascent + " lineheight=" + lineHeight - //+ " boxY=" + boxY + " adj=" + adj); for (int i = 0; i < lines.length; i++) { switch (align) { case ALIGN_CENTER: @@ -251,7 +242,6 @@ case ALIGN_RIGHT: x = x0 - widths[i]; } - //System.out.println(lines[i] + " text render font " + font.fid + " " + font.fontSize); g3d.drawString(lines[i], font, (int) x, (int) y, z, zSlab); y += lineHeight; } @@ -314,7 +304,7 @@ } } - public String getState(boolean isDefine) { + public String getState() { StringBuffer s = new StringBuffer(); if (text == null || isLabelOrHover || target.equals("error")) return ""; @@ -322,7 +312,7 @@ //set echo myecho x y //echo ..... boolean isImage = (image != null); - if (isDefine) { +// if (isDefine) { String strOff = null; switch (valign) { case VALIGN_XY: @@ -363,21 +353,20 @@ if (modelIndex >= 0) s.append(" set echo ").append(target).append(" model ").append( viewer.getModelNumberDotted(modelIndex)).append(";\n"); - } +// } //isDefine and target==top: do all //isDefine and target!=top: just start //!isDefine and target==top: do nothing //!isDefine and target!=top: do just this //fluke because top is defined with default font //in initShape(), so we MUST include its font def here - if (isDefine != target.equals("top")) - return s.toString(); +// if (isDefine != target.equals("top")) +// return s.toString(); // these may not change much: s.append(" " + Shape.getFontCommand("echo", font)); if (scalePixelsPerMicron > 0) s.append(" " + (10000f / scalePixelsPerMicron)); // Angstroms per pixel - s.append(";\n"); - s.append(" color echo"); + s.append("; color echo"); if (Graphics3D.isColixTranslucent(colix)) s.append(" translucent " + Graphics3D.getColixTranslucencyLevel(colix)); s.append(" [x").append(g3d.getHexColorFromIndex(colix)).append("]"); Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-08-12 18:45:54 UTC (rev 9711) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-08-12 22:17:55 UTC (rev 9712) @@ -8274,6 +8274,7 @@ if (statementLength == len) return; propertyName = "align"; + propertyValue = null; // set echo name xxx if (statementLength == 4) { if (isCenterParameter(3)) { Modified: trunk/Jmol/src/org/jmol/viewer/FileManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/FileManager.java 2008-08-12 18:45:54 UTC (rev 9711) +++ trunk/Jmol/src/org/jmol/viewer/FileManager.java 2008-08-12 22:17:55 UTC (rev 9712) @@ -37,6 +37,7 @@ import java.net.URLEncoder; import java.net.MalformedURLException; import java.awt.Image; +import java.awt.MediaTracker; import java.awt.Toolkit; import java.io.InputStream; import java.io.BufferedInputStream; @@ -340,14 +341,35 @@ Image image = null; //try { fullPathName = names[0].replace('\\', '/'); + if (urlTypeIndex(fullPathName) >= 0) + try { + image = Toolkit.getDefaultToolkit().createImage(new URL(fullPathName)); + } catch (Exception e) { + return "bad URL: " + fullPathName; + } + else + image = Toolkit.getDefaultToolkit().createImage(fullPathName); try { - if (urlTypeIndex(fullPathName) >= 0) - image = Toolkit.getDefaultToolkit().getImage(new URL(fullPathName)); - else - image = Toolkit.getDefaultToolkit().getImage(fullPathName); - } catch (MalformedURLException e) { - return "cannot create image from " + fullPathName; + MediaTracker mediaTracker = new MediaTracker(viewer.getAwtComponent()); + mediaTracker.addImage(image, 0); + mediaTracker.waitForID(0); + /* SUN but here for malformed URL - can't trap +Uncaught error fetching image: +java.lang.NullPointerException + at sun.net.www.ParseUtil.toURI(Unknown Source) + at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source) + at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source) + at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) + at sun.awt.image.URLImageSource.getDecoder(Unknown Source) + at sun.awt.image.InputStreamImageSource.doFetch(Unknown Source) + at sun.awt.image.ImageFetcher.fetchloop(Unknown Source) + at sun.awt.image.ImageFetcher.run(Unknown Source) + */ + } catch (Exception e) { + return e.getMessage() + " opening " + fullPathName; } + if (image.getWidth(null) < 1) + return "invalid or missing image " + fullPathName; htParams.put("fullPathName", fullPathName); return image; } Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-12 18:45:54 UTC (rev 9711) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-12 22:17:55 UTC (rev 9712) @@ -3,6 +3,11 @@ version=11.6.RC5_dev +# bug fix: set fontscaling with multiple echo texts/images at the same xyz location only scaling the first item +# bug fix: set echo xxxx 30 40 +# bug fix: WAY more streamlined refreshing +# bug fix: createImage(), not getImage() in order to allow dynamic file change +# bug fix: halo size for antialiased display # Addition of translation tags to webexport # bug fix: write IMAGE broken for 11.6.RC2+ # bug fix: unnecessary refreshes removed from moveto/zoom with time 0 Modified: trunk/Jmol/src/org/jmol/viewer/RepaintManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/RepaintManager.java 2008-08-12 18:45:54 UTC (rev 9711) +++ trunk/Jmol/src/org/jmol/viewer/RepaintManager.java 2008-08-12 22:17:55 UTC (rev 9712) @@ -61,7 +61,6 @@ if (currentModelIndex != modelIndex) { if (modelCount > 0) { boolean fromDataFrame = viewer.isJmolDataFrame(currentModelIndex); - //System.out.println("from state " + currentModelIndex + " to "+ modelIndex); if (fromDataFrame) viewer.setJmolDataFrame(null, -1, currentModelIndex); if (currentModelIndex != -1) @@ -427,22 +426,7 @@ int modelIndexNext = currentModelIndex + frameStep; boolean isDone = (modelIndexNext > firstModelIndex && modelIndexNext > lastModelIndex || modelIndexNext < firstModelIndex - && modelIndexNext < lastModelIndex); - -/* - System.out.println("setAnimationRelative: " + - " firstModelIndex=" + firstModelIndex + - " displayModelIndex=" + currentModelIndex + - " lastModelIndex=" + lastModelIndex + - " currentDirection=" + currentDirection + - " animationDirection=" + animationDirection + - " direction=" + direction + - " isDone="+isDone + - " modelIndexNext=" + modelIndexNext + - " modelCount=" + viewer.getModelCount() + - " animationReplayMode=" + animationReplayMode + - " animationDirection=" + animationDirection); -*/ + && modelIndexNext < lastModelIndex); if (isDone) { switch (animationReplayMode) { case ANIMATION_ONCE: @@ -516,7 +500,6 @@ if (sleepTime > 0) Thread.sleep(sleepTime); } - //System.out.println(repaintPending + " frame " + currentModelIndex); if (!isFirst && !repaintPending && !setAnimationNext()) { Logger.debug("animation thread " + intThread + " exiting"); setAnimationOff(false); @@ -526,29 +509,11 @@ targetTime += (1000 / animationFps); sleepTime = targetTime - (int) (System.currentTimeMillis() - timeBegin); - //boolean autoFps = viewer.getAutoFps(); - //if (autoFps) { - //System.out.println("requesting repaint for " + currentModelIndex); - //requestRepaintAndWait(); - //} else refresh(); sleepTime = targetTime - (int) (System.currentTimeMillis() - timeBegin); if (sleepTime > 0) Thread.sleep(sleepTime); - /*if (false && autoFps) { - if (holdTime <= 0) - holdTime = 10; - int nHold = 0; - //optimally we want 2 hold cycles - while (repaintPending) { - Thread.sleep(holdTime); - nHold++; - } - holdTime *=(nHold - 1); - if (nHold == 1) - holdTime = holdTime / 2; - } */ } } catch (InterruptedException ie) { Logger.debug("animation thread interrupted!"); Modified: trunk/Jmol/src/org/jmol/viewer/StateManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/StateManager.java 2008-08-12 18:45:54 UTC (rev 9711) +++ trunk/Jmol/src/org/jmol/viewer/StateManager.java 2008-08-12 22:17:55 UTC (rev 9712) @@ -619,7 +619,6 @@ boolean fontScaling = false; boolean hideNameInPopup = false; int hoverDelayMs = 500; - boolean imageScaling = false; boolean measurementLabels = true; boolean messageStyleChime = false; int pickingSpinRate = 10; @@ -751,7 +750,7 @@ + ";axesposition;axesmolecular;axesorientationrasmol;axesunitcell;axeswindow;axis1color;axis2color" + ";axis3color;backgroundcolor;backgroundmodel;bondsymmetryatoms;boundboxcolor;cameradepth" + ";debugscript;defaultlatttice;defaults;diffusepercent;exportdrivers" - + ";fontscaling;imagescaling;language;loglevel;measureStyleChime" + + ";fontscaling;language;loglevel;measureStyleChime" + ";minimizationsteps;minimizationrefresh;minimizationcriterion;navigationmode" + ";perspectivedepth;visualrange;perspectivemodel;refreshing;rotationradius" + ";showaxes;showaxis1;showaxis2;showaxis3;showboundbox;showfrank;showunitcell" @@ -1149,7 +1148,6 @@ setParameterValue("ellipsoidFill", ellipsoidFill); setParameterValue("exportDrivers", JmolConstants.EXPORT_DRIVER_LIST); setParameterValue("fontScaling", fontScaling); - setParameterValue("imageScaling", imageScaling); setParameterValue("forceAutoBond", forceAutoBond); setParameterValue("greyscaleRendering", greyscaleRendering); setParameterValue("hbondsBackbone", hbondsBackbone); Modified: trunk/Jmol/src/org/jmol/viewer/StatusManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/StatusManager.java 2008-08-12 18:45:54 UTC (rev 9711) +++ trunk/Jmol/src/org/jmol/viewer/StatusManager.java 2008-08-12 22:17:55 UTC (rev 9712) @@ -260,10 +260,11 @@ int minSyncRepeatMs = 100; boolean syncingScripts = false; boolean syncingMouse = false; + boolean doSync() { + return (isSynced && drivingSync && !syncDisabled); + } synchronized void setSync(String mouseCommand) { - if (!isSynced || !drivingSync || syncDisabled) - return; if (syncingMouse) { if (mouseCommand != null) syncSend(mouseCommand, null); Modified: trunk/Jmol/src/org/jmol/viewer/TransformManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/TransformManager.java 2008-08-12 18:45:54 UTC (rev 9711) +++ trunk/Jmol/src/org/jmol/viewer/TransformManager.java 2008-08-12 22:17:55 UTC (rev 9712) @@ -1990,7 +1990,7 @@ elapsed = (int) (currentTime - startTime); float t = (float) (elapsed % vibrationPeriodMs) / vibrationPeriodMs; setVibrationT(t); - viewer.refresh(0, "TransformationManager:VibrationThread:run()"); + viewer.refresh(3, "TransformationManager:VibrationThread:run()"); } while (!isInterrupted()); } catch (Exception e) { //may be arithmetic %0/0 } Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-08-12 18:45:54 UTC (rev 9711) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-08-12 22:17:55 UTC (rev 9712) @@ -525,14 +525,12 @@ } void restoreModelOrientation(int modelIndex) { - //System.out.println("resetoremodelorientation " + modelIndex); StateManager.Orientation o = modelSet.getModelOrientation(modelIndex); if (o != null) o.restore(-1, true); } void restoreModelRotation(int modelIndex) { - //System.out.println("resetoremodelrotate " + modelIndex); StateManager.Orientation o = modelSet.getModelOrientation(modelIndex); if (o != null) o.restore(-1, false); @@ -616,7 +614,7 @@ if (isJmolDataFrame()) return; transformManager.setCenterAt(relativeTo, pt); - refresh(0, "Viewer:setCenter(" + relativeTo + ")"); + //refresh(0, "Viewer:setCenter(" + relativeTo + ")"); } void setCenterBitSet(BitSet bsCenter, boolean doScale) { @@ -629,7 +627,7 @@ if (isJmolDataFrame()) return; transformManager.setNewRotationCenter(center, doScale); - refresh(0, "Viewer:setCenterBitSet()"); + //refresh(0, "Viewer:setCenterBitSet()"); } void setNewRotationCenter(Point3f center) { @@ -637,7 +635,7 @@ if (isJmolDataFrame()) return; transformManager.setNewRotationCenter(center, true); - refresh(0, "Viewer:setCenterBitSet()"); + //refresh(0, "Viewer:setCenterBitSet()"); } Point3f getNavigationCenter() { @@ -901,25 +899,25 @@ void slabByPixels(int pixels) { //MouseManager.mouseSinglePressDrag transformManager.slabByPercentagePoints(pixels); - refresh(0, "Viewer:slabByPixels()"); + //refresh(0, "Viewer:slabByPixels()"); } void depthByPixels(int pixels) { //MouseManager.mouseDoublePressDrag transformManager.depthByPercentagePoints(pixels); - refresh(0, "Viewer:depthByPixels()"); + //refresh(0, "Viewer:depthByPixels()"); } void slabDepthByPixels(int pixels) { //MouseManager.mouseSinglePressDrag transformManager.slabDepthByPercentagePoints(pixels); - refresh(0, "Viewer:slabDepthByPixels()"); + //refresh(0, "Viewer:slabDepthByPixels()"); } void slabToPercent(int percentSlab) { //Eval.slab transformManager.slabToPercent(percentSlab); - refresh(0, "Viewer:slabToPercent()"); + //refresh(0, "Viewer:slabToPercent()"); } void slabInternal(Point4f plane, boolean isDepth) { @@ -929,7 +927,7 @@ void depthToPercent(int percentDepth) { //Eval.depth transformManager.depthToPercent(percentDepth); - refresh(0, "Viewer:depthToPercent()"); + //refresh(0, "Viewer:depthToPercent()"); } void setSlabDepthInternal(boolean isDepth) { @@ -1123,7 +1121,7 @@ public void setVectorScale(float scale) { global.setParameterValue("vectorScale", scale); global.vectorScale = scale; - refresh(0, "set vectorScale"); + //refresh(0, "set vectorScale"); } public float getDefaultDrawArrowScale() { @@ -1133,7 +1131,7 @@ public void setDefaultDrawArrowScale(float scale) { global.setParameterValue("defaultDrawArrowScale", scale); global.defaultDrawArrowScale = scale; - refresh(0, "set defaultDrawArrowScale"); + //refresh(0, "set defaultDrawArrowScale"); } float getVibrationScale() { @@ -1191,7 +1189,7 @@ global.setParameterValue(name + "Color", Escape.escapeColor(argb)); } - public void setBackgroundImage(String fileName, Image image) { + void setBackgroundImage(String fileName, Image image) { global.backgroundImageFileName = fileName; g3d.setBackgroundImage(image); } @@ -1404,7 +1402,7 @@ public void selectAll() { //initializeModel selectionManager.selectAll(false); - refresh(0, "Viewer:selectAll()"); + //refresh(0, "Viewer:selectAll()"); } private boolean noneSelected; @@ -1421,13 +1419,13 @@ //not used in this project; in jmolViewer interface, though selectionManager.clearSelection(false); global.setParameterValue("hideNotSelected", false); - refresh(0, "Viewer:clearSelection()"); + //refresh(0, "Viewer:clearSelection()"); } public void setSelectionSet(BitSet set) { //not used in this project; in jmolViewer interface, though selectionManager.setSelectionSet(set); - refresh(0, "Viewer:setSelectionSet()"); + //refresh(0, "Viewer:setSelectionSet()"); } void setSelectionSubset(BitSet subset) { @@ -1944,7 +1942,7 @@ colorManager.clear(); evalVariables.clear(); //setRefreshing(true); - refresh(0, "Viewer:clear()"); + //refresh(0, "Viewer:clear()"); dataManager.clear(); System.gc(); } @@ -2137,7 +2135,7 @@ void calcBoundBoxDimensions(BitSet bs) { modelSet.calcBoundBoxDimensions(bs); axesAreTainted = true; - refresh(0, "set calcBoundBoxDimensions"); + //refresh(0, "set calcBoundBoxDimensions"); } BoxInfo getBoxInfo(BitSet bs) { @@ -2721,7 +2719,7 @@ void clearAllMeasurements() { //Eval only setShapeProperty(JmolConstants.SHAPE_MEASURES, "clear", null); - refresh(0, "Viewer:clearAllMeasurements()"); + //refresh(0, "Viewer:clearAllMeasurements()"); } public void clearMeasurements() { @@ -2767,14 +2765,14 @@ //Eval setShapeProperty(JmolConstants.SHAPE_MEASURES, isON ? "show" : "hide", atomCountPlusIndices); - refresh(0, "Viewer:showMeasurements()"); + //refresh(0, "Viewer:showMeasurements()"); } void hideMeasurements(boolean isOFF) { //Eval setShapeProperty(JmolConstants.SHAPE_MEASURES, "hideAll", Boolean .valueOf(isOFF)); - refresh(0, "hideMeasurements()"); + //refresh(0, "hideMeasurements()"); } void toggleMeasurement(int[] atomCountPlusIndices, String strFormat) { @@ -2859,7 +2857,7 @@ return; } repaintManager.resumeAnimation(); - refresh(0, "Viewer:resumeAnimation()"); + //refresh(0, "Viewer:resumeAnimation()"); } void pauseAnimation() { @@ -2868,7 +2866,7 @@ return; } repaintManager.pauseAnimation(); - refresh(0, "Viewer:pauseAnimation()"); + //refresh(0, "Viewer:pauseAnimation()"); } void setAnimationRange(int modelIndex1, int modelIndex2) { @@ -2887,26 +2885,28 @@ void setAnimationNext() { //Eval - if (repaintManager.setAnimationNext()) - refresh(0, "Viewer:setAnimationNext()"); + repaintManager.setAnimationNext(); + //if (repaintManager.setAnimationNext()) + //refresh(0, "Viewer:setAnimationNext()"); } void setAnimationPrevious() { //Eval - if (repaintManager.setAnimationPrevious()) - refresh(0, "Viewer:setAnimationPrevious()"); + repaintManager.setAnimationPrevious(); + //if (repaintManager.setAnimationPrevious()) + //refresh(0, "Viewer:setAnimationPrevious()"); } void setAnimationLast() { //Eval repaintManager.setAnimationLast(); - refresh(0, "Viewer:setAnimationLast()"); + //refresh(0, "Viewer:setAnimationLast()"); } void rewindAnimation() { //Eval repaintManager.rewindAnimation(); - refresh(0, "Viewer:rewindAnimation()"); + //refresh(0, "Viewer:rewindAnimation()"); } void setCurrentModelIndex(int modelIndex) { @@ -3051,13 +3051,13 @@ * */ public void refresh(int mode, String strWhy) { - // refresh(2 indicates this is a mouse motion -- not going through Eval script + // refresh(2) indicates this is a mouse motion -- not going through Eval script // so we bypass Eval and mainline on the other viewer! - if (mode >= 0) + // refresh(-1) is used in stateManager to force no refresh) + // refresh(3) is used by the vibration thread to ONLY do a repaint -- no syncing + if (mode > 0) repaintManager.refresh(); - else - mode = -mode; - if (mode != 0) + if (mode % 3 != 0 && statusManager.doSync()) statusManager.setSync(mode == 2 ? strWhy : null); } @@ -3065,11 +3065,13 @@ if (!haveDisplay) return; repaintManager.requestRepaintAndWait(); - statusManager.setSync(null); + if (statusManager.doSync()) + statusManager.setSync(null); } void setSync() { - statusManager.setSync(null); + if (statusManager.doSync()) + statusManager.setSync(null); } public void repaintView() { @@ -3508,7 +3510,7 @@ } public void pauseScriptExecution() { - refresh(0, "pauseScriptExecution"); + //refresh(0, "pauseScriptExecution"); eval.pauseExecution(); } @@ -3606,8 +3608,6 @@ setShapeProperty(JmolConstants.SHAPE_LABELS, "label", strLabel); } - int n; - void togglePickingLabel(BitSet bs) { //eval label toggle (atomset) and pickingManager if (bs == null) @@ -3616,7 +3616,7 @@ setShapeSize(JmolConstants.SHAPE_LABELS, 0, null); modelSet.setShapeProperty(JmolConstants.SHAPE_LABELS, "toggleLabel", null, bs); - refresh(0, "Viewer:togglePickingLabel()"); + //refresh(0, "Viewer:togglePickingLabel()"); } BitSet getBitSetSelection() { @@ -3638,7 +3638,7 @@ //above, //Eval.configuration modelSet.setShapeSize(shapeID, size, bsAtoms); - refresh(0, "Viewer:setShapeSize(" + shapeID + "," + size + ")"); + //refresh(0, "Viewer:setShapeSize(" + shapeID + "," + size + ")"); } public void setShapeProperty(int shapeID, String propertyName, Object value) { @@ -3654,7 +3654,7 @@ return; //not applicable modelSet.setShapeProperty(shapeID, propertyName, value, selectionManager.bsSelection); - refresh(0, "Viewer:setShapeProperty()"); + //refresh(0, "Viewer:setShapeProperty()"); } void setShapeProperty(int shapeID, String propertyName, Object value, @@ -3663,7 +3663,7 @@ if (shapeID < 0) return; //not applicable modelSet.setShapeProperty(shapeID, propertyName, value, bs); - refresh(0, "Viewer:setShapeProperty()"); + //refresh(0, "Viewer:setShapeProperty()"); } void setShapePropertyArgb(int shapeID, String propertyName, int argb) { @@ -4406,7 +4406,7 @@ //11.6.RC2// if (key.equalsIgnoreCase("dotDensity")) { global.dotDensity = value; - refresh(0, "Viewer:setDotDensity"); + //refresh(0, "Viewer:setDotDensity"); break; } @@ -4508,9 +4508,7 @@ break; } if (key.equalsIgnoreCase("pickingSpinRate")) { - if (value < 1) - value = 1; - global.pickingSpinRate = value; + global.pickingSpinRate = (value < 1 ? 1 : value); break; } if (key.equalsIgnoreCase("animationFps")) { @@ -4575,11 +4573,6 @@ boolean notFound = false; boolean doRepaint = true; while (true) { - //11.6.RC5 - if (key.equalsIgnoreCase("imageScaling")) { - global.imageScaling = value; - break; - } //11.5.52 if (key.equalsIgnoreCase("selectAllModels")) { global.selectAllModels = value; @@ -4781,12 +4774,12 @@ if (key.equalsIgnoreCase("slabEnabled")) { //Eval.slab transformManager.setSlabEnabled(value); //refresh? - refresh(0, "Viewer:setSlabEnabled"); + //refresh(0, "Viewer:setSlabEnabled"); break; } if (key.equalsIgnoreCase("zoomEnabled")) { transformManager.setZoomEnabled(value); - refresh(1, "Viewer:setZoomEnabled()"); + //refresh(0, "Viewer:setZoomEnabled()"); break; } if (key.equalsIgnoreCase("highResolution")) { @@ -4840,12 +4833,12 @@ } if (key.equalsIgnoreCase("showMultipleBonds")) { global.showMultipleBonds = value; - refresh(0, "Viewer:setShowMultipleBonds()"); + //refresh(0, "Viewer:setShowMultipleBonds()"); break; } if (key.equalsIgnoreCase("showHiddenSelectionHalos")) { global.showHiddenSelectionHalos = value; - refresh(0, "Viewer:setShowHiddenSelectionHalos()"); + //refresh(0, "Viewer:setShowHiddenSelectionHalos()"); break; } if (key.equalsIgnoreCase("windowCentered")) { @@ -4886,7 +4879,7 @@ } if (key.equalsIgnoreCase("greyscaleRendering")) { g3d.setGreyscaleMode(global.greyscaleRendering = value); - refresh(0, "Viewer:setGreyscaleRendering()"); + //refresh(0, "Viewer:setGreyscaleRendering()"); break; } if (key.equalsIgnoreCase("measurementLabels")) { @@ -5028,7 +5021,7 @@ return false; if (doRepaint) { setTainted(true); - refresh(0, "viewer.setBooleanProperty"); + //refresh(0, "viewer.setBooleanProperty"); } return true; } @@ -5055,10 +5048,6 @@ return global.fontScaling; } - public boolean getImageScaling() { - return global.imageScaling; - } - void showParameter(String key, boolean ifNotSet, int nMax) { String sv = "" + global.getParameterEscaped(key, nMax); if (ifNotSet || sv.indexOf("<not set>") < 0) @@ -5161,7 +5150,7 @@ //app preferences dialog global.setParameterValue("perspectiveDepth", perspectiveDepth); transformManager.setPerspectiveDepth(perspectiveDepth); - refresh(0, "Viewer:setPerspectiveDepth()"); + //refresh(0, "Viewer:setPerspectiveDepth()"); } public void setAxesOrientationRasmol(boolean TF) { @@ -5193,7 +5182,7 @@ void setAxesScale(float scale) { global.axesScale = scale; axesAreTainted = true; - refresh(0, "set axesScale"); + //refresh(0, "set axesScale"); } public Point3f[] getAxisPoints() { @@ -5403,7 +5392,7 @@ modelSet.deleteAllBonds(); modelSet.autoBond(null, null, null, null); addStateScript("connect;", false, true); - refresh(0, "Viewer:rebond()"); + //refresh(0, "Viewer:rebond()"); } void setPdbConectBonding(boolean isAuto) { @@ -5418,7 +5407,7 @@ return; } addStateScript("connect PDB;", false, true); - refresh(0, "Viewer:setPdbConnectBonding()"); + //refresh(0, "Viewer:setPdbConnectBonding()"); } // ////////////////////////////////////////////////////////////// @@ -5468,7 +5457,7 @@ void setModeMultipleBond(byte modeMultipleBond) { //not implemented global.modeMultipleBond = modeMultipleBond; - refresh(0, "Viewer:setModeMultipleBond()"); + //refresh(0, "Viewer:setModeMultipleBond()"); } */ @@ -5486,7 +5475,7 @@ //setBooleanProperty global.setParameterValue("showHydrogens", TF); global.showHydrogens = TF; - refresh(0, "Viewer:setShowHydrogens()"); + //refresh(0, "Viewer:setShowHydrogens()"); } public boolean getShowHydrogens() { @@ -5545,7 +5534,7 @@ //setbooleanProperty global.setParameterValue("showMeasurements", TF); global.showMeasurements = TF; - refresh(0, "setShowMeasurements()"); + //refresh(0, "setShowMeasurements()"); } public boolean getShowMeasurements() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-08-13 23:36:03
|
Revision: 9729 http://jmol.svn.sourceforge.net/jmol/?rev=9729&view=rev Author: hansonr Date: 2008-08-13 23:35:59 +0000 (Wed, 13 Aug 2008) Log Message: ----------- version=11.6.RC7_dev # bug fix: adaptation for malformed PDB files (HEADER with nothing following it) # bug fix: more language localization in webexport # new feature: applet message regarding help and command entry Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java trunk/Jmol/src/org/jmol/applet/Console.java trunk/Jmol/src/org/jmol/applet/Jmol.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2008-08-13 21:21:16 UTC (rev 9728) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2008-08-13 23:35:59 UTC (rev 9729) @@ -236,6 +236,8 @@ } private void header() { + if (lineLength < 8) + return; if (lineLength >= 66) atomSetCollection.setCollectionName(line.substring(62, 66)); if (lineLength > 50) Modified: trunk/Jmol/src/org/jmol/applet/Console.java =================================================================== --- trunk/Jmol/src/org/jmol/applet/Console.java 2008-08-13 21:21:16 UTC (rev 9728) +++ trunk/Jmol/src/org/jmol/applet/Console.java 2008-08-13 23:35:59 UTC (rev 9729) @@ -131,8 +131,12 @@ } protected void addHelpMenuBar(JMenuBar menuBar) { - String menuKey = "help"; - JMenu m0 = createMenu(menuKey); + //JMenu m0 = createMenu("Help"); + JMenu m0 = newJMenu("Help"); + JMenuItem item = new JMenuItem("Search..."); + item.addActionListener(this); + item.setName("help ?search=?"); + m0.add(item); if (m0 == null) return; addHelpItems(m0, "commands", "command"); @@ -248,8 +252,8 @@ //menu.addMenuListener(display.getMenuListener()); - JMenuItem mi = createMenuItem("Help"); - menu.add(mi); + //JMenuItem mi = createMenuItem("Help"); + //menu.add(mi); return menu; } Modified: trunk/Jmol/src/org/jmol/applet/Jmol.java =================================================================== --- trunk/Jmol/src/org/jmol/applet/Jmol.java 2008-08-13 21:21:16 UTC (rev 9728) +++ trunk/Jmol/src/org/jmol/applet/Jmol.java 2008-08-13 23:35:59 UTC (rev 9729) @@ -511,8 +511,11 @@ } void consoleMessage(String message) { - if (jvm12 != null) + if (jvm12 != null) { jvm12.consoleMessage(message); + if (message == null) + jvm12.consoleMessage(GT._("Messages will appear here. Enter commands in the box below. Click the console Help menu item for on-line help, which will appear in a new browser window.")); + } sendJsTextareaStatus(message); } Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-13 21:21:16 UTC (rev 9728) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-13 23:35:59 UTC (rev 9729) @@ -3,7 +3,9 @@ version=11.6.RC7_dev +# bug fix: adaptation for malformed PDB files (HEADER with nothing following it) # bug fix: more language localization in webexport +# new feature: applet message regarding help and command entry # ----------------------------------------------------------------------------- This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-08-14 03:18:01
|
Revision: 9730 http://jmol.svn.sourceforge.net/jmol/?rev=9730&view=rev Author: hansonr Date: 2008-08-14 03:17:56 +0000 (Thu, 14 Aug 2008) Log Message: ----------- version=11.6.RC7_dev structure command # bug fix: structure helix|sheet|turn|none {atomExpression} was undocumented and had state issues # bug fix: set echo myecho ON was not implemented # new feature: set echo myecho HIDDEN # new feature: set echo myecho DISPLAY (same as ON) # new feature: set echo all; set echo HIDDEN/DISPLAY Modified Paths: -------------- trunk/Jmol/src/org/jmol/modelset/Atom.java trunk/Jmol/src/org/jmol/modelset/AtomCollection.java trunk/Jmol/src/org/jmol/modelset/Model.java trunk/Jmol/src/org/jmol/modelset/ModelCollection.java trunk/Jmol/src/org/jmol/modelset/ModelSet.java trunk/Jmol/src/org/jmol/modelsetbio/ProteinStructure.java trunk/Jmol/src/org/jmol/shape/Echo.java trunk/Jmol/src/org/jmol/shape/EchoRenderer.java trunk/Jmol/src/org/jmol/shape/Object2d.java trunk/Jmol/src/org/jmol/shape/TextShape.java trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/modelset/Atom.java =================================================================== --- trunk/Jmol/src/org/jmol/modelset/Atom.java 2008-08-13 23:35:59 UTC (rev 9729) +++ trunk/Jmol/src/org/jmol/modelset/Atom.java 2008-08-14 03:17:56 UTC (rev 9730) @@ -924,10 +924,6 @@ return group.getProteinStructureID(); } - public int setProteinStructureType(byte type, int indexCurrent) { - return group.setProteinStructureType(type, indexCurrent); - } - public short getGroupID() { return group.groupID; } Modified: trunk/Jmol/src/org/jmol/modelset/AtomCollection.java =================================================================== --- trunk/Jmol/src/org/jmol/modelset/AtomCollection.java 2008-08-13 23:35:59 UTC (rev 9729) +++ trunk/Jmol/src/org/jmol/modelset/AtomCollection.java 2008-08-14 03:17:56 UTC (rev 9730) @@ -256,19 +256,6 @@ } } - public void setProteinType(BitSet bs, byte iType) { - int monomerIndexCurrent = -1; - int iLast = -1; - for (int i = 0; i < atomCount; i++) - if (bs.get(i)) { - if (iLast != i - 1) - monomerIndexCurrent = -1; - iLast = i; - monomerIndexCurrent = atoms[i].setProteinStructureType(iType, - monomerIndexCurrent); - } - } - protected float getRadiusVdwJmol(Atom atom) { return JmolConstants.getVanderwaalsMar(atom.getElementNumber(), JmolConstants.VDW_JMOL) / 1000f; Modified: trunk/Jmol/src/org/jmol/modelset/Model.java =================================================================== --- trunk/Jmol/src/org/jmol/modelset/Model.java 2008-08-13 23:35:59 UTC (rev 9729) +++ trunk/Jmol/src/org/jmol/modelset/Model.java 2008-08-14 03:17:56 UTC (rev 9730) @@ -174,13 +174,19 @@ } } + boolean structureTainted; void calculateStructures() { + structureTainted = modelSet.proteinStructureTainted = true; for (int i = bioPolymerCount; --i >= 0; ) { bioPolymers[i].clearStructures(); bioPolymers[i].calculateStructures(); } } + public boolean isStructureTainted() { + return structureTainted; + } + void setConformation(BitSet bsConformation) { for (int i = bioPolymerCount; --i >= 0; ) bioPolymers[i].setConformation(bsConformation, nAltLocs); Modified: trunk/Jmol/src/org/jmol/modelset/ModelCollection.java =================================================================== --- trunk/Jmol/src/org/jmol/modelset/ModelCollection.java 2008-08-13 23:35:59 UTC (rev 9729) +++ trunk/Jmol/src/org/jmol/modelset/ModelCollection.java 2008-08-14 03:17:56 UTC (rev 9730) @@ -74,6 +74,7 @@ for (int j = 0; j < m.chainCount; j++) m.chains[j].setModelSet(m.modelSet); stateScripts = modelSet.stateScripts; + proteinStructureTainted = modelSet.proteinStructureTainted; thisStateModel = -1; } super.merge(modelSet); @@ -541,6 +542,20 @@ propagateSecondaryStructure(); } + public void setProteinType(BitSet bs, byte iType) { + int monomerIndexCurrent = -1; + int iLast = -1; + for (int i = 0; i < atomCount; i++) + if (bs.get(i)) { + if (iLast != i - 1) + monomerIndexCurrent = -1; + iLast = i; + monomerIndexCurrent = atoms[i].group.setProteinStructureType(iType, + monomerIndexCurrent); + proteinStructureTainted = models[atoms[i].modelIndex].structureTainted = true; + } + } + private void freezeModels() { for (int iModel = modelCount; --iModel >= 0;) { Model m = models[iModel]; @@ -990,7 +1005,7 @@ if (ctype != 'R') remark += " quaternionFrame = \"" + qtype + "\""; remark += "\nREMARK 6 Jmol Version " + Viewer.getJmolVersion(); - remark += "\n\n" + getProteinStructureState(bsAtoms, ctype == 'R'); + remark += "\n\n" + getProteinStructureState(bsAtoms, false, ctype == 'R'); return remark + s; } @@ -2100,7 +2115,10 @@ //////////// state definition /////////// - public String getProteinStructureState(BitSet bsAtoms, boolean needPhiPsi) { + boolean proteinStructureTainted = false; + + public String getProteinStructureState(BitSet bsAtoms, boolean taintedOnly, + boolean needPhiPsi) { BitSet bs = null; StringBuffer cmd = new StringBuffer(); StringBuffer sbTurn = new StringBuffer(); @@ -2120,8 +2138,20 @@ int nHelix = 0; int nTurn = 0; int nSheet = 0; + BitSet bsTainted = null; + if (taintedOnly) { + if (!proteinStructureTainted) + return ""; + bsTainted = new BitSet(); + for (int i = 0; i < atomCount; i++) + if (models[atoms[i].modelIndex].isStructureTainted()) + bsTainted.set(i); + bsTainted.set(atomCount); + } for (int i = 0; i <= atomCount; i++) if (i == atomCount || bsAtoms == null || bsAtoms.get(i)) { + if (taintedOnly && !bsTainted.get(i)) + continue; id = Integer.MIN_VALUE; if (i == atomCount || (id = atoms[i].getProteinStructureID()) != lastId) { if (bs != null) { @@ -2133,11 +2163,9 @@ int iModel = atoms[iLastAtom].modelIndex; cmd.append(" structure ").append( JmolConstants.getProteinStructureName(itype)).append(" ") - .append(Escape.escape(bs)) - .append(" \t# model=") - .append(getModelNumberDotted(iModel)) - .append(" & (").append(res1).append(" - ").append(res2) - .append(");\n"); + .append(Escape.escape(bs)).append(" \t# model=").append( + getModelNumberDotted(iModel)).append(" & (").append( + res1).append(" - ").append(res2).append(");\n"); } else { String str; int nx; Modified: trunk/Jmol/src/org/jmol/modelset/ModelSet.java =================================================================== --- trunk/Jmol/src/org/jmol/modelset/ModelSet.java 2008-08-13 23:35:59 UTC (rev 9729) +++ trunk/Jmol/src/org/jmol/modelset/ModelSet.java 2008-08-14 03:17:56 UTC (rev 9730) @@ -647,8 +647,9 @@ setModelVisibility(); - //unnecessary. Removed in 11.5.35 - //commands.append(getProteinStructureState(null, false)); + //unnecessary. Removed in 11.5.35 -- oops! + + commands.append(getProteinStructureState(null, true, false)); for (int i = 0; i < JmolConstants.SHAPE_MAX; ++i) { Shape shape = shapes[i]; Modified: trunk/Jmol/src/org/jmol/modelsetbio/ProteinStructure.java =================================================================== --- trunk/Jmol/src/org/jmol/modelsetbio/ProteinStructure.java 2008-08-13 23:35:59 UTC (rev 9729) +++ trunk/Jmol/src/org/jmol/modelsetbio/ProteinStructure.java 2008-08-14 03:17:56 UTC (rev 9730) @@ -44,8 +44,7 @@ final Vector3f vectorProjection = new Vector3f(); Point3f[] segments; int uniqueID; - //Point3f center; - + ProteinStructure(AlphaPolymer apolymer, byte type, int monomerIndex, int monomerCount) { uniqueID = ++globalSerialID; Modified: trunk/Jmol/src/org/jmol/shape/Echo.java =================================================================== --- trunk/Jmol/src/org/jmol/shape/Echo.java 2008-08-13 23:35:59 UTC (rev 9729) +++ trunk/Jmol/src/org/jmol/shape/Echo.java 2008-08-14 03:17:56 UTC (rev 9730) @@ -27,6 +27,7 @@ import org.jmol.util.Logger; import org.jmol.g3d.*; +import java.awt.Image; import java.util.BitSet; import java.util.Enumeration; @@ -71,6 +72,34 @@ // continue on to Object2d setting } + if ("image" == propertyName) { + Image image = (Image) value; + if (currentObject == null) { + if (isAll) { + Enumeration e = objects.elements(); + while (e.hasMoreElements()) + ((Text) e.nextElement()).setImage(image); + } + return; + } + ((Text) currentObject).setImage(image); + return; + } + + if ("hidden" == propertyName) { + boolean isHidden = ((Boolean)value).booleanValue(); + if (currentObject == null) { + if (isAll) { + Enumeration e = objects.elements(); + while (e.hasMoreElements()) + ((Text) e.nextElement()).hidden = isHidden; + } + return; + } + ((Text) currentObject).hidden = isHidden; + return; + } + if (Object2d.setProperty(propertyName, value, currentObject)) return; @@ -117,8 +146,12 @@ public String getShapeState() { StringBuffer s = new StringBuffer("\n set echo off;\n"); Enumeration e = objects.elements(); - while (e.hasMoreElements()) - s.append(((Text) e.nextElement()).getState()); + while (e.hasMoreElements()) { + Text t = (Text) e.nextElement(); + s.append(t.getState()); + if (t.hidden) + s.append(" set echo " + t.target + " hidden;\n"); + } return s.toString(); } } Modified: trunk/Jmol/src/org/jmol/shape/EchoRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/shape/EchoRenderer.java 2008-08-13 23:35:59 UTC (rev 9729) +++ trunk/Jmol/src/org/jmol/shape/EchoRenderer.java 2008-08-14 03:17:56 UTC (rev 9730) @@ -38,7 +38,7 @@ imageFontScaling = viewer.getImageFontScaling(); while (e.hasMoreElements()) { Text t = (Text)e.nextElement(); - if (!t.visible) + if (!t.visible || t.hidden) continue; if (t.valign == Object2d.VALIGN_XYZ) { viewer.transformPoint(t.xyz, pt); Modified: trunk/Jmol/src/org/jmol/shape/Object2d.java =================================================================== --- trunk/Jmol/src/org/jmol/shape/Object2d.java 2008-08-13 23:35:59 UTC (rev 9729) +++ trunk/Jmol/src/org/jmol/shape/Object2d.java 2008-08-14 03:17:56 UTC (rev 9730) @@ -58,8 +58,9 @@ protected boolean adjustForWindow; protected float boxWidth, boxHeight, boxX, boxY; - public int modelIndex = -1; - public boolean visible = true; + int modelIndex = -1; + boolean visible = true; + boolean hidden = false; protected final float[] boxXY = new float[2]; @@ -385,7 +386,7 @@ } public boolean checkObjectClicked(int x, int y, BitSet bsVisible) { - if (modelIndex >= 0 && !bsVisible.get(modelIndex)) + if (modelIndex >= 0 && !bsVisible.get(modelIndex) || hidden) return false; if (g3d.isAntialiased()) { x <<= 1; @@ -397,6 +398,7 @@ } public static boolean setProperty(String propertyName, Object value, Object2d currentObject) { + if ("script" == propertyName) { if (currentObject != null) currentObject.setScript((String) value); Modified: trunk/Jmol/src/org/jmol/shape/TextShape.java =================================================================== --- trunk/Jmol/src/org/jmol/shape/TextShape.java 2008-08-13 23:35:59 UTC (rev 9729) +++ trunk/Jmol/src/org/jmol/shape/TextShape.java 2008-08-14 03:17:56 UTC (rev 9730) @@ -28,7 +28,6 @@ import org.jmol.g3d.*; -import java.awt.Image; import java.util.BitSet; import java.util.Enumeration; @@ -42,21 +41,6 @@ Logger.debug("TextShape.setProperty(" + propertyName + "," + value + ")"); } - if ("image" == propertyName) { - Image image = (Image) value; - if (currentObject == null) { - if (isAll) { - Enumeration e = objects.elements(); - while (e.hasMoreElements()) - ((Text) e.nextElement()).setImage(image); - } - return; - } - ((Text) currentObject).setImage(image); - return; - } - - if ("text" == propertyName) { String text = (String) value; if (currentObject == null) { Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-08-13 23:35:59 UTC (rev 9729) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-08-14 03:17:56 UTC (rev 9730) @@ -8226,6 +8226,15 @@ echoShapeActive = false; propertyName = "allOff"; break; + case Token.hidden: + propertyName = "hidden"; + propertyValue = Boolean.TRUE; + break; + case Token.on: + case Token.display: + propertyName = "hidden"; + propertyValue = Boolean.FALSE; + break; case Token.none: echoShapeActive = false; //fall through @@ -8285,6 +8294,15 @@ case Token.off: propertyName = "off"; break; + case Token.display: + case Token.on: + propertyName = "hidden"; + propertyValue = Boolean.FALSE; + break; + case Token.hidden: + propertyName = "hidden"; + propertyValue = Boolean.TRUE; + break; case Token.model: int modelIndex = modelNumberParameter(4); if (isSyntaxCheck) Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-13 23:35:59 UTC (rev 9729) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-14 03:17:56 UTC (rev 9730) @@ -3,6 +3,11 @@ version=11.6.RC7_dev +# bug fix: structure helix|sheet|turn|none {atomExpression} was undocumented and had state issues +# bug fix: set echo myecho ON was not implemented +# new feature: set echo myecho HIDDEN +# new feature: set echo myecho DISPLAY (same as ON) +# new feature: set echo all; set echo HIDDEN/DISPLAY # bug fix: adaptation for malformed PDB files (HEADER with nothing following it) # bug fix: more language localization in webexport # new feature: applet message regarding help and command entry Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-08-13 23:35:59 UTC (rev 9729) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-08-14 03:17:56 UTC (rev 9730) @@ -2560,7 +2560,7 @@ String getProteinStructureState() { return modelSet.getProteinStructureState(selectionManager.bsSelection, - false); + false, false); } public String getCoordinateState(BitSet bsSelected) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-08-16 18:58:50
|
Revision: 9742 http://jmol.svn.sourceforge.net/jmol/?rev=9742&view=rev Author: hansonr Date: 2008-08-16 18:58:44 +0000 (Sat, 16 Aug 2008) Log Message: ----------- version=11.6.RC8_dev direct applet-applet communication # new feature: script APPLET appletName "some script" # --allows direct inter-applet communication independent of set SYNC # --appletName can be * (all applets), > (other applets), . (this applet), # or an applet name such as "jmolApplet0" or just the extension "0" # --for *, the current applet always reports LAST # new feature: x = script("some script", "appletName") # --same as above # --in addition, allows retrieval of information from another applet # for example: # # x = script("print getProperty(\"modelInfo.modelCount\")","B") # # gets the number of models loaded in applet jmolAppletB. # # x = script("show orientation moveto","jmolApplet2") # # gets the current orientation of applet jmolApplet2. # # xList = script("print getProperty(\"appletInfo.fullName\").split(\"__\")[1] + \":\" + script(\"show rotation\").trim()","*") # # gets a new-line-separated list of rotational quaternions for all applets with applet names. # # # new feature: print getProperty("modelInfo.models[3].file") syntax Modified Paths: -------------- trunk/Jmol/src/org/jmol/applet/Jmol.java trunk/Jmol/src/org/jmol/applet/JmolAppletRegistry.java trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/StatusManager.java trunk/Jmol/src/org/jmol/viewer/Token.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/applet/Jmol.java =================================================================== --- trunk/Jmol/src/org/jmol/applet/Jmol.java 2008-08-16 18:17:54 UTC (rev 9741) +++ trunk/Jmol/src/org/jmol/applet/Jmol.java 2008-08-16 18:58:44 UTC (rev 9742) @@ -186,7 +186,7 @@ String language; String menuStructure; - + public void init() { htmlName = getParameter("name"); syncId = getParameter("syncId"); @@ -1032,7 +1032,7 @@ showStatusAndConsole(strInfo, toConsole); break; case JmolConstants.CALLBACK_SYNC: - sendSyncScript(doCallback, strInfo, (String) data[2]); + sendScript(strInfo, (String) data[2], true, doCallback); return; } if (!doCallback || !mayScript) @@ -1118,6 +1118,10 @@ } public String eval(String strEval) { + // may be appletName\1script + int pt = strEval.indexOf("\1"); + if (pt >= 0) + return sendScript(strEval.substring(pt + 1), strEval.substring(0, pt), false, false); if (strEval.startsWith("_GET_MENU")) return (jmolpopup == null ? "" : jmolpopup.getMenu("Jmol version " + Viewer.getJmolVersion() + "|" + strEval)); if(!haveDocumentAccess) @@ -1241,32 +1245,46 @@ jvm12.showConsole(showConsole); } - private void sendSyncScript(boolean doCallback, String script, String appletName) { - Vector apps = JmolAppletRegistry.findApplets(appletName, syncId, fullName); - if (doCallback) + private String sendScript(String script, String appletName, boolean isSync, + boolean doCallback) { + if (doCallback) { script = notifySync(script); - if (apps == null || apps.size() == 0) { - if (!doCallback) - Logger.error(fullName + " couldn't find applet " + appletName); - return; + // if the notified JavaScript function returns "" or 0, then + // we do NOT continue to notify the other applets + if (script == null || script.length() == 0 || script.equals("0")) + return ""; } - // if the notified JavaScript function returns 0, then - // we do NOT continue to notify the other applet - if (script == null || script.length() == 0) - return; - for (int i = 0; i < apps.size(); i++) { - String theApplet = (String)apps.elementAt(i); - JmolAppletInterface app = (JmolAppletInterface)JmolAppletRegistry.htRegistry.get(theApplet); + Vector apps = JmolAppletRegistry + .findApplets(appletName, syncId, fullName); + int nApplets = apps.size(); + if (nApplets == 0) { + if (!appletName.equals("*")) { + if (!doCallback) + Logger.error(fullName + " couldn't find applet " + appletName); + } + return ""; + } + StringBuffer sb = (isSync ? null : new StringBuffer()); + for (int i = 0; i < nApplets; i++) { + String theApplet = (String) apps.elementAt(i); + JmolAppletInterface app = (JmolAppletInterface) JmolAppletRegistry.htRegistry + .get(theApplet); if (Logger.debugging) - Logger.debug(fullName + " sending to " + theApplet + ": " - + script); + Logger.debug(fullName + " sending to " + theApplet + ": " + script); try { - app.syncScript(script); + if (isSync) + app.syncScript(script); + else + sb.append(app.scriptWait(script, "output")).append("\n"); } catch (Exception e) { - Logger.error(htmlName + " couldn't send to " + theApplet + ": " - + script + ": " + e); - } + String msg = htmlName + " couldn't send to " + theApplet + ": " + + script + ": " + e; + Logger.error(msg); + if (!isSync) + sb.append(msg); + } } + return (isSync ? "" : sb.toString()); } public Hashtable getRegistryInfo() { Modified: trunk/Jmol/src/org/jmol/applet/JmolAppletRegistry.java =================================================================== --- trunk/Jmol/src/org/jmol/applet/JmolAppletRegistry.java 2008-08-16 18:17:54 UTC (rev 9741) +++ trunk/Jmol/src/org/jmol/applet/JmolAppletRegistry.java 2008-08-16 18:58:44 UTC (rev 9742) @@ -151,24 +151,26 @@ Logger.error("unable to find target:" + targetName); } - synchronized public static Vector findApplets(String appletName, String mySyncId, - String excludeName) { - if (appletName != null && appletName.indexOf("__") < 0) - appletName += "__" + mySyncId + "__"; + synchronized public static Vector findApplets(String appletName, + String mySyncId, + String excludeName) { + String ext = "__" + mySyncId + "__"; Vector apps = new Vector(); - if (appletName != null && htRegistry.containsKey(appletName)) { - apps.addElement(appletName); - return apps; + if (appletName.equals("*") || appletName.equals(">")) { + Enumeration keys = htRegistry.keys(); + while (keys.hasMoreElements()) { + appletName = (String) keys.nextElement(); + if (!appletName.equals(excludeName) && appletName.indexOf(ext) > 0) + apps.addElement(appletName); + } + } else { + if (appletName.indexOf("__") < 0) + appletName += ext; + if (!htRegistry.containsKey(appletName)) + appletName = "jmolApplet" + appletName; + if (!appletName.equals(excludeName) && htRegistry.containsKey(appletName)) + apps.addElement(appletName); } - Enumeration keys = htRegistry.keys(); - while (keys.hasMoreElements()) { - String theApplet = (String) keys.nextElement(); - if (excludeName != null && theApplet.equals(excludeName)) - continue; - if (appletName == null && theApplet.indexOf("__" + mySyncId + "__") > 0 - || theApplet.equals(appletName)) - apps.addElement(theApplet); - } return apps; } Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-08-16 18:17:54 UTC (rev 9741) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-08-16 18:58:44 UTC (rev 9742) @@ -903,7 +903,6 @@ if (token == null) continue; switch (token.tok) { - case Token.elseif: case Token.ifcmd: case Token.whilecmd: @@ -974,9 +973,9 @@ case Token.rotate: rotate(false, false); break; + case Token.javascript: case Token.script: - case Token.javascript: - script(token.tok == Token.javascript); + script(token.tok); break; case Token.function: function(); @@ -4463,7 +4462,7 @@ if (errMsg != null && !isScriptCheck) { if (errMsg.indexOf("file recognized as a script file:") >= 0) { viewer.addLoadScript("-"); - script(false); + script(Token.script); return; } evalError(errMsg); @@ -5070,57 +5069,74 @@ "getSpinAxis:" + axisID); } - private void script(boolean isJavaScript) throws ScriptException { - if (isJavaScript) { - checkLength(2); - if (!isSyntaxCheck) - viewer.eval(parameterAsString(1)); - return; - } - if (getToken(1).tok != Token.string) - error(ERROR_filenameExpected); + private void script(int tok) throws ScriptException { + boolean loadCheck = true; + boolean isCheck = false; int lineNumber = 0; int pc = 0; int lineEnd = 0; int pcEnd = 0; int i = 2; - String filename = parameterAsString(1); - String theScript = null; - if (filename.equalsIgnoreCase("inline")) { - theScript = parameterExpression(2, 0, "_script", false).toString(); - i = iToken + 1; + String filename = null; + String theScript = parameterAsString(1); + if (tok == Token.javascript) { + checkLength(2); + if (!isSyntaxCheck) + viewer.eval(theScript); + return; } - boolean loadCheck = true; - boolean isCheck = false; - String option = optParameterAsString(i); - if (option.equalsIgnoreCase("check")) { - isCheck = true; - option = optParameterAsString(++i); + if (theScript.equalsIgnoreCase("applet")) { + // script APPLET x "....." + String appID = parameterAsString(2); + theScript = parameterExpression(3, 0, "_script", false).toString(); + checkLength(iToken + 1); + if (isSyntaxCheck) + return; + if (appID.length() == 0 || appID.equals("all")) + appID = "*"; + if (!appID.equals(".")) { + viewer.eval(appID + "\1" + theScript); + if (!appID.equals("*")) + return; + } + } else { + if (getToken(1).tok != Token.string) + error(ERROR_filenameExpected); + filename = theScript; + if (filename.equalsIgnoreCase("inline")) { + theScript = parameterExpression(2, 0, "_script", false).toString(); + i = iToken + 1; + } + String option = optParameterAsString(i); + if (option.equalsIgnoreCase("check")) { + isCheck = true; + option = optParameterAsString(++i); + } + if (option.equalsIgnoreCase("noload")) { + loadCheck = false; + option = optParameterAsString(++i); + } + if (option.equalsIgnoreCase("line") || option.equalsIgnoreCase("lines")) { + i++; + lineEnd = lineNumber = Math.max(intParameter(i++), 0); + if (checkToken(i)) + if (getToken(i++).tok == Token.minus) + lineEnd = (checkToken(i) ? intParameter(i++) : 0); + else + error(ERROR_invalidArgument); + } else if (option.equalsIgnoreCase("command") + || option.equalsIgnoreCase("commands")) { + i++; + pc = Math.max(intParameter(i++) - 1, 0); + pcEnd = pc + 1; + if (checkToken(i)) + if (getToken(i++).tok == Token.minus) + pcEnd = (checkToken(i) ? intParameter(i++) : 0); + else + error(ERROR_invalidArgument); + } + checkLength(i); } - if (option.equalsIgnoreCase("noload")) { - loadCheck = false; - option = optParameterAsString(++i); - } - if (option.equalsIgnoreCase("line") || option.equalsIgnoreCase("lines")) { - i++; - lineEnd = lineNumber = Math.max(intParameter(i++), 0); - if (checkToken(i)) - if (getToken(i++).tok == Token.minus) - lineEnd = (checkToken(i) ? intParameter(i++) : 0); - else - error(ERROR_invalidArgument); - } else if (option.equalsIgnoreCase("command") - || option.equalsIgnoreCase("commands")) { - i++; - pc = Math.max(intParameter(i++) - 1, 0); - pcEnd = pc + 1; - if (checkToken(i)) - if (getToken(i++).tok == Token.minus) - pcEnd = (checkToken(i) ? intParameter(i++) : 0); - else - error(ERROR_invalidArgument); - } - checkLength(i); if (isSyntaxCheck && !isScriptCheck) return; if (isScriptCheck) @@ -12054,7 +12070,7 @@ return evaluateWrite(args); case Token.script: case Token.javascript: - return evaluateScript(args, tok == Token.javascript); + return evaluateScript(args, tok); case Token.within: return evaluateWithin(args); case Token.getproperty: @@ -12585,18 +12601,32 @@ return addX(write(args)); } - private boolean evaluateScript(Token[] args, boolean isJavaScript) + private boolean evaluateScript(Token[] args, int tok) throws ScriptException { - if (args.length != 1) + if (tok == Token.javascript && args.length != 1 || args.length == 0 + || args.length > 2) return false; if (isSyntaxCheck) return addX(""); String s = Token.sValue(args[0]); - if (isJavaScript) - return addX(viewer.eval(s)); StringBuffer sb = new StringBuffer(); - runScript(s, sb); - return addX(sb.toString()); + switch (tok) { + case Token.script: + String appID = (args.length == 2 ? Token.sValue(args[1]) : "."); + //options include * > . or an appletID with or without "jmolApplet" + if (!appID.equals(".")) + sb.append(viewer.eval(appID + "\1" + s)); + if (appID.equals(".") || appID.equals("*")) + runScript(s, sb); + break; + case Token.javascript: + sb.append(viewer.eval(s)); + break; + } + s = sb.toString(); + float f; + return (Float.isNaN(f = Parser.parseFloatStrict(s)) ? addX(s) : s + .indexOf(".") >= 0 ? addX(f) : addX(Parser.parseInt(s))); } private boolean evaluateData(Token[] args) { Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-16 18:17:54 UTC (rev 9741) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-16 18:58:44 UTC (rev 9742) @@ -3,7 +3,30 @@ version=11.6.RC8_dev -# new feature: print getProperty("modelinfo.models[3].file") syntax +# new feature: script APPLET appletName "some script" +# --allows direct inter-applet communication independent of set SYNC +# --appletName can be * (all applets), > (other applets), . (this applet), +# or an applet name such as "jmolApplet0" or just the extension "0" +# --for *, the current applet always reports LAST +# new feature: x = script("some script", "appletName") +# --same as above +# --in addition, allows retrieval of information from another applet +# for example: +# +# x = script("print getProperty(\"modelInfo.modelCount\")","B") +# +# gets the number of models loaded in applet jmolAppletB. +# +# x = script("show orientation moveto","jmolApplet2") +# +# gets the current orientation of applet jmolApplet2. +# +# xList = script("print getProperty(\"appletInfo.fullName\").split(\"__\")[1] + \":\" + script(\"show rotation\").trim()","*") +# +# gets a new-line-separated list of rotational quaternions for all applets with applet names. +# +# +# new feature: print getProperty("modelInfo.models[3].file") syntax # ----------------------------------------------------------------------------- Modified: trunk/Jmol/src/org/jmol/viewer/StatusManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/StatusManager.java 2008-08-16 18:17:54 UTC (rev 9741) +++ trunk/Jmol/src/org/jmol/viewer/StatusManager.java 2008-08-16 18:58:44 UTC (rev 9742) @@ -81,6 +81,7 @@ Hashtable messageQueue = new Hashtable(); int statusPtr = 0; static int MAXIMUM_QUEUE_LENGTH = 16; + StringBuffer outputBuffer; StatusManager(Viewer viewer) { this.viewer = viewer; @@ -194,6 +195,8 @@ synchronized void setScriptEcho(String strEcho, boolean isScriptQueued) { if (strEcho == null) return; setStatusChanged("scriptEcho", 0, strEcho, false); + if (outputBuffer != null) + outputBuffer.append(strEcho); if (jmolStatusListener != null) jmolStatusListener.notifyCallback(JmolConstants.CALLBACK_ECHO, new Object[] { "", strEcho, new Integer(isScriptQueued ? 1 : 0) }); @@ -267,9 +270,9 @@ synchronized void setSync(String mouseCommand) { if (syncingMouse) { if (mouseCommand != null) - syncSend(mouseCommand, null); + syncSend(mouseCommand, "*"); } else if (!syncingScripts) - syncSend("!" + viewer.getMoveToText(minSyncRepeatMs / 1000f), null); + syncSend("!" + viewer.getMoveToText(minSyncRepeatMs / 1000f), "*"); } synchronized void popupMenu(int x, int y) { @@ -376,7 +379,7 @@ messageQueue.put(statusName, statusRecordSet); } - synchronized Vector getStatusChanged(String statusNameList) { + synchronized Object getStatusChanged(String statusNameList) { /* * returns a Vector of statusRecordSets, one per status type, * where each statusRecordSet is itself a vector of vectors: @@ -387,6 +390,15 @@ * */ Vector msgList = new Vector(); + if (statusNameList.equals("output")) { + if (outputBuffer == null) { + outputBuffer = new StringBuffer(); + return ""; + } + String s = outputBuffer.toString(); + outputBuffer = null; + return s; + } if (setStatusList(statusNameList)) return msgList; Enumeration e = messageQueue.keys(); int n = 0; Modified: trunk/Jmol/src/org/jmol/viewer/Token.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Token.java 2008-08-16 18:17:54 UTC (rev 9741) +++ trunk/Jmol/src/org/jmol/viewer/Token.java 2008-08-16 18:58:44 UTC (rev 9742) @@ -517,11 +517,10 @@ final static int load = 1 | 1 << 9 | mathfunc | command; final static int substructure = 2 | 1 << 9 | mathfunc; - final static int script = 3 | 1 << 9 | mathfunc | command; - final static int javascript = 4 | 1 << 9 | mathfunc | implicitStringCommand; - final static int sin = 5 | 1 << 9 | mathfunc; - final static int cos = 6 | 1 << 9 | mathfunc; - final static int sqrt = 7 | 1 << 9 | mathfunc; + final static int javascript = 3 | 1 << 9 | mathfunc | implicitStringCommand; + final static int sin = 4 | 1 << 9 | mathfunc; + final static int cos = 5 | 1 << 9 | mathfunc; + final static int sqrt = 6 | 1 << 9 | mathfunc; // ___.xxx(a) @@ -543,6 +542,7 @@ final static int random = 1 | 2 << 9 | mathfunc; final static int data = 2 | 2 << 9 | mathfunc | command; final static int cross = 3 | 2 << 9 | mathfunc; + final static int script = 4 | 2 << 9 | mathfunc | command; // ___.xxx(a,b) Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-08-16 18:17:54 UTC (rev 9741) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-08-16 18:58:44 UTC (rev 9742) @@ -3055,7 +3055,9 @@ // refresh(2) indicates this is a mouse motion -- not going through Eval script // so we bypass Eval and mainline on the other viewer! // refresh(-1) is used in stateManager to force no repaint) - // refresh(3) is used by operations to ONLY do a repaint -- no syncing + // refresh(3) is used by operations to ONLY do a repaint -- no syncing + if (repaintManager == null) + return; if (mode > 0) repaintManager.refresh(); if (mode % 3 != 0 && statusManager.doSync()) @@ -3393,6 +3395,7 @@ /// direct no-queue use: public String scriptWait(String strScript) { + System.out.println("Viewer scriptWait1 " + htmlName + " " + strScript + " "); scriptManager.waitForQueue(); boolean doTranslateTemp = GT.getDoTranslate(); GT.setDoTranslate(false); @@ -3404,6 +3407,7 @@ } public Object scriptWaitStatus(String strScript, String statusList) { + System.out.println("Viewer scriptWait2 " + htmlName + " " + strScript); scriptManager.waitForQueue(); boolean doTranslateTemp = GT.getDoTranslate(); GT.setDoTranslate(false); @@ -3415,6 +3419,7 @@ public Object evalStringWaitStatus(String returnType, String strScript, String statusList) { + System.out.println("Viewer scriptWait3 " + htmlName + " " + strScript); scriptManager.waitForQueue(); return evalStringWaitStatus(returnType, strScript, statusList, false, false, false); @@ -3850,7 +3855,7 @@ statusManager.setStatusScriptStarted(iscript, script); } - Vector getStatusChanged(String statusNameList) { + Object getStatusChanged(String statusNameList) { return statusManager.getStatusChanged(statusNameList); } @@ -6317,14 +6322,15 @@ } public void syncScript(String script, String applet) { - boolean isAll = ("*".equals(applet)); - boolean allButMe = (">".equals(applet)); - boolean disableSend = ("~".equals(applet)); - boolean justMe = disableSend || (".".equals(applet)); + // * : all applets + // > : all OTHER applets + // . : just me + // ~ : disable send (just me) + boolean disableSend = "~".equals(applet); //null same as ">" -- "all others" - if (!justMe) { - statusManager.syncSend(script, (isAll || allButMe ? null : applet)); - if (!isAll) + if (!disableSend && !".".equals(applet)) { + statusManager.syncSend(script, applet); + if (!"*".equals(applet)) return; } if (script.equalsIgnoreCase("on")) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-08-17 04:46:34
|
Revision: 9748 http://jmol.svn.sourceforge.net/jmol/?rev=9748&view=rev Author: hansonr Date: 2008-08-17 04:46:32 +0000 (Sun, 17 Aug 2008) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/modelset/ModelCollection.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/jmol/modelset/ModelCollection.java =================================================================== --- trunk/Jmol/src/org/jmol/modelset/ModelCollection.java 2008-08-17 00:28:07 UTC (rev 9747) +++ trunk/Jmol/src/org/jmol/modelset/ModelCollection.java 2008-08-17 04:46:32 UTC (rev 9748) @@ -1032,8 +1032,8 @@ models[modelDataIndex].defaultRotationRadius = (type .startsWith("ramachandran") ? 260 : 12); model.dataFrames.put(type, new Integer(modelDataIndex)); - } - if (type.indexOf(" ") > 0 && type.indexOf("deriv") < 0) { //generic quaternion + } + if (type.startsWith("quaternion") && type.indexOf("deriv") < 0) { //generic quaternion type = type.substring(0, type.indexOf(" ")); model.dataFrames.put(type, new Integer(modelDataIndex)); } Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-17 00:28:07 UTC (rev 9747) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-17 04:46:32 UTC (rev 9748) @@ -3,6 +3,7 @@ version=11.6.RC8 +# bug fix: ramachandran / ramachandran r navigation problem # code: Minor refactoring and pruning. # --- Core applet now 715K (JmolApplet0.jar + _Core, _Jars, _Main, _Popup, and _Viewer) # code: Pre-Jmol.js button controls removed, saving about 10K This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-08-17 05:03:17
|
Revision: 9749 http://jmol.svn.sourceforge.net/jmol/?rev=9749&view=rev Author: hansonr Date: 2008-08-17 05:03:13 +0000 (Sun, 17 Aug 2008) Log Message: ----------- quaternion scaling problem Modified Paths: -------------- trunk/Jmol/src/org/jmol/modelset/ModelCollection.java trunk/Jmol/src/org/jmol/viewer/Eval.java Modified: trunk/Jmol/src/org/jmol/modelset/ModelCollection.java =================================================================== --- trunk/Jmol/src/org/jmol/modelset/ModelCollection.java 2008-08-17 04:46:32 UTC (rev 9748) +++ trunk/Jmol/src/org/jmol/modelset/ModelCollection.java 2008-08-17 05:03:13 UTC (rev 9749) @@ -1029,8 +1029,6 @@ model.dataFrames = new Hashtable(); models[modelDataIndex].dataSourceFrame = modelIndex; models[modelDataIndex].jmolFrameType = type; - models[modelDataIndex].defaultRotationRadius = (type - .startsWith("ramachandran") ? 260 : 12); model.dataFrames.put(type, new Integer(modelDataIndex)); } if (type.startsWith("quaternion") && type.indexOf("deriv") < 0) { //generic quaternion Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-08-17 04:46:32 UTC (rev 9748) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2008-08-17 05:03:13 UTC (rev 9749) @@ -4576,6 +4576,7 @@ break; } runScript(script); + viewer.setRotationRadius(isQuaternion ? 12.5f : 260f, true); viewer.loadShape(JmolConstants.SHAPE_ECHO); showString("frame " + viewer.getModelNumberDotted(modelCount - 1) + " created: " + type); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-08-20 02:38:03
|
Revision: 9754 http://jmol.svn.sourceforge.net/jmol/?rev=9754&view=rev Author: hansonr Date: 2008-08-20 02:38:00 +0000 (Wed, 20 Aug 2008) Log Message: ----------- version=11.6.RC9_dev # bug fix: print $planeA - capital letters in a draw name disallow finding it. Modified Paths: -------------- trunk/Jmol/src/org/jmol/shape/MeshCollection.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/jmol/shape/MeshCollection.java =================================================================== --- trunk/Jmol/src/org/jmol/shape/MeshCollection.java 2008-08-19 17:13:53 UTC (rev 9753) +++ trunk/Jmol/src/org/jmol/shape/MeshCollection.java 2008-08-20 02:38:00 UTC (rev 9754) @@ -406,15 +406,17 @@ if (JmolConstants.PREVIOUS_MESH_ID.equals(thisID)) return (previousMeshID == null ? meshCount - 1 : getIndexFromName(previousMeshID)); - if (TextFormat.isWild(thisID)) + if (TextFormat.isWild(thisID)) { + thisID = thisID.toLowerCase(); for (int i = meshCount; --i >= 0;) { if (meshes[i] != null && TextFormat.isMatch(meshes[i].thisID, thisID, true, true)) return i; } + } else for (int i = meshCount; --i >= 0;) { - if (meshes[i] != null && thisID.equals(meshes[i].thisID)) + if (meshes[i] != null && thisID.equalsIgnoreCase(meshes[i].thisID)) return i; } return -1; Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-19 17:13:53 UTC (rev 9753) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-20 02:38:00 UTC (rev 9754) @@ -3,7 +3,7 @@ version=11.6.RC9_dev -# SVN TEST +# bug fix: print $planeA - capital letters in a draw name disallow finding it. # ----------------------------------------------------------------------------- #version=11.6.RC8 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-08-20 06:17:51
|
Revision: 9755 http://jmol.svn.sourceforge.net/jmol/?rev=9755&view=rev Author: hansonr Date: 2008-08-20 06:17:47 +0000 (Wed, 20 Aug 2008) Log Message: ----------- 11.6.RC9 VERSION # new feature: getProperty PointGroupInfo Modified Paths: -------------- trunk/Jmol/src/org/jmol/api/SymmetryInterface.java trunk/Jmol/src/org/jmol/modelset/ModelSet.java trunk/Jmol/src/org/jmol/symmetry/PointGroup.java trunk/Jmol/src/org/jmol/symmetry/Symmetry.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/PropertyManager.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/api/SymmetryInterface.java =================================================================== --- trunk/Jmol/src/org/jmol/api/SymmetryInterface.java 2008-08-20 02:38:00 UTC (rev 9754) +++ trunk/Jmol/src/org/jmol/api/SymmetryInterface.java 2008-08-20 06:17:47 UTC (rev 9755) @@ -19,7 +19,8 @@ public abstract String getPointGroupName(); public abstract String getPointGroupInfo(int modelIndex, boolean asDraw, - String type, int index, float scale); + String type, int index, float scale, + Hashtable info); public abstract void setSpaceGroup(boolean doNormalize); Modified: trunk/Jmol/src/org/jmol/modelset/ModelSet.java =================================================================== --- trunk/Jmol/src/org/jmol/modelset/ModelSet.java 2008-08-20 02:38:00 UTC (rev 9754) +++ trunk/Jmol/src/org/jmol/modelset/ModelSet.java 2008-08-20 06:17:47 UTC (rev 9755) @@ -425,19 +425,25 @@ } public String calculatePointGroup(BitSet bsAtoms) { - return calculatePointGroupForFirstModel(bsAtoms, true, false, false, null, 0, 0); + return calculatePointGroupForFirstModel(bsAtoms, true, false, false, null, 0, 0, null); } + public Hashtable getPointGroupInfo(BitSet bsAtoms) { + Hashtable info = new Hashtable(); + calculatePointGroupForFirstModel(bsAtoms, false, true, false, null, 0, 0, info); + return info; + } + public String getPointGroupAsString(BitSet bsAtoms, boolean asDraw, String type, int index, float scale) { - return calculatePointGroupForFirstModel(bsAtoms, false, true, asDraw, type, index, scale); + return calculatePointGroupForFirstModel(bsAtoms, false, true, asDraw, type, index, scale, null); } private String calculatePointGroupForFirstModel(BitSet bsAtoms, boolean forceNew, boolean doAll, boolean asDraw, String type, - int index, float scale) { + int index, float scale, Hashtable info) { int modelIndex = viewer.getCurrentModelIndex(); int iAtom = BitSetUtil.firstSetBit(bsAtoms); if (modelIndex < 0 && iAtom >= 0) @@ -466,7 +472,7 @@ if (doAll) return (modelCount > 1 ? "frame " + getModelNumberDotted(modelIndex) + "; " : "") - + symmetry.getPointGroupInfo(modelIndex, asDraw, type, index, scale); + + symmetry.getPointGroupInfo(modelIndex, asDraw, type, index, scale, info); return symmetry.getPointGroupName(); } @@ -789,5 +795,6 @@ super.deleteAtoms(-1, 0, 0, null, null); return bsDeleted; } + } Modified: trunk/Jmol/src/org/jmol/symmetry/PointGroup.java =================================================================== --- trunk/Jmol/src/org/jmol/symmetry/PointGroup.java 2008-08-20 02:38:00 UTC (rev 9754) +++ trunk/Jmol/src/org/jmol/symmetry/PointGroup.java 2008-08-20 06:17:47 UTC (rev 9755) @@ -25,6 +25,9 @@ package org.jmol.symmetry; import java.util.BitSet; +import java.util.Hashtable; +import java.util.Vector; + import javax.vecmath.Point3f; import javax.vecmath.Vector3f; @@ -120,7 +123,8 @@ private int nAtoms; private float radius; private float distanceTolerance = 0.2f; - private float linearTolerance = 0.99f; // 8 degrees + private float linearTolerance = 8f; + private float cosTolerance = 0.99f; // 8 degrees private String name = "C_1?"; private Operation principalAxis = new Operation(null); private Operation principalPlane = new Operation(null); @@ -138,7 +142,8 @@ PointGroup(Atom[] atomset, BitSet bsAtoms, boolean haveVibration, float distanceTolerance, float linearTolerance) { this.distanceTolerance = distanceTolerance; - this.linearTolerance = (float) (Math.cos(linearTolerance / 180 * Math.PI)); + this.linearTolerance = linearTolerance; + cosTolerance = (float) (Math.cos(linearTolerance / 180 * Math.PI)); Point3f[] atoms; if ((atoms = getAtoms(atomset, bsAtoms)) == null) { @@ -419,12 +424,12 @@ private boolean isParallel(Vector3f v1, Vector3f v2) { // note -- these MUST be unit vectors - return (Math.abs(v1.dot(v2)) >= linearTolerance); + return (Math.abs(v1.dot(v2)) >= cosTolerance); } private boolean isPerpendicular(Vector3f v1, Vector3f v2) { // note -- these MUST be unit vectors - return (Math.abs(v1.dot(v2)) <= 1 - linearTolerance); + return (Math.abs(v1.dot(v2)) <= 1 - cosTolerance); } int maxElement = 0; @@ -801,6 +806,7 @@ int type; int order; int index; + int typeIndex; Vector3f normalOrAxis; Operation() { @@ -844,7 +850,7 @@ } String getInfo(int modelIndex, boolean asDraw, String type, int index, - float scaleFactor) { + float scaleFactor, Hashtable info) { Vector3f v = new Vector3f(); Operation op; if (scaleFactor == 0) @@ -855,7 +861,7 @@ nType[axes[i][j].type][0]++; StringBuffer sb = new StringBuffer("# " + nAtoms + " atoms\n"); if (asDraw) { - boolean haveType = (type.length() > 0); + boolean haveType = (type != null && type.length() > 0); boolean anyProperAxis = (type.equalsIgnoreCase("Cn")); boolean anyImproperAxis = (type.equalsIgnoreCase("Sn")); sb.append("set perspectivedepth off;\n"); @@ -931,9 +937,10 @@ sb.append(", nSn=" + nType[OPERATION_IMPROPER_AXIS][0]); sb.append(": "); for (int i = maxAxis; --i >= 2;) - if (nAxes[i] > 0) - sb.append(" n" + (i < firstProper ? "S" : "C") + (i % firstProper) - + "=" + nAxes[i]); + if (nAxes[i] > 0) { + String s = " n" + (i < firstProper ? "S" : "C") + (i % firstProper); + sb.append(s + "=" + nAxes[i]); + } sb.append(";\n"); } else { int n = 0; @@ -942,19 +949,30 @@ if (nAxes[i] > 0) { n = nUnique[i]; String label = axes[i][0].getLabel(); + if (info != null) + info.put("n" + label, new Integer(nAxes[i])); sb.append("\n\n" + name + "\tn" + label + "\t" + nAxes[i] + "\t" + n); n *= nAxes[i]; nTotal += n; nType[axes[i][0].type][1] += n; + Vector vinfo = (info == null ? null : new Vector()); for (int j = 0; j < nAxes[i]; j++) { + axes[i][j].typeIndex = j + 1; + if (vinfo != null) { + vinfo.add(axes[i][j].normalOrAxis); + } sb.append("\n" + name + "\t" + label + "_" + (j + 1) + "\t" + axes[i][j].normalOrAxis); } + if (info != null) + info.put(label, vinfo); } } if (haveInversionCenter) { nTotal++; sb.append("\n\n" + name + "\tCi\t" + Escape.escape(center)); + if (info != null) + info.put("Ci", center); } sb.append("\n"); sb.append("\n" + name + "\ttype\tnType\tnUnique"); @@ -977,6 +995,25 @@ sb.append(name + "\t\tTOTAL\t"); TextFormat.rFill(sb, " ", nTotal + "\n"); + + if (info != null) { + info.put("name", name); + info.put("nAtoms", new Integer(nAtoms)); + info.put("nTotal", new Integer(nTotal)); + info.put("nCi", new Integer(haveInversionCenter ? 1 : 0)); + info.put("nCs", new Integer(nAxes[0])); + info.put("nCn", new Integer(nType[OPERATION_PROPER_AXIS][0])); + info.put("nSn", new Integer(nType[OPERATION_IMPROPER_AXIS][0])); + info.put("distanceTolerance", new Float(distanceTolerance)); + info.put("linearTolerance", new Float(linearTolerance)); + info.put("detail", sb.toString().replace('\n', ';')); + if (principalAxis.index > 0) + info.put("principalAxis", principalAxis.getLabel() + "[" + + principalAxis.typeIndex + "]"); + if (principalPlane.index > 0) + info.put("principalPlane", principalPlane.getLabel() + "[" + + principalPlane.typeIndex + "]"); + } } return sb.toString(); } Modified: trunk/Jmol/src/org/jmol/symmetry/Symmetry.java =================================================================== --- trunk/Jmol/src/org/jmol/symmetry/Symmetry.java 2008-08-20 02:38:00 UTC (rev 9754) +++ trunk/Jmol/src/org/jmol/symmetry/Symmetry.java 2008-08-20 06:17:47 UTC (rev 9755) @@ -83,8 +83,9 @@ return pointGroup.getName(); } - public String getPointGroupInfo(int modelIndex, boolean asDraw, String type, int index, float scale) { - return pointGroup.getInfo(modelIndex, asDraw, type, index, scale); + public String getPointGroupInfo(int modelIndex, boolean asDraw, String type, + int index, float scale, Hashtable info) { + return pointGroup.getInfo(modelIndex, asDraw, type, index, scale, info); } // SpaceGroup methods Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-20 02:38:00 UTC (rev 9754) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-20 06:17:47 UTC (rev 9755) @@ -1,8 +1,10 @@ # Developers: to add a description of changes you have made, # add it on a line starting with # below the "version=..." line -version=11.6.RC9_dev +version=11.6.RC9 +# new feature: getProperty PointGroupInfo +# bug fix: show pointgroup draw null pointer exception # bug fix: print $planeA - capital letters in a draw name disallow finding it. # ----------------------------------------------------------------------------- Modified: trunk/Jmol/src/org/jmol/viewer/PropertyManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/PropertyManager.java 2008-08-20 02:38:00 UTC (rev 9754) +++ trunk/Jmol/src/org/jmol/viewer/PropertyManager.java 2008-08-20 06:17:47 UTC (rev 9755) @@ -80,6 +80,7 @@ "evaluate" , "<expression>", "", "menu" , "<type>", "current", "minimizationInfo", "", "", + "PointGroupInfo" , atomExpression, "(visible)", }; private final static int PROP_APPLET_INFO = 0; @@ -118,7 +119,8 @@ private final static int PROP_EVALUATE = 28; private final static int PROP_MENU = 29; private final static int PROP_MINIMIZATION_INFO = 30; - private final static int PROP_COUNT = 31; + private final static int PROP_POINTGROUP_INFO = 31; + private final static int PROP_COUNT = 32; //// static methods used by Eval and Viewer //// @@ -354,6 +356,8 @@ return viewer.getShapeInfo(); case PROP_STATE_INFO: return viewer.getStateInfo(myParam.toString()); + case PROP_POINTGROUP_INFO: + return viewer.getPointGroupInfo(myParam); case PROP_TRANSFORM_INFO: return viewer.getMatrixRotate(); case PROP_DATA_INFO: Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-08-20 02:38:00 UTC (rev 9754) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-08-20 06:17:47 UTC (rev 9755) @@ -6516,6 +6516,10 @@ return modelSet.calculatePointGroup(selectionManager.bsSelection); } + public Hashtable getPointGroupInfo(Object atomExpression) { + return modelSet.getPointGroupInfo(getAtomBitSet(atomExpression)); + } + public String getPointGroupAsString(boolean asDraw, String type, int index, float scale) { return modelSet.getPointGroupAsString(selectionManager.bsSelection, asDraw, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-08-20 13:11:16
|
Revision: 9756 http://jmol.svn.sourceforge.net/jmol/?rev=9756&view=rev Author: hansonr Date: 2008-08-20 13:11:10 +0000 (Wed, 20 Aug 2008) Log Message: ----------- version=11.6.RC9 # code: more efficient return of point group information and calculation Modified Paths: -------------- trunk/Jmol/src/org/jmol/api/SymmetryInterface.java trunk/Jmol/src/org/jmol/modelset/ModelCollection.java trunk/Jmol/src/org/jmol/modelset/ModelSet.java trunk/Jmol/src/org/jmol/symmetry/PointGroup.java trunk/Jmol/src/org/jmol/symmetry/Symmetry.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/jmol/api/SymmetryInterface.java =================================================================== --- trunk/Jmol/src/org/jmol/api/SymmetryInterface.java 2008-08-20 06:17:47 UTC (rev 9755) +++ trunk/Jmol/src/org/jmol/api/SymmetryInterface.java 2008-08-20 13:11:10 UTC (rev 9756) @@ -11,16 +11,18 @@ public interface SymmetryInterface { - public abstract void setPointGroup(Atom[] atomset, BitSet bsAtoms, + public abstract SymmetryInterface setPointGroup( + SymmetryInterface pointGroupPrevious, + Atom[] atomset, BitSet bsAtoms, boolean haveVibration, float distanceTolerance, float linearTolerance); public abstract String getPointGroupName(); - public abstract String getPointGroupInfo(int modelIndex, boolean asDraw, - String type, int index, float scale, - Hashtable info); + public abstract Object getPointGroupInfo(int modelIndex, boolean asDraw, + boolean asInfo, String type, + int index, float scale); public abstract void setSpaceGroup(boolean doNormalize); Modified: trunk/Jmol/src/org/jmol/modelset/ModelCollection.java =================================================================== --- trunk/Jmol/src/org/jmol/modelset/ModelCollection.java 2008-08-20 06:17:47 UTC (rev 9755) +++ trunk/Jmol/src/org/jmol/modelset/ModelCollection.java 2008-08-20 13:11:10 UTC (rev 9756) @@ -1339,8 +1339,10 @@ atoms[i].add(center); } else { ptTemp.add(atoms[i]); + System.out.println((Point3f)atoms[i]); matTemp.transform(atoms[i]); ptTemp.sub(atoms[i]); + System.out.println((Point3f)atoms[i]); } taint(i, TAINT_COORD); n++; Modified: trunk/Jmol/src/org/jmol/modelset/ModelSet.java =================================================================== --- trunk/Jmol/src/org/jmol/modelset/ModelSet.java 2008-08-20 06:17:47 UTC (rev 9755) +++ trunk/Jmol/src/org/jmol/modelset/ModelSet.java 2008-08-20 13:11:10 UTC (rev 9756) @@ -425,25 +425,27 @@ } public String calculatePointGroup(BitSet bsAtoms) { - return calculatePointGroupForFirstModel(bsAtoms, true, false, false, null, 0, 0, null); + return (String) calculatePointGroupForFirstModel(bsAtoms, false, + false, false, null, 0, 0); } public Hashtable getPointGroupInfo(BitSet bsAtoms) { - Hashtable info = new Hashtable(); - calculatePointGroupForFirstModel(bsAtoms, false, true, false, null, 0, 0, info); - return info; + return (Hashtable) calculatePointGroupForFirstModel(bsAtoms, false, + false, true, null, 0, 0); } public String getPointGroupAsString(BitSet bsAtoms, boolean asDraw, String type, int index, float scale) { - return calculatePointGroupForFirstModel(bsAtoms, false, true, asDraw, type, index, scale, null); + return (String) calculatePointGroupForFirstModel(bsAtoms, true, + asDraw, false, type, index, scale); } - private String calculatePointGroupForFirstModel(BitSet bsAtoms, - boolean forceNew, + SymmetryInterface pointGroup; + private Object calculatePointGroupForFirstModel(BitSet bsAtoms, boolean doAll, - boolean asDraw, String type, - int index, float scale, Hashtable info) { + boolean asDraw, + boolean asInfo, String type, + int index, float scale) { int modelIndex = viewer.getCurrentModelIndex(); int iAtom = BitSetUtil.firstSetBit(bsAtoms); if (modelIndex < 0 && iAtom >= 0) @@ -466,14 +468,18 @@ Object obj = getShapeProperty(JmolConstants.SHAPE_VECTORS, "mad", iAtom); boolean haveVibration = (obj != null && ((Integer) obj).intValue() != 0 || viewer .isVibrationOn()); - SymmetryInterface symmetry = (SymmetryInterface) Interface.getOptionInterface("symmetry.Symmetry"); - symmetry.setPointGroup(atoms, bs, haveVibration, + SymmetryInterface symmetry = (SymmetryInterface) Interface + .getOptionInterface("symmetry.Symmetry"); + pointGroup = symmetry.setPointGroup(pointGroup, atoms, bs, haveVibration, viewer.getPointGroupTolerance(0), viewer.getPointGroupTolerance(1)); - if (doAll) - return (modelCount > 1 ? "frame " + getModelNumberDotted(modelIndex) - + "; " : "") - + symmetry.getPointGroupInfo(modelIndex, asDraw, type, index, scale, info); - return symmetry.getPointGroupName(); + if (!doAll && !asInfo) + return pointGroup.getPointGroupName(); + Object ret = pointGroup.getPointGroupInfo(modelIndex, asDraw, asInfo, type, + index, scale); + if (asInfo) + return ret; + return (modelCount > 1 ? "frame " + getModelNumberDotted(modelIndex) + "; " + : "") + ret; } private BitSet modelsOf(BitSet bsAtoms, BitSet bsAllAtoms) { Modified: trunk/Jmol/src/org/jmol/symmetry/PointGroup.java =================================================================== --- trunk/Jmol/src/org/jmol/symmetry/PointGroup.java 2008-08-20 06:17:47 UTC (rev 9755) +++ trunk/Jmol/src/org/jmol/symmetry/PointGroup.java 2008-08-20 13:11:10 UTC (rev 9756) @@ -139,27 +139,48 @@ final private Point3f center = new Point3f(); - PointGroup(Atom[] atomset, BitSet bsAtoms, boolean haveVibration, - float distanceTolerance, float linearTolerance) { + private Point3f[] atoms; + private int[] elements; + + public static PointGroup getPointGroup(PointGroup pgLast, Atom[] atomset, + BitSet bsAtoms, boolean haveVibration, + float distanceTolerance, + float linearTolerance) { + PointGroup pg = new PointGroup(); + return (pg.set(pgLast, atomset, bsAtoms, haveVibration, distanceTolerance, + linearTolerance) ? pg : pgLast); + } + + private PointGroup() { + } + + public boolean isEqual(PointGroup pg) { + if (pg == null) + return false; + if (this.linearTolerance != pg.linearTolerance + || this.distanceTolerance != pg.distanceTolerance + || this.nAtoms != pg.nAtoms) + return false; + for (int i = 0; i < nAtoms; i++) { + // real floating == 0 here because they must be IDENTICAL POSITIONS + if (elements[i] != pg.elements[i] || atoms[i].distance(pg.atoms[i]) != 0) + return false; + } + return true; + } + + private boolean set(PointGroup pgLast, Atom[] atomset, BitSet bsAtoms, + boolean haveVibration, float distanceTolerance, float linearTolerance) { this.distanceTolerance = distanceTolerance; this.linearTolerance = linearTolerance; cosTolerance = (float) (Math.cos(linearTolerance / 180 * Math.PI)); - - Point3f[] atoms; - if ((atoms = getAtoms(atomset, bsAtoms)) == null) { + if (!getAtomsAndElements(atomset, bsAtoms)) { Logger.error("Too many atoms for point group calculation"); name = "point group not determined -- atomCount > " + ATOM_COUNT_MAX + " -- select fewer atoms and try again."; - return; + return true; } - int[] elements = new int[atoms.length]; - int n = 0; - for (int i = atomset.length; --i >= 0;) - if (bsAtoms.get(i)) { - int bondIndex = 1 + Math.max(3, atomset[i].getCovalentBondCount()); - elements[n++] = atomset[i].getElementNumber() * bondIndex; - } - getElementArrays(atoms, elements); + getElementCounts(); if (haveVibration) { Point3f[] atomVibs = new Point3f[atoms.length]; for (int i = atoms.length; --i >= 0;) { @@ -170,7 +191,9 @@ } atoms = atomVibs; } - findInversionCenter(atoms, elements); + if (isEqual(pgLast)) + return false; + findInversionCenter(); if (isLinear(atoms)) { if (haveInversionCenter) { @@ -185,17 +208,17 @@ axes[0] = new Operation[1]; principalPlane = axes[0][nAxes[0]++] = new Operation(vTemp); } - return; + return true; } axes[0] = new Operation[15]; int nPlanes = 0; - findCAxes(atoms, elements); - nPlanes = findPlanes(atoms, elements); - findAdditionalAxes(nPlanes, atoms, elements); + findCAxes(); + nPlanes = findPlanes(); + findAdditionalAxes(nPlanes); /* flow chart contribution of Dean Johnston */ - n = getHighestOrder(); + int n = getHighestOrder(); if (nAxes[c3] > 1) { // must be Ix, Ox, or Tx if (nAxes[c5] > 1) { @@ -226,11 +249,11 @@ if (n < 2) { if (nPlanes == 1) { name = "Cs"; - return; + return true; } if (haveInversionCenter) { name = "Ci"; - return; + return true; } name = "C1"; } else if ((n % 2) == 1 && nAxes[c2] > 0 || (n % 2) == 0 && nAxes[c2] > 1) { @@ -280,6 +303,7 @@ name = "C" + n + "h"; } } + return true; } private Operation setPrincipalAxis(int n, int nPlanes) { @@ -324,17 +348,20 @@ } private final static int ATOM_COUNT_MAX = 100; - private Atom[] getAtoms(Atom[] atomset, BitSet bsAtoms) { + private boolean getAtomsAndElements(Atom[] atomset, BitSet bsAtoms) { int atomCount = BitSetUtil.cardinalityOf(bsAtoms); if (atomCount > ATOM_COUNT_MAX) - return null; - Atom[] atoms = new Atom[atomCount]; - if (atomCount == 0) - return atoms; + return false; + Point3f[] atoms = this.atoms = new Point3f[atomCount]; + elements = new int[atomCount]; + if (atomCount == 0) + return true; nAtoms = 0; for (int i = BitSetUtil.length(bsAtoms); --i >= 0;) if (bsAtoms.get(i)) { - atoms[nAtoms] = atomset[i]; + atoms[nAtoms] = new Point3f(atomset[i]); + int bondIndex = 1 + Math.max(3, atomset[i].getCovalentBondCount()); + elements[nAtoms] = atomset[i].getElementNumber() * bondIndex; center.add(atoms[nAtoms++]); } center.scale(1f / nAtoms); @@ -344,19 +371,18 @@ centerAtomIndex = i; radius = Math.max(radius, r); } - return atoms; + return true; } - private void findInversionCenter(Point3f[] atoms, int[] elements) { - haveInversionCenter = checkOperation(atoms, elements, null, center, -1); + private void findInversionCenter() { + haveInversionCenter = checkOperation(null, center, -1); if (haveInversionCenter) { axes[1] = new Operation[1]; axes[1][0] = new Operation(); } } - private boolean checkOperation(Point3f[] atoms, int[] elements, Quaternion q, - Point3f center, int iOrder) { + private boolean checkOperation(Quaternion q, Point3f center, int iOrder) { Point3f pt = new Point3f(); int nFound = 0; boolean isInversion = (iOrder < firstProper); @@ -435,7 +461,7 @@ int maxElement = 0; int[] eCounts; - private void getElementArrays(Point3f[] atoms, int[] elements) { + private void getElementCounts() { for (int i = atoms.length; --i >= 0;) { int e1 = elements[i]; if (e1 > maxElement) @@ -443,10 +469,10 @@ } eCounts = new int[++maxElement]; for (int i = atoms.length; --i >= 0;) - eCounts[elements[i]]++; + eCounts[elements[i]]++; } - private int findCAxes(Point3f[] atoms, int[] elements) { + private int findCAxes() { Vector3f v1 = new Vector3f(); Vector3f v2 = new Vector3f(); Vector3f v3 = new Vector3f(); @@ -474,12 +500,12 @@ v1.normalize(); v2.normalize(); if (isParallel(v1, v2)) { - getAllAxes(v1, atoms, elements); + getAllAxes(v1); continue; } if (nAxes[c2] < axesMaxN[c2]) { v3.set(pt); - getAllAxes(v3, atoms, elements); + getAllAxes(v3); } // look for the axis perpendicular to the A -- 0 -- B plane @@ -491,7 +517,7 @@ continue; if (nAxes[iOrder] < axesMaxN[iOrder]) { v3.cross(v1, v2); - checkAxisOrder(atoms, elements, iOrder, v3, center); + checkAxisOrder(iOrder, v3, center); } } } @@ -515,7 +541,7 @@ v3.add(vs[k]); if (v3.length() < 1.0) continue; - checkAxisOrder(atoms, elements, c3, v3, center); + checkAxisOrder(c3, v3, center); } // Now check for triples of elements that will define @@ -549,15 +575,15 @@ v1.normalize(); v2.normalize(); v3.cross(v1, v2); - getAllAxes(v3, atoms, elements); -// checkAxisOrder(atoms, elements, 3, v3, center); + getAllAxes(v3); +// checkAxisOrder(3, v3, center); pt.set(atoms[i]); pt.add(atoms[j]); pt.add(atoms[k]); v1.set(pt); v1.normalize(); if (!isParallel(v1, v3)) - getAllAxes(v1, atoms, elements); + getAllAxes(v1); if (nAxes[c5] == axesMaxN[c5]) break out; } @@ -594,17 +620,17 @@ v1.set(vs[i]); v1.sub(vs[j]); } - checkAxisOrder(atoms, elements, c2, v1, center); + checkAxisOrder(c2, v1, center); } return getHighestOrder(); } - private void getAllAxes(Vector3f v3, Point3f[] atoms, int[] elements) { + private void getAllAxes(Vector3f v3) { for (int o = c2; o < maxAxis; o++) if (nAxes[o] < axesMaxN[o]) - checkAxisOrder(atoms, elements, o, v3, center); + checkAxisOrder(o, v3, center); } private int getHighestOrder() { @@ -620,8 +646,7 @@ return n; } - private boolean checkAxisOrder(Point3f[] atoms, int[] elements, int iOrder, - Vector3f v, Point3f center) { + private boolean checkAxisOrder(int iOrder, Vector3f v, Point3f center) { switch (iOrder) { case c8: if (nAxes[c3] > 0) @@ -646,35 +671,35 @@ if (haveAxis(iOrder, v)) return false; Quaternion q = new Quaternion(v, (iOrder < firstProper ? 180 : 0) + 360 / (iOrder % firstProper)); - if (!checkOperation(atoms, elements, q, center, iOrder)) + if (!checkOperation(q, center, iOrder)) return false; addAxis(iOrder, v); // check for Sn: switch (iOrder) { case c2: - checkAxisOrder(atoms, elements, s4, v, center);//D2d, D4h, D6d + checkAxisOrder(s4, v, center);//D2d, D4h, D6d break; case c3: - checkAxisOrder(atoms, elements, s3, v, center);//C3h, D3h + checkAxisOrder(s3, v, center);//C3h, D3h if (haveInversionCenter) addAxis(s6, v); break; case c4: addAxis(c2, v); - checkAxisOrder(atoms, elements, s4, v, center);//D2d, D4h, D6d - checkAxisOrder(atoms, elements, s8, v, center);//D4d + checkAxisOrder(s4, v, center);//D2d, D4h, D6d + checkAxisOrder(s8, v, center);//D4d break; case c5: - checkAxisOrder(atoms, elements, s5, v, center); //C5h, D5h + checkAxisOrder(s5, v, center); //C5h, D5h if (haveInversionCenter) addAxis(s10, v); break; case c6: addAxis(c2, v); addAxis(c3, v); - checkAxisOrder(atoms, elements, s3, v, center);//C6h, D6h - checkAxisOrder(atoms, elements, s6, v, center);//C6h, D6h - checkAxisOrder(atoms, elements, s12, v, center);//D6d + checkAxisOrder(s3, v, center);//C6h, D6h + checkAxisOrder(s6, v, center);//C6h, D6h + checkAxisOrder(s12, v, center);//D6d break; case c8: //note -- D8d would have a S16 axis. This will not be found. @@ -705,7 +730,7 @@ return false; } - private int findPlanes(Point3f[] atoms, int[] elements) { + private int findPlanes() { Point3f pt = new Point3f(); Vector3f v1 = new Vector3f(); Vector3f v2 = new Vector3f(); @@ -734,7 +759,7 @@ if (!isParallel(v1, v2)) { v3.cross(v1, v2); v3.normalize(); - nPlanes = getPlane(nPlanes, v3, atoms, elements, center); + nPlanes = getPlane(nPlanes, v3, center); } // second, look for planes perpendicular to the A -- B line @@ -742,7 +767,7 @@ v3.set(a2); v3.sub(a1); v3.normalize(); - nPlanes = getPlane(nPlanes, v3, atoms, elements, center); + nPlanes = getPlane(nPlanes, v3, center); if (nPlanes == axesMaxN[0]) return nPlanes; } @@ -752,21 +777,19 @@ if (haveAxes) for (int i = c2; i < maxAxis; i++) for (int j = 0; j < nAxes[i]; j++) - nPlanes = getPlane(nPlanes, axes[i][j].normalOrAxis, atoms, elements, - center); + nPlanes = getPlane(nPlanes, axes[i][j].normalOrAxis, center); return nPlanes; } - private int getPlane(int nPlanes, Vector3f v3, Point3f[] atoms, - int[] elements, Point3f center2) { + private int getPlane(int nPlanes, Vector3f v3, Point3f center2) { if (!haveAxis(0, v3) - && checkOperation(atoms, elements, new Quaternion(v3, 180), center, + && checkOperation(new Quaternion(v3, 180), center, -1)) axes[0][nAxes[0]++] = new Operation(v3); return nAxes[0]; } - private void findAdditionalAxes(int nPlanes, Point3f[] atoms, int[] elements) { + private void findAdditionalAxes(int nPlanes) { Operation[] planes = axes[0]; int Cn = 0; @@ -775,10 +798,10 @@ && nAxes[Cn] == 0) { // cross pairs of plane normals. We don't need many. vTemp.cross(planes[0].normalOrAxis, planes[1].normalOrAxis); - if (!checkAxisOrder(atoms, elements, Cn, vTemp, center) + if (!checkAxisOrder(Cn, vTemp, center) && nPlanes > 2) { vTemp.cross(planes[1].normalOrAxis, planes[2].normalOrAxis); - checkAxisOrder(atoms, elements, Cn - 1, vTemp, center); + checkAxisOrder(Cn - 1, vTemp, center); } } if (nAxes[c2] == 0 && nPlanes > 2) { @@ -786,7 +809,7 @@ for (int i = 0; i < nPlanes - 1; i++) { for (int j = i + 1; j < nPlanes; j++) { vTemp.add(planes[1].normalOrAxis, planes[2].normalOrAxis); - if (checkAxisOrder(atoms, elements, c2, vTemp, center)) + if (checkAxisOrder(c2, vTemp, center)) System.out.println("found a C2 axis by adding plane normals"); } } @@ -849,8 +872,15 @@ } } - String getInfo(int modelIndex, boolean asDraw, String type, int index, - float scaleFactor, Hashtable info) { + String drawInfo; + String drawType = ""; + Hashtable info; + String textInfo; + + Object getInfo(int modelIndex, boolean asDraw, boolean asInfo, String type, + int index, float scaleFactor) { + if (asInfo) + info = new Hashtable(); Vector3f v = new Vector3f(); Operation op; if (scaleFactor == 0) @@ -862,6 +892,7 @@ StringBuffer sb = new StringBuffer("# " + nAtoms + " atoms\n"); if (asDraw) { boolean haveType = (type != null && type.length() > 0); + drawType = (haveType ? type : ""); boolean anyProperAxis = (type.equalsIgnoreCase("Cn")); boolean anyImproperAxis = (type.equalsIgnoreCase("Sn")); sb.append("set perspectivedepth off;\n"); @@ -942,38 +973,43 @@ sb.append(s + "=" + nAxes[i]); } sb.append(";\n"); - } else { - int n = 0; - int nTotal = 1; - for (int i = maxAxis; --i >= 0;) { - if (nAxes[i] > 0) { - n = nUnique[i]; - String label = axes[i][0].getLabel(); - if (info != null) - info.put("n" + label, new Integer(nAxes[i])); - sb.append("\n\n" + name + "\tn" + label + "\t" + nAxes[i] + "\t" + n); - n *= nAxes[i]; - nTotal += n; - nType[axes[i][0].type][1] += n; - Vector vinfo = (info == null ? null : new Vector()); - for (int j = 0; j < nAxes[i]; j++) { - axes[i][j].typeIndex = j + 1; - if (vinfo != null) { - vinfo.add(axes[i][j].normalOrAxis); - } - sb.append("\n" + name + "\t" + label + "_" + (j + 1) + "\t" - + axes[i][j].normalOrAxis); + drawInfo = sb.toString(); + return drawInfo; + } + int n = 0; + int nTotal = 1; + for (int i = maxAxis; --i >= 0;) { + if (nAxes[i] > 0) { + n = nUnique[i]; + String label = axes[i][0].getLabel(); + if (info != null) + info.put("n" + label, new Integer(nAxes[i])); + sb.append("\n\n" + name + "\tn" + label + "\t" + nAxes[i] + "\t" + n); + n *= nAxes[i]; + nTotal += n; + nType[axes[i][0].type][1] += n; + Vector vinfo = (info == null ? null : new Vector()); + for (int j = 0; j < nAxes[i]; j++) { + axes[i][j].typeIndex = j + 1; + if (vinfo != null) { + vinfo.add(axes[i][j].normalOrAxis); } - if (info != null) - info.put(label, vinfo); + sb.append("\n" + name + "\t" + label + "_" + (j + 1) + "\t" + + axes[i][j].normalOrAxis); } + if (info != null) + info.put(label, vinfo); } - if (haveInversionCenter) { - nTotal++; + } + if (haveInversionCenter) { + nTotal++; + if (info == null) sb.append("\n\n" + name + "\tCi\t" + Escape.escape(center)); - if (info != null) - info.put("Ci", center); - } + else + info.put("Ci", center); + } + + if (info == null) { sb.append("\n"); sb.append("\n" + name + "\ttype\tnType\tnUnique"); sb.append("\n" + name + "\tE\t 1\t 1"); @@ -995,26 +1031,23 @@ sb.append(name + "\t\tTOTAL\t"); TextFormat.rFill(sb, " ", nTotal + "\n"); - - if (info != null) { - info.put("name", name); - info.put("nAtoms", new Integer(nAtoms)); - info.put("nTotal", new Integer(nTotal)); - info.put("nCi", new Integer(haveInversionCenter ? 1 : 0)); - info.put("nCs", new Integer(nAxes[0])); - info.put("nCn", new Integer(nType[OPERATION_PROPER_AXIS][0])); - info.put("nSn", new Integer(nType[OPERATION_IMPROPER_AXIS][0])); - info.put("distanceTolerance", new Float(distanceTolerance)); - info.put("linearTolerance", new Float(linearTolerance)); - info.put("detail", sb.toString().replace('\n', ';')); - if (principalAxis.index > 0) - info.put("principalAxis", principalAxis.getLabel() + "[" - + principalAxis.typeIndex + "]"); - if (principalPlane.index > 0) - info.put("principalPlane", principalPlane.getLabel() + "[" - + principalPlane.typeIndex + "]"); - } + textInfo = sb.toString(); + return textInfo; } - return sb.toString(); + info.put("name", name); + info.put("nAtoms", new Integer(nAtoms)); + info.put("nTotal", new Integer(nTotal)); + info.put("nCi", new Integer(haveInversionCenter ? 1 : 0)); + info.put("nCs", new Integer(nAxes[0])); + info.put("nCn", new Integer(nType[OPERATION_PROPER_AXIS][0])); + info.put("nSn", new Integer(nType[OPERATION_IMPROPER_AXIS][0])); + info.put("distanceTolerance", new Float(distanceTolerance)); + info.put("linearTolerance", new Float(linearTolerance)); + info.put("detail", sb.toString().replace('\n', ';')); + if (principalAxis.index > 0) + info.put("principalAxis", principalAxis.normalOrAxis); + if (principalPlane.index > 0) + info.put("principalPlane", principalPlane.normalOrAxis); + return info; } } Modified: trunk/Jmol/src/org/jmol/symmetry/Symmetry.java =================================================================== --- trunk/Jmol/src/org/jmol/symmetry/Symmetry.java 2008-08-20 06:17:47 UTC (rev 9755) +++ trunk/Jmol/src/org/jmol/symmetry/Symmetry.java 2008-08-20 13:11:10 UTC (rev 9756) @@ -72,20 +72,32 @@ // as that will invalidate the Jar file modularization } - public void setPointGroup(Atom[] atomset, BitSet bsAtoms, - boolean haveVibration, float distanceTolerance, - float linearTolerance) { - pointGroup = new PointGroup(atomset, bsAtoms, haveVibration, + public SymmetryInterface setPointGroup(SymmetryInterface siLast, + Atom[] atomset, BitSet bsAtoms, + boolean haveVibration, + float distanceTolerance, + float linearTolerance) { + pointGroup = PointGroup.getPointGroup(siLast == null ? null + : ((Symmetry) siLast).pointGroup, atomset, bsAtoms, haveVibration, distanceTolerance, linearTolerance); + return this; } public String getPointGroupName() { return pointGroup.getName(); } - public String getPointGroupInfo(int modelIndex, boolean asDraw, String type, - int index, float scale, Hashtable info) { - return pointGroup.getInfo(modelIndex, asDraw, type, index, scale, info); + public Object getPointGroupInfo(int modelIndex, boolean asDraw, + boolean asInfo, String type, int index, + float scale) { + if (!asDraw && !asInfo && pointGroup.textInfo != null) + return pointGroup.textInfo; + else if (asDraw && pointGroup.drawInfo != null + && pointGroup.drawType.equals(type)) + return pointGroup.drawInfo; + else if (asInfo && pointGroup.info != null) + return pointGroup.info; + return pointGroup.getInfo(modelIndex, asDraw, asInfo, type, index, scale); } // SpaceGroup methods Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-20 06:17:47 UTC (rev 9755) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-20 13:11:10 UTC (rev 9756) @@ -3,6 +3,7 @@ version=11.6.RC9 +# code: more efficient return of point group information and calculation # new feature: getProperty PointGroupInfo # bug fix: show pointgroup draw null pointer exception # bug fix: print $planeA - capital letters in a draw name disallow finding it. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-08-22 14:00:35
|
Revision: 9760 http://jmol.svn.sourceforge.net/jmol/?rev=9760&view=rev Author: hansonr Date: 2008-08-22 14:00:28 +0000 (Fri, 22 Aug 2008) Log Message: ----------- 11.6.RC10 VERSION # bug fix -- draw pointgroup, write pointgroup draw Modified Paths: -------------- trunk/Jmol/src/org/jmol/symmetry/PointGroup.java trunk/Jmol/src/org/jmol/symmetry/Symmetry.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/jmol/symmetry/PointGroup.java =================================================================== --- trunk/Jmol/src/org/jmol/symmetry/PointGroup.java 2008-08-21 20:28:23 UTC (rev 9759) +++ trunk/Jmol/src/org/jmol/symmetry/PointGroup.java 2008-08-22 14:00:28 UTC (rev 9760) @@ -48,7 +48,7 @@ * */ -public class PointGroup { +class PointGroup { private final static int[] axesMaxN = new int[] { 15, // used for plane count @@ -142,7 +142,7 @@ private Point3f[] atoms; private int[] elements; - public static PointGroup getPointGroup(PointGroup pgLast, Atom[] atomset, + static PointGroup getPointGroup(PointGroup pgLast, Atom[] atomset, BitSet bsAtoms, boolean haveVibration, float distanceTolerance, float linearTolerance) { @@ -154,7 +154,7 @@ private PointGroup() { } - public boolean isEqual(PointGroup pg) { + private boolean isEqual(PointGroup pg) { if (pg == null) return false; if (this.linearTolerance != pg.linearTolerance @@ -892,7 +892,7 @@ StringBuffer sb = new StringBuffer("# " + nAtoms + " atoms\n"); if (asDraw) { boolean haveType = (type != null && type.length() > 0); - drawType = (haveType ? type : ""); + drawType = type = (haveType ? type : ""); boolean anyProperAxis = (type.equalsIgnoreCase("Cn")); boolean anyImproperAxis = (type.equalsIgnoreCase("Sn")); sb.append("set perspectivedepth off;\n"); @@ -1050,4 +1050,9 @@ info.put("principalPlane", principalPlane.normalOrAxis); return info; } + + boolean isDrawType(String type) { + return (drawInfo != null && drawType.equals(type == null ? "" : type)); + } + } Modified: trunk/Jmol/src/org/jmol/symmetry/Symmetry.java =================================================================== --- trunk/Jmol/src/org/jmol/symmetry/Symmetry.java 2008-08-21 20:28:23 UTC (rev 9759) +++ trunk/Jmol/src/org/jmol/symmetry/Symmetry.java 2008-08-22 14:00:28 UTC (rev 9760) @@ -92,8 +92,7 @@ float scale) { if (!asDraw && !asInfo && pointGroup.textInfo != null) return pointGroup.textInfo; - else if (asDraw && pointGroup.drawInfo != null - && pointGroup.drawType.equals(type)) + else if (asDraw && pointGroup.isDrawType(type)) return pointGroup.drawInfo; else if (asInfo && pointGroup.info != null) return pointGroup.info; Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-21 20:28:23 UTC (rev 9759) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-22 14:00:28 UTC (rev 9760) @@ -3,6 +3,8 @@ version=11.6.RC10 +# bug fix -- draw pointgroup, write pointgroup draw + # ----------------------------------------------------------------------------- #version=11.6.RC9 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-08-22 21:16:00
|
Revision: 9761 http://jmol.svn.sourceforge.net/jmol/?rev=9761&view=rev Author: hansonr Date: 2008-08-22 21:15:55 +0000 (Fri, 22 Aug 2008) Log Message: ----------- version=11.6.RC10 # bug fix -- draw pointgroup, write pointgroup draw Modified Paths: -------------- trunk/Jmol/src/org/jmol/shape/Measures.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/PickingManager.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/shape/Measures.java =================================================================== --- trunk/Jmol/src/org/jmol/shape/Measures.java 2008-08-22 14:00:28 UTC (rev 9760) +++ trunk/Jmol/src/org/jmol/shape/Measures.java 2008-08-22 21:15:55 UTC (rev 9761) @@ -226,6 +226,8 @@ } public Object getProperty(String property, int index) { + if ("pending".equals(property)) + return measurementPending; if ("count".equals(property)) return new Integer(measurementCount); if ("countPlusIndices".equals(property)) Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-22 14:00:28 UTC (rev 9760) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-22 21:15:55 UTC (rev 9761) @@ -4,6 +4,7 @@ version=11.6.RC10 # bug fix -- draw pointgroup, write pointgroup draw +# bug fix -- set picking spin, also compatibility of set picking spin and doing measurements # ----------------------------------------------------------------------------- Modified: trunk/Jmol/src/org/jmol/viewer/PickingManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/PickingManager.java 2008-08-22 14:00:28 UTC (rev 9760) +++ trunk/Jmol/src/org/jmol/viewer/PickingManager.java 2008-08-22 21:15:55 UTC (rev 9761) @@ -184,15 +184,14 @@ viewer.script("zoomTo " + Escape.escape(ptClicked)); return; case JmolConstants.PICKING_SPIN: - if (viewer.getSpinOn()) { + if (viewer.getSpinOn() || viewer.getPendingMeasurement() != null) { + resetMeasurement(); viewer.script("spin off"); return; } if (measurementQueued.getCount() >= 2) resetMeasurement(); int queuedAtomCount = measurementQueued.getCount(); - if (queuedAtomCount < 2) - return; if (queuedAtomCount == 1) { if (ptClicked == null) { if (measurementQueued.getAtomIndex(1) == atomIndex) Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-08-22 14:00:28 UTC (rev 9760) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2008-08-22 21:15:55 UTC (rev 9761) @@ -2726,6 +2726,10 @@ measurementPending); } + MeasurementPending getPendingMeasurement() { + return (MeasurementPending) getShapeProperty(JmolConstants.SHAPE_MEASURES, "pending"); + } + void clearAllMeasurements() { //Eval only setShapeProperty(JmolConstants.SHAPE_MEASURES, "clear", null); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-08-27 16:28:00
|
Revision: 9776 http://jmol.svn.sourceforge.net/jmol/?rev=9776&view=rev Author: hansonr Date: 2008-08-27 16:27:57 +0000 (Wed, 27 Aug 2008) Log Message: ----------- version=11.6.RC11 # bug fix: super/subscripts with antialiasdisplay Modified Paths: -------------- trunk/Jmol/src/org/jmol/g3d/Text3D.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/jmol/g3d/Text3D.java =================================================================== --- trunk/Jmol/src/org/jmol/g3d/Text3D.java 2008-08-27 15:50:01 UTC (rev 9775) +++ trunk/Jmol/src/org/jmol/g3d/Text3D.java 2008-08-27 16:27:57 UTC (rev 9776) @@ -78,6 +78,7 @@ JmolRendererInterface jmolRenderer, boolean antialias) { if (text.length() == 0) return 0; + System.out.println(x + " " + y + " " + text); if (text.indexOf("<su") >= 0) return plotByCharacter(x, y, z, argb, text, font3d, g3d, jmolRenderer, antialias); @@ -95,6 +96,7 @@ int textWidth = text3d.width; int textHeight = text3d.height; int mapWidth = text3d.mapWidth; + System.out.println ("mapWidth = " + mapWidth); if (x + textWidth <= 0 || x >= g3d.width || y + textHeight <= 0 || y >= g3d.height) return textWidth; @@ -199,11 +201,11 @@ int len = text.length(); int suboffset = (int)(font3d.fontMetrics.getHeight() * 0.25); int supoffset = -(int)(font3d.fontMetrics.getHeight() * 0.3); - if (antialias) { +/* if (antialias) { suboffset <<= 1; supoffset <<= 1; } - for (int i = 0; i < len; i++) { +*/ for (int i = 0; i < len; i++) { if (text.charAt(i) == '<') { if (i + 4 < len && text.substring(i, i + 5).equals("<sub>")) { i += 4; @@ -226,9 +228,13 @@ continue; } } - w += plot(x + w, y, z, argb, text.substring(i, i + 1), font3d, + int width = plot(x + w, y, z, argb, text.substring(i, i + 1), font3d, g3d, jmolRenderer, antialias); + if (antialias) // this is a hack + width >>= 1; + w += width; } + System.out.println("w=" + w); return w; } Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-27 15:50:01 UTC (rev 9775) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-27 16:27:57 UTC (rev 9776) @@ -3,8 +3,8 @@ version=11.6.RC11 +# bug fix: super/subscripts with antialiasdisplay # translation: menu items in console - # bug fix: web export / language # bug fix: draw pointgroup C2 2 not distinguished from draw pointgroup C2 1 # bug fix: d2 point groups cause null pointer exception due to missing principal axis This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-08-27 16:44:35
|
Revision: 9777 http://jmol.svn.sourceforge.net/jmol/?rev=9777&view=rev Author: hansonr Date: 2008-08-27 16:44:32 +0000 (Wed, 27 Aug 2008) Log Message: ----------- version=11.6.RC11 # bug fix: echo IMAGE and antialiasdisplay Modified Paths: -------------- trunk/Jmol/src/org/jmol/g3d/Text3D.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/jmol/g3d/Text3D.java =================================================================== --- trunk/Jmol/src/org/jmol/g3d/Text3D.java 2008-08-27 16:27:57 UTC (rev 9776) +++ trunk/Jmol/src/org/jmol/g3d/Text3D.java 2008-08-27 16:44:32 UTC (rev 9777) @@ -124,8 +124,8 @@ width = g3d.width; height = g3d.height; } else if (g3d.isAntialiased()) { - width += width; - height += height; + //width += width; + //height += height; } if (x + width <= 0 || x >= g3d.width || y + height <= 0 || y >= g3d.height) return; Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-27 16:27:57 UTC (rev 9776) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2008-08-27 16:44:32 UTC (rev 9777) @@ -3,6 +3,7 @@ version=11.6.RC11 +# bug fix: echo IMAGE and antialiasdisplay # bug fix: super/subscripts with antialiasdisplay # translation: menu items in console # bug fix: web export / language This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |