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

Source Code for Module rdkit.Chem.Draw.qtCanvas

  1  # $Id$ 
  2  # 
  3  #  Copyright (C) 2014 Seiji Matsuoka 
  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   
 12  from rdkit.Chem.Draw.canvasbase import CanvasBase 
 13  from PySide import QtGui, QtCore 
 14   
 15   
16 -class Canvas(CanvasBase):
17
18 - def __init__(self, size):
19 self.size = size 20 self.qsize = QtCore.QSize(*size) 21 self.pixmap = QtGui.QPixmap(self.qsize) 22 self.painter = QtGui.QPainter(self.pixmap) 23 self.painter.setRenderHint(QtGui.QPainter.Antialiasing, True) 24 self.painter.setRenderHint(QtGui.QPainter.SmoothPixmapTransform, True) 25 self.painter.fillRect(0, 0, size[0], size[1], QtCore.Qt.white)
26
27 - def addCanvasLine(self, p1, p2, color=(0, 0, 0), color2=None, **kwargs):
28 if 'dash' in kwargs: 29 line_type = QtCore.Qt.DashLine 30 else: 31 line_type = QtCore.Qt.SolidLine 32 qp1 = QtCore.QPointF(*p1) 33 qp2 = QtCore.QPointF(*p2) 34 qpm = QtCore.QPointF((p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2) 35 if color2 and color2 != color: 36 rgb = [int(c * 255) for c in color] 37 pen = QtGui.QPen(QtGui.QColor(*rgb), 1, line_type) 38 self.painter.setPen(pen) 39 self.painter.drawLine(qp1, qpm) 40 rgb2 = [int(c * 255) for c in color2] 41 pen.setColor(QtGui.QColor(*rgb2)) 42 self.painter.setPen(pen) 43 self.painter.drawLine(qpm, qp2) 44 else: 45 rgb = [int(c * 255) for c in color] 46 pen = QtGui.QPen(QtGui.QColor(*rgb), 1, line_type) 47 self.painter.setPen(pen) 48 self.painter.drawLine(qp1, qp2)
49
50 - def addCanvasText(self, text, pos, font, color=(0, 0, 0), **kwargs):
51 orientation = kwargs.get('orientation', 'E') 52 qfont = QtGui.QFont("Helvetica", font.size * 1.5) 53 qtext = QtGui.QTextDocument() 54 qtext.setDefaultFont(qfont) 55 colored = [int(c * 255) for c in color] 56 colored.append(text) 57 html_format = "<span style='color:rgb({},{},{})'>{}</span>" 58 formatted = html_format.format(*colored) 59 qtext.setHtml(formatted) 60 if orientation == 'N': 61 qpos = QtCore.QPointF(pos[0] - qtext.idealWidth() / 2, 62 pos[1] - font.size) 63 elif orientation == 'W': 64 qpos = QtCore.QPointF(pos[0] - qtext.idealWidth() + font.size, 65 pos[1] - font.size) 66 else: 67 qpos = QtCore.QPointF(pos[0] - font.size, pos[1] - font.size) 68 self.painter.save() 69 self.painter.translate(qpos) 70 qtext.drawContents(self.painter) 71 self.painter.restore() 72 return font.size * 1.8, font.size * 1.8, 0
73
74 - def addCanvasPolygon(self, ps, color=(0, 0, 0), fill=True, 75 stroke=False, **kwargs):
76 polygon = QtGui.QPolygonF() 77 for ver in ps: 78 polygon.append(QtCore.QPointF(*ver)) 79 pen = QtGui.QPen(QtGui.QColor(*color), 1, QtCore.Qt.SolidLine) 80 self.painter.setPen(pen) 81 self.painter.setBrush(QtGui.QColor(0, 0, 0)) 82 self.painter.drawPolygon(polygon)
83
84 - def addCanvasDashedWedge(self, p1, p2, p3, dash=(2, 2), color=(0, 0, 0), 85 color2=None, **kwargs):
86 rgb = [int(c * 255) for c in color] 87 pen = QtGui.QPen(QtGui.QColor(*rgb), 1, QtCore.Qt.SolidLine) 88 self.painter.setPen(pen) 89 dash = (4, 4) 90 pts1 = self._getLinePoints(p1, p2, dash) 91 pts2 = self._getLinePoints(p1, p3, dash) 92 if len(pts2) < len(pts1): 93 pts2, pts1 = pts1, pts2 94 for i in range(len(pts1)): 95 qp1 = QtCore.QPointF(pts1[i][0], pts1[i][1]) 96 qp2 = QtCore.QPointF(pts2[i][0], pts2[i][1]) 97 self.painter.drawLine(qp1, qp2)
98
99 - def flush(self):
100 self.painter.end()
101