예제 #1
0
    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)
예제 #2
0
    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)
예제 #3
0
 def testQVector2DToTuple(self):
     vec = QVector2D(1, 2)
     self.assertEqual((1, 2), vec.toTuple())
예제 #4
0
 def setUp(self):
     self.original = QVector2D(1, 2)