o
    vh                     @   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rd 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   _/var/www/html/hyperkenya/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 |$}!|%}"qd S )Nr   gP.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   :0yE>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 rtk rn n| j| j||f}||vr|	| t|  k rtk rn dS |j|j||f}||vr|	| dS dS dS )z4try to find an intersection with _Segment o
        r   Ng:0yEre   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
&
"