Skip to content

Instantly share code, notes, and snippets.

@olas
Created November 29, 2010 13:23
Show Gist options
  • Save olas/719941 to your computer and use it in GitHub Desktop.
Save olas/719941 to your computer and use it in GitHub Desktop.
MoleculeImageCreator
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;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment