gpt4 book ai didi

python - matplotlib 中的慢速 Line2D 渲染

转载 作者:行者123 更新时间:2023-11-28 17:51:41 25 4
gpt4 key购买 nike

我正在尝试使用 Line2D 在多边形上单击的最后一个点和用户的鼠标之间绘制一条线。我当前的代码目前有效,但它在渲染之间永远滞后,因此该行滞后于鼠标。当前相关代码为:

#in constructor 
cid2 = self.ui.canvas2.mpl_connect('motion_notify_event', self.renderMeasureLine)

#This gets called and is laggy
def renderMeasureLine(self, mouseEvent):
if self.measuring and mouseEvent.inaxes == self.ui.canvas2.axes and len(self.pointListX) > 0:

if self.dotted_line in self.ui.canvas2.axes.lines:
self.ui.canvas2.axes.lines.remove(self.dotted_line)
self.dotted_line = Line2D([self.pointListX[-1],mouseEvent.xdata],[self.pointListY[-1],mouseEvent.ydata],
color=color, axes=self.ui.canvas2.axes, ls = '--')
self.ui.canvas2.axes.add_line(self.dotted_line)
self.ui.canvas2.draw()

============================================= =================================

#mpl canvas class
class MyDynamicMplCanvas(MyMplCanvas):
"""A canvas that updates itself every second with a new plot."""
def __init__(self, *args, **kwargs):
MyMplCanvas.__init__(self, *args, **kwargs)
self.colorMap = cmap.bone

def compute_initial_figure(self):
self.axes.imshow(self.data, cmap = cmap.bone)

def update_figure(self, dataOverride = None):
if self.data is not None or dataOverride is not none:
FigureCanvas.updateGeometry(self)
self.axes.clear()
if dataOverride is not None:
self.axes.imshow(dataOverride, cmap = self.getColorMap())
else:
self.axes.imshow(self.data, cmap = self.getColorMap())
self.draw()

基本上,每次鼠标移动时,我都想更新最后一次单击的多边形点和当前新的鼠标位置之间的虚线。这行得通,但是 super 滞后。有什么想法吗??

编辑:正在发生的事情的图片。虚线是慢的。

enter image description here

最佳答案

不要为每次鼠标移动创建一个新的 Line2DLine2D 可以有 2 个以上的点。因此,改为使用 Line2D.set_data() 来更改单个 Line2D 中的数据。

用数千个点绘制一个 Line2D 肯定比实例化和绘制数千个 Line2D 更快。​​

def renderMeasureLine(self, mouseEvent):            
if (self.measuring and mouseEvent.inaxes == self.ui.canvas2.axes
and len(self.pointListX) > 0):
if self.dotted_line in self.ui.canvas2.axes.lines:
x, y = self.dotted_line.get_data()
x.append(mouseEvent.xdata)
y.append(mouseEvent.ydata)
self.dotted_line.set_data(x, y)
else:
self.dotted_line = Line2D(
[self.pointListX[-1],mouseEvent.xdata],
[self.pointListY[-1],mouseEvent.ydata],
color=color, axes=self.ui.canvas2.axes, ls = '--')
self.ui.canvas2.axes.add_line(self.dotted_line)

self.ui.canvas2.blit(self.ui.canvas2.axes.bbox)
self.ui.canvas2.draw_idle()

关于python - matplotlib 中的慢速 Line2D 渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8676105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com