1
2
3
4
5
6 import os
7
9 useAGG=False
10 useCairo=False
11 Canvas=None
12 if not os.environ.get('RDKIT_CANVAS',''):
13 try:
14 from cairoCanvas import Canvas
15 useCairo=True
16 except ImportError:
17 try:
18 from aggCanvas import Canvas
19 useAGG=True
20 except ImportError:
21 from spingCanvas import Canvas
22 else:
23 canv=os.environ['RDKIT_CANVAS'].lower()
24 if canv =='cairo':
25 from cairoCanvas import Canvas
26 useCairo=True
27 elif canv =='agg':
28 from aggCanvas import Canvas
29 useAGG=True
30 else:
31 from spingCanvas import Canvas
32 return useAGG,useCairo,Canvas
33
34 -def MolToImage(mol, size=(300,300), kekulize=True, wedgeBonds=True,
35 canvas=None, **kwargs):
36 """ returns a PIL image containing a drawing of the molecule
37
38 Keyword arguments:
39 kekulize -- run kekulization routine on input `mol` (default True)
40 size -- final image size, in pixel (default (300,300))
41 wedgeBonds -- draw wedge (stereo) bonds (default True)
42 highlightAtoms -- list of atoms to highlight (default [])
43 highlightMap -- dictionary of (atom, color) pairs (default None)
44 """
45 from MolDrawing import MolDrawing
46 if not mol:
47 raise ValueError,'Null molecule provided'
48 if canvas is None:
49 useAGG,useCairo,Canvas=_getCanvas()
50 if useAGG or useCairo:
51 import Image
52 img = Image.new("RGBA",size,"white")
53 canvas = Canvas(img)
54 else:
55 from spingCanvas import Canvas
56 canvas = Canvas(size=size,name='MolToImageFile')
57 img = canvas._image
58 drawer = MolDrawing(canvas)
59
60 if kekulize:
61 from rdkit import Chem
62 mol = Chem.Mol(mol.ToBinary())
63 Chem.Kekulize(mol)
64
65 if not mol.GetNumConformers():
66 from rdkit.Chem import AllChem
67 AllChem.Compute2DCoords(mol)
68
69 drawer.wedgeDashedBonds=wedgeBonds
70 drawer.AddMol(mol,**kwargs)
71 canvas.flush()
72
73 return img
74
75 -def MolToFile(mol,fileName,size=(300,300),kekulize=True, wedgeBonds=True,
76 imageType=None,**kwargs):
112
113 -def MolToImageFile(mol,filename,size=(300,300),kekulize=True, wedgeBonds=True,
114 **kwargs):
115 """ DEPRECATED: please use MolToFile instead
116
117 """
118 img = MolToImage(mol,size=size,kekulize=kekulize,wedgeBonds=wedgeBonds,**kwargs)
119 img.save(filename)
120
121 tkRoot=None
122 tkLabel=None
123 tkPI=None
124 -def ShowMol(mol,size=(300,300),kekulize=True,wedgeBonds=True,
125 title='RDKit Molecule',**kwargs):
126 """ Generates a picture of a molecule and displays it in a Tkinter window
127 """
128 global tkRoot,tkLabel,tkPI
129 import Tkinter
130 import ImageTk
131
132 img = MolToImage(mol,size,kekulize,wedgeBonds,**kwargs)
133
134 if not tkRoot:
135 tkRoot = Tkinter.Tk()
136 tkRoot.title(title)
137 tkPI = ImageTk.PhotoImage(img)
138 tkLabel = Tkinter.Label(tkRoot,image=tkPI)
139 tkLabel.place(x=0,y=0,width=img.size[0],height=img.size[1])
140 else:
141 tkPI.paste(img)
142 tkRoot.geometry('%dx%d'%(img.size))
143