class_docstr: PyVista wrapper for the VTK Camera class.
  
  Parameters
  ----------
  renderer : pyvista.Renderer, optional
      Renderer to attach the camera to.
  
  Examples
  --------
  Create a camera at the pyvista module level.
  
  >>> import pyvista as pv
  >>> camera = pv.Camera()
  
  Access the active camera of a plotter and get the position of the
  camera.
  
  >>> pl = pv.Plotter()
  >>> pl.camera.position
  (1.0, 1.0, 1.0)
class_docstr_tok: ["PyVista","wrapper","for","the","VTK","Camera","class",".","Parameters","--","--","--","--","--","renderer",":","pyvista.Renderer",",","optional","Renderer","to","attach","the","camera","to",".","Examples","--","--","--","--","Create","a","camera","at","the","pyvista","module","level",".",">",">",">","import","pyvista","as","pv",">",">",">","camera","=","pv.Camera","(",")","Access","the","active","camera","of","a","plotter","and","get","the","position","of","the","camera",".",">",">",">","pl","=","pv.Plotter","(",")",">",">",">","pl.camera.position","(","1.0",",","1.0",",","1.0",")"]
docstr: Compare whether the relevant attributes of two cameras are equal.
code: def __eq__(self, other):
      """Compare whether the relevant attributes of two cameras are equal."""
      # attributes which are native python types and thus implement __eq__
  
      native_attrs = [
          "position",
          "focal_point",
          "parallel_projection",
          "distance",
          "thickness",
          "parallel_scale",
          "clipping_range",
          "view_angle",
          "roll",
      ]
      for attr in native_attrs:
          if getattr(self, attr) != getattr(other, attr):
              return False
  
      this_trans = self.model_transform_matrix
      that_trans = other.model_transform_matrix
      trans_count = sum(
          1 for trans in [this_trans, that_trans] if trans is not None
      )
      if trans_count == 1:
          # either but not both are None
          return False
      if trans_count == 2:
          if not np.array_equal(this_trans, that_trans):
              return False
  
      return True
  
imports: from __future__ import annotations
  from pathlib import Path
  from typing import Union
  from weakref import proxy
  import xml.dom.minidom
  from xml.etree import ElementTree
  import numpy
  import pyvista
  from .None import _vtk
  from .helpers import view_vectors
label_desc: Use image node_id 3 for calling the Camera obj's underlying member method code with example usage: obj.__eq__(other) and returns: True, False, False, False