o
    à’Oj  ã                   @   sÌ  d dl mZmZmZ dAdd„ZdAdd„Z		dBd	d
„ZG dd„ dƒZdd„ Z			dCdd„Z	d dl
mZ ed Zde Zde Zdd„ Zdd„ Zdd„ Zdd„ ZdZde ZG dd„ dƒZd d!„ ZdDd"d#„Zed$kräd d%l mZ d d&lmZmZ ed'd(ƒZeed)d*d)d+d,d,eed-�	 eed.d/d)d0d,d,eed-�	 ejd1gd2d
d3� eeg d4¢g d5¢g d6¢gƒƒ eed7d8gd9d:ggƒƒ eed;d8gd<d:ggƒƒ eed=d>gd:d?ggƒƒ eeg d4¢d=d>gg d@¢gƒƒ dS dS )Eé    )ÚDrawingÚPolygonÚLineNçš™™™™™¹?c                 C   ó*   |d u rddl m} | r|| d| ƒ}|S )Nr   )ÚBlackeré   )Úreportlab.lib.colorsr   )ÚcolÚshdÚshadingr   © r   úg/var/www/html/pharmsmart-cdr-gen/venv/lib/python3.10/site-packages/reportlab/graphics/charts/utils3d.pyÚ
_getShaded   ó   r   c                 C   r   )Nr   )ÚWhiterr   )r	   r   )r
   r   Úlightingr   r   r   r   Ú_getLit	   r   r   r   c                 C   sÊ   t |d |ƒ}t |d |d ƒ}| |	|
|fdd„}t||ƒ}|s |r:||kr/||||||||d� ||||||||d� |  t||||||||f|	|
|dd�¡ |sR|rc|  t|||||
|	p]|d�¡ d S d S )Ng       @c
           
      S   s<   |  t| || | || || || ||f|||	dd�¡ d S )Nr   )ÚstrokeWidthÚstrokeColorÚ	fillColorÚstrokeLineJoin)Úaddr   )
Úx1Úx2Úy1Úy2ÚxoffÚyoffÚGr   r   r   r   r   r   Ú_add_3d_bar   s   (ÿz!_draw_3d_bar.<locals>._add_3d_bar)r   r   )r   r   r   r   )r   r   )r   Úmaxr   r   r   )r   r   r   Úy0ÚyhighÚxdepthÚydepthr   ÚfillColorShadedr   r   r   ÚfillColorShadedTopr    Úusdr   r   r   Ú_draw_3d_bar   s   
ÿ
ÿ"ÿr)   c                   @   s   e Zd Zddd„ZdS )Ú_YStripr   c                 C   s*   || _ || _|| _|| _t|||ƒ| _d S ©N)r"   r   Úsloper   r   r&   )Úselfr"   r   r,   r   r&   r   r   r   r   Ú__init__)   s
   z_YStrip.__init__N)r   )Ú__name__Ú
__module__Ú__qualname__r.   r   r   r   r   r*   (   s    r*   c                 C   s$   | || | || || || ||gS r+   r   )Úx0r   r"   r   r   r   r   r   r   Ú_ystrip_poly0   s   $r3   c           '   	   C   s®  t || ƒ}|| }|| }|dkrdp| t|ƒ }t|| ƒ}|dkr'dp,|| | }||kr7t|	|
|ƒp8|	}|| }|| }d}|d u rM||fg}nQ|| d || d  d }||9 }||k ri||fg}n5t|t|ƒ ƒd }t|| ƒ| }t|| ƒ| }g }|j}td|ƒD ]} ||||   |||   fƒ q�| j}|| }!|| }"|D ])\}}#|| }$|#| }%tt|!|$|"|%||ƒ|||d�}&|d|||!|"|&fƒ |$}!|%}"q«d S )Nr   g¯–P.5�_g333333ã?é   ç      à?r   )r   r   r   )	ÚabsÚfloatr   ÚintÚappendÚranger   r   r3   )'r   r2   r   r"   r   Úz0Úz1Útheta_xÚtheta_yr   r&   Ú	tileWidthr   r   ÚstrokeDashArrayr   Úzwidthr$   r%   Údepth_slopeÚxr,   ÚcÚzy0Úzx0ÚtileStrokeWidthÚDÚTÚnÚdxÚdyÚaÚiÚx_0Úy_0ÚyÚx_1Úy_1ÚPr   r   r   Ú_make_3d_line_info4   sH   ÿùrU   )Úpir5   r4   g     €f@c                 C   s   | t  S r+   ©Ú_180_pi)Úangler   r   r   Ú_2radg   ó   rZ   c                 C   s   | t  } | dk r| t 7 } | S )Nç�íµ ÷Æ°¾)Ú_2pi)Úradiansr   r   r   Úmod_2pij   ó   r_   c                 C   s   | t  S r+   rW   )Úor   r   r   Ú_2dego   r[   rb   c                 C   s   | d; } | dk r| d7 } | S )Nih  r\   r   ©rM   r   r   r   Ú_360r   r`   rd   ç:Œ0âŽyE>c                   @   s(   e Zd Zdd„ Zdd„ ZeZdd„ ZdS )Ú_Segmentc           	      C   s¦   || }||d  d }||d  d }|| d }|| d }||k r.||||f\}}}}t || ƒ| _t || ƒ| _|| _|| _|| _|| _|| _|| _|| _	d S )Nr   r   )
r7   rM   Úbr2   r   r"   r   ÚseriesrN   Ús)	r-   ri   rN   ÚdataÚSr2   r"   r   r   r   r   r   r.   z   s    
z_Segment.__init__c                 C   s   d| j | j| j| jf S )Nz[(%s,%s),(%s,%s)])r2   r"   r   r   )r-   r   r   r   Ú__str__�   s   z_Segment.__str__c                 C   sŒ  | j }|j }||ksJ ‚|| jkrdS |j| jkr(|j| jd | jd fv r(dS | j}| j}|j}|j}|| ||  }	d|	  k rGdk rHdS  || }
| j|j }|| ||
  |	 }|| ||
  |	 }|dk sv|dksv|dk sv|dkrxdS |||  }| j||  }t|  k r�tk r¢n n| j| j||f}||vr¢| 	|¡ t|  k r¬tk rÂn dS |j|j||f}||vrÄ| 	|¡ dS dS dS )z4try to find an intersection with _Segment o
        r   Ng:Œ0âŽyE¾re   r   )
r2   r   ri   rN   rM   rg   r"   Ú_ZEROÚ_ONEr9   )r-   ra   ÚIr2   Úox0rM   rg   ÚoaÚobÚdetrK   rL   ÚuÚourC   rQ   Útr   r   r   Ú	intersect”   s4   *$þz_Segment.intersectN)r/   r0   r1   r.   rl   Ú__repr__rw   r   r   r   r   rf   y   s
    rf   c                 C   s   | j | j| j| j| j| jfS r+   )r2   r   r"   r   ri   rN   rc   r   r   r   Ú_segKey°   s   ry   c                 C   sà   g }|j }tt| ƒƒD ].}| | }|sqt|ƒ}|dkrqtd|ƒD ]}t||| ƒ}|jt|jƒ |kr8||ƒ q"q|jtd� g }	t|ƒ}td|d ƒD ]}|| }t|d |ƒD ]}
| 	||
 |	¡dkrh nqZqM|	 ¡  |	S )aV  
    data is a sequence of series
    each series is a list of (x,y) coordinates
    where x & y are ints or floats

    find_intersections returns a sequence of 4-tuples
        i, j, x, y

    where i is a data index j is an insertion position for data[i]
    and x, y are coordinates of an intersection of series data[i]
    with some other series. If correctly implemented we get all such
    intersections. We don't count endpoint intersections and consider
    parallel lines as non intersecting (even when coincident).
    We ignore segments that have an estimated size less than small.
    r   )Úkeyr   )
r9   r:   Úlenrf   rM   r6   rg   Úsortry   rw   )rj   Úsmallrk   rM   ri   ÚdsrJ   rN   Úsegro   Újr   r   r   Úfind_intersections³   s,   
€þ€r�   Ú__main__)r   )Ú	lightgreyÚpinki,  éÈ   é
   é   é2   é   )r   r   é   é(   é-   ÚpdfÚ.)ÚformatsÚoutDirÚfnRoot))r   r5   )r   r5   )r5   r   )r5   r   ))g±:Ñ?çš™™™™™Ù?©r   r’   ©r   çš™™™™™É?©r   r   ©r   r   )©r   r   ©r’   r   ©r   r   r”   r“   r˜   r™   )r•   r’   ©r   gš™™™™™é?r–   r—   rš   )r›   r™   rš   )Nr   )NNNr   r   )Nr   NNNr   )r   )Úreportlab.graphics.shapesr   r   r   r   r   r)   r*   r3   rU   ÚmathrV   Ú_pi_2r]   rX   rZ   r_   rb   rd   rm   rn   rf   ry   r�   r/   r	   rƒ   r„   rH   ÚsaveÚprintr   r   r   r   Ú<module>   sL    


þ
ü.7
&
"ó