Esempio n. 1
0
    def paint(self, painter, option, widget):
        pen = QPen()
        pen.setColor(QColor(150, 150, 150))
        pen.setWidth(1)
        painter.setPen(pen)

        if not self._fromNode() or not self._toNode():
            return

        line = QLineF(self.fromPoint, self.toPoint)
        if line.length() == 0.0:
            return

        # self.drawArc(painter, line)
        topLeftPoint = self.calculatePerpendicularPoint(
            self.fromPoint, 50, line)
        arcRect = QRectF(topLeftPoint, QSizeF(line.length(), 100))
        if self._fromNode is self._toNode:
            spanAngle = -360
        else:
            spanAngle = -180
        # painter.drawArc(arcRect, 0, spanAngle)

        colliding = self.collidingItems()
        if len(colliding) > 0:
            line.setP1(line.p1() + QPointF(10, 10))
            line.setP2(line.p2() + QPointF(10, 10))
            line.translate(10, 10)
        painter.drawLine(line)

        midpoint = QPointF(line.center().x(), line.center().y())
        labelCenterPoint = self.calculatePerpendicularPoint(midpoint, 75, line)
        self.labelBox.setPos(labelCenterPoint)

        angle = math.acos(line.dx() / line.length())
        self.drawArrowHead(painter, angle, line.p2())
Esempio n. 2
0
 def update_line(self):
     overlapping_arcs = [
         arc for arc in self.rel_item.arc_items
         if arc.obj_item == self.obj_item
     ]
     count = len(overlapping_arcs)
     path = QPainterPath(self.rel_item.pos())
     if count == 1:
         path.lineTo(self.obj_item.pos())
     else:
         rank = overlapping_arcs.index(self)
         line = QLineF(self.rel_item.pos(), self.obj_item.pos())
         line.setP1(line.center())
         line = line.normalVector()
         line.setLength(self._width * count)
         line.setP1(2 * line.p1() - line.p2())
         t = rank / (count - 1)
         ctrl_point = line.pointAt(t)
         path.quadTo(ctrl_point, self.obj_item.pos())
     self.setPath(path)