U
    ˜9%e¡  ã                   @   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   úd/var/www/html/Darija-Ai-API/env/lib/python3.8/site-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k
r6   td| ƒ‚Y nX z@|  |d ddd¡ |  |d ddd¡ |  |d ddd¡ W n tk
rŒ   Y nX d S )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rLt  dt| jjƒt| jj	ƒ | j
d | jd ¡ n0t  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 k	r4t  | 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   s.   t ||| jj| jj|ƒ}|d k	r*|  |¡ d S r   )r   r   r,   r-   r*   )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   Z	glRotatefr   r   )r   ZangleÚxÚyÚzr   r   r   r   b   s
    zPlotCamera.euler_rotatec                 C   s`   | j r || d }| j}| j}n|| }| j}| j}| j| }|dk rN||k sV||kr\|| _d S )Ng      I@r   )r   r.   r/   r0   r1   r#   )r   Zclicksr9   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   r<   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   r;   r   r?   rA   r   r   r   r   r      s.   ü


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   