Просмотр исходного кода

Added skeleton for threaded bitmap cache.

Juan Pablo Caram 10 лет назад
Родитель
Сommit
4fe841086e
1 измененных файлов с 50 добавлено и 1 удалено
  1. 50 1
      PlotCanvas.py

+ 50 - 1
PlotCanvas.py

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