def apply_rotation(self, angle, center): """Applies rotation. Args: angle (float): The angle in degrees. center (QPoint): Rotates around this point. """ line = QLineF(center, self.pos()) line.setAngle(line.angle() + angle) self.setPos(line.p2()) self.update_arcs_line()
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())
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)
def calculatePerpendicularPoint(self, startingPoint, distance, line): labelHelperLine = QLineF() labelHelperLine.setP1(startingPoint) labelHelperLine.setAngle(line.angle() + 90) labelHelperLine.setLength(distance) return labelHelperLine.p2()