code: def generate_grid(self):
      n = self.grid_spacing / 2.0
      num_cols = int(self.physical_size[0] / n * 2)
      num_rows = int(self.physical_size[1] / n * 2)
      coords = []
  
      # Generate grid
      for i, j in itertools.product(range(num_rows), range(num_cols)):
          x = n + (n * 2 * j)
          y = n + (n * 2 * i)
  
          coords.append((x, y))
  
      self.grid_coords = np.array(coords)
  
file_path: vispy/examples/basics/visuals/windbarb_quiver.py
imports: import itertools
  import numpy
  from vispy import app
  from vispy.visuals import WindbarbVisual
  from vispy.visuals.transforms import NullTransform
label_desc: Use image node_id 2 for calling the Canvas obj's underlying member method code with example usage: obj.generate_grid() without return types