public class ReactionSetRenderer extends AbstractRenderer<IReactionSet> implements IRenderer<IReactionSet>
IChemModel
s, IReaction
s, and
IAtomContainer
s. The chem object
is converted into a 'diagram' made up of IRenderingElement
s. It takes
an IDrawVisitor
to do the drawing of the generated diagram. Various
display properties can be set using the RendererModel
.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 hereto 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 is zoom 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.
cachedDiagram, drawCenter, fontManager, generators, modelCenter, rendererModel, transform
Modifier | Constructor and Description |
---|---|
|
ReactionSetRenderer(List<IGenerator<IAtomContainer>> generators,
IFontManager fontManager)
A renderer that generates diagrams using the specified
generators and manages fonts with the supplied font manager.
|
|
ReactionSetRenderer(List<IGenerator<IAtomContainer>> generators,
List<IGenerator<IReaction>> reactionGenerators,
IFontManager fontManager)
A renderer that generates diagrams using the specified
generators for
IAtomContainer s and IReactionSet s
and manages fonts with the supplied font manager. |
|
ReactionSetRenderer(RendererModel rendererModel,
List<IGenerator<IAtomContainer>> generators,
IFontManager fontManager) |
protected |
ReactionSetRenderer(RendererModel rendererModel,
List<IGenerator<IAtomContainer>> generators,
List<IGenerator<IReaction>> reactionGenerators,
IFontManager fontManager) |
Modifier and Type | Method and Description |
---|---|
Rectangle |
calculateDiagramBounds(IReactionSet reactionSet)
Given a
IChemObject , 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.
|
List<IGenerator<IReactionSet>> |
getGenerators()
Returns a
List of IGenerator s for this renderer. |
Rectangle |
paint(IReactionSet reactionSet,
IDrawVisitor drawVisitor)
Paint an IChemObject.
|
void |
paint(IReactionSet reactionSet,
IDrawVisitor drawVisitor,
Rectangle2D bounds,
boolean resetCenter)
Paint a set of reactions.
|
void |
setScale(IReactionSet reactionSet)
Set the scale for an IReactionSet.
|
void |
setup(IReactionSet reactionSet,
Rectangle screen)
Setup the transformations necessary to draw this Reaction Set.
|
calculateScreenBounds, convertToDiagramBounds, generateDiagram, getBounds, getDrawCenter, getModelCenter, getRenderer2DModel, paint, repaint, setDrawCenter, setModelCenter, setup, setupTransformNatural, setupTransformToFit, setZoom, setZoomToFit, shift, shiftDrawCenter, toModelCoordinates, toScreenCoordinates
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
generateDiagram, getRenderer2DModel, setZoom, shiftDrawCenter, toModelCoordinates, toScreenCoordinates
public ReactionSetRenderer(List<IGenerator<IAtomContainer>> generators, IFontManager fontManager)
generators
- a list of classes that implement the IGenerator interfacefontManager
- a class that manages mappings between zoom and font sizespublic ReactionSetRenderer(RendererModel rendererModel, List<IGenerator<IAtomContainer>> generators, IFontManager fontManager)
public ReactionSetRenderer(List<IGenerator<IAtomContainer>> generators, List<IGenerator<IReaction>> reactionGenerators, IFontManager fontManager)
IAtomContainer
s and IReactionSet
s
and manages fonts with the supplied font manager.generators
- a list of classes that implement the IGenerator
interfacereactionGenerators
- a list of classes that implement the IGenerator
interfacefontManager
- a class that manages mappings between zoom and font sizesprotected ReactionSetRenderer(RendererModel rendererModel, List<IGenerator<IAtomContainer>> generators, List<IGenerator<IReaction>> reactionGenerators, IFontManager fontManager)
public void setup(IReactionSet reactionSet, Rectangle screen)
setup
in interface IRenderer<IReactionSet>
reactionSet
- screen
- public void setScale(IReactionSet reactionSet)
setScale
in interface IRenderer<IReactionSet>
reactionSet
- public Rectangle paint(IReactionSet reactionSet, IDrawVisitor drawVisitor)
paint
in interface IRenderer<IReactionSet>
reactionSet
- the chem object to paintdrawVisitor
- the class that visits the generated elementspublic void paint(IReactionSet reactionSet, IDrawVisitor drawVisitor, Rectangle2D bounds, boolean resetCenter)
paint
in interface IRenderer<IReactionSet>
reactionSet
- the reaction to paintdrawVisitor
- the visitor that does the drawingbounds
- the bounds on the screenresetCenter
- if true, set the draw center to be the center of boundspublic Rectangle calculateDiagramBounds(IReactionSet reactionSet)
IChemObject
, calculates the bounding rectangle in screen
space.calculateDiagramBounds
in interface IRenderer<IReactionSet>
reactionSet
- the IChemObject
to draw.public double calculateScaleForBondLength(double modelBondLength)
calculateScaleForBondLength
in class AbstractRenderer<IReactionSet>
modelBondLength
- the wanted model bond length in screen lengthpublic List<IGenerator<IReactionSet>> getGenerators()
List
of IGenerator
s for this renderer.getGenerators
in interface IRenderer<IReactionSet>
Copyright © 2017. All Rights Reserved.