Last active
December 10, 2015 01:28
-
-
Save mojaie/4359371 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.awt.Graphics2D; | |
import java.awt.Rectangle; | |
import java.awt.image.BufferedImage; | |
import java.io.File; | |
import java.io.FileNotFoundException; | |
import java.io.FileReader; | |
import java.io.Reader; | |
import java.util.ArrayList; | |
import java.util.List; | |
import javax.swing.ImageIcon; | |
import javax.swing.JFrame; | |
import javax.swing.JLabel; | |
import javax.swing.JPanel; | |
import javax.swing.SwingUtilities; | |
import org.openscience.cdk.Molecule; | |
import org.openscience.cdk.atomtype.CDKAtomTypeMatcher; | |
import org.openscience.cdk.exception.CDKException; | |
import org.openscience.cdk.interfaces.IAtom; | |
import org.openscience.cdk.interfaces.IAtomContainer; | |
import org.openscience.cdk.interfaces.IAtomType; | |
import org.openscience.cdk.interfaces.IMolecule; | |
import org.openscience.cdk.io.MDLV2000Reader; | |
import org.openscience.cdk.layout.StructureDiagramGenerator; | |
import org.openscience.cdk.tools.manipulator.AtomContainerManipulator; | |
import org.openscience.jchempaint.renderer.AtomContainerRenderer; | |
import org.openscience.jchempaint.renderer.font.AWTFontManager; | |
import org.openscience.jchempaint.renderer.generators.BasicBondGenerator; | |
import org.openscience.jchempaint.renderer.generators.ExtendedAtomGenerator; | |
import org.openscience.jchempaint.renderer.generators.IGenerator; | |
import org.openscience.jchempaint.renderer.visitor.AWTDrawVisitor; | |
public class JCPtest { | |
public static void main(String[] args) { | |
Runnable runnable = new AppMainRun(); | |
SwingUtilities.invokeLater(runnable); | |
} | |
} | |
class AppMainRun implements Runnable { | |
public void run() { | |
// sdfファイルから分子を読み込む | |
Reader reader = null; | |
try { | |
reader = new FileReader(new File("./temp/test/zinc_3929508.sdf")); | |
} catch (FileNotFoundException e) { | |
e.printStackTrace(); | |
} | |
MDLV2000Reader mdl = new MDLV2000Reader(reader); | |
IMolecule molecule = null; | |
try { | |
molecule = (IMolecule)mdl.read(new Molecule()); | |
} catch (CDKException e) { | |
e.printStackTrace(); | |
} | |
// 3D座標系の場合は2Dに変換 | |
StructureDiagramGenerator sdg = new StructureDiagramGenerator(); | |
sdg.setMolecule(molecule); | |
try { | |
sdg.generateCoordinates(); | |
} catch (CDKException e) { | |
e.printStackTrace(); | |
} | |
molecule = sdg.getMolecule(); | |
// 水素原子の削除 | |
molecule = (IMolecule) AtomContainerManipulator.removeHydrogens((IAtomContainer) molecule); | |
// 末端、ヘテロ原子上の水素のみ表示 | |
CDKAtomTypeMatcher matcher = CDKAtomTypeMatcher.getInstance(molecule.getBuilder()); | |
for (IAtom atom : molecule.atoms()) { | |
try { | |
IAtomType type = matcher.findMatchingAtomType(molecule, atom); | |
atom.setImplicitHydrogenCount( | |
type.getFormalNeighbourCount() - molecule.getConnectedAtomsCount(atom)); | |
} catch (CDKException e) { | |
e.printStackTrace(); | |
} | |
} | |
// 描画キャンパスの設定 | |
Rectangle drawArea = new Rectangle(20, 20, 360, 360); | |
BufferedImage img = new BufferedImage(400, 400, BufferedImage.TYPE_INT_RGB); | |
Graphics2D g2 = img.createGraphics(); | |
g2.fillRect(0, 0, 400, 400); | |
// ジェネレーターの設定 | |
List<IGenerator> generators = new ArrayList<IGenerator>(); | |
generators.add(new BasicBondGenerator()); | |
generators.add(new ExtendedAtomGenerator()); | |
// レンダリング | |
AtomContainerRenderer renderer = new AtomContainerRenderer(generators, new AWTFontManager(), true); | |
renderer.paintMolecule(molecule, new AWTDrawVisitor(g2), drawArea, true); | |
// パネルに構造式を表示 | |
JFrame frame = new JFrame(); | |
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | |
frame.setBounds(0, 0, 400, 400); | |
frame.setTitle("Oseltamivir"); | |
JPanel panel = new JPanel(); | |
JLabel label = new JLabel(); | |
ImageIcon icon = new ImageIcon(); | |
icon.setImage(img); | |
label.setIcon(icon); | |
panel.add(label); | |
frame.add(panel); | |
frame.setVisible(true); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment