code: def __init__(
      self,
      label=None,
      line_color=None,
      difficult=False,
      key_cls="None",
      paintLabel=False,
      paintIdx=False,
  ):
      self.label = label
      self.idx = None  # bbox order, only for table annotation
      self.points = []
      self.fill = False
      self.selected = False
      self.difficult = difficult
      self.key_cls = key_cls
      self.paintLabel = paintLabel
      self.paintIdx = paintIdx
      self.locked = False
      self.direction = 0
      self.center = None
      self.epsilon = 5  # same as canvas
      self._highlightIndex = None
      self._highlightMode = self.NEAR_VERTEX
      self._highlightSettings = {
          self.NEAR_VERTEX: (4, self.P_ROUND),
          self.MOVE_VERTEX: (1.5, self.P_SQUARE),
      }
      self.fontsize = 8
  
      self._closed = False
  
      if line_color is not None:
          # Override the class line_color attribute
          # with an object attribute. Currently this
          # is used for drawing the pending line a different color.
          self.line_color = line_color
  
imports: import math
  import sys
  from PyQt5.QtCore import QPointF
  from PyQt5.QtGui import QColor, QPen, QPainterPath, QFont
  from libs.utils import distance
label_desc: Use image node_id 1 to create a new Shape object from inherited base classes: object with example: obj = Shape(label, line_color, difficult, key_cls, paintLabel, paintIdx)