matplotlib中的慢线2d渲染

2024-09-30 04:26:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用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()

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

^{pr2}$

所以本质上,每次鼠标移动,我都想更新最后一个单击的多边形点和当前新鼠标位置之间的虚线。这是可行的,但它是超级滞后。有什么想法吗??在

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

enter image description here


Tags: and代码inselfuiifline鼠标
1条回答
网友
1楼 · 发布于 2024-09-30 04:26:36

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

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

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

相关问题 更多 >

    热门问题