class_docstr: Clips visual output based on arbitrary clipping planes.
  
  Parameters
  ----------
  cliping_planes : ArrayLike
      Each plane is defined by a position and a normal vector (magnitude is irrelevant). Shape: (n_planes, 2, 3)
  coord_system : str
      Coordinate system used by the clipping planes (see visuals.transforms.transform_system.py)
code: def clipping_planes(self, value: Optional[np.ndarray]):
      if value is None:
          value = np.empty((0, 2, 3), dtype=np.float32)
  
      # only recreate function if amount of clipping planes changes
      if len(value) != len(self._clipping_planes):
          self._clipping_planes_func = Function(
              self._build_clipping_planes_glsl(len(value))
          )
          self.fshader["clip_with_planes"] = self._clipping_planes_func
  
      self._clipping_planes = value
  
      for idx, plane in enumerate(value):
          self._clipping_planes_func[
              f"clipping_plane_pos{idx}"
          ] = tuple(plane[0])
          self._clipping_planes_func[
              f"clipping_plane_norm{idx}"
          ] = tuple(plane[1])
  
file_path: vispy/vispy/visuals/filters/clipping_planes.py
imports: from __future__ import annotations
  from typing import Optional
  from functools import lru_cache
  import numpy
  from ..shaders import Function, Varying
  from .base_filter import Filter
label_desc: Use image node_id 6 for calling the PlanesClipper obj's underlying member method code with example usage: obj.clipping_planes(value) without return types