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: Return a deep copy of the camera.
  
  Returns
  -------
  pyvista.Camera
      Deep copy of the camera.
  
  Examples
  --------
  Create a camera and check that it shares a transformation
  matrix with its shallow copy.
  
  >>> import pyvista as pv
  >>> import numpy as np
  >>> camera = pv.Camera()
  >>> camera.model_transform_matrix = np.array(
  ...     [
  ...         [1.0, 0.0, 0.0, 0.0],
  ...         [0.0, 1.0, 0.0, 0.0],
  ...         [0.0, 0.0, 1.0, 0.0],
  ...         [0.0, 0.0, 0.0, 1.0],
  ...     ]
  ... )
  >>> copied_camera = camera.copy()
  >>> copied_camera == camera
  True
  >>> camera.model_transform_matrix = np.array(
  ...     [
  ...         [1.0, 0.0, 0.0, 0.0],
  ...         [0.0, 1.0, 0.0, 0.0],
  ...         [0.0, 0.0, 1.0, 0.0],
  ...         [0.0, 0.0, 0.0, 0.5],
  ...     ]
  ... )
  >>> copied_camera == camera
  False
code: def copy(self):
      """Return a deep copy of the camera.
  
      Returns
      -------
      pyvista.Camera
          Deep copy of the camera.
  
      Examples
      --------
      Create a camera and check that it shares a transformation
      matrix with its shallow copy.
  
      >>> import pyvista as pv
      >>> import numpy as np
      >>> camera = pv.Camera()
      >>> camera.model_transform_matrix = np.array(
      ...     [
      ...         [1.0, 0.0, 0.0, 0.0],
      ...         [0.0, 1.0, 0.0, 0.0],
      ...         [0.0, 0.0, 1.0, 0.0],
      ...         [0.0, 0.0, 0.0, 1.0],
      ...     ]
      ... )
      >>> copied_camera = camera.copy()
      >>> copied_camera == camera
      True
      >>> camera.model_transform_matrix = np.array(
      ...     [
      ...         [1.0, 0.0, 0.0, 0.0],
      ...         [0.0, 1.0, 0.0, 0.0],
      ...         [0.0, 0.0, 1.0, 0.0],
      ...         [0.0, 0.0, 0.0, 0.5],
      ...     ]
      ... )
      >>> copied_camera == camera
      False
      """
      immutable_attrs = [
          "position",
          "focal_point",
          "model_transform_matrix",
          "distance",
          "thickness",
          "parallel_scale",
          "up",
          "clipping_range",
          "view_angle",
          "roll",
          "parallel_projection",
          "is_set",
      ]
      new_camera = Camera()
  
      for attr in immutable_attrs:
          value = getattr(self, attr)
          setattr(new_camera, attr, value)
  
      return new_camera
  
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 41 for calling the Camera obj's underlying member method code with example usage: obj.copy() and returns: new_camera