/rcdkjar/src/org/guha/rcdk/view/panels/MoleculeCell.java

http://github.com/rajarshi/cdkr · Java · 68 lines · 53 code · 9 blank · 6 comment · 1 complexity · bf25dc96a60080e25f35f8ea4ae4fbcf MD5 · raw file

  1. package org.guha.rcdk.view.panels;
  2. import org.guha.rcdk.view.RcdkDepictor;
  3. import org.openscience.cdk.DefaultChemObjectBuilder;
  4. import org.openscience.cdk.exception.CDKException;
  5. import org.openscience.cdk.interfaces.IAtomContainer;
  6. import org.openscience.cdk.smiles.SmilesParser;
  7. import javax.swing.*;
  8. import java.awt.*;
  9. import java.awt.image.BufferedImage;
  10. import java.io.IOException;
  11. /**
  12. * A <code>JPanel</code> to display 2D chemical structure depictions.
  13. *
  14. * @author Rajarshi Guha
  15. */
  16. public class MoleculeCell extends JPanel {
  17. private int preferredWidth;
  18. private int preferredHeight;
  19. private boolean isNew;
  20. IAtomContainer atomContainer;
  21. RcdkDepictor depictor;
  22. BufferedImage bufferedImage;
  23. public MoleculeCell(IAtomContainer atomContainer, RcdkDepictor depictor) throws IOException, CDKException {
  24. preferredHeight = depictor.getHeight();
  25. preferredWidth = depictor.getWidth();
  26. this.depictor = depictor;
  27. this.atomContainer = atomContainer;
  28. this.setPreferredSize(new Dimension(preferredWidth, preferredHeight));
  29. this.setBackground(Color.WHITE);
  30. this.setBorder(BorderFactory.createEtchedBorder());
  31. bufferedImage = depictor.getImage(atomContainer);
  32. isNew = true;
  33. }
  34. public void paint(Graphics g) {
  35. super.paint(g);
  36. if (isNew) {
  37. g.drawImage(bufferedImage, 0, 0, this);
  38. isNew = false;
  39. } else
  40. try {
  41. depictor.setWidth(getWidth());
  42. depictor.setHeight(getHeight());
  43. g.drawImage(depictor.getImage(atomContainer), 0, 0, this);
  44. } catch (CDKException e) {
  45. e.printStackTrace();
  46. }
  47. }
  48. public static void main(String[] args) throws CDKException, IOException {
  49. SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance());
  50. // IAtomContainer container = sp.parseSmiles("C1CN2CCN(CCCN(CCN(C1)Cc1ccccn1)CC2)C");
  51. IAtomContainer container = sp.parseSmiles("[Na+].[Na+].[Na+].[Na+].[Na+].[Na+].[Na+].[Na+].[Na+].[Na+].[Na+].[Na+].[Na+].CCCCc1ccc(CO[C@H]2O[C@H](COS(=O)(=O)[O-])[C@@H](OS(=O)(=O)[O-])[C@H](OS(=O)(=O)[O-])[C@@H]2O[C@H]3O[C@H](COS(=O)(=O)[O-])[C@@H](OS(=O)(=O)[O-])[C@H](O[C@H]4O[C@H](COS(=O)(=O)[O-])[C@@H](OS(=O)(=O)[O-])[C@H](O[C@H]5O[C@H](COS(=O)(=O)[O-])[C@@H](OS(=O)(=O)[O-])[C@H](OS(=O)(=O)[O-])[C@@H]5OS(=O)(=O)[O-])[C@@H]4OS(=O)(=O)[O-])[C@@H]3OS(=O)(=O)[O-])cc1 ");
  52. RcdkDepictor depictor = new RcdkDepictor(300, 300, 1.3, "cow", "off", "reagents", true, false, 100, "");
  53. MoleculeCell mcell = new MoleculeCell(container, depictor);
  54. JFrame frame = new JFrame("Molecule Cell");
  55. frame.getContentPane().add(mcell);
  56. frame.pack();
  57. frame.setVisible(true);
  58. }
  59. }