o
    *Î®c¡  ã                   @   sB   d dl mZ d dlmZ d dlmZmZmZm	Z	 G dd„ dƒZ
dS )é    N)Úget_spherical_rotatation)Úget_model_matrixÚmodel_to_screenÚscreen_to_modelÚvec_subsc                   @   s–   e Zd ZdZdZdZdZdZdZddd	d
dœZ	d'dd„Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd(dd„Zd d!„ Zd"d#„ Zd$d%„ Zd&S ))Ú
PlotCameragš™™™™™©?g     @@g      Y@g     ˆÃ@g      @g     À‚@)r   r   r   )i¦ÿÿÿr   r   )r   éZ   r   )éÓÿÿÿr   r	   )ÚxyÚxzÚyzÚperspectiveFc                 C   s$   || _ | j jj| _|| _|  ¡  d S ©N)ÚwindowÚplotÚaxesÚorthoÚreset)Úselfr   r   © r   úL/tmp/pip-target-vg8gfxp4/lib/python/sympy/plotting/pygletplot/plot_camera.pyÚ__init__   s   zPlotCamera.__init__c                 C   s$   t  ¡  t  ¡  tƒ | _t  ¡  d S r   )ÚpglÚglPushMatrixÚglLoadIdentityr   Ú_rotÚglPopMatrix©r   r   r   r   Úinit_rot_matrix   s   zPlotCamera.init_rot_matrixc                 C   sŠ   |   ¡  z| j| }W n ty   td| ƒ‚w z!|  |d ddd¡ |  |d ddd¡ |  |d ddd¡ W d S  tyD   Y d S w )Nz"%s is not a valid rotation preset.r   é   é   )r   Úrot_presetsÚAttributeErrorÚ
ValueErrorÚeuler_rotate)r   Úpreset_nameÚrr   r   r   Úset_rot_preset%   s   ÿÿÿzPlotCamera.set_rot_presetc                 C   s<   d| _ d\| _| _d | _| jr| j| _ n| j| _ |  ¡  d S )Nç        )r(   r(   )Ú_distÚ_xÚ_yr   r   Ú_default_ortho_distÚ_default_distr   r   r   r   r   r   3   s   
zPlotCamera.resetc                 C   s2   t  ¡  t  |¡ t  | j¡ tƒ | _t  ¡  d S r   )r   r   ÚglLoadMatrixfÚglMultMatrixfr   r   r   )r   Úrotr   r   r   Úmult_rot_matrix=   s
   
zPlotCamera.mult_rot_matrixc                 C   sŒ   t  t j¡ t  ¡  | jr&t  dt| jjƒt| jj	ƒ | j
d | jd ¡ nt  dt| jjƒt| jj	ƒ | jd | jd ¡ t  t j¡ d S )Ng333333Ó?g{®Gáz„?g      >@)r   ÚglMatrixModeÚGL_PROJECTIONr   r   ÚgluPerspectiveÚfloatr   ÚwidthÚheightÚmin_ortho_distÚmax_ortho_distÚmin_distÚmax_distÚGL_MODELVIEWr   r   r   r   Úsetup_projectionD   s   þþzPlotCamera.setup_projectionc                 C   s   dS )N)ç      ð?r>   r>   r   r   r   r   r   Ú
_get_scaleR   s   zPlotCamera._get_scalec                 C   sF   t  ¡  t  | j| j| j ¡ | jd urt  | j¡ t j|  	¡ Ž  d S r   )
r   r   ÚglTranslatefr*   r+   r)   r   r/   ÚglScalefr?   r   r   r   r   Úapply_transformationU   s
   
zPlotCamera.apply_transformationr>   c                 C   s2   t ||| jj| jj|ƒ}|d ur|  |¡ d S d S r   )r   r   r6   r7   r1   )r   Úp1Úp2ÚsensitivityÚmatr   r   r   Úspherical_rotate\   s   ÿÿzPlotCamera.spherical_rotatec                 C   s8   t  ¡  t  | j¡ t  ||||¡ tƒ | _t  ¡  d S r   )r   r   r.   r   Ú	glRotatefr   r   )r   ÚangleÚxÚyÚzr   r   r   r$   b   s
   zPlotCamera.euler_rotatec                 C   sd   | j r|| d }| j}| j}n
|| }| j}| j}| j| }|dk r'||k s+||kr0|| _d S d S )Ng      I@r   )r   r8   r9   r:   r;   r)   )r   ÚclicksrE   Údist_dr:   r;   Únew_distr   r   r   Úzoom_relativei   s   

ÿzPlotCamera.zoom_relativec                 C   s„   t  ¡  t  ¡  t  dd| j ¡ tdddƒd }tt|||ƒt|| || |ƒƒ}t  ¡  |  j	|d 7  _	|  j
|d 7  _
d S )Nr   r    r   )r   r   r   r@   r)   r   r   r   r   r*   r+   )r   rJ   rK   ÚdxÚdyrL   Údr   r   r   Úmouse_translatex   s   "zPlotCamera.mouse_translateN)F)r>   )Ú__name__Ú
__module__Ú__qualname__r:   r;   r8   r9   r-   r,   r!   r   r   r'   r   r1   r=   r?   rB   rG   r$   rP   rT   r   r   r   r   r      s0    ü


r   )Ú	pyglet.glÚglr   Ú'sympy.plotting.pygletplot.plot_rotationr   Úsympy.plotting.pygletplot.utilr   r   r   r   r   r   r   r   r   Ú<module>   s    