From: <ha...@us...> - 2006-02-28 18:47:09
|
Revision: 4537 Author: hansonr Date: 2006-02-28 10:46:42 -0800 (Tue, 28 Feb 2006) ViewCVS: http://svn.sourceforge.net/jmol/?rev=4537&view=rev Log Message: ----------- OK, this is my first SVN commit. Included here: (1) all atom visibility flag setting pulled from rendering methods. (2) new Atom.visibilityFlags (3) new constants in JmolConstants (4) new Viewer.isTainted (5) visibility calculations only carried when Viewer.isTainted (6) Viewer.isTainted is after any script (7) Eval.expression no longer needs a refresh() prior to using Token.visible (8) Eval.expression runs Viewer.setModelVisibility() instead, only for first Token.visible (9) BackboneRenderer, BallsRenderer, StarsRenderer, SticksRenderer all modified. (10) Backbone, Balls, Bond, Mps, NucleicMonomer, Shape, Stars, Sticks all include some sort of visibility setting (11) Frame, ModelManager modified as necessary. Bob Hanson Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Atom.java trunk/Jmol/src/org/jmol/viewer/Backbone.java trunk/Jmol/src/org/jmol/viewer/BackboneRenderer.java trunk/Jmol/src/org/jmol/viewer/Balls.java trunk/Jmol/src/org/jmol/viewer/BallsRenderer.java trunk/Jmol/src/org/jmol/viewer/Bond.java trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Frame.java trunk/Jmol/src/org/jmol/viewer/JmolConstants.java trunk/Jmol/src/org/jmol/viewer/ModelManager.java trunk/Jmol/src/org/jmol/viewer/Mps.java trunk/Jmol/src/org/jmol/viewer/NucleicMonomer.java trunk/Jmol/src/org/jmol/viewer/Shape.java trunk/Jmol/src/org/jmol/viewer/Stars.java trunk/Jmol/src/org/jmol/viewer/StarsRenderer.java trunk/Jmol/src/org/jmol/viewer/Sticks.java trunk/Jmol/src/org/jmol/viewer/SticksRenderer.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/Atom.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Atom.java 2006-02-28 18:10:24 UTC (rev 4536) +++ trunk/Jmol/src/org/jmol/viewer/Atom.java 2006-02-28 18:46:42 UTC (rev 4537) @@ -2,6 +2,7 @@ * $Author$ * $Date$ * $Revision$ + * * Copyright (C) 2003-2005 The Jmol Development Team * @@ -36,7 +37,6 @@ final class Atom implements Tuple { - final static byte VISIBLE_FLAG = 0x01; final static byte VIBRATION_VECTOR_FLAG = 0x02; final static byte IS_HETERO_FLAG = 0x04; @@ -48,6 +48,7 @@ byte elementNumber; byte formalChargeAndFlags; byte alternateLocationID; + int visibilityFlags; short madAtom; short colixAtom; Bond[] bonds; @@ -73,6 +74,7 @@ this.colixAtom = viewer.getColixAtom(this); this.alternateLocationID = (byte)alternateLocationID; setMadAtom(viewer.getMadAtom()); + this.point3f = new Point3f(x, y, z); if (isHetero) formalChargeAndFlags |= IS_HETERO_FLAG; @@ -314,8 +316,6 @@ final static int MAX_Z = 14383; void transform(Viewer viewer) { - if (madAtom == JmolConstants.MAR_DELETED) - return; Point3i screen; Vector3f[] vibrationVectors; if ((formalChargeAndFlags & VIBRATION_VECTOR_FLAG) == 0 || @@ -323,7 +323,6 @@ screen = viewer.transformPoint(point3f); else screen = viewer.transformPoint(point3f, vibrationVectors[atomIndex]); - int z = screen.z; z = ((z < MIN_Z) ? MIN_Z @@ -417,7 +416,7 @@ } boolean isVisible() { - return (formalChargeAndFlags & VISIBLE_FLAG) != 0; + return (visibilityFlags > JmolConstants.VISIBLE_MODEL); } float getPartialCharge() { @@ -443,8 +442,8 @@ public float getDimensionValue(int dimension) { return (dimension == 0 - ? point3f.x - : (dimension == 1 ? point3f.y : point3f.z)); + ? point3f.x + : (dimension == 1 ? point3f.y : point3f.z)); } short getVanderwaalsMar() { @@ -923,7 +922,7 @@ boolean isCursorOnTopOfVisibleAtom(int xCursor, int yCursor, int minRadius, Atom competitor) { - return (((formalChargeAndFlags & VISIBLE_FLAG) != 0) && + return (isVisible() && isCursorOnTop(xCursor, yCursor, minRadius, competitor)); } Modified: trunk/Jmol/src/org/jmol/viewer/Backbone.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Backbone.java 2006-02-28 18:10:24 UTC (rev 4536) +++ trunk/Jmol/src/org/jmol/viewer/Backbone.java 2006-02-28 18:46:42 UTC (rev 4537) @@ -2,6 +2,7 @@ * $Author$ * $Date$ * $Revision$ + * * Copyright (C) 2003-2005 The Jmol Development Team * @@ -54,5 +55,18 @@ mads[i] = mad; } } + + void setModelVisibility() { + for (int i = monomerCount - 1; --i >= 0; ) { + if (mads[i] == 0) + continue; + int[] atomIndices = polymer.getLeadAtomIndices(); + Atom atomA = frame.getAtomAt(atomIndices[i]); + Atom atomB = frame.getAtomAt(atomIndices[i + 1]); + atomA.visibilityFlags |= JmolConstants.VISIBLE_BACKBONE; + atomB.visibilityFlags |= JmolConstants.VISIBLE_BACKBONE; + } + } } + } Modified: trunk/Jmol/src/org/jmol/viewer/BackboneRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/BackboneRenderer.java 2006-02-28 18:10:24 UTC (rev 4536) +++ trunk/Jmol/src/org/jmol/viewer/BackboneRenderer.java 2006-02-28 18:46:42 UTC (rev 4537) @@ -2,6 +2,7 @@ * $Author$ * $Date$ * $Revision$ + * * Copyright (C) 2003-2005 The Jmol Development Team * @@ -46,8 +47,7 @@ Atom atomA = frame.getAtomAt(atomIndices[i]); Atom atomB = frame.getAtomAt(atomIndices[i + 1]); - atomA.formalChargeAndFlags |= Atom.VISIBLE_FLAG; - atomB.formalChargeAndFlags |= Atom.VISIBLE_FLAG; + int xA = atomA.getScreenX(), yA = atomA.getScreenY(), zA = atomA.getScreenZ(); int xB = atomB.getScreenX(), yB = atomB.getScreenY(), Modified: trunk/Jmol/src/org/jmol/viewer/Balls.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Balls.java 2006-02-28 18:10:24 UTC (rev 4536) +++ trunk/Jmol/src/org/jmol/viewer/Balls.java 2006-02-28 18:46:42 UTC (rev 4537) @@ -2,6 +2,7 @@ * $Author$ * $Date$ * $Revision$ + * * Copyright (C) 2002-2005 The Jmol Development Team * @@ -88,4 +89,25 @@ } closest.atom = champion; } + + void setModelVisibility() { + Atom[] atoms = frame.atoms; + int displayModelIndex = viewer.getDisplayModelIndex(); + boolean isOneFrame = (displayModelIndex >= 0); + boolean showHydrogens = viewer.getShowHydrogens(); + for (int i = frame.atomCount; --i >= 0; ) { + Atom atom = atoms[i]; + atom.visibilityFlags = 0; + if (atom.madAtom == JmolConstants.MAR_DELETED + || ! showHydrogens && atom.elementNumber == 1) + continue; + if (! isOneFrame || atom.modelIndex == displayModelIndex) { + atom.visibilityFlags = JmolConstants.VISIBLE_MODEL; + if (atom.madAtom != 0) + atom.visibilityFlags |= JmolConstants.VISIBLE_BALL; + if(viewer.hasSelectionHalo(atom.atomIndex)) + atom.visibilityFlags |= JmolConstants.VISIBLE_HALO; + } + } + } } Modified: trunk/Jmol/src/org/jmol/viewer/BallsRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/BallsRenderer.java 2006-02-28 18:10:24 UTC (rev 4536) +++ trunk/Jmol/src/org/jmol/viewer/BallsRenderer.java 2006-02-28 18:46:42 UTC (rev 4537) @@ -2,6 +2,7 @@ * $Author$ * $Date$ * $Revision$ + * * Copyright (C) 2003-2005 The Jmol Development Team * @@ -30,7 +31,6 @@ int minX, maxX, minY, maxY; boolean wireframeRotating; - boolean showHydrogens; short colixSelection; void render() { @@ -41,60 +41,37 @@ wireframeRotating = viewer.getWireframeRotating(); colixSelection = viewer.getColixSelection(); - showHydrogens = viewer.getShowHydrogens(); - Atom[] atoms = frame.atoms; - int displayModelIndex = this.displayModelIndex; - boolean isOneFrame = (displayModelIndex >= 0); - /* - *unnecessary - if (displayModelIndex < 0) { - for (int i = frame.atomCount; --i >= 0; ) { - Atom atom = atoms[i]; - atom.transform(viewer); - render(atom); - } - } else { -*/ - for (int i = frame.atomCount; --i >= 0; ) { - Atom atom = atoms[i]; - if (isOneFrame && atom.modelIndex != displayModelIndex) { - atom.formalChargeAndFlags &= ~Atom.VISIBLE_FLAG; - continue; - } - atom.transform(viewer); - render(atom); - } - // } + for (int i = frame.atomCount; --i >= 0; ) { + Atom atom = atoms[i]; + if ((atom.visibilityFlags & JmolConstants.VISIBLE_MODEL) == 0) + continue; + atom.transform(viewer); + if ((atom.visibilityFlags & JmolConstants.VISIBLE_BALL) != 0) + renderBall(atom); + if ((atom.visibilityFlags & JmolConstants.VISIBLE_HALO) != 0) + renderHalo(atom); + } } - void render(Atom atom) { - if (!showHydrogens && atom.elementNumber == 1) - return; + void renderBall(Atom atom) { long xyzd = atom.xyzd; - int diameter = Xyzd.getD(xyzd); - boolean hasHalo = viewer.hasSelectionHalo(atom.atomIndex); - if (diameter == 0 && !hasHalo) { - atom.formalChargeAndFlags &= ~Atom.VISIBLE_FLAG; - return; - } - // mth 2004 04 02 ... hmmm ... I don't like this here ... looks ugly - atom.formalChargeAndFlags |= Atom.VISIBLE_FLAG; - if (!wireframeRotating) g3d.fillSphereCentered(atom.colixAtom, xyzd); else g3d.drawCircleCentered(atom.colixAtom, xyzd); + } - if (hasHalo) { - int halowidth = diameter / 4; - if (halowidth < 4) halowidth = 4; - if (halowidth > 10) halowidth = 10; - int haloDiameter = diameter + 2 * halowidth; - g3d.fillScreenedCircleCentered(colixSelection, + void renderHalo(Atom atom) { + long xyzd = atom.xyzd; + int diameter = Xyzd.getD(xyzd); + int halowidth = diameter / 4; + if (halowidth < 4) halowidth = 4; + if (halowidth > 10) halowidth = 10; + int haloDiameter = diameter + 2 * halowidth; + g3d.fillScreenedCircleCentered(colixSelection, haloDiameter, Xyzd.getX(xyzd), Xyzd.getY(xyzd), Xyzd.getZ(xyzd)); - } } } Modified: trunk/Jmol/src/org/jmol/viewer/Bond.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Bond.java 2006-02-28 18:10:24 UTC (rev 4536) +++ trunk/Jmol/src/org/jmol/viewer/Bond.java 2006-02-28 18:46:42 UTC (rev 4537) @@ -2,6 +2,7 @@ * $Author$ * $Date$ * $Revision$ + * * Copyright (C) 2003-2005 The Jmol Development Team * @@ -33,6 +34,7 @@ short order; short mad; short colix; + int visibilityFlags; Bond(Atom atom1, Atom atom2, short order, short mad, short colix) { @@ -118,4 +120,3 @@ return Graphics3D.inheritColix(colix, atom2.colixAtom); } } - Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-02-28 18:10:24 UTC (rev 4536) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-02-28 18:46:42 UTC (rev 4537) @@ -2,6 +2,7 @@ * $Author$ * $Date$ * $Revision$ + * * Copyright (C) 2003-2005 The Jmol Development Team * @@ -312,6 +313,7 @@ viewer.scriptStatus("Script completed"); clearMyThread(); terminationNotification = true; + viewer.setTainted(true); viewer.popHoldRepaint(); } @@ -910,7 +912,7 @@ break; case Token.visible: if(! refreshed) - refresh(); + viewer.setModelVisibility(); refreshed = true; stack[sp++] = copyBitSet(viewer.getVisibleSet()); break; Modified: trunk/Jmol/src/org/jmol/viewer/Frame.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Frame.java 2006-02-28 18:10:24 UTC (rev 4536) +++ trunk/Jmol/src/org/jmol/viewer/Frame.java 2006-02-28 18:46:42 UTC (rev 4537) @@ -2,6 +2,7 @@ * $Author$ * $Date$ * $Revision$ + * * Copyright (C) 2003-2005 The Jmol Development Team * @@ -968,6 +969,7 @@ shapes[i].findNearestAtomIndex(x, y, closest); if (closest.atom != null) break; + } } int closestIndex = (closest.atom == null ? -1 : closest.atom.atomIndex); @@ -1662,9 +1664,14 @@ BitSet getVisibleSet() { BitSet bs = new BitSet(); - for (int i = atomCount; --i >= 0; ) - if(atoms[i].isVisible()) + int n=0; + for (int i = atomCount; --i >= 0; ) { + if(atoms[i].isVisible()) { bs.set(i); + n++; + } + } + System.out.println("Frame.getVisibleSet: " + n + " size:" + bs.size() + " length:" + bs.length() + " cardinality:" + bs.cardinality()); return bs; } Modified: trunk/Jmol/src/org/jmol/viewer/JmolConstants.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/JmolConstants.java 2006-02-28 18:10:24 UTC (rev 4536) +++ trunk/Jmol/src/org/jmol/viewer/JmolConstants.java 2006-02-28 18:46:42 UTC (rev 4537) @@ -2,6 +2,7 @@ * $Author$ * $Date$ * $Revision$ + * * Copyright (C) 2003-2005 Miguel, Jmol Development, www.jmol.org * @@ -27,6 +28,16 @@ final public class JmolConstants { + + public final static int VISIBLE_MODEL = 1; + public final static int VISIBLE_BALL = 2; + public final static int VISIBLE_STICK = 4; + public final static int VISIBLE_BACKBONE = 8; + public final static int VISIBLE_CARTOON = 16; + public final static int VISIBLE_STAR = 32; + public final static int VISIBLE_HALO = 64; + + // for now, just update this by hand // perhaps use ant filter later ... but mth doesn't like it :-( public final static String copyright = "(C) 2006 Jmol Development"; @@ -1665,7 +1676,7 @@ }; public final static String[] specialAtomNames = { - + //////////////////////////////////////////////////////////////// // The ordering of these entries can be changed ... BUT ... // the offsets must be kept consistent with the ATOMID definitions Modified: trunk/Jmol/src/org/jmol/viewer/ModelManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/ModelManager.java 2006-02-28 18:10:24 UTC (rev 4536) +++ trunk/Jmol/src/org/jmol/viewer/ModelManager.java 2006-02-28 18:46:42 UTC (rev 4537) @@ -2,6 +2,7 @@ * $Author$ * $Date$ * $Revision$ + * * Copyright (C) 2003-2005 Miguel, Jmol Development, www.jmol.org * @@ -485,7 +486,7 @@ } int getAtomModelIndex(int i) { - return frame.getAtomAt(i).getModelIndex(); + return frame.getAtomAt(i).getModelIndex(); } Point3f getBondPoint3f1(int i) { @@ -521,15 +522,15 @@ } int getBondModelIndex(int i) { - Atom atom = frame.getBondAt(i).getAtom1(); - if (atom != null) { - return atom.getModelIndex(); - } - atom = frame.getBondAt(i).getAtom2(); - if (atom != null) { - return atom.getModelIndex(); - } - return 0; + Atom atom = frame.getBondAt(i).getAtom1(); + if (atom != null) { + return atom.getModelIndex(); + } + atom = frame.getBondAt(i).getAtom2(); + if (atom != null) { + return atom.getModelIndex(); + } + return 0; } public Point3f[] getPolymerLeadMidPoints(int modelIndex, int polymerIndex) { @@ -830,5 +831,16 @@ return info; } + + void setModelVisibility() { + if (frame == null) + return; + for (int i = 0; i < JmolConstants.SHAPE_MAX; ++i) { + Shape shape = frame.shapes[i]; + if (shape != null) { + System.out.println("modelManager-setModelVis "+JmolConstants.shapeClassBases[i]); + shape.setModelVisibility(); + } + } + } } - Modified: trunk/Jmol/src/org/jmol/viewer/Mps.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Mps.java 2006-02-28 18:10:24 UTC (rev 4536) +++ trunk/Jmol/src/org/jmol/viewer/Mps.java 2006-02-28 18:46:42 UTC (rev 4537) @@ -2,6 +2,7 @@ * $Author$ * $Date$ * $Revision$ + * * Copyright (C) 2003-2005 The Jmol Development Team * @@ -93,6 +94,11 @@ mpsmodels[i].findNearestAtomIndex(xMouse, yMouse, closest); } + void setModelVisibility() { + for (int i = mpsmodels.length; --i >= 0; ) + mpsmodels[i].setModelVisibility(); + } + class Mpsmodel { Mpspolymer[] mpspolymers; int modelIndex; @@ -140,8 +146,15 @@ for (int i = mpspolymers.length; --i >= 0; ) mpspolymers[i].findNearestAtomIndex(xMouse, yMouse, closest); } + + void setModelVisibility() { + for (int i = mpspolymers.length; --i >= 0; ) + mpspolymers[i].setModelVisibility(); + } + } + abstract class Mpspolymer { Polymer polymer; short madOn; @@ -351,6 +364,19 @@ void findNearestAtomIndex(int xMouse, int yMouse, Closest closest) { polymer.findNearestAtomIndex(xMouse, yMouse, closest, mads); } + + void setModelVisibility() { + if (wingVectors == null) + return; + boolean isNucleicPolymer = polymer instanceof NucleicPolymer; + if (! isNucleicPolymer) + return; + for (int i = monomerCount; --i >= 0; ) { + if (mads[i] <= 0) + continue; + NucleicMonomer group = (NucleicMonomer) monomers[i]; + group.setModelVisibility(); + } + } } } - Modified: trunk/Jmol/src/org/jmol/viewer/NucleicMonomer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/NucleicMonomer.java 2006-02-28 18:10:24 UTC (rev 4536) +++ trunk/Jmol/src/org/jmol/viewer/NucleicMonomer.java 2006-02-28 18:46:42 UTC (rev 4537) @@ -2,6 +2,7 @@ * $Author$ * $Date$ * $Revision$ + * * Copyright (C) 2004-2005 The Jmol Development Team * @@ -197,7 +198,6 @@ void getBaseRing6Points(Point3f[] ring6Points) { for (int i = 6; --i >= 0; ) { Atom atom = getAtomFromOffsetIndex(i + 3); - atom.formalChargeAndFlags |= Atom.VISIBLE_FLAG; ring6Points[i] = atom.point3f; } } @@ -208,7 +208,6 @@ if (isPurine) for (int i = 5; --i >= 0; ) { Atom atom = getAtomFromOffsetIndex(ring5OffsetIndexes[i]); - atom.formalChargeAndFlags |= Atom.VISIBLE_FLAG; ring5Points[i] = atom.point3f; } return isPurine; @@ -248,4 +247,17 @@ c3prime.isCursorOnTop(x, y, radius, competitor)) closest.atom = lead; } + + void setModelVisibility() { + Atom atom; + for (int i = 6; --i >= 0; ) { + atom = getAtomFromOffsetIndex(i + 3); + atom.visibilityFlags |= JmolConstants.VISIBLE_CARTOON; + } + if (isPurine) + for (int i = 5; --i >= 0; ) { + atom = getAtomFromOffsetIndex(ring5OffsetIndexes[i]); + atom.visibilityFlags |= JmolConstants.VISIBLE_CARTOON; + } + } } Modified: trunk/Jmol/src/org/jmol/viewer/Shape.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Shape.java 2006-02-28 18:10:24 UTC (rev 4536) +++ trunk/Jmol/src/org/jmol/viewer/Shape.java 2006-02-28 18:46:42 UTC (rev 4537) @@ -2,6 +2,7 @@ * $Author$ * $Date$ * $Revision$ + * * Copyright (C) 2003-2005 The Jmol Development Team * @@ -66,4 +67,6 @@ void checkBoundsMinMax(Point3f pointMin, Point3f pointMax) { } + void setModelVisibility() { + } } Modified: trunk/Jmol/src/org/jmol/viewer/Stars.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Stars.java 2006-02-28 18:10:24 UTC (rev 4536) +++ trunk/Jmol/src/org/jmol/viewer/Stars.java 2006-02-28 18:46:42 UTC (rev 4537) @@ -2,6 +2,7 @@ * $Author$ * $Date$ * $Revision$ + * * Copyright (C) 2002-2005 The Jmol Development Team * @@ -69,4 +70,17 @@ return; } } + + void setModelVisibility() { + if (mads == null) + return; + Atom[] atoms = frame.atoms; + int displayModelIndex = viewer.getDisplayModelIndex(); + for (int i = frame.atomCount; --i >= 0; ) { + Atom atom = atoms[i]; + if ((displayModelIndex < 0 || atom.modelIndex == displayModelIndex) + && mads[i] > 0) + atom.visibilityFlags |= JmolConstants.VISIBLE_STAR; + } + } } Modified: trunk/Jmol/src/org/jmol/viewer/StarsRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/StarsRenderer.java 2006-02-28 18:10:24 UTC (rev 4536) +++ trunk/Jmol/src/org/jmol/viewer/StarsRenderer.java 2006-02-28 18:46:42 UTC (rev 4537) @@ -2,6 +2,7 @@ * $Author$ * $Date$ * $Revision$ + * * Copyright (C) 2003-2005 The Jmol Development Team * @@ -33,16 +34,12 @@ if (stars.mads == null) return; Atom[] atoms = frame.atoms; - int displayModelIndex = this.displayModelIndex; for (int i = frame.atomCount; --i >= 0; ) { Atom atom = atoms[i]; - if (displayModelIndex >= 0 && atom.modelIndex != displayModelIndex) - continue; - short mad = stars.mads[i]; - if (mad == 0) - continue; - short colix = stars.colixes == null ? 0 : stars.colixes[i]; - render1(atom, mad, colix); + if ((atom.visibilityFlags & JmolConstants.VISIBLE_STAR) !=0) { + short colix = stars.colixes == null ? 0 : stars.colixes[i]; + render1(atom, stars.mads[i], colix); + } } } @@ -52,40 +49,11 @@ int y = Xyzd.getY(xyzd); int z = Xyzd.getZ(xyzd); int d = viewer.scaleToScreen(z, mad); - // make available for hover/click/measure - atom.formalChargeAndFlags |= Atom.VISIBLE_FLAG; d -= (d & 1) ^ 1; // round down to odd value colix = Graphics3D.inheritColix(colix, atom.colixAtom); int r = d / 2; g3d.drawLine(colix, x - r, y, z, x - r + d, y, z); g3d.drawLine(colix, x, y - r, z, x, y - r + d, z); - /* - long xyzd = atom.xyzd; - int diameter = Xyzd.getD(xyzd); - boolean hasHalo = viewer.hasSelectionHalo(atom.atomIndex); - if (diameter == 0 && !hasHalo) { - atom.formalChargeAndFlags &= ~Atom.VISIBLE_FLAG; - return; - } - // mth 2004 04 02 ... hmmm ... I don't like this here ... looks ugly - atom.formalChargeAndFlags |= Atom.VISIBLE_FLAG; - - if (!wireframeRotating) - g3d.fillSphereCentered(atom.colixAtom, xyzd); - else - g3d.drawCircleCentered(atom.colixAtom, xyzd); - - if (hasHalo) { - int halowidth = diameter / 4; - if (halowidth < 4) halowidth = 4; - if (halowidth > 10) halowidth = 10; - int haloDiameter = diameter + 2 * halowidth; - g3d.fillScreenedCircleCentered(colixSelection, - haloDiameter, - Xyzd.getX(xyzd), Xyzd.getY(xyzd), - Xyzd.getZ(xyzd)); - } - */ } } Modified: trunk/Jmol/src/org/jmol/viewer/Sticks.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Sticks.java 2006-02-28 18:10:24 UTC (rev 4536) +++ trunk/Jmol/src/org/jmol/viewer/Sticks.java 2006-02-28 18:46:42 UTC (rev 4537) @@ -2,6 +2,7 @@ * $Author$ * $Date$ * $Revision$ + * * Copyright (C) 2002-2005 The Jmol Development Team * @@ -229,4 +230,27 @@ viewer.scriptStatus(nbonds + " bonds " + (order == 0 ? " deleted":" formed or modified")); viewer.setBondSelectionModeOr(bondmode); } + + void setModelVisibility() { + Bond[] bonds = frame.bonds; + int displayModelIndex = viewer.getDisplayModelIndex(); + boolean isOneFrame = (displayModelIndex >= 0); + boolean showHydrogens = viewer.getShowHydrogens(); + for (int i = frame.bondCount; --i >= 0; ) { + Bond bond = bonds[i]; + bond.visibilityFlags = 0; + if (!isOneFrame || bond.atom1.modelIndex == displayModelIndex) { + if (bond.mad == 0) + continue; + Atom atomA = bond.atom1; + Atom atomB = bond.atom2; + if (showHydrogens + || atomA.elementNumber != 1 && atomB.elementNumber != 1) { + atomA.visibilityFlags |= JmolConstants.VISIBLE_STICK; + atomB.visibilityFlags |= JmolConstants.VISIBLE_STICK; + bond.visibilityFlags |= JmolConstants.VISIBLE_STICK; + } + } + } + } } Modified: trunk/Jmol/src/org/jmol/viewer/SticksRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/SticksRenderer.java 2006-02-28 18:10:24 UTC (rev 4536) +++ trunk/Jmol/src/org/jmol/viewer/SticksRenderer.java 2006-02-28 18:46:42 UTC (rev 4537) @@ -2,6 +2,7 @@ * $Author$ * $Date$ * $Revision$ + * * Copyright (C) 2002-2005 The Jmol Development Team * @@ -69,7 +70,6 @@ colixSelection = viewer.getColixSelection(); showMultipleBonds = viewer.getShowMultipleBonds(); modeMultipleBond = viewer.getModeMultipleBond(); - showHydrogens = viewer.getShowHydrogens(); ssbondsBackbone = viewer.getSsbondsBackbone(); hbondsBackbone = viewer.getHbondsBackbone(); @@ -77,31 +77,18 @@ hbondsSolid = viewer.getHbondsSolid(); Bond[] bonds = frame.bonds; - int displayModelIndex = this.displayModelIndex; - if (displayModelIndex < 0) { - for (int i = frame.bondCount; --i >= 0; ) - render(bonds[i]); - } else { - for (int i = frame.bondCount; --i >= 0; ) { - Bond bond = bonds[i]; - if (bond.atom1.modelIndex != displayModelIndex) - continue; + for (int i = frame.bondCount; --i >= 0; ) { + Bond bond = bonds[i]; + if ((bond.visibilityFlags & JmolConstants.VISIBLE_STICK) != 0) render(bond); - } } } void render(Bond bond) { - if ((madBond = bond.mad) == 0) - return; + madBond = bond.mad; int order = bond.order; Atom atomA = bond.atom1; Atom atomB = bond.atom2; - if (!showHydrogens && (atomA.elementNumber == 1 || - atomB.elementNumber == 1)) - return; - atomA.formalChargeAndFlags |= Atom.VISIBLE_FLAG; - atomB.formalChargeAndFlags |= Atom.VISIBLE_FLAG; colixA = Graphics3D.inheritColix(bond.colix, atomA.colixAtom); colixB = Graphics3D.inheritColix(bond.colix, atomB.colixAtom); if (bondsBackbone) { Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-02-28 18:10:24 UTC (rev 4536) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-02-28 18:46:42 UTC (rev 4537) @@ -2,6 +2,7 @@ * $Author$ * $Date$ * $Revision$ + * * Copyright (C) 2003-2005 Miguel, Jmol Development, www.jmol.org * @@ -1750,6 +1751,8 @@ public void renderScreenImage(Graphics g, Dimension size, Rectangle clip) { manageScriptTermination(); + if(isTainted)setModelVisibility(); + isTainted = false; if (size != null) setScreenDimension(size); int stereoMode = getStereoMode(); @@ -2911,4 +2914,13 @@ return g3d.getHexColorFromIndex(colix); } + void setModelVisibility(){ + modelManager.setModelVisibility(); + } + + boolean isTainted = true; + void setTainted(boolean TF) { + isTainted = TF; + } + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2006-03-02 15:32:34
|
Revision: 4539 Author: hansonr Date: 2006-03-02 07:32:13 -0800 (Thu, 02 Mar 2006) ViewCVS: http://svn.sourceforge.net/jmol/?rev=4539&view=rev Log Message: ----------- Included here: (1) continued streamlining of rendering methods. (2) new Atom.shapeVisibilityFlags (3) new constants in JmolConstants (6) Viewer.isTainted is after any script or frame change (9) all mpsRenderers modified. (10) VISIBLE_DOTS added for atoms included in "Token.visible" (11) new int shapeVisibilityFlags for monomers (12) new getProperty("shapeInfo") (13) getProperty("atomInfo") and ("polymerInfo") include shapeVisibility (14) Frame, ModelManager modified as necessary. I'd still like to get all the displayModelIndex references out of ALL the renderers, including all ShapeRenderers, but I'll not do that now because Sasurface is one of those, and I'm afraid Miguel might be working on it. Bob Hanson Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Atom.java trunk/Jmol/src/org/jmol/viewer/Backbone.java trunk/Jmol/src/org/jmol/viewer/BackboneRenderer.java trunk/Jmol/src/org/jmol/viewer/Balls.java trunk/Jmol/src/org/jmol/viewer/CartoonRenderer.java trunk/Jmol/src/org/jmol/viewer/Dots.java trunk/Jmol/src/org/jmol/viewer/DotsRenderer.java trunk/Jmol/src/org/jmol/viewer/Frame.java trunk/Jmol/src/org/jmol/viewer/Group.java trunk/Jmol/src/org/jmol/viewer/JmolConstants.java trunk/Jmol/src/org/jmol/viewer/MeshRibbonRenderer.java trunk/Jmol/src/org/jmol/viewer/ModelManager.java trunk/Jmol/src/org/jmol/viewer/Monomer.java trunk/Jmol/src/org/jmol/viewer/Mps.java trunk/Jmol/src/org/jmol/viewer/MpsRenderer.java trunk/Jmol/src/org/jmol/viewer/PropertyManager.java trunk/Jmol/src/org/jmol/viewer/RepaintManager.java trunk/Jmol/src/org/jmol/viewer/RibbonsRenderer.java trunk/Jmol/src/org/jmol/viewer/RocketsRenderer.java trunk/Jmol/src/org/jmol/viewer/Shape.java trunk/Jmol/src/org/jmol/viewer/Stars.java trunk/Jmol/src/org/jmol/viewer/StrandsRenderer.java trunk/Jmol/src/org/jmol/viewer/TraceRenderer.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/Atom.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Atom.java 2006-02-28 18:49:19 UTC (rev 4538) +++ trunk/Jmol/src/org/jmol/viewer/Atom.java 2006-03-02 15:32:13 UTC (rev 4539) @@ -49,6 +49,7 @@ byte formalChargeAndFlags; byte alternateLocationID; int visibilityFlags; + int shapeVisibilityFlags; short madAtom; short colixAtom; Bond[] bonds; @@ -135,6 +136,14 @@ } } + final void setShapeVisibility(int shapeVisibilityFlag, boolean isVisible) { + if(isVisible) { + shapeVisibilityFlags |= shapeVisibilityFlag; + } else { + shapeVisibilityFlags &=~shapeVisibilityFlag; + } + } + void setGroup(Group group) { this.group = group; } @@ -416,9 +425,13 @@ } boolean isVisible() { - return (visibilityFlags > JmolConstants.VISIBLE_MODEL); + return ((visibilityFlags & JmolConstants.VISIBLE_ATOM) != 0); } + boolean isShapeVisible(int shapeID) { + return ((shapeVisibilityFlags & (1 << shapeID)) != 0); + } + float getPartialCharge() { float[] partialCharges = group.chain.frame.partialCharges; return partialCharges == null ? 0 : partialCharges[atomIndex]; Modified: trunk/Jmol/src/org/jmol/viewer/Backbone.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Backbone.java 2006-02-28 18:49:19 UTC (rev 4538) +++ trunk/Jmol/src/org/jmol/viewer/Backbone.java 2006-03-02 15:32:13 UTC (rev 4539) @@ -45,14 +45,17 @@ // note that i is initialized to monomerCount - 1 // in order to skip the last atom // but it is picked up within the loop by looking at i+1 + boolean isVisible = (mad != 0); for (int i = monomerCount - 1; --i >= 0; ) { if ((bsSelected.get(atomIndices[i]) && bsSelected.get(atomIndices[i + 1])) || (bondSelectionModeOr && (bsSelected.get(atomIndices[i]) || - bsSelected.get(atomIndices[i + 1])))) + bsSelected.get(atomIndices[i + 1])))) { + monomers[i].setShapeVisibility(myVisibilityFlag, isVisible); mads[i] = mad; + } } } Modified: trunk/Jmol/src/org/jmol/viewer/BackboneRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/BackboneRenderer.java 2006-02-28 18:49:19 UTC (rev 4538) +++ trunk/Jmol/src/org/jmol/viewer/BackboneRenderer.java 2006-03-02 15:32:13 UTC (rev 4539) @@ -29,20 +29,23 @@ class BackboneRenderer extends MpsRenderer { - void renderMpspolymer(Mps.Mpspolymer mpspolymer) { + int myVisibilityFlag; + + void renderMpspolymer(Mps.Mpspolymer mpspolymer, int myVisibilityFlag) { + this.myVisibilityFlag = myVisibilityFlag; renderBackboneChain((Backbone.Bbpolymer)mpspolymer); } void renderBackboneChain(Backbone.Bbpolymer bbpolymer) { - render1Chain(bbpolymer.monomerCount, + render1Chain(bbpolymer.monomerCount, bbpolymer.monomers, bbpolymer.polymer.getLeadAtomIndices(), bbpolymer.mads, bbpolymer.colixes); } - void render1Chain(int monomerCount, int[] atomIndices, - short[] mads, short[] colixes) { + void render1Chain(int monomerCount, Monomer[] monomers, + int[] atomIndices, short[] mads, short[] colixes) { for (int i = monomerCount - 1; --i >= 0; ) { - if (mads[i] == 0) + if ((monomers[i].shapeVisibilityFlags & myVisibilityFlag) == 0) continue; Atom atomA = frame.getAtomAt(atomIndices[i]); Modified: trunk/Jmol/src/org/jmol/viewer/Balls.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Balls.java 2006-02-28 18:49:19 UTC (rev 4538) +++ trunk/Jmol/src/org/jmol/viewer/Balls.java 2006-03-02 15:32:13 UTC (rev 4539) @@ -33,9 +33,15 @@ void setSize(int size, BitSet bsSelected) { short mad = (short)size; Atom[] atoms = frame.atoms; - for (int i = frame.atomCount; --i >= 0; ) - if (bsSelected.get(i)) - atoms[i].setMadAtom(mad); + boolean isVisible = (mad != 0); + int bsLength = bsSelected.length(); + for (int i = bsLength; --i >= 0; ) { + if (bsSelected.get(i)) { + Atom atom = atoms[i]; + atom.setShapeVisibility(myVisibilityFlag,isVisible); + atom.setMadAtom(mad); + } + } } void setProperty(String propertyName, Object value, BitSet bs) { Modified: trunk/Jmol/src/org/jmol/viewer/CartoonRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/CartoonRenderer.java 2006-02-28 18:49:19 UTC (rev 4538) +++ trunk/Jmol/src/org/jmol/viewer/CartoonRenderer.java 2006-03-02 15:32:13 UTC (rev 4539) @@ -86,8 +86,11 @@ Point3i[] ribbonTopScreens; Point3i[] ribbonBottomScreens; - void renderMpspolymer( Mps.Mpspolymer mpspolymer) { + int myVisibilityFlag; + + void renderMpspolymer( Mps.Mpspolymer mpspolymer, int myVisibilityFlag) { Cartoon.Cchain strandsChain = (Cartoon.Cchain)mpspolymer; + this.myVisibilityFlag = myVisibilityFlag; if (strandsChain.wingVectors != null) { monomerCount = strandsChain.monomerCount; monomers = strandsChain.monomers; @@ -111,9 +114,9 @@ ribbonBottomScreens = calcScreens(leadMidpoints, wingVectors, mads, isNucleicPolymer ? 0f : -0.5f / 1000); boolean lastWasSpecial = false; - for (int i = monomerCount; --i >= 0; ) - if (mads[i] > 0) { - Monomer group = monomers[i]; + for (int i = monomerCount; --i >= 0; ) { + Monomer group = monomers[i]; + if ((group.shapeVisibilityFlags & myVisibilityFlag) != 0) { short colix = Graphics3D.inheritColix(colixes[i], group.getLeadAtom().colixAtom); boolean isSpecial = isSpecials[i]; @@ -139,6 +142,7 @@ // for the next segment lastWasSpecial = false; } + } viewer.freeTempScreens(ribbonTopScreens); viewer.freeTempScreens(ribbonBottomScreens); viewer.freeTempScreens(leadMidpointScreens); Modified: trunk/Jmol/src/org/jmol/viewer/Dots.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Dots.java 2006-02-28 18:49:19 UTC (rev 4538) +++ trunk/Jmol/src/org/jmol/viewer/Dots.java 2006-03-02 15:32:13 UTC (rev 4539) @@ -146,9 +146,11 @@ diameterP = 2 * radiusP; } int atomCount = frame.atomCount; + boolean isVisible = (mad != 0); + int bsLength = bsSelected.length(); // always delete old surfaces for selected atoms if (dotsConvexMaps != null) { - for (int i = atomCount; --i >= 0; ) + for (int i = bsLength; --i >= 0; ) if (bsSelected.get(i)) dotsConvexMaps[i] = null; deleteUnnecessaryTori(); @@ -161,14 +163,15 @@ dotsConvexMaps = new int[atomCount][]; colixesConvex = new short[atomCount]; } - for (int i = atomCount; --i >= 0; ) + for (int i = bsLength; --i >= 0; ) { if (bsSelected.get(i)) { - setAtomI(i); + setAtomI(i, isVisible); getNeighbors(bsSelected); calcConvexMap(); calcTori(); calcCavities(); } + } } if (dotsConvexMaps == null) dotsConvexMax = 0; @@ -250,9 +253,10 @@ : atom.getBondingRadiusFloat()); } - void setAtomI(int indexI) { + void setAtomI(int indexI, boolean isVisible) { this.indexI = indexI; atomI = frame.atoms[indexI]; + atomI.setShapeVisibility(myVisibilityFlag,isVisible); centerI = atomI.point3f; radiusI = getAppropriateRadius(atomI); radiiIP2 = radiusI + radiusP; @@ -810,4 +814,18 @@ for (int i = bitmap.length; --i >= 0; ) bitmap[i] = 0; } + void setModelVisibility() { + if (dotsConvexMaps == null) + return; + Atom[] atoms = frame.atoms; + int displayModelIndex = viewer.getDisplayModelIndex(); + for (int i = dotsConvexMax; --i >= 0; ) { + int[] map = dotsConvexMaps[i]; + if (map != null && map != mapNull) { + Atom atom = atoms[i]; + if (displayModelIndex < 0 || displayModelIndex == atom.modelIndex) + atom.visibilityFlags |= JmolConstants.VISIBLE_DOTS; + } + } + } } Modified: trunk/Jmol/src/org/jmol/viewer/DotsRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/DotsRenderer.java 2006-02-28 18:49:19 UTC (rev 4538) +++ trunk/Jmol/src/org/jmol/viewer/DotsRenderer.java 2006-03-02 15:32:13 UTC (rev 4539) @@ -61,20 +61,17 @@ Atom[] atoms = frame.atoms; int[][] dotsConvexMaps = dots.dotsConvexMaps; short[] colixesConvex = dots.colixesConvex; - int displayModelIndex = this.displayModelIndex; for (int i = dots.dotsConvexMax; --i >= 0; ) { - int[] map = dotsConvexMaps[i]; - if (map != null && map != mapNull) { - Atom atom = atoms[i]; - if (displayModelIndex < 0 || displayModelIndex == atom.modelIndex) - renderConvex(dots, atom, colixesConvex[i], map); + Atom atom = atoms[i]; + if ((atom.visibilityFlags & JmolConstants.VISIBLE_DOTS) != 0) { + renderConvex(dots, atom, colixesConvex[i], dotsConvexMaps[i]); } } Dots.Torus[] tori = dots.tori; for (int i = dots.torusCount; --i >= 0; ) { Dots.Torus torus = tori[i]; - if (displayModelIndex < 0 || - displayModelIndex == atoms[torus.ixI].modelIndex) + Atom atom = atoms[torus.ixI]; + if ((atom.visibilityFlags & JmolConstants.VISIBLE_DOTS) != 0) renderTorus(torus, atoms, colixesConvex, dotsConvexMaps); } Dots.Cavity[] cavities = dots.cavities; @@ -84,8 +81,8 @@ } for (int i = dots.cavityCount; --i >= 0; ) { Dots.Cavity cavity = cavities[i]; - if (displayModelIndex < 0 || - displayModelIndex == atoms[cavity.ixI].modelIndex) + Atom atom = atoms[cavity.ixI]; + if ((atom.visibilityFlags & JmolConstants.VISIBLE_DOTS) != 0) renderCavity(cavities[i], atoms, colixesConvex, dotsConvexMaps); } } Modified: trunk/Jmol/src/org/jmol/viewer/Frame.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Frame.java 2006-02-28 18:49:19 UTC (rev 4538) +++ trunk/Jmol/src/org/jmol/viewer/Frame.java 2006-03-02 15:32:13 UTC (rev 4539) @@ -746,6 +746,7 @@ try { Class shapeClass = Class.forName(className); Shape shape = (Shape)shapeClass.newInstance(); + shape.setVisibilityInfo(shapeID); shape.setViewerG3dFrame(viewer, g3d, this); return shape; } catch (Exception e) { Modified: trunk/Jmol/src/org/jmol/viewer/Group.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Group.java 2006-02-28 18:49:19 UTC (rev 4538) +++ trunk/Jmol/src/org/jmol/viewer/Group.java 2006-03-02 15:32:13 UTC (rev 4539) @@ -33,6 +33,7 @@ short groupID; int firstAtomIndex = -1; int lastAtomIndex; + int shapeVisibilityFlags = 0; Group(Chain chain, String group3, int seqcode, int firstAtomIndex, int lastAtomIndex) { @@ -45,6 +46,14 @@ this.lastAtomIndex = lastAtomIndex; } + final void setShapeVisibility(int visFlag, boolean isVisible) { + if(isVisible) { + shapeVisibilityFlags |= visFlag; + } else { + shapeVisibilityFlags &=~visFlag; + } +} + final boolean isGroup3(String group3) { return group3Names[groupID].equalsIgnoreCase(group3); } Modified: trunk/Jmol/src/org/jmol/viewer/JmolConstants.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/JmolConstants.java 2006-02-28 18:49:19 UTC (rev 4538) +++ trunk/Jmol/src/org/jmol/viewer/JmolConstants.java 2006-03-02 15:32:13 UTC (rev 4539) @@ -30,13 +30,22 @@ public final static int VISIBLE_MODEL = 1; - public final static int VISIBLE_BALL = 2; - public final static int VISIBLE_STICK = 4; - public final static int VISIBLE_BACKBONE = 8; - public final static int VISIBLE_CARTOON = 16; - public final static int VISIBLE_STAR = 32; - public final static int VISIBLE_HALO = 64; - + public final static int VISIBLE_BALL = 1 << 1; + public final static int VISIBLE_STICK = 1 << 2; + public final static int VISIBLE_BACKBONE = 1 << 3; + public final static int VISIBLE_CARTOON = 1 << 4; + public final static int VISIBLE_STAR = 1 << 5; + public final static int VISIBLE_HALO = 1 << 6; + public final static int VISIBLE_DOTS = 1 << 7; + // VISIBLE_ATOM might be modified to include other shapes, + public final static int VISIBLE_ATOM = + VISIBLE_BALL + | VISIBLE_STICK + | VISIBLE_BACKBONE + | VISIBLE_CARTOON + | VISIBLE_STAR + | VISIBLE_HALO + | VISIBLE_DOTS; // for now, just update this by hand // perhaps use ant filter later ... but mth doesn't like it :-( Modified: trunk/Jmol/src/org/jmol/viewer/MeshRibbonRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/MeshRibbonRenderer.java 2006-02-28 18:49:19 UTC (rev 4538) +++ trunk/Jmol/src/org/jmol/viewer/MeshRibbonRenderer.java 2006-03-02 15:32:13 UTC (rev 4539) @@ -59,8 +59,10 @@ float baseOffset; boolean isNucleicPolymer; - - void renderMpspolymer( Mps.Mpspolymer mpspolymer) { + int myVisibilityFlag; + + void renderMpspolymer( Mps.Mpspolymer mpspolymer, int myVisibilityFlag) { + this.myVisibilityFlag = myVisibilityFlag; MeshRibbon.Schain strandsChain = (MeshRibbon.Schain)mpspolymer; strandCount = viewer.getStrandsCount(); @@ -117,12 +119,11 @@ void render1Strand(int monomerCount, Monomer[] monomers, short[] mads, short[] colixes, Point3i[] screens) { for (int i = monomerCount; --i >= 0; ) - if (mads[i] > 0) + if ((monomers[i].shapeVisibilityFlags & myVisibilityFlag) != 0) render1StrandSegment(monomerCount, monomers[i], colixes[i], mads, screens, i); } - void render1StrandSegment(int monomerCount, Monomer monomer, short colix, short[] mads, Point3i[] screens, int i) { int iLast = monomerCount; Modified: trunk/Jmol/src/org/jmol/viewer/ModelManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/ModelManager.java 2006-02-28 18:49:19 UTC (rev 4538) +++ trunk/Jmol/src/org/jmol/viewer/ModelManager.java 2006-03-02 15:32:13 UTC (rev 4539) @@ -629,7 +629,6 @@ Hashtable getModelInfo() { Hashtable info = new Hashtable(); - boolean isPDB = frame.isPDB; int modelCount = viewer.getModelCount(); info.put("modelSetName",getModelSetName()); info.put("modelCount",new Integer(modelCount)); @@ -692,6 +691,8 @@ info.put("radius", new Float((atom.getRasMolRadius()/120.0))); info.put("info", getAtomInfo(i)); info.put("visible", new Boolean(getAtomVisibility(i))); + info.put("visibilityFlags", new Integer(atom.visibilityFlags)); + info.put("shapeVisibilityFlags", new Integer(atom.shapeVisibilityFlags)); info.put("spacefill", new Integer(atom.madAtom >> 3)); info.put("color", viewer.getHexColorFromIndex(atom.colixAtom)); info.put("colix", new Integer(atom.colixAtom)); @@ -785,6 +786,7 @@ infoGroup.put("_apt2", new Integer(group.lastAtomIndex)); infoGroup.put("atomInfo1", getAtomInfo(group.firstAtomIndex)); infoGroup.put("atomInfo2", getAtomInfo(group.lastAtomIndex)); + infoGroup.put("shapeVisibility", new Integer(frame.atoms[group.firstAtomIndex].shapeVisibilityFlags)); infoChain.add(infoGroup); } arrayName.put("residues",infoChain); @@ -830,7 +832,6 @@ info.put("edge", getBoundBoxCornerVector()); return info; } - void setModelVisibility() { if (frame == null) @@ -842,5 +843,23 @@ shape.setModelVisibility(); } } + } + + + Hashtable getShapeInfo() { + Hashtable info = new Hashtable(); + if (frame == null) + return info; + for (int i = 0; i < JmolConstants.SHAPE_MAX; ++i) { + Shape shape = frame.shapes[i]; + if (shape != null) { + Hashtable shapeinfo = new Hashtable(); + shapeinfo.put("index",new Integer(i)); + shapeinfo.put("myVisibilityFlag",new Integer(shape.myVisibilityFlag)); + info.put(JmolConstants.shapeClassBases[i],shapeinfo); + } + } + return info; } + } Modified: trunk/Jmol/src/org/jmol/viewer/Monomer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Monomer.java 2006-02-28 18:49:19 UTC (rev 4538) +++ trunk/Jmol/src/org/jmol/viewer/Monomer.java 2006-03-02 15:32:13 UTC (rev 4539) @@ -214,7 +214,8 @@ Hashtable info = new Hashtable(); info.put("seqcode",getSeqcodeString()); info.put("firstAtom", chain.frame.atoms[firstAtomIndex].getInfo()); - info.put("lasttAtom", chain.frame.atoms[lastAtomIndex].getInfo()); + info.put("lastAtom", chain.frame.atoms[lastAtomIndex].getInfo()); + info.put("shapeVisibilityFlags", new Integer(shapeVisibilityFlags)); ProteinStructure structure = getProteinStructure(); if(structure != null)info.put("structure", getStructureTypeName(structure.type)); return info; Modified: trunk/Jmol/src/org/jmol/viewer/Mps.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Mps.java 2006-02-28 18:49:19 UTC (rev 4538) +++ trunk/Jmol/src/org/jmol/viewer/Mps.java 2006-03-02 15:32:13 UTC (rev 4539) @@ -170,6 +170,7 @@ Point3f[] leadMidpoints; Vector3f[] wingVectors; + Mpspolymer(Polymer polymer, int madOn, int madHelixSheet, int madTurnRandom, int madDnaRna) { this.polymer = polymer; @@ -262,10 +263,15 @@ } void setMad(short mad, BitSet bsSelected) { - int[] atomIndices = polymer.getLeadAtomIndices(); + int[] leadAtomIndices = polymer.getLeadAtomIndices(); + boolean isVisible = (mad != 0); for (int i = monomerCount; --i >= 0; ) { - if (bsSelected.get(atomIndices[i])) + int leadAtomIndex = leadAtomIndices[i]; + if (bsSelected.get(leadAtomIndex)) { mads[i] = mad >= 0 ? mad : getMadSpecial(mad, i); + monomers[i].setShapeVisibility(myVisibilityFlag, isVisible); + frame.atoms[leadAtomIndex].setShapeVisibility(myVisibilityFlag,isVisible); + } } if (monomerCount > 1) mads[monomerCount] = mads[monomerCount - 1]; Modified: trunk/Jmol/src/org/jmol/viewer/MpsRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/MpsRenderer.java 2006-02-28 18:49:19 UTC (rev 4538) +++ trunk/Jmol/src/org/jmol/viewer/MpsRenderer.java 2006-03-02 15:32:13 UTC (rev 4539) @@ -40,12 +40,12 @@ for (int c = mcpsmodel.getMpspolymerCount(); --c >= 0; ) { Mps.Mpspolymer mpspolymer = mcpsmodel.getMpspolymer(c); if (mpspolymer.monomerCount >= 2) - renderMpspolymer(mpspolymer); + renderMpspolymer(mpspolymer, shape.myVisibilityFlag); } } } - abstract void renderMpspolymer(Mps.Mpspolymer mpspolymer); + abstract void renderMpspolymer(Mps.Mpspolymer mpspolymer, int myVisibilityFlag); //////////////////////////////////////////////////////////////// // some utilities Modified: trunk/Jmol/src/org/jmol/viewer/PropertyManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/PropertyManager.java 2006-02-28 18:49:19 UTC (rev 4538) +++ trunk/Jmol/src/org/jmol/viewer/PropertyManager.java 2006-03-02 15:32:13 UTC (rev 4539) @@ -126,7 +126,12 @@ if(infoType.equalsIgnoreCase("extractModel")) return viewer.getModelExtract(myParam); + + // misc + if(infoType.equalsIgnoreCase("shapeInfo")) + return viewer.getShapeInfo(); + // public objects if(infoType.equalsIgnoreCase("jmolViewer")) @@ -135,7 +140,7 @@ if(infoType.equalsIgnoreCase("messageQueue")) return viewer.getMessageQueue(); - return "getProperty ERROR\n\nOptions include\n" + return "getProperty ERROR\n"+ infoType +"?\nOptions include\n" + "\n getProperty(\"appletInfo\")" + "\n getProperty(\"fileName\")" @@ -147,6 +152,7 @@ + "\n\n getProperty(\"modelInfo\")" + "\n\n getProperty(\"polymerInfo\")" + "\n getProperty(\"chainInfo\")" + + "\n getProperty(\"shapeInfo\")" + "\n\n getProperty(\"boundboxInfo\")" + "\n getProperty(\"centerInfo\")" Modified: trunk/Jmol/src/org/jmol/viewer/RepaintManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/RepaintManager.java 2006-02-28 18:49:19 UTC (rev 4538) +++ trunk/Jmol/src/org/jmol/viewer/RepaintManager.java 2006-03-02 15:32:13 UTC (rev 4539) @@ -48,7 +48,7 @@ displayModelIndex = -1; else displayModelIndex = modelIndex; - + viewer.setTainted(true); viewer.setStatusFrameChanged(modelIndex); return true; } Modified: trunk/Jmol/src/org/jmol/viewer/RibbonsRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/RibbonsRenderer.java 2006-02-28 18:49:19 UTC (rev 4538) +++ trunk/Jmol/src/org/jmol/viewer/RibbonsRenderer.java 2006-03-02 15:32:13 UTC (rev 4539) @@ -64,8 +64,10 @@ boolean isNucleic; boolean ribbonBorder = false; - - void renderMpspolymer( Mps.Mpspolymer mpspolymer) { + int myVisibilityFlag; + + void renderMpspolymer( Mps.Mpspolymer mpspolymer, int myVisibilityFlag) { + this.myVisibilityFlag = myVisibilityFlag; Ribbons.Schain strandsChain = (Ribbons.Schain)mpspolymer; if (strandsChain.wingVectors != null) { // note that we are not treating a PhosphorusPolymer @@ -106,7 +108,7 @@ Point3i[] ribbonTopScreens, Point3i[] ribbonBottomScreens) { for (int i = monomerCount; --i >= 0; ) - if (mads[i] > 0) + if ((monomers[i].shapeVisibilityFlags & myVisibilityFlag) != 0) render2StrandSegment(monomerCount, monomers[i], colixes[i], mads, ribbonTopScreens, ribbonBottomScreens, i); Modified: trunk/Jmol/src/org/jmol/viewer/RocketsRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/RocketsRenderer.java 2006-02-28 18:49:19 UTC (rev 4538) +++ trunk/Jmol/src/org/jmol/viewer/RocketsRenderer.java 2006-03-02 15:32:13 UTC (rev 4539) @@ -38,8 +38,10 @@ int diameterBeg, diameterMid, diameterEnd; Rockets cartoon; - - void renderMpspolymer(Mps.Mpspolymer mpspolymer) { + int myVisibilityFlag; + + void renderMpspolymer(Mps.Mpspolymer mpspolymer, int myVisibilityFlag) { + this.myVisibilityFlag = myVisibilityFlag; Rockets.Cchain cchain = (Rockets.Cchain)mpspolymer; render1Chain(cchain.polymer, cchain.mads, cchain.colixes); } @@ -50,7 +52,7 @@ initializeChain((AminoPolymer)polymer); clearPending(); for (int i = 0; i < monomerCount; ++i) { - if (mads[i] == 0) + if ((monomers[i].shapeVisibilityFlags & myVisibilityFlag) == 0) continue; Monomer monomer = monomers[i]; short colix = Graphics3D.inheritColix(colixes[i], Modified: trunk/Jmol/src/org/jmol/viewer/Shape.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Shape.java 2006-02-28 18:49:19 UTC (rev 4538) +++ trunk/Jmol/src/org/jmol/viewer/Shape.java 2006-03-02 15:32:13 UTC (rev 4539) @@ -34,7 +34,16 @@ Viewer viewer; Frame frame; Graphics3D g3d; - + int shapeID; + int myVisibilityFlag; + int shapeVisibilityFlags; //future expansion + + final void setVisibilityInfo(int shapeID) { + this.shapeID = shapeID; + this.myVisibilityFlag = (1 << shapeID); + this.shapeVisibilityFlags = 0; + } + final void setViewerG3dFrame(Viewer viewer, Graphics3D g3d, Frame frame) { this.viewer = viewer; this.g3d = g3d; Modified: trunk/Jmol/src/org/jmol/viewer/Stars.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Stars.java 2006-02-28 18:49:19 UTC (rev 4538) +++ trunk/Jmol/src/org/jmol/viewer/Stars.java 2006-03-02 15:32:13 UTC (rev 4539) @@ -35,13 +35,20 @@ short[] colixes; void setSize(int size, BitSet bsSelected) { + + Atom[] atoms = frame.atoms; - for (int i = frame.atomCount; --i >= 0; ) + boolean isVisible = (size != 0); + int bsLength = bsSelected.length(); + if (mads == null && bsLength > 0) + mads = new short[frame.atomCount]; + for (int i = bsLength; --i >= 0; ) { if (bsSelected.get(i)) { - if (mads == null) - mads = new short[frame.atomCount]; - mads[i] = atoms[i].convertEncodedMad(size); + Atom atom = atoms[i]; + atom.setShapeVisibility(myVisibilityFlag,isVisible); + mads[i] = atom.convertEncodedMad(size); } + } } void setProperty(String propertyName, Object value, BitSet bs) { Modified: trunk/Jmol/src/org/jmol/viewer/StrandsRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/StrandsRenderer.java 2006-02-28 18:49:19 UTC (rev 4538) +++ trunk/Jmol/src/org/jmol/viewer/StrandsRenderer.java 2006-03-02 15:32:13 UTC (rev 4539) @@ -57,10 +57,12 @@ float baseOffset; boolean isNucleicPolymer; - - void renderMpspolymer(Mps.Mpspolymer mpspolymer) { + int myVisibilityFlag; + + void renderMpspolymer(Mps.Mpspolymer mpspolymer, int myVisibilityFlag) { Strands.Schain schain = (Strands.Schain)mpspolymer; + this.myVisibilityFlag = myVisibilityFlag; strandCount = viewer.getStrandsCount(); strandSeparation = (strandCount <= 1 ) ? 0 : 1f / (strandCount - 1); baseOffset = @@ -103,9 +105,10 @@ void render1Strand(int monomerCount, Monomer[] monomers, short[] mads, short[] colixes, Point3i[] screens) { for (int i = monomerCount; --i >= 0; ) - if (mads[i] > 0) + if ((monomers[i].shapeVisibilityFlags & myVisibilityFlag) != 0) { render1StrandSegment(monomerCount, monomers[i], colixes[i], mads, screens, i); + } } Modified: trunk/Jmol/src/org/jmol/viewer/TraceRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/TraceRenderer.java 2006-02-28 18:49:19 UTC (rev 4538) +++ trunk/Jmol/src/org/jmol/viewer/TraceRenderer.java 2006-03-02 15:32:13 UTC (rev 4539) @@ -31,8 +31,10 @@ class TraceRenderer extends MpsRenderer { boolean isNucleicPolymer; - - void renderMpspolymer(Mps.Mpspolymer mpspolymer) { + int myVisibilityFlag; + + void renderMpspolymer(Mps.Mpspolymer mpspolymer, int myVisibilityFlag) { + this.myVisibilityFlag = myVisibilityFlag; Trace.Tchain tchain = (Trace.Tchain)mpspolymer; isNucleicPolymer = tchain.polymer instanceof NucleicPolymer; monomerCount = tchain.monomerCount; @@ -54,7 +56,7 @@ void render1Chain(short[] mads, short[] colixes) { for (int i = monomerCount; --i >= 0; ) { - if (mads[i] == 0) + if ((monomers[i].shapeVisibilityFlags & myVisibilityFlag) == 0) continue; short colix = Graphics3D.inheritColix(colixes[i], Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-02-28 18:49:19 UTC (rev 4538) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-02 15:32:13 UTC (rev 4539) @@ -1526,6 +1526,10 @@ return modelManager.getChainInfo(); } + public Hashtable getShapeInfo() { + return modelManager.getShapeInfo(); + } + Vector getAllAtomInfo(String atomExpression) { BitSet bs = getAtomBitSet(atomExpression); return modelManager.getAllAtomInfo(bs); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2006-03-02 15:44:17
|
Revision: 4540 Author: hansonr Date: 2006-03-02 07:44:03 -0800 (Thu, 02 Mar 2006) ViewCVS: http://svn.sourceforge.net/jmol/?rev=4540&view=rev Log Message: ----------- (1) adds VISIBLE_VECTOR, not included in VISIBLE_ATOM (for now) (2) cleans up VectorsRenderer Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/JmolConstants.java trunk/Jmol/src/org/jmol/viewer/Vectors.java trunk/Jmol/src/org/jmol/viewer/VectorsRenderer.java Modified: trunk/Jmol/src/org/jmol/viewer/JmolConstants.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/JmolConstants.java 2006-03-02 15:32:13 UTC (rev 4539) +++ trunk/Jmol/src/org/jmol/viewer/JmolConstants.java 2006-03-02 15:44:03 UTC (rev 4540) @@ -37,6 +37,7 @@ public final static int VISIBLE_STAR = 1 << 5; public final static int VISIBLE_HALO = 1 << 6; public final static int VISIBLE_DOTS = 1 << 7; + public final static int VISIBLE_VECTOR = 1 << 8; // VISIBLE_ATOM might be modified to include other shapes, public final static int VISIBLE_ATOM = VISIBLE_BALL Modified: trunk/Jmol/src/org/jmol/viewer/Vectors.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Vectors.java 2006-03-02 15:32:13 UTC (rev 4539) +++ trunk/Jmol/src/org/jmol/viewer/Vectors.java 2006-03-02 15:44:03 UTC (rev 4540) @@ -63,4 +63,18 @@ } } } + + void setModelVisibility() { + if (mads == null) + return; + Atom[] atoms = frame.atoms; + int displayModelIndex = viewer.getDisplayModelIndex(); + for (int i = frame.atomCount; --i >= 0; ) { + Atom atom = atoms[i]; + if ((displayModelIndex < 0 || atom.modelIndex == displayModelIndex) + && mads[i] > 0) + atom.visibilityFlags |= JmolConstants.VISIBLE_VECTOR; + } + } + } Modified: trunk/Jmol/src/org/jmol/viewer/VectorsRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/VectorsRenderer.java 2006-03-02 15:32:13 UTC (rev 4539) +++ trunk/Jmol/src/org/jmol/viewer/VectorsRenderer.java 2006-03-02 15:44:03 UTC (rev 4540) @@ -39,11 +39,9 @@ if (mads == null) return; short[] colixes = vectors.colixes; - int displayModelIndex = this.displayModelIndex; for (int i = frame.atomCount; --i >= 0; ) { Atom atom = atoms[i]; - if (mads[i] == 0 || - (displayModelIndex >= 0 && atom.modelIndex != displayModelIndex)) + if ((atom.visibilityFlags & JmolConstants.VISIBLE_VECTOR) ==0) continue; Vector3f vibrationVector = atom.getVibrationVector(); if (vibrationVector == null) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2006-03-02 19:28:50
|
Revision: 4541 Author: hansonr Date: 2006-03-02 11:27:50 -0800 (Thu, 02 Mar 2006) ViewCVS: http://svn.sourceforge.net/jmol/?rev=4541&view=rev Log Message: ----------- (1) labels rendering now based on atom.visibilityFlags & VISIBLE_LABEL (2) found and fixed error in Atom.formatLabel() (3) found and fixed error in Eval and Label re labels in XYZ files with multiple models (4) various cleaning up of shape renderers (5) double coding of standard Rasmol labels in Label and Eval now in StyleManager as getStandardLabelFormat() Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Atom.java trunk/Jmol/src/org/jmol/viewer/Backbone.java trunk/Jmol/src/org/jmol/viewer/Balls.java trunk/Jmol/src/org/jmol/viewer/Dots.java trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/JmolConstants.java trunk/Jmol/src/org/jmol/viewer/Labels.java trunk/Jmol/src/org/jmol/viewer/LabelsRenderer.java trunk/Jmol/src/org/jmol/viewer/Mps.java trunk/Jmol/src/org/jmol/viewer/MpsRenderer.java trunk/Jmol/src/org/jmol/viewer/Stars.java trunk/Jmol/src/org/jmol/viewer/Sticks.java trunk/Jmol/src/org/jmol/viewer/StyleManager.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/Atom.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Atom.java 2006-03-02 15:44:03 UTC (rev 4540) +++ trunk/Jmol/src/org/jmol/viewer/Atom.java 2006-03-02 19:27:50 UTC (rev 4541) @@ -136,6 +136,15 @@ } } + final void resetVisibility() { + //it is not feasible to follow the state exactly + //when individual bonds or backbone connections are broken + //so instead we clear them each time and reset them. + visibilityFlags = 0; + shapeVisibilityFlags &= + ~((1<<JmolConstants.SHAPE_BACKBONE | (1<<JmolConstants.SHAPE_STICKS))); + } + final void setShapeVisibility(int shapeVisibilityFlag, boolean isVisible) { if(isVisible) { shapeVisibilityFlags |= shapeVisibilityFlag; @@ -823,7 +832,7 @@ strT = "" + getPolymerLength(); break; case 'M': - strT = "/" + getModelTagNumber(); + strT = "" + getModelTagNumber(); break; case 'm': strT = "<X>"; @@ -856,7 +865,7 @@ } if (floatIsSet) { strLabel += format(floatT, width, precision, alignLeft, zeroPad); - } else { + } else if (strT != null) { strLabel += format(strT, width, precision, alignLeft, zeroPad); } } catch (IndexOutOfBoundsException ioobe) { @@ -878,6 +887,8 @@ static String format(String value, int width, int precision, boolean alignLeft, boolean zeroPad) { + if (value == null) + return ""; if (precision > value.length()) value = value.substring(0, precision); int padLength = width - value.length(); Modified: trunk/Jmol/src/org/jmol/viewer/Backbone.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Backbone.java 2006-03-02 15:44:03 UTC (rev 4540) +++ trunk/Jmol/src/org/jmol/viewer/Backbone.java 2006-03-02 19:27:50 UTC (rev 4541) @@ -68,6 +68,8 @@ Atom atomB = frame.getAtomAt(atomIndices[i + 1]); atomA.visibilityFlags |= JmolConstants.VISIBLE_BACKBONE; atomB.visibilityFlags |= JmolConstants.VISIBLE_BACKBONE; + atomA.setShapeVisibility(myVisibilityFlag, true); + atomB.setShapeVisibility(myVisibilityFlag, true); } } } Modified: trunk/Jmol/src/org/jmol/viewer/Balls.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Balls.java 2006-03-02 15:44:03 UTC (rev 4540) +++ trunk/Jmol/src/org/jmol/viewer/Balls.java 2006-03-02 19:27:50 UTC (rev 4541) @@ -103,7 +103,7 @@ boolean showHydrogens = viewer.getShowHydrogens(); for (int i = frame.atomCount; --i >= 0; ) { Atom atom = atoms[i]; - atom.visibilityFlags = 0; + atom.resetVisibility(); if (atom.madAtom == JmolConstants.MAR_DELETED || ! showHydrogens && atom.elementNumber == 1) continue; Modified: trunk/Jmol/src/org/jmol/viewer/Dots.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Dots.java 2006-03-02 15:44:03 UTC (rev 4540) +++ trunk/Jmol/src/org/jmol/viewer/Dots.java 2006-03-02 19:27:50 UTC (rev 4541) @@ -818,12 +818,11 @@ if (dotsConvexMaps == null) return; Atom[] atoms = frame.atoms; - int displayModelIndex = viewer.getDisplayModelIndex(); for (int i = dotsConvexMax; --i >= 0; ) { int[] map = dotsConvexMaps[i]; if (map != null && map != mapNull) { Atom atom = atoms[i]; - if (displayModelIndex < 0 || displayModelIndex == atom.modelIndex) + if ((atom.visibilityFlags & JmolConstants.VISIBLE_MODEL) != 0) atom.visibilityFlags |= JmolConstants.VISIBLE_DOTS; } } Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-02 15:44:03 UTC (rev 4540) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-02 19:27:50 UTC (rev 4541) @@ -1691,18 +1691,7 @@ void label() { String strLabel = (String)statement[1].value; if (strLabel.equalsIgnoreCase("on")) { - // from the RasMol 2.6b2 manual: RasMol uses the label - // "%n%r:%c.%a" if the molecule contains more than one chain: - // "%e%i" if the molecule has only a single residue (a small molecule) and - // "%n%r.%a" otherwise. - if (viewer.getModelCount() > 1) - strLabel = "[%n]%r:%c.%a/%M"; - else if (viewer.getChainCount() > 1) - strLabel = "[%n]%r:%c.%a"; - else if (viewer.getGroupCount() <= 1) - strLabel = "%e%i"; - else - strLabel = "[%n]%r.%a"; + strLabel = viewer.getStandardLabelFormat(); } else if (strLabel.equalsIgnoreCase("off")) strLabel = null; viewer.loadShape(JmolConstants.SHAPE_LABELS); Modified: trunk/Jmol/src/org/jmol/viewer/JmolConstants.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/JmolConstants.java 2006-03-02 15:44:03 UTC (rev 4540) +++ trunk/Jmol/src/org/jmol/viewer/JmolConstants.java 2006-03-02 19:27:50 UTC (rev 4541) @@ -28,25 +28,42 @@ final public class JmolConstants { + // this atom flag simply associates an atom with the current model + // but doesn't necessarily mean it is visible + + // and must be reset with setModelVisibility() prior to rendering - public final static int VISIBLE_MODEL = 1; - public final static int VISIBLE_BALL = 1 << 1; - public final static int VISIBLE_STICK = 1 << 2; - public final static int VISIBLE_BACKBONE = 1 << 3; - public final static int VISIBLE_CARTOON = 1 << 4; - public final static int VISIBLE_STAR = 1 << 5; - public final static int VISIBLE_HALO = 1 << 6; - public final static int VISIBLE_DOTS = 1 << 7; - public final static int VISIBLE_VECTOR = 1 << 8; + final static int VISIBLE_MODEL = 1; + + // these atom flags get tainted with scripts and frame changes + // and must be reset with setModelVisibility() prior to rendering + + final static int VISIBLE_BALL = 1 << 1; + final static int VISIBLE_STICK = 1 << 2; + final static int VISIBLE_STAR = 1 << 3; + final static int VISIBLE_HALO = 1 << 4; + final static int VISIBLE_DOTS = 1 << 5; + final static int VISIBLE_VECTOR = 1 << 6; + final static int VISIBLE_LABEL = 1 << 7; + + // these two do NOT drive display, but are for Atom.isVisible() only + + final static int VISIBLE_BACKBONE = 1 << 8; + final static int VISIBLE_CARTOON = 1 << 9; + // VISIBLE_ATOM might be modified to include other shapes, - public final static int VISIBLE_ATOM = + // for example, the phosphorus backbone in a cartoon of DNA is clickable + // but not actually "visible". + + final static int VISIBLE_ATOM = VISIBLE_BALL | VISIBLE_STICK | VISIBLE_BACKBONE | VISIBLE_CARTOON | VISIBLE_STAR | VISIBLE_HALO - | VISIBLE_DOTS; + | VISIBLE_DOTS + | VISIBLE_LABEL; // for now, just update this by hand // perhaps use ant filter later ... but mth doesn't like it :-( Modified: trunk/Jmol/src/org/jmol/viewer/Labels.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Labels.java 2006-03-02 15:44:03 UTC (rev 4540) +++ trunk/Jmol/src/org/jmol/viewer/Labels.java 2006-03-02 19:27:50 UTC (rev 4541) @@ -81,15 +81,14 @@ if ("label" == propertyName) { String strLabel = (String)value; - for (int i = frame.atomCount; --i >= 0; ) + int bsLength = bsSelected.length(); + for (int i = bsLength; --i >= 0; ) if (bsSelected.get(i)) { Atom atom = atoms[i]; String label = atom.formatLabel(strLabel); - if (strings == null || i >= strings.length) { - if (label == null) - continue; + atom.setShapeVisibility(myVisibilityFlag, label != null); + if (strings == null || i >= strings.length) strings = Util.ensureLength(strings, i + 1); - } strings[i] = label; } return; @@ -129,8 +128,8 @@ else if (offset == ((JmolConstants.LABEL_DEFAULT_X_OFFSET << 8) | JmolConstants.LABEL_DEFAULT_Y_OFFSET)) offset = 0; - for (int i = frame.atomCount; --i >= 0; ) - if (bsSelected.get(i)) { + int bsLength = bsSelected.length(); + for (int i = bsLength; --i >= 0; ) { if (offsets == null || i >= offsets.length) { if (offset == 0) continue; @@ -149,15 +148,7 @@ strings[atomIndex] != null) { strings[atomIndex] = null; } else { - String strLabel; - if (viewer.getModelCount() > 1) - strLabel = "[%n]%r:%c.%a/%M"; - else if (viewer.getChainCount() > 1) - strLabel = "[%n]%r:%c.%a"; - else if (viewer.getGroupCount() <= 1) - strLabel = "%e%i"; - else - strLabel = "[%n]%r.%a"; + String strLabel = viewer.getStandardLabelFormat(); Atom atom = atoms[atomIndex]; strings = Util.ensureLength(strings, atomIndex + 1); strings[atomIndex] = atom.formatLabel(strLabel); @@ -165,4 +156,15 @@ return; } } + + void setModelVisibility() { + for (int i = strings.length; --i >= 0; ) { + String label = strings[i]; + if (label == null) + continue; + Atom atom = frame.atoms[i]; + if ((atom.visibilityFlags & JmolConstants.VISIBLE_MODEL) != 0) + atom.visibilityFlags |= JmolConstants.VISIBLE_LABEL; + } + } } Modified: trunk/Jmol/src/org/jmol/viewer/LabelsRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/LabelsRenderer.java 2006-03-02 15:44:03 UTC (rev 4540) +++ trunk/Jmol/src/org/jmol/viewer/LabelsRenderer.java 2006-03-02 19:27:50 UTC (rev 4541) @@ -50,14 +50,11 @@ if (labelStrings == null) return; Atom[] atoms = frame.atoms; - int displayModelIndex = this.displayModelIndex; for (int i = labelStrings.length; --i >= 0; ) { - String label = labelStrings[i]; - if (label == null) - continue; Atom atom = atoms[i]; - if (displayModelIndex >= 0 && displayModelIndex != atom.modelIndex) + if ((atom.visibilityFlags & JmolConstants.VISIBLE_LABEL) == 0) continue; + String label = labelStrings[i]; short colix = (colixes == null || i >= colixes.length) ? 0 : colixes[i]; short bgcolix = (bgcolixes == null || i >= bgcolixes.length) ? 0 : bgcolixes[i]; Modified: trunk/Jmol/src/org/jmol/viewer/Mps.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Mps.java 2006-03-02 15:44:03 UTC (rev 4540) +++ trunk/Jmol/src/org/jmol/viewer/Mps.java 2006-03-02 19:27:50 UTC (rev 4541) @@ -102,6 +102,7 @@ class Mpsmodel { Mpspolymer[] mpspolymers; int modelIndex; + int modelVisibilityFlags = 0; Mpsmodel(Model model) { mpspolymers = new Mpspolymer[model.getPolymerCount()]; @@ -148,6 +149,10 @@ } void setModelVisibility() { + int displayModelIndex = viewer.getDisplayModelIndex(); + modelVisibilityFlags = + (displayModelIndex >= 0 && displayModelIndex != modelIndex + ? 0 : myVisibilityFlag); for (int i = mpspolymers.length; --i >= 0; ) mpspolymers[i].setModelVisibility(); } Modified: trunk/Jmol/src/org/jmol/viewer/MpsRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/MpsRenderer.java 2006-03-02 15:44:03 UTC (rev 4540) +++ trunk/Jmol/src/org/jmol/viewer/MpsRenderer.java 2006-03-02 19:27:50 UTC (rev 4541) @@ -35,7 +35,7 @@ Mps mcps = (Mps)shape; for (int m = mcps.getMpsmodelCount(); --m >= 0; ) { Mps.Mpsmodel mcpsmodel = mcps.getMpsmodel(m); - if (displayModelIndex >= 0 && displayModelIndex != mcpsmodel.modelIndex) + if ((mcpsmodel.modelVisibilityFlags & shape.myVisibilityFlag) == 0) continue; for (int c = mcpsmodel.getMpspolymerCount(); --c >= 0; ) { Mps.Mpspolymer mpspolymer = mcpsmodel.getMpspolymer(c); Modified: trunk/Jmol/src/org/jmol/viewer/Stars.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Stars.java 2006-03-02 15:44:03 UTC (rev 4540) +++ trunk/Jmol/src/org/jmol/viewer/Stars.java 2006-03-02 19:27:50 UTC (rev 4541) @@ -82,10 +82,9 @@ if (mads == null) return; Atom[] atoms = frame.atoms; - int displayModelIndex = viewer.getDisplayModelIndex(); for (int i = frame.atomCount; --i >= 0; ) { Atom atom = atoms[i]; - if ((displayModelIndex < 0 || atom.modelIndex == displayModelIndex) + if ((atom.visibilityFlags & JmolConstants.VISIBLE_MODEL) != 0 && mads[i] > 0) atom.visibilityFlags |= JmolConstants.VISIBLE_STAR; } Modified: trunk/Jmol/src/org/jmol/viewer/Sticks.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Sticks.java 2006-03-02 15:44:03 UTC (rev 4540) +++ trunk/Jmol/src/org/jmol/viewer/Sticks.java 2006-03-02 19:27:50 UTC (rev 4541) @@ -233,13 +233,11 @@ void setModelVisibility() { Bond[] bonds = frame.bonds; - int displayModelIndex = viewer.getDisplayModelIndex(); - boolean isOneFrame = (displayModelIndex >= 0); boolean showHydrogens = viewer.getShowHydrogens(); - for (int i = frame.bondCount; --i >= 0; ) { + for (int i = frame.bondCount; --i >= 0; ) { Bond bond = bonds[i]; bond.visibilityFlags = 0; - if (!isOneFrame || bond.atom1.modelIndex == displayModelIndex) { + if ((bond.atom1.visibilityFlags & JmolConstants.VISIBLE_MODEL) != 0) { if (bond.mad == 0) continue; Atom atomA = bond.atom1; @@ -249,6 +247,8 @@ atomA.visibilityFlags |= JmolConstants.VISIBLE_STICK; atomB.visibilityFlags |= JmolConstants.VISIBLE_STICK; bond.visibilityFlags |= JmolConstants.VISIBLE_STICK; + atomA.setShapeVisibility(myVisibilityFlag, true); + atomB.setShapeVisibility(myVisibilityFlag, true); } } } Modified: trunk/Jmol/src/org/jmol/viewer/StyleManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/StyleManager.java 2006-03-02 15:44:03 UTC (rev 4540) +++ trunk/Jmol/src/org/jmol/viewer/StyleManager.java 2006-03-02 19:27:50 UTC (rev 4541) @@ -193,4 +193,22 @@ new DecimalFormat(formattingStrings[decimalDigits]); return formatter.format(value); } + + String getStandardLabelFormat() { + // from the RasMol 2.6b2 manual: RasMol uses the label + // "%n%r:%c.%a" if the molecule contains more than one chain: + // "%e%i" if the molecule has only a single residue (a small molecule) and + // "%n%r.%a" otherwise. + String strLabel; + int modelCount = viewer.getModelCount(); + if (viewer.getChainCount() > modelCount) + strLabel = "[%n]%r:%c.%a"; + else if (viewer.getGroupCount() <= modelCount) + strLabel = "%e%i"; + else + strLabel = "[%n]%r.%a"; + if (viewer.getModelCount() > 1) + strLabel += "/%M"; + return strLabel; + } } Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-02 15:44:03 UTC (rev 4540) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-02 19:27:50 UTC (rev 4541) @@ -111,8 +111,8 @@ Hashtable appletInfo; - String htmlName=""; - + String htmlName = ""; + boolean jvm11orGreater = false; boolean jvm12orGreater = false; @@ -138,9 +138,9 @@ + JmolConstants.version + " " + JmolConstants.date + "\njava.vendor:" + strJavaVendor + "\njava.version:" + strJavaVersion + "\nos.name:" + strOSName); - System.out.println(htmlName + " jvm11orGreater=" + jvm11orGreater - + "\njvm12orGreater=" + jvm12orGreater - + "\njvm14orGreater=" + jvm14orGreater); + System.out.println(htmlName + " jvm11orGreater=" + jvm11orGreater + + "\njvm12orGreater=" + jvm12orGreater + "\njvm14orGreater=" + + jvm14orGreater); g3d = new Graphics3D(awtComponent); statusManager = new StatusManager(this); @@ -191,7 +191,7 @@ void logError(String strMsg) { System.out.println(strMsg); } - + Hashtable getAppletInfo() { Hashtable info = new Hashtable(); info.put("htmlName", htmlName); @@ -202,6 +202,7 @@ info.put("operatingSystem", strOSName); return info; } + // /////////////////////////////////////////////////////////////// // delegated to TransformManager // /////////////////////////////////////////////////////////////// @@ -334,9 +335,9 @@ } String getTranslationScript() { - return transformManager.getTranslationScript(); + return transformManager.getTranslationScript(); } - + void translateByXPercent(float percent) { translateToXPercent(getTranslationXPercent() + percent); } @@ -1065,8 +1066,7 @@ long timeBegin = System.currentTimeMillis(); fileManager.openFile(name); long ms = System.currentTimeMillis() - timeBegin; - setStatusFileLoaded(1, name, "", modelManager.getModelSetName(), - null, null); + setStatusFileLoaded(1, name, "", modelManager.getModelSetName(), null, null); System.out.println("openFile(" + name + ") " + ms + " ms"); } @@ -1077,11 +1077,11 @@ long timeBegin = System.currentTimeMillis(); fileManager.openFiles(modelName, names); long ms = System.currentTimeMillis() - timeBegin; - for(int i = 0; i < names.length ; i++) { + for (int i = 0; i < names.length; i++) { setStatusFileLoaded(1, names[i], "", modelManager.getModelSetName(), null, null); } - System.out.println("openFiles("+names.length+") " + ms + " ms"); + System.out.println("openFiles(" + names.length + ") " + ms + " ms"); } public void openStringInline(String strModel) { @@ -1189,9 +1189,9 @@ // maybe there needs to be a call to clear() // or something like that here // for when CdkEditBus calls this directly - - setStatusFileLoaded(2, fullPathName,fileName, modelManager.getModelSetName(), - clientFile, null); + + setStatusFileLoaded(2, fullPathName, fileName, modelManager + .getModelSetName(), clientFile, null); pushHoldRepaint(); modelManager.setClientFile(fullPathName, fileName, clientFile); homePosition(); @@ -1204,8 +1204,8 @@ setFrankOn(styleManager.frankOn); repaintManager.initializePointers(1); popHoldRepaint(); - setStatusFileLoaded(3, fullPathName, fileName, modelManager.getModelSetName(), - clientFile, null); + setStatusFileLoaded(3, fullPathName, fileName, modelManager + .getModelSetName(), clientFile, null); } void clear() { @@ -1330,7 +1330,7 @@ public Hashtable getPolymerInfo() { return modelManager.getPolymerInfoAll(); } - + public Properties getModelSetProperties() { return modelManager.getModelSetProperties(); } @@ -1755,7 +1755,8 @@ public void renderScreenImage(Graphics g, Dimension size, Rectangle clip) { manageScriptTermination(); - if(isTainted)setModelVisibility(); + if (isTainted) + setModelVisibility(); isTainted = false; if (size != null) setScreenDimension(size); @@ -1975,6 +1976,10 @@ styleManager.setSsbondsBackbone(ssbondsBackbone); } + String getStandardLabelFormat() { + return styleManager.getStandardLabelFormat(); + } + boolean getSsbondsBackbone() { return styleManager.ssbondsBackbone; } @@ -2052,7 +2057,7 @@ void setShapeSize(int shapeID, int size) { modelManager.setShapeSize(shapeID, size, selectionManager.bsSelection); - refresh(0, "Viewer:setShapeSize(" +shapeID + "," + size + ")"); + refresh(0, "Viewer:setShapeSize(" + shapeID + "," + size + ")"); } int getShapeSize(int shapeID) { @@ -2229,7 +2234,7 @@ } void setStatusFileLoaded(int ptLoad, String fullPathName, String fileName, - String modelName, Object clientFile, String strError) { + String modelName, Object clientFile, String strError) { statusManager.setStatusFileLoaded(fullPathName, fileName, modelName, clientFile, strError, ptLoad); } @@ -2918,13 +2923,14 @@ return g3d.getHexColorFromIndex(colix); } - void setModelVisibility(){ + void setModelVisibility() { modelManager.setModelVisibility(); } boolean isTainted = true; + void setTainted(boolean TF) { isTainted = TF; } - + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2006-03-05 00:29:48
|
Revision: 4543 Author: hansonr Date: 2006-03-04 16:29:21 -0800 (Sat, 04 Mar 2006) ViewCVS: http://svn.sourceforge.net/jmol/?rev=4543&view=rev Log Message: ----------- working on visibility; dissociating clickability from visibility (ahem, as Miguel pointed out would be necessary initially) (1) changed Atom.visibilityFlags to Atom.clickabilityFlags (2) some experimentation with keeping a running total of the number of displayed bonds to an atom was NOT successful; still in there though. backbone visibility same deal. I'll clean this up. Change here is that if any cartoon or trace or such is visible, then all atoms inherit group visibility. Just testing this. Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Atom.java trunk/Jmol/src/org/jmol/viewer/Backbone.java trunk/Jmol/src/org/jmol/viewer/BackboneRenderer.java trunk/Jmol/src/org/jmol/viewer/Balls.java trunk/Jmol/src/org/jmol/viewer/BallsRenderer.java trunk/Jmol/src/org/jmol/viewer/Bond.java trunk/Jmol/src/org/jmol/viewer/Dots.java trunk/Jmol/src/org/jmol/viewer/DotsRenderer.java trunk/Jmol/src/org/jmol/viewer/JmolConstants.java trunk/Jmol/src/org/jmol/viewer/Labels.java trunk/Jmol/src/org/jmol/viewer/LabelsRenderer.java trunk/Jmol/src/org/jmol/viewer/MeasuresRenderer.java trunk/Jmol/src/org/jmol/viewer/ModelManager.java trunk/Jmol/src/org/jmol/viewer/NucleicMonomer.java trunk/Jmol/src/org/jmol/viewer/Shape.java trunk/Jmol/src/org/jmol/viewer/Stars.java trunk/Jmol/src/org/jmol/viewer/StarsRenderer.java trunk/Jmol/src/org/jmol/viewer/Sticks.java trunk/Jmol/src/org/jmol/viewer/SticksRenderer.java trunk/Jmol/src/org/jmol/viewer/Vectors.java trunk/Jmol/src/org/jmol/viewer/VectorsRenderer.java Modified: trunk/Jmol/src/org/jmol/viewer/Atom.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Atom.java 2006-03-03 06:38:49 UTC (rev 4542) +++ trunk/Jmol/src/org/jmol/viewer/Atom.java 2006-03-05 00:29:21 UTC (rev 4543) @@ -48,11 +48,13 @@ byte elementNumber; byte formalChargeAndFlags; byte alternateLocationID; - int visibilityFlags; - int shapeVisibilityFlags; short madAtom; short colixAtom; Bond[] bonds; + int nBondsDisplayed = 0; + int nBackbonesDisplayed = 0; + int clickabilityFlags; + int shapeVisibilityFlags; Atom(Viewer viewer, Frame frame, @@ -136,15 +138,6 @@ } } - final void resetVisibility() { - //it is not feasible to follow the state exactly - //when individual bonds or backbone connections are broken - //so instead we clear them each time and reset them. - visibilityFlags = 0; - shapeVisibilityFlags &= - ~((1<<JmolConstants.SHAPE_BACKBONE | (1<<JmolConstants.SHAPE_STICKS))); - } - final void setShapeVisibility(int shapeVisibilityFlag, boolean isVisible) { if(isVisible) { shapeVisibilityFlags |= shapeVisibilityFlag; @@ -168,6 +161,18 @@ return false; } + Bond getBondToAtom(Atom atomOther) { + if (bonds != null) { + for (int i = bonds.length; --i >= 0; ) { + Bond bond = bonds[i]; + if ((bond.atom1 == atomOther) || + (bond.atom2 == atomOther)) + return bond; + } + } + return null; + } + Bond bondMutually(Atom atomOther, short order, Frame frame) { if (isBonded(atomOther)) return null; @@ -186,6 +191,22 @@ } } + void addDisplayedBond(boolean isVisible, int stickVisibilityFlag){ + int n = nBondsDisplayed; + nBondsDisplayed+=(isVisible ? 1 : -1); + if (n != 0 && nBondsDisplayed != 0) + return; + setShapeVisibility(stickVisibilityFlag, isVisible); + } + + void addDisplayedBackbone(boolean isVisible, int backboneVisibilityFlag){ + int n= nBackbonesDisplayed; + nBackbonesDisplayed+=(isVisible ? 1 : -1); + if (n != 0 && nBackbonesDisplayed != 0) + return; + setShapeVisibility(backboneVisibilityFlag, isVisible); + } + void deleteBondedAtom(Atom atomToDelete) { if (bonds == null) return; @@ -433,12 +454,19 @@ return formalChargeAndFlags >> 3; } + boolean isClickable() { + return ((clickabilityFlags & JmolConstants.CLICKABLE_ATOM) != 0); + } + boolean isVisible() { - return ((visibilityFlags & JmolConstants.VISIBLE_ATOM) != 0); + // in model AND something to show for it or it's group is visible + return ((shapeVisibilityFlags & JmolConstants.ATOM_IN_MODEL) != 0 + && ((shapeVisibilityFlags & ~JmolConstants.ATOM_IN_MODEL) != 0 + || group != null && group.shapeVisibilityFlags != 0)); } boolean isShapeVisible(int shapeID) { - return ((shapeVisibilityFlags & (1 << shapeID)) != 0); + return ((shapeVisibilityFlags & (2 << shapeID)) != 0); } float getPartialCharge() { @@ -946,7 +974,7 @@ boolean isCursorOnTopOfVisibleAtom(int xCursor, int yCursor, int minRadius, Atom competitor) { - return (isVisible() && + return (isClickable() && isCursorOnTop(xCursor, yCursor, minRadius, competitor)); } Modified: trunk/Jmol/src/org/jmol/viewer/Backbone.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Backbone.java 2006-03-03 06:38:49 UTC (rev 4542) +++ trunk/Jmol/src/org/jmol/viewer/Backbone.java 2006-03-05 00:29:21 UTC (rev 4543) @@ -47,14 +47,18 @@ // but it is picked up within the loop by looking at i+1 boolean isVisible = (mad != 0); for (int i = monomerCount - 1; --i >= 0; ) { - if ((bsSelected.get(atomIndices[i]) && - bsSelected.get(atomIndices[i + 1])) - || - (bondSelectionModeOr && - (bsSelected.get(atomIndices[i]) || - bsSelected.get(atomIndices[i + 1])))) { + int index1 = atomIndices[i]; + int index2 = atomIndices[i + 1]; + boolean isAtom1 = bsSelected.get(index1); + boolean isAtom2 = bsSelected.get(index2); + if ( isAtom1 && isAtom2 + || bondSelectionModeOr && (isAtom1 || isAtom2)) { monomers[i].setShapeVisibility(myVisibilityFlag, isVisible); mads[i] = mad; + Atom atomA = frame.getAtomAt(index1); + Atom atomB = frame.getAtomAt(index2); + atomA.addDisplayedBackbone(mad != 0, myVisibilityFlag); + atomB.addDisplayedBackbone(mad != 0, myVisibilityFlag); } } } @@ -66,12 +70,11 @@ int[] atomIndices = polymer.getLeadAtomIndices(); Atom atomA = frame.getAtomAt(atomIndices[i]); Atom atomB = frame.getAtomAt(atomIndices[i + 1]); - atomA.visibilityFlags |= JmolConstants.VISIBLE_BACKBONE; - atomB.visibilityFlags |= JmolConstants.VISIBLE_BACKBONE; - atomA.setShapeVisibility(myVisibilityFlag, true); - atomB.setShapeVisibility(myVisibilityFlag, true); + atomA.clickabilityFlags |= JmolConstants.CLICKABLE_BACKBONE; + atomB.clickabilityFlags |= JmolConstants.CLICKABLE_BACKBONE; } } + } } Modified: trunk/Jmol/src/org/jmol/viewer/BackboneRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/BackboneRenderer.java 2006-03-03 06:38:49 UTC (rev 4542) +++ trunk/Jmol/src/org/jmol/viewer/BackboneRenderer.java 2006-03-05 00:29:21 UTC (rev 4543) @@ -50,7 +50,8 @@ Atom atomA = frame.getAtomAt(atomIndices[i]); Atom atomB = frame.getAtomAt(atomIndices[i + 1]); - + if (atomA.nBackbonesDisplayed == 0 || atomB.nBackbonesDisplayed == 0) + continue; int xA = atomA.getScreenX(), yA = atomA.getScreenY(), zA = atomA.getScreenZ(); int xB = atomB.getScreenX(), yB = atomB.getScreenY(), Modified: trunk/Jmol/src/org/jmol/viewer/Balls.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Balls.java 2006-03-03 06:38:49 UTC (rev 4542) +++ trunk/Jmol/src/org/jmol/viewer/Balls.java 2006-03-05 00:29:21 UTC (rev 4543) @@ -101,19 +101,30 @@ int displayModelIndex = viewer.getDisplayModelIndex(); boolean isOneFrame = (displayModelIndex >= 0); boolean showHydrogens = viewer.getShowHydrogens(); + int ballVisibilityFlag = 2 << JmolConstants.SHAPE_BALLS; + int haloVisibilityFlag = 2 << JmolConstants.SHAPE_HALO; for (int i = frame.atomCount; --i >= 0; ) { Atom atom = atoms[i]; - atom.resetVisibility(); + atom.clickabilityFlags = 0; + atom.shapeVisibilityFlags &= ( + ~JmolConstants.ATOM_IN_MODEL + & ~ballVisibilityFlag + & ~haloVisibilityFlag); if (atom.madAtom == JmolConstants.MAR_DELETED || ! showHydrogens && atom.elementNumber == 1) continue; if (! isOneFrame || atom.modelIndex == displayModelIndex) { - atom.visibilityFlags = JmolConstants.VISIBLE_MODEL; - if (atom.madAtom != 0) - atom.visibilityFlags |= JmolConstants.VISIBLE_BALL; - if(viewer.hasSelectionHalo(atom.atomIndex)) - atom.visibilityFlags |= JmolConstants.VISIBLE_HALO; - } + atom.clickabilityFlags = JmolConstants.ATOM_IN_MODEL; + atom.shapeVisibilityFlags |= JmolConstants.ATOM_IN_MODEL; + if (atom.madAtom != 0) { + atom.clickabilityFlags |= JmolConstants.CLICKABLE_BALL; + atom.shapeVisibilityFlags |= ballVisibilityFlag; + } + if(viewer.hasSelectionHalo(atom.atomIndex)) { + atom.clickabilityFlags |= JmolConstants.CLICKABLE_HALO; + atom.shapeVisibilityFlags |= haloVisibilityFlag; + } + } } } } Modified: trunk/Jmol/src/org/jmol/viewer/BallsRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/BallsRenderer.java 2006-03-03 06:38:49 UTC (rev 4542) +++ trunk/Jmol/src/org/jmol/viewer/BallsRenderer.java 2006-03-05 00:29:21 UTC (rev 4543) @@ -41,15 +41,17 @@ wireframeRotating = viewer.getWireframeRotating(); colixSelection = viewer.getColixSelection(); + int ballVisibilityFlag = 2 << JmolConstants.SHAPE_BALLS; + int haloVisibilityFlag = 2 << JmolConstants.SHAPE_HALO; Atom[] atoms = frame.atoms; for (int i = frame.atomCount; --i >= 0; ) { Atom atom = atoms[i]; - if ((atom.visibilityFlags & JmolConstants.VISIBLE_MODEL) == 0) + if ((atom.shapeVisibilityFlags & JmolConstants.ATOM_IN_MODEL) == 0) continue; atom.transform(viewer); - if ((atom.visibilityFlags & JmolConstants.VISIBLE_BALL) != 0) + if ((atom.shapeVisibilityFlags & ballVisibilityFlag) != 0) renderBall(atom); - if ((atom.visibilityFlags & JmolConstants.VISIBLE_HALO) != 0) + if ((atom.shapeVisibilityFlags & haloVisibilityFlag) != 0) renderHalo(atom); } } Modified: trunk/Jmol/src/org/jmol/viewer/Bond.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Bond.java 2006-03-03 06:38:49 UTC (rev 4542) +++ trunk/Jmol/src/org/jmol/viewer/Bond.java 2006-03-05 00:29:21 UTC (rev 4543) @@ -80,8 +80,10 @@ atom1 = atom2 = null; } - void setMad(short mad) { + void setMad(short mad, int stickVisibilityFlag) { this.mad = mad; + atom1.addDisplayedBond(mad != 0, stickVisibilityFlag); + atom2.addDisplayedBond(mad != 0, stickVisibilityFlag); } void setColix(short colix) { Modified: trunk/Jmol/src/org/jmol/viewer/Dots.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Dots.java 2006-03-03 06:38:49 UTC (rev 4542) +++ trunk/Jmol/src/org/jmol/viewer/Dots.java 2006-03-05 00:29:21 UTC (rev 4543) @@ -822,8 +822,7 @@ int[] map = dotsConvexMaps[i]; if (map != null && map != mapNull) { Atom atom = atoms[i]; - if ((atom.visibilityFlags & JmolConstants.VISIBLE_MODEL) != 0) - atom.visibilityFlags |= JmolConstants.VISIBLE_DOTS; + atom.clickabilityFlags |= JmolConstants.CLICKABLE_DOTS; } } } Modified: trunk/Jmol/src/org/jmol/viewer/DotsRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/DotsRenderer.java 2006-03-03 06:38:49 UTC (rev 4542) +++ trunk/Jmol/src/org/jmol/viewer/DotsRenderer.java 2006-03-05 00:29:21 UTC (rev 4543) @@ -63,7 +63,8 @@ short[] colixesConvex = dots.colixesConvex; for (int i = dots.dotsConvexMax; --i >= 0; ) { Atom atom = atoms[i]; - if ((atom.visibilityFlags & JmolConstants.VISIBLE_DOTS) != 0) { + if ((atom.shapeVisibilityFlags & JmolConstants.ATOM_IN_MODEL) != 0 + && (atom.shapeVisibilityFlags & dots.myVisibilityFlag) != 0) { renderConvex(dots, atom, colixesConvex[i], dotsConvexMaps[i]); } } @@ -71,7 +72,8 @@ for (int i = dots.torusCount; --i >= 0; ) { Dots.Torus torus = tori[i]; Atom atom = atoms[torus.ixI]; - if ((atom.visibilityFlags & JmolConstants.VISIBLE_DOTS) != 0) + if ((atom.shapeVisibilityFlags & JmolConstants.ATOM_IN_MODEL) != 0 + && (atom.shapeVisibilityFlags & dots.myVisibilityFlag) != 0) renderTorus(torus, atoms, colixesConvex, dotsConvexMaps); } Dots.Cavity[] cavities = dots.cavities; @@ -82,7 +84,8 @@ for (int i = dots.cavityCount; --i >= 0; ) { Dots.Cavity cavity = cavities[i]; Atom atom = atoms[cavity.ixI]; - if ((atom.visibilityFlags & JmolConstants.VISIBLE_DOTS) != 0) + if ((atom.shapeVisibilityFlags & JmolConstants.ATOM_IN_MODEL) != 0 + && (atom.shapeVisibilityFlags & dots.myVisibilityFlag) != 0) renderCavity(cavities[i], atoms, colixesConvex, dotsConvexMaps); } } Modified: trunk/Jmol/src/org/jmol/viewer/JmolConstants.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/JmolConstants.java 2006-03-03 06:38:49 UTC (rev 4542) +++ trunk/Jmol/src/org/jmol/viewer/JmolConstants.java 2006-03-05 00:29:21 UTC (rev 4543) @@ -33,37 +33,35 @@ // and must be reset with setModelVisibility() prior to rendering - final static int VISIBLE_MODEL = 1; // these atom flags get tainted with scripts and frame changes // and must be reset with setModelVisibility() prior to rendering - final static int VISIBLE_BALL = 1 << 1; - final static int VISIBLE_STICK = 1 << 2; - final static int VISIBLE_STAR = 1 << 3; - final static int VISIBLE_HALO = 1 << 4; - final static int VISIBLE_DOTS = 1 << 5; - final static int VISIBLE_VECTOR = 1 << 6; - final static int VISIBLE_LABEL = 1 << 7; + public final static int ATOM_IN_MODEL = 1; - // these two do NOT drive display, but are for Atom.isVisible() only - - final static int VISIBLE_BACKBONE = 1 << 8; - final static int VISIBLE_CARTOON = 1 << 9; + final static int CLICKABLE_BALL = 1 << 1; + final static int CLICKABLE_STICK = 1 << 2; + final static int CLICKABLE_STAR = 1 << 3; + final static int CLICKABLE_HALO = 1 << 4; + final static int CLICKABLE_DOTS = 1 << 5; + final static int CLICKABLE_VECTOR = 1 << 6; + final static int CLICKABLE_LABEL = 1 << 7; + final static int CLICKABLE_BACKBONE = 1 << 8; + final static int CLICKABLE_CARTOON = 1 << 9; - // VISIBLE_ATOM might be modified to include other shapes, + // CLICKABLE_ATOM might be modified to include other shapes, // for example, the phosphorus backbone in a cartoon of DNA is clickable // but not actually "visible". - final static int VISIBLE_ATOM = - VISIBLE_BALL - | VISIBLE_STICK - | VISIBLE_BACKBONE - | VISIBLE_CARTOON - | VISIBLE_STAR - | VISIBLE_HALO - | VISIBLE_DOTS - | VISIBLE_LABEL; + final static int CLICKABLE_ATOM = + CLICKABLE_BALL + | CLICKABLE_STICK + | CLICKABLE_BACKBONE + | CLICKABLE_CARTOON + | CLICKABLE_STAR + | CLICKABLE_HALO + | CLICKABLE_DOTS + | CLICKABLE_LABEL; // for now, just update this by hand // perhaps use ant filter later ... but mth doesn't like it :-( @@ -2157,6 +2155,9 @@ public final static int SHAPE_ISOSURFACE = 25; public final static int SHAPE_PRUEBA = 26; public final static int SHAPE_MAX = 27; + + //handled in Balls.java: + public final static int SHAPE_HALO = SHAPE_MAX; public final static String[] shapeClassBases = { "Balls", "Sticks", "Hsticks", "Sssticks", Modified: trunk/Jmol/src/org/jmol/viewer/Labels.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Labels.java 2006-03-03 06:38:49 UTC (rev 4542) +++ trunk/Jmol/src/org/jmol/viewer/Labels.java 2006-03-05 00:29:21 UTC (rev 4543) @@ -160,11 +160,8 @@ void setModelVisibility() { for (int i = strings.length; --i >= 0; ) { String label = strings[i]; - if (label == null) - continue; - Atom atom = frame.atoms[i]; - if ((atom.visibilityFlags & JmolConstants.VISIBLE_MODEL) != 0) - atom.visibilityFlags |= JmolConstants.VISIBLE_LABEL; + if (label != null) + frame.atoms[i].clickabilityFlags |= JmolConstants.CLICKABLE_LABEL; } } } Modified: trunk/Jmol/src/org/jmol/viewer/LabelsRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/LabelsRenderer.java 2006-03-03 06:38:49 UTC (rev 4542) +++ trunk/Jmol/src/org/jmol/viewer/LabelsRenderer.java 2006-03-05 00:29:21 UTC (rev 4543) @@ -52,7 +52,8 @@ Atom[] atoms = frame.atoms; for (int i = labelStrings.length; --i >= 0; ) { Atom atom = atoms[i]; - if ((atom.visibilityFlags & JmolConstants.VISIBLE_LABEL) == 0) + if ((atom.shapeVisibilityFlags & JmolConstants.ATOM_IN_MODEL) == 0 + || (atom.shapeVisibilityFlags & labels.myVisibilityFlag) == 0) continue; String label = labelStrings[i]; short colix = (colixes == null || i >= colixes.length) ? 0 : colixes[i]; Modified: trunk/Jmol/src/org/jmol/viewer/MeasuresRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/MeasuresRenderer.java 2006-03-03 06:38:49 UTC (rev 4542) +++ trunk/Jmol/src/org/jmol/viewer/MeasuresRenderer.java 2006-03-05 00:29:21 UTC (rev 4543) @@ -102,7 +102,7 @@ /* Miguel commented this out on 31 Aug 2005 and sent an email to the list asking why it would have been here - if (! (atomA.isVisible() && atomB.isVisible())) + if (! (atomA.isClickable() && atomB.isClickable())) return; 1 Sep 2005 ... the previous hack was put in to control the @@ -137,7 +137,7 @@ void renderAngle(Atom atomA, Atom atomB, Atom atomC, short colix, boolean renderArcs) { /* - if (! (atomA.isVisible() && atomB.isVisible() && atomC.isVisible())) + if (! (atomA.isClickable() && atomB.isClickable() && atomC.isClickable())) return; */ if (displayModelIndex >= 0 && @@ -209,8 +209,8 @@ void renderTorsion(Atom atomA, Atom atomB, Atom atomC, Atom atomD, short colix, boolean renderArcs) { /* - if (! (atomA.isVisible() && atomB.isVisible() && - atomC.isVisible() && atomD.isVisible())) + if (! (atomA.isClickable() && atomB.isClickable() && + atomC.isClickable() && atomD.isClickable())) return; */ if (displayModelIndex >= 0 && Modified: trunk/Jmol/src/org/jmol/viewer/ModelManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/ModelManager.java 2006-03-03 06:38:49 UTC (rev 4542) +++ trunk/Jmol/src/org/jmol/viewer/ModelManager.java 2006-03-05 00:29:21 UTC (rev 4543) @@ -691,7 +691,7 @@ info.put("radius", new Float((atom.getRasMolRadius()/120.0))); info.put("info", getAtomInfo(i)); info.put("visible", new Boolean(getAtomVisibility(i))); - info.put("visibilityFlags", new Integer(atom.visibilityFlags)); + info.put("clickabilityFlags", new Integer(atom.clickabilityFlags)); info.put("shapeVisibilityFlags", new Integer(atom.shapeVisibilityFlags)); info.put("spacefill", new Integer(atom.madAtom >> 3)); info.put("color", viewer.getHexColorFromIndex(atom.colixAtom)); Modified: trunk/Jmol/src/org/jmol/viewer/NucleicMonomer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/NucleicMonomer.java 2006-03-03 06:38:49 UTC (rev 4542) +++ trunk/Jmol/src/org/jmol/viewer/NucleicMonomer.java 2006-03-05 00:29:21 UTC (rev 4543) @@ -252,12 +252,12 @@ Atom atom; for (int i = 6; --i >= 0; ) { atom = getAtomFromOffsetIndex(i + 3); - atom.visibilityFlags |= JmolConstants.VISIBLE_CARTOON; + atom.clickabilityFlags |= JmolConstants.CLICKABLE_CARTOON; } if (isPurine) for (int i = 5; --i >= 0; ) { atom = getAtomFromOffsetIndex(ring5OffsetIndexes[i]); - atom.visibilityFlags |= JmolConstants.VISIBLE_CARTOON; + atom.clickabilityFlags |= JmolConstants.CLICKABLE_CARTOON; } } } Modified: trunk/Jmol/src/org/jmol/viewer/Shape.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Shape.java 2006-03-03 06:38:49 UTC (rev 4542) +++ trunk/Jmol/src/org/jmol/viewer/Shape.java 2006-03-05 00:29:21 UTC (rev 4543) @@ -40,7 +40,7 @@ final void setVisibilityInfo(int shapeID) { this.shapeID = shapeID; - this.myVisibilityFlag = (1 << shapeID); + this.myVisibilityFlag = (2 << shapeID); this.shapeVisibilityFlags = 0; } Modified: trunk/Jmol/src/org/jmol/viewer/Stars.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Stars.java 2006-03-03 06:38:49 UTC (rev 4542) +++ trunk/Jmol/src/org/jmol/viewer/Stars.java 2006-03-05 00:29:21 UTC (rev 4543) @@ -77,16 +77,4 @@ return; } } - - void setModelVisibility() { - if (mads == null) - return; - Atom[] atoms = frame.atoms; - for (int i = frame.atomCount; --i >= 0; ) { - Atom atom = atoms[i]; - if ((atom.visibilityFlags & JmolConstants.VISIBLE_MODEL) != 0 - && mads[i] > 0) - atom.visibilityFlags |= JmolConstants.VISIBLE_STAR; - } - } } Modified: trunk/Jmol/src/org/jmol/viewer/StarsRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/StarsRenderer.java 2006-03-03 06:38:49 UTC (rev 4542) +++ trunk/Jmol/src/org/jmol/viewer/StarsRenderer.java 2006-03-05 00:29:21 UTC (rev 4543) @@ -36,7 +36,8 @@ Atom[] atoms = frame.atoms; for (int i = frame.atomCount; --i >= 0; ) { Atom atom = atoms[i]; - if ((atom.visibilityFlags & JmolConstants.VISIBLE_STAR) !=0) { + if ((atom.shapeVisibilityFlags & JmolConstants.ATOM_IN_MODEL) != 0 + && (atom.shapeVisibilityFlags & stars.myVisibilityFlag) != 0) { short colix = stars.colixes == null ? 0 : stars.colixes[i]; render1(atom, stars.mads[i], colix); } Modified: trunk/Jmol/src/org/jmol/viewer/Sticks.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Sticks.java 2006-03-03 06:38:49 UTC (rev 4542) +++ trunk/Jmol/src/org/jmol/viewer/Sticks.java 2006-03-05 00:29:21 UTC (rev 4543) @@ -61,6 +61,9 @@ JmolConstants.BOND_COVALENT_MASK, bsSelected); return; } + /* + * retired 3/4/06; never documented + * if ("bondOrder" == propertyName) { if (value instanceof Short) { order = ((Short)value).shortValue(); @@ -74,6 +77,8 @@ } return; } + */ + if ("connectNew" == propertyName) { iConnectNew = ((Boolean)value).booleanValue(); return; @@ -137,7 +142,7 @@ void setMadBond(short mad, short bondTypeMask, BitSet bs) { BondIterator iter = frame.getBondIterator(bondTypeMask, bs); while (iter.hasNext()) - iter.next().setMad(mad); + iter.next().setMad(mad, myVisibilityFlag); } void setColixBond(short colix, String palette, @@ -166,7 +171,7 @@ while (iter.hasNext()) { bond = iter.next(); bond.setOrder(order); - if(mad >= 0)bond.setMad(mad); + if(mad >= 0)bond.setMad(mad, myVisibilityFlag); } } @@ -213,16 +218,19 @@ //System.out.println(iA+" "+iB+" continuing"); float distanceSquared = pointA.distanceSquared(atomB.point3f); if (distanceSquared > minDistanceSquared && distanceSquared <= maxDistanceSquared) { - BitSet bsTwoAtoms=new BitSet(); - bsTwoAtoms.set(iA); - bsTwoAtoms.set(iB); - nbonds++; + Bond bond = atomA.getBondToAtom(atomB); if (order == 0){ - deleteSelectedBonds(bsTwoAtoms); - } else { - if (!frame.bondAtomsByNumber(iA, iB, (int)order, mad)) { - setOrderBond(order, bsTwoAtoms, mad); + if(bond != null) { + frame.deleteBond(bond); + nbonds++; } + } else if (bond == null) { + frame.bondAtomsByNumber(iA, iB, (int)order, mad); + nbonds++; + } else if (bond.getOrder() != order) { + bond.setOrder(order); + if(mad >= 0)bond.setMad(mad, myVisibilityFlag); + nbonds++; } } } @@ -233,24 +241,19 @@ void setModelVisibility() { Bond[] bonds = frame.bonds; - boolean showHydrogens = viewer.getShowHydrogens(); - for (int i = frame.bondCount; --i >= 0; ) { + for (int i = frame.bondCount; --i >= 0; ) { Bond bond = bonds[i]; bond.visibilityFlags = 0; - if ((bond.atom1.visibilityFlags & JmolConstants.VISIBLE_MODEL) != 0) { + if ((bond.atom1.shapeVisibilityFlags & bond.atom2.shapeVisibilityFlags + & JmolConstants.ATOM_IN_MODEL) != 0) { if (bond.mad == 0) continue; - Atom atomA = bond.atom1; - Atom atomB = bond.atom2; - if (showHydrogens - || atomA.elementNumber != 1 && atomB.elementNumber != 1) { - atomA.visibilityFlags |= JmolConstants.VISIBLE_STICK; - atomB.visibilityFlags |= JmolConstants.VISIBLE_STICK; - bond.visibilityFlags |= JmolConstants.VISIBLE_STICK; - atomA.setShapeVisibility(myVisibilityFlag, true); - atomB.setShapeVisibility(myVisibilityFlag, true); - } + bond.atom1.clickabilityFlags |= JmolConstants.CLICKABLE_STICK; + bond.atom2.clickabilityFlags |= JmolConstants.CLICKABLE_STICK; + bond.visibilityFlags |= myVisibilityFlag; } } } + + } Modified: trunk/Jmol/src/org/jmol/viewer/SticksRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/SticksRenderer.java 2006-03-03 06:38:49 UTC (rev 4542) +++ trunk/Jmol/src/org/jmol/viewer/SticksRenderer.java 2006-03-05 00:29:21 UTC (rev 4543) @@ -79,7 +79,7 @@ Bond[] bonds = frame.bonds; for (int i = frame.bondCount; --i >= 0; ) { Bond bond = bonds[i]; - if ((bond.visibilityFlags & JmolConstants.VISIBLE_STICK) != 0) + if (bond.visibilityFlags != 0) render(bond); } } Modified: trunk/Jmol/src/org/jmol/viewer/Vectors.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Vectors.java 2006-03-03 06:38:49 UTC (rev 4542) +++ trunk/Jmol/src/org/jmol/viewer/Vectors.java 2006-03-05 00:29:21 UTC (rev 4543) @@ -45,9 +45,12 @@ if (frame.hasVibrationVectors) { short mad = (short)size; //Atom[] atoms = frame.atoms; - for (int i = frame.atomCount; --i >= 0; ) - if (bsSelected.get(i)) + for (int i = frame.atomCount; --i >= 0; ) { + if (bsSelected.get(i)) { mads[i] = mad; + frame.atoms[i].setShapeVisibility(myVisibilityFlag, (mad != 0)); + } + } } } @@ -68,12 +71,12 @@ if (mads == null) return; Atom[] atoms = frame.atoms; - int displayModelIndex = viewer.getDisplayModelIndex(); for (int i = frame.atomCount; --i >= 0; ) { Atom atom = atoms[i]; - if ((displayModelIndex < 0 || atom.modelIndex == displayModelIndex) - && mads[i] > 0) - atom.visibilityFlags |= JmolConstants.VISIBLE_VECTOR; + if ((atom.shapeVisibilityFlags & JmolConstants.ATOM_IN_MODEL) != 0 + && mads[i] > 0) { + atom.clickabilityFlags |= JmolConstants.CLICKABLE_VECTOR; + } } } Modified: trunk/Jmol/src/org/jmol/viewer/VectorsRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/VectorsRenderer.java 2006-03-03 06:38:49 UTC (rev 4542) +++ trunk/Jmol/src/org/jmol/viewer/VectorsRenderer.java 2006-03-05 00:29:21 UTC (rev 4543) @@ -41,7 +41,8 @@ short[] colixes = vectors.colixes; for (int i = frame.atomCount; --i >= 0; ) { Atom atom = atoms[i]; - if ((atom.visibilityFlags & JmolConstants.VISIBLE_VECTOR) ==0) + if ((atom.shapeVisibilityFlags & JmolConstants.ATOM_IN_MODEL) ==0 + || (atom.shapeVisibilityFlags & vectors.myVisibilityFlag) ==0) continue; Vector3f vibrationVector = atom.getVibrationVector(); if (vibrationVector == null) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2006-03-06 03:51:50
|
Revision: 4546 Author: hansonr Date: 2006-03-05 19:51:42 -0800 (Sun, 05 Mar 2006) ViewCVS: http://svn.sourceforge.net/jmol/?rev=4546&view=rev Log Message: ----------- adds getProperty("stateInfo"), which combines: (a) a differential listing of atom and bond information (b) modelInfo (c) animationInfo (d) polymerInfo (e) shapeInfo this should go a long way toward generating a "state" of the model. All the atom and bond sizes and colors are there; the shapeVisibilityFlags indicate what sort of shape is enabled; This isn't perfect by any means. Still no mads for the special shapes. No labels. But it's all I have time for currently. The differential idea is not obvious. See ModelManager.getAllStateInfo(). Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Atom.java trunk/Jmol/src/org/jmol/viewer/ModelManager.java trunk/Jmol/src/org/jmol/viewer/Monomer.java trunk/Jmol/src/org/jmol/viewer/PropertyManager.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/Atom.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Atom.java 2006-03-05 18:22:08 UTC (rev 4545) +++ trunk/Jmol/src/org/jmol/viewer/Atom.java 2006-03-06 03:51:42 UTC (rev 4546) @@ -332,8 +332,6 @@ void setColixAtom(short colixAtom) { if (colixAtom == 0) - if (group == null) - return; colixAtom = group.chain.frame.viewer.getColixAtomPalette(this, "cpk"); this.colixAtom = colixAtom; } Modified: trunk/Jmol/src/org/jmol/viewer/ModelManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/ModelManager.java 2006-03-05 18:22:08 UTC (rev 4545) +++ trunk/Jmol/src/org/jmol/viewer/ModelManager.java 2006-03-06 03:51:42 UTC (rev 4546) @@ -538,7 +538,7 @@ return polymer.getLeadMidpoints(); } - String getModelExtractFromBitSet(BitSet bs) { + String getModelExtract(BitSet bs) { String str = ""; int atomCount = getAtomCount(); int bondCount = getBondCount(); @@ -553,7 +553,8 @@ } } for (int i = 0; i < bondCount; i++) { - if (bs.get(frame.getBondAt(i).getAtom1().atomIndex) && bs.get(frame.getBondAt(i).getAtom2().atomIndex)) { + if (bs.get(frame.getBondAt(i).getAtom1().atomIndex) + && bs.get(frame.getBondAt(i).getAtom2().atomIndex)) { int order = getBondOrder(i); if (order >= 1 && order < 3) { str = str + getBondRecordMOL(i,atomMap); @@ -562,7 +563,7 @@ } } if(nAtoms > 999 || nBonds > 999) { - System.out.println("ModelManager.java::getModelExtractFromBitSet: ERROR atom/bond overflow"); + System.out.println("ModelManager.java::getModel: ERROR atom/bond overflow"); return ""; } // 21 21 0 0 0 @@ -649,20 +650,6 @@ return info; } - Hashtable getChainInfo() { - Hashtable info = new Hashtable(); - int modelCount = viewer.getModelCount(); - info.put("modelCount",new Integer(modelCount)); - Vector models = new Vector(); - for (int i = 0; i < modelCount; ++i) { - Hashtable model = new Hashtable(); - model.put("chains", getChainInfo(i)); - models.add(model); - } - info.put("models",models); - return info; - } - Vector getAllAtomInfo(BitSet bs) { boolean isPDB = frame.isPDB; Vector V = new Vector(); @@ -692,7 +679,7 @@ info.put("info", getAtomInfo(i)); info.put("visible", new Boolean(getAtomVisibility(i))); info.put("clickabilityFlags", new Integer(atom.clickabilityFlags)); - info.put("shapeVisibilityFlags", new Integer(atom.shapeVisibilityFlags)); + info.put("visibilityFlags", new Integer(atom.shapeVisibilityFlags)); info.put("spacefill", new Integer(atom.madAtom >> 3)); String strColor = viewer.getHexColorFromIndex(atom.colixAtom); if(strColor != null) @@ -723,11 +710,12 @@ return info; } - Vector getBondInfoFromBitSet(BitSet bs) { + Vector getAllBondInfo(BitSet bs) { Vector V = new Vector(); int bondCount = viewer.getBondCount(); for (int i = 0; i < bondCount; i++) - if (bs.get(frame.getBondAt(i).getAtom1().atomIndex) && bs.get(frame.getBondAt(i).getAtom2().atomIndex)) + if (bs.get(frame.getBondAt(i).getAtom1().atomIndex) + && bs.get(frame.getBondAt(i).getAtom2().atomIndex)) V.add(getBondInfo(i)); return V; } @@ -783,7 +771,24 @@ return info; } - Vector getChainInfo(int modelIndex) { + Hashtable getAllChainInfo(BitSet bs) { + Hashtable finalInfo = new Hashtable(); + Vector modelVector = new Vector(); + int modelCount = getModelCount(); + for (int i = 0; i < modelCount; ++i) { + Hashtable modelInfo = new Hashtable(); + Vector info = getChainInfo(i, bs); + if (info.size() > 0) { + modelInfo.put("modelIndex",new Integer(i)); + modelInfo.put("chains",info); + modelVector.add(modelInfo); + } + } + finalInfo.put("models",modelVector); + return finalInfo; + } + + Vector getChainInfo(int modelIndex, BitSet bs) { Model model = frame.mmset.getModel(modelIndex); int nChains = model.getChainCount(); Vector infoChains = new Vector(); @@ -794,52 +799,182 @@ Hashtable arrayName = new Hashtable(); for (int igroup = 0; igroup < nGroups; igroup++) { Group group = chain.getGroup(igroup); + if (! bs.get(group.firstAtomIndex)) + continue; Hashtable infoGroup = new Hashtable(); + infoGroup.put("groupIndex", new Integer(igroup)); infoGroup.put("groupID", new Short(group.getGroupID())); infoGroup.put("seqCode", group.getSeqcodeString()); infoGroup.put("_apt1", new Integer(group.firstAtomIndex)); infoGroup.put("_apt2", new Integer(group.lastAtomIndex)); infoGroup.put("atomInfo1", getAtomInfo(group.firstAtomIndex)); infoGroup.put("atomInfo2", getAtomInfo(group.lastAtomIndex)); - infoGroup.put("shapeVisibility", new Integer(frame.atoms[group.firstAtomIndex].shapeVisibilityFlags)); + infoGroup.put("visibilityFlags", new Integer(group.shapeVisibilityFlags)); infoChain.add(infoGroup); } - arrayName.put("residues",infoChain); - infoChains.add(arrayName); + if (! infoChain.isEmpty()) { + arrayName.put("residues",infoChain); + infoChains.add(arrayName); + } } return infoChains; } - Hashtable getPolymerInfoAll() { + Hashtable getAllPolymerInfo(BitSet bs) { Hashtable finalInfo = new Hashtable(); - Hashtable modelInfo; Vector modelVector = new Vector(); - Vector info; int modelCount = getModelCount(); for (int i = 0; i < modelCount; ++i) { - modelInfo = new Hashtable(); - info = new Vector(); + Hashtable modelInfo = new Hashtable(); + Vector info = new Vector(); int polymerCount = getPolymerCountInModel(i); - for (int ip = 0; ip < polymerCount; ip++) - info.add(getPolymerInfo(i, ip)); - modelInfo.put("polymers",info); - modelVector.add(modelInfo); + for (int ip = 0; ip < polymerCount; ip++) { + Hashtable polyInfo = getPolymerInfo(i, ip, bs); + if (! polyInfo.isEmpty()) + info.add(polyInfo); + } + if (info.size() > 0) { + modelInfo.put("modelIndex",new Integer(i)); + modelInfo.put("polymers",info); + modelVector.add(modelInfo); + } } finalInfo.put("models",modelVector); return finalInfo; } - Hashtable getPolymerInfo(int iModel, int iPolymer) { + Hashtable getPolymerInfo(int iModel, int iPolymer, BitSet bs) { Hashtable returnInfo = new Hashtable(); Vector info = new Vector(); Polymer polymer = frame.mmset.getModel(iModel).getPolymer(iPolymer) ; int monomerCount = polymer.monomerCount; - for(int i = 0; i < monomerCount; i++) - info.add(polymer.monomers[i].getMyInfo()); - returnInfo.put("monomers",info); + for(int i = 0; i < monomerCount; i++) { + if (bs.get(polymer.monomers[i].getLeadAtomIndex())) { + Hashtable monomerInfo = polymer.monomers[i].getMyInfo(); + monomerInfo.put("monomerIndex",new Integer(i)); + info.add(monomerInfo); + } + } + if (info.size() > 0) + returnInfo.put("monomers",info); return returnInfo; } + Hashtable getAllStateInfo(BitSet bs) { + + /* + * The idea here is to create a running list that only shows + * differences between atoms and bonds, taken sequentially. + * This isn't perfect -- but it might be OK. + * + * The visibility flags give detailed information + * + */ + Hashtable stateInfo = new Hashtable(); + Vector V = new Vector(); + int atomCount = viewer.getAtomCount(); + short colix = -1; + short lastColix = -1; + int shapeVisibilityFlags = 0; + int lastVisibilityFlags = -1; + int mad = 0; + int lastMad = -1; + int defaultMadCode = viewer.getMadAtom(); + boolean isFirst = true; + Hashtable elementInfo = new Hashtable(); + for (int i = 0; i < atomCount; i++) { + if (! bs.get(i)) + continue; + boolean isChanged = false; + Hashtable info = new Hashtable(); + Atom atom = frame.getAtomAt(i); + String element = getElementSymbol(i); + if (!elementInfo.containsKey(element)) { + Hashtable Htable = new Hashtable(); + Htable.put("mad","" + atom.convertEncodedMad(defaultMadCode)); + elementInfo.put(element, Htable); + } + Hashtable thisElementInfo = (Hashtable)elementInfo.get(element); + String value; + String str; + + str = "" + atom.madAtom; + value = (String)thisElementInfo.get("mad"); + if (! str.equals(value)) { + thisElementInfo.put("mad",str); + info.put("mad", new Integer(atom.madAtom)); + isChanged = true; + } + + if (atom.colixAtom >= 0) { + str = "" + atom.colixAtom; + value = (String)thisElementInfo.get("colix"); + if (! str.equals(value)) { + thisElementInfo.put("colix",str); + info.put("colix", new Integer(atom.colixAtom)); + String strColor = viewer.getHexColorFromIndex(atom.colixAtom); + if(strColor != null) + info.put("color", strColor); + isChanged = true; + } + } + + shapeVisibilityFlags = atom.shapeVisibilityFlags; + if (isFirst || shapeVisibilityFlags != lastVisibilityFlags) + info.put("visibilityFlags", new Integer(shapeVisibilityFlags)); + + if (!info.isEmpty()) { + info.put("element", element); + info.put("_ipt", new Integer(i)); + V.add(info); + } + + lastVisibilityFlags = shapeVisibilityFlags; + isFirst = false; + if (isChanged) { + elementInfo.put(element, thisElementInfo); + } + } + stateInfo.put("atomState",V); + + isFirst = true; + V = new Vector(); + int bondCount = viewer.getBondCount(); + for (int i = 0; i < bondCount; i++) { + if (! bs.get(frame.getBondAt(i).getAtom1().atomIndex) + || bs.get(frame.getBondAt(i).getAtom2().atomIndex)) + continue; + Bond bond = frame.getBondAt(i); + Hashtable info = new Hashtable(); + mad = bond.mad; + if (isFirst || mad != lastMad) + info.put("mad", new Integer(mad)); + colix = bond.colix; + if (isFirst || colix >= 0 && colix != lastColix) { + info.put("colix", new Integer(bond.colix)); + String strColor = viewer.getHexColorFromIndex(bond.colix); + if(strColor != null) + info.put("color", strColor); + } + if (!info.isEmpty()) { + info.put("_ipt", new Integer(i)); + V.add(info); + } + + //not taking into account possible connection changes here + + lastMad = mad; + lastColix = colix; + isFirst = false; + } + stateInfo.put("bondState", V); + stateInfo.put("shapeInfo", getShapeInfo()); + stateInfo.put("modelInfo", getModelInfo()); + stateInfo.put("animationInfo", viewer.getAnimationInfo()); + stateInfo.put("polymerInfo",getAllPolymerInfo(bs)); + return stateInfo; + } + Hashtable getBoundBoxInfo() { Hashtable info = new Hashtable(); info.put("center", getBoundBoxCenter()); Modified: trunk/Jmol/src/org/jmol/viewer/Monomer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Monomer.java 2006-03-05 18:22:08 UTC (rev 4545) +++ trunk/Jmol/src/org/jmol/viewer/Monomer.java 2006-03-06 03:51:42 UTC (rev 4546) @@ -213,8 +213,10 @@ Hashtable getMyInfo() { Hashtable info = new Hashtable(); info.put("seqcode",getSeqcodeString()); - info.put("firstAtom", chain.frame.atoms[firstAtomIndex].getInfo()); - info.put("lastAtom", chain.frame.atoms[lastAtomIndex].getInfo()); + info.put("atomInfo1", chain.frame.atoms[firstAtomIndex].getInfo()); + info.put("atomInfo2", chain.frame.atoms[lastAtomIndex].getInfo()); + info.put("_apt1", new Integer(firstAtomIndex)); + info.put("_apt2", new Integer(lastAtomIndex)); info.put("shapeVisibilityFlags", new Integer(shapeVisibilityFlags)); ProteinStructure structure = getProteinStructure(); if(structure != null)info.put("structure", getStructureTypeName(structure.type)); Modified: trunk/Jmol/src/org/jmol/viewer/PropertyManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/PropertyManager.java 2006-03-05 18:22:08 UTC (rev 4545) +++ trunk/Jmol/src/org/jmol/viewer/PropertyManager.java 2006-03-06 03:51:42 UTC (rev 4546) @@ -107,7 +107,7 @@ // atom-bond stuff - if(! iHaveParameter) myParam = "all"; + if(! iHaveParameter) myParam = "visible"; if(infoType.equalsIgnoreCase("atomList")) return viewer.getAtomBitSetVector(myParam); @@ -116,14 +116,17 @@ return viewer.getAllAtomInfo(myParam); if(infoType.equalsIgnoreCase("bondInfo")) - return viewer.getBondDetail(myParam); + return viewer.getAllBondInfo(myParam); if(infoType.equalsIgnoreCase("polymerInfo")) - return viewer.getPolymerInfo(); + return viewer.getAllPolymerInfo(myParam); if(infoType.equalsIgnoreCase("chainInfo")) - return viewer.getChainInfo(); + return viewer.getAllChainInfo(myParam); + if(infoType.equalsIgnoreCase("stateInfo")) + return viewer.getAllStateInfo(myParam); + if(infoType.equalsIgnoreCase("extractModel")) return viewer.getModelExtract(myParam); @@ -143,15 +146,13 @@ return "getProperty ERROR\n"+ infoType +"?\nOptions include\n" + "\n getProperty(\"appletInfo\")" - + "\n getProperty(\"fileName\")" + + "\n\n getProperty(\"fileName\")" + "\n getProperty(\"fileHeader\")" + "\n getProperty(\"fileContents\")" + "\n getProperty(\"fileContents\",\"<pathname>\")" - + "\n getProperty(\"animationInfo\")" - + "\n\n getProperty(\"modelInfo\")" - + "\n\n getProperty(\"polymerInfo\")" - + "\n getProperty(\"chainInfo\")" + + "\n\n getProperty(\"animationInfo\")" + + "\n getProperty(\"modelInfo\")" + "\n getProperty(\"shapeInfo\")" + "\n\n getProperty(\"boundboxInfo\")" @@ -160,12 +161,15 @@ + "\n getProperty(\"transformInfo\")" + "\n getProperty(\"zoomInfo\")" - + "\n getProperty(\"atomList\",\"<atom selection>\")" + + "\n\n getProperty(\"atomList\",\"<atom selection>\")" + "\n getProperty(\"atomInfo\",\"<atom selection>\")" + "\n getProperty(\"bondInfo\",\"<atom selection>\")" + + "\n getProperty(\"polymerInfo\",\"<atom selection>\")" + + "\n getProperty(\"chainInfo\",\"<atom selection>\")" + + "\n getProperty(\"stateInfo\",\"<atom selection>\")" + "\n getProperty(\"extractModel\",\"<atom selection>\")" - + "\n getProperty(\"jmolStatus\",\"statusNameList\")" + + "\n\n getProperty(\"jmolStatus\",\"statusNameList\")" + "\n getProperty(\"jmolViewer\")" + "\n getProperty(\"messageQueue\")" + ""; Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-05 18:22:08 UTC (rev 4545) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-06 03:51:42 UTC (rev 4546) @@ -1331,10 +1331,6 @@ return modelManager.getModelInfoAsString(); } - public Hashtable getPolymerInfo() { - return modelManager.getPolymerInfoAll(); - } - public Properties getModelSetProperties() { return modelManager.getModelSetProperties(); } @@ -1526,10 +1522,6 @@ return modelManager.getModelInfo(); } - public Hashtable getChainInfo() { - return modelManager.getChainInfo(); - } - public Hashtable getShapeInfo() { return modelManager.getShapeInfo(); } @@ -1539,11 +1531,26 @@ return modelManager.getAllAtomInfo(bs); } - Vector getBondDetail(String atomExpression) { + Vector getAllBondInfo(String atomExpression) { BitSet bs = getAtomBitSet(atomExpression); - return modelManager.getBondInfoFromBitSet(bs); + return modelManager.getAllBondInfo(bs); } + public Hashtable getAllChainInfo(String atomExpression) { + BitSet bs = getAtomBitSet(atomExpression); + return modelManager.getAllChainInfo(bs); + } + + public Hashtable getAllPolymerInfo(String atomExpression) { + BitSet bs = getAtomBitSet(atomExpression); + return modelManager.getAllPolymerInfo(bs); + } + + public Hashtable getAllStateInfo(String atomExpression) { + BitSet bs = getAtomBitSet(atomExpression); + return modelManager.getAllStateInfo(bs); + } + /***************************************************************************** * delegated to MeasurementManager ****************************************************************************/ @@ -2907,7 +2914,7 @@ String getModelExtract(String atomExpression) { BitSet bs = selectionManager.getAtomBitSet(atomExpression); return fileManager.getFullPathName() + "\nEXTRACT: " + bs + "\nJmol\n" - + modelManager.getModelExtractFromBitSet(bs); + + modelManager.getModelExtract(bs); } String simpleReplace(String str, String strFrom, String strTo) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2006-03-06 12:41:17
|
Revision: 4547 Author: hansonr Date: 2006-03-06 04:41:07 -0800 (Mon, 06 Mar 2006) ViewCVS: http://svn.sourceforge.net/jmol/?rev=4547&view=rev Log Message: ----------- adds single-character %m amino acid label identifier format see http://www.biochem.ucl.ac.uk/bsm/dbbrowser/jj/aacode.html Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Atom.java trunk/Jmol/src/org/jmol/viewer/Group.java trunk/Jmol/src/org/jmol/viewer/JmolConstants.java Modified: trunk/Jmol/src/org/jmol/viewer/Atom.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Atom.java 2006-03-06 03:51:42 UTC (rev 4546) +++ trunk/Jmol/src/org/jmol/viewer/Atom.java 2006-03-06 12:41:07 UTC (rev 4547) @@ -410,6 +410,12 @@ return group.getGroup3(); } + String getGroup1() { + if (group == null) + return null; + return group.getGroup1(); + } + boolean isGroup3(String group3) { if (group == null) return false; @@ -928,7 +934,7 @@ strT = "" + getModelTagNumber(); break; case 'm': - strT = "<X>"; + strT = getGroup1(); break; case 'n': strT = getGroup3(); Modified: trunk/Jmol/src/org/jmol/viewer/Group.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Group.java 2006-03-06 03:51:42 UTC (rev 4546) +++ trunk/Jmol/src/org/jmol/viewer/Group.java 2006-03-06 12:41:07 UTC (rev 4547) @@ -66,6 +66,12 @@ return group3Names[groupID]; } + final String getGroup1() { + if (groupID >= JmolConstants.predefinedGroup1Names.length) + return "?"; + return JmolConstants.predefinedGroup1Names[groupID]; + } + final int getSeqcode() { return seqcode; } @@ -140,12 +146,14 @@ static String[] group3Names = new String[128]; static short group3NameCount = 0; - + static { - for (int i = 0; i < JmolConstants.predefinedGroup3Names.length; ++i) + int i; + for (i = 0; i < JmolConstants.predefinedGroup3Names.length; ++i) { addGroup3Name(JmolConstants.predefinedGroup3Names[i]); + } } - + synchronized static short addGroup3Name(String group3) { if (group3NameCount == group3Names.length) group3Names = Util.doubleLength(group3Names); Modified: trunk/Jmol/src/org/jmol/viewer/JmolConstants.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/JmolConstants.java 2006-03-06 03:51:42 UTC (rev 4546) +++ trunk/Jmol/src/org/jmol/viewer/JmolConstants.java 2006-03-06 12:41:07 UTC (rev 4547) @@ -2000,6 +2000,44 @@ }; + public final static String[] predefinedGroup1Names = { + /* rmh + * + * G Glycine Gly P Proline Pro + * A Alanine Ala V Valine Val + * L Leucine Leu I Isoleucine Ile + * M Methionine Met C Cysteine Cys + * F Phenylalanine Phe Y Tyrosine Tyr + * W Tryptophan Trp H Histidine His + * K Lysine Lys R Arginine Arg + * Q Glutamine Gln N Asparagine Asn + * E Glutamic Acid Glu D Aspartic Acid Asp + * S Serine Ser T Threonine Thr + */ + "", // 0 this is the null group + + "A", // 1 + "R", + "N", + "D", + "C", + "Q", + "E", + "G", + "H", + "I", + "L", + "K", + "M", + "F", + "P", // 15 Proline + "S", + "T", + "W", + "Y", + "V", + }; + //////////////////////////////////////////////////////////////// // predefined sets //////////////////////////////////////////////////////////////// This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2006-03-07 06:50:37
|
Revision: 4551 Author: hansonr Date: 2006-03-06 22:50:31 -0800 (Mon, 06 Mar 2006) ViewCVS: http://svn.sourceforge.net/jmol/?rev=4551&view=rev Log Message: ----------- adds monitor ALL (atom expr) (atom expr).... very simple! Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Measures.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-07 05:33:22 UTC (rev 4550) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-07 06:50:31 UTC (rev 4551) @@ -30,6 +30,7 @@ import java.io.*; import java.awt.Color; import java.util.BitSet; +import java.util.Vector; import java.util.Hashtable; import javax.vecmath.AxisAngle4f; import javax.vecmath.Matrix3f; @@ -1768,13 +1769,21 @@ */ monitorArgs[0] = 0; int argCount = statementLength - 1; - int atomIndex = 0; + int atomIndex = -1; int atomNumber = 0; + boolean isAll = false; + Vector monitorExpressions = new Vector(); + BitSet bs= new BitSet(); + //int numAtoms = viewer.getAtomCount(); for (int i = 0; i < argCount; ++i) { Token token = statement[i + 1]; //System.out.println(i+" "+token.toString()); switch (token.tok) { + case Token.all: + atomIndex = -1; + isAll = true; + break; case Token.integer: atomNumber = token.intValue; atomIndex = viewer.getAtomIndexFromAtomNumber(atomNumber); @@ -1782,22 +1791,32 @@ case Token.expressionBegin: //in principle, this could be an atom set, in which case we would //be calculating a centroid. UNHEARD-OF-COOL! - atomIndex = firstAtomOf(expression(statement, i + 1)); + bs = expression(statement, i + 1); + atomIndex = firstAtomOf(bs); //System.out.println("expressionBegin "+atomIndex); i = endOfExpression - 1; break; default: integerExpected(); } - - if (atomIndex == -1) + System.out.println("eval monitor"+isAll + " " +atomIndex + " " + bs); + if (atomIndex == -1 && ! isAll) badAtomNumber(); if (monitorArgs[0] == 4) badArgumentCount(); - System.out.println("monitor() adding " + atomIndex); - monitorArgs[++monitorArgs[0]] = atomIndex; + //System.out.println("monitor() adding " + atomIndex); + if (isAll) { + if (atomIndex >= 0) + monitorExpressions.add(bs); + }else { + monitorArgs[++monitorArgs[0]] = atomIndex; + } } - viewer.toggleMeasurement(monitorArgs); + if (isAll) { + viewer.toggleMeasurement(monitorExpressions); + } else { + viewer.toggleMeasurement(monitorArgs); + } } void refresh() { Modified: trunk/Jmol/src/org/jmol/viewer/Measures.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Measures.java 2006-03-07 05:33:22 UTC (rev 4550) +++ trunk/Jmol/src/org/jmol/viewer/Measures.java 2006-03-07 06:50:31 UTC (rev 4551) @@ -27,6 +27,7 @@ import org.jmol.g3d.*; import java.util.BitSet; +import java.util.Vector; class Measures extends Shape { @@ -108,6 +109,51 @@ define(atomCountPlusIndices); } + void toggle(Vector monitorExpressions) { + /* + * + *(1) run through first expression, choosing model + *(2) for each item of next bs, iterate over next bitset, etc. + *(3) for each last bitset, trigger toggle(int[]) + * + *simple! + * + */ + + int nPoints = monitorExpressions.size(); + if (nPoints == 0) + return; + int[] atomCountPlusIndices = new int[5]; + atomCountPlusIndices[0] = nPoints; + nextMeasure(0, nPoints, monitorExpressions, atomCountPlusIndices, 0); + } + + void nextMeasure(int thispt, int nPoints, Vector monitorExpressions, + int[] atomCountPlusIndices, int thisModel) { + BitSet bs = (BitSet)monitorExpressions.get(thispt); + int i = -1; + //System.out.println("nextMeasure"+thispt+" acpi:"+atomCountPlusIndices); + //System.out.println("bs "+ bs); + for (int iBit = bs.cardinality(); --iBit >= 0;) { + i = bs.nextSetBit(i + 1); + int modelIndex = frame.atoms[i].getModelIndex(); + //System.out.println("nextMeasure i"+i+" modelIndex:"+modelIndex); + if (thispt == 0) { + thisModel = modelIndex; + } else if (thisModel != modelIndex) { + continue; + } + atomCountPlusIndices[thispt + 1] = i; + if (thispt == nPoints - 1) { + //System.out.println("toggling"); + toggle(atomCountPlusIndices); + } else { + nextMeasure(thispt+1, nPoints, monitorExpressions, + atomCountPlusIndices, thisModel); + } + } + } + void pending(int[] countPlusIndices) { pendingMeasurement.setCountPlusIndices(countPlusIndices); if (pendingMeasurement.count > 1) @@ -134,7 +180,9 @@ else if ("delete".equals(propertyName)) { delete(value); } else if ("toggle".equals(propertyName)) - { toggle((int[])value); } + { toggle((int[])value); } + else if ("toggleVector".equals(propertyName)) + { toggle((Vector)value); } else if ("pending".equals(propertyName)) { pending((int[])value); } else if ("clear".equals(propertyName)) Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-07 05:33:22 UTC (rev 4550) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-07 06:50:31 UTC (rev 4551) @@ -1598,6 +1598,11 @@ atomCountPlusIndices); } + void toggleMeasurement(Vector monitorExpressions) { + setShapeProperty(JmolConstants.SHAPE_MEASURES, "toggleVector", + monitorExpressions); + } + void toggleMeasurement(int[] atomCountPlusIndices) { setShapeProperty(JmolConstants.SHAPE_MEASURES, "toggle", atomCountPlusIndices); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2006-03-08 03:16:42
|
Revision: 4555 Author: hansonr Date: 2006-03-07 19:16:33 -0800 (Tue, 07 Mar 2006) ViewCVS: http://svn.sourceforge.net/jmol/?rev=4555&view=rev Log Message: ----------- (1) adding range to monitor/measure command: monitor <min_dist> <max_dist> ALL (atom set) (atom set).... This allows for better control over measurements. parameters are optional, but the ALL keyword is necessary if the distances are omitted in order to designate that all occurances within the atom sets are depicted. Examples: monitor 1.2 2.0 (carbon) (oxygen) monitor ALL (atomno=1) (atomno=2) Note that unless otherwise specified, all matching criteria in ALL frames are generated, thus allowing for "animated" measures. (2) added "nm" and "pm" to list for set measurement Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Frame.java trunk/Jmol/src/org/jmol/viewer/Measurement.java trunk/Jmol/src/org/jmol/viewer/Measures.java trunk/Jmol/src/org/jmol/viewer/MeasuresRenderer.java trunk/Jmol/src/org/jmol/viewer/PropertyManager.java trunk/Jmol/src/org/jmol/viewer/StyleManager.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-07 20:19:30 UTC (rev 4554) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-08 03:16:33 UTC (rev 4555) @@ -1743,9 +1743,10 @@ runScript(script); } - int[] monitorArgs = new int[5]; void monitor() throws ScriptException { + int[] monitorArgs = new int[5]; + float[] rangeMinMax = new float[2]; if (statementLength == 1) { viewer.setShowMeasurements(true); return; @@ -1759,20 +1760,16 @@ booleanExpected(); return; } - /* - if (statementLength < 3 || statementLength > 5) - badArgumentCount(); - for (int i = 1; i < statementLength; ++i) { - if (statement[i].tok != Token.integer) - integerExpected(); - } - */ monitorArgs[0] = 0; int argCount = statementLength - 1; int atomIndex = -1; int atomNumber = 0; + int ptFloat = -1; + rangeMinMax[0] = -1.0F; + rangeMinMax[1] = -1.0F; boolean isAll = false; Vector monitorExpressions = new Vector(); + BitSet bs= new BitSet(); //int numAtoms = viewer.getAtomCount(); @@ -1784,9 +1781,16 @@ atomIndex = -1; isAll = true; break; + case Token.decimal: + isAll = true; + ptFloat = (ptFloat + 1) % 2; + rangeMinMax[ptFloat] = ((Float)token.value).floatValue(); + break; case Token.integer: atomNumber = token.intValue; atomIndex = viewer.getAtomIndexFromAtomNumber(atomNumber); + ptFloat = (ptFloat + 1) % 2; + rangeMinMax[ptFloat] = atomNumber; break; case Token.expressionBegin: //in principle, this could be an atom set, in which case we would @@ -1799,7 +1803,7 @@ default: integerExpected(); } - System.out.println("eval monitor"+isAll + " " +atomIndex + " " + bs); + //System.out.println("eval monitor"+isAll + " " +atomIndex + " " + bs); if (atomIndex == -1 && ! isAll) badAtomNumber(); if (monitorArgs[0] == 4) @@ -1813,7 +1817,11 @@ } } if (isAll) { - viewer.toggleMeasurement(monitorExpressions); + if (rangeMinMax[1] < rangeMinMax[0]){ + rangeMinMax[1] = rangeMinMax[0]; + rangeMinMax[0] = (rangeMinMax[1] < 0.0F ? -1.0F : 0.0F); + } + viewer.defineMeasurement(monitorExpressions, rangeMinMax); } else { viewer.toggleMeasurement(monitorArgs); } Modified: trunk/Jmol/src/org/jmol/viewer/Frame.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Frame.java 2006-03-07 20:19:30 UTC (rev 4554) +++ trunk/Jmol/src/org/jmol/viewer/Frame.java 2006-03-08 03:16:33 UTC (rev 4555) @@ -1711,6 +1711,42 @@ // measurements //////////////////////////////////////////////////////////////// + + float getMeasurement(int[] countPlusIndices) { + float value = -1.0F; + if (countPlusIndices == null) + return value; + int count = countPlusIndices[0]; + if (count < 2) + return value; + for (int i = count; --i >= 0; ) + if (countPlusIndices[i+1] < 0) { + return value; + } + switch (count) { + case 2: + value = getDistance(countPlusIndices[1], + countPlusIndices[2]); + break; + case 3: + value = getAngle(countPlusIndices[1], + countPlusIndices[2], + countPlusIndices[3]); + break; + case 4: + value = getTorsion(countPlusIndices[1], + countPlusIndices[2], + countPlusIndices[3], + countPlusIndices[4]); + break; + default: + System.out.println("Invalid count in measurement calculation:" + count); + throw new IndexOutOfBoundsException(); + } + + return value; + } + float getDistance(int atomIndexA, int atomIndexB) { return atoms[atomIndexA].point3f.distance(atoms[atomIndexB].point3f); } Modified: trunk/Jmol/src/org/jmol/viewer/Measurement.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Measurement.java 2006-03-07 20:19:30 UTC (rev 4554) +++ trunk/Jmol/src/org/jmol/viewer/Measurement.java 2006-03-08 03:16:33 UTC (rev 4555) @@ -34,11 +34,22 @@ int count; int[] countPlusIndices; String strMeasurement; + float value; AxisAngle4f aa; Point3f pointArc; + + Measurement(Frame frame, int[] atomCountPlusIndices) { + setInfo(frame, atomCountPlusIndices, -1.0F); + } + + Measurement(Frame frame, int[] atomCountPlusIndices, float value) { + setInfo(frame, atomCountPlusIndices, value); + } + + void setInfo(Frame frame, int[] atomCountPlusIndices, float value) { this.frame = frame; if (atomCountPlusIndices == null) count = 0; @@ -47,17 +58,18 @@ this.countPlusIndices = new int[count + 1]; System.arraycopy(atomCountPlusIndices, 0, countPlusIndices, 0, count+1); } + if (countPlusIndices != null && value < 0) + value = frame.getMeasurement(countPlusIndices); + this.value = value; formatMeasurement(); } void formatMeasurement() { - for (int i = count; --i >= 0; ) - if (countPlusIndices[i+1] < 0) { - strMeasurement = null; - return; - } - if (count < 2) + strMeasurement = null; + if (value < 0) { + strMeasurement = null; return; + } switch (count) { case 2: float distance = frame.getDistance(countPlusIndices[1], Modified: trunk/Jmol/src/org/jmol/viewer/Measures.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Measures.java 2006-03-07 20:19:30 UTC (rev 4554) +++ trunk/Jmol/src/org/jmol/viewer/Measures.java 2006-03-08 03:16:33 UTC (rev 4555) @@ -28,6 +28,7 @@ import java.util.BitSet; import java.util.Vector; +import java.util.Hashtable; class Measures extends Shape { @@ -40,7 +41,8 @@ short colix; // default to none in order to contrast with background boolean showMeasurementNumbers = true; Font3D font3d; - + float[] rangeMinMax = {-1.0F, -1.0F}; + void initShape() { pendingMeasurement = new PendingMeasurement(frame); font3d = g3d.getFont3D(JmolConstants.MEASURE_DEFAULT_FONTSIZE); @@ -64,7 +66,15 @@ void define(int[] atomCountPlusIndices) { if (isDefined(atomCountPlusIndices)) return; - Measurement measureNew = new Measurement(frame, atomCountPlusIndices); + float value = -1.0F; + if (rangeMinMax[0] >= 0) { + value = frame.getMeasurement(atomCountPlusIndices); + //System.out.println("value,maxmin "+value+" "+rangeMinMax[0]+" "+rangeMinMax[1]); + if (value < rangeMinMax[0] || value > rangeMinMax[1]) + return; + } + //System.out.println("define " + rangeMinMax[0] + "-" + rangeMinMax[1] + ";" + value); + Measurement measureNew = new Measurement(frame, atomCountPlusIndices, value); if (measurementCount == measurements.length) { measurements =(Measurement[])Util.setLength(measurements, measurementCount + @@ -102,14 +112,21 @@ return false; } + void setRange(float[] rangeMinMax) { + this.rangeMinMax[0] = rangeMinMax[0]; + this.rangeMinMax[1] = rangeMinMax[1]; + } + void toggle(int[] atomCountPlusIndices) { if (isDefined(atomCountPlusIndices)) delete(atomCountPlusIndices); - else + else { + rangeMinMax[0] = -1; define(atomCountPlusIndices); + } } - void toggle(Vector monitorExpressions) { + void define(Vector monitorExpressions) { /* * *(1) run through first expression, choosing model @@ -121,7 +138,7 @@ */ int nPoints = monitorExpressions.size(); - if (nPoints == 0) + if (nPoints < 2) return; int[] atomCountPlusIndices = new int[5]; atomCountPlusIndices[0] = nPoints; @@ -136,6 +153,8 @@ //System.out.println("bs "+ bs); for (int iBit = bs.cardinality(); --iBit >= 0;) { i = bs.nextSetBit(i + 1); + if (thispt > 0 && i == atomCountPlusIndices[thispt]) + continue; int modelIndex = frame.atoms[i].getModelIndex(); //System.out.println("nextMeasure i"+i+" modelIndex:"+modelIndex); if (thispt == 0) { @@ -145,8 +164,8 @@ } atomCountPlusIndices[thispt + 1] = i; if (thispt == nPoints - 1) { - //System.out.println("toggling"); - toggle(atomCountPlusIndices); + if (! isDefined(atomCountPlusIndices)) + define(atomCountPlusIndices); } else { nextMeasure(thispt+1, nPoints, monitorExpressions, atomCountPlusIndices, thisModel); @@ -181,8 +200,10 @@ { delete(value); } else if ("toggle".equals(propertyName)) { toggle((int[])value); } - else if ("toggleVector".equals(propertyName)) - { toggle((Vector)value); } + else if ("defineVector".equals(propertyName)) + { define((Vector)value); } + else if ("setRange".equals(propertyName)) + { setRange((float[])value); } else if ("pending".equals(propertyName)) { pending((int[])value); } else if ("clear".equals(propertyName)) @@ -208,9 +229,40 @@ return index < measurementCount ? measurements[index].strMeasurement : null; } + if ("info".equals(property)) { + return getAllInfo(); + } return null; } + Vector getAllInfo() { + Vector info = new Vector(); + for (int i = 0; i< measurementCount; i++) { + info.add(getInfo(i)); + } + return info; + } + + Hashtable getInfo(int index) { + Hashtable info = new Hashtable(); + info.put("index",new Integer(index)); + info.put("strMeasurement",measurements[index].strMeasurement); + int count = measurements[index].count; + info.put("count",new Integer(count)); + info.put("value",new Float(measurements[index].value)); + Vector atomsInfo = new Vector(); + for (int i = 0; i < count; i++) { + Hashtable atomInfo = new Hashtable(); + Atom atom = frame.atoms[measurements[index].countPlusIndices[i + 1]]; + atomInfo.put("_ipt", new Integer(atom.atomIndex)); + atomInfo.put("atomno", new Integer(atom.getAtomNumber())); + atomInfo.put("info", atom.getInfo()); + atomsInfo.add(atomInfo); + } + info.put("atoms", atomsInfo); + return info; + } + void reformatDistances() { for (int i = measurementCount; --i >= 0; ) measurements[i].reformatDistanceIfSelected(); Modified: trunk/Jmol/src/org/jmol/viewer/MeasuresRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/MeasuresRenderer.java 2006-03-07 20:19:30 UTC (rev 4554) +++ trunk/Jmol/src/org/jmol/viewer/MeasuresRenderer.java 2006-03-08 03:16:33 UTC (rev 4555) @@ -49,9 +49,12 @@ measurementMad = measures.mad; font3d = measures.font3d; showMeasurementNumbers = measures.showMeasurementNumbers; + System.out.println(measures.measurementCount); - for (int i = measures.measurementCount; --i >= 0; ) + for (int i = measures.measurementCount; --i >= 0; ) { renderMeasurement(measures.measurements[i], colix); + + } renderPendingMeasurement(measures.pendingMeasurement); } Modified: trunk/Jmol/src/org/jmol/viewer/PropertyManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/PropertyManager.java 2006-03-07 20:19:30 UTC (rev 4554) +++ trunk/Jmol/src/org/jmol/viewer/PropertyManager.java 2006-03-08 03:16:33 UTC (rev 4555) @@ -135,6 +135,9 @@ if(infoType.equalsIgnoreCase("shapeInfo")) return viewer.getShapeInfo(); + if(infoType.equalsIgnoreCase("measurementInfo")) + return viewer.getMeasurementInfo(); + // public objects if(infoType.equalsIgnoreCase("jmolViewer")) @@ -154,6 +157,7 @@ + "\n\n getProperty(\"animationInfo\")" + "\n getProperty(\"modelInfo\")" + "\n getProperty(\"shapeInfo\")" + + "\n getProperty(\"measurementInfo\")" + "\n\n getProperty(\"boundboxInfo\")" + "\n getProperty(\"centerInfo\")" Modified: trunk/Jmol/src/org/jmol/viewer/StyleManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/StyleManager.java 2006-03-07 20:19:30 UTC (rev 4554) +++ trunk/Jmol/src/org/jmol/viewer/StyleManager.java 2006-03-08 03:16:33 UTC (rev 4555) @@ -87,9 +87,11 @@ boolean setMeasureDistanceUnits(String units) { if (units.equalsIgnoreCase("angstroms")) measureDistanceUnits = "angstroms"; - else if (units.equalsIgnoreCase("nanometers")) + else if (units.equalsIgnoreCase("nanometers") || + units.equalsIgnoreCase("nm")) measureDistanceUnits = "nanometers"; - else if (units.equalsIgnoreCase("picometers")) + else if (units.equalsIgnoreCase("picometers") || + units.equalsIgnoreCase("pm")) measureDistanceUnits = "picometers"; else return false; Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-07 20:19:30 UTC (rev 4554) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-08 03:16:33 UTC (rev 4555) @@ -1572,6 +1572,10 @@ return str; } + Vector getMeasurementInfo() { + return (Vector)getShapeProperty(JmolConstants.SHAPE_MEASURES, "info"); + } + public int[] getMeasurementCountPlusIndices(int i) { int[] List = (int[]) getShapeProperty(JmolConstants.SHAPE_MEASURES, "countPlusIndices", i); @@ -1589,6 +1593,13 @@ atomCountPlusIndices); } + void defineMeasurement(Vector monitorExpressions, float[] rangeMinMax) { + setShapeProperty(JmolConstants.SHAPE_MEASURES, "setRange", + rangeMinMax); + setShapeProperty(JmolConstants.SHAPE_MEASURES, "defineVector", + monitorExpressions); + } + public void deleteMeasurement(int i) { setShapeProperty(JmolConstants.SHAPE_MEASURES, "delete", new Integer(i)); } @@ -1598,11 +1609,6 @@ atomCountPlusIndices); } - void toggleMeasurement(Vector monitorExpressions) { - setShapeProperty(JmolConstants.SHAPE_MEASURES, "toggleVector", - monitorExpressions); - } - void toggleMeasurement(int[] atomCountPlusIndices) { setShapeProperty(JmolConstants.SHAPE_MEASURES, "toggle", atomCountPlusIndices); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2006-03-10 18:30:28
|
Revision: 4563 Author: hansonr Date: 2006-03-10 10:29:46 -0800 (Fri, 10 Mar 2006) ViewCVS: http://svn.sourceforge.net/jmol/?rev=4563&view=rev Log Message: ----------- adjustments to new "draw" command oh, and I see I didn't commit Draw or DrawRenderer last time. Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Mesh.java Added Paths: ----------- trunk/Jmol/src/org/jmol/viewer/Draw.java trunk/Jmol/src/org/jmol/viewer/DrawRenderer.java Added: trunk/Jmol/src/org/jmol/viewer/Draw.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Draw.java (rev 0) +++ trunk/Jmol/src/org/jmol/viewer/Draw.java 2006-03-10 18:29:46 UTC (rev 4563) @@ -0,0 +1,138 @@ +/* $RCSfile$ + * $Author: hansonr $ + * $Date: 2006-02-25 17:19:14 -0600 (Sat, 25 Feb 2006) $ + * $Revision: 4529 $ + * + * Copyright (C) 2002-2005 The Jmol Development Team + * + * Contact: jmo...@li... + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +package org.jmol.viewer; + +import java.util.BitSet; +import javax.vecmath.Point3f; +import javax.vecmath.Vector3f; + +class Draw extends MeshCollection { + + Point3f[] ptList = new Point3f[128]; + Point3f xyz = new Point3f(); + int ipt; + int npoints = -1; + float newScale; + + void setProperty(String propertyName, Object value, BitSet bs) { + System.out.println("draw "+propertyName+" "+value); + + if ("points" == propertyName) { + ipt = npoints = 0; + newScale = ((Integer)value).floatValue()/100; + return; + } + + if ("scale" == propertyName) { + newScale = ((Integer)value).floatValue()/100; + if (newScale == 0) + return; + if (currentMesh != null) { + //no points in this script statement + scaleDrawing(); + currentMesh.initialize(); + } + return; + } + + if ("coord" == propertyName) { + float x = ((Float)value).floatValue(); + if (ipt == 0) { + xyz.x = x; + } else if (ipt == 1) { + xyz.y = x; + } else if (ipt == 2) { + xyz.z = x; + ptList[npoints++] = new Point3f(xyz); + } + ipt = (ipt + 1) % 3; + return; + } + if ("atomSet" == propertyName) { + ptList[npoints++] = new Point3f((Point3f)value); + return; + } + if ("set" == propertyName) { + isValid = setDrawing(); + if(isValid) { + scaleDrawing(); + currentMesh.initialize(); + currentMesh.visible = true; + } + npoints = -1; //for later scaling + return; + } + if ("meshID" == propertyName) + npoints = -1; + + super.setProperty(propertyName, value, bs); + } + + boolean setDrawing() { + if (currentMesh == null) + allocMesh(null); + currentMesh.clear(); + if (npoints == 0) + return false; + for (int i = 0; i < npoints; i++) + currentMesh.addVertexCopy(ptList[i]); + currentMesh.setPolygonCount(1); + int n = currentMesh.vertexCount; + int nPoints = n; + if (n < 3) + n = 3; + currentMesh.polygonIndexes[0] = new int[n]; + for (int i = 0; i < n; i++) + currentMesh.polygonIndexes[0][i] = (i >= nPoints ? nPoints - 1 : i); + return true; + } + + void scaleDrawing() { + if (currentMesh == null || + currentMesh.vertexCount == 0 || currentMesh.scale == newScale) + return; + Vector3f diff = new Vector3f(); + float f = newScale / currentMesh.scale; + System.out.println("scaledrawing " +f); + currentMesh.scale = newScale; + Point3f center = centerOf(currentMesh.vertices, currentMesh.vertexCount); + for (int i = currentMesh.vertexCount; --i >= 0;) { + diff.sub(currentMesh.vertices[i], center); + diff.scale(f); + diff.add(center); + currentMesh.vertices[i].set(diff); + } + } + + Point3f centerOf(Point3f[] points, int nPoints) { + Point3f center = new Point3f(0, 0, 0); + if (nPoints == 0) return center; + for (int i = nPoints; --i >= 0;) { + center.add(points[i]); + } + center.scale(1.0F / nPoints); + return center; + } +} Added: trunk/Jmol/src/org/jmol/viewer/DrawRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/DrawRenderer.java (rev 0) +++ trunk/Jmol/src/org/jmol/viewer/DrawRenderer.java 2006-03-10 18:29:46 UTC (rev 4563) @@ -0,0 +1,36 @@ +/* $RCSfile$ + * $Author: hansonr $ + * $Date: 2006-02-25 11:44:18 -0600 (Sat, 25 Feb 2006) $ + * $Revision: 4528 $ + * + * Copyright (C) 2005 Miguel, Jmol Development + * + * Contact: mi...@jm..., jmo...@li... + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + */ +package org.jmol.viewer; + +class DrawRenderer extends MeshRenderer { + + void render() { + Draw draw = (Draw)shape; + if (!draw.isValid) + return; + for (int i = draw.meshCount; --i >= 0; ) { + render1(draw.meshes[i]); + } + } +} Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-10 14:00:17 UTC (rev 4562) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-10 18:29:46 UTC (rev 4563) @@ -3550,9 +3550,7 @@ } if (havePoints && ! isInitialized) { viewer.setShapeProperty(JmolConstants.SHAPE_DRAW, - "init", null); - viewer.setShapeProperty(JmolConstants.SHAPE_DRAW, - "scale", new Integer(intScale)); + "points", new Integer(intScale)); isInitialized = true; } viewer.setShapeProperty(JmolConstants.SHAPE_DRAW, Modified: trunk/Jmol/src/org/jmol/viewer/Mesh.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Mesh.java 2006-03-10 14:00:17 UTC (rev 4562) +++ trunk/Jmol/src/org/jmol/viewer/Mesh.java 2006-03-10 18:29:46 UTC (rev 4563) @@ -43,7 +43,9 @@ short[] normixes; int polygonCount; int[][] polygonIndexes; - + + float scale = 1; + boolean showPoints = false; boolean drawTriangles = false; boolean fillTriangles = true; @@ -58,6 +60,7 @@ void clear() { vertexCount = polygonCount = 0; + scale = 1; vertices = null; polygonIndexes = null; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2006-03-10 21:43:02
|
Revision: 4565 Author: hansonr Date: 2006-03-10 13:42:52 -0800 (Fri, 10 Mar 2006) ViewCVS: http://svn.sourceforge.net/jmol/?rev=4565&view=rev Log Message: ----------- fixes select resno < nnn problem. created Atom.getResno() and Group.getResno() as distinct from Group.getSeqcode(). Involves returning seqcode >> 8 instead of seqcode Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Atom.java trunk/Jmol/src/org/jmol/viewer/Compiler.java trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Group.java Modified: trunk/Jmol/src/org/jmol/viewer/Atom.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Atom.java 2006-03-10 21:04:18 UTC (rev 4564) +++ trunk/Jmol/src/org/jmol/viewer/Atom.java 2006-03-10 21:42:52 UTC (rev 4565) @@ -432,9 +432,15 @@ int getSeqcode() { if (group == null) return -1; - return group.seqcode; + return group.getSeqcode(); } + int getResno() { + if (group == null) + return -1; + return group.getResno(); + } + boolean isAtomNameMatch(String strPattern) { String atomName = getAtomNameOrNull(); int cchAtomName = atomName == null ? 0 : atomName.length(); Modified: trunk/Jmol/src/org/jmol/viewer/Compiler.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Compiler.java 2006-03-10 21:04:18 UTC (rev 4564) +++ trunk/Jmol/src/org/jmol/viewer/Compiler.java 2006-03-10 21:42:52 UTC (rev 4565) @@ -631,6 +631,7 @@ case '<': case '=': case '>': + System.out.println("compiler < " + ichT + " " + cchScript + " "+script.substring(0,ichT+1)); if (ichT < cchScript && ((ch = script.charAt(ichT)) == '<' || ch == '=' || ch == '>')) ++ichT; Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-10 21:04:18 UTC (rev 4564) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-10 21:42:52 UTC (rev 4565) @@ -914,6 +914,7 @@ int sp = 0; boolean refreshed = false; endOfExpression = 1000; + if (logMessages) viewer.scriptStatus("start to evaluate expression"); expression_loop: for (int pc = pcStart;; ++pc) { @@ -1086,6 +1087,7 @@ } // System.out.println("sequence number=" + seqNumber + // " insertionCode=" + insertionCode); + // resno << 8 + insertionCode int seqcode = Group.getSeqcode(seqNumber, insertionCode); // System.out.println("seqcode=" + seqcode); BitSet bsSequence = getSpecSeqcode(seqcode); @@ -1380,7 +1382,7 @@ propertyValue = atom.getPolymerLength(); break; case Token.resno: - propertyValue = atom.getSeqcode(); + propertyValue = atom.getResno(); if (propertyValue == -1) continue; break; Modified: trunk/Jmol/src/org/jmol/viewer/Group.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Group.java 2006-03-10 21:04:18 UTC (rev 4564) +++ trunk/Jmol/src/org/jmol/viewer/Group.java 2006-03-10 21:42:52 UTC (rev 4565) @@ -39,6 +39,7 @@ int firstAtomIndex, int lastAtomIndex) { this.chain = chain; this.seqcode = seqcode; + if (group3 == null) group3 = ""; this.groupID = getGroupID(group3); @@ -72,14 +73,6 @@ return JmolConstants.predefinedGroup1Names[groupID]; } - final int getSeqcode() { - return seqcode; - } - - final String getSeqcodeString() { - return getSeqcodeString(seqcode); - } - final short getGroupID() { return groupID; } @@ -182,6 +175,18 @@ // seqcode stuff //////////////////////////////////////////////////////////////// + final int getResno() { + return seqcode >> 8; + } + + final int getSeqcode() { + return seqcode; + } + + final String getSeqcodeString() { + return getSeqcodeString(seqcode); + } + static int getSeqcode(int sequenceNumber, char insertionCode) { if (sequenceNumber == Integer.MIN_VALUE) return sequenceNumber; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2006-03-11 03:16:30
|
Revision: 4567 Author: hansonr Date: 2006-03-10 19:16:21 -0800 (Fri, 10 Mar 2006) ViewCVS: http://svn.sourceforge.net/jmol/?rev=4567&view=rev Log Message: ----------- (1) augmenting pmesh "inline" and draw to allow a friendlier flow of data -- [x,y,z] -- really anywhere [,] are ignored. (2) allowing for identifier access to draw objects as [point1], [line1], etc., in square brackets. It's a simple, clean method that doesn't require anything in the compiler. examples: http://www.stolaf.edu/people/hansonr/jmol/test/json/pmesh.htm pmesh test1 "inline" "1 [0. 0. .5] 0";color pmesh white;pmesh test1 dots pmesh test2 "inline" "2 [0. 0. 0.] [1. 0. 0.] 1 [3 0 1 0]";color pmesh orange pmesh test3 "inline" "3 [-0.49, -2.8, -1.2] [-2.2, 0.80, 1.09] [1.89, 2.12, 0.42] 1 [4 0 1 2 0]";color pmesh yellow pmesh test4 "inline" "4 [0., 0., 0.] [0., 2., 0.] [2., 2., 0.] [2., 0., 0.] 1 [5 0 1 2 3 0]";color pmesh translucent red load caffeine2.xyz;draw triangle1 150 (atomno=1) (atomno=14) (atomno=15);draw line2 200 [triangle1] (atomno=9) (atomno=11);color draw translucent green draw line1 120 (atomno=1) (atomno=2);color draw white draw line1 300 (oxygen) (nitrogen) draw triangle1 400 draw line1 100;draw triangle1 100 draw triangle1;color draw red;draw line1;color draw blue draw line2 200 [triangle1] (atomno=9) (atomno=11);color pmesh green draw square1 [1.0 1.0 1.0] [1.0 0.0 1.0] [0.0 0.0 1.0] [0.0 1.0 1.0] Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Draw.java trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Isosurface.java trunk/Jmol/src/org/jmol/viewer/Mesh.java trunk/Jmol/src/org/jmol/viewer/MeshCollection.java trunk/Jmol/src/org/jmol/viewer/Pmesh.java Modified: trunk/Jmol/src/org/jmol/viewer/Draw.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Draw.java 2006-03-10 21:57:37 UTC (rev 4566) +++ trunk/Jmol/src/org/jmol/viewer/Draw.java 2006-03-11 03:16:21 UTC (rev 4567) @@ -42,6 +42,8 @@ if ("points" == propertyName) { ipt = npoints = 0; newScale = ((Integer)value).floatValue()/100; + if (newScale == 0) + newScale = 1; return; } @@ -57,6 +59,20 @@ return; } + if ("identifier" == propertyName) { + int meshIndex = getMeshIndex((String)value); + if (meshIndex >= 0) { + System.out.println(npoints+" lt? " + ptList.length); + System.out.println(meshIndex+" lt? " + meshes.length); + ptList[npoints++] = new Point3f(meshes[meshIndex].ptCenter); + System.out.println("OK"); + System.out.println(npoints + " " + ptList[npoints-1]); + } else { + System.out.println("draw identifier " + value + " not found"); + } + return; + } + if ("coord" == propertyName) { float x = ((Float)value).floatValue(); if (ipt == 0) { @@ -66,12 +82,14 @@ } else if (ipt == 2) { xyz.z = x; ptList[npoints++] = new Point3f(xyz); - } + System.out.println(npoints + " " + ptList[npoints-1]); + } ipt = (ipt + 1) % 3; return; } if ("atomSet" == propertyName) { ptList[npoints++] = new Point3f((Point3f)value); + System.out.println(npoints + " " + ptList[npoints-1]); return; } if ("set" == propertyName) { @@ -93,13 +111,14 @@ boolean setDrawing() { if (currentMesh == null) allocMesh(null); - currentMesh.clear(); + currentMesh.clear("draw"); if (npoints == 0) return false; for (int i = 0; i < npoints; i++) currentMesh.addVertexCopy(ptList[i]); currentMesh.setPolygonCount(1); int n = currentMesh.vertexCount; + currentMesh.ptCenter = centerOf(currentMesh.vertices, n); int nPoints = n; if (n < 3) n = 3; @@ -110,18 +129,17 @@ } void scaleDrawing() { - if (currentMesh == null || + if (currentMesh == null || newScale == 0 || currentMesh.vertexCount == 0 || currentMesh.scale == newScale) return; Vector3f diff = new Vector3f(); float f = newScale / currentMesh.scale; System.out.println("scaledrawing " +f); currentMesh.scale = newScale; - Point3f center = centerOf(currentMesh.vertices, currentMesh.vertexCount); for (int i = currentMesh.vertexCount; --i >= 0;) { - diff.sub(currentMesh.vertices[i], center); + diff.sub(currentMesh.vertices[i], currentMesh.ptCenter); diff.scale(f); - diff.add(center); + diff.add(currentMesh.ptCenter); currentMesh.vertices[i].set(diff); } } Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-10 21:57:37 UTC (rev 4566) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-11 03:16:21 UTC (rev 4567) @@ -3443,6 +3443,10 @@ data = viewer.simpleReplace(data, " ", "\n"); propertyName = "bufferedReaderOnePerLine"; } + + data = viewer.simpleReplace(data, "[", " "); + data = viewer.simpleReplace(data, ",", " "); + data = viewer.simpleReplace(data, "]", " "); data = viewer.simpleReplace(data, "|", "\n"); data = viewer.simpleReplace(data, "\n\n", "\n"); data = viewer.simpleReplace(data, "\n\n", "\n"); @@ -3504,6 +3508,17 @@ Token token = statement[i]; //System.out.println("draw: "+statement[i]); switch (token.tok) { + case Token.leftsquare: + if (i + 1 < statementLength && + statement[i + 1].tok == Token.identifier) { + propertyValue = (String) statement[++i].value; + propertyName = "identifier"; + havePoints = true; + break; + } + case Token.rightsquare: + case Token.opOr: + continue; case Token.integer: intScale = token.intValue; continue; Modified: trunk/Jmol/src/org/jmol/viewer/Isosurface.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Isosurface.java 2006-03-10 21:57:37 UTC (rev 4566) +++ trunk/Jmol/src/org/jmol/viewer/Isosurface.java 2006-03-11 03:16:21 UTC (rev 4567) @@ -86,7 +86,7 @@ BufferedReader br = (BufferedReader)value; if (currentMesh == null) allocMesh(null); - currentMesh.clear(); + currentMesh.clear("isosurface"); readVolumetricHeader(br); calcVolumetricMatrix(); readVolumetricData(br); Modified: trunk/Jmol/src/org/jmol/viewer/Mesh.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Mesh.java 2006-03-10 21:57:37 UTC (rev 4566) +++ trunk/Jmol/src/org/jmol/viewer/Mesh.java 2006-03-11 03:16:21 UTC (rev 4567) @@ -45,6 +45,8 @@ int[][] polygonIndexes; float scale = 1; + Point3f ptCenter = new Point3f(0,0,0); + String meshType = null; boolean showPoints = false; boolean drawTriangles = false; @@ -58,11 +60,12 @@ } - void clear() { + void clear(String meshType) { vertexCount = polygonCount = 0; scale = 1; vertices = null; polygonIndexes = null; + this.meshType = meshType; } void initialize() { Modified: trunk/Jmol/src/org/jmol/viewer/MeshCollection.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/MeshCollection.java 2006-03-10 21:57:37 UTC (rev 4566) +++ trunk/Jmol/src/org/jmol/viewer/MeshCollection.java 2006-03-11 03:16:21 UTC (rev 4567) @@ -60,10 +60,10 @@ currentMesh = null; return; } - for (int i = meshCount; --i >= 0; ) { - currentMesh = meshes[i]; - if (meshID.equals(currentMesh.meshID)) - return; + int meshIndex = getMeshIndex(meshID); + if (meshIndex >= 0) { + currentMesh = meshes[meshIndex]; + return; } allocMesh(meshID); return; @@ -159,6 +159,14 @@ } } + int getMeshIndex(String meshID) { + for (int i = meshCount; --i >= 0; ) { + if (meshes[i] != null && meshID.equals(meshes[i].meshID)) + return i; + } + return -1; + } + void allocMesh(String meshID) { meshes = (Mesh[])Util.ensureLength(meshes, meshCount + 1); currentMesh = meshes[meshCount++] = new Mesh(viewer, meshID, g3d, colix); Modified: trunk/Jmol/src/org/jmol/viewer/Pmesh.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Pmesh.java 2006-03-10 21:57:37 UTC (rev 4566) +++ trunk/Jmol/src/org/jmol/viewer/Pmesh.java 2006-03-11 03:16:21 UTC (rev 4567) @@ -42,7 +42,7 @@ BufferedReader br = (BufferedReader)value; if (currentMesh == null) allocMesh(null); - currentMesh.clear(); + currentMesh.clear("pmesh"); isValid = readPmesh(br); if(isValid) { currentMesh.initialize(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2006-03-11 06:06:18
|
Revision: 4568 Author: hansonr Date: 2006-03-10 22:06:09 -0800 (Fri, 10 Mar 2006) ViewCVS: http://svn.sourceforge.net/jmol/?rev=4568&view=rev Log Message: ----------- adding detail to getProperty("shapeInfo") and getProperty("ModelInfo") Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Draw.java trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Frame.java trunk/Jmol/src/org/jmol/viewer/Mesh.java trunk/Jmol/src/org/jmol/viewer/MeshCollection.java trunk/Jmol/src/org/jmol/viewer/MeshRenderer.java trunk/Jmol/src/org/jmol/viewer/Mmset.java trunk/Jmol/src/org/jmol/viewer/ModelManager.java trunk/Jmol/src/org/jmol/viewer/Shape.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/Draw.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Draw.java 2006-03-11 03:16:21 UTC (rev 4567) +++ trunk/Jmol/src/org/jmol/viewer/Draw.java 2006-03-11 06:06:09 UTC (rev 4568) @@ -24,7 +24,9 @@ package org.jmol.viewer; +import java.util.Hashtable; import java.util.BitSet; +import java.util.Vector; import javax.vecmath.Point3f; import javax.vecmath.Vector3f; @@ -153,4 +155,5 @@ center.scale(1.0F / nPoints); return center; } + } Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-11 03:16:21 UTC (rev 4567) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-11 06:06:09 UTC (rev 4568) @@ -3449,8 +3449,6 @@ data = viewer.simpleReplace(data, "]", " "); data = viewer.simpleReplace(data, "|", "\n"); data = viewer.simpleReplace(data, "\n\n", "\n"); - data = viewer.simpleReplace(data, "\n\n", "\n"); - data = viewer.simpleReplace(data, "\n\n", "\n"); System.out.println("pmesh inline data:\n" + data); t = viewer.getBufferedReaderForString(data); } else { Modified: trunk/Jmol/src/org/jmol/viewer/Frame.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Frame.java 2006-03-11 03:16:21 UTC (rev 4567) +++ trunk/Jmol/src/org/jmol/viewer/Frame.java 2006-03-11 06:06:09 UTC (rev 4568) @@ -692,6 +692,10 @@ return mmset.getPolymerCount(); } + int getChainCountInModel(int modelIndex) { + return mmset.getChainCountInModel(modelIndex); + } + int getPolymerCountInModel(int modelIndex) { return mmset.getPolymerCountInModel(modelIndex); } @@ -704,10 +708,23 @@ return mmset.getGroupCount(); } + int getGroupCountInModel(int modelIndex) { + return mmset.getGroupCountInModel(modelIndex); + } + int getAtomCount() { return atomCount; } + int getAtomCountInModel(int modelIndex) { + int n = 0; + for (int i = atoms.length; --i >= 0;) + if (atoms[i].modelIndex == modelIndex) + n++; + return n; + } + + Atom[] getAtoms() { return atoms; } @@ -724,6 +741,14 @@ return bondCount; } + int getBondCountInModel(int modelIndex) { + int n = 0; + for (int i = bonds.length; --i >= 0;) + if (bonds[i].atom1.modelIndex == modelIndex) + n++; + return n; + } + Bond getBondAt(int bondIndex) { return bonds[bondIndex]; } Modified: trunk/Jmol/src/org/jmol/viewer/Mesh.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Mesh.java 2006-03-11 03:16:21 UTC (rev 4567) +++ trunk/Jmol/src/org/jmol/viewer/Mesh.java 2006-03-11 06:06:09 UTC (rev 4568) @@ -23,6 +23,8 @@ */ package org.jmol.viewer; +import java.util.Hashtable; + import org.jmol.g3d.*; import javax.vecmath.Point3f; @@ -163,4 +165,8 @@ } } } + + Hashtable getShapeDetail() { + return null; + } } Modified: trunk/Jmol/src/org/jmol/viewer/MeshCollection.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/MeshCollection.java 2006-03-11 03:16:21 UTC (rev 4567) +++ trunk/Jmol/src/org/jmol/viewer/MeshCollection.java 2006-03-11 06:06:09 UTC (rev 4568) @@ -27,6 +27,8 @@ import org.jmol.g3d.*; import java.util.BitSet; +import java.util.Vector; +import java.util.Hashtable; abstract class MeshCollection extends SelectionIndependentShape { @@ -301,5 +303,26 @@ ichNextParse = ich; return value; } + + Vector getShapeDetail() { + Vector V=new Vector(); + for (int i = 0; i < meshCount; i++) { + Hashtable info = new Hashtable(); + Mesh mesh = meshes[i]; + info.put("ID", mesh.meshID); + info.put("vertexCount", new Integer(mesh.vertexCount)); + if (mesh.vertexCount == 2) + info.put("length_Ang", new Float(mesh.vertices[0].distance(mesh.vertices[1]))); + info.put("scale", new Float(mesh.scale)); + info.put("center", mesh.ptCenter); + Vector v = new Vector(); + for (int j = 0; j < mesh.vertexCount; j++) + v.add(mesh.vertices[j]); + info.put("vertices",v); + V.add(info); + } + return V; + } + } Modified: trunk/Jmol/src/org/jmol/viewer/MeshRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/MeshRenderer.java 2006-03-11 03:16:21 UTC (rev 4567) +++ trunk/Jmol/src/org/jmol/viewer/MeshRenderer.java 2006-03-11 06:06:09 UTC (rev 4568) @@ -82,8 +82,12 @@ } if (iB == iC) { - g3d.fillCylinder(colixA, Graphics3D.ENDCAPS_SPHERICAL, 2, - screens[iA], screens[iB]); + if (iA == iB) { + g3d.fillSphereCentered(colixA, 16, screens[iA].x, screens[iA].y, screens[iA].z); + } else { + g3d.fillCylinder(colixA, Graphics3D.ENDCAPS_SPHERICAL, 2, + screens[iA], screens[iB]); + } } else if (vertexIndexes.length == 3) { if (fill) g3d.fillTriangle(screens[iA], colixA, normixes[iA], Modified: trunk/Jmol/src/org/jmol/viewer/Mmset.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Mmset.java 2006-03-11 03:16:21 UTC (rev 4567) +++ trunk/Jmol/src/org/jmol/viewer/Mmset.java 2006-03-11 06:06:09 UTC (rev 4568) @@ -201,6 +201,10 @@ return groupCount; } + int getGroupCountInModel(int modelIndex) { + return models[modelIndex].getGroupCount(); + } + void calcSelectedGroupsCount(BitSet bsSelected) { for (int i = modelCount; --i >= 0; ) models[i].calcSelectedGroupsCount(bsSelected); Modified: trunk/Jmol/src/org/jmol/viewer/ModelManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/ModelManager.java 2006-03-11 03:16:21 UTC (rev 4567) +++ trunk/Jmol/src/org/jmol/viewer/ModelManager.java 2006-03-11 06:06:09 UTC (rev 4568) @@ -209,10 +209,18 @@ return (frame == null) ? 0 : frame.getChainCount(); } + int getChainCountInModel(int modelIndex) { + return (frame == null) ? 0 : frame.getChainCountInModel(modelIndex); + } + int getGroupCount() { return (frame == null) ? 0 : frame.getGroupCount(); } + int getGroupCountInModel(int modelIndex) { + return (frame == null) ? 0 : frame.getGroupCountInModel(modelIndex); + } + int getPolymerCount() { return (frame == null) ? 0 : frame.getPolymerCount(); } @@ -229,6 +237,14 @@ return (frame == null) ? 0 : frame.getBondCount(); } + int getAtomCountInModel(int modelIndex) { + return (frame == null) ? 0 : frame.getAtomCountInModel(modelIndex); + } + + int getBondCountInModel(int modelIndex) { + return (frame == null) ? 0 : frame.getBondCountInModel(modelIndex); + } + private final Point3f pointT = new Point3f(); void setCenterBitSet(BitSet bsCenter) { if (frame == null) @@ -509,6 +525,10 @@ return frame.getBondAt(i).getOrder(); } + float getBondLength(int i) { + return getBondAtom1(i).point3f.distance(getBondAtom2(i).point3f); + } + Atom getBondAtom1(int i) { return frame.getBondAt(i).getAtom1(); } @@ -648,6 +668,12 @@ model.put("num",new Integer(viewer.getModelNumber(i))); model.put("name",viewer.getModelName(i)); model.put("vibrationVectors", new Boolean(viewer.modelHasVibrationVectors(i))); + model.put("atomCount",new Integer(getAtomCountInModel(i))); + model.put("bondCount",new Integer(getBondCountInModel(i))); + model.put("groupCount",new Integer(getGroupCountInModel(i))); + model.put("polymerCount",new Integer(getPolymerCountInModel(i))); + model.put("chainCount",new Integer(getChainCountInModel(i))); + models.add(model); } info.put("models",models); @@ -664,12 +690,17 @@ return V; } + void getAtomIdentityInfo(int i, Hashtable info) { + info.put("_ipt", new Integer(i)); + info.put("atomno", new Integer(getAtomNumber(i))); + info.put("info", getAtomInfo(i)); + info.put("sym", getElementSymbol(i)); + } + Hashtable getAtomInfo(int i, boolean isPDB) { Atom atom = frame.getAtomAt(i); Hashtable info = new Hashtable(); - info.put("_ipt", new Integer(i)); - info.put("atomno", new Integer(atom.getAtomNumber())); - info.put("sym", getElementSymbol(i)); + getAtomIdentityInfo(i, info); info.put("elemno", new Integer(atom.getElementNumber())); info.put("x", new Float(getAtomX(i))); info.put("y", new Float(getAtomY(i))); @@ -677,10 +708,9 @@ if (frame.vibrationVectors != null && frame.vibrationVectors[i] != null) { info.put("vibVector", new Vector3f(frame.vibrationVectors[i])); } - info.put("model", new Integer(atom.getModelTagNumber())); info.put("bondCount", new Integer(atom.getCovalentBondCount())); info.put("radius", new Float((atom.getRasMolRadius()/120.0))); - info.put("info", getAtomInfo(i)); + info.put("model", new Integer(atom.getModelTagNumber())); info.put("visible", new Boolean(getAtomVisibility(i))); info.put("clickabilityFlags", new Integer(atom.clickabilityFlags)); info.put("visibilityFlags", new Integer(atom.shapeVisibilityFlags)); @@ -730,12 +760,15 @@ Atom atom2 = getBondAtom2(i); Hashtable info = new Hashtable(); info.put("_bpt", new Integer(i)); - info.put("_apt1", new Integer(atom1.atomIndex)); - info.put("_apt2", new Integer(atom2.atomIndex)); - info.put("atomno1", new Integer(atom1.getAtomNumber())); - info.put("atomno2", new Integer(atom2.getAtomNumber())); + Hashtable infoA = new Hashtable(); + getAtomIdentityInfo(atom1.atomIndex, infoA); + Hashtable infoB = new Hashtable(); + getAtomIdentityInfo(atom2.atomIndex, infoB); + info.put("atom1",infoA); + info.put("atom2",infoB); info.put("order", new Integer(getBondOrder(i))); info.put("radius", new Float(bond.mad/2000.)); + info.put("length_Ang",new Float(getBondLength(i))); info.put("visible", new Boolean(bond.shapeVisibilityFlags != 0)); String strColor = viewer.getHexColorFromIndex(bond.colix); if (strColor != null) @@ -1032,10 +1065,13 @@ for (int i = 0; i < JmolConstants.SHAPE_MAX; ++i) { Shape shape = frame.shapes[i]; if (shape != null) { + String shapeType = JmolConstants.shapeClassBases[i]; Hashtable shapeinfo = new Hashtable(); shapeinfo.put("index",new Integer(i)); shapeinfo.put("myVisibilityFlag",new Integer(shape.myVisibilityFlag)); - info.put(JmolConstants.shapeClassBases[i],shapeinfo); + if(shapeType == "Draw") + shapeinfo.put("obj",shape.getShapeDetail()); + info.put(shapeType,shapeinfo); } } if (viewer.selectionHaloEnabled) { Modified: trunk/Jmol/src/org/jmol/viewer/Shape.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Shape.java 2006-03-11 03:16:21 UTC (rev 4567) +++ trunk/Jmol/src/org/jmol/viewer/Shape.java 2006-03-11 06:06:09 UTC (rev 4568) @@ -28,6 +28,7 @@ import javax.vecmath.Point3f; import java.util.BitSet; +import java.util.Vector; abstract class Shape { @@ -76,4 +77,8 @@ void setModelClickability() { } + + Vector getShapeDetail() { + return null; + } } Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-11 03:16:21 UTC (rev 4567) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-11 06:06:09 UTC (rev 4568) @@ -2937,17 +2937,22 @@ String simpleReplace(String str, String strFrom, String strTo) { int fromLength = strFrom.length(); + boolean isOnce = (strTo.indexOf(strFrom) >= 0); if (str == null || fromLength == 0) return str; int ipt; - int ipt0 = 0; - String sout = ""; - while ((ipt = str.indexOf(strFrom, ipt0)) >= 0) { - sout += str.substring(ipt0, ipt) + strTo; - ipt0 = ipt + fromLength; + String stemp = ""; + while (str.indexOf(strFrom) >= 0) { + int ipt0 = 0; + while ((ipt = str.indexOf(strFrom, ipt0)) >= 0) { + stemp += str.substring(ipt0, ipt) + strTo; + ipt0 = ipt + fromLength; + } + str = stemp + str.substring(ipt0, str.length()); + if(isOnce) + break; } - sout += str.substring(ipt0, str.length()); - return sout; + return str; } String getHexColorFromIndex(short colix) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2006-03-12 03:18:51
|
Revision: 4570 Author: hansonr Date: 2006-03-11 19:18:39 -0800 (Sat, 11 Mar 2006) ViewCVS: http://svn.sourceforge.net/jmol/?rev=4570&view=rev Log Message: ----------- draw support for animation: (1) absolute [x,y,z] coordinates are "fixed" in space in all frames. (2) (atom sets) are calculated freshly for EACH frame unless the FIXED keyword is present. In that case, what is displayed is an average value for all frames. (3) [objectID] references are fixed or free to move, as defined in the initial "draw objectID" specification. (4) fixed coordinates and free (atom sets) can be mixed. Examples: load cyclohexane_movie.xyz draw axis1 250 (atomno=2) (atomno=5) #between two atoms draw axis2 200 (atomno=4 or atomno=3) (atomno=1 or atomno=6) #between two bonds draw axis2 200 FIXED (atomno=4 or atomno=3) (atomno=1 or atomno=6) #average position shown throughout animation draw axis2 200 [0.,0.,0.] (atomno=4 or atomno=3) (atomno=1 or atomno=6) # one fixed point and two moving points forming a triangle. animation on see http://www.stolaf.edu/people/hansonr/jmol/test/json/pmesh.htm Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Draw.java trunk/Jmol/src/org/jmol/viewer/DrawRenderer.java trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Mesh.java trunk/Jmol/src/org/jmol/viewer/MeshRenderer.java trunk/Jmol/src/org/jmol/viewer/ModelManager.java trunk/Jmol/src/org/jmol/viewer/RepaintManager.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/Draw.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Draw.java 2006-03-11 16:46:36 UTC (rev 4569) +++ trunk/Jmol/src/org/jmol/viewer/Draw.java 2006-03-12 03:18:39 UTC (rev 4570) @@ -24,25 +24,35 @@ package org.jmol.viewer; -import java.util.Hashtable; + import java.util.BitSet; -import java.util.Vector; import javax.vecmath.Point3f; import javax.vecmath.Vector3f; class Draw extends MeshCollection { - Point3f[] ptList = new Point3f[128]; + Point3f[] ptList = new Point3f[8]; + int[] ptIdentifiers = new int[8]; + BitSet[] ptBitSets = new BitSet[8]; Point3f xyz = new Point3f(); int ipt; int npoints = -1; + int nbitsets = 0; + int ncoord = 0; + int nidentifiers = 0; + boolean isFixed = false; float newScale; void setProperty(String propertyName, Object value, BitSet bs) { System.out.println("draw "+propertyName+" "+value); + if ("fixed" == propertyName) { + isFixed = ((Boolean)value).booleanValue(); + return; + } + if ("points" == propertyName) { - ipt = npoints = 0; + ipt = npoints = ncoord = nbitsets = nidentifiers = 0; newScale = ((Integer)value).floatValue()/100; if (newScale == 0) newScale = 1; @@ -52,23 +62,21 @@ if ("scale" == propertyName) { newScale = ((Integer)value).floatValue()/100; if (newScale == 0) - return; + newScale = 0.01f; //very tiny but still sizable; if (currentMesh != null) { //no points in this script statement - scaleDrawing(); + currentMesh.scaleDrawing(newScale); currentMesh.initialize(); } return; } if ("identifier" == propertyName) { - int meshIndex = getMeshIndex((String)value); + String meshID = (String)value; + int meshIndex = getMeshIndex(meshID); if (meshIndex >= 0) { - System.out.println(npoints+" lt? " + ptList.length); - System.out.println(meshIndex+" lt? " + meshes.length); - ptList[npoints++] = new Point3f(meshes[meshIndex].ptCenter); - System.out.println("OK"); - System.out.println(npoints + " " + ptList[npoints-1]); + ptIdentifiers[nidentifiers++] = meshIndex; + npoints++; } else { System.out.println("draw identifier " + value + " not found"); } @@ -83,30 +91,36 @@ xyz.y = x; } else if (ipt == 2) { xyz.z = x; - ptList[npoints++] = new Point3f(xyz); - System.out.println(npoints + " " + ptList[npoints-1]); - } + ptList[ncoord++] = new Point3f(xyz); + npoints++; + System.out.println(npoints + " " + ptList[ncoord-1]); + } ipt = (ipt + 1) % 3; return; } if ("atomSet" == propertyName) { - ptList[npoints++] = new Point3f((Point3f)value); - System.out.println(npoints + " " + ptList[npoints-1]); + if (((BitSet)value).cardinality() == 0) + return; + ptBitSets[nbitsets++] = (BitSet)value; + npoints++; + System.out.println(npoints + " " + ptBitSets[nbitsets-1]); return; } if ("set" == propertyName) { isValid = setDrawing(); if(isValid) { - scaleDrawing(); + currentMesh.scaleDrawing(newScale); currentMesh.initialize(); currentMesh.visible = true; } npoints = -1; //for later scaling return; } - if ("meshID" == propertyName) + if ("meshID" == propertyName) { npoints = -1; - + isFixed = false; + } + super.setProperty(propertyName, value, bs); } @@ -116,44 +130,78 @@ currentMesh.clear("draw"); if (npoints == 0) return false; - for (int i = 0; i < npoints; i++) - currentMesh.addVertexCopy(ptList[i]); - currentMesh.setPolygonCount(1); - int n = currentMesh.vertexCount; - currentMesh.ptCenter = centerOf(currentMesh.vertices, n); - int nPoints = n; - if (n < 3) - n = 3; - currentMesh.polygonIndexes[0] = new int[n]; - for (int i = 0; i < n; i++) - currentMesh.polygonIndexes[0][i] = (i >= nPoints ? nPoints - 1 : i); + int nPoly = 0; + int modelCount = viewer.getModelCount(); + if (nbitsets == 0 && nidentifiers == 0 || modelCount < 2) + isFixed = true; + if (isFixed) { + currentMesh.setPolygonCount(1); + currentMesh.ptCenters = null; + currentMesh.visibilityFlags = null; + nPoly = setVerticesAndPolygons(-1, nPoly); + } else { + currentMesh.setPolygonCount(modelCount); + currentMesh.ptCenters = new Point3f[modelCount]; + currentMesh.visibilityFlags = new int[modelCount]; + for (int iModel = 0; iModel < modelCount; iModel++) { + int n0 = currentMesh.vertexCount; + nPoly = setVerticesAndPolygons(iModel, nPoly); + currentMesh.setCenter(iModel); + } + } + currentMesh.setCenter(-1); return true; } - void scaleDrawing() { - if (currentMesh == null || newScale == 0 || - currentMesh.vertexCount == 0 || currentMesh.scale == newScale) - return; - Vector3f diff = new Vector3f(); - float f = newScale / currentMesh.scale; - System.out.println("scaledrawing " +f); - currentMesh.scale = newScale; - for (int i = currentMesh.vertexCount; --i >= 0;) { - diff.sub(currentMesh.vertices[i], currentMesh.ptCenter); - diff.scale(f); - diff.add(currentMesh.ptCenter); - currentMesh.vertices[i].set(diff); + int setVerticesAndPolygons(int iModel, int nPoly) { + int nPoints = ncoord; + // [x,y,z] points are already defined in ptList + if (iModel < 0) { + // add in [drawID] references as overall centers + for (int i = 0; i < nidentifiers; i++) + ptList[nPoints++] = meshes[ptIdentifiers[i]].ptCenter; + // add in (atom set) references as overall centers + for (int i = 0; i < nbitsets; i++) + ptList[nPoints++] = viewer.getAtomSetCenter(ptBitSets[i]); + } else { + // [drawID] references may be fixed or not + for (int i = 0; i < nidentifiers; i++) { + if (meshes[ptIdentifiers[i]].ptCenters == null || + meshes[ptIdentifiers[i]].ptCenters[iModel] == null) { + ptList[nPoints++] = meshes[ptIdentifiers[i]].ptCenter; + } else { + ptList[nPoints++] = meshes[ptIdentifiers[i]].ptCenters[iModel]; + } + } + // (atom set) references must be filtered for relevant model + // note that if a model doesn't have a relevant point, one may + // get a line instead of a plane, a point instead of a line, etc. + BitSet bsModel = viewer.getModelAtomBitSet(iModel); + for (int i = 0; i < nbitsets; i++) { + BitSet bs = (BitSet)ptBitSets[i].clone(); + bs.and(bsModel); + if (bs.cardinality() > 0) { + ptList[nPoints++] = viewer.getAtomSetCenter(bs); + } + } } + return currentMesh.setPolygon(ptList, nPoints, nPoly); } - - Point3f centerOf(Point3f[] points, int nPoints) { - Point3f center = new Point3f(0, 0, 0); - if (nPoints == 0) return center; - for (int i = nPoints; --i >= 0;) { - center.add(points[i]); + + void setVisibilityFlags(BitSet bs) { + /* + * set all fixed objects visible; others based on model being displayed + * note that this is NOT done with atoms and bonds, because they have mads. + * When you say "frame 0" it is just turning on all the mads. + */ + int modelCount = viewer.getModelCount(); + for (int i = meshCount; --i >= 0; ) { + if (meshes[i].visibilityFlags == null) + continue; + for (int iModel = modelCount; --iModel >= 0; ) { + meshes[i].visibilityFlags[iModel] = (bs.get(iModel) ? 1 : 0); + } } - center.scale(1.0F / nPoints); - return center; } - + } Modified: trunk/Jmol/src/org/jmol/viewer/DrawRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/DrawRenderer.java 2006-03-11 16:46:36 UTC (rev 4569) +++ trunk/Jmol/src/org/jmol/viewer/DrawRenderer.java 2006-03-12 03:18:39 UTC (rev 4570) @@ -26,6 +26,12 @@ class DrawRenderer extends MeshRenderer { void render() { + /* + * Each drawn object, draw.meshes[i], may consist of several + * polygons, one for each MODEL FRAME. Or, it may be "fixed" + * and only contain one single polygon. + * + */ Draw draw = (Draw)shape; if (!draw.isValid) return; Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-11 16:46:36 UTC (rev 4569) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-12 03:18:39 UTC (rev 4570) @@ -3443,7 +3443,6 @@ data = viewer.simpleReplace(data, " ", "\n"); propertyName = "bufferedReaderOnePerLine"; } - data = viewer.simpleReplace(data, "[", " "); data = viewer.simpleReplace(data, ",", " "); data = viewer.simpleReplace(data, "]", " "); @@ -3499,7 +3498,7 @@ boolean havePoints = false; boolean isInitialized = false; int intScale = 0; - BitSet bs = null; + boolean isFixed = false; for (int i = 1; i < statementLength; ++i) { String propertyName = null; Object propertyValue = null; @@ -3528,15 +3527,18 @@ break; case Token.expressionBegin: propertyName = "atomSet"; - bs = expression(statement, i + 1); + propertyValue = expression(statement, i + 1); i = endOfExpression; havePoints = true; - propertyValue = new Point3f(viewer.getAtomSetCenter(bs)); nCoord += 3; break; case Token.identifier: propertyName = "meshID"; propertyValue = token.value; + if (((String)propertyValue).equalsIgnoreCase("FIXED")) { + isFixed = true; + continue; + } break; case Token.dots: propertyValue = Boolean.TRUE; @@ -3566,6 +3568,9 @@ if (havePoints && ! isInitialized) { viewer.setShapeProperty(JmolConstants.SHAPE_DRAW, "points", new Integer(intScale)); + if (isFixed || viewer.getModelCount() == 1) + viewer.setShapeProperty(JmolConstants.SHAPE_DRAW, + "fixed", new Boolean(true)); isInitialized = true; } viewer.setShapeProperty(JmolConstants.SHAPE_DRAW, Modified: trunk/Jmol/src/org/jmol/viewer/Mesh.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Mesh.java 2006-03-11 16:46:36 UTC (rev 4569) +++ trunk/Jmol/src/org/jmol/viewer/Mesh.java 2006-03-12 03:18:39 UTC (rev 4570) @@ -38,17 +38,18 @@ short colix; short[] vertexColixes; Graphics3D g3d; - int vertexCount; Point3f[] vertices; short[] normixes; int polygonCount; - int[][] polygonIndexes; + int[][] polygonIndexes = null; float scale = 1; Point3f ptCenter = new Point3f(0,0,0); + Point3f ptCenters[]; String meshType = null; + int[] visibilityFlags = null; boolean showPoints = false; boolean drawTriangles = false; @@ -61,7 +62,6 @@ this.colix = colix; } - void clear(String meshType) { vertexCount = polygonCount = 0; scale = 1; @@ -128,7 +128,8 @@ void setPolygonCount(int polygonCount) { this.polygonCount = polygonCount; - polygonIndexes = new int[polygonCount][]; + if (polygonIndexes == null || polygonCount > polygonIndexes.length) + polygonIndexes = new int[polygonCount][]; } int addVertexCopy(Point3f vertex) { @@ -169,4 +170,89 @@ Hashtable getShapeDetail() { return null; } + + boolean isPolygonDisplayable(int index) { + return (visibilityFlags == null || + visibilityFlags[index] != 0); + } + + int setPolygon(Point3f[] ptList, int nVertices, int nPoly) { + /* + * designed for Draw + * + * for now, just add all new vertices. It's simpler this way + * though a bit redundant. We could reuse the fixed ones -- no matter + * + */ + if (nVertices == 0) return nPoly; + int nVertices0 = vertexCount; + for (int i = 0; i < nVertices; i++) { + addVertexCopy(ptList[i]); + } + int npoints = (nVertices < 3 ? 3 : nVertices); + setPolygonCount(nPoly + 1); + polygonIndexes[nPoly] = new int[npoints]; + for (int i = 0; i < npoints; i++) { + polygonIndexes[nPoly][i] = nVertices0 + (i < nVertices ? i : nVertices - 1); + } + return nPoly + 1; + } + + void scaleDrawing(float newScale) { + /* + * allows for Draw to scale object + * have to watch out for double-listed vertices + * + */ + if (newScale == 0 || vertexCount == 0 || scale == newScale) + return; + Vector3f diff = new Vector3f(); + float f = newScale / scale; + scale = newScale; + int iptlast = -1; + int ipt = 0; + for (int i = polygonCount; --i >= 0;) { + Point3f center = (ptCenters == null ? ptCenter : ptCenters[i]); + iptlast = -1; + for (int iV = polygonIndexes[i].length; --iV >= 0;) { + ipt = polygonIndexes[i][iV]; + if (ipt == iptlast) + continue; + iptlast = ipt; + diff.sub(vertices[ipt], center); + diff.scale(f); + diff.add(center); + vertices[ipt].set(diff); + } + } + } + + void setCenter(int iModel) { + Point3f center = new Point3f(0, 0, 0); + int iptlast = -1; + int ipt = 0; + int n = 0; + for (int i = polygonCount; --i >= 0;) { + if (iModel >=0 && i != iModel) + continue; + iptlast = -1; + for (int iV = polygonIndexes[i].length; --iV >= 0;) { + ipt = polygonIndexes[i][iV]; + if (ipt == iptlast) + continue; + iptlast = ipt; + center.add(vertices[ipt]); + n++; + } + if (i == iModel || i == 0) { + center.scale(1.0f / n); + break; + } + } + if (iModel < 0){ + ptCenter = center; + } else { + ptCenters[iModel] = center; + } + } } Modified: trunk/Jmol/src/org/jmol/viewer/MeshRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/MeshRenderer.java 2006-03-11 16:46:36 UTC (rev 4569) +++ trunk/Jmol/src/org/jmol/viewer/MeshRenderer.java 2006-03-12 03:18:39 UTC (rev 4570) @@ -67,6 +67,8 @@ short colix = mesh.colix; short[] vertexColixes = mesh.vertexColixes; for (int i = mesh.polygonCount; --i >= 0; ) { + if (! mesh.isPolygonDisplayable(i)) + continue; int[] vertexIndexes = polygonIndexes[i]; if (vertexIndexes != null) { int iA = vertexIndexes[0]; @@ -82,12 +84,8 @@ } if (iB == iC) { - if (iA == iB) { - g3d.fillSphereCentered(colixA, 16, screens[iA].x, screens[iA].y, screens[iA].z); - } else { - g3d.fillCylinder(colixA, Graphics3D.ENDCAPS_SPHERICAL, 2, - screens[iA], screens[iB]); - } + g3d.fillCylinder(colixA, Graphics3D.ENDCAPS_SPHERICAL, + (iA == iB ? 6 : 2), screens[iA], screens[iB]); } else if (vertexIndexes.length == 3) { if (fill) g3d.fillTriangle(screens[iA], colixA, normixes[iA], Modified: trunk/Jmol/src/org/jmol/viewer/ModelManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/ModelManager.java 2006-03-11 16:46:36 UTC (rev 4569) +++ trunk/Jmol/src/org/jmol/viewer/ModelManager.java 2006-03-12 03:18:39 UTC (rev 4570) @@ -424,6 +424,16 @@ return (frame == null) ? null : frame.getVisibleSet(); } + BitSet getModelAtomBitSet(int modelIndex) { + BitSet bs = new BitSet(); + int atomCount = getAtomCount(); + Atom[] atoms = frame.atoms; + for (int i = 0; i < atomCount; i++) + if (atoms[i].modelIndex == modelIndex) + bs.set(i); + return bs; + } + void calcSelectedGroupsCount(BitSet bsSelected) { if (frame != null) frame.calcSelectedGroupsCount(bsSelected); @@ -1028,6 +1038,10 @@ boolean showHydrogens = viewer.getShowHydrogens(); int ballVisibilityFlag = viewer.getShapeVisibilityFlag(JmolConstants.SHAPE_BALLS); int haloVisibilityFlag = viewer.getShapeVisibilityFlag(JmolConstants.SHAPE_HALO); + BitSet bs = viewer.getVisibleFramesBitSet(); + Draw draw = (Draw) frame.shapes[JmolConstants.SHAPE_DRAW]; + if (draw != null) + draw.setVisibilityFlags(bs); for (int i = frame.atomCount; --i >= 0; ) { Atom atom = atoms[i]; atom.shapeVisibilityFlags &= ( Modified: trunk/Jmol/src/org/jmol/viewer/RepaintManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/RepaintManager.java 2006-03-11 16:46:36 UTC (rev 4569) +++ trunk/Jmol/src/org/jmol/viewer/RepaintManager.java 2006-03-12 03:18:39 UTC (rev 4570) @@ -28,17 +28,19 @@ import java.awt.Image; import java.awt.Rectangle; import java.util.Hashtable; +import java.util.BitSet; class RepaintManager { Viewer viewer; FrameRenderer frameRenderer; - + RepaintManager(Viewer viewer) { this.viewer = viewer; frameRenderer = new FrameRenderer(viewer); } + BitSet bsVisibleFrames = null; int displayModelIndex = 0; boolean setDisplayModelIndex(int modelIndex) { Frame frame = viewer.getFrame(); @@ -50,9 +52,26 @@ displayModelIndex = modelIndex; viewer.setTainted(true); viewer.setStatusFrameChanged(modelIndex); + bsVisibleFrames = getAnimationRangeVisible(); return true; } + BitSet getVisibleFramesBitSet() { + return bsVisibleFrames; + } + + BitSet getAnimationRangeVisible() { + BitSet bs = new BitSet(); + if (displayModelIndex >= 0) { + bs.set(displayModelIndex); + return bs; + } + for (int i = firstModelIndex; i != lastModelIndex; i += frameStep) + bs.set(i); + bs.set(lastModelIndex); + return bs; + } + AnimationThread animationThread; boolean wireframeRotating = false; Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-11 16:46:36 UTC (rev 4569) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-12 03:18:39 UTC (rev 4570) @@ -1253,6 +1253,10 @@ return modelManager.frame != null; } + BitSet getModelAtomBitSet(int modelIndex) { + return modelManager.getModelAtomBitSet(modelIndex); + } + Object getClientFile() { // DEPRECATED - use getExportJmolAdapter() return null; @@ -1689,6 +1693,10 @@ void setAnimationRange(int modelIndex1, int modelIndex2) { repaintManager.setAnimationRange(modelIndex1, modelIndex2); } + + BitSet getVisibleFramesBitSet() { + return repaintManager.getVisibleFramesBitSet(); + } boolean isAnimationOn() { return repaintManager.animationOn; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mig...@us...> - 2006-03-13 02:23:23
|
Revision: 4584 Author: migueljmol Date: 2006-03-12 18:23:19 -0800 (Sun, 12 Mar 2006) ViewCVS: http://svn.sourceforge.net/jmol/?rev=4584&view=rev Log Message: ----------- minor pruning Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/ColorManager.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/ColorManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/ColorManager.java 2006-03-13 02:15:51 UTC (rev 4583) +++ trunk/Jmol/src/org/jmol/viewer/ColorManager.java 2006-03-13 02:23:19 UTC (rev 4584) @@ -3,9 +3,9 @@ * $Date$ * $Revision$ * - * Copyright (C) 2003-2005 The Jmol Development Team + * Copyright (C) 2003-2006 Miguel, Jmol Development, www.jmol.org * - * Contact: jmo...@li... + * Contact: mi...@jm... * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -94,20 +94,6 @@ colixRubberband = Graphics3D.getColix(color); } - short colixDotsConvex = 0; - short colixDotsConcave = 0; - short colixDotsSaddle = 0; - - void setColorDotsConvex(Color color) { - colixDotsConvex = Graphics3D.getColix(color); - } - void setColorDotsConcave(Color color) { - colixDotsConcave = Graphics3D.getColix(color); - } - void setColorDotsSaddle(Color color) { - colixDotsSaddle = Graphics3D.getColix(color); - } - short colixMeasurement = 0; void setMeasurementArgb(int argb) { colixMeasurement = Graphics3D.getColix(argb); Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-13 02:15:51 UTC (rev 4583) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-13 02:23:19 UTC (rev 4584) @@ -2,9 +2,8 @@ * $Author$ * $Date$ * $Revision$ - * - * Copyright (C) 2003-2005 Miguel, Jmol Development, www.jmol.org + * Copyright (C) 2003-2006 Miguel, Jmol Development, www.jmol.org * * Contact: mi...@jm... * @@ -676,33 +675,6 @@ colorManager.setElementColor(elementNumber, color); } - void setColorDotsSaddle(Color color) { - colorManager.setColorDotsSaddle(color); - setShapeProperty(JmolConstants.SHAPE_DOTS, "dotssaddle", color); - } - - short getColixDotsSaddle() { - return colorManager.colixDotsSaddle; - } - - void setColorDotsConvex(Color color) { - colorManager.setColorDotsConvex(color); - setShapeProperty(JmolConstants.SHAPE_DOTS, "dotsconvex", color); - } - - short getColixDotsConvex() { - return colorManager.colixDotsConvex; - } - - void setColorDotsConcave(Color color) { - colorManager.setColorDotsConcave(color); - setShapeProperty(JmolConstants.SHAPE_DOTS, "dotsconcave", color); - } - - short getColixDotsConcave() { - return colorManager.colixDotsConcave; - } - float getVectorScale() { return transformManager.vectorScale; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mig...@us...> - 2006-03-13 02:57:29
|
Revision: 4585 Author: migueljmol Date: 2006-03-12 18:57:25 -0800 (Sun, 12 Mar 2006) ViewCVS: http://svn.sourceforge.net/jmol/?rev=4585&view=rev Log Message: ----------- more pruning and getting rid of java.awt.Color Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/ColorManager.java trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/ColorManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/ColorManager.java 2006-03-13 02:23:19 UTC (rev 4584) +++ trunk/Jmol/src/org/jmol/viewer/ColorManager.java 2006-03-13 02:57:25 UTC (rev 4585) @@ -44,8 +44,8 @@ System.out.println("setting color scheme to:" + colorScheme); if (colorScheme.equals("jmol")) { argbsCpk = JmolConstants.argbsCpk; - viewer.setColorBackground(Color.black); - viewer.setShapeColorProperty(JmolConstants.SHAPE_DOTS, null); + viewer.setColorBackground("black"); + viewer.setShapeColorProperty(JmolConstants.SHAPE_DOTS, 0); } else if (colorScheme.equals("rasmol")) { copyArgbsCpk(); int argb = JmolConstants.argbsCpkRasmol[0] | 0xFF000000; @@ -57,9 +57,8 @@ argb |= 0xFF000000; argbsCpk[atomNo] = argb; } - viewer.setColorBackground(Color.black); - setMeasurementColix(Graphics3D.WHITE); - viewer.setShapeColorProperty(JmolConstants.SHAPE_DOTS, null); + viewer.setColorBackground("black"); + viewer.setShapeColorProperty(JmolConstants.SHAPE_DOTS, 0); } else { System.out.println("unrecognized color scheme"); return; @@ -87,22 +86,10 @@ } short colixRubberband = Graphics3D.HOTPINK; - - void setColorRubberband(Color color) { - if (color == null) - color = Color.pink; - colixRubberband = Graphics3D.getColix(color); + void setRubberbandArgb(int argb) { + colixRubberband = (argb == 0 ? 0 : Graphics3D.getColix(argb)); } - short colixMeasurement = 0; - void setMeasurementArgb(int argb) { - colixMeasurement = Graphics3D.getColix(argb); - } - - void setMeasurementColix(short colix) { - colixMeasurement = colix; - } - short colixBackground = Graphics3D.BLACK; void setBackgroundArgb(int argb) { colixBackground = Graphics3D.getColix(argb | 0xFF000000); @@ -297,14 +284,13 @@ flushCaches(); } - void setElementColor(int elementNumber, Color color) { - int argb; - if (color == null) { + void setElementArgb(int elementNumber, int argb) { + if (argb == 0) { if (argbsCpk == JmolConstants.argbsCpk) return; argb = JmolConstants.argbsCpk[elementNumber]; } else - argb = color.getRGB() | 0xFF000000; + argb |= 0xFF000000; if (argbsCpk == JmolConstants.argbsCpk) copyArgbsCpk(); argbsCpk[elementNumber] = argb; Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-13 02:23:19 UTC (rev 4584) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-13 02:57:25 UTC (rev 4585) @@ -1545,6 +1545,14 @@ return new Color(statement[itoken].intValue); } + int getArgbParam(int itoken) throws ScriptException { + if (itoken >= statementLength) + colorExpected(); + if (statement[itoken].tok != Token.colorRGB) + colorExpected(); + return statement[itoken].intValue; + } + Color getColorOrNoneParam(int itoken) throws ScriptException { if (itoken >= statementLength) colorExpected(); @@ -1555,12 +1563,22 @@ return null; } + int getArgbOrNoneParam(int itoken) throws ScriptException { + if (itoken >= statementLength) + colorExpected(); + if (statement[itoken].tok == Token.colorRGB) + return statement[itoken].intValue; + if (statement[itoken].tok != Token.none) + colorExpected(); + return 0; + } + void background() throws ScriptException { if (statementLength < 2 || statementLength > 3) badArgumentCount(); int tok = statement[1].tok; if (tok == Token.colorRGB) - viewer.setColorBackground(getColorParam(1)); + viewer.setBackgroundArgb(getArgbParam(1)); else viewer.setShapeProperty(getShapeType(tok), "bgcolor", getColorOrNoneParam(2)); @@ -1598,10 +1616,10 @@ colorObject(Token.atom, 1); break; case Token.rubberband: - viewer.setColorRubberband(getColorParam(2)); + viewer.setRubberbandArgb(getArgbParam(2)); break; case Token.background: - viewer.setColorBackground(getColorParam(2)); + viewer.setBackgroundArgb(getArgbParam(2)); break; case Token.identifier: case Token.hydrogen: @@ -1626,14 +1644,14 @@ } for (int i = JmolConstants.elementNames.length; --i >= 0;) { if (str.equalsIgnoreCase(JmolConstants.elementNames[i])) { - viewer.setElementColor(i, getColorParam(2)); + viewer.setElementArgb(i, getArgbParam(2)); return; } } for (int i = JmolConstants.alternateElementNames.length; --i >= 0;) { if (str.equalsIgnoreCase(JmolConstants.alternateElementNames[i])) { - viewer.setElementColor(JmolConstants.alternateElementNumbers[i], - getColorParam(2)); + viewer.setElementArgb(JmolConstants.alternateElementNumbers[i], + getArgbParam(2)); return; } } Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-13 02:23:19 UTC (rev 4584) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-13 02:57:25 UTC (rev 4585) @@ -663,16 +663,16 @@ return colorManager.getColixSelection(); } - void setColorRubberband(Color color) { - colorManager.setColorRubberband(color); + void setRubberbandArgb(int argb) { + colorManager.setRubberbandArgb(argb); } short getColixRubberband() { return colorManager.colixRubberband; } - void setElementColor(int elementNumber, Color color) { - colorManager.setElementColor(elementNumber, color); + void setElementArgb(int elementNumber, int argb) { + colorManager.setElementArgb(elementNumber, argb); } float getVectorScale() { @@ -700,24 +700,11 @@ return g3d.getColixArgb(colorManager.colixBackground); } - public void setColorBackground(Color bg) { - setBackgroundArgb(bg == null ? 0 : bg.getRGB()); - refresh(0, "Viewer:setCOlorBackground()"); - } - - public Color getColorBackground() { - return new Color(getBackgroundArgb()); - } - public void setColorBackground(String colorName) { colorManager.setColorBackground(colorName); refresh(0, "Viewer:setColorBackground()"); } - Color getColorFromString(String colorName) { - return Graphics3D.getColorFromString(colorName); - } - int getArgbFromString(String colorName) { return Graphics3D.getArgbFromString(colorName); } @@ -1962,10 +1949,6 @@ refresh(0, "Viewer:setShapeProperty()"); } - void setShapeColorProperty(int shapeType, Color color) { - setShapeProperty(shapeType, "color", color); - } - void setShapeColorProperty(int shapeType, int argb) { setShapeProperty(shapeType, "color", argb == 0 ? null : new Color(argb|0xFF000000)); @@ -1980,24 +1963,12 @@ return modelManager.getShapeProperty(shapeType, propertyName, index); } - Color getShapePropertyAsColor(int shapeID, String propertyName) { - return (Color) getShapeProperty(shapeID, propertyName); - } - int getShapePropertyAsInt(int shapeID, String propertyName) { Object value = getShapeProperty(shapeID, propertyName); return value == null || !(value instanceof Integer) ? Integer.MIN_VALUE : ((Integer) value).intValue(); } - Color getColorShape(int shapeID) { - return (Color) getShapeProperty(shapeID, "color"); - } - - short getColixShape(int shapeID) { - return Graphics3D.getColix(getColorShape(shapeID)); - } - int getShapeID(String shapeName) { for (int i = JmolConstants.SHAPE_MAX; --i >= 0;) if (JmolConstants.shapeClassBases[i].equals(shapeName)) @@ -2007,10 +1978,6 @@ throw new NullPointerException(msg); } - short getColix(Color color) { - return Graphics3D.getColix(color); - } - short getColix(Object object) { return Graphics3D.getColix(object); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2006-03-13 05:02:14
|
Revision: 4587 Author: hansonr Date: 2006-03-12 21:02:09 -0800 (Sun, 12 Mar 2006) ViewCVS: http://svn.sourceforge.net/jmol/?rev=4587&view=rev Log Message: ----------- introduces spin [drawObject] Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-13 03:37:51 UTC (rev 4586) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-13 05:02:09 UTC (rev 4587) @@ -34,8 +34,8 @@ import java.util.Hashtable; import javax.vecmath.AxisAngle4f; import javax.vecmath.Matrix3f; -import javax.vecmath.Point3f; + class Context { String filename; @@ -3014,6 +3014,12 @@ } void setSpin() throws ScriptException { + if (statement[2].tok == Token.leftsquare && statement[3].tok == Token.identifier) { + checkStatementLength(6); //set spin [ id ] N + String axisID = (String)statement[3].value; + viewer.setSpinAxis(axisID, intParameter(5)); + return; + } checkLength4(); int value = intParameter(3); switch (statement[2].tok) { @@ -3914,4 +3920,5 @@ propertyName, propertyValue); } } -} + +} \ No newline at end of file Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-13 03:37:51 UTC (rev 4586) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-13 05:02:09 UTC (rev 4587) @@ -1078,6 +1078,7 @@ void clear() { repaintManager.clearAnimation(); transformManager.clearVibration(); + transformManager.clearSpin(); modelManager.setClientFile(null, null, null); selectionManager.clearSelection(); clearMeasurements(); @@ -2805,4 +2806,21 @@ return statusManager.getSyncMode(); } + public void setSpinAxis(String axisID, int degrees) { + Point3f rotCenter = modelManager.getSpinCenter(axisID, repaintManager.displayModelIndex); + Vector3f rotAxis = modelManager.getSpinAxis(axisID, repaintManager.displayModelIndex); + if (rotCenter == null || rotAxis == null) return; + setSpinCenter(rotCenter); + System.out.println("setSpinAxis " + axisID + " " + rotAxis + " " + degrees); + setSpin(rotAxis, degrees); + } + + void setSpinCenter(Point3f center) { + transformManager.setSpinCenter(center); + } + + void setSpin(Vector3f axis, int degrees) { + transformManager.setSpin(axis, degrees); + } + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ni...@us...> - 2006-03-13 05:31:52
|
Revision: 4588 Author: nicove Date: 2006-03-12 21:31:44 -0800 (Sun, 12 Mar 2006) ViewCVS: http://svn.sourceforge.net/jmol/?rev=4588&view=rev Log Message: ----------- Fixed warnings Modified Paths: -------------- trunk/Jmol/src/org/jmol/applet/Jmol.java trunk/Jmol/src/org/jmol/viewer/Draw.java trunk/Jmol/src/org/jmol/viewer/Eval.java Modified: trunk/Jmol/src/org/jmol/applet/Jmol.java =================================================================== --- trunk/Jmol/src/org/jmol/applet/Jmol.java 2006-03-13 05:02:09 UTC (rev 4587) +++ trunk/Jmol/src/org/jmol/applet/Jmol.java 2006-03-13 05:31:44 UTC (rev 4588) @@ -669,7 +669,7 @@ public void sendSyncScript(String script, String appletName) { //how to get rid of this warning? - RMH - Hashtable h = appletRegistry.htRegistry; + Hashtable h = JmolAppletRegistry.htRegistry; Enumeration keys = h.keys(); while (keys.hasMoreElements()) { String theApplet = (String)keys.nextElement(); Modified: trunk/Jmol/src/org/jmol/viewer/Draw.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Draw.java 2006-03-13 05:02:09 UTC (rev 4587) +++ trunk/Jmol/src/org/jmol/viewer/Draw.java 2006-03-13 05:31:44 UTC (rev 4588) @@ -144,7 +144,7 @@ currentMesh.ptCenters = new Point3f[modelCount]; currentMesh.visibilityFlags = new int[modelCount]; for (int iModel = 0; iModel < modelCount; iModel++) { - int n0 = currentMesh.vertexCount; + //int n0 = currentMesh.vertexCount; nPoly = setVerticesAndPolygons(iModel, nPoly); currentMesh.setCenter(iModel); } Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-13 05:02:09 UTC (rev 4587) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-13 05:31:44 UTC (rev 4588) @@ -2682,7 +2682,7 @@ viewer.setShapeProperty(shapeType, "font", font3d); } - /***************************************************************************** + /* *************************************************************************** * ============================================================== SET * implementations * ============================================================== @@ -3163,7 +3163,7 @@ viewer.setPickingMode(pickingMode); } - /***************************************************************************** + /* *************************************************************************** * ============================================================== SHOW * implementations * ============================================================== This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2006-03-13 07:31:47
|
Revision: 4591 Author: hansonr Date: 2006-03-12 23:31:41 -0800 (Sun, 12 Mar 2006) ViewCVS: http://svn.sourceforge.net/jmol/?rev=4591&view=rev Log Message: ----------- allows rotate [line1] 30 center [triangle1] hope I got that sychronized right. Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Draw.java trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/TransformManager.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/Draw.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Draw.java 2006-03-13 05:32:41 UTC (rev 4590) +++ trunk/Jmol/src/org/jmol/viewer/Draw.java 2006-03-13 07:31:41 UTC (rev 4591) @@ -39,17 +39,23 @@ int nbitsets = 0; int ncoord = 0; int nidentifiers = 0; + float newScale; boolean isFixed = false; - float newScale; + boolean isVisible = true; + void setProperty(String propertyName, Object value, BitSet bs) { - System.out.println("draw "+propertyName+" "+value); + //System.out.println("draw "+propertyName+" "+value); if ("fixed" == propertyName) { isFixed = ((Boolean)value).booleanValue(); return; } + if ("off" == propertyName) { + isVisible = false; + } + if ("points" == propertyName) { ipt = npoints = ncoord = nbitsets = nidentifiers = 0; newScale = ((Integer)value).floatValue()/100; @@ -111,7 +117,7 @@ currentMesh.scaleDrawing(newScale); currentMesh.initialize(); currentMesh.setAxes(); - currentMesh.visible = true; + currentMesh.visible = isVisible; } npoints = -1; //for later scaling return; @@ -119,6 +125,7 @@ if ("meshID" == propertyName) { npoints = -1; isFixed = false; + isVisible = true; } super.setProperty(propertyName, value, bs); Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-13 05:32:41 UTC (rev 4590) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-13 07:31:41 UTC (rev 4591) @@ -1590,6 +1590,17 @@ // but someplace in the rasmol doc it makes reference to the geometric // center as the default for rotations. who knows. void center() throws ScriptException { + //System.out.println("center"+statement[1]); + //System.out.println(statement[2]); + + if (statement[2].tok == Token.keyword) { + //center [ id ] + String axisID = (String)statement[2].value; + //System.out.println("center"+axisID); + viewer.setDrawCenter(axisID); + return; + } + viewer.setCenterBitSet(statementLength == 1 ? null : expression(statement, 1)); } @@ -1914,6 +1925,12 @@ floatParameter(4), floatParameter(5)); return; } + if (statement[1].tok == Token.leftsquare && statement[2].tok == Token.identifier) { + checkStatementLength(5); //rotate [ id ] N + String axisID = (String)statement[2].value; + viewer.rotateAxis(axisID, intParameter(4)); + return; + } checkLength3(); float degrees = floatParameter(2); switch (statement[1].tok) { @@ -2682,7 +2699,7 @@ viewer.setShapeProperty(shapeType, "font", font3d); } - /* *************************************************************************** + /* **************************************************************************** * ============================================================== SET * implementations * ============================================================== @@ -3163,7 +3180,7 @@ viewer.setPickingMode(pickingMode); } - /* *************************************************************************** + /* **************************************************************************** * ============================================================== SHOW * implementations * ============================================================== Modified: trunk/Jmol/src/org/jmol/viewer/TransformManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/TransformManager.java 2006-03-13 05:32:41 UTC (rev 4590) +++ trunk/Jmol/src/org/jmol/viewer/TransformManager.java 2006-03-13 07:31:41 UTC (rev 4591) @@ -84,7 +84,7 @@ synchronized void rotateXRadians(float angleRadians) { matrixTemp3.rotX(angleRadians); matrixRotate.mul(matrixTemp3, matrixRotate); - // System.out.println("rotateXRadius matrixRotate=\n" + matrixRotate); + //System.out.println("rotateXRadius matrixRotate=\n" + matrixRotate); } synchronized void rotateYRadians(float angleRadians) { if (axesOrientationRasmol) @@ -107,38 +107,59 @@ matrixRotate.mul(matrixTemp3, matrixRotate); } - void rotate(AxisAngle4f axisAngle) { + synchronized void rotate(AxisAngle4f axisAngle) { matrixTemp3.setIdentity(); matrixTemp3.set(axisAngle); matrixRotate.mul(matrixTemp3, matrixRotate); } + void rotateAxisInternal(Vector3f axis, int degrees) { + AxisAngle4f rot = new AxisAngle4f(); + float radians = degrees * radiansPerDegree; + rot.set(axis, 0); + rotateAxisAngleRadiansInternal(rot, radians); + } + synchronized void rotateAxisAngleRadiansInternal(AxisAngle4f axisAngle, float radians) { AxisAngle4f currentRotation = new AxisAngle4f(); currentRotation.set(matrixRotate); + //System.out.println("new0: "+matrixRotate); + //System.out.println("currentRotation:"+currentRotation); + //check for no rotation - if (Float.isNaN(currentRotation.angle)) { + if (Float.isNaN(currentRotation.angle) || + currentRotation.x == 0.0f && + currentRotation.x == 0.0f && + currentRotation.x == 0.0f) { matrixRotate.setIdentity(); currentRotation.set(1, 0, 0, 0); } + //System.out.println("currentRotation:"+currentRotation); + //undo current rotation matrixRotate.setIdentity(); + //System.out.println("rotateAxisAngleRadiansInternal"+axisAngle+" "+matrixTemp3+"\n"+matrixRotate+radians); //apply internal rotation axisangleT.set(axisAngle.x, axisAngle.y, axisAngle.z, radians); + //System.out.println(axisangleT); matrixTemp3.setIdentity(); matrixTemp3.set(axisangleT); matrixRotate.mul(matrixTemp3, matrixRotate); - + //System.out.println("new1: "+matrixRotate); //rerotation to old rotation matrixTemp3.set(currentRotation); + //System.out.println("currentRotation"+currentRotation); + //System.out.println("new2: "+matrixRotate); matrixRotate.mul(matrixTemp3, matrixRotate); - } + //System.out.println("new3: "+matrixRotate); + } + void rotateAxisAngle(float x, float y, float z, float degrees) { axisangleT.set(x, y, z, degrees * radiansPerDegree); rotate(axisangleT); @@ -769,21 +790,22 @@ void setSpinTranslation() { - System.out.println("\n\nsetSpinTransl xyTrans:" +xSpinTranslation+" "+ySpinTranslation + "\nxyCenter:"+xSpinCenter + " "+ySpinCenter); - System.out.println(spinOn +", "+iHaveSpinTranslation + " and "+iHaveSpinCenter); + //System.out.println("\n\nsetSpinTransl xyTrans:" +xSpinTranslation+" "+ySpinTranslation + "\nxyCenter:"+xSpinCenter + " "+ySpinCenter); + //System.out.println(spinOn +", "+iHaveSpinTranslation + " and "+iHaveSpinCenter); - System.out.println(spinCenter); + //System.out.println(spinCenter); if (spinAxis == null) return; xSpinTranslation = 0; ySpinTranslation = 0; transformPoint(spinCenter); + if (!iHaveSpinCenter) { // get the basis x,y position xSpinCenter = newXPt; ySpinCenter = newYPt; - System.out.println("basis:"+xSpinCenter+" "+ySpinCenter); + //System.out.println("basis:"+xSpinCenter+" "+ySpinCenter); iHaveSpinCenter = true; return; } @@ -791,7 +813,7 @@ xSpinTranslation = xSpinCenter - newXPt; ySpinTranslation = ySpinCenter - newYPt; iHaveSpinTranslation = true; - System.out.println("setSpinTrans: "+xSpinTranslation+" "+ySpinTranslation+"\n\n"); + //System.out.println("setSpinTrans: "+xSpinTranslation+" "+ySpinTranslation+"\n\n"); } boolean increaseRotationRadius; @@ -825,7 +847,7 @@ matrixTemp.set(stereoFrame ? matrixStereo : matrixRotate); matrixTransform.mul(matrixTemp, matrixTransform); - //System.out.println("transformPoint3 " + matrixTransform); + //System.out.println("stereoFrame? transformPoint3 " + stereoFrame+ " "+matrixRotate+" "+matrixStereo); // matrixTransform.mul(matrixRotate, matrixTransform); @@ -919,6 +941,16 @@ newXPt = point3fScreenTemp.x + xTranslation + xSpinTranslation; newYPt = point3fScreenTemp.y + yTranslation + ySpinTranslation; + + if (Float.isNaN(newXPt)) { + //System.out.println("point3fScreenTemp.x xTranslation xSpinTranslation\n"+point3fScreenTemp.x +" "+xTranslation +" "+xSpinTranslation); + + System.out.println("NaN found in transformPoint "); + //System.out.println("Point3fScreenTemp"+point3fScreenTemp); + //System.out.println("MatrixTransform"+matrixTransform); + } + + point3iScreenTemp.x = (int)(newXPt); point3iScreenTemp.y = (int)(newYPt); //System.out.println("transforming"+pointAngstroms + "\nto " + point3iScreenTemp+"\nusing "+xSpinTranslation + " " + ySpinTranslation); @@ -942,11 +974,11 @@ screen.z = z; if (perspectiveDepth) { float perspectiveFactor = cameraDistanceFloat / z; - screen.x = screen.x * perspectiveFactor + xTranslation; - screen.y = screen.y * perspectiveFactor + yTranslation; + screen.x = screen.x * perspectiveFactor + xSpinTranslation + xTranslation; + screen.y = screen.y * perspectiveFactor + ySpinTranslation + yTranslation; } else { - screen.x += xTranslation; - screen.y += yTranslation; + screen.x += xSpinTranslation + xTranslation; + screen.y += ySpinTranslation + yTranslation; } } @@ -977,8 +1009,8 @@ point3fScreenTemp.x *= perspectiveFactor; point3fScreenTemp.y *= perspectiveFactor; } - point3iScreenTemp.x = (int)(point3fScreenTemp.x + xTranslation); - point3iScreenTemp.y = (int)(point3fScreenTemp.y + yTranslation); + point3iScreenTemp.x = (int)(point3fScreenTemp.x + xSpinTranslation + xTranslation); + point3iScreenTemp.y = (int)(point3fScreenTemp.y + ySpinTranslation + yTranslation); return point3iScreenTemp; } @@ -1050,17 +1082,17 @@ void setSpinX(int degrees) { spinX = degrees; spinAxis = null; - // System.out.println("spinX=" + spinX); + //System.out.println("spinX=" + spinX); } void setSpinY(int degrees) { spinY = degrees; spinAxis = null; - // System.out.println("spinY=" + spinY); + //System.out.println("spinY=" + spinY); } void setSpinZ(int degrees) { spinZ = degrees; spinAxis = null; - // System.out.println("spinZ=" + spinZ); + //System.out.println("spinZ=" + spinZ); } void setSpinFps(int value) { if (value <= 0) @@ -1068,7 +1100,7 @@ else if (value > 50) value = 50; spinFps = value; - // System.out.println("spinFps=" + spinFps); + //System.out.println("spinFps=" + spinFps); } void clearSpin() { @@ -1096,7 +1128,7 @@ ySpinTranslation = 0; } } - // System.out.println("spinOn=" + spinOn); + //System.out.println("spinOn=" + spinOn); } class SpinThread extends Thread implements Runnable { @@ -1139,7 +1171,7 @@ try { Thread.sleep(sleepTime); } catch (InterruptedException e) { - // System.out.println("interrupt caught!"); + System.out.println("interrupt caught!"); break; } } Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-13 05:32:41 UTC (rev 4590) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-13 07:31:41 UTC (rev 4591) @@ -2815,6 +2815,20 @@ setSpin(rotAxis, degrees); } + public void rotateAxis(String axisID, int degrees) { + Point3f rotCenter = modelManager.getSpinCenter(axisID, repaintManager.displayModelIndex); + Vector3f rotAxis = modelManager.getSpinAxis(axisID, repaintManager.displayModelIndex); + if (rotCenter == null || rotAxis == null) return; + setCenter(rotCenter); + transformManager.rotateAxisInternal(rotAxis, degrees); + } + + public void setDrawCenter(String axisID) { + Point3f rotCenter = modelManager.getSpinCenter(axisID, repaintManager.displayModelIndex); + if (rotCenter == null) return; + setCenter(rotCenter); + } + void setSpinCenter(Point3f center) { transformManager.setSpinCenter(center); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mig...@us...> - 2006-03-13 13:32:54
|
Revision: 4594 Author: migueljmol Date: 2006-03-13 05:32:47 -0800 (Mon, 13 Mar 2006) ViewCVS: http://svn.sourceforge.net/jmol/?rev=4594&view=rev Log Message: ----------- Moved strandCount from Viewer to Strands shape Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/MeshRibbonRenderer.java trunk/Jmol/src/org/jmol/viewer/Strands.java trunk/Jmol/src/org/jmol/viewer/StrandsRenderer.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-13 13:20:18 UTC (rev 4593) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-13 13:32:47 UTC (rev 4594) @@ -2,11 +2,10 @@ * $Author$ * $Date$ * $Revision$ - * - * Copyright (C) 2003-2005 The Jmol Development Team + * Copyright (C) 2003-2006 Miguel, Jmol Development, www.jmol.org * - * Contact: jmo...@li... + * Contact: mi...@jm... * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -3007,7 +3006,8 @@ if (strandCount < 0 || strandCount > 20) numberOutOfRange(); } - viewer.setStrandsCount(strandCount); + viewer.setShapeProperty(JmolConstants.SHAPE_STRANDS, + "strandCount", new Integer(strandCount)); } void setSpecular() throws ScriptException { @@ -3938,4 +3938,4 @@ } } -} \ No newline at end of file +} Modified: trunk/Jmol/src/org/jmol/viewer/MeshRibbonRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/MeshRibbonRenderer.java 2006-03-13 13:20:18 UTC (rev 4593) +++ trunk/Jmol/src/org/jmol/viewer/MeshRibbonRenderer.java 2006-03-13 13:32:47 UTC (rev 4594) @@ -65,7 +65,9 @@ this.myVisibilityFlag = myVisibilityFlag; MeshRibbon.Schain strandsChain = (MeshRibbon.Schain)mpspolymer; - strandCount = viewer.getStrandsCount(); + // no way to do this now that strandCount is part of the strands object + // strandCount = viewer.getStrandsCount(); + strandCount = 7; strandSeparation = (strandCount <= 1 ) ? 0 : 1f / (strandCount - 1); baseOffset = ((strandCount & 1) == 0) ? strandSeparation / 2 : strandSeparation; Modified: trunk/Jmol/src/org/jmol/viewer/Strands.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Strands.java 2006-03-13 13:20:18 UTC (rev 4593) +++ trunk/Jmol/src/org/jmol/viewer/Strands.java 2006-03-13 13:32:47 UTC (rev 4594) @@ -3,9 +3,9 @@ * $Date$ * $Revision$ * - * Copyright (C) 2003-2005 The Jmol Development Team + * Copyright (C) 2003-2006 Miguel, Jmol Development, www.jmol.org * - * Contact: jmo...@li... + * Contact: mi...@jm... * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -23,6 +23,7 @@ */ package org.jmol.viewer; +import java.util.BitSet; class Strands extends Mps { @@ -32,10 +33,28 @@ * http://sgce.cbse.uab.edu/carson/papers/ribbons86/ribbons86.html *==============================================================*/ + int strandCount = 5; + Mps.Mpspolymer allocateMpspolymer(Polymer polymer) { return new Schain(polymer); } + void setProperty(String propertyName, Object value, BitSet bs) { + initialize(); + if ("strandCount" == propertyName) { + if (value instanceof Integer) { + int count = ((Integer)value).intValue(); + if (count < 0) + count = 0; + else if (count > 20) + count = 20; + strandCount = count; + return; + } + } + super.setProperty(propertyName, value, bs); + } + class Schain extends Mps.Mpspolymer { Schain(Polymer polymer) { Modified: trunk/Jmol/src/org/jmol/viewer/StrandsRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/StrandsRenderer.java 2006-03-13 13:20:18 UTC (rev 4593) +++ trunk/Jmol/src/org/jmol/viewer/StrandsRenderer.java 2006-03-13 13:32:47 UTC (rev 4594) @@ -3,9 +3,9 @@ * $Date$ * $Revision$ * - * Copyright (C) 2003-2005 The Jmol Development Team + * Copyright (C) 2003-2006 Miguel, Jmol Development, www.jmol.org * - * Contact: jmo...@li... + * Contact: mi...@jm... * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -63,7 +63,7 @@ Strands.Schain schain = (Strands.Schain)mpspolymer; this.myVisibilityFlag = myVisibilityFlag; - strandCount = viewer.getStrandsCount(); + strandCount = strands.strandCount; strandSeparation = (strandCount <= 1 ) ? 0 : 1f / (strandCount - 1); baseOffset = ((strandCount & 1) == 0) ? strandSeparation / 2 : strandSeparation; Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-13 13:20:18 UTC (rev 4593) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-13 13:32:47 UTC (rev 4594) @@ -1983,20 +1983,6 @@ return Graphics3D.getColix(object); } - int strandsCount = 5; - - void setStrandsCount(int strandsCount) { - if (strandsCount < 0) - strandsCount = 0; - if (strandsCount > 20) - strandsCount = 20; - this.strandsCount = strandsCount; - } - - int getStrandsCount() { - return strandsCount; - } - boolean rasmolHydrogenSetting = true; void setRasmolHydrogenSetting(boolean b) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mig...@us...> - 2006-03-13 13:57:35
|
Revision: 4595 Author: migueljmol Date: 2006-03-13 05:57:28 -0800 (Mon, 13 Mar 2006) ViewCVS: http://svn.sourceforge.net/jmol/?rev=4595&view=rev Log Message: ----------- isolated color options for axes, bbcage, and uccage Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Axes.java trunk/Jmol/src/org/jmol/viewer/AxesRenderer.java trunk/Jmol/src/org/jmol/viewer/Bbcage.java trunk/Jmol/src/org/jmol/viewer/BbcageRenderer.java trunk/Jmol/src/org/jmol/viewer/ColorManager.java trunk/Jmol/src/org/jmol/viewer/Uccage.java trunk/Jmol/src/org/jmol/viewer/UccageRenderer.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/Axes.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Axes.java 2006-03-13 13:32:47 UTC (rev 4594) +++ trunk/Jmol/src/org/jmol/viewer/Axes.java 2006-03-13 13:57:28 UTC (rev 4595) @@ -3,9 +3,9 @@ * $Date$ * $Revision$ * - * Copyright (C) 2002-2005 The Jmol Development Team + * Copyright (C) 2002-2006 Miguel, Jmol Development, www.jmol.org * - * Contact: jmo...@li... + * Contact: mi...@jm... * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -59,8 +59,6 @@ axisPoint.z *= corner.z; axisPoint.add(originPoint); - colix = viewer.getColixAxes(); - font3d = g3d.getFont3D(JmolConstants.AXES_DEFAULT_FONTSIZE); } } Modified: trunk/Jmol/src/org/jmol/viewer/AxesRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/AxesRenderer.java 2006-03-13 13:32:47 UTC (rev 4594) +++ trunk/Jmol/src/org/jmol/viewer/AxesRenderer.java 2006-03-13 13:57:28 UTC (rev 4595) @@ -3,9 +3,9 @@ * $Date$ * $Revision$ * - * Copyright (C) 2002-2005 The Jmol Development Team + * Copyright (C) 2002-2006 Miguel, Jmol Development, www.jmol.org * - * Contact: jmo...@li... + * Contact: mi...@jm... * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -53,6 +53,8 @@ if (mad >= 20) widthPixels = viewer.scaleToScreen(originScreen.z, mad); short colix = axes.colix; + if (colix == 0) + colix = Graphics3D.OLIVE; for (int i = 6; --i >= 0; ) { if (mad < 0) g3d.drawDottedLine(colix, originScreen, axisScreens[i]); Modified: trunk/Jmol/src/org/jmol/viewer/Bbcage.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Bbcage.java 2006-03-13 13:32:47 UTC (rev 4594) +++ trunk/Jmol/src/org/jmol/viewer/Bbcage.java 2006-03-13 13:57:28 UTC (rev 4595) @@ -3,9 +3,9 @@ * $Date$ * $Revision$ * - * Copyright (C) 2002-2005 The Jmol Development Team + * Copyright (C) 2002-2006 Miguel, Jmol Development, www.jmol.org * - * Contact: jmo...@li... + * Contact: mi...@jm... * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -22,6 +22,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */ package org.jmol.viewer; +import org.jmol.g3d.Graphics3D; class Bbcage extends SelectionIndependentShape { @@ -29,8 +30,4 @@ final static byte edges[] = {0,1, 0,2, 0,4, 1,3, 1,5, 2,3, 2,6, 3,7, 4,5, 4,6, 5,7, 6,7}; - void initShape() { - colix = viewer.getColixAxes(); // do this, or it will be BLACK - } - } Modified: trunk/Jmol/src/org/jmol/viewer/BbcageRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/BbcageRenderer.java 2006-03-13 13:32:47 UTC (rev 4594) +++ trunk/Jmol/src/org/jmol/viewer/BbcageRenderer.java 2006-03-13 13:57:28 UTC (rev 4595) @@ -3,9 +3,9 @@ * $Date$ * $Revision$ * - * Copyright (C) 2002-2005 The Jmol Development Team + * Copyright (C) 2002-2006 Miguel, Jmol Development, www.jmol.org * - * Contact: jmo...@li... + * Contact: mi...@jm... * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -41,7 +41,10 @@ short mad = bbcage.mad; if (mad == 0) return; - render(viewer, g3d, mad, bbcage.colix, frame.bboxVertices, screens); + short colix = bbcage.colix; + if (colix == 0) + colix = Graphics3D.OLIVE; + render(viewer, g3d, mad, colix, frame.bboxVertices, screens); } static void render(Viewer viewer, Graphics3D g3d, Modified: trunk/Jmol/src/org/jmol/viewer/ColorManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/ColorManager.java 2006-03-13 13:32:47 UTC (rev 4594) +++ trunk/Jmol/src/org/jmol/viewer/ColorManager.java 2006-03-13 13:57:28 UTC (rev 4595) @@ -96,20 +96,6 @@ g3d.setBackground(colixBackground); } - Color colorAxes = new Color(128, 128, 0); - short colixAxes = Graphics3D.OLIVE; - void setColorAxes(Color color) { - colorAxes = color; - colixAxes = Graphics3D.getColix(color); - } - - Color colorAxesText = colorAxes; - short colixAxesText = Graphics3D.OLIVE; - void setColorAxesText(Color color) { - colorAxesText = color; - colixAxesText = Graphics3D.getColix(color); - } - void setColorBackground(String colorName) { if (colorName != null && colorName.length() > 0) setBackgroundArgb(Graphics3D.getArgbFromString(colorName)); Modified: trunk/Jmol/src/org/jmol/viewer/Uccage.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Uccage.java 2006-03-13 13:32:47 UTC (rev 4594) +++ trunk/Jmol/src/org/jmol/viewer/Uccage.java 2006-03-13 13:57:28 UTC (rev 4595) @@ -3,9 +3,9 @@ * $Date$ * $Revision$ * - * Copyright (C) 2002-2005 The Jmol Development Team + * Copyright (C) 2003-2006 Miguel, Jmol Development, www.jmol.org * - * Contact: jmo...@li... + * Contact: mi...@jm... * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -32,7 +32,6 @@ Point3f[] vertices; void initShape() { - colix = viewer.getColixAxes(); // do this, or it will be BLACK float[] notionalUnitcell = frame.notionalUnitcell; hasUnitcell = notionalUnitcell != null; Modified: trunk/Jmol/src/org/jmol/viewer/UccageRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/UccageRenderer.java 2006-03-13 13:32:47 UTC (rev 4594) +++ trunk/Jmol/src/org/jmol/viewer/UccageRenderer.java 2006-03-13 13:57:28 UTC (rev 4595) @@ -3,9 +3,9 @@ * $Date$ * $Revision$ * - * Copyright (C) 2002-2005 The Jmol Development Team + * Copyright (C) 2002-2006 Miguel, Jmol Development, www.jmol.org * - * Contact: jmo...@li... + * Contact: mi...@jm... * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -25,6 +25,7 @@ import javax.vecmath.Point3i; import java.text.NumberFormat; +import org.jmol.g3d.Graphics3D; class UccageRenderer extends ShapeRenderer { @@ -45,9 +46,11 @@ void render() { Uccage uccage = (Uccage)shape; short mad = uccage.mad; - short colix = uccage.colix; if (mad == 0 || ! uccage.hasUnitcell) return; + short colix = uccage.colix; + if (colix == 0) + colix = Graphics3D.OLIVE; BbcageRenderer.render(viewer, g3d, mad, colix, frame.unitcellVertices, screens); /* Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-13 13:32:47 UTC (rev 4594) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-13 13:57:28 UTC (rev 4595) @@ -3,7 +3,7 @@ * $Date$ * $Revision$ * - * Copyright (C) 2003-2006 Miguel, Jmol Development, www.jmol.org + * Copyright (C) 2002-2006 Miguel, Jmol Development, www.jmol.org * * Contact: mi...@jm... * @@ -102,10 +102,12 @@ strJavaVendor = System.getProperty("java.vendor"); strOSName = System.getProperty("os.name"); strJavaVersion = System.getProperty("java.version"); - jvm11orGreater = (strJavaVersion.compareTo("1.1") >= 0 && - // Netscape on MacOS does not implement 1.1 event model - !(strJavaVendor.startsWith("Netscape") - && strJavaVersion.compareTo("1.1.5") <= 0 && "Mac OS".equals(strOSName))); + jvm11orGreater = + (strJavaVersion.compareTo("1.1") >= 0 && + // Netscape on MacOS does not implement 1.1 event model + !(strJavaVendor.startsWith("Netscape") && + strJavaVersion.compareTo("1.1.5") <= 0 && + "Mac OS".equals(strOSName))); jvm12orGreater = (strJavaVersion.compareTo("1.2") >= 0); jvm14orGreater = (strJavaVersion.compareTo("1.4") >= 0); @@ -138,7 +140,7 @@ } public static JmolViewer allocateViewer(Component awtComponent, - JmolAdapter modelAdapter) { + JmolAdapter modelAdapter) { return new Viewer(awtComponent, modelAdapter); } @@ -751,14 +753,6 @@ return colorManager.getColixHbondType(order); } - short getColixAxes() { - return colorManager.colixAxes; - } - - short getColixAxesText() { - return colorManager.colixAxesText; - } - short getColixFromPalette(float val, float rangeMin, float rangeMax, String palette) { return colorManager.getColixFromPalette(val, rangeMin, rangeMax, palette); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mig...@us...> - 2006-03-13 14:16:42
|
Revision: 4596 Author: migueljmol Date: 2006-03-13 06:16:39 -0800 (Mon, 13 Mar 2006) ViewCVS: http://svn.sourceforge.net/jmol/?rev=4596&view=rev Log Message: ----------- no more java.awt.Color in the viewer package! Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/ColorManager.java trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/ColorManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/ColorManager.java 2006-03-13 13:57:28 UTC (rev 4595) +++ trunk/Jmol/src/org/jmol/viewer/ColorManager.java 2006-03-13 14:16:39 UTC (rev 4596) @@ -25,8 +25,6 @@ import org.jmol.g3d.*; -import java.awt.Color; - class ColorManager { Viewer viewer; Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-13 13:57:28 UTC (rev 4595) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-13 14:16:39 UTC (rev 4596) @@ -27,14 +27,12 @@ import org.jmol.smiles.InvalidSmilesException; import java.io.*; -import java.awt.Color; import java.util.BitSet; import java.util.Vector; import java.util.Hashtable; import javax.vecmath.AxisAngle4f; import javax.vecmath.Matrix3f; - class Context { String filename; @@ -1535,15 +1533,6 @@ return atom.getProteinStructureType(); } - // note that text color names are mapped to color argb values at compile time - Color getColorParam(int itoken) throws ScriptException { - if (itoken >= statementLength) - colorExpected(); - if (statement[itoken].tok != Token.colorRGB) - colorExpected(); - return new Color(statement[itoken].intValue); - } - int getArgbParam(int itoken) throws ScriptException { if (itoken >= statementLength) colorExpected(); @@ -1552,16 +1541,6 @@ return statement[itoken].intValue; } - Color getColorOrNoneParam(int itoken) throws ScriptException { - if (itoken >= statementLength) - colorExpected(); - if (statement[itoken].tok == Token.colorRGB) - return new Color(statement[itoken].intValue); - if (statement[itoken].tok != Token.none) - colorExpected(); - return null; - } - int getArgbOrNoneParam(int itoken) throws ScriptException { if (itoken >= statementLength) colorExpected(); @@ -1579,8 +1558,8 @@ if (tok == Token.colorRGB) viewer.setBackgroundArgb(getArgbParam(1)); else - viewer.setShapeProperty(getShapeType(tok), "bgcolor", - getColorOrNoneParam(2)); + viewer.setShapePropertyArgb(getShapeType(tok), "bgcolor", + getArgbOrNoneParam(2)); } // mth - 2003 01 @@ -1634,22 +1613,24 @@ case Token.identifier: case Token.hydrogen: String str = (String) statement[1].value; - Color color = getColorOrNoneParam(2); + int argb = getArgbOrNoneParam(2); if (str.equalsIgnoreCase("dotsConvex")) { - viewer.setShapeProperty(JmolConstants.SHAPE_DOTS, "colorConvex", color); + viewer.setShapePropertyArgb(JmolConstants.SHAPE_DOTS, + "colorConvex", argb); return; } if (str.equalsIgnoreCase("dotsConcave")) { - viewer - .setShapeProperty(JmolConstants.SHAPE_DOTS, "colorConcave", color); + viewer.setShapePropertyArgb(JmolConstants.SHAPE_DOTS, + "colorConcave", argb); return; } if (str.equalsIgnoreCase("dotsSaddle")) { - viewer.setShapeProperty(JmolConstants.SHAPE_DOTS, "colorSaddle", color); + viewer.setShapePropertyArgb(JmolConstants.SHAPE_DOTS, + "colorSaddle", argb); return; } if (str.equalsIgnoreCase("selectionHalo")) { - viewer.setSelectionArgb(color == null ? 0 : color.getRGB()); + viewer.setSelectionArgb(argb); return; } for (int i = JmolConstants.elementNames.length; --i >= 0;) { @@ -1722,7 +1703,8 @@ notImplemented(itoken); return; case Token.colorRGB: - colorvalue = getColorParam(itoken); + int argb = getArgbParam(itoken); + colorvalue = argb == 0 ? null : new Integer(argb); break; default: invalidArgument(); Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-13 13:57:28 UTC (rev 4595) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-13 14:16:39 UTC (rev 4596) @@ -28,7 +28,6 @@ import java.awt.Graphics; import java.awt.Image; -import java.awt.Color; import java.awt.Dimension; import java.awt.Rectangle; import java.awt.Component; @@ -1944,9 +1943,17 @@ refresh(0, "Viewer:setShapeProperty()"); } + void setShapeProperty(int shapeID, String propertyName, int value) { + setShapeProperty(shapeID, propertyName, new Integer(value)); + } + + void setShapePropertyArgb(int shapeID, String propertyName, int argb) { + setShapeProperty(shapeID, propertyName, + argb == 0 ? null : new Integer(argb|0xFF000000)); + } + void setShapeColorProperty(int shapeType, int argb) { - setShapeProperty(shapeType, "color", - argb == 0 ? null : new Color(argb|0xFF000000)); + setShapePropertyArgb(shapeType, "color", argb); } Object getShapeProperty(int shapeType, String propertyName) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2006-03-13 20:18:53
|
Revision: 4598 Author: hansonr Date: 2006-03-13 12:18:29 -0800 (Mon, 13 Mar 2006) ViewCVS: http://svn.sourceforge.net/jmol/?rev=4598&view=rev Log Message: ----------- (1) fix tainted bug -- app not displaying shapes. (2) adds script command getProperty, primarily for debugging. Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Token.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-13 18:37:08 UTC (rev 4597) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-13 20:18:29 UTC (rev 4598) @@ -538,6 +538,9 @@ case Token.connect: connect(); break; + case Token.getproperty: + getProperty(); + break; // not implemented case Token.bond: @@ -2687,7 +2690,6 @@ */ void set() throws ScriptException { - System.out.println("setting:" + statement[1].value); switch (statement[1].tok) { case Token.axes: setAxes(); @@ -3920,4 +3922,11 @@ } } + void getProperty() { + String retValue = ""; + String property = (statement.length < 2 ? "" : (String)statement[1].value); + String param = (statement.length < 3 ? "" : (String)statement[2].value); + retValue = (String)viewer.getProperty("String", property, param); + viewer.scriptEcho(retValue); + } } Modified: trunk/Jmol/src/org/jmol/viewer/Token.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Token.java 2006-03-13 18:37:08 UTC (rev 4597) +++ trunk/Jmol/src/org/jmol/viewer/Token.java 2006-03-13 20:18:29 UTC (rev 4598) @@ -177,6 +177,7 @@ final static int centerAt = command | 93; final static int isosurface = command | 94; final static int draw = command | 95 | embeddedExpression; + final static int getproperty = command | 96; // parameters final static int ambient = setparam | 0; @@ -505,6 +506,7 @@ "polyhedra", new Token(polyhedra,varArgCount, "polyhedra"), "centerat", new Token(centerAt, varArgCount, "centerat"), "isosurface", new Token(isosurface,varArgCount,"isosurface"), + "getproperty", new Token(getproperty,varArgCount, "getproperty"), // setparams "ambient", new Token(ambient, "ambient"), Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-13 18:37:08 UTC (rev 4597) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-13 20:18:29 UTC (rev 4598) @@ -1063,6 +1063,7 @@ setShapeSize(JmolConstants.SHAPE_VECTORS, 1); setFrankOn(styleManager.frankOn); repaintManager.initializePointers(1); + setTainted(true); popHoldRepaint(); setStatusFileLoaded(3, fullPathName, fileName, modelManager .getModelSetName(), clientFile, null); @@ -1637,6 +1638,7 @@ public void renderScreenImage(Graphics g, Dimension size, Rectangle clip) { manageScriptTermination(); + System.out.println("render screen image"); if (isTainted) { setModelVisibility(); modelManager.setModelClickability(); @@ -2198,10 +2200,6 @@ setShowHydrogens(value); return; } - if (key.equalsIgnoreCase("showHydrogens")) { - setShowHydrogens(value); - return; - } if (key.equalsIgnoreCase("showMeasurements")) { setShowMeasurements(value); return; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mig...@us...> - 2006-03-14 14:03:10
|
Revision: 4605 Author: migueljmol Date: 2006-03-14 06:02:58 -0800 (Tue, 14 Mar 2006) ViewCVS: http://svn.sourceforge.net/jmol/?rev=4605&view=rev Log Message: ----------- set stereo default to be -5, convergent viewing Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Eval.java trunk/Jmol/src/org/jmol/viewer/Viewer.java Modified: trunk/Jmol/src/org/jmol/viewer/Eval.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-14 13:06:32 UTC (rev 4604) +++ trunk/Jmol/src/org/jmol/viewer/Eval.java 2006-03-14 14:02:58 UTC (rev 4605) @@ -3793,7 +3793,8 @@ void stereo() throws ScriptException { int stereoMode = JmolConstants.STEREO_DOUBLE; - float degrees = 5; + // see www.usm.maine.edu/~rhodes/0Help/StereoViewing.html + float degrees = -5; boolean degreesSeen = false; for (int i = 1; i < statementLength; ++i) { switch (statement[i].tok) { Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-14 13:06:32 UTC (rev 4604) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-14 14:02:58 UTC (rev 4605) @@ -1676,7 +1676,7 @@ g3d.applyCyanAnaglyph(); else g3d - .applyBlueOrGreenAnaglyph(stereoMode == JmolConstants.STEREO_REDBLUE); + .applyBlueOrGreenAnaglyph(stereoMode==JmolConstants.STEREO_REDBLUE); Image img = g3d.getScreenImage(); try { g.drawImage(img, 0, 0, null); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2006-03-14 23:21:50
|
Revision: 4606 Author: hansonr Date: 2006-03-14 15:21:07 -0800 (Tue, 14 Mar 2006) ViewCVS: http://svn.sourceforge.net/jmol/?rev=4606&view=rev Log Message: ----------- (1) full internal coordinate spinning and rotation. VERY cool! (2) fixed minor axes bug for very small molecules (3) "friedaSwitch" now "windowCenteredFlag" and better controls for that -- not fully tested; could be useful. (4) cosmetic conflict only with Miguel's previous update. Modified Paths: -------------- trunk/Jmol/src/org/jmol/viewer/Axes.java trunk/Jmol/src/org/jmol/viewer/Frame.java trunk/Jmol/src/org/jmol/viewer/ModelManager.java trunk/Jmol/src/org/jmol/viewer/TransformManager.java trunk/Jmol/src/org/jmol/viewer/Viewer.java trunk/Jmol/src/org/openscience/jmol/app/Jmol.java Modified: trunk/Jmol/src/org/jmol/viewer/Axes.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Axes.java 2006-03-14 14:02:58 UTC (rev 4605) +++ trunk/Jmol/src/org/jmol/viewer/Axes.java 2006-03-14 23:21:07 UTC (rev 4606) @@ -45,6 +45,7 @@ axisPoints[i] = new Point3f(); } + final static float MIN_AXIS_LEN = 1.5f; void initShape() { originPoint.set(viewer.getBoundBoxCenter()); Vector3f corner = viewer.getBoundBoxCornerVector(); @@ -54,6 +55,13 @@ // we have just set the axisPoint to be a unit on a single axis // therefore only one of these values (x, y, or z) will be nonzero // it will have value 1 or -1 + if (corner.x < MIN_AXIS_LEN) + corner.x = MIN_AXIS_LEN; + if (corner.y < MIN_AXIS_LEN) + corner.y = MIN_AXIS_LEN; + if (corner.z < MIN_AXIS_LEN) + corner.z = MIN_AXIS_LEN; + axisPoint.x *= corner.x; axisPoint.y *= corner.y; axisPoint.z *= corner.z; Modified: trunk/Jmol/src/org/jmol/viewer/Frame.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Frame.java 2006-03-14 14:02:58 UTC (rev 4605) +++ trunk/Jmol/src/org/jmol/viewer/Frame.java 2006-03-14 23:21:07 UTC (rev 4606) @@ -866,7 +866,7 @@ void setRotationCenter(Point3f newCenterOfRotation) { if (newCenterOfRotation != null) { rotationCenter = newCenterOfRotation; - if (! viewer.getFriedaSwitch()) + if (viewer.isWindowCentered()) rotationRadius = calcRotationRadius(rotationCenter); } else { rotationCenter = rotationCenterDefault; @@ -882,10 +882,6 @@ private void findBounds() { if ((rotationCenter != null) || (atomCount <= 0)) return; - calcRotationSphere(); - } - - private void calcRotationSphere() { calcAverageAtomPoint(); calcBoundBoxDimensions(); if (notionalUnitcell != null) Modified: trunk/Jmol/src/org/jmol/viewer/ModelManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/ModelManager.java 2006-03-14 14:02:58 UTC (rev 4605) +++ trunk/Jmol/src/org/jmol/viewer/ModelManager.java 2006-03-14 23:21:07 UTC (rev 4606) @@ -287,13 +287,18 @@ else center = null; } - if (viewer.getFriedaSwitch()) { - if (center == null) - center = frame.getRotationCenterDefault(); + + if (center == null) + center = frame.getRotationCenterDefault(); + if (viewer.isWindowCentered()) { + viewer.translateCenterTo(0, 0); + frame.setRotationCenter(center); + viewer.scaleFitToScreen(); + } else { Point3i newCenterScreen = viewer.transformPoint(center); viewer.translateCenterTo(newCenterScreen.x, newCenterScreen.y); + frame.setRotationCenter(center); } - frame.setRotationCenter(center); } void setRotationCenter(Point3f center) { Modified: trunk/Jmol/src/org/jmol/viewer/TransformManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/TransformManager.java 2006-03-14 14:02:58 UTC (rev 4605) +++ trunk/Jmol/src/org/jmol/viewer/TransformManager.java 2006-03-14 23:21:07 UTC (rev 4606) @@ -57,7 +57,13 @@ // a matrix4f which contains translations private final Matrix3f matrixRotate = new Matrix3f(); private final Matrix3f matrixTemp3 = new Matrix3f(); - + private final Matrix4f matrixTemp4 = new Matrix4f(); + final AxisAngle4f axisangleT = new AxisAngle4f(); + final Vector3f vectorT = new Vector3f(); + final Vector3f vectorT2 = new Vector3f(); + final Point3f pointT = new Point3f(); + final Point3f pointT2 = new Point3f(); + void rotateXYBy(int xDelta, int yDelta) { rotateXRadians(yDelta * radiansPerDegree); rotateYRadians(xDelta * radiansPerDegree); @@ -84,14 +90,15 @@ synchronized void rotateXRadians(float angleRadians) { matrixTemp3.rotX(angleRadians); matrixRotate.mul(matrixTemp3, matrixRotate); - //System.out.println("rotateXRadius matrixRotate=\n" + matrixRotate); } + synchronized void rotateYRadians(float angleRadians) { if (axesOrientationRasmol) angleRadians = -angleRadians; matrixTemp3.rotY(angleRadians); matrixRotate.mul(matrixTemp3, matrixRotate); } + synchronized void rotateZRadians(float angleRadians) { if (axesOrientationRasmol) angleRadians = -angleRadians; @@ -113,58 +120,38 @@ matrixRotate.mul(matrixTemp3, matrixRotate); } - void rotateAxisInternal(Vector3f axis, int degrees) { - AxisAngle4f rot = new AxisAngle4f(); - float radians = degrees * radiansPerDegree; - rot.set(axis, 0); - rotateAxisAngleRadiansInternal(rot, radians); + void rotateAxisAngle(float x, float y, float z, float degrees) { + axisangleT.set(x, y, z, degrees * radiansPerDegree); + rotate(axisangleT); } + + boolean pleaseUnsetInternalRotationAxis = false; + + void rotateAxisInternal(Point3f center, Vector3f axis, int degrees) { + setSpin(center, axis, degrees); + axisangleT.set(axis, internalRotationAngle); + rotateAxisAngleRadiansInternal(axisangleT, internalRotationAngle); + pleaseUnsetInternalRotationAxis = true; + } synchronized void rotateAxisAngleRadiansInternal(AxisAngle4f axisAngle, float radians) { - AxisAngle4f currentRotation = new AxisAngle4f(); - currentRotation.set(matrixRotate); + + // trick is to apply the current rotation to the internal rotation axis - //System.out.println("new0: "+matrixRotate); - //System.out.println("currentRotation:"+currentRotation); + vectorT.set(axisAngle.x, axisAngle.y, axisAngle.z); + matrixRotate.transform(vectorT, vectorT2); + axisangleT.set(vectorT2, radians); - //check for no rotation - if (Float.isNaN(currentRotation.angle) || - currentRotation.x == 0.0f && - currentRotation.y == 0.0f && - currentRotation.z == 0.0f) { - matrixRotate.setIdentity(); - currentRotation.set(1, 0, 0, 0); - } + // NOW apply that rotation - //System.out.println("currentRotation:"+currentRotation); - - //undo current rotation - matrixRotate.setIdentity(); - - //System.out.println("rotateAxisAngleRadiansInternal"+axisAngle+" "+matrixTemp3+"\n"+matrixRotate+radians); - //apply internal rotation - axisangleT.set(axisAngle.x, - axisAngle.y, - axisAngle.z, radians); - //System.out.println(axisangleT); - matrixTemp3.setIdentity(); matrixTemp3.set(axisangleT); matrixRotate.mul(matrixTemp3, matrixRotate); - //System.out.println("new1: "+matrixRotate); - //rerotation to old rotation - matrixTemp3.set(currentRotation); - //System.out.println("currentRotation"+currentRotation); - //System.out.println("new2: "+matrixRotate); - matrixRotate.mul(matrixTemp3, matrixRotate); - - //System.out.println("new3: "+matrixRotate); + + // for setting next external rotation point in getNewExternalRotationCenter(): + + internalRotationAngleFramed = radians; } - void rotateAxisAngle(float x, float y, float z, float degrees) { - axisangleT.set(x, y, z, degrees * radiansPerDegree); - rotate(axisangleT); - } - void rotateTo(float x, float y, float z, float degrees) { if (degrees < .01 && degrees > -.01) { matrixRotate.setIdentity(); @@ -182,24 +169,64 @@ } /**************************************************************** + INTERNAL ROTATIONS + ****************************************************************/ + + void getNewExternalRotationCenter() { + + /* + * (1) determine vector offset VectorT () + * (2) translate old point so trueRotationPt is at [0,0,0] (old - true) + * (3) do axisangle rotation of -radians (pointT2) + * (4) translate back (pointT2 + vectorT) + * + * The new position of old point is the new rotation center + * set this, rotate about it, and it will APPEAR that the + * rotation was about the desired point and axis! + * + */ + + // fractional OPPOSITE of angle of rotation + + axisangleT.set(internalRotationAxis); + axisangleT.angle = -internalRotationAngleFramed; + matrixTemp4.set(axisangleT); + + // apply this to the external center point in the internal frame + + vectorT.set(internalRotationCenter); + pointT2.set(externalRotationCenter); + pointT2.sub(vectorT); + matrixTemp4.transform(pointT2, pointT); + + // return this point to the external frame + + pointT.add(vectorT); + + // it is the new external rotation center! + + externalRotationCenter.set(pointT); + } + + /**************************************************************** TRANSLATIONS ****************************************************************/ - float xTranslation; - float yTranslation; + float xExternalTranslation; + float yExternalTranslation; void translateXYBy(int xDelta, int yDelta) { - xTranslation += xDelta; - yTranslation += yDelta; + xExternalTranslation += xDelta; + yExternalTranslation += yDelta; } void translateToXPercent(float percent) { // FIXME -- what is the proper RasMol interpretation of this with zooming? - xTranslation = (width/2) + width * percent / 100; + xExternalTranslation = (width/2) + width * percent / 100; } void translateToYPercent(float percent) { - yTranslation = (height/2) + height * percent / 100; + yExternalTranslation = (height/2) + height * percent / 100; } void translateToZPercent(float percent) { @@ -207,11 +234,11 @@ } float getTranslationXPercent() { - return (xTranslation - width/2) * 100 / width; + return (xExternalTranslation - width/2) * 100 / width; } float getTranslationYPercent() { - return (yTranslation - height/2) * 100 / height; + return (yExternalTranslation - height/2) * 100 / height; } float getTranslationZPercent() { @@ -230,13 +257,10 @@ } void translateCenterTo(int x, int y) { - xTranslation = x; - yTranslation = y; + xExternalTranslation = x; + yExternalTranslation = y; } - final AxisAngle4f axisangleT = new AxisAngle4f(); - final Vector3f vectorT = new Vector3f(); - String getOrientationText() { return getMoveToText() + "\nOR\n" + getRotateZyzText(true); } @@ -680,8 +704,8 @@ if (width == 0 || height == 0 || !viewer.haveFrame()) return; // translate to the middle of the screen - xTranslation = width / 2; - yTranslation = height / 2; + xExternalTranslation = width / 2; + yExternalTranslation = height / 2; // 2005 02 22 // switch to finding larger screen dimension // find smaller screen dimension @@ -767,55 +791,27 @@ } void calcTransformMatrices() { - //System.out.println("calcTransformMatrices"); + if (externalRotationCenter == null) { + //System.out.println("null ext center in calcTransformMatrices"); + externalRotationCenter = new Point3f(); + externalRotationCenter.set(viewer.getRotationCenter()); + } + if (internalRotationAxis != null) { + //System.out.println("non null internal rotation axis in calcTransformMatrices"); + getNewExternalRotationCenter(); + if(pleaseUnsetInternalRotationAxis) + internalRotationAxis = null; + } calcTransformMatrix(); calcSlabAndDepthValues(); viewer.setSlabAndDepthValues(slabValue, depthValue); increaseRotationRadius = false; minimumZ = Integer.MAX_VALUE; - if (spinOn) { - setSpinTranslation(); - } } - //for internal coordinate rotations - float xSpinTranslation = 0; - float ySpinTranslation = 0; - float xSpinCenter = 0; - float ySpinCenter = 0; float newXPt = 0; float newYPt = 0; - boolean iHaveSpinCenter = false; - boolean iHaveSpinTranslation = false; - - void setSpinTranslation() { - //System.out.println("\n\nsetSpinTransl xyTrans:" +xSpinTranslation+" "+ySpinTranslation + "\nxyCenter:"+xSpinCenter + " "+ySpinCenter); - //System.out.println(spinOn +", "+iHaveSpinTranslation + " and "+iHaveSpinCenter); - - //System.out.println(spinCenter); - - if (spinAxis == null) - return; - xSpinTranslation = 0; - ySpinTranslation = 0; - transformPoint(spinCenter); - - if (!iHaveSpinCenter) { - // get the basis x,y position - xSpinCenter = newXPt; - ySpinCenter = newYPt; - //System.out.println("basis:"+xSpinCenter+" "+ySpinCenter); - iHaveSpinCenter = true; - return; - } - // correct for any motion of that spin centeer - xSpinTranslation = xSpinCenter - newXPt; - ySpinTranslation = ySpinCenter - newYPt; - iHaveSpinTranslation = true; - //System.out.println("setSpinTrans: "+xSpinTranslation+" "+ySpinTranslation+"\n\n"); - } - boolean increaseRotationRadius; int minimumZ; @@ -830,27 +826,19 @@ } synchronized private void calcTransformMatrix() { - //System.out.println("transformPoint1 " + matrixTransform); // you absolutely *must* watch the order of these operations matrixTransform.setIdentity(); + // first, translate the coordinates back to the center - rotationCenter.set(viewer.getRotationCenter()); - vectorTemp.set(rotationCenter); + + vectorTemp.set(externalRotationCenter); matrixTemp.setZero(); matrixTemp.setTranslation(vectorTemp); matrixTransform.sub(matrixTemp); - - //System.out.println("transformPoint2 " + matrixTransform); - // now, multiply by angular rotations // this is *not* the same as matrixTransform.mul(matrixRotate); matrixTemp.set(stereoFrame ? matrixStereo : matrixRotate); matrixTransform.mul(matrixTemp, matrixTransform); - - //System.out.println("stereoFrame? transformPoint3 " + stereoFrame+ " "+matrixRotate+" "+matrixStereo); - - - // matrixTransform.mul(matrixRotate, matrixTransform); // we want all z coordinates >= 0, with larger coordinates further away // this is important for scaling, and is the way our zbuffer works // so first, translate an make all z coordinates negative @@ -864,10 +852,6 @@ matrixTransform.add(matrixTemp); // make all z positive else matrixTransform.sub(matrixTemp); // make all z negative - - //System.out.println("transformPoint4 " + matrixTransform); - - // now scale to screen coordinates matrixTemp.setZero(); matrixTemp.set(scalePixelsPerAngstrom); @@ -876,20 +860,20 @@ matrixTemp.m11 = matrixTemp.m22 = -scalePixelsPerAngstrom; } matrixTransform.mul(matrixTemp, matrixTransform); - - //System.out.println("transformPoint5 " + matrixTransform); - - // note that the image is still centered at 0, 0 in the xy plane // all z coordinates are (should be) >= 0 // translations come later (to deal with perspective) } Matrix4f getUnscaledTransformMatrix() { + //for povray only Matrix4f unscaled = new Matrix4f(); unscaled.setIdentity(); - rotationCenter.set(viewer.getRotationCenter()); - vectorTemp.set(rotationCenter); + if (externalRotationCenter == null) { + externalRotationCenter = new Point3f(); + externalRotationCenter.set(viewer.getRotationCenter()); + } + vectorTemp.set(externalRotationCenter); matrixTemp.setZero(); matrixTemp.setTranslation(vectorTemp); unscaled.sub(matrixTemp); @@ -939,21 +923,14 @@ //higher resolution here for spin control. - newXPt = point3fScreenTemp.x + xTranslation + xSpinTranslation; - newYPt = point3fScreenTemp.y + yTranslation + ySpinTranslation; - + newXPt = point3fScreenTemp.x + xExternalTranslation; + newYPt = point3fScreenTemp.y + yExternalTranslation; if (Float.isNaN(newXPt)) { - //System.out.println("point3fScreenTemp.x xTranslation xSpinTranslation\n"+point3fScreenTemp.x +" "+xTranslation +" "+xSpinTranslation); - System.out.println("NaN found in transformPoint "); - //System.out.println("Point3fScreenTemp"+point3fScreenTemp); - //System.out.println("MatrixTransform"+matrixTransform); } - point3iScreenTemp.x = (int)(newXPt); point3iScreenTemp.y = (int)(newYPt); - //System.out.println("transforming"+pointAngstroms + "\nto " + point3iScreenTemp+"\nusing "+xSpinTranslation + " " + ySpinTranslation); return point3iScreenTemp; } @@ -974,11 +951,11 @@ screen.z = z; if (perspectiveDepth) { float perspectiveFactor = cameraDistanceFloat / z; - screen.x = screen.x * perspectiveFactor + xSpinTranslation + xTranslation; - screen.y = screen.y * perspectiveFactor + ySpinTranslation + yTranslation; + screen.x = screen.x * perspectiveFactor + xExternalTranslation; + screen.y = screen.y * perspectiveFactor + yExternalTranslation; } else { - screen.x += xSpinTranslation + xTranslation; - screen.y += ySpinTranslation + yTranslation; + screen.x += xExternalTranslation; + screen.y += yExternalTranslation; } } @@ -1009,8 +986,8 @@ point3fScreenTemp.x *= perspectiveFactor; point3fScreenTemp.y *= perspectiveFactor; } - point3iScreenTemp.x = (int)(point3fScreenTemp.x + xSpinTranslation + xTranslation); - point3iScreenTemp.y = (int)(point3fScreenTemp.y + ySpinTranslation + yTranslation); + point3iScreenTemp.x = (int)(point3fScreenTemp.x + xExternalTranslation); + point3iScreenTemp.y = (int)(point3fScreenTemp.y + yExternalTranslation); return point3iScreenTemp; } @@ -1060,39 +1037,45 @@ if (scale >= -10 && scale <= 10) vibrationScale = scale; } - + + final static float twoPI = (float)(2 * Math.PI); int spinX, spinY = 30, spinZ, spinFps = 30; - AxisAngle4f spinAxis; - Point3f spinCenter = new Point3f(0, 0, 0); - Point3f rotationCenter = new Point3f(0, 0, 0); - Vector3f spinOffset = new Vector3f(0, 0, 0); - Point3f spinOffsetPt = new Point3f(0, 0, 0); + Point3f externalRotationCenter; - final static float twoPI = (float)(2 * Math.PI); - - void setSpin(Vector3f axis, int degrees) { - spinAxis = new AxisAngle4f(axis, degrees * radiansPerDegree); + AxisAngle4f internalRotationAxis; + Point3f internalRotationCenter = new Point3f(0, 0, 0); + float internalRotationAngle = 0; + float internalRotationAngleFramed = 0; + + void setExternalRotationCenter(Point3f rotationCenter) { + if (rotationCenter == null) { + externalRotationCenter = null; + System.out.println("setExternalRotationCenter is null"); + } else { + externalRotationCenter = new Point3f(); + externalRotationCenter.set(rotationCenter); + } } - - void setSpinCenter(Point3f center) { - System.out.println("setSpinCenter"+center); - spinCenter.set(center); - } + void setSpin(Point3f center, Vector3f axis, int degrees) { + internalRotationCenter.set(center); + internalRotationAngle = degrees * radiansPerDegree; + if (internalRotationAxis == null) + internalRotationAxis = new AxisAngle4f(); + internalRotationAxis.set(axis, internalRotationAngle); + } + void setSpinX(int degrees) { spinX = degrees; - spinAxis = null; - //System.out.println("spinX=" + spinX); + internalRotationAxis = null; } void setSpinY(int degrees) { spinY = degrees; - spinAxis = null; - //System.out.println("spinY=" + spinY); + internalRotationAxis = null; } void setSpinZ(int degrees) { spinZ = degrees; - spinAxis = null; - //System.out.println("spinZ=" + spinZ); + internalRotationAxis = null; } void setSpinFps(int value) { if (value <= 0) @@ -1100,7 +1083,6 @@ else if (value > 50) value = 50; spinFps = value; - //System.out.println("spinFps=" + spinFps); } void clearSpin() { @@ -1110,11 +1092,10 @@ boolean spinOn; SpinThread spinThread; void setSpinOn(boolean spinOn) { - iHaveSpinTranslation = false; - iHaveSpinCenter = false; this.spinOn = spinOn; if (spinOn) { if (spinThread == null) { + pleaseUnsetInternalRotationAxis = false; spinThread = new SpinThread(); spinThread.start(); } @@ -1123,9 +1104,7 @@ spinThread.interrupt(); spinThread = null; //causes a jump -- not sure how to avoid that - spinAxis = null; - xSpinTranslation = 0; - ySpinTranslation = 0; + internalRotationAxis = null; } } //System.out.println("spinOn=" + spinOn); @@ -1136,7 +1115,7 @@ int myFps = spinFps; int i = 0; long timeBegin = System.currentTimeMillis(); - System.out.println("spin thread run started"); + // System.out.println("spin thread run started"); while (! isInterrupted()) { if (myFps != spinFps) { myFps = spinFps; @@ -1144,39 +1123,44 @@ timeBegin = System.currentTimeMillis(); } boolean refreshNeeded = false; - if (spinAxis == null) { - if (spinX != 0) { - rotateXRadians(spinX * radiansPerDegree / myFps); + if (internalRotationAxis == null) { + if (spinX != 0 || spinY != 0 || spinZ != 0) { refreshNeeded = true; } - if (spinY != 0) { - rotateYRadians(spinY * radiansPerDegree / myFps); - refreshNeeded = true; - } - if (spinZ != 0) { - rotateZRadians(spinZ * radiansPerDegree / myFps); - refreshNeeded = true; - } - } else { - rotateAxisAngleRadiansInternal(spinAxis, spinAxis.angle / myFps); - refreshNeeded = true; + } else if (internalRotationAxis.angle != 0){ + refreshNeeded = true; } ++i; int targetTime = i * 1000 / myFps; int currentTime = (int)(System.currentTimeMillis() - timeBegin); int sleepTime = targetTime - currentTime; if (sleepTime > 0) { - if (refreshNeeded && spinOn) + if (refreshNeeded && spinOn) { + + if (internalRotationAxis == null) { + if (spinX != 0) { + rotateXRadians(spinX * radiansPerDegree / myFps); + } + if (spinY != 0) { + rotateYRadians(spinY * radiansPerDegree / myFps); + } + if (spinZ != 0) { + rotateZRadians(spinZ * radiansPerDegree / myFps); + } + } else { + rotateAxisAngleRadiansInternal(internalRotationAxis, internalRotationAxis.angle / myFps); + } viewer.refresh(0, "TransformationManager:SpinThread:run()"); + } try { Thread.sleep(sleepTime); } catch (InterruptedException e) { - System.out.println("interrupt caught!"); + // System.out.println("interrupt caught!"); break; } } } - System.out.println("spin thread run completed"); + //System.out.println("spin thread run completed"); } } Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-14 14:02:58 UTC (rev 4605) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2006-03-14 23:21:07 UTC (rev 4606) @@ -1263,6 +1263,7 @@ void setCenter(Point3f center) { modelManager.setRotationCenter(center); + transformManager.setExternalRotationCenter(null); refresh(0, "Viewer:setCenter()"); } @@ -1273,23 +1274,23 @@ void setCenter(String relativeTo, float x, float y, float z) { modelManager.setRotationCenter(relativeTo, x, y, z); scaleFitToScreen(); + transformManager.setExternalRotationCenter(null); + refresh(0, "Viewer:setCenter(" + relativeTo + ")"); } void setCenterBitSet(BitSet bsCenter) { modelManager.setCenterBitSet(bsCenter); - if (!friedaSwitch) - scaleFitToScreen(); + transformManager.setExternalRotationCenter(null); refresh(0, "Viewer:setCenterBitSet()"); } - boolean friedaSwitch = false; - - boolean getFriedaSwitch() { - return friedaSwitch; + boolean windowCenteredFlag = true; + boolean isWindowCentered() { + return windowCenteredFlag; } - void setFriedaSwitch(boolean friedaSwitch) { - this.friedaSwitch = friedaSwitch; + void setWindowCentered(boolean TF) { + windowCenteredFlag = TF; } public void setCenterSelected() { @@ -1676,7 +1677,7 @@ g3d.applyCyanAnaglyph(); else g3d - .applyBlueOrGreenAnaglyph(stereoMode==JmolConstants.STEREO_REDBLUE); + .applyBlueOrGreenAnaglyph(stereoMode == JmolConstants.STEREO_REDBLUE); Image img = g3d.getScreenImage(); try { g.drawImage(img, 0, 0, null); @@ -2223,8 +2224,8 @@ setZeroBasedXyzRasmol(value); return; } - if (key.equalsIgnoreCase("frieda")) { - setFriedaSwitch(value); + if (key.equalsIgnoreCase("windowCentered")) { + setWindowCentered(value); return; } if (key.equalsIgnoreCase("testFlag1")) { @@ -2687,6 +2688,7 @@ // stereo support // ////////////////////////////////////////////////////////////// + void setStereoMode(int stereoMode) { transformManager.setStereoMode(stereoMode); } @@ -2793,18 +2795,18 @@ public void setSpinAxis(String axisID, int degrees) { Point3f rotCenter = modelManager.getSpinCenter(axisID, repaintManager.displayModelIndex); Vector3f rotAxis = modelManager.getSpinAxis(axisID, repaintManager.displayModelIndex); - if (rotCenter == null || rotAxis == null) return; - setSpinCenter(rotCenter); - System.out.println("setSpinAxis " + axisID + " " + rotAxis + " " + degrees); - setSpin(rotAxis, degrees); + if (rotCenter == null || rotAxis == null) + return; + transformManager.setSpin(rotCenter, rotAxis, degrees); } public void rotateAxis(String axisID, int degrees) { Point3f rotCenter = modelManager.getSpinCenter(axisID, repaintManager.displayModelIndex); Vector3f rotAxis = modelManager.getSpinAxis(axisID, repaintManager.displayModelIndex); - if (rotCenter == null || rotAxis == null) return; - setCenter(rotCenter); - transformManager.rotateAxisInternal(rotAxis, degrees); + if (rotCenter == null || rotAxis == null) + return; + transformManager.rotateAxisInternal(rotCenter, rotAxis, degrees); + refresh(1, "Viewer:rotateAxisInternal()"); } public void setDrawCenter(String axisID) { @@ -2813,12 +2815,4 @@ setCenter(rotCenter); } - void setSpinCenter(Point3f center) { - transformManager.setSpinCenter(center); - } - - void setSpin(Vector3f axis, int degrees) { - transformManager.setSpin(axis, degrees); - } - } Modified: trunk/Jmol/src/org/openscience/jmol/app/Jmol.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/Jmol.java 2006-03-14 14:02:58 UTC (rev 4605) +++ trunk/Jmol/src/org/openscience/jmol/app/Jmol.java 2006-03-14 23:21:07 UTC (rev 4606) @@ -437,6 +437,7 @@ if (args.length > 0) { modelFilename = args[0]; } + //modelFilename = "caffeine.xyz"; //Eclipse TESTING ONLY if (line.hasOption("s")) { scriptFilename = line.getOptionValue("s"); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |