code: def _setStartSegment(self, segmentIndex, **kwargs):
          
          segments = self.segments
          oldStart = segments[-1]
          oldLast = segments[0]
          # If the contour ends with a curve on top of a move,
          # delete the move.
          if oldLast.type == "curve" or oldLast.type == "qcurve":
              startOn = oldStart.onCurve
              lastOn = oldLast.onCurve
              if startOn.x == lastOn.x and startOn.y == lastOn.y:
                  self.removeSegment(0)
                  # Shift new the start index.
                  segmentIndex = segmentIndex - 1
                  segments = self.segments
          # If the first point is a move, convert it to a line.
          if segments[0].type == "move":
              segments[0].type = "line"
          # Reorder the points internally.
          segments = segments[segmentIndex - 1:] + segments[:segmentIndex - 1]
          points = []
          for segment in segments:
              for point in segment:
                  points.append(((point.x, point.y), point.type,
                                 point.smooth, point.name, point.identifier))
          # Clear the points.
          for point in self.points:
              self.removePoint(point)
          # Add the points.
          for point in points:
              position, type, smooth, name, identifier = point
              self.appendPoint(
                  position,
                  type=type,
                  smooth=smooth,
                  name=name,
                  identifier=identifier
              )
docs: Subclasses may override this method.