From: Michael T H. <mic...@us...> - 2003-08-01 01:13:26
|
Update of /cvsroot/jmol/Jmol/src/org/openscience/jmol In directory sc8-pr-cvs1:/tmp/cvs-serv29740/src/org/openscience/jmol Modified Files: Atom.java ChemFrame.java CrystalFrame.java DisplayControl.java ModelManager.java RepaintManager.java Log Message: initial work on a JmolFrame ... to split out the rendering engine Index: Atom.java =================================================================== RCS file: /cvsroot/jmol/Jmol/src/org/openscience/jmol/Atom.java,v retrieving revision 1.62 retrieving revision 1.63 diff -u -r1.62 -r1.63 --- Atom.java 23 Jul 2003 11:58:55 -0000 1.62 +++ Atom.java 1 Aug 2003 01:13:15 -0000 1.63 @@ -27,6 +27,7 @@ import org.openscience.jmol.Bspt; import org.openscience.jmol.DisplayControl; import org.openscience.jmol.render.AtomShape; +import org.openscience.jmol.render.JmolAtom; import java.util.Vector; import java.util.Enumeration; import javax.vecmath.Point3d; @@ -36,7 +37,8 @@ * Stores and manipulations information and properties of * atoms. */ -public class Atom extends org.openscience.cdk.Atom implements Bspt.Tuple { +public class Atom extends org.openscience.cdk.Atom + implements Bspt.Tuple, JmolAtom { /** * Creates an atom with the given type. @@ -202,6 +204,7 @@ /** * Sets the atom's vector. */ + public void setVector(Point3d vector) { if (vector == null) { @@ -274,6 +277,10 @@ bondedAtoms = null; bondOrders = null; getAtomShape().clearBonds(); + } + + public int getBondOrder(int i) { + return (bondOrders==null || bondOrders.length <= i) ? 1 : bondOrders[i] + 1; } public int getBondOrder(Atom atom2) { Index: ChemFrame.java =================================================================== RCS file: /cvsroot/jmol/Jmol/src/org/openscience/jmol/ChemFrame.java,v retrieving revision 1.108 retrieving revision 1.109 diff -u -r1.108 -r1.109 --- ChemFrame.java 23 Jul 2003 11:58:55 -0000 1.108 +++ ChemFrame.java 1 Aug 2003 01:13:15 -0000 1.109 @@ -27,6 +27,8 @@ import org.openscience.jmol.Bspt; import org.openscience.jmol.Atom; import org.openscience.jmol.render.AtomShape; +import org.openscience.jmol.render.VectorShape; +import org.openscience.jmol.render.JmolFrame; import org.openscience.cdk.AtomContainer; import org.openscience.cdk.geometry.BondTools; import java.beans.PropertyChangeSupport; @@ -50,6 +52,7 @@ // This stuff can vary for each frame in the dynamics: DisplayControl control; + JmolFrame jmframe; private String info; // The title or info string for this frame. private Vector properties = new Vector(); @@ -175,8 +178,7 @@ jmolAtom.setAtomNumber(this.getAtomCount()); super.addAtom(jmolAtom); } - - + public int addAtom(Atom type, double x, double y, double z) { return addAtom(type, x, y, z, null); } @@ -233,31 +235,62 @@ } public double getGeometricRadius() { + if (control.getUseJmolFrame()) { + if (jmframe == null) + buildJmolFrame(); + return jmframe.getGeometricRadius(); + } findBounds(); return radiusBoundingBox; } public Point3d getBoundingBoxCenter() { + if (control.getUseJmolFrame()) { + if (jmframe == null) + buildJmolFrame(); + return jmframe.getBoundingBoxCenter(); + } findBounds(); return centerBoundingBox; } public Point3d getBoundingBoxCorner() { + if (control.getUseJmolFrame()) { + if (jmframe == null) + buildJmolFrame(); + return jmframe.getBoundingBoxCorner(); + } findBounds(); return cornerBoundingBox; } public Point3d getRotationCenter() { + if (control.getUseJmolFrame()) { + if (jmframe == null) + buildJmolFrame(); + return jmframe.getRotationCenter(); + } findBounds(); return centerRotation; } public double getRotationRadius() { + if (control.getUseJmolFrame()) { + if (jmframe == null) + buildJmolFrame(); + return jmframe.getRotationRadius(); + } findBounds(); return radiusRotation; } public void setRotationCenter(Point3d newCenterOfRotation) { + if (control.getUseJmolFrame()) { + if (jmframe == null) + buildJmolFrame(); + jmframe.setRotationCenter(newCenterOfRotation); + return; + } if (newCenterOfRotation != null) { centerRotation = newCenterOfRotation; radiusRotation = calcRadius(centerRotation); @@ -268,16 +301,31 @@ } public double getMinAtomVectorMagnitude() { + if (control.getUseJmolFrame()) { + if (jmframe == null) + buildJmolFrame(); + return jmframe.getMinAtomVectorMagnitude(); + } findBounds(); return minAtomVectorMagnitude; } public double getMaxAtomVectorMagnitude() { + if (control.getUseJmolFrame()) { + if (jmframe == null) + buildJmolFrame(); + return jmframe.getMaxAtomVectorMagnitude(); + } findBounds(); return maxAtomVectorMagnitude; } public double getAtomVectorRange() { + if (control.getUseJmolFrame()) { + if (jmframe == null) + buildJmolFrame(); + return jmframe.getAtomVectorRange(); + } findBounds(); return maxAtomVectorMagnitude - minAtomVectorMagnitude; } @@ -374,6 +422,12 @@ * Clears the bounds cache for this model. */ private void clearBounds() { + if (control.getUseJmolFrame()) { + if (jmframe == null) + buildJmolFrame(); + jmframe.clearBounds(); + return; + } centerBoundingBox = centerRotation = null; radiusBoundingBox = radiusRotation = minAtomVectorMagnitude = maxAtomVectorMagnitude = atomVectorRange = 0f; @@ -409,9 +463,9 @@ } void calcBoundingBox() { - /** - * Note that this method is overridden by CrystalFrame - */ + // + // Note that this method is overridden by CrystalFrame + // // bounding box is defined as the center of the cartesian coordinates // as stored in the file // Note that this is not really the geometric center of the molecule @@ -441,9 +495,9 @@ } double calcRadius(Point3d center) { - /** - * Note that this method is overridden by CrystalFrame - */ + // + // Note that this method is overridden by CrystalFrame + // // Now that we have defined the center, find the radius to the outermost // atom, including the radius of the atom itself. Note that this is // currently the vdw radius as scaled by the vdw display radius as set @@ -605,6 +659,14 @@ return vibrations.elements(); } + public void addAtomVector(int atomIndex, double[] vector) { + Atom atom = getJmolAtomAt(atomIndex); + Point3d vector3d = new Point3d(vector); + atom.setVector(vector3d); + + jmframe.addVectorShape(new VectorShape(atom.getPoint3D(), vector3d)); + } + private void setAtomArraySize(int newArraySize) { Atom[] nat = new Atom[newArraySize]; int countToMove = atoms.length; @@ -662,6 +724,27 @@ } } + private void buildJmolFrame() { + jmframe = new JmolFrame(control); + for (int i = getAtomCount(); --i >= 0; ) { + Atom jmolAtom = getJmolAtomAt(i); + AtomShape atomShape = + new AtomShape(jmolAtom, jmolAtom.isHydrogen(), control); + jmframe.addAtomShape(atomShape); + Atom[] bondedAtoms = jmolAtom.getBondedAtoms(); + if (bondedAtoms != null) + for (int j = bondedAtoms.length; --j >= 0; ) { + jmframe.bondAtomShapes(atomShape, bondedAtoms[j], jmolAtom.getBondOrder(j)); + } + } + } + + public JmolFrame getJmolFrame() { + if (jmframe == null) + buildJmolFrame(); + return jmframe; + } + public JmolAtomIterator getAtomIterator() { return new ChemFrameIterator(); } @@ -760,5 +843,6 @@ return ibond; } } + } Index: CrystalFrame.java =================================================================== RCS file: /cvsroot/jmol/Jmol/src/org/openscience/jmol/CrystalFrame.java,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- CrystalFrame.java 25 Jul 2003 10:43:04 -0000 1.15 +++ CrystalFrame.java 1 Aug 2003 01:13:15 -0000 1.16 @@ -65,6 +65,7 @@ return this.boxEdges; } + /* void calcBoundingBox() { Vector boxEdges; @@ -97,7 +98,9 @@ cornerBoundingBox = new Point3d(maxX, maxY, maxZ); cornerBoundingBox.sub(centerBoundingBox); } + */ + /* // arrowhead size isn't included because it is currently in screen // coordinates .. oh well. public double calcRadius(Point3d center) { @@ -112,4 +115,5 @@ } return radius; } + */ } Index: DisplayControl.java =================================================================== RCS file: /cvsroot/jmol/Jmol/src/org/openscience/jmol/DisplayControl.java,v retrieving revision 1.111 retrieving revision 1.112 diff -u -r1.111 -r1.112 --- DisplayControl.java 26 Jul 2003 12:40:05 -0000 1.111 +++ DisplayControl.java 1 Aug 2003 01:13:15 -0000 1.112 @@ -28,10 +28,13 @@ import org.openscience.jmol.render.BondRenderer; import org.openscience.jmol.render.LabelRenderer; import org.openscience.jmol.render.ChemFrameRenderer; +import org.openscience.jmol.render.JmolFrame; import org.openscience.jmol.render.MeasureRenderer; import org.openscience.jmol.render.Axes; import org.openscience.jmol.render.BoundingBox; +import org.openscience.jmol.render.AtomShape; import org.openscience.jmol.render.BondShape; +import org.openscience.jmol.render.JmolAtom; import org.openscience.jmol.script.Eval; import org.openscience.jmol.g25d.Graphics25D; import org.openscience.jmol.g25d.Colix; @@ -544,6 +547,10 @@ return colorManager.colorVector; } + public short getColixVector() { + return colorManager.colixVector; + } + public void setColorBackground(Color bg) { colorManager.setColorBackground(bg); refresh(); @@ -562,6 +569,10 @@ return colorManager.getColorFromString(colorName); } + public short getColixAtom(JmolAtom atom) { + return colorManager.getColixAtom((Atom)atom); + } + public short getColixAtom(Atom atom) { return colorManager.getColixAtom(atom); } @@ -653,24 +664,26 @@ return selectionManager.isSelected(atomIndex); } - public boolean hasSelectionHalo(Atom atom) { + public boolean hasSelectionHalo(int atomIndex) { return selectionHaloEnabled && !repaintManager.fastRendering && - selectionManager.isSelected(atom.getAtomNumber()); + selectionManager.isSelected(atomIndex); } - public boolean hasSelectionHalo(Atom atom, int iatom) { + public boolean hasBondSelectionHalo(AtomShape atomShape, int bondIndex) { if (!selectionHaloEnabled || repaintManager.fastRendering) return false; - boolean isAtomSelected = isSelected(atom.getAtomNumber()); + int atomIndex = + useJmolFrame ? atomShape.getAtomIndex() : atomShape.atom.getAtomNumber(); + boolean isAtomSelected = isSelected(atomIndex); if (bondSelectionModeOr && isAtomSelected) return true; if (!bondSelectionModeOr && !isAtomSelected) return false; - Atom atomOther = atom.getBondedAtom(iatom); + int atomIndexOther = atomShape.getBondedAtomIndex(bondIndex); boolean isOtherSelected = - selectionManager.isSelected(atomOther.getAtomNumber()); + selectionManager.isSelected(atomIndexOther); return isOtherSelected; } @@ -825,6 +838,10 @@ return modelManager.haveFile(); } + public JmolFrame getJmolFrame() { + return modelManager.chemframe.getJmolFrame(); + } + public ChemFrame getFrame() { return modelManager.chemframe; } @@ -1303,6 +1320,8 @@ return getOversampleAlwaysEnabled(); if (key.equals("oversampleStopped")) return getOversampleStoppedEnabled(); + if (key.equals("useJmolFrame")) + return getUseJmolFrame(); System.out.println("control.getBooleanProperty(" + key + ") - unrecognized"); return false; @@ -1333,6 +1352,8 @@ { setOversampleAlwaysEnabled(value); return; } if (key.equals("oversampleStopped")) { setOversampleStoppedEnabled(value); return; } + if (key.equals("useJmolFrame")) + { setUseJmolFrame(value); return; } System.out.println("control.setBooleanProperty(" + key + "," + value + ") - unrecognized"); } @@ -1372,6 +1393,19 @@ } /**************************************************************** + * JmolFrame + ****************************************************************/ + + public boolean useJmolFrame = false; + public void setUseJmolFrame(boolean value) { + setStructuralChange(); + useJmolFrame = value; + } + public boolean getUseJmolFrame() { + return useJmolFrame; + } + + /**************************************************************** * delegated to StyleManager ****************************************************************/ @@ -1588,6 +1622,10 @@ public byte getStyleLabel() { return labelManager.styleLabel; + } + + public String getLabelAtom(JmolAtom atom) { + return labelManager.getLabelAtom(labelManager.styleLabel, (Atom)atom); } public String getLabelAtom(Atom atom) { Index: ModelManager.java =================================================================== RCS file: /cvsroot/jmol/Jmol/src/org/openscience/jmol/ModelManager.java,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- ModelManager.java 2 Jun 2003 13:35:05 -0000 1.20 +++ ModelManager.java 1 Aug 2003 01:13:15 -0000 1.21 @@ -24,7 +24,7 @@ */ package org.openscience.jmol; -import org.openscience.jmol.Atom; +import org.openscience.jmol.render.JmolFrame; import java.util.BitSet; import java.util.Vector; @@ -202,10 +202,14 @@ } public int findNearestAtomIndex(int x, int y) { + if (control.getUseJmolFrame()) + return control.getJmolFrame().findNearestAtomIndex(x, y); return chemframe.findNearestAtomIndex(x, y); } public BitSet findAtomsInRectangle(Rectangle rectRubber) { + if (control.getUseJmolFrame()) + return control.getJmolFrame().findAtomsInRectangle(rectRubber); return chemframe.findAtomsInRectangle(rectRubber); /* return chemframe.findAtomsInRegion(rectRubber.x, Index: RepaintManager.java =================================================================== RCS file: /cvsroot/jmol/Jmol/src/org/openscience/jmol/RepaintManager.java,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- RepaintManager.java 26 Jul 2003 12:40:05 -0000 1.16 +++ RepaintManager.java 1 Aug 2003 01:13:15 -0000 1.17 @@ -159,12 +159,18 @@ rectClip.width, rectClip.height); if (control.getFrame() != null) { control.setGraphicsContext(g25d, rectClip); - control.frameRenderer.paint(g25d, control); - // FIXME -- measurements rendered incorrectly - // this is in the wrong spot because the display of measurements - // needs to take z-order into account - if (control.getShowMeasurements()) - control.measureRenderer.paint(g25d, rectClip, control); + + if (control.getUseJmolFrame()) { + control.getJmolFrame().render(g25d, control); + } else { + control.frameRenderer.paint(g25d, control); + // FIXME -- measurements rendered incorrectly + // this is in the wrong spot because the display of measurements + // needs to take z-order into account + if (control.getShowMeasurements()) + control.measureRenderer.render(g25d, control); + } + Rectangle band = control.getRubberBandSelection(); if (band != null) g25d.drawRect(control.getColixRubberband(), |