From: <gil...@us...> - 2008-11-27 22:22:20
|
Revision: 13356 http://cdk.svn.sourceforge.net/cdk/?rev=13356&view=rev Author: gilleain Date: 2008-11-27 21:36:16 +0000 (Thu, 27 Nov 2008) Log Message: ----------- Draws the whole ChemModel, not just AtomContainers. Modified Paths: -------------- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/IntermediateRenderer.java Modified: cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/IntermediateRenderer.java =================================================================== --- cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/IntermediateRenderer.java 2008-11-27 18:28:57 UTC (rev 13355) +++ cdk/branches/jchempaint-primary/src/main/org/openscience/cdk/renderer/IntermediateRenderer.java 2008-11-27 21:36:16 UTC (rev 13356) @@ -34,6 +34,8 @@ import org.openscience.cdk.interfaces.IAtom; import org.openscience.cdk.interfaces.IAtomContainer; +import org.openscience.cdk.interfaces.IChemModel; +import org.openscience.cdk.interfaces.IMoleculeSet; import org.openscience.cdk.renderer.elements.AtomSymbolElement; import org.openscience.cdk.renderer.elements.ElementGroup; import org.openscience.cdk.renderer.elements.IRenderingElement; @@ -54,6 +56,7 @@ private AWTFontManager fontManager; private Renderer2DModel rendererModel; private BasicGenerator generator; + private HighlightGenerator highlightGenerator; private transient Graphics2D g; @@ -68,6 +71,7 @@ this.rendererModel = new Renderer2DModel(); this.rendererModel.setHighlightRadiusModel(3.5); this.generator = new BasicGenerator(this.rendererModel); + this.highlightGenerator = new HighlightGenerator(this.rendererModel); this.stroke = new BasicStroke(2); this.fontManager = new AWTFontManager(); this.transform = new AffineTransform(); @@ -76,6 +80,29 @@ public Renderer2DModel getRenderer2DModel() { return this.rendererModel; } + + public void paintChemModel(IChemModel chemModel, Graphics2D g, Rectangle2D bounds) { + + // calculate the total bounding box + Rectangle2D totalBounds = new Rectangle2D.Double(); + IMoleculeSet moleculeSet = chemModel.getMoleculeSet(); + for (int i = 0; i < moleculeSet.getAtomContainerCount(); i++) { + IAtomContainer ac = moleculeSet.getAtomContainer(i); + Rectangle2D.union(totalBounds, this.calculateBounds(ac), totalBounds); + } + + // generate the elements + ElementGroup diagram = new ElementGroup(); + for (int i = 0; i < moleculeSet.getAtomContainerCount(); i++) { + IAtomContainer ac = moleculeSet.getAtomContainer(i); + IRenderingElement subDiagram = this.generator.generate(ac); + diagram.add(subDiagram); + IRenderingElement highlights = this.highlightGenerator.generate(ac); + diagram.add(highlights); + } + this.g = g; + this.paint(diagram, bounds, totalBounds); + } public void paintMolecule(IAtomContainer atomCon, Graphics2D g) { // don't think that this method should be used... @@ -86,34 +113,38 @@ Rectangle2D atomicBounds = this.calculateBounds(atomCon); IRenderingElement diagram = this.generator.generate(atomCon); - IRenderingElement highlights - = new HighlightGenerator(this.rendererModel).generate(atomCon); + IRenderingElement highlights = this.highlightGenerator.generate(atomCon); ((ElementGroup) diagram).add(highlights); - // FIXME - double w = bounds.getWidth() * 0.8; - double h = bounds.getHeight() * 0.8; - double toFitScale = this.calculateScale(atomicBounds, w, h); - if (toFitScale > IntermediateRenderer.NATURAL_SCALE) { - this.scale = IntermediateRenderer.NATURAL_SCALE; - } else { - this.scale = toFitScale; - } - double fractionalScale = (1 - h / (h * this.scale)); - this.fontManager.setFontForScale(fractionalScale); - - - this.transform = new AffineTransform(); - this.transform.translate(bounds.getCenterX(), bounds.getCenterY()); - this.transform.scale(scale, scale); - this.transform.translate(-atomicBounds.getCenterX(), -atomicBounds.getCenterY()); - - g.setStroke(this.stroke); this.g = g; -// diagram.accept(new org.openscience.cdk.renderer.visitor.PrintVisitor()); - diagram.accept(this); + this.paint(diagram, bounds, atomicBounds); } + private void paint(IRenderingElement diagram, Rectangle2D bounds, Rectangle2D atomicBounds) { + // FIXME + double w = bounds.getWidth() * 0.8; + double h = bounds.getHeight() * 0.8; + double toFitScale = this.calculateScale(atomicBounds, w, h); + if (toFitScale > IntermediateRenderer.NATURAL_SCALE) { + this.scale = IntermediateRenderer.NATURAL_SCALE; + } else { + this.scale = toFitScale; + } + double fractionalScale = (1 - h / (h * this.scale)); + this.fontManager.setFontForScale(fractionalScale); + + + this.transform = new AffineTransform(); + this.transform.translate(bounds.getCenterX(), bounds.getCenterY()); + this.transform.scale(scale, scale); + this.transform.translate(-atomicBounds.getCenterX(), -atomicBounds.getCenterY()); + + g.setStroke(this.stroke); + +// diagram.accept(new org.openscience.cdk.renderer.visitor.PrintVisitor()); + diagram.accept(this); + } + /** * Calculates the multiplication factor that will fit the model completely within * the display bounds (not accounting for a border). This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |