int WIDTH = 200;
int HEIGHT = 200;
// the draw area and the image should be the same size
Rectangle drawArea = new Rectangle(WIDTH, HEIGHT);
Image image = new BufferedImage(
WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB
);
IMolecule triazole = MoleculeFactory.make123Triazole();
StructureDiagramGenerator sdg = new StructureDiagramGenerator();
sdg.setMolecule(triazole);
sdg.generateCoordinates();
triazole = sdg.getMolecule();
// generators make the image elements
List<IGenerator> generators = new ArrayList<IGenerator>();
generators.add(new BasicSceneGenerator());
generators.add(new BasicBondGenerator());
generators.add(new BasicAtomGenerator());
// the renderer needs to have a toolkit-specific font manager
AtomContainerRenderer renderer =
new AtomContainerRenderer(generators, new AWTFontManager());
model = renderer.getRenderer2DModel();
model.set(Margin.class, (double)0.0);
model.set(CompactAtom.class, true);
model.set(CompactShape.class, Shape.SQUARE);
// the call to 'setup' only needs to be done on the first paint
renderer.setup(triazole, drawArea);
// paint the background
Graphics2D g2 = (Graphics2D)image.getGraphics();
g2.setColor(Color.WHITE);
g2.fillRect(0, 0, WIDTH, HEIGHT);
// the paint method also needs a toolkit-specific renderer
renderer.paint(triazole, new AWTDrawVisitor(g2));
ImageIO.write(
(RenderedImage)image, "PNG",
new File("CompactAtomParam.png")
);
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
fixed code for visit(RectangleElement rectangle) in class AWTDrawVisitor.
Will correctly draw square atoms for compact style. (Previous code was attempting to draw the rectangle with a negative height and thus not being painted correctly)/
Example (Groovy) code which will not draw any squares for me:
import java.util.List;
import java.awt.;
import java.awt.image.;
import javax.imageio.;
import org.openscience.cdk.;
import org.openscience.cdk.interfaces.;
import org.openscience.cdk.layout.;
import org.openscience.cdk.renderer.;
import org.openscience.cdk.renderer.font.;
import org.openscience.cdk.renderer.generators.;
import org.openscience.cdk.renderer.visitor.;
import org.openscience.cdk.templates.*;
import org.openscience.cdk.renderer.generators.BasicAtomGenerator.CompactAtom;
import org.openscience.cdk.renderer.generators.BasicAtomGenerator.CompactShape;
import org.openscience.cdk.renderer.generators.BasicAtomGenerator.Shape;
import org.openscience.cdk.renderer.generators.BasicSceneGenerator.Margin;
int WIDTH = 200;
int HEIGHT = 200;
// the draw area and the image should be the same size
Rectangle drawArea = new Rectangle(WIDTH, HEIGHT);
Image image = new BufferedImage(
WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB
);
IMolecule triazole = MoleculeFactory.make123Triazole();
StructureDiagramGenerator sdg = new StructureDiagramGenerator();
sdg.setMolecule(triazole);
sdg.generateCoordinates();
triazole = sdg.getMolecule();
// generators make the image elements
List<IGenerator> generators = new ArrayList<IGenerator>();
generators.add(new BasicSceneGenerator());
generators.add(new BasicBondGenerator());
generators.add(new BasicAtomGenerator());
// the renderer needs to have a toolkit-specific font manager
AtomContainerRenderer renderer =
new AtomContainerRenderer(generators, new AWTFontManager());
model = renderer.getRenderer2DModel();
model.set(Margin.class, (double)0.0);
model.set(CompactAtom.class, true);
model.set(CompactShape.class, Shape.SQUARE);
// the call to 'setup' only needs to be done on the first paint
renderer.setup(triazole, drawArea);
// paint the background
Graphics2D g2 = (Graphics2D)image.getGraphics();
g2.setColor(Color.WHITE);
g2.fillRect(0, 0, WIDTH, HEIGHT);
// the paint method also needs a toolkit-specific renderer
renderer.paint(triazole, new AWTDrawVisitor(g2));
ImageIO.write(
(RenderedImage)image, "PNG",
new File("CompactAtomParam.png")
);
I will look into it.
fixed code for visit(RectangleElement rectangle) in class AWTDrawVisitor.
Will correctly draw square atoms for compact style. (Previous code was attempting to draw the rectangle with a negative height and thus not being painted correctly)/
Last edit: Brendan T. Reilly 2013-11-10
Thanks - patch awaiting review: https://sourceforge.net/p/cdk/patches/704/