
    OgI                    ,   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      ^/var/www/html/public_html/myphp/venv/lib/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    zz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s7G7G7L7L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  LL$--"x	
 	

y)

$$&JJ##% 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    ||  "yy**688VXXtvvtvvNell5<<#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	YY^^
#&::b"#5$1O
$\\^(//1'..0&--/(1(;(;C(@%&00[1AB ) 3 3L A++FII,@,@,J,JK**2243C3CD ) 3 3J ?++FII,@,@,J,JK**2243C3CD"+"5"5"7(()BC33;;D<P<PQ(224%%l300889K9KL(223DE**699+?+?+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243F3F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++FII,@,@,J,JK++FII,@,@,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   ##%((*##GqL!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dD! !Rwwy!~tT*	! !
  	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    	IINN4 
 yy''\\&&(
$\\(34--.{m3/#h-?@##E* ~~ 	-hZs3q6(CC!!**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dffrkF*+AdffrkF*+A)+aqA!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    lln!!#1QX^$eAHsN&;;;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  ,    $$//1VYY5I5I5Q5Q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,    ##..0FII4H4H4P4P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#Qqc%<=$$&B##jAbT$<=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DA??$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 	?dD! 1R--/019:1 1  	?  ~s1v>>	?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    %%'&&(eVe(eVey BNN2r1%""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{{}!!nn&.t/A/AB(  K(X	
 {{"TVVb[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 	?dD! :R--%-89:9:: :  	?  ~s1v>>	?/   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	
 {{"TVVb[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 $$&	?JJt9: 	?  ~s1v>>	?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!;CMMARAR 	 iiknn""${{}""$%%d&8&8&:;w'..B	XbS!,,{{}nnSZ@.t/A/AB(***JJNN<(##Cvzz/B/B8/LMB'BFFL 	  K(X	
 ==KKT[[$++6sD)  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   (Hh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+   