a
    )yce$                     @   s   d dl Z d dlZd dlmZ d dlmZ d dlZed dd dZed dd dZ	edddZ
ed dd dZed dd dZeddddZG dd deZdS )	    N)QtCore)QtGui         c                   @   s,  e Zd ZdZdZdZdZeZe	Z
eZeZeZeZeZdZdZd=ddZedd	 Zej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(d)d* Z)d+d, Z*d-d. Z+d/d0 Z,d1d2 Z-d3d4 Z.d5d6 Z/d7d8 Z0d9d: Z1d;d< Z2dS )>Shaper         g      ?Nc                 C   sz   || _ || _g | _d| _d| _|| _|| _i | _d | _| j	| _
| j	d| jf| jd| jfi| _d| _|d urp|| _|| _d S )NF   g      ?)labelgroup_idpointsfillselected
shape_typeflagsZ
other_data_highlightIndexNEAR_VERTEX_highlightModeP_ROUNDMOVE_VERTEXP_SQUARE_highlightSettings_closed
line_color)selfr   r   r   r   r    r   Z/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/labelme/shape.py__init__/   s"    zShape.__init__c                 C   s   | j S N)_shape_typer   r   r   r   r   Q   s    zShape.shape_typec                 C   s,   |d u rd}|dvr"t d||| _d S )Npolygon)r"   	rectanglepointlinecircle	linestripzUnexpected shape_type: {})
ValueErrorformatr    )r   valuer   r   r   r   U   s
    c                 C   s
   d| _ d S )NTr   r!   r   r   r   closed   s    zShape.closec                 C   s.   | j r|| j d kr|   n| j | d S )Nr   )r   r,   appendr   r$   r   r   r   addPointg   s    
zShape.addPointc                 C   s
   | j dv S )N)r"   r'   )r   r!   r   r   r   canAddPointm   s    zShape.canAddPointc                 C   s   | j r| j  S d S r   r   popr!   r   r   r   popPointp   s    
zShape.popPointc                 C   s   | j || d S r   )r   insert)r   ir$   r   r   r   insertPointu   s    zShape.insertPointc                 C   s   | j | d S r   r1   )r   r5   r   r   r   removePointx   s    zShape.removePointc                 C   s   | j S r   r+   r!   r   r   r   isClosed{   s    zShape.isClosedc                 C   s
   d| _ d S )NFr+   r!   r   r   r   setOpen~   s    zShape.setOpenc                 C   s<   |  |  }}|  |  }}t|||| || S r   )xyr   QRectF)r   Zpt1Zpt2x1y1Zx2y2r   r   r   getRectFromLine   s    zShape.getRectFromLinec           	      C   s  | j r| jr| jn| j}t|}|tdtt	d| j
  || t }t }| jdkrt| j dv sxJ t| j dkr| j| j  }|| tt| j D ]}| || qn| jdkr(t| j dv sJ t| j dkr| | j }|| tt| j D ]}| || qn| jdkrr|| j d  t| j D ] \}}|| | || qNnV|| j d  t| j D ] \}}|| | || q|  r|| j d  || || ||| j | jr| jr | jn| j}||| d S )	Nr          @r#   )r      rB   r&   r'   r   )r   r   select_line_colorr   r   ZQPenZsetWidthmaxintroundscaleZsetPenQPainterPathr   lenr@   addRectrange
drawVertexgetCircleRectFromLine
addEllipseZmoveTo	enumeratelineTor8   ZdrawPathZfillPath_vertex_fill_colorr   select_fill_color
fill_color)	r   ZpainterZcolorZpenZ	line_pathZ	vrtx_pathr#   r5   pr   r   r   paint   sT    










zShape.paintc                 C   s   | j | j }| j}| j| }|| jkr>| j| j \}}||9 }| jd urR| j| _n| j	| _|| j
kr|| |d  | |d  || n.|| jkr|||d |d  ndsJ dd S )NrB   rA   Fzunsupported vertex shape)
point_sizerG   
point_typer   r   r   r   hvertex_fill_colorrQ   vertex_fill_colorr   rJ   r:   r;   r   rN   )r   pathr5   dshaper$   sizer   r   r   rL      s    




*
zShape.drawVertexc                 C   sL   t d}d }t| jD ]0\}}tj|| }||kr||k r|}|}q|S )Ninf)floatrO   r   labelmeutilsdistance)r   r$   epsilonmin_distanceZmin_ir5   rT   distr   r   r   nearestVertex   s    zShape.nearestVertexc                 C   sb   t d}d }tt| jD ]B}| j|d  | j| g}tj||}||kr||k r|}|}q|S )Nr^   r   )r_   rK   rI   r   r`   ra   Zdistancetoline)r   r$   rc   rd   Zpost_ir5   r%   re   r   r   r   nearestEdge   s    zShape.nearestEdgec                 C   s   |   |S r   )makePathcontainsr.   r   r   r   containsPoint   s    zShape.containsPointc                 C   sz   t |dkrdS |\}}|d |d  }tt| dt| d }t| | | | d| d| }|S )z;Computes parameters to draw with `QPainterPath::addEllipse`rB   Nr   r   )rI   mathsqrtpowr:   r;   r   r<   )r   r%   cr$   rr[   r#   r   r   r   rM      s    &(zShape.getCircleRectFromLinec                 C   s   | j dkr8t }t| jdkr| j| j }|| nf| j dkrpt }t| jdkr| | j}|| n.t| jd }| jdd  D ]}|	| q|S )Nr#   rB   r&   r   r   )
r   r   rH   rI   r   r@   rJ   rM   rN   rP   )r   rZ   r#   rT   r   r   r   rh      s    

zShape.makePathc                 C   s   |    S r   )rh   boundingRectr!   r   r   r   rp     s    zShape.boundingRectc                    s    fdd| j D | _ d S )Nc                    s   g | ]}|  qS r   r   ).0rT   offsetr   r   
<listcomp>      z Shape.moveBy.<locals>.<listcomp>r   )r   rs   r   rr   r   moveBy  s    zShape.moveByc                 C   s   | j | | | j |< d S r   rv   )r   r5   rs   r   r   r   moveVertexBy	  s    zShape.moveVertexByc                 C   s   || _ || _dS )zHighlight a vertex appropriately based on the current action

        Args:
            i (int): The vertex index
            action (int): The action
            (see Shape.NEAR_VERTEX and Shape.MOVE_VERTEX)
        N)r   r   )r   r5   actionr   r   r   highlightVertex  s    zShape.highlightVertexc                 C   s
   d| _ dS )zClear the highlighted pointN)r   r!   r   r   r   highlightClear  s    zShape.highlightClearc                 C   s
   t | S r   )copydeepcopyr!   r   r   r   r|     s    z
Shape.copyc                 C   s
   t | jS r   )rI   r   r!   r   r   r   __len__  s    zShape.__len__c                 C   s
   | j | S r   rv   )r   keyr   r   r   __getitem__!  s    zShape.__getitem__c                 C   s   || j |< d S r   rv   )r   r   r*   r   r   r   __setitem__$  s    zShape.__setitem__)NNNNN)3__name__
__module____qualname__r   r   r   r   DEFAULT_LINE_COLORr   DEFAULT_FILL_COLORrS   DEFAULT_SELECT_LINE_COLORrC   DEFAULT_SELECT_FILL_COLORrR   DEFAULT_VERTEX_FILL_COLORrY   DEFAULT_HVERTEX_FILL_COLORrX   rW   rV   rG   r   propertyr   setterr,   r/   r0   r3   r6   r7   r8   r9   r@   rU   rL   rf   rg   rj   rM   rh   rp   rw   rx   rz   r{   r|   r~   r   r   r   r   r   r   r      s`        
"

8

r   )r|   rk   Zqtpyr   r   Zlabelme.utilsr`   ZQColorr   r   r   r   r   r   objectr   r   r   r   r   <module>   s   