Package rdkit :: Package Chem :: Package Draw :: Module spingCanvas
[hide private]
[frames] | no frames]

Source Code for Module rdkit.Chem.Draw.spingCanvas

  1  # $Id$ 
  2  # 
  3  #  Copyright (C) 2008 Greg Landrum 
  4  # 
  5  #   @@ All Rights Reserved @@ 
  6  #  This file is part of the RDKit. 
  7  #  The contents are covered by the terms of the BSD license 
  8  #  which is included in the file license.txt, found at the root 
  9  #  of the RDKit source tree. 
 10  # 
 11  from rdkit.sping import pid 
 12   
 13  import math,re 
 14   
 15  from rdkit.sping.PIL.pidPIL import PILCanvas 
 16  from rdkit.Chem.Draw.canvasbase import CanvasBase 
 17   
 18  faceMap={'sans':'helvetica', 
 19           'serif':'times'} 
 20   
21 -def convertColor(color):
22 color = pid.Color(color[0],color[1],color[2]) 23 return color
24 25
26 -class Canvas(CanvasBase):
27 - def __init__(self, size, name, imageType='png'):
28 if imageType=="pdf": 29 from rdkit.sping.PDF.pidPDF import PDFCanvas as _Canvas 30 elif imageType=="ps": 31 from rdkit.sping.PS.pidPS import PSCanvas as _Canvas #@UnresolvedImport 32 elif imageType=="svg": 33 from rdkit.sping.SVG.pidSVG import SVGCanvas as _Canvas 34 elif imageType=="png": 35 from rdkit.sping.PIL.pidPIL import PILCanvas as _Canvas 36 else: 37 raise ValueError('unrecognized format: %s'%imageType) 38 self.canvas = _Canvas(size=size, name=name) 39 if hasattr(self.canvas,'_image'): 40 self._image = self.canvas._image 41 else: 42 self._image = None 43 self.size = size
44
45 - def addCanvasLine(self, p1,p2,color=(0,0,0),color2=None,**kwargs):
46 if color2 and color2!=color: 47 mp = (p1[0]+p2[0])/2.,(p1[1]+p2[1])/2. 48 color = convertColor(color) 49 self.canvas.drawLine(p1[0],p1[1],mp[0],mp[1], 50 color=color, 51 width=int(kwargs.get('linewidth',1)), 52 dash=kwargs.get('dash',None)) 53 color2 = convertColor(color2) 54 self.canvas.drawLine(mp[0],mp[1],p2[0],p2[1], 55 color=color2, 56 width=int(kwargs.get('linewidth',1)), 57 dash=kwargs.get('dash',None)) 58 else: 59 color = convertColor(color) 60 width=kwargs.get('linewidth',1) 61 self.canvas.drawLine(p1[0],p1[1],p2[0],p2[1], 62 color=color, 63 width=int(width), 64 dash=kwargs.get('dash',None))
65
66 - def addCanvasText(self, text,pos,font,color=(0,0,0),**kwargs):
67 text = re.sub(r'\<.+?\>','',text) 68 font = pid.Font(face=faceMap[font.face],size=font.size) 69 txtWidth,txtHeight=self.canvas.stringBox(text,font) 70 bw,bh=txtWidth+txtHeight*0.4,txtHeight*1.4 71 offset = txtWidth*pos[2] 72 labelP = pos[0]-txtWidth/2+offset,pos[1]+txtHeight/2 73 color = convertColor(color) 74 self.canvas.drawString(text,labelP[0],labelP[1],font,color=color) 75 return (bw,bh,offset)
76
77 - def addCanvasPolygon(self, ps,color=(0,0,0),fill=True,stroke=False,**kwargs):
78 if not fill and not stroke: return 79 edgeWidth=kwargs.get('lineWidth',0) 80 edgeColor=pid.transparent 81 color = convertColor(color) 82 if not stroke: 83 edgeWidth=0 84 edgeColor=pid.transparent 85 else: 86 edgeWidth=kwargs.get('lineWidth',1) 87 edgeColor=color 88 if not fill: 89 fillColor = pid.transparent 90 else: 91 fillColor = color 92 self.canvas.drawPolygon(ps,edgeColor=edgeColor,edgeWidth=int(edgeWidth),fillColor=fillColor,closed=1)
93
94 - def addCanvasDashedWedge(self,p1,p2,p3,dash=(2,2),color=(0,0,0), 95 color2=None,**kwargs):
96 color = convertColor(color) 97 dash = (4,4) 98 pts1 = self._getLinePoints(p1,p2,dash) 99 pts2 = self._getLinePoints(p1,p3,dash) 100 101 if len(pts2)<len(pts1): pts2,pts1=pts1,pts2 102 103 for i in range(len(pts1)): 104 self.canvas.drawLine(pts1[i][0],pts1[i][1],pts2[i][0],pts2[i][1], 105 color=color,width=1)
106
107 - def flush(self):
108 self.canvas.flush()
109
110 - def save(self):
111 self.canvas.save()
112