o
    oh                     @   s
  zd dl mZmZmZ W n	 ey   Y nw d dlmZ d dlm	Z	 eej
fddZeej
f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 Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd1d'd(Zd)d* Zd+d, Zd-d. Zd/d0 Z dS )2    )c_floatc_intc_doubleN)Sc                 C      | d  }|t j| |S z/
    Returns the current modelview matrix.
       )pglGL_MODELVIEW_MATRIX
array_typeglGetMethodm r   r/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/sympy/plotting/pygletplot/util.pyget_model_matrix
      
r   c                 C   r   r   )r	   GL_PROJECTION_MATRIXr   r   r   r   get_projection_matrix   r   r   c                  C   s   t d  } ttj|  | S )z'
    Returns the current viewport.
       )r   r	   glGetIntegervGL_VIEWPORTr   r   r   r   get_viewport   s   
r   c                  C   F   t  } | d | d | d f| d | d | d f| d | d | d	 ffS )
Nr   r            	         
   r   r   r   r   r   get_direction_vectors%   
   r#   c                  C   r   )
Nr   r   r   r   r   r    r   r   r!   r"   r   r   r   r   get_view_direction_vectors,   r$   r%   c                   C   s   dS )N))r   r   r   )r   r   r   )r   r   r   r   r   r   r   r   get_basis_vectors3   s   r&   c           	      C   j   t ttj}tttj}t }t t t }}}t| ||||||||	 t|jt|jt|jfS N)	r   r   r	   glGetDoublevr   r   gluUnProjectfloatvalue	xyzr   pwmxmymzr   r   r   screen_to_model7      r6   c           	      C   r'   r(   )	r   r   r	   r)   r   r   
gluProjectr+   r,   r-   r   r   r   model_to_screen@   r7   r9   c                    s    t  fddtt D S )Nc                 3        | ]} | |  V  qd S r(   r   .0iabr   r   	<genexpr>J       zvec_subs.<locals>.<genexpr>)tuplerangelenr>   r   r>   r   vec_subsI   s    rF   c                  C   s\   t  } d| d< d| d< d| d< d| d< d| d< d| d< d| d< d| d< d| d	< t|  d
S )z
    Removes rotational components of
    current matrix so that primitives
    are always drawn facing the viewer.

    |1|0|0|x|
    |0|1|0|x|
    |0|0|1|x| (x means left unchanged)
    |x|x|x|x|
    r   r   r   r   r   r    r   r   r!   N)r   r	   glLoadMatrixfr   r   r   r   billboard_matrixM   s   rH   c                   C   s(   t jt jdgt jt jdgt jt jdggS )Nr   )r   InfinityNegativeInfinityr   r   r   r   create_boundsf   s   rK   c                 C   s^   |d u rd S t dD ]"}t| | d || g| | d< t| | d || g| | d< q
d S )N   r   r   )rD   minmax)r@   vaxisr   r   r   update_boundsl   s    "rQ   c                 C   s   | |||    S r(   r   )a_mina_maxa_ratior   r   r   interpolatet   s   rU   c                 C   s$   ||  }|| kr
d}||  t | S )Ng      ?)r+   )rR   rS   a_valuea_ranger   r   r   rinterpolatex   s   rX   c                    s   t  fddtdD S )Nc                 3   s$    | ]}t  | | V  qd S r(   )rU   r;   color1color2ratior   r   rA      s   " z$interpolate_color.<locals>.<genexpr>rL   rC   rD   rY   r   rY   r   interpolate_color      r^   c                 C   s   | | | S r(   r   )rO   v_minv_lenr   r   r   scale_value   s   rb   c                    s.   t | t| }|   fdd| D S )Nc                    s   g | ]}t | qS r   )rb   )r<   fra   r`   r   r   
<listcomp>       z$scale_value_list.<locals>.<listcomp>)rM   rN   )flistv_maxr   rd   r   scale_value_list   s   ri   2   c           	   	      s    |}}t  | dk rg S z
tt |  W n ttfy&   g  Y S w  |kr/td  }|  }t | dk rCd} |8  ||7 }t|   }|ra||krat||d S  g fddtd|d D  |g S )NgMbP?z"r_min cannot be greater than r_maxg        r   c                    s   g | ]} |  qS r   r   )r<   er_minstrider   r   re      rf   z!strided_range.<locals>.<listcomp>r   )absrD   int	TypeErrorOverflowError
ValueErrorstrided_range)	rm   r_maxrn   	max_stepso_mino_maxr_min_sr_max_sr_stepsr   rl   r   rt      s(   
*rt   c                 C   s~   t | tsd S i }| dD ].}|d}t|dkr#|d d}}nt|dkr.|\}}ntd|  | || < q|S )N;=r   r    r   z%Plot option string '%s' is malformed.)
isinstancestrsplitrE   rs   strip)soptionstokenpiecesoptionr,   r   r   r   parse_option_string   s   


r   c                       t  fddtdD S )Nc                 3   s     | ]} | |  V  qd S r(   r   r;   v1v2r   r   rA      rB   zdot_product.<locals>.<genexpr>rL   sumrD   r   r   r   r   dot_product      r   c                    r   )Nc                 3   r:   r(   r   r;   r   r   r   rA      rB   zvec_sub.<locals>.<genexpr>rL   r]   r   r   r   r   vec_sub   r   r   c                    s   t  fddtdD d S )Nc                 3   s    | ]	} | d  V  qdS )r   Nr   r;   rO   r   r   rA      s    zvec_mag.<locals>.<genexpr>rL   g      ?r   r   r   r   r   vec_mag   r_   r   )rj   )!ctypesr   r   r   ImportError	pyglet.glglr	   
sympy.corer   glGetFloatvr   r   r   r#   r%   r&   r6   r9   rF   rH   rK   rQ   rU   rX   r^   rb   ri   rt   r   r   r   r   r   r   r   r   <module>   s:    					
