docstr: Draw a cubic bezier with an arbitrary number of control points.
  
  The last point specified is on-curve, all others are off-curve
  (control) points. If the number of control points is > 2, the
  segment is split into multiple bezier segments. This works
  like this:
  
  Let n be the number of control points (which is the number of
  arguments to this call minus 1). If n==2, a plain vanilla cubic
  bezier is drawn. If n==1, we fall back to a quadratic segment and
  if n==0 we draw a straight line. It gets interesting when n>2:
  n-1 PostScript-style cubic segments will be drawn as if it were
  one curve. See decomposeSuperBezierSegment().
  
  The conversion algorithm used for n>2 is inspired by NURB
  splines, and is conceptually equivalent to the TrueType "implied
  points" principle. See also decomposeQuadraticSegment().
docstr_tok: ["Draw","a","cubic","bezier","with","an","arbitrary","number","of","control","points",".","The","last","point","specified","is","on-curve",",","all","others","are","off-curve","(","control",")","points",".","If","the","number","of","control","points","is",">","2",",","the","segment","is","split","into","multiple","bezier","segments",".","This","works","like","this",":","Let","n","be","the","number","of","control","points","(","which","is","the","number","of","arguments","to","this","call","minus","1",")",".","If","n==2",",","a","plain","vanilla","cubic","bezier","is","drawn",".","If","n==1",",","we","fall","back","to","a","quadratic","segment","and","if","n==0","we","draw","a","straight","line",".","It","gets","interesting","when","n",">","2",":","n-1","PostScript-style","cubic","segments","will","be","drawn","as","if","it","were","one","curve",".","See","decomposeSuperBezierSegment","(",")",".","The","conversion","algorithm","used","for","n",">","2","is","inspired","by","NURB","splines",",","and","is","conceptually","equivalent","to","the","TrueType","``","implied","points","''","principle",".","See","also","decomposeQuadraticSegment","(",")","."]
code: def curveTo(self, *points: Tuple[float, float]) -> None:
      """Draw a cubic bezier with an arbitrary number of control points.
  
      The last point specified is on-curve, all others are off-curve
      (control) points. If the number of control points is > 2, the
      segment is split into multiple bezier segments. This works
      like this:
  
      Let n be the number of control points (which is the number of
      arguments to this call minus 1). If n==2, a plain vanilla cubic
      bezier is drawn. If n==1, we fall back to a quadratic segment and
      if n==0 we draw a straight line. It gets interesting when n>2:
      n-1 PostScript-style cubic segments will be drawn as if it were
      one curve. See decomposeSuperBezierSegment().
  
      The conversion algorithm used for n>2 is inspired by NURB
      splines, and is conceptually equivalent to the TrueType "implied
      points" principle. See also decomposeQuadraticSegment().
      """
      raise NotImplementedError
  
imports: from typing import Tuple, Dict
  from fontTools.misc.loggingTools import LogMixin
  from fontTools.misc.transform import DecomposedTransform
label_desc: Use image node_id 3 for calling the AbstractPen obj's underlying member method code with example usage: obj.curveTo() without return types