o
    à8Va¡  ã                   @   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	   )ZxyÚxzZyzZperspectiveFc                 C   s$   || _ | j jj| _|| _|  ¡  d S ©N)ÚwindowZplotZaxesÚorthoÚreset)Úselfr   r   © r   úG/usr/lib/python3/dist-packages/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   Z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   Z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   ZglMatrixModeZGL_PROJECTIONr   r   ZgluPerspectiveÚfloatr   ÚwidthÚheightÚmin_ortho_distÚmax_ortho_distÚmin_distÚmax_distZGL_MODELVIEWr   r   r   r   Úsetup_projectionD   s   þþzPlotCamera.setup_projectionc                 C   s   dS )N)ç      ð?r3   r3   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)   ZglScalefr4   r   r   r   r   Úapply_transformationU   s
   
zPlotCamera.apply_transformationr3   c                 C   s2   t ||| jj| jj|ƒ}|d ur|  |¡ d S d S r   )r   r   r,   r-   r*   )r   Zp1Zp2ÚsensitivityZ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   Z	glRotatefr   r   )r   Z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   r.   r/   r0   r1   r#   )r   Zclicksr7   Zdist_dr0   r1   Z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   r5   r#   r   r   r   r   r$   r%   )r   r9   r:   ZdxZdyr;   Údr   r   r   Úmouse_translatex   s   "zPlotCamera.mouse_translateN)F)r3   )Ú__name__Ú
__module__Ú__qualname__r0   r1   r.   r/   r'   r&   r   r   r   r!   r   r*   r2   r4   r6   r8   r   r<   r>   r   r   r   r   r      s0    ü


r   )Z	pyglet.glÚglr   Z'sympy.plotting.pygletplot.plot_rotationr   Zsympy.plotting.pygletplot.utilr   r   r   r   r   r   r   r   r   Ú<module>   s    