def control_point(*args)
      raise ArgumentError, "Expected one or none arguments, got #{args.length}." unless [0, 1].include?(args.length)
      if args.length == 1
        raise ArgumentError, "Invalid argument 'index'. Expected Integer (or nil), got #{args.first.class}." unless [Integer, NilClass].include?(args.first.class)
        return @associated_control_points[args.first]
      else
        # No argument used, therefore we return the first instance:
        return @control_points.first
      end
    end
def control_point(*args)
      raise ArgumentError, "Expected one or none arguments, got #{args.length}." unless [0, 1].include?(args.length)
      if args.length == 1
        raise ArgumentError, "Invalid argument 'index'. Expected Integer (or nil), got #{args.first.class}." unless [Integer, NilClass].include?(args.first.class)
        return @associated_control_points[args.first]
      else
        # No argument used, therefore we return the first instance:
        return @control_points.first
      end
    end
Gives the ControlPoint instance mathcing the specified index.

 @overload control_point(index)
   @param [String] index the control_point index
   @return [ControlPoint, NilClass] the matched control_point (or nil if no control_point is matched)
 @overload control_point
   @return [ControlPoint, NilClass] the first control_point of this instance (or nil if no child control points exists)