
    lj                        d Z ddlmZ g dZddlZddlZddlmZ ddl	m
Z
 ddlmZ  G d	 d
e          Z G d de          Z G d de          ZdS )zUA camera module that supports spatial mapping between objects for distortion effects.    )annotations)MappingCameraOldMultiCameraSplitScreenCameraN   )Camera)VMobject)DictAsObjectc                  @     e Zd ZdZd ddf fd	Z fdZ fdZ xZS )r   a  Parameters
    ----------
    mapping_func : callable
        Function to map 3D points to new 3D points (identity by default).
    min_num_curves : int
        Minimum number of curves for VMobjects to avoid visual glitches.
    allow_object_intrusion : bool
        If True, modifies original mobjects; else works on copies.
    kwargs : dict
        Additional arguments passed to Camera base class.
    c                    | S N )ps    V/home/agentuser/manim-venv/lib/python3.11/site-packages/manim/camera/mapping_camera.py<lambda>zMappingCamera.<lambda>"   s    q     2   Fc                d    || _         || _        || _         t                      j        di | d S )Nr   )mapping_funcmin_num_curvesallow_object_intrusionsuper__init__)selfr   r   r   kwargs	__class__s        r   r   zMappingCamera.__init__    s@     ),&<#""6"""""r   c                z    t                                          |t          j        | j        d|                    S )N   )r   points_to_pixel_coordsnpapply_along_axisr   )r   mobjectpointsr   s      r   r   z$MappingCamera.points_to_pixel_coords,   s7    ww-- 11f==
 
 	
r   c                N    | j         |fi |}| j        r|}nd |D             }|D ]X}t          |t                    rAd|                                cxk     r| j        k     rn >|                    | j                   Yt                                          |dd           dS )zCapture mobjects for rendering after applying the spatial mapping.

        Copies mobjects unless intrusion is allowed, and ensures
        vector objects have enough curves for smooth distortion.
        c                6    g | ]}|                                 S r   )copy).0r"   s     r   
<listcomp>z2MappingCamera.capture_mobjects.<locals>.<listcomp>=   s     EEEgllnnEEEr   r   FN)include_submobjectsexcluded_mobjects)	get_mobjects_to_displayr   
isinstancer	   get_num_curvesr   insert_n_curvesr   capture_mobjects)r   mobjectsr   mobject_copiesr"   r   s        r   r/   zMappingCamera.capture_mobjects3   s     04/CCFCC& 	F%NNEEHEEEN% 	= 	=G7H--=..00FFFF43FFFFFF''(;<<<   %" 	! 	
 	
 	
 	
 	
r   )__name__
__module____qualname____doc__r   r   r/   __classcell__r   s   @r   r   r      s        
 
 ![$	
# 
# 
# 
# 
# 
#
 
 
 
 

 
 
 
 
 
 
 
 
r   r   c                  B     e Zd ZdZ fdZd Zd Z fdZ fdZ xZ	S )r   zParameters
    ----------
    cameras_with_start_positions : tuple
        Tuples of (Camera, (start_y, start_x)) indicating camera and
        its pixel offset on the final frame.
    c                \    d |D             | _          t                      j        di | d S )Nc                    g | ]i}t          |d          |d         d         |d         d          |d         d         |d          j        z   |d         d          |d          j        z   d          jS )r   r   )camerastart_xstart_yend_xend_y)r
   pixel_widthpixel_height)r'   camera_with_start_positionss     r   r(   z+OldMultiCamera.__init__.<locals>.<listcomp>\   s      
  
  
 , 9!<:1=a@:1=a@8;A>1!4@A8;A>1!4AB 
 
 
  
  
r   r   )shifted_camerasr   r   )r   cameras_with_start_positionsr   r   s      r   r   zOldMultiCamera.__init__[   sL     
  
 0L 
  
  
 	""6"""""r   c                    | j         D ]C} |j        j        |fi | |j        j        | j        |j        |j        |j        |j        f<   Dd S r   )rC   r;   r/   pixel_arrayr=   r?   r<   r>   )r   r0   r   shifted_cameras       r   r/   zOldMultiCamera.capture_mobjectsl   sz    "2 	2 	2N2N!28FFvFFF
 %1 &)==&)==? 	2 	2r   c                    | j         D ]5} |j        j        ||j        |j        |j        |j        f         fi | 6d S r   )rC   r;   set_backgroundr=   r?   r<   r>   )r   rF   r   rG   s       r   rI   zOldMultiCamera.set_backgroundu   sv    "2 	 	N0N!0"*^-AA"*^-AAC 
    	 	r   c                     t                      j        |fi | | j        D ]5} |j        j        ||j        |j        |j        |j        f         fi | 6d S r   )r   set_pixel_arrayrC   r;   r=   r?   r<   r>   )r   rF   r   rG   r   s       r   rK   zOldMultiCamera.set_pixel_array   s    66v666"2 	 	N1N!1"*^-AA"*^-AAC 
    	 	r   c                    t                                                       | j        D ]}|j                                         d S r   )r   init_backgroundrC   r;   )r   rG   r   s     r   rM   zOldMultiCamera.init_background   sM    !!!"2 	4 	4N!113333	4 	4r   )
r2   r3   r4   r5   r   r/   rI   rK   rM   r6   r7   s   @r   r   r   S   s         # # # # #"2 2 2  	 	 	 	 	4 4 4 4 4 4 4 4 4r   r   c                  "     e Zd ZdZ fdZ xZS )r   zInitializes a split screen camera setup with two side-by-side cameras.

    Parameters
    ----------
    left_camera : Camera
    right_camera : Camera
    kwargs : dict
    c                (   t          j        | fi | || _        || _        t	          j        | j        dz            }| j        | j        fD ]}|                    |j        |           t                                          |df|d|ff           d S )Nr   )r   r   r   )
r   r   left_cameraright_cameramathceilr@   reset_pixel_shaperA   r   )r   rP   rQ   r   
half_widthr;   r   s         r   r   zSplitScreenCamera.__init__   s    '''''&(Yt/!344
'):; 	F 	FF$$V%8*EEEE&!Az?+	
 	
 	
 	
 	
r   )r2   r3   r4   r5   r   r6   r7   s   @r   r   r      sB         
 
 
 
 
 
 
 
 
r   r   )r5   
__future__r   __all__rR   numpyr    camera.camerar    mobject.types.vectorized_mobjectr	   utils.config_opsr
   r   r   r   r   r   r   <module>r\      s    [ [ " " " " " "
B
B
B      " " " " " " 7 7 7 7 7 7 + + + + + +5
 5
 5
 5
 5
F 5
 5
 5
@:4 :4 :4 :4 :4V :4 :4 :4B
 
 
 
 
 
 
 
 
 
r   