code: def on_mouse_move(self, event):
      if event.is_dragging:
          dxy = event.pos - event.last_event.pos
          button = event.press_event.button
  
          if button == 1:
              self.move(dxy)
          elif button == 2:
              center = event.press_event.pos
              if self._aspect is None:
                  self.zoom(np.exp(dxy * (0.01, -0.01)), center)
              else:
                  s = dxy[1] * -0.01
                  self.zoom(np.exp(np.array([s, s])), center)
  
imports: import sys
  import numpy
  from vispy import app, gloo, visuals
  from vispy.visuals.filters import Clipper, ColorFilter
  from vispy.visuals.shaders import MultiProgram
  from vispy.visuals.collections import PointCollection
  from vispy.visuals.transforms import STTransform
  from vispy.scene import SceneCanvas
  from vispy.scene.visuals import create_visual_node
label_desc: Use image node_id 3 for calling the PanZoomTransform obj's underlying member method code with example usage: obj.on_mouse_move(event) without return types