求助! 如何把化学结构的文件mol格式,转化为SVG矢量图格式?

OOo,TeX,KO,ABI,GIMP,Picasa,ProE,QCAD,Inkscape,Kicad,Eagle
回复
ispotato
帖子: 11
注册时间: 2012-05-10 14:03

求助! 如何把化学结构的文件mol格式,转化为SVG矢量图格式?

#1

帖子 ispotato » 2012-05-10 14:13

各位好!

我是化学信息学的初学者, 最近正在研究如何将mol转化为svg图的问题,我是初学者,对svg不太熟悉,希望和请教以下,

1. 如何将mol中的原子坐标与键转化为svg的点和边?
2. 如何着色处理? 还有一些特殊的化学键如何处理?
3. 可有现成的mol2svg转化工具,我想学习一下, 各位高手可否给予一些知识和帮助?

万分感谢您!
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 求助! 如何把化学结构的文件mol格式,转化为SVG矢量图格式?

#2

帖子 eexpress » 2012-05-10 14:30

自己看描述。
● as ~dmolfile~dchem
p jmol - Molecular Viewer
p jmol-applet - Jmol Java applet
p libchemistry-openbabel-perl - Chemical toolbox library (perl bindings)
p libopenbabel-dev - Chemical toolbox library (development file
p libopenbabel-doc - Chemical toolbox library (documentation)
p libopenbabel4 - Chemical toolbox library
p openbabel - Chemical toolbox utilities (cli)
p pymol - Molecular Graphics System
p python-openbabel - Chemical toolbox library (python bindings)
● 鸣学
ispotato
帖子: 11
注册时间: 2012-05-10 14:03

Re: 求助! 如何把化学结构的文件mol格式,转化为SVG矢量图格式?

#4

帖子 ispotato » 2012-05-10 16:00

谢谢楼上的详细资料, 我正在逐个尝试,

看来论坛里藏龙卧虎阿 都是对化学信息学很有研究的高手
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

Re: 求助! 如何把化学结构的文件mol格式,转化为SVG矢量图格式?

#5

帖子 xiooli » 2012-05-10 16:19

用Indigo吧

代码: 全选

from indigo import *
from indigo_renderer import *
import os

class Mol2pic():
    def __init__(self, mol_string = '', width = 600, height = 600):
        self.idg = Indigo()
        self.renderer = IndigoRenderer(self.idg)
        self.idg.setOption("render-comment-position", "top")
        self.idg.setOption("render-image-size", width, height)
#        self.idg.setOption("render-background-color", 1.0, 1.0, 1.0)
        self.idg.setOption('render-label-mode', 'forcehide')
        self.idg.setOption('render-margins', 5, 5)
        self.idg.setOption('render-coloring', True)
        self.idg.setOption('render-stereo-old-style', True)

        if mol_string:
            self.set_mol(mol_string)

    def set_mol(self, string, fmt = 'mol'):
        #print string
        string = string.replace('\\n', '\n')
        if os.path.exists(string):
            self.mol = self.idg.loadMoleculeFromFile(string)
        else:
            self.mol = self.idg.loadMolecule(string)
        self.mol.foldHydrogens()

    def to_pic(self, out_fmt = 'svg', auto_layout = False, filename = None):
        self.idg.setOption("render-output-format", out_fmt)
        if auto_layout:
            self.mol.layout()
        if filename:
            try:
                self.renderer.renderToFile(self.mol, filename)
                return filename
            except Exception, e:
                print e
                pass
        return self.renderer.renderToBuffer(self.mol).tostring()
ispotato
帖子: 11
注册时间: 2012-05-10 14:03

Re: 求助! 如何把化学结构的文件mol格式,转化为SVG矢量图格式?

#6

帖子 ispotato » 2012-05-16 17:25

eexpress 写了:自己看描述。
● as ~dmolfile~dchem
p jmol - Molecular Viewer
p jmol-applet - Jmol Java applet
p libchemistry-openbabel-perl - Chemical toolbox library (perl bindings)
p libopenbabel-dev - Chemical toolbox library (development file
p libopenbabel-doc - Chemical toolbox library (documentation)
p libopenbabel4 - Chemical toolbox library
p openbabel - Chemical toolbox utilities (cli)
p pymol - Molecular Graphics System
p python-openbabel - Chemical toolbox library (python bindings)
请教一个很棘手的问题,我现在通过调用openbabel,生成化合物SVG图, 经常出现化学键手性的错误问题,这是不是openbabel的bug?
另外,jmol如何生成svg图片?我找了半天 没有找到.. 麻烦您说详细些?
ispotato
帖子: 11
注册时间: 2012-05-10 14:03

Re: 求助! 如何把化学结构的文件mol格式,转化为SVG矢量图格式?

#7

帖子 ispotato » 2012-05-16 17:31

xiooli 写了:用Indigo吧

代码: 全选

from indigo import *
from indigo_renderer import *
import os

class Mol2pic():
    def __init__(self, mol_string = '', width = 600, height = 600):
        self.idg = Indigo()
        self.renderer = IndigoRenderer(self.idg)
        self.idg.setOption("render-comment-position", "top")
        self.idg.setOption("render-image-size", width, height)
#        self.idg.setOption("render-background-color", 1.0, 1.0, 1.0)
        self.idg.setOption('render-label-mode', 'forcehide')
        self.idg.setOption('render-margins', 5, 5)
        self.idg.setOption('render-coloring', True)
        self.idg.setOption('render-stereo-old-style', True)

        if mol_string:
            self.set_mol(mol_string)

    def set_mol(self, string, fmt = 'mol'):
        #print string
        string = string.replace('\\n', '\n')
        if os.path.exists(string):
            self.mol = self.idg.loadMoleculeFromFile(string)
        else:
            self.mol = self.idg.loadMolecule(string)
        self.mol.foldHydrogens()

    def to_pic(self, out_fmt = 'svg', auto_layout = False, filename = None):
        self.idg.setOption("render-output-format", out_fmt)
        if auto_layout:
            self.mol.layout()
        if filename:
            try:
                self.renderer.renderToFile(self.mol, filename)
                return filename
            except Exception, e:
                print e
                pass
        return self.renderer.renderToBuffer(self.mol).tostring()
Indigo是什么工具?我搜了很久,找不到 可否给个链接?谢谢!
ispotato
帖子: 11
注册时间: 2012-05-10 14:03

Re: 求助! 如何把化学结构的文件mol格式,转化为SVG矢量图格式?

#9

帖子 ispotato » 2012-05-23 11:39

ispotato 写了:
xiooli 写了:用Indigo吧

代码: 全选

from indigo import *
from indigo_renderer import *
import os

class Mol2pic():
    def __init__(self, mol_string = '', width = 600, height = 600):
        self.idg = Indigo()
        self.renderer = IndigoRenderer(self.idg)
        self.idg.setOption("render-comment-position", "top")
        self.idg.setOption("render-image-size", width, height)
#        self.idg.setOption("render-background-color", 1.0, 1.0, 1.0)
        self.idg.setOption('render-label-mode', 'forcehide')
        self.idg.setOption('render-margins', 5, 5)
        self.idg.setOption('render-coloring', True)
        self.idg.setOption('render-stereo-old-style', True)

        if mol_string:
            self.set_mol(mol_string)

    def set_mol(self, string, fmt = 'mol'):
        #print string
        string = string.replace('\\n', '\n')
        if os.path.exists(string):
            self.mol = self.idg.loadMoleculeFromFile(string)
        else:
            self.mol = self.idg.loadMolecule(string)
        self.mol.foldHydrogens()

    def to_pic(self, out_fmt = 'svg', auto_layout = False, filename = None):
        self.idg.setOption("render-output-format", out_fmt)
        if auto_layout:
            self.mol.layout()
        if filename:
            try:
                self.renderer.renderToFile(self.mol, filename)
                return filename
            except Exception, e:
                print e
                pass
        return self.renderer.renderToBuffer(self.mol).tostring()
Indigo是什么工具?我搜了很久,找不到 可否给个链接?谢谢!
我用java调用,类似self.idg.setOption("render-comment-position", 这一类的参数设置,一律不能通过编译,也找不到相关的使用说明,
可有java调用的例子?setOption的这些参数从哪里可以看到如何设置呢?初学者,还请您详细指点了,谢谢!
ispotato
帖子: 11
注册时间: 2012-05-10 14:03

Re: 求助! 如何把化学结构的文件mol格式,转化为SVG矢量图格式?

#10

帖子 ispotato » 2012-05-24 12:28

问题已经解决,java用Indigo
非常感谢各位牛人的大力协助!学到了不少东西!
谢谢!
回复