class_docstr: Base camera class.
  
  The Camera describes the perspective from which a ViewBox views its
  subscene, and the way that user interaction affects that perspective.
  
  Most functionality is implemented in subclasses. This base class has
  no user interaction and causes the subscene to use the same coordinate
  system as the ViewBox.
  
  Parameters
  ----------
  interactive : bool
      Whether the camera processes mouse and keyboard events.
  flip : tuple of bools
      For each dimension, specify whether it is flipped.
  up : {'+z', '-z', '+y', '-y', '+x', '-x'}
      The direction that is considered up. Default '+z'. Not all
      camera's may support this (yet).
  parent : Node
      The parent of the camera.
  name : str
      Name used to identify the camera in the scene.
class_docstr_tok: ["Base","camera","class",".","The","Camera","describes","the","perspective","from","which","a","ViewBox","views","its","subscene",",","and","the","way","that","user","interaction","affects","that","perspective",".","Most","functionality","is","implemented","in","subclasses",".","This","base","class","has","no","user","interaction","and","causes","the","subscene","to","use","the","same","coordinate","system","as","the","ViewBox",".","Parameters","--","--","--","--","--","interactive",":","bool","Whether","the","camera","processes","mouse","and","keyboard","events",".","flip",":","tuple","of","bools","For","each","dimension",",","specify","whether","it","is","flipped",".","up",":","{","'+z","'",",","'-z","'",",","'+y","'",",","'-y","'",",","'+x","'",",","'-x","'","}","The","direction","that","is","considered","up",".","Default","'+z","'",".","Not","all","camera","'s","may","support","this","(","yet",")",".","parent",":","Node","The","parent","of","the","camera",".","name",":","str","Name","used","to","identify","the","camera","in","the","scene","."]
docstr: Link this camera with another camera of the same type
  
  Linked camera's keep each-others' state in sync.
  
  Parameters
  ----------
  camera : instance of Camera
      The other camera to link.
  props : list of strings | tuple of strings | None
      List of camera state properties to keep in sync between
      the two cameras. If None, all of camera state is kept in sync.
  axis : "x" | "y" | None
      An axis to link between two PanZoomCamera instances. If not None,
      view limits in the selected axis only will be kept in sync between
      the cameras.
docstr_tok: ["Link","this","camera","with","another","camera","of","the","same","type","Linked","camera","'s","keep","each-others","'","state","in","sync",".","Parameters","--","--","--","--","--","camera",":","instance","of","Camera","The","other","camera","to","link",".","props",":","list","of","strings","|","tuple","of","strings","|","None","List","of","camera","state","properties","to","keep","in","sync","between","the","two","cameras",".","If","None",",","all","of","camera","state","is","kept","in","sync",".","axis",":","``","x","''","|","``","y","''","|","None","An","axis","to","link","between","two","PanZoomCamera","instances",".","If","not","None",",","view","limits","in","the","selected","axis","only","will","be","kept","in","sync","between","the","cameras","."]
code: def link(self, camera, props=None, axis=None):
      """Link this camera with another camera of the same type
  
      Linked camera's keep each-others' state in sync.
  
      Parameters
      ----------
      camera : instance of Camera
          The other camera to link.
      props : list of strings | tuple of strings | None
          List of camera state properties to keep in sync between
          the two cameras. If None, all of camera state is kept in sync.
      axis : "x" | "y" | None
          An axis to link between two PanZoomCamera instances. If not None,
          view limits in the selected axis only will be kept in sync between
          the cameras.
      """
      if axis is not None:
          props = props or []
          if axis == "x":
              props += [("rect", "left"), ("rect", "right")]
          elif axis == "y":
              props += [("rect", "bottom"), ("rect", "top")]
          else:
              raise ValueError("Axis can be 'x' or 'y', not %r" % axis)
      if props is None:
          props = self._state_props
  
      cam1, cam2 = self, camera
      while cam1 in cam2._linked_cameras:
          del cam2._linked_cameras[cam1]
      while cam2 in cam1._linked_cameras:
          del cam1._linked_cameras[cam2]
      # Link both ways
      cam1._linked_cameras[cam2] = props
      cam2._linked_cameras[cam1] = props
  
imports: from __future__ import division
  from ...util import keys
  from ..node import Node
  from ...visuals.transforms import STTransform, MatrixTransform, NullTransform, TransformCache
label_desc: Use image node_id 24 for calling the BaseCamera obj's underlying member method code with example usage: obj.link(camera, props, axis) without return types