
    lj]                        d Z ddlmZ dgZddlmZ ddlmZmZ ddl	m
Z
 ddlmZ dd	lmZ dd
lmZ  G d de          ZdS )z*A camera supporting multiple perspectives.    )annotationsMultiCamera)Iterable)AnySelf)Mobject)ImageMobjectFromCamera   )MovingCamera)list_difference_updatec                  Z     e Zd ZdZ	 	 dd fdZddZddZd fdZd fdZddZ	 xZ
S )r   z4Camera Object that allows for multiple perspectives.NFimage_mobjects_from_cameras'Iterable[ImageMobjectFromCamera] | None*allow_cameras_to_capture_their_own_displayboolkwargsr   returnNonec                    g | _         ||D ]}|                     |           || _         t                      j        di | dS )zInitialises the MultiCamera

        Parameters
        ----------
        image_mobjects_from_cameras

        kwargs
            Any valid keyword arguments of MovingCamera.
        N )r   add_image_mobject_from_camerar   super__init__)selfr   r   r   imfc	__class__s        T/home/agentuser/manim-venv/lib/python3.11/site-packages/manim/camera/multi_camera.pyr   zMultiCamera.__init__   sk     JL(&23 9 922488886 	7 	""6"""""    image_mobject_from_camerar	   c                v    |}t          |j        t                    sJ | j                            |           dS )a  Adds an ImageMobject that's been obtained from the camera
        into the list ``self.image_mobject_from_cameras``

        Parameters
        ----------
        image_mobject_from_camera
            The ImageMobject to add to self.image_mobject_from_cameras
        N)
isinstancecamerar   r   append)r   r   r   s      r   r   z)MultiCamera.add_image_mobject_from_camera-   s>     )$+|44444(//55555r   c                    | j         D ]n}| j        j        dd         \  }}|j                            t          ||j        z  | j        z            t          ||j        z  | j	        z                       odS )zReshape sub_camera pixel_arraysNr
   )
r   pixel_arrayshaper"   reset_pixel_shapeintheightframe_heightwidthframe_width)r   r   pixel_heightpixel_widths       r   update_sub_cameraszMultiCamera.update_sub_cameras>   s    4 		 		D(,(8(>rr(B%L+
 K))L4;.1BBCCK$*,t/??@@   		 		r   r   c                    | j         D ]}|j                                         t                                                       | S )zwResets the MultiCamera.

        Returns
        -------
        MultiCamera
            The reset MultiCamera
        )r   r"   resetr   )r   r   r   s     r   r1   zMultiCamera.resetK   sD     4 	  	 DKr   mobjectsIterable[Mobject]c                   |                                   | j        D ]M}t          |          }| j        s"t	          ||                                          } |j        j        |fi | N t                      j        |fi | d S )N)	r/   r   listr   r   
get_familyr"   capture_mobjectsr   )r   r2   r   r   to_addr   s        r   r7   zMultiCamera.capture_mobjectsX   s    !!!4 	; 	;D(^^FB K/8I8IJJ(DK(::6::::  44V44444r   list[Mobject]c                6    | j         gd | j        D             z   S )zReturns all mobjects whose movement implies that the camera
        should think of all other mobjects on the screen as moving

        Returns
        -------
        list
        c                &    g | ]}|j         j        S r   )r"   frame).0r   s     r   
<listcomp>z@MultiCamera.get_mobjects_indicating_movement.<locals>.<listcomp>i   s*     
 
 
"&DK
 
 
r   )r<   r   )r   s    r    get_mobjects_indicating_movementz,MultiCamera.get_mobjects_indicating_movementa   s4     
| 
 
*.*J
 
 
 
 	
r   )NF)r   r   r   r   r   r   r   r   )r   r	   r   r   )r   r   )r   r   )r2   r3   r   r   r   r   )r   r9   )__name__
__module____qualname____doc__r   r   r/   r1   r7   r?   __classcell__)r   s   @r   r   r      s        >> PT;@# # # # # # #06 6 6 6"        5 5 5 5 5 5

 

 

 

 

 

 

 

r   N)rC   
__future__r   __all__collections.abcr   typingr   r   manim.mobject.mobjectr   !manim.mobject.types.image_mobjectr	   camera.moving_camerar   utils.iterablesr   r   r   r   r   <module>rM      s    0 0 " " " " " "/ % $ $ $ $ $         ) ) ) ) ) ) D D D D D D / / / / / / 4 4 4 4 4 4Y
 Y
 Y
 Y
 Y
, Y
 Y
 Y
 Y
 Y
r   