<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) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): ChemistryJavaCDK
    主站蜘蛛池模板: 一级**爱片免费视频| 精品无码AV无码免费专区| 爱情岛亚洲论坛在线观看 | 伊人免费在线观看| 一级毛片完整版免费播放一区| 日本激情猛烈在线看免费观看| 亚洲男人的天堂在线va拉文| 国产成人无码区免费A∨视频网站 国产成人涩涩涩视频在线观看免费 | 添bbb免费观看高清视频| 日韩色视频一区二区三区亚洲 | 久久久青草青青亚洲国产免观| 中文字幕中韩乱码亚洲大片| 国产成人亚洲精品狼色在线| 亚洲三区在线观看无套内射| 亚洲色成人WWW永久网站| 久久精品国产亚洲| 亚洲综合视频在线观看| 91亚洲va在线天线va天堂va国产| 亚洲国产美女在线观看| 亚洲人成人77777网站不卡 | 在线观看午夜亚洲一区| 久久亚洲国产欧洲精品一| 久久亚洲AV无码精品色午夜麻| 亚洲精品国产专区91在线| 亚洲av永久无码嘿嘿嘿| 亚洲成a∧人片在线观看无码| 高潮毛片无遮挡高清免费视频 | 亚洲精品高清国产麻豆专区| 77777午夜亚洲| 国产亚洲男人的天堂在线观看| 深夜免费在线视频| 你懂的免费在线观看网站| 亚洲精品视频免费在线观看| 免费无码肉片在线观看| 国产在线观看免费完整版中文版| AV在线亚洲男人的天堂| 99久久精品国产亚洲| 亚洲日韩精品国产3区| 亚欧乱色国产精品免费视频| 亚洲va中文字幕无码久久| 很黄很色很刺激的视频免费|