class_docstr: Filtering PointPen that tries to determine whether an on-curve point
  should be "smooth", ie. that it's a "tangent" point or a "curve" point.
class_docstr_tok: ["Filtering","PointPen","that","tries","to","determine","whether","an","on-curve","point","should","be","``","smooth","''",",","ie",".","that","it","'s","a","``","tangent","''","point","or","a","``","curve","''","point","."]
code: def addVarComponent(
      self,
      glyphName,
      transformation,
      location,
      identifier=None,
      **kwargs,
  ):
      if self._points is not None:
          raise PenError(
              "VarComponents must be added before or after contours"
          )
      if identifier is not None:
          kwargs["identifier"] = identifier
      self._outPen.addVarComponent(
          glyphName, transformation, location, **kwargs
      )
  
imports: import math
  from typing import Any, Optional, Tuple, Dict
  from fontTools.pens.basePen import AbstractPen, PenError
  from fontTools.misc.transform import DecomposedTransform
label_desc: Use image node_id 7 for calling the GuessSmoothPointPen obj's underlying member method code with example usage: obj.addVarComponent(glyphName, transformation, location, identifier) without return types