code: def update_points(self):
      self.control_points[0].set_data(
          pos=np.array(
              [
                  [
                      self._center[0] - 0.5 * self._width,
                      self._center[1] + 0.5 * self._height,
                  ]
              ]
          )
      )
      self.control_points[1].set_data(
          pos=np.array(
              [
                  [
                      self._center[0] + 0.5 * self._width,
                      self._center[1] + 0.5 * self._height,
                  ]
              ]
          )
      )
      self.control_points[2].set_data(
          pos=np.array(
              [
                  [
                      self._center[0] + 0.5 * self._width,
                      self._center[1] - 0.5 * self._height,
                  ]
              ]
          )
      )
      self.control_points[3].set_data(
          pos=np.array(
              [
                  [
                      self._center[0] - 0.5 * self._width,
                      self._center[1] - 0.5 * self._height,
                  ]
              ]
          )
      )
  
imports: import numpy
  from vispy import app, scene
  from vispy.color import Color
label_desc: Use image node_id 3 for calling the ControlPoints obj's underlying member method code with example usage: obj.update_points() without return types