【发布时间】:2012-01-30 08:35:43
【问题描述】:
我正在尝试使用 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()
所以本质上,每次鼠标移动时,我都想更新最后一次单击的多边形点和当前新鼠标位置之间的虚线。这行得通,但它是超级滞后。有什么想法吗??
编辑:正在发生的事情的图片。虚线是慢的。
【问题讨论】:
-
使用 blitting,否则 matplotlib 将重绘整个图形只是为了更新行。 matplotlib 网站上有示例。否则,请仔细查看 matplotlib 源目录中游标类的源代码。
-
啊,这就是我要找的,但找不到。有机会我会试一试的。
标签: python image matplotlib rendering