Skip to content

Instantly share code, notes, and snippets.

@gilleain
Created June 12, 2011 20:46
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save gilleain/1021964 to your computer and use it in GitHub Desktop.
A method to draw molecules with CDK
public void drawMolecule(IMolecule molecule, String name) throws Exception {
// layout the molecule
StructureDiagramGenerator sdg = new StructureDiagramGenerator();
sdg.setMolecule(molecule, false);
sdg.generateCoordinates();
// make generators
List<IGenerator<IAtomContainer>> generators = new ArrayList<IGenerator<IAtomContainer>>();
generators.add(new BasicSceneGenerator());
generators.add(new BasicBondGenerator());
generators.add(new RingPlateGenerator());
generators.add(new BasicAtomGenerator());
// setup the renderer
AtomContainerRenderer renderer = new AtomContainerRenderer(generators, new AWTFontManager());
RendererModel model = renderer.getRenderer2DModel();
model.set(BasicAtomGenerator.CompactAtom.class, true);
model.set(BasicAtomGenerator.AtomRadius.class, 6.0);
model.set(BasicAtomGenerator.CompactShape.class, BasicAtomGenerator.Shape.OVAL);
model.set(BasicAtomGenerator.KekuleStructure.class, true);
model.set(BasicBondGenerator.BondWidth.class, 5.0);
// get the image
Image image = new BufferedImage(400, 400, BufferedImage.TYPE_4BYTE_ABGR);
Graphics2D g = (Graphics2D)image.getGraphics();
g.setColor(Color.WHITE);
g.fill(new Rectangle2D.Double(0, 0, 400, 400));
// paint
// renderer.paint(molecule, new AWTDrawVisitor(g));
renderer.paint(molecule, new AWTDrawVisitor(g),
new Rectangle2D.Double(0, 0, 400, 400), true);
g.dispose();
// write to file
File file = new File(OUTPUT_DIR, name + ".png");
ImageIO.write((RenderedImage)image, "PNG", file);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment