class_docstr: Antigrain Geometry Path Collection
  
  This collection provides antialiased and accurate paths with caps and
  joins. It is memory hungry (x8) and slow (x.25) so it is to be used
  sparingly, mainly for thick paths where quality is critical.
docstr: Initialize the collection.
  
  Parameters
  ----------
  user_dtype: list
      The base dtype can be completed (appended) by the used_dtype. It
      only make sense if user also provide vertex and/or fragment shaders
  
  transform : Transform instance
      Used to define the transform(vec4) function
  
  vertex: string
      Vertex shader code
  
  fragment: string
      Fragment  shader code
  
  caps : string
      'local', 'shared' or 'global'
  
  join : string
      'local', 'shared' or 'global'
  
  color : string
      'local', 'shared' or 'global'
  
  miter_limit : string
      'local', 'shared' or 'global'
  
  linewidth : string
      'local', 'shared' or 'global'
  
  antialias : string
      'local', 'shared' or 'global'
code: def __init__(
      self,
      user_dtype=None,
      transform=None,
      vertex=None,
      fragment=None,
      **kwargs,
  ):
      """
      Initialize the collection.
  
      Parameters
      ----------
      user_dtype: list
          The base dtype can be completed (appended) by the used_dtype. It
          only make sense if user also provide vertex and/or fragment shaders
  
      transform : Transform instance
          Used to define the transform(vec4) function
  
      vertex: string
          Vertex shader code
  
      fragment: string
          Fragment  shader code
  
      caps : string
          'local', 'shared' or 'global'
  
      join : string
          'local', 'shared' or 'global'
  
      color : string
          'local', 'shared' or 'global'
  
      miter_limit : string
          'local', 'shared' or 'global'
  
      linewidth : string
          'local', 'shared' or 'global'
  
      antialias : string
          'local', 'shared' or 'global'
      """
      base_dtype = [
          ("p0", (np.float32, 3), "!local", (0, 0, 0)),
          ("p1", (np.float32, 3), "!local", (0, 0, 0)),
          ("p2", (np.float32, 3), "!local", (0, 0, 0)),
          ("p3", (np.float32, 3), "!local", (0, 0, 0)),
          ("uv", (np.float32, 2), "!local", (0, 0)),
          ("caps", (np.float32, 2), "global", (0, 0)),
          ("join", (np.float32, 1), "global", 0),
          ("color", (np.float32, 4), "global", (0, 0, 0, 1)),
          ("miter_limit", (np.float32, 1), "global", 4),
          ("linewidth", (np.float32, 1), "global", 1),
          ("antialias", (np.float32, 1), "global", 1),
          ("viewport", (np.float32, 4), "global", (0, 0, 512, 512)),
      ]  # noqa
  
      dtype = base_dtype
      if user_dtype:
          dtype.extend(user_dtype)
  
      if vertex is None:
          vertex = glsl.get("collections/agg-path.vert")
      if transform is None:
          transform = NullTransform()
      self.transform = transform
      if fragment is None:
          fragment = glsl.get("collections/agg-path.frag")
  
      Collection.__init__(
          self,
          dtype=dtype,
          itype=np.uint32,  # 16 for WebGL
          mode="triangles",
          vertex=vertex,
          fragment=fragment,
          **kwargs,
      )
      self._programs[0].vert["transform"] = self.transform
  
file_path: vispy/vispy/visuals/collections/agg_path_collection.py
imports: import numpy
  from ...None import glsl
  from ...None import gloo
  from .collection import Collection
  from ..transforms import NullTransform
label_desc: Use image node_id 1 to create a new AggPathCollection object from inherited base classes: Collection with example: obj = AggPathCollection(user_dtype, transform, vertex, fragment)