code: def rotate(self, event):
      # rotate with an irrational amount over each axis so there is no
      # periodicity
      self.rotation.rotate(0.2**0.5, (1, 0, 0))
      self.rotation.rotate(0.3**0.5, (0, 1, 0))
      self.rotation.rotate(0.5**0.5, (0, 0, 1))
      self.update()
  
file_path: vispy/examples/basics/visuals/mesh.py
imports: import numpy
  from vispy import app, gloo, visuals
  from vispy.geometry import create_sphere
  from vispy.visuals.transforms import STTransform, MatrixTransform, ChainTransform
  from vispy.visuals.filters import ShadingFilter
label_desc: Use image node_id 2 for calling the Canvas obj's underlying member method code with example usage: obj.rotate(event) without return types