code: def __init__(self, **kwargs):
      super(PanZoomCanvas, self).__init__(keys="interactive", **kwargs)
      self._visuals = []
  
      self._pz = PanZoomTransform()
      self._pz.pan = Variable("uniform vec2 u_pan", (0, 0))
      self._pz.zoom = Variable("uniform vec2 u_zoom", (1, 1))
  
      self.width, self.height = self.size
      self.context.set_viewport(
          0, 0, self.physical_size[0], self.physical_size[1]
      )
      self.context.set_state(
          clear_color="black",
          blend=True,
          blend_func=("src_alpha", "one_minus_src_alpha"),
      )
  
      self._tr = TransformSystem(self)
      self.show()
  
imports: import numpy
  import math
  from vispy import gloo, app, scene
  from vispy.visuals import Visual
  from vispy.visuals.shaders import Function, Variable
  from vispy.visuals.transforms import TransformSystem, BaseTransform
  from vispy.util.profiler import Profiler
label_desc: Use image node_id 1 to create a new PanZoomCanvas object from inherited base classes: app with example: obj = PanZoomCanvas()