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()