【发布时间】:2018-08-19 12:45:26
【问题描述】:
我正在使用 pyqtgraph 绘制机器人的轨迹(机器人行驶的路径)。现在我想在绘图中添加一个标记来指示机器人的当前位置和航向。我认为 ArrowItem 将是正确的选择,因为它是比例不变的并且可以轻松旋转。然而,箭头的本地原点在它的尖端,就像这样
但我希望它像这样在中心
我该怎么做?我也很欣赏这个问题的不同解决方案。
更新
应用 eyllansec 的代码后,我遇到了一些渲染问题。一个最小的例子(必须缩放或移动视图以禁用自动缩放):
import pyqtgraph as pg
import numpy as np
import time
class CenteredArrowItem(pg.ArrowItem):
def paint(self, p, *args):
p.translate(-self.boundingRect().center())
pg.ArrowItem.paint(self, p, *args)
if __name__ == '__main__':
app = pg.QtGui.QApplication([])
window = pg.GraphicsWindow(size=(1280, 720))
window.setAntialiasing(True)
tracker = window.addPlot(title='Tracker')
while True:
for i in range(300):
arrow = CenteredArrowItem(angle=i, headLen=40, tipAngle=45, baseAngle=30)
arrow.setPos(i / 300, i / 300)
tracker.addItem(arrow)
app.processEvents()
time.sleep(0.02)
tracker.removeItem(arrow)
您可能已经注意到,我在每次迭代中都添加和删除了箭头。这是因为arrow.setStyle(angle=i) 不工作,因为它不更新箭头的旋转(可能是一个错误)。
【问题讨论】:
-
它提供了生成第一个光标的代码,因此更容易将其转换为第二个
-
@eyllansec 我不确定你的意思,但箭头的创建是直截了当的
a=pyqtgraph.ArrowItem(...)。我只希望其局部坐标系的原点位于其中心而不是其尖端。 -
你指的问题是在转弯结束时发生的跳跃?
-
很抱歉,我忘了提到您必须缩小或移动视图,以便禁用自动缩放
-
好的,我理解了问题,编辑您的问题并添加该信息。