code: def removeFocusPoint(self):
      if self.is_rect:
          return
      focusIdx = None
      for idx, item in enumerate(self.m_items):
          if item.hasFocus():
              focusIdx = idx
              break
      if focusIdx is not None:
          if len(self) <= 3:
              self.delPolygon(self)  # 调用app的删除多边形，为了同时删除coco标签
              return
          del self.points[focusIdx]
          self.setPolygon(QtGui.QPolygonF(self.points))
          if self.bbox:
              self.bbox.update()
          self.scene().removeItem(self.m_items[focusIdx])
          del self.m_items[focusIdx]
          for grip in self.m_items[focusIdx:]:
              grip.m_index -= 1
  
          self.scene().removeItem(self.m_lines[focusIdx])
          del self.m_lines[focusIdx]
          line = QtCore.QLineF(
              self.mapToScene(self.points[(focusIdx - 1) % len(self)]),
              self.mapToScene(self.points[focusIdx % len(self)]),
          )
          # print((focusIdx - 1) % len(self), len(self.m_lines), len(self))
          self.m_lines[(focusIdx - 1) % len(self)].setLine(line)
          for line in self.m_lines[focusIdx:]:
              line.idx -= 1
  
imports: from qtpy import QtWidgets, QtGui, QtCore
  from .None import GripItem, LineItem, BBoxAnnotation
label_desc: Use image node_id 8 for calling the PolygonAnnotation obj's underlying member method code with example usage: obj.removeFocusPoint() without return types