<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 431,  comments - 344,  trackbacks - 0

    import Java.awt.Dimension;
    import Java.awt.Graphics2D;
    import Java.awt.geom.Rectangle2D;
    import Java.awt.image.BufferedImage;
    import Java.io.OutputStream;
    import Java.io.StringReader;
    import Java.util.Iterator;

    import javax.servlet.http.HttpServletResponse;
    import javax.vecmath.Point2d;

    import org.apache.log4j.Logger;
    import org.openscience.cdk.Molecule;
    import org.openscience.cdk.interfaces.IAtom;
    import org.openscience.cdk.interfaces.IMolecule;
    import org.openscience.cdk.io.MDLReader;
    import org.openscience.cdk.layout.StructureDiagramGenerator;
    import org.openscience.cdk.renderer.Renderer2DModel;
    import org.openscience.cdk.renderer.SimpleRenderer2D;

    public class ImageTypeExporterUtil {
     private static final Logger logger = Logger.getLogger(ImageTypeExporterUtil.class);
     
     /**
      * show molecule structure to image type (png, jpeg)
      *
      * @param mol String molecule stucture
      * @param length width and height
      * @param response HttpServletResponse object
      * @throws Exception
      *             if occurred exception ,then throw Exception
      */
     public static void showAsImage(String stucture, Integer length, HttpServletResponse response) throws Exception {
      logger.debug("ImageTypeExporterUtil.showAsImage..");
      
      StringReader mdl = new StringReader(stucture);
      MDLReader cdkMDL = new MDLReader(mdl);
      Molecule mol = new Molecule();
      cdkMDL.read(mol);
      // null coordinates
      Iterator<IAtom> itatoms = mol.atoms();
      while (itatoms.hasNext()) {
       IAtom atom = itatoms.next();
       atom.setPoint2d(null);
       atom.setPoint3d(null);
      }
      // generate 2D coordinates
      StructureDiagramGenerator sdg = new StructureDiagramGenerator();
      sdg.setMolecule(mol);
      try {
       sdg.generateCoordinates();
      } catch (Exception ex) {
       ex.printStackTrace();
      }
      IMolecule layedOutMol = sdg.getMolecule();
      // scale molecule
      final double UNDEF_POS = 100000;
      double minX = UNDEF_POS, minY = UNDEF_POS, maxX = UNDEF_POS, maxY = UNDEF_POS;
      itatoms = layedOutMol.atoms();
      while (itatoms.hasNext()) {
       IAtom atom = itatoms.next();
       Point2d point2d = atom.getPoint2d();
       if (minX == UNDEF_POS || minX > point2d.x)
        minX = point2d.x;
       if (minY == UNDEF_POS || minY > point2d.y)
        minY = point2d.y;
       if (maxX == UNDEF_POS || maxX < point2d.x)
        maxX = point2d.x;
       if (maxY == UNDEF_POS || maxY < point2d.y)
        maxY = point2d.y;
      }
      double scaleX = length / (maxX - minX + 1);
      double scaleY = length / (maxY - minY + 1);
      double scale = scaleX > scaleY ? scaleY : scaleX;
      double centreX = scale * (maxX + minX) / 2.;
      double centreY = scale * (maxY + minY) / 2.;
      double offsetX = length / 2. - centreX;
      double offsetY = length / 2. - centreY;
      itatoms = layedOutMol.atoms();
      while (itatoms.hasNext()) {
       IAtom atom = itatoms.next();
       Point2d a = atom.getPoint2d();
       Point2d b = new Point2d();
       b.x = a.x * scale + offsetX;
       b.y = a.y * scale + offsetY;
       atom.setPoint2d(b);
      }
      // set rendering properties
      Renderer2DModel r2dm = new Renderer2DModel();
      r2dm.setDrawNumbers(false);
      r2dm.setUseAntiAliasing(true);
      r2dm.setColorAtomsByType(true);
      r2dm.setShowAtomTypeNames(false);
      r2dm.setShowAromaticity(true);
      r2dm.setShowImplicitHydrogens(false);
      r2dm.setShowReactionBoxes(false);
      r2dm.setKekuleStructure(false);
      Dimension dim = new Dimension();
      dim.setSize(length, length);
      r2dm.setBackgroundDimension(dim);
      r2dm.setBackColor(java.awt.Color.WHITE);
      // render the image
      SimpleRenderer2D renderer = new SimpleRenderer2D();
      renderer.setRenderer2DModel(r2dm);
      BufferedImage bufferedImage = new BufferedImage(length, length,
        BufferedImage.TYPE_INT_RGB);
      Graphics2D graphics = bufferedImage.createGraphics();
      graphics.setPaint(java.awt.Color.WHITE);
      Rectangle2D.Float rectangle = new Rectangle2D.Float(0, 0, length, length);
      graphics.fill(rectangle);
      renderer.paintMolecule(layedOutMol, graphics);
      // write the image to response
      response.setContentType("image/png");
      OutputStream out = response.getOutputStream();
      try {
       javax.imageio.ImageIO.write(bufferedImage, "png", out);
      } finally {
       out.close();
      }
     }
    }

    posted on 2009-10-22 08:51 周銳 閱讀(769) 評論(0)  編輯  收藏 所屬分類: ChemistryJavaCDK
    主站蜘蛛池模板: 亚洲精品伦理熟女国产一区二区| 亚洲AV无码一区二区三区网址| 亚洲精品久久无码| 一级午夜a毛片免费视频| 污视频在线免费观看| 永久免费看bbb| 亚洲av无码不卡| 亚洲精品天堂成人片AV在线播放| 国产高潮流白浆喷水免费A片 | 18禁止看的免费污网站| 四虎影视精品永久免费| 久久亚洲美女精品国产精品| 亚洲欧美日韩久久精品| 免费在线看黄的网站| 国产黄色片在线免费观看| 亚洲激情在线视频| 老司机午夜精品视频在线观看免费 | 久久久久免费精品国产小说| 午夜老司机免费视频| 久久亚洲国产中v天仙www| 亚洲Av无码国产一区二区| 日本黄色动图免费在线观看| 国产又黄又爽又猛的免费视频播放| 亚洲福利视频导航| 黄色a级免费网站| 一二三四免费观看在线电影| 国产亚洲色婷婷久久99精品91| 亚洲欧美成人av在线观看| 三年片在线观看免费大全电影| 日批日出水久久亚洲精品tv| 亚洲AV色吊丝无码| 久久精品视频免费看| 亚洲av无码国产精品色在线看不卡 | 亚洲依依成人亚洲社区| 男女午夜24式免费视频 | 在线免费观看a级片| 亚洲一区二区影院| 一本久久A久久免费精品不卡| 免费看香港一级毛片 | 久久综合亚洲色HEZYO社区| 成年大片免费视频播放一级|