Ë
    £èh¹X  ã                  óÊ  — d dl mZ d dlmZmZmZmZ d dlZd dlZd dl	Z	d dl
mZmZmZ d dl
mZmZmZ d dlZd dlZd dlmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZm Z m!Z! d dl"m#Z#m$Z$m%Z%m&Z& d dl'm(Z( d dl)m*Z* d dl+m,Z,m-Z- d dl.m/Z/ d dl0m1Z1  G d„ dejd                  «      Z3 G d„ d«      Z4 G d„ de3«      Z5 G d„ dejl                  «      Z7 G d„ dejp                  «      Z9ddd„Z:y)é    )Úannotations)ÚIterableÚSequenceÚSetÚOptionalN)Ú	QtWidgetsÚQtCoreÚQtGui)ÚSlotÚQActionÚSignal)Úrecover)Úodafc)ÚFrontendÚRenderContext)ÚConfiguration)Úis_dark_colorÚset_layers_stateÚLayerProperties)Ú_get_x_scaleÚPyQtBackendÚCorrespondingDXFEntityÚCorrespondingDXFParentStack)ÚAuditor)ÚDrawing)Ú
DXFGraphicÚ	DXFEntity)ÚLayout)ÚDXFStructureErrorc                  ó–   ‡ — e Zd Z e«       Zddddœ	 	 	 	 	 dˆ fd„Zdˆ fd„Zd„ Zd„ Zdd„Z	d	„ Z
d
„ Zdd„Zdd„Zdd„Zdd„Zdd„Zˆ xZS )ÚCADGraphicsViewgš™™™™™É?T)Úview_bufferÚzoom_per_scroll_notchÚloading_overlayc               ó˜  •— t         ‰| �  «        d| _        d| _        d| _        || _        || _        || _        d| _        | j                  t        j                  j                  «       | j                  t        j                  j                  «       | j                  t        j                   j"                  «       | j%                  t        j                   j"                  «       | j'                  t        j                  j(                  «       | j+                  t        j,                  j.                  «       | j1                  t2        j4                  j6                  t2        j4                  j8                  z  t2        j4                  j:                  z  «       | j=                  t        j>                  «       «       | jA                  dd«       y )Nç      ð?)g      à?éd   Fé   éÿÿÿÿ)!ÚsuperÚ__init__Ú_zoomÚ_default_zoomÚ_zoom_limitsÚ_zoom_per_scroll_notchÚ_view_bufferÚ_loading_overlayÚ_is_loadingÚsetTransformationAnchorÚqwÚQGraphicsViewÚAnchorUnderMouseÚsetResizeAnchorÚsetVerticalScrollBarPolicyÚqcÚQtÚScrollBarAlwaysOffÚsetHorizontalScrollBarPolicyÚsetDragModeÚScrollHandDragÚsetFrameShapeÚQFrameÚNoFrameÚsetRenderHintsÚqgÚQPainterÚAntialiasingÚTextAntialiasingÚSmoothPixmapTransformÚsetSceneÚQGraphicsSceneÚscale)Úselfr"   r#   r$   Ú	__class__s       €ú=lib/python3.12/site-packages/ezdxf/addons/drawing/qtviewer.pyr+   zCADGraphicsView.__init__*   sA  ø€ ô 	‰ÑÔØˆŒ
Ø ˆÔØ&ˆÔØ&;ˆÔ#Ø'ˆÔØ /ˆÔØ ˆÔà×$Ñ$¤R×%5Ñ%5×%FÑ%FÔGØ×ÑœR×-Ñ-×>Ñ>Ô?Ø×'Ñ'¬¯©×(@Ñ(@ÔAØ×)Ñ)¬"¯%©%×*BÑ*BÔCØ×Ñœ×)Ñ)×8Ñ8Ô9Ø×Ñœ2Ÿ9™9×,Ñ,Ô-Ø×ÑÜ�K‰K×$Ñ$Ü�k‰k×*Ñ*ñ+ä�k‰k×/Ñ/ñ0ô	
ð 	�‰”b×'Ñ'Ó)Ô*Ø�
‰
�1�bÕó    c                óX   •— t         ‰| �  |«       | j                  j                  «        y ©N)r*   Ú
closeEventÚclosingÚemit©rK   ÚeventrL   s     €rM   rQ   zCADGraphicsView.closeEventI   s    ø€ Ü‰Ñ˜5Ô!Ø�‰×ÑÕrN   c                 ó   — y rP   © ©rK   s    rM   ÚclearzCADGraphicsView.clearM   s   € ØrN   c                óâ   — d| _         | j                  «       j                  t        j                  «       t
        j                  j                  «       t
        j                  j                  «        y )NT)
r2   ÚsceneÚ
invalidater9   ÚQRectFr4   rI   Ú	AllLayersÚQApplicationÚprocessEventsrX   s    rM   Úbegin_loadingzCADGraphicsView.begin_loadingP   sB   € ØˆÔØ�
‰
‹×Ñ¤§	¡	£¬R×->Ñ->×-HÑ-HÔIÜ
�‰×%Ñ%Õ'rN   c                óè   — | j                  |«       d| _        | j                  «        | j                  «       j	                  t        j                  «       t        j                  j                  «       y )NF)
rH   r2   Úbuffer_scene_rectr[   r\   r9   r]   r4   rI   r^   )rK   Ú	new_scenes     rM   Úend_loadingzCADGraphicsView.end_loadingU   sJ   € Ø�‰�iÔ Ø ˆÔØ×ÑÔ Ø�
‰
‹×Ñ¤§	¡	£¬R×->Ñ->×-HÑ-HÕIrN   c                ó  — | j                  «       }|j                  «       }|j                  «       | j                  z  dz  |j	                  «       | j                  z  dz  }}|j                  |j                  | | ||«      «       y )Né   )r[   Ú	sceneRectÚwidthr0   ÚheightÚsetSceneRectÚadjusted)rK   r[   ÚrÚbxÚbys        rM   rc   z!CADGraphicsView.buffer_scene_rect[   su   € Ø—
‘
“ˆØ�O‰OÓˆà�G‰G‹I˜×)Ñ)Ñ)¨AÑ-Ø�H‰H‹J˜×*Ñ*Ñ*¨QÑ.ð ˆð 	×Ñ˜1Ÿ:™: r c¨B¨3°°BÓ7Õ8rN   c                ó¾   — | j                  | j                  «       t        j                  j                  «       t        | j                  «       «      | _        d| _        y ©Nr(   )	Ú	fitInViewrh   r9   r:   ÚKeepAspectRatior   Ú	transformr-   r,   rX   s    rM   Úfit_to_scenezCADGraphicsView.fit_to_scened   s<   € Ø�‰�t—~‘~Ó'¬¯©×)>Ñ)>Ô?Ü)¨$¯.©.Ó*:Ó;ˆÔØˆ�
rN   c                óN   — t        | j                  «       «      | j                  z  S rP   )r   rt   r-   rX   s    rM   Ú_get_zoom_amountz CADGraphicsView._get_zoom_amounti   s   € Ü˜DŸN™NÓ,Ó-°×0BÑ0BÑBÐBrN   c                óÔ  — |j                  «       j                  «       dz  }t        j                  d|«      }d| j                  |z  z   t        |«      z  }| j                  |z  }|| j                  d   k  r| j                  d   | j                  z  }n.|| j                  d   kD  r| j                  d   | j                  z  }| j                  ||«       | xj                  |z  c_        y )Néx   r(   r&   r   )	Ú
angleDeltaÚyÚmathÚcopysignr/   Úabsr,   r.   rJ   )rK   rU   Údelta_notchesÚ	directionÚfactorÚresulting_zooms         rM   Ú
wheelEventzCADGraphicsView.wheelEventl   sÑ   € ð ×(Ñ(Ó*×,Ñ,Ó.°Ñ4ˆÜ—M‘M ! ]Ó3ˆ	Ø˜×3Ñ3°iÑ?Ñ?ÄCÈÓDVÑVˆØŸ™ fÑ,ˆØ˜D×-Ñ-¨aÑ0Ò0Ø×&Ñ& qÑ)¨D¯J©JÑ6‰FØ˜d×/Ñ/°Ñ2Ò2Ø×&Ñ& qÑ)¨D¯J©JÑ6ˆFØ�
‰
�6˜6Ô"Ø�
Š
�fÑŽ
rN   c                óÔ   — t        | j                  «       | j                  | j                  | j	                  «       j                  «       | j                  «       j                  «       «      S rP   )Ú	SavedViewrt   r-   r,   ÚhorizontalScrollBarÚvalueÚverticalScrollBarrX   s    rM   Ú	save_viewzCADGraphicsView.save_viewz   sS   € ÜØ�N‰NÓØ×ÑØ�J‰JØ×$Ñ$Ó&×,Ñ,Ó.Ø×"Ñ"Ó$×*Ñ*Ó,ó
ð 	
rN   c                ó"  — | j                  |j                  «       |j                  | _        |j                  | _        | j                  «       j                  |j                  «       | j                  «       j                  |j                  «       y rP   )ÚsetTransformrt   Údefault_zoomr-   Úzoomr,   r†   ÚsetValueÚxrˆ   r{   )rK   Úviews     rM   Úrestore_viewzCADGraphicsView.restore_viewƒ   sc   € Ø×Ñ˜$Ÿ.™.Ô)Ø!×.Ñ.ˆÔØ—Y‘YˆŒ
Ø× Ñ Ó"×+Ñ+¨D¯F©FÔ3Ø×ÑÓ ×)Ñ)¨$¯&©&Õ1rN   c                ó  — | j                   rô| j                  rç|j                  «        |j                  |t	        j
                  d«      «       |j                  d«       | j                  «       j                  «       }|j                  t        j                  j                  «       |j                  t        j                  j                  «       |j                  |j!                  «       d«       |j#                  «        y y y )Nz	#aa000000Fz
Loading...)r2   r1   ÚsaveÚfillRectrC   ÚQColorÚsetWorldMatrixEnabledÚviewportÚrectÚsetBrushr9   r:   ÚNoBrushÚsetPenÚwhiteÚdrawTextÚcenterÚrestore)rK   Úpainterr˜   rm   s       rM   ÚdrawForegroundzCADGraphicsView.drawForegroundŠ   s©   € Ø×Ò × 5Ò 5Ø�L‰LŒNØ×Ñ˜T¤2§9¡9¨[Ó#9Ô:Ø×)Ñ)¨%Ô0Ø—‘“×$Ñ$Ó&ˆAØ×ÑœRŸU™UŸ]™]Ô+Ø�N‰Nœ2Ÿ5™5Ÿ;™;Ô'Ø×Ñ˜QŸX™X›Z¨Ô6Ø�O‰OÕð !6ÐrN   )r"   Úfloatr#   r¢   r$   Úbool)rU   zqg.QCloseEventÚreturnÚNone)rd   zqw.QGraphicsScene)r¤   r¢   )rU   zqg.QWheelEventr¤   r¥   )r¤   r…   )r�   r…   ©r    zqg.QPainterr˜   z	qc.QRectFr¤   r¥   )Ú__name__Ú
__module__Ú__qualname__r   rR   r+   rQ   rY   ra   re   rc   ru   rw   rƒ   r‰   r‘   r¡   Ú__classcell__©rL   s   @rM   r!   r!   '   sq   ø„ Ù‹h€Gð
 !Ø'*Ø $ñð ðð  %ð	ð
 õõ>òò(ó
Jò9òó
Cóó
ó2÷	rN   r!   c                  ó(   — e Zd Z	 	 	 	 	 	 	 	 	 	 dd„Zy)r…   c                óJ   — || _         || _        || _        || _        || _        y rP   )rt   rŒ   r�   r�   r{   )rK   rt   rŒ   r�   r�   r{   s         rM   r+   zSavedView.__init__—   s(   € ð #ˆŒØ(ˆÔØˆŒ	ØˆŒØˆ�rN   N)
rt   zqg.QTransformrŒ   r¢   r�   r¢   r�   Úintr{   r®   )r§   r¨   r©   r+   rW   rN   rM   r…   r…   –   s/   „ ðØ&ðØ6;ðØCHðØMPðØUXôrN   r…   c                  óª   ‡ — e Zd Z eej
                  «      Z eee«      Z	ˆ fd„Z
ed
d„«       Zˆ fd„Zˆ fd„Zdˆ fd„Zdˆ fd„Zdˆ fd„Zd„ Zd	„ Zˆ xZS )ÚCADGraphicsViewWithOverlayc                óN   •— t        ‰| �  di |¤Ž g | _        d | _        d| _        y )NTrW   )r*   r+   Ú_selected_itemsÚ_selected_indexÚ_mark_selection)rK   ÚkwargsrL   s     €rM   r+   z#CADGraphicsViewWithOverlay.__init__¥   s+   ø€ Ü‰ÑÑ"˜6Ò"Ø79ˆÔØ#ˆÔØ#ˆÕrN   c                ó|   — | j                   r0| j                   | j                     }|j                  t        «      }|S y rP   )r²   r³   Údatar   )rK   Úgraphics_itemÚ
dxf_entitys      rM   Úcurrent_hovered_elementz2CADGraphicsViewWithOverlay.current_hovered_element«   s;   € à×ÒØ ×0Ñ0°×1EÑ1EÑFˆMØ&×+Ñ+Ô,BÓCˆJØÐàrN   c                ó>   •— t         ‰| �  «        d | _        d | _        y rP   )r*   rY   r²   r³   ©rK   rL   s    €rM   rY   z CADGraphicsViewWithOverlay.clear´   s   ø€ Ü‰‰ŒØ#ˆÔØ#ˆÕrN   c                óB   •— | j                  «        t        ‰| �	  «        y rP   )rY   r*   ra   r¼   s    €rM   ra   z(CADGraphicsViewWithOverlay.begin_loading¹   s   ø€ Ø�
‰
ŒÜ‰ÑÕrN   c           	     ó6  •— t         ‰| �  ||«       | j                  r|| j                  ro| j                  | j                     }|j                  «       j                  |j                  «       «      }|j                  |t        j                  dddd«      «       y y y )Nr   éÿ   r'   )r*   r¡   r²   r´   r³   ÚsceneTransformÚmapRectÚboundingRectr”   rC   r•   )rK   r    r˜   Úitemrm   rL   s        €rM   r¡   z)CADGraphicsViewWithOverlay.drawForeground½   s‚   ø€ Ü‰Ñ˜w¨Ô-Ø×Ò D×$8Ò$8Ø×'Ñ'¨×(<Ñ(<Ñ=ˆDØ×#Ñ#Ó%×-Ñ-¨d×.?Ñ.?Ó.AÓBˆAØ×Ñ˜Q¤§	¡	¨!¨S°!°SÓ 9Õ:ð %9ÐrN   c                óN  •— t         ‰| �  |«       | j                  |j                  «       «      }| j                  j                  |«       | j                  «       j                  |«      }|| j                  k7  r-|| _        | j                  rdnd | _	        | j                  «        y y )Nr   )r*   ÚmouseMoveEventÚ
mapToSceneÚposÚmouse_movedrS   r[   Úitemsr²   r³   Ú_emit_selected)rK   rU   rÇ   Úselected_itemsrL   s       €rM   rÅ   z)CADGraphicsViewWithOverlay.mouseMoveEventÄ   s‡   ø€ Ü‰Ñ˜uÔ%Ø�o‰o˜eŸi™i›kÓ*ˆØ×Ñ×Ñ˜cÔ"ØŸ™›×+Ñ+¨CÓ0ˆØ˜T×1Ñ1Ò1Ø#1ˆDÔ Ø(,×(<Ò(<¡1À$ˆDÔ Ø×ÑÕ!ð 2rN   c                ó
  •— t         ‰| �  |«       |j                  «       t        j                  j
                  k(  rH| j                  r;| j                  dz   t        | j                  «      z  | _        | j                  «        y y y rq   )
r*   ÚmouseReleaseEventÚbuttonr9   r:   Ú
LeftButtonr²   r³   ÚlenrÊ   rT   s     €rM   rÍ   z,CADGraphicsViewWithOverlay.mouseReleaseEventÎ   sp   ø€ Ü‰Ñ! %Ô(Ø�<‰<‹>œRŸU™U×-Ñ-Ò-°$×2FÒ2FØ$(×$8Ñ$8¸1Ñ$<ÄØ×$Ñ$óAñ $ˆDÔ ð ×ÑÕ!ð	 3GÐ-rN   c                óð   — | j                   j                  | j                  | j                  «       | j	                  «       j                  | j                  «       t        j                  j                  «       y rP   )
Úelement_hoveredrS   r²   r³   r[   r\   rh   r4   rI   ÚForegroundLayerrX   s    rM   rÊ   z)CADGraphicsViewWithOverlay._emit_selectedÖ   sM   € Ø×Ñ×!Ñ! $×"6Ñ"6¸×8LÑ8LÔMØ�
‰
‹×Ñ §¡Ó 0´"×2CÑ2C×2SÑ2SÕTrN   c                ó(   — | j                    | _         y rP   )r´   rX   s    rM   Útoggle_selection_markerz2CADGraphicsViewWithOverlay.toggle_selection_markerÚ   s   € Ø#'×#7Ñ#7Ð7ˆÕrN   )r¤   zOptional[DXFEntity]r¦   )rU   zqg.QMouseEventr¤   r¥   )r§   r¨   r©   r   r9   ÚQPointFrÈ   Úobjectr®   rÒ   r+   Úpropertyrº   rY   ra   r¡   rÅ   rÍ   rÊ   rÕ   rª   r«   s   @rM   r°   r°   ¡   sZ   ø„ Ù˜Ÿ™Ó$€KÙ˜V SÓ)€Oô$ð òó ðô$ô
 õ;õ"õ"òUö8rN   r°   c                  óÈ   ‡ — e Zd Z e«       fdˆ fd„Zd„ Zedd„«       Zedd„«       Zedd„«       Z	edd„«       Z
ddd	œ	 	 	 	 	 dd
„Zdd„Zdd„Z	 d	 	 	 dd„Zdd„Zdd„Zˆ xZS )Ú	CADWidgetc                óÞ  •— t         ‰| �  «        t        j                  «       }|j	                  dddd«       |j                  |«       | j                  |«       || _        | j                  j                  j                  | j                  «       || _        t        j                  j                  «       | _        d | _        d | _        t%        «       | _        d| _        | j+                  «        y )Nr   ÚModel)r*   r+   r4   ÚQVBoxLayoutÚsetContentsMarginsÚ	addWidgetÚ	setLayoutÚ_viewrR   ÚconnectÚcloseÚ_configÚezdxfÚbboxÚCacheÚ_bbox_cacheÚ_docÚ_render_contextÚsetÚ_visible_layersÚ_current_layoutÚ_reset_backend)rK   r�   ÚconfigÚlayoutrL   s       €rM   r+   zCADWidget.__init__ß   s´   ø€ Ü‰ÑÔÜ—‘Ó!ˆØ×!Ñ! ! Q¨¨1Ô-Ø×Ñ˜ÔØ�‰�vÔØˆŒ
Ø�
‰
×Ñ×"Ñ" 4§:¡:Ô.ØˆŒÜ Ÿ:™:×+Ñ+Ó-ˆÔØ!ˆŒ	Ø.2ˆÔÜ),«ˆÔØ$+ˆÔØ×ÑÕrN   c                ó"   — t        «       | _        y rP   )r   Ú_backendrX   s    rM   rî   zCADWidget._reset_backendï   s   € ä#›ˆ�rN   c                ó   — | j                   S rP   )ré   rX   s    rM   ÚdoczCADWidget.docó   s   € à�y‰yÐrN   c                ó   — | j                   S rP   )rá   rX   s    rM   r�   zCADWidget.view÷   s   € à�z‰zÐrN   c                ó   — | j                   S rP   )rê   rX   s    rM   Úrender_contextzCADWidget.render_contextû   ó   € à×#Ñ#Ð#rN   c                ó   — | j                   S rP   )rí   rX   s    rM   Úcurrent_layoutzCADWidget.current_layoutÿ   rø   rN   rÜ   T©rð   Údrawc               óø   — || _         t        j                  j                  «       | _        | j                  |«      | _        | j                  «        t        «       | _	        d | _
        |r| j                  |«       y y rP   )ré   rå   ræ   rç   rè   Ú_make_render_contextrê   rî   rë   rì   rí   Údraw_layout)rK   Údocumentrð   rü   s       rM   Úset_documentzCADWidget.set_document  sg   € ð ˆŒ	ä Ÿ:™:×+Ñ+Ó-ˆÔØ#×8Ñ8¸ÓBˆÔØ×ÑÔÜ"›uˆÔØ#ˆÔÙØ×Ñ˜VÕ$ð rN   c                óL   — || _         | j                  | j                  d¬«       y )NF©Ú
reset_view)rì   rÿ   rí   )rK   Úlayerss     rM   Úset_visible_layerszCADWidget.set_visible_layers  s#   € Ø%ˆÔØ×Ñ˜×-Ñ-¸%ÐÕ@rN   c                óL   ‡ — dˆ fd„}t        |«      }|j                  |«       |S )Nc                óP   •— ‰j                   rt        | ‰j                   d¬«       y y )NT)Ústate)rì   r   )r  rK   s    €rM   Úupdate_layers_statez;CADWidget._make_render_context.<locals>.update_layers_state  s#   ø€ Ø×#Ò#Ü  ¨×)=Ñ)=ÀTÖJð $rN   )r  zSequence[LayerProperties])r   Úset_layer_properties_override)rK   rô   r
  r÷   s   `   rM   rþ   zCADWidget._make_render_context  s*   ø€ õ	Kô ' sÓ+ˆØ×4Ñ4Ð5HÔIØÐrN   c                óR  — || _         | j                  j                  «        t        j                  «       }| j
                  j                  |«       | j                  j                  |«      }| j                  |«       	 | j                  «       j                  |«       | j
                  j                  «        | j                  j                  |«       | j                  j                  «        |r| j                  j                  «        y y # | j
                  j                  «        w xY wrP   )rí   rá   ra   r4   rI   rò   Ú	set_sceneré   rð   Ú_update_render_contextÚ_create_frontendrÿ   Úfinalizere   rc   ru   )rK   Úlayout_namer  rd   rð   s        rM   rÿ   zCADWidget.draw_layout!  sØ   € ð
  +ˆÔØ�
‰
× Ñ Ô"Ü×%Ñ%Ó'ˆ	Ø�‰×Ñ 	Ô*Ø—‘×!Ñ! +Ó.ˆØ×#Ñ# FÔ+ð	%Ø×!Ñ!Ó#×/Ñ/°Ô7à�M‰M×"Ñ"Ô$Ø�
‰
×Ñ˜yÔ)Ø�
‰
×$Ñ$Ô&ÙØ�J‰J×#Ñ#Õ%ð øð �M‰M×"Ñ"Õ$ús   Á>D
 Ä
D&c                óp   — t        | j                  | j                  | j                  | j                  ¬«      S )N)ÚctxÚoutrï   Ú
bbox_cache)r   rê   rò   rä   rè   rX   s    rM   r  zCADWidget._create_frontend5  s/   € ÜØ×$Ñ$Ø—‘Ø—<‘<Ø×'Ñ'ô	
ð 	
rN   c                óV   — | j                   €J ‚| j                   j                  |«       y rP   )rê   Úset_current_layout)rK   rð   s     rM   r  z CADWidget._update_render_context=  s(   € Ø×#Ñ#Ð/Ð/Ð/Ø×Ñ×/Ñ/°Õ7rN   )r�   r!   rï   r   )r¤   r   )r¤   r!   )r¤   r   )r¤   Ústr)r   r   rð   r  rü   r£   )r  zSet[str]r¤   r¥   )rô   r   r¤   r   ©T©r  r  r  r£   )r¤   r   )rð   r   r¤   r¥   )r§   r¨   r©   r   r+   rî   rØ   rô   r�   r÷   rú   r  r  rþ   rÿ   r  r  rª   r«   s   @rM   rÚ   rÚ   Þ   s¼   ø„ ÙFSÃoö ò &ð òó ðð òó ðð ò$ó ð$ð ò$ó ð$ð Øñ%àð%ð ð	%ð
 ó%ó"Aóð  ð&àð&ð ó&ó(
÷8rN   rÚ   c                  ó�  ‡ — e Zd Zddˆ fd„Zedd„«       Zd„ Zddd„Zd„ Zdddœ	 	 	 	 	 	 	 dd	„Z	d
„ Z
d„ Z	 d	 	 	 dd„Zd d„Zd!d„Z ee«      d"d„«       Z e«       d„ «       Z e«       d„ «       Z e«       d„ «       Z e«       d„ «       Z e«       d„ «       Z eej0                  «      d#d„«       Z eee«      d$d„«       Zd%d„Zˆ xZS )&Ú	CADViewerc                óÄ  •— t         ‰| �  «        d | _        |€#t        t	        «       t        «       ¬«      | _        n|| _        | j                  j                  | _        t        | j                  t        «      r^| j                  j                  j                  | j                  «       | j                  j                  j                  | j                  «       | j                  «       }t!        d| «      }|j"                  j                  | j$                  «       |j'                  |«       |j)                  d«      | _        t!        d| «      }|j"                  j                  | j,                  «       |j'                  |«       t!        d| «      }|j"                  j                  | j.                  «       |j'                  |«       |j)                  d«      | _        t!        d| «      }|j3                  t5        j6                  d«      «       |j"                  j                  | j8                  «       | j0                  j'                  |«       t!        d| «      | _        | j:                  j=                  d	«       | j:                  j?                  d	«       | j0                  j'                  | j:                  «       t!        d
| «      }|j=                  d	«       |j@                  j                  | jB                  «       | j0                  j'                  |«       tE        jF                  «       | _$        | jH                  jK                  d«       | jH                  jL                  j                  | jN                  «       d | _(        tS        jT                  tD        jV                  jX                  «      | _-        tS        j\                  «       | _/        | j^                  ja                  d«       | jZ                  jc                  | j^                  «       tS        jd                  «       }tS        jf                  «       }	|	ji                  dddd«       tS        jj                  «       | _6        | jl                  jo                  d	«       |	jc                  | jl                  «       tS        jp                  «       | _9        |	jc                  | jr                  «       |ju                  |	«       | jZ                  jc                  |«       tS        jT                  «       }
| jw                  |
«       |
jc                  | j                  «       |
jc                  | jZ                  «       |
jy                  dd«       |
jy                  dd	«       |
j{                  «       }|
j}                  t        d|z  dz  «      t        |dz  «      g«       | j�                  d«       | jƒ                  dd«       | j…                  «        y )N©rï   zSelect DocumentzSelect LayoutzToggle SidebarzToggle Entity MarkerÚReloadÚF5z	Keep ViewTÚWatché2   zNQListWidget {font-size: 12pt;} QCheckBox {font-size: 12pt; padding-left: 5px;}r   Fr(   é   é   z
CAD Vieweri@  i„  )Cr*   r+   ré   rÚ   r°   r   Ú_cadr�   rá   Ú
isinstancerÒ   râ   Ú_on_element_hoveredrÈ   Ú_on_mouse_movedÚmenuBarr   Ú	triggeredÚ_select_docÚ	addActionÚaddMenuÚselect_layout_menuÚ_toggle_sidebarÚ_toggle_selection_markerÚreload_menuÚsetShortcutrC   ÚQKeySequenceÚ_reloadÚkeep_view_actionÚsetCheckableÚ
setCheckedÚtoggledÚ_toggle_watchr9   ÚQTimerÚ_watch_timerÚsetIntervalÚtimeoutÚ_check_watchÚ_watch_mtimer4   Ú	QSplitterr:   ÚVerticalÚsidebarÚQListWidgetr  ÚsetStyleSheetrß   ÚQWidgetrÝ   rÞ   ÚQPlainTextEditÚselected_infoÚsetReadOnlyÚQLabelÚ	mouse_posrà   ÚsetCentralWidgetÚsetCollapsibleri   ÚsetSizesr®   ÚsetWindowTitleÚresizeÚshow)rK   ÚcadÚmenuÚselect_doc_actionÚtoggle_sidebar_actionÚtoggle_selection_marker_actionÚreload_actionÚwatch_actionÚinfo_containerÚinfo_layoutÚ	containerÚwrL   s               €rM   r+   zCADViewer.__init__C  s:  ø€ Ü‰ÑÔØ'+ˆŒ	Øˆ;Ü!Ô"<Ó">Ä}ÃÔWˆD�IàˆDŒIØ—Y‘Y—^‘^ˆŒ
ä�d—j‘jÔ"<Ô=Ø�J‰J×&Ñ&×.Ñ.¨t×/GÑ/GÔHØ�J‰J×"Ñ"×*Ñ*¨4×+?Ñ+?Ô@à�|‰|‹~ˆÜ#Ð$5°tÓ<ÐØ×#Ñ#×+Ñ+¨D×,<Ñ,<Ô=Ø�‰Ð(Ô)Ø"&§,¡,¨Ó"?ˆÔä 'Ð(8¸$Ó ?ÐØ×'Ñ'×/Ñ/°×0DÑ0DÔEØ�‰Ð,Ô-ä)0Ð1GÈÓ)NÐ&Ø&×0Ñ0×8Ñ8¸×9VÑ9VÔWØ�‰Ð5Ô6àŸ<™<¨Ó1ˆÔÜ ¨$Ó/ˆØ×!Ñ!¤"§/¡/°$Ó"7Ô8Ø×Ñ×'Ñ'¨¯©Ô5Ø×Ñ×"Ñ" =Ô1Ü '¨°TÓ :ˆÔØ×Ñ×*Ñ*¨4Ô0Ø×Ñ×(Ñ(¨Ô.Ø×Ñ×"Ñ" 4×#8Ñ#8Ô9Ü˜w¨Ó-ˆØ×!Ñ! $Ô'Ø×Ñ×$Ñ$ T×%7Ñ%7Ô8Ø×Ñ×"Ñ" <Ô0ÜŸI™I›KˆÔØ×Ñ×%Ñ% bÔ)Ø×Ñ×!Ñ!×)Ñ)¨$×*;Ñ*;Ô<Ø ˆÔä—|‘|¤B§E¡E§N¡NÓ3ˆŒÜ—n‘nÓ&ˆŒØ�‰×!Ñ!ð>ô	
ð 	�‰×Ñ˜tŸ{™{Ô+ÜŸ™›ˆÜ—n‘nÓ&ˆØ×&Ñ& q¨!¨Q°Ô2Ü×.Ñ.Ó0ˆÔØ×Ñ×&Ñ& tÔ,Ø×Ñ˜d×0Ñ0Ô1ÜŸ™›ˆŒØ×Ñ˜dŸn™nÔ-Ø× Ñ  Ô-Ø�‰×Ñ˜~Ô.ä—L‘L“Nˆ	Ø×Ñ˜iÔ(Ø×Ñ˜DŸI™IÔ&Ø×Ñ˜DŸL™LÔ)Ø× Ñ   EÔ*Ø× Ñ   DÔ)Ø�O‰OÓˆØ×ÑœC  A¡¨¡	›N¬C°°A±«JÐ7Ô8Ø×Ñ˜LÔ)Ø�‰�D˜#ÔØ�	‰	�rN   c                ó@   — t        t        t        «       | ¬«      ¬«      S )Nr  )rQ  )r  rÚ   r°   r  s    rM   Úfrom_configzCADViewer.from_configŽ  s   € äœYÔ'AÓ'CÈFÔSÔTÐTrN   c                óV   — t        «       | _        t        | j                  «      | _        y rP   )r°   rá   rÚ   r%  rX   s    rM   Ú_create_cad_widgetzCADViewer._create_cad_widget’  s   € Ü/Ó1ˆŒ
Ü˜dŸj™jÓ)ˆ�	rN   rÜ   c                ó�  — 	 t         j                  j                  |«      d   j                  «       dk(  r&t	        j
                  |«      }|j                  «       }n&	 t        j
                  |«      }|j                  «       }| j                  |||¬«       y # t        j                  $ r t        j
                  |«      \  }}Y ŒBw xY w# t        $ r4}t        j                  j                  | dt        |«      «       Y d }~y d }~wt         $ r:}t        j                  j                  | dd|› dt        |«      › �«       Y d }~y d }~ww xY w)Nr(   z.dwg©rð   zLoading ErrorúDXF Structure ErrorzInvalid DXF file "ú": )ÚosÚpathÚsplitextÚlowerr   ÚreadfileÚauditrå   ÚDXFErrorr   r  ÚIOErrorr4   ÚQMessageBoxÚcriticalr  r   )rK   re  rð   rô   ÚauditorÚes         rM   Ú	load_filezCADViewer.load_file–  s  € ð	Ü�w‰w×Ñ Ó% aÑ(×.Ñ.Ó0°FÒ:Ü—n‘n TÓ*�ØŸ)™)›+‘ð*ÜŸ.™.¨Ó.�Cð "Ÿi™i›k�GØ×Ñ˜c 7°6ÐÕ:øô	 —~‘~ò :Ü#*×#3Ñ#3°DÓ#9‘L�Cšð:ûô
 ò 	CÜ�N‰N×#Ñ# D¨/¼3¸q»6×BÑBûÜ ò 	Ü�N‰N×#Ñ#ØØ%Ø$ T F¨#¬c°!«f¨XÐ6÷ñ ûð	úsH   ‚AC ÁB Á1$C Â+CÃC ÃCÃC Ã	EÃ*C?Ã?EÄ0E Å Ec                óv   — t         j                  j                  | dd¬«      \  }}|r| j                  |«       y y )NzSelect CAD Documentz'CAD Documents (*.dxf *.DXF *.dwg *.DWG))ÚcaptionÚfilter)r4   ÚQFileDialogÚgetOpenFileNamerp  )rK   re  Ú_s      rM   r+  zCADViewer._select_doc¬  s>   € Ü—.‘.×0Ñ0ØØ)Ø<ð 1ó 
‰ˆˆañ
 Ø�N‰N˜4Õ ð rN   Trû   c          	     ó˜  — t        |j                  «      }|dkD  rkt        j                  j	                  | dd|› d|j
                  › d�«      }|t        j                  j                  k(  r|j                  |j                  «       y |j
                  r0	 t        j                  |j
                  «      j                  | _        nd | _        | j                  j                  |||¬«       || _        | j!                  «        | j#                  «        | j%                  dt'        |j
                  «      z   «       y # t        $ r
 d | _        Y Œw xY w)Nr   zFound DXF ErrorszFound z errors in file "z"
Load file anyway? rû   zCAD Viewer - )rÐ   Úerrorsr4   rl  ÚquestionÚfilenameÚNoÚprint_error_reportrd  ÚstatÚst_mtimer?  ÚOSErrorr%  r  ré   Ú_populate_layoutsÚ_populate_layer_listrN  r  )rK   r   rn  rð   rü   Úerror_countÚrets          rM   r  zCADViewer.set_documentµ  s   € ô ˜'Ÿ.™.Ó)ˆØ˜Š?Ü—.‘.×)Ñ)ØØ"Ø˜˜Ð%6°x×7HÑ7HÐ6Ið J%ð &óˆCð ”b—n‘n×'Ñ'Ò'Ø×*Ñ*¨7¯>©>Ô:Øà×Òð)Ü$&§G¡G¨H×,=Ñ,=Ó$>×$GÑ$G�Õ!ð !%ˆDÔØ�	‰	×Ñ˜x°¸TÐÔBØˆŒ	Ø×ÑÔ Ø×!Ñ!Ô#Ø×Ñ˜O¬c°(×2CÑ2CÓ.DÑDÕEøô ò )Ø$(�Ö!ð)ús   Â.D6 Ä6E	ÅE	c                óD  — | j                   j                  d«       | j                   j                  «        | j                  j                  j                   j                  «       D �]  }|j                  }t        j                  «       }| j                   j                  |«       t        j                  |«      }|j                  |j                  rt        j                  j                  nt        j                  j                   «       |j"                  j%                  | j&                  «       t)        |j*                  d«      rdnd}|j-                  d|› d|j*                  › �«       | j                   j/                  ||«       �Œ! | j                   j                  d«       y )NTgš™™™™™Ù?z#FFFFFFz#000000zcolor: z; background-color: F)r  ÚblockSignalsrY   r%  r÷   ÚvaluesÚlayerr4   ÚQListWidgetItemÚaddItemÚ	QCheckBoxÚsetCheckStateÚ
is_visibler9   r:   ÚCheckedÚ	UncheckedÚstateChangedrâ   Ú_layers_updatedr   ÚcolorrD  ÚsetItemWidget)rK   r‡  ÚnamerÃ   ÚcheckboxÚ
text_colors         rM   r�  zCADViewer._populate_layer_listÖ  s&  € Ø�‰× Ñ  Ô&Ø�‰×ÑÔØ—Y‘Y×-Ñ-×4Ñ4×;Ñ;×=ˆEØ—;‘;ˆDÜ×%Ñ%Ó'ˆDØ�K‰K×Ñ Ô%Ü—|‘| DÓ)ˆHØ×"Ñ"Ø!&×!1Ò!1”—‘—’´r·u±u·±ôð ×!Ñ!×)Ñ)¨$×*>Ñ*>Ô?Ü&3°E·K±KÀÔ&E™È9ˆJØ×"Ñ"Ø˜*˜Ð%9¸%¿+¹+¸ÐGôð �K‰K×%Ñ% d¨HÖ5ð >ð 	�‰× Ñ  Õ'rN   c                ó(  ‡ — dˆ fd„}‰ j                   j                  «        ‰ j                  j                  j	                  «       D ]J  }t        |‰ «      }|j                  j                   ||«      «       ‰ j                   j                  |«       ŒL y )Nc                ó   •‡ — ˆ ˆfd„}|S )Nc                 ó,   •— ‰j                  ‰ d¬«       y )NTr  )rÿ   )r“  rK   s   €€rM   Úrunz=CADViewer._populate_layouts.<locals>.draw_layout.<locals>.runë  s   ø€ Ø× Ñ  °$Ð Õ7rN   rW   )r“  r™  rK   s   ` €rM   rÿ   z0CADViewer._populate_layouts.<locals>.draw_layoutê  s   ù€ õ8ð ˆJrN   )r“  r  )	r.  rY   r%  rô   Úlayout_names_in_taborderr   r*  râ   r,  )rK   rÿ   r  Úactions   `   rM   r€  zCADViewer._populate_layoutsé  sq   ø€ õ	ð 	×Ñ×%Ñ%Ô'ØŸ9™9Ÿ=™=×AÑAÖCˆKÜ˜[¨$Ó/ˆFØ×Ñ×$Ñ$¡[°Ó%=Ô>Ø×#Ñ#×-Ñ-¨fÕ5ñ DrN   c                ó^  — t        d|› �«       	 t        j                  «       }| j                  j	                  ||¬«       t        j                  «       |z
  }t        d|d›d�«       y # t
        $ r:}t        j                  j                  | dd|› dt        |«      › �«       Y d }~y d }~ww xY w)	Nzdrawing r  ztook ú.4fz secondsrb  zAbort rendering of layout "rc  )
ÚprintÚtimeÚperf_counterr%  rÿ   r   r4   rl  rm  r  )rK   r  r  ÚstartÚdurationro  s         rM   rÿ   zCADViewer.draw_layoutö  s¤   € ô
 	�˜˜Ð&Ô'ð
	Ü×%Ñ%Ó'ˆEØ�I‰I×!Ñ! +¸*Ð!ÔEÜ×(Ñ(Ó*¨UÑ2ˆHÜ�E˜( 3˜ xÐ0Õ1øÜ ò 	Ü�N‰N×#Ñ#ØØ%Ø-¨k¨]¸#¼cÀ!»f¸XÐF÷ñ ûð	ús   �AA) Á)	B,Á20B'Â'B,c                ó8   — | j                   j                  «        y rP   )rá   ru   )rK   rU   s     rM   ÚresizeEventzCADViewer.resizeEvent  s   € Ø�
‰
×ÑÕ!rN   c              #  óÐ   K  — t        | j                  j                  «       «      D ]<  }| j                  j                  | j                  j	                  |«      «      }||f–— Œ> y ­wrP   )Úranger  ÚcountÚ
itemWidgetrÃ   )rK   ÚirÃ   s      rM   Ú_layer_checkboxeszCADViewer._layer_checkboxes  sN   è ø€ Ü�t—{‘{×(Ñ(Ó*Ö+ˆAØ—;‘;×)Ñ)¨$¯+©+×*:Ñ*:¸1Ó*=Ó>ˆDØ�T�'‹Mñ ,ùs   ‚A$A&c                ó   — t         j                  j                  «       t        j                  j
                  z  }|rK| j                  «       D ]8  \  }}|j                  d«       |j                  |«       |j                  d«       Œ: t        «       }| j                  «       D ]P  \  }}|j                  «       t        j                  j                  k(  sŒ2|j                  |j                  «       «       ŒR | j                  j                  |«       y )NTF)r4   r_   ÚkeyboardModifiersr9   r:   ÚShiftModifierrª  r…  r‹  rë   Ú
checkStater�  ÚaddÚtextr%  r  )rK   Ú
item_stateÚ
shift_heldr©  rÃ   Úvisible_layersr‡  s          rM   r�  zCADViewer._layers_updated  sÈ   € ä—_‘_×6Ñ6Ó8¼2¿5¹5×;NÑ;NÑNˆ
ÙØ×1Ñ1Ö3‘��4Ø×!Ñ! $Ô'Ø×"Ñ" :Ô.Ø×!Ñ! %Õ(ð 4ô
 ›ˆØ×.Ñ.Ö0‰HˆAˆuØ×ÑÓ!¤R§U¡U§]¡]Ó2Ø×"Ñ" 5§:¡:£<Õ0ð 1ð 	�	‰	×$Ñ$ ^Õ4rN   c                ól   — | j                   j                  | j                   j                  «        «       y rP   )rB  Ú	setHiddenÚisHiddenrX   s    rM   r/  zCADViewer._toggle_sidebar  s$   € à�‰×Ñ 4§<¡<×#8Ñ#8Ó#:Ð:Õ;rN   c                ó8   — | j                   j                  «        y rP   )rá   rÕ   rX   s    rM   r0  z"CADViewer._toggle_selection_marker#  s   € à�
‰
×*Ñ*Õ,rN   c                óª  — | j                   j                  �½| j                   j                  j                  rœ| j                  j	                  «       }|r| j
                  j                  «       nd }| j                  | j                   j                  j                  | j                   j                  ¬«       |r| j
                  j                  |«       y y y y )Nra  )
r%  rô   rz  r5  Ú	isCheckedrá   r‰   rp  rú   r‘   )rK   Ú	keep_viewr�   s      rM   r4  zCADViewer._reload'  s•   € à�9‰9�=‰=Ð$¨¯©¯©×)?Ò)?Ø×-Ñ-×7Ñ7Ó9ˆIÙ-6�4—:‘:×'Ñ'Ô)¸DˆDØ�N‰N˜4Ÿ9™9Ÿ=™=×1Ñ1¸$¿)¹)×:RÑ:RˆNÔSÙØ—
‘
×'Ñ'¨Õ-ð ð	 *@Ð$rN   c                ó¢   — | j                   j                  «       r| j                   j                  «        y | j                   j                  «        y rP   )r;  ÚisActiveÚstopr¡  rX   s    rM   r9  zCADViewer._toggle_watch0  s8   € à×Ñ×%Ñ%Ô'Ø×Ñ×"Ñ"Õ$à×Ñ×#Ñ#Õ%rN   c                ó.  — | j                   �| j                  j                  €y | j                  j                  j                  }|rA	 t	        j
                  |«      j                  }|| j                   k7  r| j                  «        y y y # t        $ r Y y w xY wrP   )	r?  r%  rô   rz  rd  r}  r~  r  r4  )rK   rz  Úmtimes      rM   r>  zCADViewer._check_watch7  s„   € à×ÑÐ$¨¯	©	¯©Ð(=ØØ—9‘9—=‘=×)Ñ)ˆÙðÜŸ™ Ó)×2Ñ2�ð ˜×)Ñ)Ò)Ø—‘•ð *ð øô ò Ùðús   ÁB Â	BÂBc                ó„   — | j                   j                  d|j                  «       d›d|j                  «       d›d�«       y )Nzmouse position: r�  z, Ú
)rJ  ÚsetTextr�   r{   )rK   rJ  s     rM   r(  zCADViewer._on_mouse_movedD  s8   € à�‰×ÑØ˜yŸ{™{›}¨SÐ1°°I·K±K³MÀ#Ð3FÀbÐIõ	
rN   c                óÚ  — |sd}nËd|dz   › dt        |«      › d�}||   }|j                  t        «      }t        |t        «      r| j                  |«      }|€|dz  }ns|d|› d|j                  j                  › d	�z  }|t        |«      z  }|j                  t        «      }|r.|d
z  }t        |«      D ]  }|d|› d�z  }|t        |d¬«      z  }Œ | j                  j                  |«       y )NzNo element selectedz
Selected: r(   z / z    (click to cycle)
zNo datazSelected Entity: z
Layer: z

DXF Attributes:
z

Parents:
ú- rÁ  z    )Úindent)rÐ   r·   r   r&  r  Úload_dxf_entityÚdxfr‡  Ú_entity_attribs_stringr   ÚreversedrG  ÚsetPlainText)rK   ÚelementsÚindexr°  Úelementr¹   Údxf_parent_stackÚentitys           rM   r'  zCADViewer._on_element_hoveredJ  s  € áØ(‰Dà ¨¡	˜{¨#¬c°(«m¨_Ð<RÐSˆDØ˜u‘oˆGØ29·,±,Ô?UÓ2VˆJÜ˜*¤cÔ*Ø!×1Ñ1°*Ó=�
ØÐ!Ø˜	Ñ!‘àØ'¨
 |ð 4Ø(Ÿn™n×2Ñ2Ð3Ð3HðJñ�ð Ô.¨zÓ:Ñ:�à#*§<¡<Ô0KÓ#LÐ Ù#Ø˜NÑ*�DÜ"*Ð+;Ö"<˜Ø " V H¨B Ñ/˜ØÔ 6°vÀfÔ MÑM™ð #=ð 	×Ñ×'Ñ'¨Õ-rN   c                óf   — | j                   �%| j                   j                  j                  |«      S y rP   )ré   ÚentitydbÚget)rK   Úentity_handles     rM   rÆ  zCADViewer.load_dxf_entitye  s*   € Ø�9‰9Ð Ø—9‘9×%Ñ%×)Ñ)¨-Ó8Ð8ØrN   rP   )rQ  zOptional[CADWidget])rï   r   r¤   r  )rÜ   )re  r  rð   r  )r   r   rn  r   rð   r  rü   r£   r  r  )rU   zqg.QResizeEventr¤   r¥   )r¤   z"Iterable[tuple[int, qw.QCheckBox]])r±  zqc.Qt.CheckState)rJ  z
qc.QPointF)rË  zlist[qw.QGraphicsItem]rÌ  r®   )rÓ  r  r¤   zDXFGraphic | None)r§   r¨   r©   r+   Ústaticmethodr]  r_  rp  r+  r  r�  r€  rÿ   r¤  rª  r   r®   r�  r/  r0  r4  r9  r>  r9   rÖ   r(  r×   r'  rÆ  rª   r«   s   @rM   r  r  B  s[  ø„ öIðV òUó ðUò*ôò,!ð ØñFàðFð ðFð
 ðFð óFòB(ò&6ð   ðàðð óó$"óñ
 
ˆ#ƒYò5ó ð5ñ 
ƒVñ<ó ð<ñ 
ƒVñ-ó ð-ñ 
ƒVñ.ó ð.ñ 
ƒVñ&ó ð&ñ 
ƒVñ
ó ð
ñ 
ˆ"�*‰*Óò
ó ð
ñ
 
ˆ&�#Óò.ó ð.÷4rN   r  c                ó†   — d}| j                   j                  «       j                  «       D ]  \  }}||› d|› d|› d�z  }Œ |S )NÚ rÄ  z: rÁ  )rÇ  Úall_existing_dxf_attribsrÉ   )r¹   rÅ  r°  Úkeyr‡   s        rM   rÈ  rÈ  k  sN   € Ø€DØ —n‘n×=Ñ=Ó?×EÑEÖG‰
ˆˆUØ�6�(˜"˜S˜E  E 7¨"Ð-Ñ-‰ð Hà€KrN   )rÖ  )r¹   r   rÅ  r  r¤   r  );Ú
__future__r   Útypingr   r   r   r   r|   rd  rŸ  Úezdxf.addons.xqtr   r4   r	   r9   r
   rC   r   r   r   rå   Ú
ezdxf.bboxr   Úezdxf.addonsr   Úezdxf.addons.drawingr   r   Úezdxf.addons.drawing.configr   Úezdxf.addons.drawing.propertiesr   r   r   Úezdxf.addons.drawing.pyqtr   r   r   r   Úezdxf.auditr   Úezdxf.documentr   Úezdxf.entitiesr   r   Úezdxf.layoutsr   Úezdxf.lldxf.constr   r5   r!   r…   r°   rE  rÚ   ÚQMainWindowr  rÈ  rW   rN   rM   Ú<module>rè     s³   ðõ
 #ß 4Ó 4Û Û 	Û ç GÑ Gß 2Ñ 2ã Û Ý Ý ß 8Ý 5÷ñ ÷
ó õ  Ý "ß 0Ý  Ý /ôl�b×&Ñ&ô l÷^ñ ô:8 ô :8ôza8�—
‘
ô a8ôHf�—‘ô fõR	rN   