class Canvas(CanvasBase): def __init__(self, size, name, imageType='png'): if imageType=="pdf": from rdkit.sping.PDF.pidPDF import PDFCanvas as Canvas elif imageType=="ps": from rdkit.sping.PS.pidPS import PSCanvas as Canvas elif imageType=="svg": from rdkit.sping.SVG.pidSVG import SVGCanvas as Canvas elif imageType=="png": from rdkit.sping.PIL.pidPIL import PILCanvas as Canvas else: raise ValueError,'unrecognized format: %s'%imageType self.canvas = Canvas(size=size, name=name) if hasattr(self.canvas,'_image'): self._image = self.canvas._image else: self._image = None self.size = size def addCanvasLine(self, p1,p2,color=(0,0,0),color2=None,**kwargs): if color2 and color2!=color: mp = (p1[0]+p2[0])/2.,(p1[1]+p2[1])/2. color = convertColor(color) self.canvas.drawLine(p1[0],p1[1],mp[0],mp[1], color=color, width=int(kwargs.get('linewidth',1)), dash=kwargs.get('dash',None)) color2 = convertColor(color2) self.canvas.drawLine(mp[0],mp[1],p2[0],p2[1], color=color2, width=int(kwargs.get('linewidth',1)), dash=kwargs.get('dash',None)) else: color = convertColor(color) width=kwargs.get('linewidth',1) self.canvas.drawLine(p1[0],p1[1],p2[0],p2[1], color=color, width=int(width), dash=kwargs.get('dash',None)) def addCanvasText(self, text,pos,font,color=(0,0,0),**kwargs): text = re.sub(r'\<.+?\>','',text) font = pid.Font(face=faceMap[font.face],size=font.size) txtWidth,txtHeight=self.canvas.stringBox(text,font) labelP = pos[0]-txtWidth/2,pos[1]+txtHeight/2 xPad = kwargs.get('xPadding',0) yPad = kwargs.get('yPadding',0) x1 = pos[0]-txtWidth/2 - xPad y1 = pos[1]+txtHeight/2 + yPad x2 = pos[0]+txtWidth/2 + xPad y2 = pos[1]-txtHeight/2 - yPad bgColor=kwargs.get('bgColor',(1,1,1)) bgColor = convertColor(bgColor) self.canvas.drawRect(x1,y1,x2,y2, edgeColor=pid.transparent, edgeWidth=0,fillColor=bgColor) color = convertColor(color) self.canvas.drawString(text,labelP[0],labelP[1],font,color=color) def addCanvasPolygon(self, ps,color=(0,0,0),fill=True,stroke=False,**kwargs): if not fill and not stroke: return edgeWidth=kwargs.get('lineWidth',0) edgeColor=pid.transparent color = convertColor(color) if not stroke: edgeWidth=0 edgeColor=pid.transparent else: edgeWidth=kwargs.get('lineWidth',1) edgeColor=color if not fill: fillColor = pid.transparent else: fillColor = color self.canvas.drawPolygon(ps,edgeColor=edgeColor,edgeWidth=int(edgeWidth),fillColor=fillColor,closed=1) def addCanvasDashedWedge(self,p1,p2,p3,dash=(2,2),color=(0,0,0), color2=None,**kwargs): color = convertColor(color) dash = (4,4) pts1 = self._getLinePoints(p1,p2,dash) pts2 = self._getLinePoints(p1,p3,dash) if len(pts2)<len(pts1): pts2,pts1=pts1,pts2 for i in range(len(pts1)): self.canvas.drawLine(pts1[i][0],pts1[i][1],pts2[i][0],pts2[i][1], color=color,width=1) def flush(self): self.canvas.flush() def save(self): self.canvas.save()
class Canvas(CanvasBase): def __init__(self, size, name, imageType='png'): if imageType == "pdf": from rdkit.sping.PDF.pidPDF import PDFCanvas as Canvas elif imageType == "ps": from rdkit.sping.PS.pidPS import PSCanvas as Canvas elif imageType == "svg": from rdkit.sping.SVG.pidSVG import SVGCanvas as Canvas elif imageType == "png": from rdkit.sping.PIL.pidPIL import PILCanvas as Canvas else: raise ValueError, 'unrecognized format: %s' % imageType self.canvas = Canvas(size=size, name=name) if hasattr(self.canvas, '_image'): self._image = self.canvas._image else: self._image = None self.size = size def addCanvasLine(self, p1, p2, color=(0, 0, 0), color2=None, **kwargs): if color2 and color2 != color: mp = (p1[0] + p2[0]) / 2., (p1[1] + p2[1]) / 2. color = convertColor(color) self.canvas.drawLine(p1[0], p1[1], mp[0], mp[1], color=color, width=int(kwargs.get('linewidth', 1)), dash=kwargs.get('dash', None)) color2 = convertColor(color2) self.canvas.drawLine(mp[0], mp[1], p2[0], p2[1], color=color2, width=int(kwargs.get('linewidth', 1)), dash=kwargs.get('dash', None)) else: color = convertColor(color) width = kwargs.get('linewidth', 1) self.canvas.drawLine(p1[0], p1[1], p2[0], p2[1], color=color, width=int(width), dash=kwargs.get('dash', None)) def addCanvasText(self, text, pos, font, color=(0, 0, 0), **kwargs): text = re.sub(r'\<.+?\>', '', text) font = pid.Font(face=faceMap[font.face], size=font.size) txtWidth, txtHeight = self.canvas.stringBox(text, font) labelP = pos[0] - txtWidth / 2, pos[1] + txtHeight / 2 xPad = kwargs.get('xPadding', 0) yPad = kwargs.get('yPadding', 0) x1 = pos[0] - txtWidth / 2 - xPad y1 = pos[1] + txtHeight / 2 + yPad x2 = pos[0] + txtWidth / 2 + xPad y2 = pos[1] - txtHeight / 2 - yPad bgColor = kwargs.get('bgColor', (1, 1, 1)) bgColor = convertColor(bgColor) self.canvas.drawRect(x1, y1, x2, y2, edgeColor=pid.transparent, edgeWidth=0, fillColor=bgColor) color = convertColor(color) self.canvas.drawString(text, labelP[0], labelP[1], font, color=color) def addCanvasPolygon(self, ps, color=(0, 0, 0), fill=True, stroke=False, **kwargs): if not fill and not stroke: return edgeWidth = kwargs.get('lineWidth', 0) edgeColor = pid.transparent color = convertColor(color) if not stroke: edgeWidth = 0 edgeColor = pid.transparent else: edgeWidth = kwargs.get('lineWidth', 1) edgeColor = color if not fill: fillColor = pid.transparent else: fillColor = color self.canvas.drawPolygon(ps, edgeColor=edgeColor, edgeWidth=int(edgeWidth), fillColor=fillColor, closed=1) def addCanvasDashedWedge(self, p1, p2, p3, dash=(2, 2), color=(0, 0, 0), color2=None, **kwargs): color = convertColor(color) dash = (4, 4) pts1 = self._getLinePoints(p1, p2, dash) pts2 = self._getLinePoints(p1, p3, dash) if len(pts2) < len(pts1): pts2, pts1 = pts1, pts2 for i in range(len(pts1)): self.canvas.drawLine(pts1[i][0], pts1[i][1], pts2[i][0], pts2[i][1], color=color, width=1) def flush(self): self.canvas.flush() def save(self): self.canvas.save()