因此,我有一个带有两个图形圆圈和一个自定义订单项的场景。我创建了两个行项目,其中传入布尔值“foo”来确定如何分隔行,因为我希望圆圈通过 || 等两条线连接。
当我围绕源移动目标圆时,我希望这些线保持相同的距离,但现在当它们接近 y=x 并在那条线上翻转时,它们会彼此靠近。
我尝试实现一个自定义调整函数,该函数在行项目的 init 中被调用:
def adjust(self, foo: bool):
self.prepareGeometryChange()
adjust = 4
if not foo:
adjust *= -1
self.setLine(
QtCore.QLineF(
self.source.pos().x()+adjust,
self.source.pos().y()+adjust,
self.dest.pos().x()+adjust,
self.dest.pos().y()+adjust,
)
)
我该怎么做才能让它们绕着圆圈而不是绕着一个点旋转?
几个月后我终于回到了这个问题并给出了答案:
def adjust(self, foo: bool):
self.prepareGeometryChange()
delta = QtCore.QPointF(self.source.pos() - self.dest.pos())
length = delta.manhattanLength()
if length == 0.0:
return self.setLine(
QtCore.QLineF(
self.source.pos(),
self.dest.pos()
)
)
direction = QtCore.QPointF(delta.x()/length, delta.y()/length)
perpendicular = QtCore.QPointF(-direction.y(), direction.x())
line_offset = 5
sign = -1 if foo else 1
x_adjust = (sign*perpendicular.x()) * (sign*line_offset)
y_adjust = (sign*perpendicular.y()) * (sign*line_offset)
self.setLine(
QtCore.QLineF(
self.source.pos().x()-x_adjust,
self.source.pos().y()-y_adjust,
self.dest.pos().x()-x_adjust,
self.dest.pos().y()-y_adjust,
)
)