1
2
3
4
5
6
7
8
9
10
11
12 from rdkit.Chem.Draw.canvasbase import CanvasBase
13 from PySide import QtGui, QtCore
14
15
17
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
101