code: def get_move_scale_rotate_pts(self, viewer):
          
          scale = viewer.get_scale_min()
          ref_x, ref_y = self.get_center_pt()
          xl, yl, xu, yu = self.get_llur()
          offset = 8.0 / scale
          scl_x, scl_y = xl - offset, yl - offset
          rot_x, rot_y = xu + offset, yu + offset
          if hasattr(self, 'rot_deg'):
              # if this is an object with a rotation attribute, pre rotate
              # the control points in the opposite direction, because they
              # will be rotated back
              theta = -self.rot_deg
              scl_x, scl_y = trcalc.rotate_pt(scl_x, scl_y, theta,
                                              xoff=ref_x, yoff=ref_y)
              rot_x, rot_y = trcalc.rotate_pt(rot_x, rot_y, theta,
                                              xoff=ref_x, yoff=ref_y)
          move_pt = MovePoint(ref_x, ref_y)
          scale_pt = ScalePoint(scl_x, scl_y)
          rotate_pt = RotatePoint(rot_x, rot_y)
  
          return (move_pt, scale_pt, rotate_pt)
docs: Returns 3 edit control points for editing this object: a move
          point, a scale point and a rotate point.  These points are all in
          data coordinates.