Added skeleton for threaded bitmap cache.

This commit is contained in:
Juan Pablo Caram 2015-12-28 17:59:22 -05:00
parent 7db3ee7be6
commit 4fe841086e
1 changed files with 50 additions and 1 deletions

View File

@ -14,14 +14,55 @@ mpl_use("Qt4Agg")
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_agg import FigureCanvasAgg
import FlatCAMApp
class PlotCanvas:
class CanvasCache(QtCore.QObject):
# Signals
new_screen = QtCore.pyqtSignal()
def __init__(self, plotcanvas, dpi=50):
super(CanvasCache, self).__init__()
self.plotcanvas = plotcanvas
self.dpi = dpi
self.figure = Figure(dpi=dpi)
self.axes = self.figure.add_axes([0.0, 0.0, 1.0, 1.0], alpha=1.0)
self.axes.set_frame_on(False)
self.axes.set_xticks([])
self.axes.set_yticks([])
self.canvas = FigureCanvasAgg(self.figure)
self.cache = None
def run(self):
self.plotcanvas.update_screen_request.connect(self.on_update_req)
def on_update_req(self, extents):
# Move the requested screen portion to the main thread
# and inform about the update:
self.new_screen.emit()
# Continue to update the cache.
class PlotCanvas(QtCore.QObject):
"""
Class handling the plotting area in the application.
"""
# Signals
update_screen_request = QtCore.pyqtSignal(list)
def __init__(self, container):
"""
The constructor configures the Matplotlib figure that
@ -65,6 +106,14 @@ class PlotCanvas:
# Update every time the canvas is re-drawn.
self.background = self.canvas.copy_from_bbox(self.axes.bbox)
# Bitmap Cache
self.cache = CanvasCache(self)
self.cache_thread = QtCore.QThread()
self.cache.moveToThread(self.cache_thread)
super(PlotCanvas, self).connect(self.cache_thread, QtCore.SIGNAL("started()"), self.cache.run)
# self.connect()
self.cache_thread.start()
# Events
self.canvas.mpl_connect('button_press_event', self.on_mouse_press)
self.canvas.mpl_connect('button_release_event', self.on_mouse_release)