code: def move(self, end):
      if not self.parent.editable:
          return
      if self.selected_cp is not None:
          self._width = 2 * (end[0] - self._center[0])
          self._height = 2 * (end[1] - self._center[1])
          self.update_points()
          self.parent.update_from_controlpoints()
  
imports: import numpy
  from vispy import app, scene
  from vispy.color import Color
label_desc: Use image node_id 6 for calling the ControlPoints obj's underlying member method code with example usage: obj.move(end) without return types