code: def on_mouse_drag(self, x, y, dx, dy, buttons, modifiers):
      if buttons & LEFT:
          if self.is_2D():
              self.camera.mouse_translate(x, y, dx, dy)
          else:
              self.camera.spherical_rotate(
                  (x - dx, y - dy), (x, y), self.get_mouse_sensitivity()
              )
      if buttons & MIDDLE:
          self.camera.zoom_relative(
              [1, -1][self.invert_mouse_zoom] * dy,
              self.get_mouse_sensitivity() / 20.0,
          )
      if buttons & RIGHT:
          self.camera.mouse_translate(x, y, dx, dy)
  
file_path: sympy/sympy/plotting/pygletplot/plot_controller.py
imports: from pyglet.window import key
  from pyglet.window.mouse import LEFT, RIGHT, MIDDLE
  from sympy.plotting.pygletplot.util import get_direction_vectors, get_basis_vectors
label_desc: Use image node_id 7 for calling the PlotController obj's underlying member method code with example usage: obj.on_mouse_drag(x, y, dx, dy, buttons, modifiers) without return types