a
    )Òyc?ƒ  ã                   @   s†   d dl mZ d dl mZ d dl mZ d dlmZ d dlmZ d dlZej	j
Zej	jZej	jZej	jZej	jZdZG dd	„ d	ejƒZdS )
é    )ÚQtCore)ÚQtGui)Ú	QtWidgets)ÚQT5)ÚShapeNg      @c                       sv  e Zd Ze eej¡Ze ee¡Ze ¡ Z	e e
¡Ze ¡ Ze e¡Ze e¡Zd\ZZdZdZ‡ fdd„Zdd„ Zdd	„ Zed
d„ ƒZejdd„ ƒZdd„ Ze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(d)„ Z'd*d+„ Z(d,d-„ Z)d.d/„ Z*d0d1„ Z+d2d3„ Z,d4d5„ Z-dd6d7„Z.d8d9„ Z/d:d;„ Z0d<d=„ Z1d>d?„ Z2d@dA„ Z3dBdC„ Z4dDdE„ Z5dFdG„ Z6dHdI„ Z7dJdK„ Z8dLdM„ Z9dNdO„ Z:‡ fdPdQ„Z;dRdS„ Z<‡ fdTdU„Z=dVdW„ Z>dXdY„ Z?dZd[„ Z@d\d]„ ZAd^d_„ ZBd`da„ ZC‡ fdbdc„ZDddde„ ZEdfdg„ ZFdhdi„ ZGdjdk„ ZHdldm„ ZIdndo„ ZJdpdq„ ZKd€drds„ZLddtdu„ZMdvdw„ ZNdxdy„ ZOdzd{„ ZPd|d}„ ZQ‡  ZRS )‚ÚCanvas)r   é   ÚpolygonFc              
      s`  |  dd¡| _|  dd¡| _| jdvr6td | j¡ƒ‚|  dd¡| _|  d	d
dd
d
d
d
dœ¡| _tt| ƒj	|i |¤Ž | j
| _g | _g | _d | _g | _g | _tƒ | _t ¡ | _t ¡ | _t ¡ t ¡ f| _d| _t ¡ | _i | _d
| _d
| _d | _d | _ d | _!d | _"d | _#d | _$d
| _%d| _&d
| _'t (¡ | _)t*| _+t, -¡ t, -¡ f| _.|  /d¡ |  0tj1j2¡ d S )NÚepsilong      $@Údouble_clickÚclose)Nr   z+Unexpected value for double_click event: {}Únum_backupsé
   Z	crosshairFT©r	   Ú	rectangleÚcircleÚlineÚpointÚ	linestripg      ð?)3Úpopr
   r   Ú
ValueErrorÚformatr   Ú
_crosshairÚsuperr   Ú__init__ÚEDITÚmodeÚshapesÚshapesBackupsÚcurrentÚselectedShapesÚselectedShapesCopyr   r   r   ÚQPointÚ	prevPointÚprevMovePointÚoffsetsÚscaler   ZQPixmapÚpixmapÚvisibleÚ_hideBackroundÚhideBackroundÚhShapeÚ
prevhShapeÚhVertexÚprevhVertexÚhEdgeÚ	prevhEdgeÚmovingShapeÚsnappingÚhShapeIsSelectedÚQPainterÚ_painterÚCURSOR_DEFAULTÚ_cursorr   ZQMenuÚmenusZsetMouseTrackingZsetFocusPolicyÚQtZ
WheelFocus)ÚselfÚargsÚkwargs©Ú	__class__© úc/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/labelme/widgets/canvas.pyr   (   sb    
ÿÿúþ




zCanvas.__init__c                 C   s   | j S ©N©Ú_fill_drawing©r:   r?   r?   r@   ÚfillDrawingf   s    zCanvas.fillDrawingc                 C   s
   || _ d S rA   rB   ©r:   Úvaluer?   r?   r@   ÚsetFillDrawingi   s    zCanvas.setFillDrawingc                 C   s   | j S rA   )Ú_createModerD   r?   r?   r@   Ú
createModel   s    zCanvas.createModec                 C   s   |dvrt d| ƒ‚|| _d S )Nr   zUnsupported createMode: %s)r   rI   rF   r?   r?   r@   rJ   p   s    c                 C   sV   g }| j D ]}| | ¡ ¡ q
t| jƒ| jkrF| j| j d d … | _| j |¡ d S )Nr   )r   ÚappendÚcopyÚlenr   r   ©r:   ZshapesBackupÚshaper?   r?   r@   ÚstoreShapes}   s    
zCanvas.storeShapesc                 C   s   t | jƒdk rdS dS )Né   FT)rM   r   rD   r?   r?   r@   ÚisShapeRestorable…   s    zCanvas.isShapeRestorablec                 C   sH   | j s
d S | j ¡  | j ¡ }|| _g | _| jD ]
}d|_q0|  ¡  d S ©NF)rR   r   r   r   r    ÚselectedÚupdaterN   r?   r?   r@   ÚrestoreShapeŽ   s    


zCanvas.restoreShapec                 C   s   |   | j¡ d S rA   )ÚoverrideCursorr7   ©r:   Úevr?   r?   r@   Ú
enterEventŸ   s    zCanvas.enterEventc                 C   s   |   ¡  |  ¡  d S rA   )ÚunHighlightÚrestoreCursorrX   r?   r?   r@   Ú
leaveEvent¢   s    zCanvas.leaveEventc                 C   s   |   ¡  d S rA   )r\   rX   r?   r?   r@   ÚfocusOutEvent¦   s    zCanvas.focusOutEventc                 C   s   | j  |d¡S ©NT)r(   Úget©r:   rO   r?   r?   r@   Ú	isVisible©   s    zCanvas.isVisiblec                 C   s   | j | jkS rA   )r   ÚCREATErD   r?   r?   r@   Údrawing¬   s    zCanvas.drawingc                 C   s   | j | jkS rA   )r   r   rD   r?   r?   r@   Úediting¯   s    zCanvas.editingTc                 C   s<   |r
| j n| j| _| j| j kr(|  ¡  n|  ¡  |  ¡  d S rA   )r   rc   r   Úrepaintr[   ÚdeSelectShaperF   r?   r?   r@   Ú
setEditing²   s
    
zCanvas.setEditingc                 C   sF   | j r| j  ¡  |  ¡  | j | _| j| _| j| _d  | _  | _| _d S rA   )r+   ÚhighlightClearrU   r,   r-   r.   r/   r0   rD   r?   r?   r@   r[   ¼   s    
zCanvas.unHighlightc                 C   s
   | j d uS rA   )r-   rD   r?   r?   r@   ÚselectedVertexÅ   s    zCanvas.selectedVertexc                 C   s
   | j d uS rA   )r/   rD   r?   r?   r@   ÚselectedEdgeÈ   s    zCanvas.selectedEdgec                    s´  z&t rˆ  | ¡ ¡}nˆ  | ¡ ¡}W n ty:   Y dS 0 |ˆ _ˆ  ¡  ˆ  ¡ rÌˆ jˆ j	_
ˆ  t¡ ˆ jszˆ  ¡  dS ˆ  |¡r˜ˆ  ˆ jd |¡}nTˆ jrìtˆ jƒdkrìˆ jdkrìˆ  |ˆ jd ¡rìˆ jd }ˆ  t¡ ˆ j dtj¡ ˆ jdv rˆ jd ˆ j	d< |ˆ j	d< n¢ˆ jdkr>ˆ jd |gˆ j	_ˆ j	 ¡  nxˆ jdkrfˆ jd |gˆ j	_dˆ j	_
nPˆ jd	krˆ jd |gˆ j	_ˆ j	 ¡  n&ˆ jd
kr¶ˆ jd gˆ j	_ˆ j	 ¡  ˆ  ¡  ˆ j ¡  dS tjj| ¡ @ r6ˆ jrˆ j rˆ  t!¡ ˆ  "ˆ j|¡ ˆ  ¡  n"ˆ j#r2dd„ ˆ j#D ƒˆ _ˆ  ¡  dS tjj$| ¡ @ r¦ˆ  %¡ rlˆ  &|¡ ˆ  ¡  dˆ _'n6ˆ j#r¢ˆ j r¢ˆ  t!¡ ˆ  "ˆ j#|¡ ˆ  ¡  dˆ _'dS ˆ  (ˆ  )d¡¡ t*‡ fdd„ˆ j+D ƒƒD ]Ä}| ,|ˆ j-ˆ j. ¡}| /|ˆ j-ˆ j. ¡}|durˆˆ  %¡ rˆ j0 ¡  | ˆ _1ˆ _2| ˆ _3ˆ _0ˆ j4ˆ _5dˆ _4| ||j6¡ ˆ  t¡ ˆ  (ˆ  )d¡¡ ˆ  7ˆ  8¡ ¡ ˆ  9¡   qžqÎ|dur| :¡ rˆ  %¡ r°ˆ j0 ¡  ˆ j2ˆ _1dˆ _2| ˆ _3ˆ _0| ˆ _5ˆ _4ˆ  t¡ ˆ  (ˆ  )d¡¡ ˆ  7ˆ  8¡ ¡ ˆ  9¡   qžn„| ;|¡rÎˆ  %¡ r.ˆ j0 ¡  ˆ j2ˆ _1dˆ _2| ˆ _3ˆ _0ˆ j4ˆ _5dˆ _4ˆ  (ˆ  )d¡|j< ¡ ˆ  7ˆ  8¡ ¡ ˆ  t=¡ ˆ  9¡   qžqÎˆ  >¡  ˆ j? @ˆ j2du¡ dS )z4Update line with last point and current coordinates.Néÿÿÿÿr   r	   r   ©r	   r   r   r   r   r   c                 S   s   g | ]}|  ¡ ‘qS r?   ©rL   ©Ú.0Úsr?   r?   r@   Ú
<listcomp>
  s   z)Canvas.mouseMoveEvent.<locals>.<listcomp>TZImagec                    s   g | ]}ˆ   |¡r|‘qS r?   )rb   ro   rD   r?   r@   rr   "  ó    zClick & drag to move pointzClick to create pointzClick & drag to move shape '%s')Ar   ÚtransformPosÚlocalPosÚposFÚAttributeErrorr$   r\   rd   rJ   r   Ú
shape_typerW   ÚCURSOR_DRAWr   rf   ÚoutOfPixmapÚintersectionPointr2   rM   ÚcloseEnoughÚCURSOR_POINTÚhighlightVertexr   ZNEAR_VERTEXÚpointsr   ri   r   r9   ÚRightButtonZbuttonsr!   r#   ÚCURSOR_MOVEÚboundedMoveShapesr    Ú
LeftButtonrj   ÚboundedMoveVertexr1   Z
setToolTipÚtrÚreversedr   ZnearestVertexr
   r&   ZnearestEdger+   r.   r-   r,   r/   r0   ÚMOVE_VERTEXZsetStatusTipZtoolTiprU   ZcanAddPointÚcontainsPointÚlabelÚCURSOR_GRABr[   ÚvertexSelectedÚemit)r:   rY   ÚposrO   ÚindexZ
index_edger?   rD   r@   ÚmouseMoveEventË   sâ    



ÿþýü






ÿ












ÿ

zCanvas.mouseMoveEventc                 C   sd   | j }| j}| j}|d u s*|d u s*|d u r.d S | ||¡ | ||j¡ || _|| _d | _d| _	d S r_   )
r,   r0   r$   ZinsertPointr~   r‡   r+   r-   r/   r1   )r:   rO   rŽ   r   r?   r?   r@   ÚaddPointToEdgeS  s    zCanvas.addPointToEdgec                 C   sH   | j }| j}|d u s|d u r d S | |¡ | ¡  || _d | _d| _d S r_   )r,   r.   ZremovePointri   r+   r1   )r:   rO   rŽ   r?   r?   r@   ÚremoveSelectedPoint`  s    
zCanvas.removeSelectedPointc                 C   sl  t r|  | ¡ ¡}n|  | ¡ ¡}| ¡ tjjkrú|  ¡ r‚| j	r| j
dkr†| j	 | jd ¡ | j	d | jd< | j	 ¡ r„|  ¡  n€| j
dv rºt| j	jƒdks¤J ‚| jj| j	_|  ¡  nL| j
dkr€| j	 | jd ¡ | j	d | jd< t| ¡ ƒtjjkr€|  ¡  nx|  |¡søt| j
d| _	| j	 |¡ | j
dkrD|  ¡  n<| j
d	krXd	| j	_||g| j_|  ¡  | j d
¡ |  ¡  nv|  ¡ rh|  ¡ r |  ¡  n(|  ¡ rÈt| ¡ ƒtjjkrÈ|   ¡  t| ¡ ƒtjjk}| j!||d || _"|  #¡  nn| ¡ tjj$krh|  ¡ rht| ¡ ƒtjjk}| j%rL| j&d urb| j&| j%vrb| j!||d |  #¡  || _"d S )Nr	   r   rl   r   )r   r   r   r   )rx   r   r   T)Úmultiple_selection_mode)'r   rt   ru   rv   Úbuttonr   r9   rƒ   rd   r   rJ   ÚaddPointr   ÚisClosedÚfinaliserM   r   ÚintÚ	modifiersÚControlModifierrz   r   rx   Ú	setHidingÚdrawingPolygonrŒ   rU   re   rk   r   rj   ÚShiftModifierr‘   ÚselectShapePointr#   rf   r€   r    r+   )r:   rY   r   Z
group_moder?   r?   r@   ÚmousePressEventk  sj    











ÿþ
ÿ
þzCanvas.mousePressEventc                    sò   |  ¡ tjjkrVˆ jtˆ jƒdk }ˆ  ¡  | ˆ  	| 
¡ ¡¡s ˆ jr g ˆ _ˆ  ¡  nJ|  ¡ tjjkr ˆ  ¡ r ˆ jd ur ˆ jr ˆ js ˆ j ‡ fdd„ˆ jD ƒ¡ ˆ jrîˆ jrîˆ j ˆ j¡}ˆ jd | jˆ j| jkrèˆ  ¡  ˆ j ¡  dˆ _d S )Nr   c                    s   g | ]}|ˆ j kr|‘qS r?   )r+   )rp   ÚxrD   r?   r@   rr   º  rs   z,Canvas.mouseReleaseEvent.<locals>.<listcomp>rl   F)r“   r   r9   r€   r8   rM   r!   r\   Zexec_ZmapToGlobalr   rf   rƒ   re   r+   r3   r1   ÚselectionChangedrŒ   r    r   rŽ   r   r   rP   Ú
shapeMoved)r:   rY   ZmenurŽ   r?   rD   r@   ÚmouseReleaseEvent§  s:    ÿþ
ÿþýÿ
ÿÿ
zCanvas.mouseReleaseEventc                 C   s    | j r| jsJ ‚t| jƒt| j ƒks(J ‚|rdt| jƒD ]*\}}| j |¡ d| j | _|| j |< q6n"t| jƒD ]\}}|j| j | _qng | _|  ¡  |  	¡  dS )NFT)
r    r!   rM   Ú	enumerater   rK   rT   r   rf   rP   )r:   rL   ÚirO   r?   r?   r@   ÚendMoveÈ  s    zCanvas.endMovec                 C   s"   || _ | jr|  d¡ |  ¡  d S r_   )r*   r    rš   rU   rF   r?   r?   r@   ÚhideBackroundShapesØ  s    
zCanvas.hideBackroundShapesc                 C   s   |r
| j nd| _d S rS   )r*   r)   )r:   Úenabler?   r?   r@   rš   à  s    zCanvas.setHidingc                 C   s   |   ¡ o| jot| jƒdkS )NrQ   )rd   r   rM   rD   r?   r?   r@   ÚcanCloseShapeã  s    zCanvas.canCloseShapec                 C   s6   | j dkr2|  ¡ r2t| jƒdkr2| j ¡  |  ¡  d S )Nr   é   )r   r¨   rM   r   ÚpopPointr–   rX   r?   r?   r@   ÚmouseDoubleClickEventæ  s    ÿþý
zCanvas.mouseDoubleClickEventc                 C   s    |   ¡  | j |¡ |  ¡  d S rA   )rš   r    rŒ   rU   )r:   r   r?   r?   r@   ÚselectShapesñ  s    zCanvas.selectShapesc                 C   s®   |   ¡ r&| j| j }}| ||j¡ n|t| jƒD ]p}|  |¡r0| |¡r0|  	¡  || j
vrŠ|rt| j | j
|g ¡ n| j |g¡ d| _nd| _|  |¡  dS q0|  ¡  dS )z9Select the first shape created which contains this point.FTN)rj   r-   r+   r~   r‡   r†   r   rb   rˆ   rš   r    r    rŒ   r3   ÚcalculateOffsetsrg   )r:   r   r’   rŽ   rO   r?   r?   r@   r   ö  s"    

ÿ
zCanvas.selectShapePointc                 C   sÖ   | j  ¡ d }d}| j  ¡ d }d}| jD ]\}| ¡ }| ¡ |k rJ| ¡ }| ¡ |kr^| ¡ }| ¡ |k rr| ¡ }| ¡ |kr*| ¡ }q*|| 	¡  }|| 
¡  }	|| 	¡  }
|| 
¡  }t ||	¡t |
|¡f| _d S )Nr   r   )r'   ÚwidthÚheightr    ZboundingRectÚleftÚrightÚtopÚbottomrŸ   Úyr   ÚQPointFr%   )r:   r   r°   r±   r²   r³   rq   ZrectÚx1Úy1Úx2Úy2r?   r?   r@   r­     s&    

zCanvas.calculateOffsetsc                 C   s@   | j | j }}|| }|  |¡r,|  ||¡}| ||| ¡ d S rA   )r-   r+   rz   r{   ZmoveVertexBy)r:   r   rŽ   rO   r   r?   r?   r@   r„   #  s
    
zCanvas.boundedMoveVertexc              	   C   sÊ   |   |¡rdS || jd  }|   |¡rJ|t td| ¡ ƒtd| ¡ ƒ¡8 }|| jd  }|   |¡rš|t td| j ¡ | ¡  ƒtd| j 	¡ | ¡  ƒ¡7 }|| j
 }|rÆ|D ]}| |¡ q¬|| _
dS dS )NFr   r   T)rz   r%   r   r"   ÚminrŸ   r´   r'   r®   r¯   r#   ZmoveBy)r:   r   r   Zo1Zo2ZdprO   r?   r?   r@   r‚   *  s$    

$
þ	
zCanvas.boundedMoveShapesc                 C   s.   | j r*|  d¡ | j g ¡ d| _|  ¡  d S rS   )r    rš   r    rŒ   r3   rU   rD   r?   r?   r@   rg   C  s
    
zCanvas.deSelectShapec                 C   sF   g }| j rB| j D ]}| j |¡ | |¡ q|  ¡  g | _ |  ¡  |S rA   )r    r   ÚremoverK   rP   rU   )r:   Zdeleted_shapesrO   r?   r?   r@   ÚdeleteSelectedJ  s    
zCanvas.deleteSelectedc                 C   s@   || j v r| j  |¡ || jv r,| j |¡ |  ¡  |  ¡  d S rA   )r    r»   r   rP   rU   ra   r?   r?   r@   ÚdeleteShapeU  s    

zCanvas.deleteShapec                 C   s6   | j r0dd„ | j D ƒ| _|  | j¡ | jdd | j S )Nc                 S   s   g | ]}|  ¡ ‘qS r?   rn   ro   r?   r?   r@   rr   _  rs   z2Canvas.duplicateSelectedShapes.<locals>.<listcomp>Trn   )r    r!   ÚboundedShiftShapesr¥   rD   r?   r?   r@   ÚduplicateSelectedShapes]  s
    zCanvas.duplicateSelectedShapesc                 C   sT   |d d }t  dd¡}t  ¡ t  ¡ f| _|| _|  ||| ¡sP|  ||| ¡ d S )Nr   g       @)r   rµ   r"   r%   r#   r‚   )r:   r   r   Úoffsetr?   r?   r@   r¾   d  s    zCanvas.boundedShiftShapesc                    s  | j stt| ƒ |¡S | j}| | ¡ | tjj	¡ | tjj
¡ | tjj¡ | | j| j¡ | |  ¡ ¡ | dd| j ¡ | j| j r|  ¡ r| jr|  | j¡s| t ddd¡¡ | dt| j ¡ ƒ|  ¡ d t| j ¡ ƒ¡ | t| j ¡ ƒdt| j ¡ ƒ|  ¡ d ¡ | jt_| jD ]@}|js:| j s&|  !|¡r&|jpV|| j"k|_#| $|¡ q&| j%rˆ| j% $|¡ | j& $|¡ | j'r¨| j'D ]}| $|¡ q–|  (¡ r| j)dkr| j%d urt*| j%j+ƒdkr| j% ,¡ }| -| j&d ¡ d|_#| $|¡ | .¡  d S )Nr   r   r	   rQ   T)/r'   r   r   Ú
paintEventr5   ÚbeginZsetRenderHintr   r4   ZAntialiasingZHighQualityAntialiasingZSmoothPixmapTransformr&   Ú	translateÚoffsetToCenterZ
drawPixmapr   rI   rd   r$   rz   ZsetPenZQColorZdrawLiner—   r´   r®   rŸ   r¯   r   r   rT   r)   rb   r+   ÚfillZpaintr   r   r!   rE   rJ   rM   r   rL   r”   Úend)r:   ÚeventÚprO   rq   Zdrawing_shaper=   r?   r@   rÁ   n  sr    

ÿþý
ü
ü
ü
ÿ
ÿþýü

zCanvas.paintEventc                 C   s   || j  |  ¡  S )z@Convert from widget-logical coordinates to painter-logical ones.)r&   rÄ   )r:   r   r?   r?   r@   rt   ­  s    zCanvas.transformPosc           	         sˆ   | j }tt| ƒ ¡ }| j ¡ | | j ¡ |  }}| ¡ | ¡  }}||kr\|| d|  nd}||krx|| d|  nd}t ||¡S )NrQ   r   )	r&   r   r   Úsizer'   r®   r¯   r   rµ   )	r:   rq   ZareaÚwÚhZawZahrŸ   r´   r=   r?   r@   rÄ   ±  s    zCanvas.offsetToCenterc                 C   sX   | j  ¡ | j  ¡  }}d| ¡   ko0|d kn  oTd| ¡   koP|d kn   S )Nr   r   )r'   r®   r¯   rŸ   r´   )r:   rÈ   rÊ   rË   r?   r?   r@   rz   º  s    zCanvas.outOfPixmapc                 C   sP   | j s
J ‚| j  ¡  | j | j ¡ |  ¡  d | _ |  d¡ | j ¡  |  ¡  d S rS   )	r   r   r   rK   rP   rš   ÚnewShaperŒ   rU   rD   r?   r?   r@   r–   ¾  s    



zCanvas.finalisec                 C   s   t j || ¡| j| j k S rA   )ÚlabelmeÚutilsÚdistancer
   r&   )r:   Úp1Úp2r?   r?   r@   r|   È  s    zCanvas.closeEnoughc                 C   s4  | j  ¡ }d| ¡ d df| ¡ d | ¡ d fd| ¡ d fg}tt| ¡ dƒ| ¡ d ƒ}tt| ¡ dƒ| ¡ d ƒ}| ¡ | ¡  }}t|  ||f||f|¡ƒ\}	}
\}}||
 \}}||
d d  \}}||f||fkr(||kr
t	 
|ttd|ƒt||ƒƒ¡S t	 
ttd|ƒt||ƒƒ|¡S t	 
||¡S )N)r   r   r   r   é   )r'   rÉ   r®   r¯   rº   ÚmaxrŸ   r´   ÚintersectingEdgesr   rµ   )r:   rÐ   rÑ   rÉ   r   r¶   r·   r¸   r¹   Údr¤   rŸ   r´   Úx3Úy3Úx4Úy4r?   r?   r@   r{   Ï  s"    
ü$
zCanvas.intersectionPointc                 c   sT  |\}}|\}}t dƒD ]4}|| \}	}
||d d  \}}||
 ||  ||	 ||   }||	 ||
  ||
 ||	   }|| ||
  || ||	   }|dkr¨q|| ||  }}d|  krÎdkrn qd|  krædkrn q||||   }||||   }t |	| d |
| d ¡}tj |t ||¡ ¡}||||ffV  qdS )a1  Find intersecting edges.

        For each edge formed by `points', yield the intersection
        with the line segment `(x1,y1) - (x2,y2)`, if it exists.
        Also return the distance of `(x2,y2)' to the middle of the
        edge along with its index, so that the one closest can be chosen.
        rÒ   r   r   rQ   N)Úranger   rµ   rÍ   rÎ   rÏ   )r:   Zpoint1Zpoint2r   r¶   r·   r¸   r¹   r¤   rÖ   r×   rØ   rÙ   ZdenomZnuaZnubZuaZubrŸ   r´   ÚmrÕ   r?   r?   r@   rÔ   é  s"       0zCanvas.intersectingEdgesc                 C   s   |   ¡ S rA   )ÚminimumSizeHintrD   r?   r?   r@   ÚsizeHint  s    zCanvas.sizeHintc                    s$   | j r| j| j  ¡  S tt| ƒ ¡ S rA   )r'   r&   rÉ   r   r   rÜ   rD   r=   r?   r@   rÜ     s    zCanvas.minimumSizeHintc                 C   sü   t rj| ¡ }| ¡ }tjjt|ƒkr<| j | 	¡ | 
¡ ¡ qð| j | ¡ tjj¡ | j | 	¡ tjj¡ n†| ¡ tjjkrÚ| ¡ }tjjt|ƒkrª| j | ¡ | 
¡ ¡ qð| j | ¡ tjjt|ƒkrÎtjjntjj¡ n| j | ¡ tjj¡ | ¡  d S rA   )r   r˜   Z
angleDeltar   r9   r™   r—   ÚzoomRequestrŒ   r´   r   ÚscrollRequestrŸ   Z
HorizontalZVerticalZorientationÚdeltarœ   Úaccept)r:   rY   Úmodsrà   r?   r?   r@   Ú
wheelEvent  s&    ÿ
üzCanvas.wheelEventc                 C   s,   | j r(|  | j | j| ¡ |  ¡  d| _d S r_   )r    r‚   r#   rf   r1   )r:   rÀ   r?   r?   r@   ÚmoveByKeyboard-  s    ÿzCanvas.moveByKeyboardc                 C   s
  |  ¡ }| ¡ }|  ¡ rx|tjjkrF| jrFd | _| j d¡ |  	¡  n0|tjj
krd|  ¡ rd|  ¡  n|tjjkrvd| _nŽ|  ¡ r|tjjkr¤|  t dt ¡¡ nb|tjjkrÄ|  t dt¡¡ nB|tjjkræ|  t t d¡¡ n |tjjkr|  t td¡¡ d S )NFg        )r˜   Úkeyrd   r   r9   Z
Key_Escaper   r›   rŒ   rU   Z
Key_Returnr¨   r–   ZAltModifierr2   re   ZKey_Uprä   rµ   Ú
MOVE_SPEEDZKey_DownZKey_LeftZ	Key_Right)r:   rY   r˜   rå   r?   r?   r@   ÚkeyPressEvent5  s(    


zCanvas.keyPressEventc                 C   s‚   |  ¡ }|  ¡ r$t|ƒdkr~d| _nZ|  ¡ r~| jr~| jr~| j | jd ¡}| j	d | j
| j| j
krx|  ¡  | j ¡  d| _d S )Nr   Trl   F)r˜   rd   r—   r2   re   r1   r    r   rŽ   r   r   rP   r¡   rŒ   )r:   rY   r˜   rŽ   r?   r?   r@   ÚkeyReleaseEventK  s    
ÿÿ
zCanvas.keyReleaseEventc                 C   s<   |sJ ‚|| j d _|| j d _| j ¡  |  ¡  | j d S )Nrl   )r   r‰   Úflagsr   r   rP   )r:   Útextré   r?   r?   r@   ÚsetLastLabel\  s    
zCanvas.setLastLabelc                 C   s„   | j s
J ‚| j  ¡ | _| j ¡  | jdv rD| jd | jd g| j_n0| jdv rd| jjdd… | j_n| jdkrtd | _| j d¡ d S )Nrm   rl   r   )r   r   r   r   r   T)	r   r   r   ZsetOpenrJ   r   r   r›   rŒ   rD   r?   r?   r@   ÚundoLastLined  s    




zCanvas.undoLastLinec                 C   s\   | j r| j  ¡ rd S | j  ¡  t| j ƒdkr>| j d | jd< nd | _ | j d¡ |  ¡  d S )Nr   rl   F)r   r•   rª   rM   r   r›   rŒ   rU   rD   r?   r?   r@   ÚundoLastPointp  s    
zCanvas.undoLastPointc                 C   s   || _ |rg | _|  ¡  d S rA   )r'   r   rU   )r:   r'   Zclear_shapesr?   r?   r@   Ú
loadPixmap{  s    zCanvas.loadPixmapc                 C   sH   |rt |ƒ| _n| j |¡ |  ¡  d | _d | _d | _d | _|  ¡  d S rA   )	Úlistr   ÚextendrP   r   r+   r-   r/   rU   )r:   r   Úreplacer?   r?   r@   Ú
loadShapes  s    zCanvas.loadShapesc                 C   s   || j |< |  ¡  d S rA   )r(   rU   )r:   rO   rG   r?   r?   r@   ÚsetShapeVisible  s    
zCanvas.setShapeVisiblec                 C   s   |   ¡  || _tj |¡ d S rA   )r\   r7   r   ÚQApplicationZsetOverrideCursor)r:   Zcursorr?   r?   r@   rW   ‘  s    zCanvas.overrideCursorc                 C   s   t j ¡  d S rA   )r   rô   ZrestoreOverrideCursorrD   r?   r?   r@   r\   –  s    zCanvas.restoreCursorc                 C   s    |   ¡  d | _g | _|  ¡  d S rA   )r\   r'   r   rU   rD   r?   r?   r@   Ú
resetState™  s    zCanvas.resetState)T)T)T)T)SÚ__name__Ú
__module__Ú__qualname__r   ZSignalr—   r"   rÞ   rß   rÌ   rï   r    r¡   Úboolr›   r‹   rc   r   rI   rC   r   rE   rH   ÚpropertyrJ   ÚsetterrP   rR   rV   rZ   r]   r^   rb   rd   re   rh   r[   rj   rk   r   r   r‘   rž   r¢   r¥   r¦   rš   r¨   r«   r¬   r   r­   r„   r‚   rg   r¼   r½   r¿   r¾   rÁ   rt   rÄ   rz   r–   r|   r{   rÔ   rÝ   rÜ   rã   rä   rç   rè   rë   rì   rí   rî   rò   ró   rW   r\   rõ   Ú__classcell__r?   r?   r=   r@   r      s–   


>




	 	<!

?	


r   )Zqtpyr   r   r   rÍ   r   Zlabelme.shaper   Zlabelme.utilsr9   ZArrowCursorr6   ZPointingHandCursorr}   ZCrossCursorry   ZClosedHandCursorr   ZOpenHandCursorrŠ   ræ   ZQWidgetr   r?   r?   r?   r@   Ú<module>   s   