多角形でクリックされた最後の点とユーザーのマウスの間に線を描画するためにLine2Dを使用しようとしています。私の現在のコードは現在動作していますが、レンダリングの間にFOREVERだけ遅れているので、ラインがマウスの後ろに遅れてしまいます。現在、関連するコードは次のとおりです。MatlotLibの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()
So基本的に、マウスが動くたびに、最後にクリックされたポリゴンポイントと現在の新しいマウス位置の間の点線を更新したいと考えています。これは動作しますが、それは超低速です。何か案は??
編集:何が起こっているのかの写真。点線は遅いです。
blittingを使用すると、matplotlibはライン全体を更新するだけでFigure全体を再描画します。 matplotlibサイトには例があります。そうでなければ、matplotlibソースディレクトリのカーソルクラスのソースをよく見てください。 – tillsten
ああ、これは私が探していたものですが、見つけられませんでした。私はチャンスを得るときにこれを撃つだろう。 – tylerthemiler