Ë
    £èhëK  ã                  ó,  — d dl mZ d dlmZmZ d dlZd dlZd dlZd dlm	Z	 d dl
mZ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 d	dlmZmZmZ erd dlmZ dZ  G d„ dejB                  «      Z"dZ#dZ$g d¢Z% G d„ dejL                  «      Z'dd„Z(y)é    )Úannotations)ÚAnyÚTYPE_CHECKINGN)Úxplayer)Ú	QtWidgetsÚQtGuiÚQtCoreÚQMessageBox)ÚsvgÚlayoutÚpymupdfÚdxf)ÚCADGraphicsView)ÚPyQtPlaybackBackendé   )Úapi)ÚBoundingBox2dÚMatrix44Úcolors)ÚDrawingzHPGL/2 Viewerc                  ól   ‡ — e Zd Zdˆ fd„Zd	d„Zed
d„«       Zedd„«       Zdd„Z	 d	 	 	 dd„Z	d„ Z
ˆ xZS )ÚHPGL2Widgetc                ó|  •— t         ‰| �  «        t        j                  «       } |j                  dddd«        |j
                  |«       | j                  |«       || _        | j                  j                  j                  | j                  «       t        j                  g i «      | _        | j                  «        y )Nr   )ÚsuperÚ__init__r   ÚQVBoxLayoutÚsetContentsMarginsÚ	addWidgetÚ	setLayoutÚ_viewÚclosingÚconnectÚcloser   ÚPlayerÚ_playerÚ_reset_backend)ÚselfÚviewr   Ú	__class__s      €ú9lib/python3.12/site-packages/ezdxf/addons/hpgl2/viewer.pyr   zHPGL2Widget.__init__   s�   ø€ Ü‰ÑÔÜ×&Ñ&Ó(ˆØ!ˆ×!Ñ! ! Q¨¨1Ô-Øˆ×Ñ˜ÔØ�‰�vÔØˆŒ
Ø�
‰
×Ñ×"Ñ" 4§:¡:Ô.Ü#&§:¡:¨b°"Ó#5ˆŒØ×ÑÕó    c                ó"   — t        «       | _        y ©N)r   Ú_backend©r'   s    r*   r&   zHPGL2Widget._reset_backend%   s   € Ü+Ó-ˆ�r+   c                ó   — | j                   S r-   )r    r/   s    r*   r(   zHPGL2Widget.view(   s   € à�z‰zÐr+   c                ó6   — | j                   j                  «       S r-   )r%   Úcopyr/   s    r*   ÚplayerzHPGL2Widget.player,   s   € à�|‰|× Ñ Ó"Ð"r+   c                óŠ   — | j                  «        t        j                  |t        j                  j                  «      | _        y r-   )r&   r   Úrecord_plotter_outputÚMergeControlÚAUTOr%   )r'   Údatas     r*   ÚplotzHPGL2Widget.plot0   s.   € Ø×ÑÔÜ×0Ñ0°´s×7GÑ7G×7LÑ7LÓMˆ�r+   c                óô  — | j                  «        | j                  j                  «        t        j                  «       }| j
                  j                  |«       |j                  | j                  |«      «       t        j                  | j                  | j
                  d|¬«       | j                  j                  |«       | j                  j                  «        |r| j                  j                  «        y y )NÚ ©Úbg_colorÚoverride)r&   r    Úbegin_loadingr   ÚQGraphicsScener.   Ú	set_sceneÚaddItemÚ	_bg_paperr   Úhpgl2_to_drawingr%   Úend_loadingÚbuffer_scene_rectÚfit_to_scene)r'   r=   r>   Ú
reset_viewÚ	new_scenes        r*   ÚreplayzHPGL2Widget.replay4   s²   € ð 	×ÑÔØ�
‰
× Ñ Ô"Ü×,Ñ,Ó.ˆ	Ø�‰×Ñ 	Ô*Ø×Ñ˜$Ÿ.™.¨Ó2Ô3ä× Ñ Ø�L‰L˜$Ÿ-™-°"¸xõ	
ð 	�
‰
×Ñ˜yÔ)Ø�
‰
×$Ñ$Ô&ÙØ�J‰J×#Ñ#Õ%ð r+   c                óX  — | j                   j                  «       }|j                  }|j                  }t	        j
                  |j                  |j                  |j                  |j                  «      }|j                  t        j                  t        j                  |«      «      «       |S r-   )r%   ÚbboxÚextminÚsizer   ÚQGraphicsRectItemÚxÚyÚsetBrushr   ÚQBrushÚQColor)r'   ÚcolorrL   ÚinsertrN   Úrects         r*   rC   zHPGL2Widget._bg_paperE   so   € Ø�|‰|× Ñ Ó"ˆØ—‘ˆØ�y‰yˆÜ×*Ñ*¨6¯8©8°V·X±X¸t¿v¹vÀtÇvÁvÓNˆØ�‰”e—l‘l¤5§<¡<°Ó#6Ó7Ô8Øˆr+   )r(   r   ÚreturnÚNone©rX   rY   )rX   r   )rX   z
api.Player)r8   ÚbytesrX   rY   )ú#ffffffNT)rH   ÚboolrX   rY   )Ú__name__Ú
__module__Ú__qualname__r   r&   Úpropertyr(   r3   r9   rJ   rC   Ú__classcell__©r)   s   @r*   r   r      s\   ø„ õ	ó.ð òó ðð ò#ó ð#óNð
 EIð&Ø=Að&à	ó&ö"r+   r   é   é`   )ÚDefaultzBlack on WhitezWhite on BlackzMonochrome LightzMonochrome DarkzBlueprint High ContrastzBlueprint Low Contrastc                  ó
  ‡ — e Zd Zd ˆ fd„Z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d*d„Zd*d„Zd*d„Zd„ Zd„ Zd+d„Zd+d„Z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d0d„Zd d„Z d1d„Z!ˆ xZ"S )2ÚHPGL2Viewerc                ón  •— t         ‰| �  «        t        t        «       «      | _        | j                  j
                  | _        t        j                  g i «      | _	        t        «       | _        d| _        d| _        t        j                  «       | _        t#        j$                  «       | _        t#        j$                  «       | _        t#        j$                  «       | _        t#        j,                  d«      | _        t#        j,                  t1        t2        «      «      | _        t#        j6                  d«      | _        | j8                  j;                  t<        j>                  j@                  jB                  «       | j8                  jD                  jG                  | jH                  «       t#        j6                  d«      | _%        | jJ                  j;                  t<        j>                  j@                  jB                  «       | jJ                  jD                  jG                  | jH                  «       t#        jL                  «       | _'        | jN                  jQ                  g d¢«       | jN                  jR                  jG                  | jT                  «       t#        jL                  «       | _+        | jV                  jQ                  tX        «       | jV                  jR                  jG                  | jZ                  «       t#        j6                  d«      | _.        | j\                  j;                  t<        j>                  j@                  jB                  «       t#        j^                  d«      | _0        | j`                  jb                  jG                  | jd                  «       t#        j^                  d«      | _3        | jf                  jb                  jG                  | jh                  «       t#        j^                  d	«      | _5        | jj                  jb                  jG                  | jl                  «       t#        j^                  d
«      | _7        | jn                  jb                  jG                  | jp                  «       | js                  d«       | j.                  jt                  jG                  | jv                  «       | j4                  jt                  jG                  | jv                  «       t#        jx                  «       } |jz                  dddd«       t#        j|                  «       }|j                  |«       | j�                  |«        |j‚                  | j                  «       | j…                  «       } |j‚                  |«       | j‡                  tˆ        «       | j‹                  dd«       | j�                  «        y )Nr   Ú1Ú
HorizontalÚVertical)Ú0Ú90Ú180Ú270zACI Export Modez
Export SVGz
Export PNGz
Export PDFz
Export DXFTi@  i„  )Gr   r   r   r   Ú_cadr(   r    r   r$   r%   r   Ú_bboxÚ_page_rotationÚ_color_schemeÚpathlibÚPathÚ_current_filer   ÚQLabelÚpage_size_labelÚpng_size_labelÚmessage_labelÚ	QLineEditÚscaling_factor_line_editÚstrÚDEFAULT_DPIÚdpi_line_editÚ	QCheckBoxÚflip_x_check_boxÚsetCheckStater	   ÚQtÚ
CheckStateÚ	UncheckedÚstateChangedr"   Úupdate_viewÚflip_y_check_boxÚ	QComboBoxÚrotation_combo_boxÚaddItemsÚcurrentIndexChangedÚupdate_rotationÚcolor_combo_boxÚCOLOR_SCHEMAÚupdate_colorsÚaci_export_modeÚQPushButtonÚexport_svg_buttonÚclickedÚ
export_svgÚexport_png_buttonÚ
export_pngÚexport_pdf_buttonÚ
export_pdfÚexport_dxf_buttonÚ
export_dxfÚdisable_export_buttonsÚeditingFinishedÚupdate_sidebarÚQHBoxLayoutr   ÚQWidgetr   ÚsetCentralWidgetr   Úmake_sidebarÚsetWindowTitleÚVIEWER_NAMEÚresizeÚshow)r'   r   Ú	containerÚsidebarr)   s       €r*   r   zHPGL2Viewer.__init__\   së  ø€ Ü‰ÑÔÜ¤Ó 1Ó2ˆŒ	Ø—Y‘Y—^‘^ˆŒ
Ü#&§:¡:¨b°"Ó#5ˆŒÜ$1£OˆŒ
ØˆÔØˆÔÜ$Ÿ\™\›^ˆÔä(×/Ñ/Ó1ˆÔÜ'×.Ñ.Ó0ˆÔÜ&×-Ñ-Ó/ˆÔÜ(1×(;Ñ(;¸CÓ(@ˆÔ%Ü&×0Ñ0´´[Ó1AÓBˆÔä )× 3Ñ 3°LÓ AˆÔØ×Ñ×+Ñ+¬F¯I©I×,@Ñ,@×,JÑ,JÔKØ×Ñ×*Ñ*×2Ñ2°4×3CÑ3CÔDä )× 3Ñ 3°JÓ ?ˆÔØ×Ñ×+Ñ+¬F¯I©I×,@Ñ,@×,JÑ,JÔKØ×Ñ×*Ñ*×2Ñ2°4×3CÑ3CÔDä"+×"5Ñ"5Ó"7ˆÔØ×Ñ×(Ñ(Ò)BÔCØ×Ñ×3Ñ3×;Ñ;¸D×<PÑ<PÔQä(×2Ñ2Ó4ˆÔØ×Ñ×%Ñ%¤lÔ3Ø×Ñ×0Ñ0×8Ñ8¸×9KÑ9KÔLä(×2Ñ2Ð3DÓEˆÔØ×Ñ×*Ñ*¬6¯9©9×+?Ñ+?×+IÑ+IÔJä!*×!6Ñ!6°|Ó!DˆÔØ×Ñ×&Ñ&×.Ñ.¨t¯©Ô?Ü!*×!6Ñ!6°|Ó!DˆÔØ×Ñ×&Ñ&×.Ñ.¨t¯©Ô?Ü!*×!6Ñ!6°|Ó!DˆÔØ×Ñ×&Ñ&×.Ñ.¨t¯©Ô?Ü!*×!6Ñ!6°|Ó!DˆÔØ×Ñ×&Ñ&×.Ñ.¨t¯©Ô?Ø×#Ñ# DÔ)à×%Ñ%×5Ñ5×=Ñ=¸d×>QÑ>QÔRØ×Ñ×*Ñ*×2Ñ2°4×3FÑ3FÔGä×&Ñ&Ó(ˆØ!ˆ×!Ñ! ! Q¨¨1Ô-ä×%Ñ%Ó'ˆ	Ø×Ñ˜FÔ#Ø×Ñ˜iÔ(àˆ×Ñ˜Ÿ™Ô#Ø×#Ñ#Ó%ˆØˆ×Ñ˜Ô!Ø×ÑœKÔ(Ø�‰�D˜#ÔØ�	‰	�r+   c                óâ  — | j                   j                  d«       | j                  j                  t        t        «      «       | j
                  j                  t        j                  j                  j                  «       | j                  j                  t        j                  j                  j                  «       | j                  j                  d«       d| _        | j                  «        y )Nrj   r   )r}   ÚsetTextr€   r~   r   r‚   rƒ   r	   r„   r…   r†   r‰   r‹   ÚsetCurrentIndexrs   rˆ   r/   s    r*   Úreset_valueszHPGL2Viewer.reset_valuesš   sŸ   € Ø×%Ñ%×-Ñ-¨cÔ2Ø×Ñ×"Ñ"¤3¤{Ó#3Ô4Ø×Ñ×+Ñ+¬F¯I©I×,@Ñ,@×,JÑ,JÔKØ×Ñ×+Ñ+¬F¯I©I×,@Ñ,@×,JÑ,JÔKØ×Ñ×/Ñ/°Ô2ØˆÔØ×ÑÕr+   c                ó	  — t        j                  «       }t        j                  «       }|j                  t        dz  dt        dz  d«       |j                  |«       t        j                  «       }|j                  t         j                  j                  j                  «       |j                  |«       t        j                  d«      }|j                  j                  | j                  «       |j                  |«       |j                  | j                   «       t        j"                  «       }|j                  t        j$                  d«      «       |j                  | j&                  «       |j)                  |«       t        j"                  «       }|j                  t        j$                  d«      «       |j                  | j*                  «       |j)                  |«       t        j,                  d«      }t        j"                  «       }|j                  | j.                  «       |j                  | j0                  «       |j                  |«       |j                  |«       t        j"                  «       }|j                  t        j$                  d«      «       |j                  | j2                  «       |j)                  |«       |j5                  t        «       t        j"                  «       }|j                  t        j$                  d«      «       |j                  | j6                  «       |j)                  |«       |j                  | j8                  «       |j                  | j:                  «       |j                  | j<                  «       |j                  | j>                  «       |j5                  t        «       |j                  | j@                  «       |j                  | jB                  «       |j5                  t        «       t        j                  d	«      }|j                  j                  | jD                  «       |j                  |«       |j5                  t        «       |j                  | jF                  «       |S )
Né   r   zOpen HPGL/2 FilezScaling Factor:zPage Rotation:zMirror PagezColors:zDPI (PNG only):ÚReset)$r   r¡   r   r   ÚSPACINGr   ÚQSizePolicyÚsetHorizontalPolicyÚPolicyÚFixedÚsetSizePolicyr“   r•   r"   Úselect_plot_filer   ry   r    rx   r}   Ú	addLayoutr‹   Ú	QGroupBoxr‚   r‰   r�   Ú
addSpacingr€   rz   r—   r”   r™   r’   r›   r­   r{   )r'   r©   Úv_layoutÚpolicyÚopen_buttonÚh_layoutÚgroupÚreset_buttons           r*   r£   zHPGL2Viewer.make_sidebar£   sY  € Ü×#Ñ#Ó%ˆÜ×(Ñ(Ó*ˆØ×#Ñ#¤G¨q¡L°!´WÀ±\À1ÔEØ×Ñ˜(Ô#ä×&Ñ&Ó(ˆØ×"Ñ"¤9×#8Ñ#8×#?Ñ#?×#EÑ#EÔFØ×Ñ˜fÔ%ä×+Ñ+Ð,>Ó?ˆØ×Ñ×#Ñ# D×$9Ñ$9Ô:Ø×Ñ˜;Ô'Ø×Ñ˜4×/Ñ/Ô0Ü×(Ñ(Ó*ˆØ×Ñœ9×+Ñ+Ð,=Ó>Ô?Ø×Ñ˜4×8Ñ8Ô9Ø×Ñ˜8Ô$ä×(Ñ(Ó*ˆØ×Ñœ9×+Ñ+Ð,<Ó=Ô>Ø×Ñ˜4×2Ñ2Ô3Ø×Ñ˜8Ô$ä×#Ñ# MÓ2ˆÜ×(Ñ(Ó*ˆØ×Ñ˜4×0Ñ0Ô1Ø×Ñ˜4×0Ñ0Ô1Ø�‰˜Ô!Ø×Ñ˜5Ô!ä×(Ñ(Ó*ˆØ×Ñœ9×+Ñ+¨IÓ6Ô7Ø×Ñ˜4×/Ñ/Ô0Ø×Ñ˜8Ô$à×ÑœGÔ$ä×(Ñ(Ó*ˆØ×Ñœ9×+Ñ+Ð,=Ó>Ô?Ø×Ñ˜4×-Ñ-Ô.Ø×Ñ˜8Ô$Ø×Ñ˜4×.Ñ.Ô/à×Ñ˜4×1Ñ1Ô2Ø×Ñ˜4×1Ñ1Ô2Ø×Ñ˜4×1Ñ1Ô2à×ÑœGÔ$à×Ñ˜4×/Ñ/Ô0Ø×Ñ˜4×1Ñ1Ô2à×ÑœGÔ$ä ×,Ñ,¨WÓ5ˆØ×Ñ×$Ñ$ T×%6Ñ%6Ô7Ø×Ñ˜<Ô(à×ÑœGÔ$à×Ñ˜4×-Ñ-Ô.Øˆr+   c                ó€  — | j                   j                  |«       | j                  j                  |«       t        j                  r7| j
                  j                  |«       | j                  j                  |«       y t        d«       | j
                  j                  d«       | j                  j                  d«       y )Nz,PDF/PNG export requires the PyMuPdf package!T)r”   ÚsetDisabledr›   r   Úis_pymupdf_installedr—   r™   Úprint)r'   Údisableds     r*   r�   z"HPGL2Viewer.disable_export_buttonsã   sŒ   € Ø×Ñ×*Ñ*¨8Ô4Ø×Ñ×*Ñ*¨8Ô4Ü×'Ò'Ø×"Ñ"×.Ñ.¨xÔ8Ø×"Ñ"×.Ñ.¨xÕ8äÐ@ÔAØ×"Ñ"×.Ñ.¨tÔ4Ø×"Ñ"×.Ñ.¨tÕ4r+   c                ó  — 	 t        |d«      5 }|j                  «       }d d d «       |rdz   }| j                  |«       y # 1 sw Y   Œ#xY w# t        $ r4}t        j
                  j                  | dt        |«      «       Y d }~y d }~ww xY w)NÚrbs   %1BzLoading Error)ÚopenÚreadÚset_plot_dataÚIOErrorr   r
   Úcriticalr~   )r'   ÚpathÚforceÚfpr8   Úes         r*   Úload_plot_filezHPGL2Viewer.load_plot_fileî   s{   € ð	JÜ�d˜DÔ! RØ—w‘w“y�÷ "áØ ‘~�Ø×Ñ˜t TÕ*÷	 "Ð!ûô
 ò 	JÜ×!Ñ!×*Ñ*¨4°Ä#ÀaÃ&×IÑIûð	Jús-   ‚A ŽAŸ!A ÁA
ÁA Á	B
Á*BÂB
c                ó²   — t         j                  j                  | t        | j                  j
                  «      dd¬«      \  }}|r| j                  |«       y y )NzSelect HPGL/2 Plot FilezPlot Files (*.plt)©ÚdirÚcaptionÚfilter)r   ÚQFileDialogÚgetOpenFileNamer~   rw   ÚparentrÑ   )r'   rÍ   Ú_s      r*   r·   zHPGL2Viewer.select_plot_fileø   sV   € Ü×'Ñ'×7Ñ7ØÜ�D×&Ñ&×-Ñ-Ó.Ø-Ø'ð	 8ó 
‰ˆˆañ Ø×Ñ Õ%ð r+   c                óH  — 	 | j                   j                  |«       | j                   j                  | _	        | j                  j                  «       | _        t        j                  |«      | _        | j                  | j                   «       | j#                  «        | j%                  t&        › d�t	        |«      z   «       | j)                  d«       y # t        j                  $ r<}d|› dt	        |«      › �}t
        j                  j                  | d|«       Y d }~y d }~ww xY w)NzCannot plot HPGL/2 file 'z', z
Plot Errorz - F)rq   r9   r   Ú
Hpgl2Errorr~   r   r
   rÌ   r3   r%   rL   rr   ru   rv   rw   r‘   rt   rŸ   r¤   r¥   r�   )r'   r8   ÚfilenamerÐ   Úmsgs        r*   rÊ   zHPGL2Viewer.set_plot_data  sâ   € ð	Ø�I‰I�N‰N˜4Ô ð
 —y‘y×'Ñ'ˆŒØ—\‘\×&Ñ&Ó(ˆŒ
Ü$Ÿ\™\¨(Ó3ˆÔØ×Ñ˜4×-Ñ-Ô.Ø×ÑÔØ×Ñœ{˜m¨3Ð/´#°h³-Ñ?Ô@Ø×#Ñ# EÕ*øô �~‰~ò 	Ø-¨h¨Z°s¼3¸q»6¸(ÐCˆCÜ×!Ñ!×*Ñ*¨4°¸sÔCÜûð	ús   ‚C ÃD!Ã%2DÄD!c                ó8   — | j                   j                  «        y r-   )r    rG   )r'   Úevents     r*   ÚresizeEventzHPGL2Viewer.resizeEvent  s   € Ø�
‰
×ÑÕ!r+   c                óh   — 	 t        | j                  j                  «       «      S # t        $ r Y yw xY w)Ng      ð?)Úfloatr}   ÚtextÚ
ValueErrorr/   s    r*   Úget_scale_factorzHPGL2Viewer.get_scale_factor  s3   € ð	Ü˜×6Ñ6×;Ñ;Ó=Ó>Ð>øÜò 	Ùð	ús   ‚"% ¥	1°1c                ót   — 	 t        | j                  j                  «       «      S # t        $ r	 t        cY S w xY wr-   )Úintr€   rä   rå   r   r/   s    r*   Úget_dpizHPGL2Viewer.get_dpi  s6   € ð	Ü�t×)Ñ)×.Ñ.Ó0Ó1Ð1øÜò 	ÜÒð	ús   ‚"% ¥7¶7c                ó  — | j                  «       }d}d}| j                  j                  rL| j                  j                  }t	        |j
                  dz  |z  «      }t	        |j                  dz  |z  «      }| j                  dv r||}}||fS )Nr   é(   ©éZ   i  )ræ   rr   Úhas_datarN   ÚroundrP   rQ   rs   )r'   ÚfactorrP   rQ   rN   s        r*   Úget_page_sizezHPGL2Viewer.get_page_size   s‚   € Ø×&Ñ&Ó(ˆØˆØˆØ�:‰:×ÒØ—:‘:—?‘?ˆDä�d—f‘f˜r‘k FÑ*Ó+ˆAÜ�d—f‘f˜r‘k FÑ*Ó+ˆAØ×Ñ )Ñ+Ø�aˆqˆAØ�!ˆtˆr+   c                óŒ   — | j                  «       }| j                  «       \  }}t        |dz  |z  «      t        |dz  |z  «      fS )Ngffffff9@)ré   rñ   rï   )r'   ÚdpirP   rQ   s       r*   Úget_pixel_sizezHPGL2Viewer.get_pixel_size-  sD   € Ø�l‰l‹nˆØ×!Ñ!Ó#‰ˆˆ1Ü�Q˜‘X ‘^Ó$¤e¨A°©H°s©NÓ&;Ð;Ð;r+   c                ó€   — | j                   j                  «       t        j                  j                  j
                  k(  S r-   )r‚   Ú
checkStater	   r„   r…   ÚCheckedr/   s    r*   Ú
get_flip_xzHPGL2Viewer.get_flip_x2  ó,   € Ø×$Ñ$×/Ñ/Ó1´V·Y±Y×5IÑ5I×5QÑ5QÑQÐQr+   c                ó€   — | j                   j                  «       t        j                  j                  j
                  k(  S r-   )r‰   rö   r	   r„   r…   r÷   r/   s    r*   Ú
get_flip_yzHPGL2Viewer.get_flip_y5  rù   r+   c                ó€   — | j                   j                  «       t        j                  j                  j
                  k(  S r-   )r’   rö   r	   r„   r…   r÷   r/   s    r*   Úget_aci_export_modezHPGL2Viewer.get_aci_export_mode8  s,   € Ø×#Ñ#×.Ñ.Ó0´F·I±I×4HÑ4H×4PÑ4PÑPÐPr+   c                óø   — | j                  «       \  }}| j                  j                  d|› d|› d�«       | j                  «       \  }}| j                  j                  d|› d|› d�«       | j                  «        y )NzPage Size: rP   Úmmz
PNG Size: Úpx)rñ   ry   r«   rô   rz   Úclear_message)r'   rP   rQ   r   Úpys        r*   rŸ   zHPGL2Viewer.update_sidebar;  sx   € Ø×!Ñ!Ó#‰ˆˆ1Ø×Ñ×$Ñ$ {°1°#°Q°q°c¸Ð%<Ô=Ø×$Ñ$Ó&‰ˆˆBØ×Ñ×#Ñ# j°°°A°b°T¸Ð$<Ô=Ø×ÑÕr+   c                óª   — | j                   j                  | j                  «       «       | j                   j                  «        | j	                  «        y r-   )r    ÚsetTransformÚview_transformationrG   rŸ   r/   s    r*   rˆ   zHPGL2Viewer.update_viewB  s9   € Ø�
‰
×Ñ × 8Ñ 8Ó :Ô;Ø�
‰
×ÑÔ!Ø×ÑÕr+   c                ó\   — |dz  }|| j                   k7  r|| _         | j                  «        y y )Nrí   )rs   rˆ   )r'   ÚindexÚrotations      r*   rŽ   zHPGL2Viewer.update_rotationG  s2   € Ø˜2‘:ˆØ�t×*Ñ*Ò*Ø"*ˆDÔØ×ÑÕð +r+   c                óv   — || _          | j                  j                  t        |«      Ž  | j	                  «        y r-   )rt   rq   rJ   Úreplay_propertiesrˆ   )r'   r  s     r*   r‘   zHPGL2Viewer.update_colorsM  s0   € Ø"ˆÔØˆ�	‰	×ÑÔ+¨EÓ2Ñ3Ø×ÑÕr+   c                ó^  — | j                   dk(  rt        «       }n2t        j                  t        j                  | j                   «      «      }| j                  «       rdnd}| j                  «       rdnd}|t        j                  ||d«      z  }t        j                  |j                  «       Ž S )Nr   éÿÿÿÿr   )rs   r   Úz_rotateÚmathÚradiansrø   rû   Úscaler   Ú
QTransformÚget_2d_transformation)r'   ÚmÚsxÚsys       r*   r  zHPGL2Viewer.view_transformationR  s‡   € Ø×Ñ !Ò#Ü“
‰Aä×!Ñ!¤$§,¡,¨t×/BÑ/BÓ"CÓDˆAØ—?‘?Ô$‰R¨!ˆà—/‘/Ô#‰Q¨ˆØ	ŒX�^‰^˜B  AÓ&Ñ&ˆÜ×Ñ ×!8Ñ!8Ó!:Ð;Ð;r+   c                ó:   — | j                   j                  |«       y r-   ©r{   r«   )r'   rÞ   s     r*   Úshow_messagezHPGL2Viewer.show_message]  s   € Ø×Ñ×"Ñ" 3Õ'r+   c                ó:   — | j                   j                  d«       y )Nr;   r  r/   s    r*   r  zHPGL2Viewer.clear_message`  s   € Ø×Ñ×"Ñ" 2Õ&r+   c                óJ   — t        | j                  j                  |«      «      S r-   )r~   rw   Úwith_suffix)r'   Úsuffixs     r*   Úget_export_namezHPGL2Viewer.get_export_namec  s   € Ü�4×%Ñ%×1Ñ1°&Ó9Ó:Ð:r+   c                ó„  — t         j                  j                  | | j                  d«      dd¬«      \  }}|sy 	 t	        |d«      5 }|j                  | j                  «       «       d d d «       | j                  d«       y # 1 sw Y   ŒxY w# t        $ r*}t        j                  | dt        |«      «       Y d }~y d }~ww xY w)Nz.svgzSave SVG FilezSVG Files (*.svg)rÓ   ÚwtzSVG successfully exportedúExport Error)r   r×   ÚgetSaveFileNamer  rÈ   ÚwriteÚmake_svg_stringr  rË   r
   rÌ   r~   ©r'   rÍ   rÚ   rÏ   rÐ   s        r*   r–   zHPGL2Viewer.export_svgf  s­   € Ü×'Ñ'×7Ñ7ØØ×$Ñ$ VÓ,Ø#Ø&ð	 8ó 
‰ˆˆañ Øð	?Ü�d˜DÔ! RØ—‘˜×-Ñ-Ó/Ô0÷ "à×ÑÐ9Õ:÷ "Ð!ûô ò 	?Ü× Ñ   ~´s¸1³v×>Ñ>ûð	?ús/   ºB Á B Á&B Â B	ÂB Â	B?Â B:Â:B?c                ó*  — | j                  «       }| j                  }| j                  «       r| n|}| j                  «       r| n|}|dv r||}}t	        j
                  ||d«      }|r+|t	        j                  t        j                  |«      «      z  }|S )Nrì   r   )	ræ   rs   rø   rû   r   r  r  r  r  )r'   r  r  r  r  r  s         r*   Úget_export_matrixzHPGL2Viewer.get_export_matrixv  sˆ   € Ø×%Ñ%Ó'ˆØ×&Ñ&ˆØ—‘Ô(ˆe‰V¨eˆØ—‘Ô(ˆe‰V¨eˆØ�yÑ Ø˜�ˆBÜ�N‰N˜2˜r 1Ó%ˆÙØ”×"Ñ"¤4§<¡<°Ó#9Ó:Ñ:ˆAØˆr+   c                ó¸  — | j                   j                  «       }|j                  | j                  «       «       |j	                  «       j
                  }t        j                  «       }t        | j                  «      \  }}t        j                  ||||¬«       ~t        j                  |j                  dz  |j                  dz  ¬«      }|j!                  |«      S )zFReplays the HPGL/2 recordings on the SVGBackend of the drawing add-on.r<   rë   ©ÚwidthÚheight)r%   r2   Ú	transformr&  rL   rN   r   Ú
SVGBackendr
  rt   r   rD   r   ÚPagerP   rQ   Ú
get_string)r'   r3   rN   Úsvg_backendr=   r>   Úpages          r*   r#  zHPGL2Viewer.make_svg_string‚  sª   € à—‘×"Ñ"Ó$ˆØ×Ñ˜×/Ñ/Ó1Ô2Ø�{‰{‹}×!Ñ!ˆÜ—n‘nÓ&ˆÜ.¨t×/AÑ/AÓBÑˆ�(Ü× Ñ Ø�K¨(¸Xõ	
ð ä�{‰{ §¡¨"¡°T·V±V¸b±[ÔAˆØ×%Ñ% dÓ+Ð+r+   c                óˆ  — t         j                  j                  | | j                  d«      dd¬«      \  }}|sy 	 t	        |d«      5 }|j                  | j                  d¬«      «       d d d «       | j                  d«       y # 1 sw Y   ŒxY w# t        $ r*}t        j                  | d	t        |«      «       Y d }~y d }~ww xY w)
Nz.pdfzSave PDF FilezPDF Files (*.pdf)rÓ   ÚwbÚpdf©ÚfmtzPDF successfully exportedr   ©r   r×   r!  r  rÈ   r"  Ú_pymupdf_exportr  rË   r
   rÌ   r~   r$  s        r*   rš   zHPGL2Viewer.export_pdf‘  ó²   € Ü×'Ñ'×7Ñ7ØØ×$Ñ$ VÓ,Ø#Ø&ð	 8ó 
‰ˆˆañ Øð	?Ü�d˜DÔ! RØ—‘˜×-Ñ-°%Ð-Ó8Ô9÷ "à×ÑÐ9Õ:÷ "Ð!ûô ò 	?Ü× Ñ   ~´s¸1³v×>Ñ>ûð	?úó/   ºB Á"BÁ(B ÂBÂB Â	CÂ B<Â<Cc                óˆ  — t         j                  j                  | | j                  d«      dd¬«      \  }}|sy 	 t	        |d«      5 }|j                  | j                  d¬«      «       d d d «       | j                  d«       y # 1 sw Y   ŒxY w# t        $ r*}t        j                  | d	t        |«      «       Y d }~y d }~ww xY w)
Nz.pngzSave PNG FilezPNG Files (*.png)rÓ   r2  Úpngr4  zPNG successfully exportedr   r6  r$  s        r*   r˜   zHPGL2Viewer.export_png¡  r8  r9  c                ó  — | j                   j                  «       }|j                  | j                  «       «       |j	                  «       j
                  }t        j                  «       }t        | j                  «      \  }}t        j                  ||||¬«       ~t        j                  |j                  dz  |j                  dz  ¬«      }|dk(  r|j!                  |«      S |j#                  ||| j%                  «       ¬«      S )zJReplays the HPGL/2 recordings on the PyMuPdfBackend of the drawing add-on.r<   rë   r(  r3  )r5  ró   )r%   r2   r+  r&  rL   rN   r   ÚPyMuPdfBackendr
  rt   r   rD   r   r-  rP   rQ   Úget_pdf_bytesÚget_pixmap_bytesré   )r'   r5  r3   rN   Úpdf_backendr=   r>   r0  s           r*   r7  zHPGL2Viewer._pymupdf_export±  sÑ   € à—‘×"Ñ"Ó$ˆØ×Ñ˜×/Ñ/Ó1Ô2Ø�{‰{‹}×!Ñ!ˆÜ×,Ñ,Ó.ˆÜ.¨t×/AÑ/AÓBÑˆ�(Ü× Ñ Ø�K¨(¸Xõ	
ð ä�{‰{ §¡¨"¡°T·V±V¸b±[ÔAˆØ�%Š<Ø×,Ñ,¨TÓ2Ð2à×/Ñ/°¸#À4Ç<Á<Ã>Ð/ÓRÐRr+   c                óF  — t         j                  j                  | | j                  d«      dd¬«      \  }}|sy | j	                  «       }	 |j                  |«       | j                  d«       y # t        $ r*}t        j                  | dt        |«      «       Y d }~y d }~ww xY w)Nz.dxfzSave DXF FilezDXF Files (*.dxf)rÓ   zDXF successfully exportedr   )r   r×   r!  r  Ú_get_dxf_documentÚsaveasr  rË   r
   rÌ   r~   )r'   rÍ   rÚ   ÚdocrÐ   s        r*   rœ   zHPGL2Viewer.export_dxfÃ  s—   € Ü×'Ñ'×7Ñ7ØØ×$Ñ$ VÓ,Ø#Ø&ð	 8ó 
‰ˆˆañ ØØ×$Ñ$Ó&ˆð	?Ø�J‰J�tÔØ×ÑÐ9Õ:øÜò 	?Ü× Ñ   ~´s¸1³v×>Ñ>ûð	?ús   Á
"A- Á-	B Á6 BÂB c                óˆ  — dd l }ddl m} | j                  «       rt        j                  j
                  nt        j                  j                  }|j                  «       }|j                  «       }| j                  j                  «       }|j                  «       }| j                  «       }|j                  |j                  «       «      }	t        |	«      j                   \  }
}|t#        j$                  |
 | d«      z  }|j'                  |«       |j                  «       }t        j(                  ||¬«      }t+        | j,                  «      \  }}|t        j                  j                  k(  r`|j.                  j1                  d«       t        j2                  ||t4        j                  j7                  |«      «      }d|j                  _        t;        j<                  ||||¬«       ~|j>                  rS|jA                  ||j                   |jB                  «       t        jD                  ||«       t        jF                  ||«       |S )Nr   )Úzoom)Ú
color_modeÚ
BACKGROUNDr<   )$ÚezdxfrF  rý   r   Ú	ColorModeÚACIÚRGBÚnewÚ
modelspacer%   r2   rL   r&  Úfast_2d_transformÚrect_verticesr   rM   r   Ú	translater+  Ú
DXFBackendr
  rt   ÚlayersÚaddÚadd_backgroundr   Úfrom_hexÚlayerr   rD   rî   ÚwindowÚextmaxÚupdate_extentsÚsetup_paperspace)r'   rI  rF  rG  rD  Úmspr3   rL   r  ÚcornersÚtxÚtyÚdxf_backendr=   r>   Úbgs                   r*   rB  zHPGL2Viewer._get_dxf_documentÓ  s±  € ÛÝð "&×!9Ñ!9Ô!;ŒC�M‰M×ÒÄÇÁ×ARÑARð 	ð �i‰i‹kˆØ�n‰nÓˆØ—‘×"Ñ"Ó$ˆØ�{‰{‹}ˆà×"Ñ"Ó$ˆØ×%Ñ% d×&8Ñ&8Ó&:Ó;ˆä˜wÓ'×.Ñ.‰ˆˆBØ	ŒX×Ñ   b S¨!Ó,Ñ,ˆØ×Ñ˜ÔØ�{‰{‹}ˆä—n‘n S°ZÔ@ˆÜ.¨t×/AÑ/AÓBÑˆ�(ØœŸ™×*Ñ*Ò*Ø�J‰J�N‰N˜<Ô(Ü×#Ñ# C¨¬v¯z©z×/BÑ/BÀ8Ó/LÓMˆBØ'ˆB�F‰FŒLô 	× Ñ Ø�K¨(¸Xõ	
ð Ø�=Š=Ø�K‰K˜˜TŸ[™[¨$¯+©+Ô6Ü×Ñ˜s DÔ)ä× Ñ   dÔ+Øˆ
r+   rZ   )rX   zQtWidgets.QWidget)rÅ   r]   )F)rÍ   ústr | os.PathLikerX   rY   )r8   r[   rÝ   rb  rX   rY   )rà   zQtGui.QResizeEventrX   rY   )rX   rã   )rX   rè   )rX   ztuple[int, int])rX   r]   )r  rè   )rÞ   r~   rX   rY   )r  r~   rX   r~   )rX   r   )rX   r~   )r5  r~   rX   r[   )rX   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&  r#  rš   r˜   r7  rœ   rB  rb   rc   s   @r*   rh   rh   [   s¥   ø„ õ<ò|ó>ó@	5ôJó&ó+ó"óóóó<ó
RóRóQòòó
óò
	<ó(ó'ó;ó?ó 
ó,ó?ó ?ó Só$?÷ &r+   rh   c                ó�  — d\  }}| dk(  rdt        j                  d«      }}||fS | dk(  rdt        j                  d«      }}||fS | dk(  rdt        j                  d¬«      }}||fS | d	k(  rdt        j                  d
¬«      }}||fS | dk(  rdt        j                  d«      }}||fS | dk(  rdt        j                  d«      }}||fS )N)r\   Nr   r\   z#000000r¯   é   F)Ú	dark_modeé   Té   z#192c64z#e9ebf3é   z#243f8fz#bdc5dd)r   Ú	map_colorÚmap_monochrome)r  r=   r>   s      r*   r
  r
  ü  s  € Ø(Ñ€HˆhØ�‚zØ&¬×(9Ñ(9¸)Ó(D�(ˆð �XÐÐð 
�!ŠØ&¬×(9Ñ(9¸)Ó(D�(ˆð �XÐÐð 
�!ŠØ&¬×(>Ñ(>ÈÔ(O�(ˆð �XÐÐð 
�!ŠØ&¬×(>Ñ(>ÈÔ(N�(ˆð
 �XÐÐð	 
�!ŠØ&¬×(9Ñ(9¸)Ó(D�(ˆð �XÐÐð 
�!ŠØ&¬×(9Ñ(9¸)Ó(D�(ˆØ�XÐÐr+   )r  rè   rX   ztuple[str, Any]))Ú
__future__r   Útypingr   r   r  Úosru   Úezdxf.addonsr   Úezdxf.addons.xqtr   r   r	   r
   Úezdxf.addons.drawingr   r   r   r   Úezdxf.addons.drawing.qtviewerr   Úezdxf.addons.drawing.pyqtr   r;   r   Údepsr   r   r   Úezdxf.documentr   r¥   r¡   r   r±   r   r�   ÚQMainWindowrh   r
  © r+   r*   Ú<module>rw     s   ðõ #ß %ã Û 	Û å  ß BÓ Bß :Ó :Ý 9Ý 9å ß 1Ñ 1áÝ&à€ô2�)×#Ñ#ô 2ðj €Ø€ò€ô^�)×'Ñ'ô ^ôBr+   