Class MoleculeSetRenderer
- java.lang.Object
-
- org.openscience.cdk.renderer.AbstractRenderer<IAtomContainerSet>
-
- org.openscience.cdk.renderer.MoleculeSetRenderer
-
- All Implemented Interfaces:
IRenderer<IAtomContainerSet>
public class MoleculeSetRenderer extends AbstractRenderer<IAtomContainerSet> implements IRenderer<IAtomContainerSet>
A general renderer forIChemModel
s,IReaction
s, andIAtomContainer
s. The chem object is converted into a 'diagram' made up ofIRenderingElement
s. It takes anIDrawVisitor
to do the drawing of the generated diagram. Various display properties can be set using theRendererModel
.This class has several usage patterns. For just painting fit-to-screen do:
renderer.paintMolecule(molecule, visitor, drawArea)
for painting at a scale determined by the bond length in the RendererModel:if (moleculeIsNew) { renderer.setup(molecule, drawArea); } Rectangle diagramSize = renderer.paintMolecule(molecule, visitor); // ...update scroll bars here
to paint at full screen size, but not resize with each change:if (moleculeIsNew) { renderer.setScale(molecule); Rectangle diagramBounds = renderer.calculateDiagramBounds(molecule); renderer.setZoomToFit(diagramBounds, drawArea); renderer.paintMolecule(molecule, visitor); } else { Rectangle diagramSize = renderer.paintMolecule(molecule, visitor); // ...update scroll bars here }
finally, if you are scrolling, and have not changed the diagram:renderer.repaint(visitor)
will just repaint the previously generated diagram, at the same scale.There are two sets of methods for painting IChemObjects - those that take a Rectangle that represents the desired draw area, and those that return a Rectangle that represents the actual draw area. The first are intended for drawing molecules fitted to the screen (where 'screen' means any drawing area) while the second type of method are for drawing bonds at the length defined by the
RendererModel
parameter bondLength.There are two numbers used to transform the model so that it fits on screen. The first is
scale
, which is used to map model coordinates to screen coordinates. The second iszoom
which is used to, well, zoom the on screen coordinates. If the diagram is fit-to-screen, then the ratio of the bounds when drawn using bondLength and the bounds of the screen is used as the zoom.So, if the bond length on screen is set to 40, and the average bond length of the model is 2 (unitless, but roughly Ångstrom scale) then the scale will be 20. If the model is 10 units wide, then the diagram drawn at 100% zoom will be 10 * 20 = 200 in width on screen. If the screen is 400 pixels wide, then fitting it to the screen will make the zoom 200%. Since the zoom is just a floating point number, 100% = 1 and 200% = 2.
- Author:
- maclean
- Source code:
- main
- Belongs to CDK module:
- renderextra
-
-
Field Summary
-
Fields inherited from class org.openscience.cdk.renderer.AbstractRenderer
cachedDiagram, drawCenter, fontManager, generators, modelCenter, rendererModel, transform
-
-
Constructor Summary
Constructors Constructor Description MoleculeSetRenderer(List<IGenerator<IAtomContainer>> generators, IFontManager fontManager)
A renderer that generates diagrams using the specified generators and manages fonts with the supplied font manager.MoleculeSetRenderer(RendererModel rendererModel, List<IGenerator<IAtomContainer>> generators, IFontManager fontManager)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Rectangle
calculateDiagramBounds(IAtomContainerSet moleculeSet)
Given aIChemObject
, calculates the bounding rectangle in screen space.double
calculateScaleForBondLength(double modelBondLength)
Given a bond length for a model, calculate the scale that will transform this length to the on screen bond length in RendererModel.IRenderingElement
generateDiagram(IAtomContainerSet molecules)
The main method of the renderer, that uses each of the generators to create a different set ofIRenderingElement
s grouped together into a tree.List<IGenerator<IAtomContainerSet>>
getGenerators()
Returns aList
ofIGenerator
s for this renderer.Rectangle
paint(IAtomContainerSet moleculeSet, IDrawVisitor drawVisitor)
Paint an IChemObject.void
paint(IAtomContainerSet molecules, IDrawVisitor drawVisitor, Rectangle2D bounds, boolean resetCenter)
Paint a set of molecules.void
setScale(IAtomContainerSet moleculeSet)
Set the scale for anIAtomContainerSet
.void
setup(IAtomContainerSet moleculeSet, Rectangle screen)
Setup the transformations necessary to draw thisIAtomContainerSet
.Rectangle
shift(Rectangle screenBounds, Rectangle diagramBounds)
Determine the overlap of the diagram with the screen, and shift (if necessary) the diagram draw center.-
Methods inherited from class org.openscience.cdk.renderer.AbstractRenderer
calculateScreenBounds, convertToDiagramBounds, getBounds, getDrawCenter, getModelCenter, getRenderer2DModel, paint, repaint, setDrawCenter, setModelCenter, setup, setupTransformNatural, setupTransformToFit, setZoom, setZoomToFit, shiftDrawCenter, toModelCoordinates, toScreenCoordinates
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.openscience.cdk.renderer.IRenderer
getRenderer2DModel, setZoom, shiftDrawCenter, toModelCoordinates, toScreenCoordinates
-
-
-
-
Constructor Detail
-
MoleculeSetRenderer
public MoleculeSetRenderer(List<IGenerator<IAtomContainer>> generators, IFontManager fontManager)
A renderer that generates diagrams using the specified generators and manages fonts with the supplied font manager.- Parameters:
generators
- a list of classes that implement the IGenerator interfacefontManager
- a class that manages mappings between zoom and font sizes
-
MoleculeSetRenderer
public MoleculeSetRenderer(RendererModel rendererModel, List<IGenerator<IAtomContainer>> generators, IFontManager fontManager)
-
-
Method Detail
-
setup
public void setup(IAtomContainerSet moleculeSet, Rectangle screen)
Setup the transformations necessary to draw thisIAtomContainerSet
.- Specified by:
setup
in interfaceIRenderer<IAtomContainerSet>
- Parameters:
moleculeSet
- theIAtomContainerSet
for what to set the scalescreen
- theRectangle
for which to calculate the scale
-
shift
public Rectangle shift(Rectangle screenBounds, Rectangle diagramBounds)
Determine the overlap of the diagram with the screen, and shift (if necessary) the diagram draw center. It returns a rectangle only because that is a convenient class to hold the four parameters calculated, but it is not a rectangle representing an area...- Overrides:
shift
in classAbstractRenderer<IAtomContainerSet>
- Parameters:
screenBounds
- the bounds of the screendiagramBounds
- the bounds of the diagram- Returns:
- the shape that the screen should be
-
setScale
public void setScale(IAtomContainerSet moleculeSet)
Set the scale for anIAtomContainerSet
. It calculates the average bond length of the model and calculates the multiplication factor to transform this to the bond length that is set in the RendererModel.- Specified by:
setScale
in interfaceIRenderer<IAtomContainerSet>
- Parameters:
moleculeSet
- theIAtomContainerSet
for what to set the scale
-
paint
public Rectangle paint(IAtomContainerSet moleculeSet, IDrawVisitor drawVisitor)
Paint an IChemObject.- Specified by:
paint
in interfaceIRenderer<IAtomContainerSet>
- Parameters:
moleculeSet
- the chem object to paintdrawVisitor
- the class that visits the generated elements- Returns:
- the rectangular area where was drawn
-
paint
public void paint(IAtomContainerSet molecules, IDrawVisitor drawVisitor, Rectangle2D bounds, boolean resetCenter)
Paint a set of molecules.- Specified by:
paint
in interfaceIRenderer<IAtomContainerSet>
- Parameters:
molecules
- theIAtomContainerSet
to paintdrawVisitor
- the visitor that does the drawingbounds
- the bounds on the screenresetCenter
- if true, set the draw center to be the center of bounds
-
generateDiagram
public IRenderingElement generateDiagram(IAtomContainerSet molecules)
The main method of the renderer, that uses each of the generators to create a different set ofIRenderingElement
s grouped together into a tree.- Specified by:
generateDiagram
in interfaceIRenderer<IAtomContainerSet>
- Overrides:
generateDiagram
in classAbstractRenderer<IAtomContainerSet>
- Parameters:
molecules
- the object of type T to draw- Returns:
- the diagram as a tree of
IRenderingElement
s
-
calculateDiagramBounds
public Rectangle calculateDiagramBounds(IAtomContainerSet moleculeSet)
Given aIChemObject
, calculates the bounding rectangle in screen space.- Specified by:
calculateDiagramBounds
in interfaceIRenderer<IAtomContainerSet>
- Parameters:
moleculeSet
- theIChemObject
to draw.- Returns:
- a rectangle in screen space.
-
calculateScaleForBondLength
public double calculateScaleForBondLength(double modelBondLength)
Given a bond length for a model, calculate the scale that will transform this length to the on screen bond length in RendererModel.- Specified by:
calculateScaleForBondLength
in classAbstractRenderer<IAtomContainerSet>
- Parameters:
modelBondLength
- the wanted model bond length in screen length- Returns:
- returns the scale that causes the drawn bond lengths in pixels to match the given model bond length
-
getGenerators
public List<IGenerator<IAtomContainerSet>> getGenerators()
Returns aList
ofIGenerator
s for this renderer.- Specified by:
getGenerators
in interfaceIRenderer<IAtomContainerSet>
- Returns:
- the list of generators for this renderer.
-
-