Skip to content

Instantly share code, notes, and snippets.

@olas
Created November 29, 2010 13:23

Revisions

  1. olas created this gist Nov 29, 2010.
    75 changes: 75 additions & 0 deletions MoleculeImageCreator.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,75 @@
    package cdk.imagecreator;

    import java.awt.Color;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.Rectangle;
    import java.awt.geom.Rectangle2D;
    import java.awt.image.BufferedImage;
    import java.util.ArrayList;
    import java.util.List;

    import org.openscience.cdk.Molecule;
    import org.openscience.cdk.interfaces.IAtomContainer;
    import org.openscience.cdk.interfaces.IMolecule;
    import org.openscience.cdk.layout.StructureDiagramGenerator;
    import org.openscience.cdk.renderer.AtomContainerRenderer;
    import org.openscience.cdk.renderer.font.AWTFontManager;
    import org.openscience.cdk.renderer.generators.BasicAtomGenerator;
    import org.openscience.cdk.renderer.generators.BasicBondGenerator;
    import org.openscience.cdk.renderer.generators.BasicSceneGenerator;
    import org.openscience.cdk.renderer.generators.IGenerator;
    import org.openscience.cdk.renderer.visitor.AWTDrawVisitor;

    public class MoleculeImageCreator {


    public static Image createImage(IAtomContainer ac, List<Integer> atomsToHighlight, int width, int height){

    if (ac==null)
    return null;

    // 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);

    //Generate 2D
    IMolecule mol = new Molecule(ac);
    StructureDiagramGenerator sdg = new StructureDiagramGenerator();
    sdg.setMolecule(mol, true);
    try {
    sdg.generateCoordinates();
    } catch (Exception e) { }
    mol = sdg.getMolecule();

    // generators make the image elements
    List<IGenerator<IAtomContainer>> generators = new ArrayList<IGenerator<IAtomContainer>>();

    //Add the standard generators
    generators.add(new BasicSceneGenerator());

    generators.add(new BasicBondGenerator());
    BasicAtomGenerator agen = new BasicAtomGenerator();
    generators.add(agen);

    // the renderer needs to have a toolkit-specific font manager
    AtomContainerRenderer renderer = new AtomContainerRenderer(generators, new AWTFontManager());

    renderer.setup(mol, 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
    java.awt.geom.Rectangle2D.Double bounds = new Rectangle2D.Double(0, 0, width, height);
    renderer.paint(mol, new AWTDrawVisitor(g2), bounds, true);
    //renderer.paint(mol, new AWTDrawVisitor(g2));

    return image;

    }

    }