def _draw_arrow(painter, from_point, to_point, arrow_size=5): painter.drawLine(from_point, to_point) painter.setPen(Qt.NoPen) center = (from_point + to_point) / 2 center_to_t = QVector2D(to_point - center) center_to_t.normalize() center_to_t *= arrow_size t = QTransform() arrow_points = [center + center_to_t.toPointF()] t.rotate(120) arrow_points.append(center + t.map(center_to_t.toPointF())) t.rotate(120) arrow_points.append(center + t.map(center_to_t.toPointF())) painter.drawPolygon(arrow_points)
def paint(self, painter, option, widget=None): """ Override of QGraphicsItem.paint method. Implement this in your child classes to make nodes with the look you want. :param QPainter painter: :param option: :param widget: """ painter.setRenderHint(QPainter.Antialiasing) f = self.get_node_from_pos() t = self.get_node_to_pos() if not self.two_way: if self.conditional_to: pen = QPen(CONDITIONAL_TRANSITION_COLOR) pen.setWidth(4) painter.setPen(pen) painter.setBrush(CONDITIONAL_TRANSITION_COLOR) else: pen = QPen(NON_CONDITIONAL_TRANSITION_COLOR) pen.setWidth(4) painter.setPen(pen) painter.setBrush(NON_CONDITIONAL_TRANSITION_COLOR) self._draw_arrow(painter, f, t, self.arrow_length) return to_vector = QVector2D(t - f) to_vector.normalize() to_vector *= self.arrow_length xform = QTransform() xform.rotate(90) mapped = xform.map(to_vector.toPointF()) from_start = mapped + f from_end = mapped + t if self.conditional_to: pen = QPen(CONDITIONAL_TRANSITION_COLOR) pen.setWidth(4) painter.setPen(pen) painter.setBrush(CONDITIONAL_TRANSITION_COLOR) else: pen = QPen(NON_CONDITIONAL_TRANSITION_COLOR) pen.setWidth(4) painter.setPen(pen) painter.setBrush(NON_CONDITIONAL_TRANSITION_COLOR) self._draw_arrow(painter, from_start, from_end, self.arrow_length) from_start = -mapped + t from_end = -mapped + f if self.conditional_from: pen = QPen(CONDITIONAL_TRANSITION_COLOR) pen.setWidth(4) painter.setPen(pen) painter.setBrush(CONDITIONAL_TRANSITION_COLOR) else: pen = QPen(NON_CONDITIONAL_TRANSITION_COLOR) pen.setWidth(4) painter.setPen(pen) painter.setBrush(NON_CONDITIONAL_TRANSITION_COLOR) self._draw_arrow(painter, from_start, from_end, self.arrow_length)
def testQVector2DToTuple(self): vec = QVector2D(1, 2) self.assertEqual((1, 2), vec.toTuple())
def setUp(self): self.original = QVector2D(1, 2)