
    'jI                    &   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j!                  Z"dZ#dZ$g dZ% G d dej&                  Z'ddZ(dS )    )annotations)AnyTYPE_CHECKINGN)xplayer)	QtWidgetsQtGuiQtCoreQMessageBox)svglayoutpymupdfdxf)CADGraphicsView)PyQtPlaybackBackend   )api)BoundingBox2dMatrix44colors)DrawingzHPGL/2 Viewerc                  r     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 )HPGL2Widgetviewr   returnNonec                   t                                                       t          j                    } |j        dddd            |j        |           |                     |           || _        | j        j        	                    | j
                   t          j        g i           | _        |                                  d S )Nr   )super__init__r   QVBoxLayoutsetContentsMargins	addWidget	setLayout_viewclosingconnectcloser   Player_player_reset_backend)selfr   r   	__class__s      S/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/addons/hpgl2/viewer.pyr   zHPGL2Widget.__init__   s    &((!!!Q1---v

""4:...#&:b"#5#5    c                ,    t                      | _        d S N)r   _backendr*   s    r,   r)   zHPGL2Widget._reset_backend%   s    +--r-   c                    | j         S r/   )r#   r1   s    r,   r   zHPGL2Widget.view(   s
    zr-   
api.Playerc                4    | j                                         S r/   )r(   copyr1   s    r,   playerzHPGL2Widget.player,   s    |  """r-   databytesc                    |                                   t          j        |t          j        j                  | _        d S r/   )r)   r   record_plotter_outputMergeControlAUTOr(   )r*   r7   s     r,   plotzHPGL2Widget.plot0   s2    0s7G7LMMr-   #ffffffNT
reset_viewboolc                   |                                   | j                                         t          j                    }| j                            |           |                    |                     |                     t          j
        | j        | j        d|           | j                            |           | j                                         |r| j                                         d S d S )N bg_coloroverride)r)   r#   begin_loadingr   QGraphicsScener0   	set_sceneaddItem	_bg_paperr   hpgl2_to_drawingr(   end_loadingbuffer_scene_rectfit_to_scene)r*   rD   rE   r?   	new_scenes        r,   replayzHPGL2Widget.replay4   s     	
  """,..		***$..22333 L$-"x	
 	
 	
 	
 	
y)))
$$&&& 	&J##%%%%%	& 	&r-   c                   | j                                         }|j        }|j        }t	          j        |j        |j        |j        |j                  }|                    t          j
        t          j        |                               |S r/   )r(   bboxextminsizer   QGraphicsRectItemxysetBrushr   QBrushQColor)r*   colorrR   insertrT   rects         r,   rJ   zHPGL2Widget._bg_paperE   sl    |  ""y*68VXtvtvNNel5<#6#677888r-   )r   r   r   r   r   r   )r   r   )r   r3   )r7   r8   r   r   )r>   NT)r?   r@   r   r   )__name__
__module____qualname__r   r)   propertyr   r6   r=   rP   rJ   __classcell__r+   s   @r,   r   r      s        	 	 	 	 	 	. . . .    X # # # X#N N N N
 EI& & & & &"      r-   r      `   )DefaultzBlack on WhitezWhite on BlackzMonochrome LightzMonochrome DarkzBlueprint High ContrastzBlueprint Low Contrastc                  
    e Zd Zd7 fdZd Zd8dZd9d	Zd:d;dZd7dZd<dZ	d=dZ
d>dZd?dZd@dZd@dZdAdZdAdZdAdZd  Zd! ZdBd#ZdBd$Zd% ZdCd(Zd7d)ZdDd+Zd7d,ZdEd.ZdFd/Zd7d0Zd7d1ZdGd3Zd7d4Z dHd6Z! xZ"S )IHPGL2Viewerr   r   c                j
   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#          j        d          | _        | j                            t<          j        j         j!                   | j        j"        #                    | j$                   t#          j        d          | _%        | j%                            t<          j        j         j!                   | j%        j"        #                    | j$                   t#          j&                    | _'        | j'        (                    g d           | j'        j)        #                    | j*                   t#          j&                    | _+        | j+        (                    tX                     | j+        j)        #                    | j-                   t#          j        d          | _.        | j.                            t<          j        j         j!                   t#          j/        d          | _0        | j0        j1        #                    | j2                   t#          j/        d          | _3        | j3        j1        #                    | j4                   t#          j/        d	          | _5        | j5        j1        #                    | j6                   t#          j/        d
          | _7        | j7        j1        #                    | j8                   | 9                    d           | j        j:        #                    | j;                   | j        j:        #                    | j;                   t#          j<                    } |j=        dddd           t#          j>                    }|?                    |           | @                    |            |jA        | j                   | B                                } |jA        |           | C                    t                     | E                    dd           | F                                 d S )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 122	Y^
#&:b"#5#5$1OO
$\^^(/11'.00&-//(1(;C(@(@%&0[1A1ABB ) 3L A A++FI,@,JKKK*2243CDDD ) 3J ? ?++FI,@,JKKK*2243CDDD"+"5"7"7(()B)B)BCCC3;;D<PQQQ(244%%l3330889KLLL(23DEE**69+?+IJJJ!*!6|!D!D&..t???!*!6|!D!D&..t???!*!6|!D!D&..t???!*!6|!D!D&..t???##D)))%5==d>QRRR*2243FGGG&((!!!Q1---%''	F###i(((#####%%!!!K(((D#		r-   c                   | j                             d           | j                            t          t                               | j                            t          j        j	        j
                   | j                            t          j        j	        j
                   | j                            d           d| _        |                                  d S )Nrk   r   )r~   setTextr   r   r   r   r   r	   r   r   r   r   r   setCurrentIndexrt   r   r1   s    r,   reset_valueszHPGL2Viewer.reset_values   s    %--c222""3{#3#3444++FI,@,JKKK++FI,@,JKKK//222r-   QtWidgets.QWidgetc                P	   t          j                    }t          j                    }|                    t          dz  dt          dz  d           |                    |           t          j                    }|                    t           j        j        j	                   |
                    |           t          j        d          }|j                            | j                   |                    |           |                    | j                   t          j                    }|                    t          j        d                     |                    | j                   |                    |           t          j                    }|                    t          j        d                     |                    | j                   |                    |           t          j        d          }t          j                    }|                    | j                   |                    | j                   |                    |           |                    |           t          j                    }|                    t          j        d                     |                    | j                   |                    |           |                    t                     t          j                    }|                    t          j        d                     |                    | j                   |                    |           |                    | j                   |                    | j                   |                    | j                   |                    | j                   |                    t                     |                    | j                    |                    | j!                   |                    t                     t          j        d	          }|j                            | j"                   |                    |           |                    t                     |                    | j#                   |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!   rz   r   ry   r~   	addLayoutr   	QGroupBoxr   r   r   
addSpacingr   r{   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   s   #%%(**##GqL!W\1EEE(###&((""9#8#?#EFFFf%%%+,>??##D$9:::;'''4/000(**9+,=>>???489998$$$(**9+,<==>>>423338$$$#M22(**4011140111!!!5!!!(**9+I667774/0008$$$G$$$(**9+,=>>???4-...8$$$4.///412224122241222G$$$4/00041222G$$$ ,W55$$T%6777<(((G$$$4-...r-   disabledr@   c                x   | j                             |           | j                            |           t          j        r6| j                            |           | j                            |           d S t          d           | j                            d           | j                            d           d S )Nz,PDF/PNG export requires the PyMuPdf package!T)r   setDisabledr   r   is_pymupdf_installedr   r   print)r*   r   s     r,   r   z"HPGL2Viewer.disable_export_buttons   s    **8444**8444' 	5"..x888"..x88888@AAA"..t444"..t44444r-   Fpathstr | os.PathLikec                F   	 t          |d          5 }|                                }d d d            n# 1 swxY w Y   |rd|z   }|                     ||           d S # t          $ r9}t          j                            | dt          |                     Y d }~d S d }~ww xY w)Nrbs   %1BzLoading Error)openreadset_plot_dataIOErrorr   r
   criticalr   )r*   r   forcefpr7   es         r,   load_plot_filezHPGL2Viewer.load_plot_file   s    	JdD!! !Rwwyy! ! ! ! ! ! ! ! ! ! ! ! ! ! ! &~tT***** 	J 	J 	J!**4#a&&IIIIIIIII	Js2   A 3A 7A 7 A 
B '.BB c                    t           j                            | t          | j        j                  dd          \  }}|r|                     |           d S d S )NzSelect HPGL/2 Plot FilezPlot Files (*.plt)dircaptionfilter)r   QFileDialoggetOpenFileNamer   rx   parentr   )r*   r   _s      r,   r   zHPGL2Viewer.select_plot_file   sk    '77D&-..-'	 8 
 
a  	&%%%%%	& 	&r-   r7   r8   filenamec                T   	 | j                             |           nS# t          j        $ rA}d| dt	          |           }t
          j                            | d|           Y d }~d S d }~ww xY w| j         j        | _	        | j	        
                                | _        t          j        |          | _        |                     | j                   |                                  |                     t&           dt	          |          z              |                     d           d S )NzCannot plot HPGL/2 file 'z', z
Plot Errorz - F)rr   r=   r   
Hpgl2Errorr   r   r
   r   r6   r(   rR   rs   rv   rw   rx   r   ru   r   r   r   r   )r*   r7   r   r   msgs        r,   r   zHPGL2Viewer.set_plot_data  s"   	INN4    ~ 	 	 	ChCC3q66CCC!**4sCCCFFFFF	 y'\&&((
$\(334-...{///#h--?@@@##E*****s    A-6A((A-eventQtGui.QResizeEventc                8    | j                                          d S r/   )r#   rN   )r*   r   s     r,   resizeEventzHPGL2Viewer.resizeEvent  s    
!!!!!r-   floatc                r    	 t          | j                                                  S # t          $ r Y dS w xY w)Ng      ?)r   r~   text
ValueErrorr1   s    r,   get_scale_factorzHPGL2Viewer.get_scale_factor  sF    	6;;==>>> 	 	 	33	s   %( 
66intc                ~    	 t          | j                                                  S # t          $ r
 t          cY S w xY wr/   )r   r   r   r   r   r1   s    r,   get_dpizHPGL2Viewer.get_dpi  sK    	t)..00111 	 	 		s   %( <<tuple[int, int]c                    |                                  }d}d}| j        j        r@| j        j        }t	          |j        dz  |z            }t	          |j        dz  |z            }| j        dv r||}}||fS )Nr   (   Z   i  )r   rs   has_datarT   roundrV   rW   rt   )r*   factorrV   rW   rT   s        r,   get_page_sizezHPGL2Viewer.get_page_size   s    &&((: 	,:?DdfrkF*++AdfrkF*++A)++aqA!tr-   c                    |                                  }|                                 \  }}t          |dz  |z            t          |dz  |z            fS )Ngffffff9@)r   r   r   )r*   dpirV   rW   s       r,   get_pixel_sizezHPGL2Viewer.get_pixel_size-  sO    llnn!!##1QX^$$eAHsN&;&;;;r-   c                d    | j                                         t          j        j        j        k    S r/   )r   
checkStater	   r   r   Checkedr1   s    r,   
get_flip_xzHPGL2Viewer.get_flip_x2  $    $//11VY5I5QQQr-   c                d    | j                                         t          j        j        j        k    S r/   )r   r   r	   r   r   r   r1   s    r,   
get_flip_yzHPGL2Viewer.get_flip_y5  r   r-   c                d    | j                                         t          j        j        j        k    S r/   )r   r   r	   r   r   r   r1   s    r,   get_aci_export_modezHPGL2Viewer.get_aci_export_mode8  s$    #..00FI4H4PPPr-   c                   |                                  \  }}| j                            d| d| d           |                                 \  }}| j                            d| d| d           |                                  d S )NzPage Size: rV   mmz
PNG Size: px)r   rz   r   r   r{   clear_message)r*   rV   rW   r  pys        r,   r   zHPGL2Viewer.update_sidebar;  s    !!##1$$%<1%<%<q%<%<%<===$$&&B##$<$<$<b$<$<$<===r-   c                    | j                             |                                            | j                                          |                                  d S r/   )r#   setTransformview_transformationrN   r   r1   s    r,   r   zHPGL2Viewer.update_viewB  sP    
 8 8 : :;;;
!!!r-   indexc                `    |dz  }|| j         k    r|| _         |                                  d S d S )Nr   )rt   r   )r*   r  rotations      r,   r   zHPGL2Viewer.update_rotationG  sA    2:t***"*D +*r-   c                t    || _          | j        j        t          |            |                                  d S r/   )ru   rr   rP   replay_propertiesr   )r*   r  s     r,   r   zHPGL2Viewer.update_colorsM  s=    "	+E2233r-   c                ^   | j         dk    rt                      }n+t          j        t          j        | j                             }|                                 rdnd}|                                 rdnd}|t          j        ||d          z  }t          j	        |
                                 S )Nr   r   )rt   r   z_rotatemathradiansr   r   scaler   
QTransformget_2d_transformation)r*   msxsys       r,   r
  zHPGL2Viewer.view_transformationR  s    !##

AA!$,t/B"C"CDDA??$$+RR!//##+QQ	X^BA&&&!8!8!:!:;;r-   r   r   c                :    | j                             |           d S r/   r|   r   )r*   r   s     r,   show_messagezHPGL2Viewer.show_message]  s    ""3'''''r-   c                :    | j                             d           d S )NrB   r  r1   s    r,   r  zHPGL2Viewer.clear_message`  s    ""2&&&&&r-   suffixc                P    t          | j                            |                    S r/   )r   rx   with_suffix)r*   r  s     r,   get_export_namezHPGL2Viewer.get_export_namec  s!    4%11&99:::r-   c                   t           j                            | |                     d          dd          \  }}|sd S 	 t	          |d          5 }|                    |                                            d d d            n# 1 swxY w Y   |                     d           d S # t          $ r.}t          j
        | dt          |                     Y d }~d S 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  s8   '77$$V,,#&	 8 
 
a  	F	?dD!! 1R--//0001 1 1 1 1 1 1 1 1 1 1 1 1 1 19::::: 	? 	? 	? ~s1vv>>>>>>>>>	?s;   B% (B7B% BB% 
BB% %
C/#CCr   c                2   |                                  }| j        }|                                 r| n|}|                                 r| n|}|dv r||}}t	          j        ||d          }|r)|t	          j        t          j        |                    z  }|S )Nr   r   )	r   rt   r   r   r   r  r  r  r  )r*   r  r  r  r  r  s         r,   get_export_matrixzHPGL2Viewer.get_export_matrixv  s    %%''&((3eVVe((3eVVey  BN2r1%% 	;"4<#9#9:::Ar-   c                   | j                                         }|                    |                                            |                                j        }t          j                    }t          | j	                  \  }}t          j        ||||           ~t          j        |j        dz  |j        dz            }|                    |          S )zFReplays the HPGL/2 recordings on the SVGBackend of the drawing add-on.rC   r   widthheight)r(   r5   	transformr+  rR   rT   r   
SVGBackendr  ru   r   rK   r   PagerV   rW   
get_string)r*   r6   rT   svg_backendrD   rE   pages          r,   r(  zHPGL2Viewer.make_svg_string  s    ""$$//11222{{}}!n&&.t/ABB( K(X	
 	
 	
 	
 {"TVb[AAA%%d+++r-   c                   t           j                            | |                     d          dd          \  }}|sd S 	 t	          |d          5 }|                    |                     d                     d d d            n# 1 swxY w Y   |                     d           d S # t          $ r.}t          j
        | d	t          |                     Y d }~d S 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  	F	?dD!! :R--%-88999: : : : : : : : : : : : : : :9::::: 	? 	? 	? ~s1vv>>>>>>>>>	?;   B' *B9B' B		B' B	B' '
C1#CCc                   t           j                            | |                     d          dd          \  }}|sd S 	 t	          |d          5 }|                    |                     d                     d d d            n# 1 swxY w Y   |                     d           d S # t          $ r.}t          j
        | d	t          |                     Y d }~d S d }~ww xY w)
Nz.pngzSave PNG FilezPNG Files (*.png)r   r7  pngr9  zPNG successfully exportedr%  r;  r)  s        r,   r   zHPGL2Viewer.export_png  r=  r>  r:  c                   | j                                         }|                    |                                            |                                j        }t          j                    }t          | j	                  \  }}t          j        ||||           ~t          j        |j        dz  |j        dz            }|dk    r|                    |          S |                    |||                                           S )zJReplays the HPGL/2 recordings on the PyMuPdfBackend of the drawing add-on.rC   r   r-  r8  )r:  r   )r(   r5   r0  r+  rR   rT   r   PyMuPdfBackendr  ru   r   rK   r   r2  rV   rW   get_pdf_bytesget_pixmap_bytesr   )r*   r:  r6   rT   pdf_backendrD   rE   r5  s           r,   r<  zHPGL2Viewer._pymupdf_export  s    ""$$//11222{{}}!,...t/ABB( K(X	
 	
 	
 	
 {"TVb[AAA%<<,,T222//#4<<>>/RRRr-   c                t   t           j                            | |                     d          dd          \  }}|sd S |                                 }	 |                    |           |                     d           d S # t          $ r.}t          j	        | dt          |                     Y d }~d S 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  	F$$&&	?JJt9::::: 	? 	? 	? ~s1vv>>>>>>>>>	?s   *A? ?
B7	#B22B7r   c                h   dd l }ddl m} |                                 rt          j        j        nt          j        j        }|                                }|                                }| j	        
                                }|                                }|                                 }|                    |                                          }	t          |	          j        \  }
}|t#          j        |
 | d          z  }|                    |           |                                }t          j        ||          }t+          | j                  \  }}|t          j        j        k    rY|j                            d           t          j        ||t4          j                            |                    }d|j        _        t;          j        ||||           ~|j        rK|                     ||j        |j!                   t          j"        ||           t          j#        ||           |S )Nr   )zoom)
color_mode
BACKGROUNDrC   )$ezdxfrK  r  r   	ColorModeACIRGBnew
modelspacer(   r5   rR   r+  fast_2d_transformrect_verticesr   rS   r   	translater0  
DXFBackendr  ru   layersaddadd_backgroundr   from_hexlayerr   rK   r   windowextmaxupdate_extentssetup_paperspace)r*   rN  rK  rL  rI  mspr6   rR   r  cornerstxtydxf_backendrD   rE   bgs                   r,   rG  zHPGL2Viewer._get_dxf_document  s    "&!9!9!;!;RCMAR 	 iikknn""$${{}}""$$%%d&8&8&:&:;;w''.B	XbS!,,,{{}}nSZ@@@.t/ABB(***JNN<(((#Cvz/B/B8/L/LMMB'BFL 	 K(X	
 	
 	
 	
 = 	,KKT[$+666sD))) d+++
r-   r^   )r   r   )r   r@   )F)r   r   r   r   )r7   r8   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   r   r8   )r   r   )#r_   r`   ra   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   rG  rc   rd   s   @r,   ri   ri   [   s       < < < < < <|  > > > >@	5 	5 	5 	5J J J J J& & & &+ + + +" " " "         < < < <
R R R RR R R RQ Q Q Q    
      
	< 	< 	<( ( ( (' ' ' '; ; ; ;? ? ? ? 
 
 
 
, , , ,? ? ? ? ? ? ? ? S S S S$? ? ? ? & & & & & & & &r-   ri   r  r   r   tuple[str, Any]c                r   d\  }}| dk    rdt          j        d          }}n| dk    rdt          j        d          }}nu| dk    rdt          j        d          }}nW| d	k    rdt          j        d
          }}n9| dk    rdt          j        d          }}n| 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  rD   rE   s      r,   r  r    s    (Hhzz&(9)(D(D(	!&(9)(D(D(	!&(>(O(O(O(	!&(>(N(N(N(	!&(9)(D(D(	!&(9)(D(D(Xr-   )r  r   r   rg  ))
__future__r   typingr   r   r  osrv   ezdxf.addonsr   ezdxf.addons.xqtr   r   r	   r
   ezdxf.addons.drawingr   r   r   r   ezdxf.addons.drawing.qtviewerr   ezdxf.addons.drawing.pyqtr   rB   r   depsr   r   r   ezdxf.documentr   r   r   r   r   r   r   QMainWindowri   r   r-   r,   <module>r|     s   # " " " " " % % % % % % % %  				              B B B B B B B B B B B B : : : : : : : : : : : : 9 9 9 9 9 9 9 9 9 9 9 9       1 1 1 1 1 1 1 1 1 1 '&&&&&&2 2 2 2 2)# 2 2 2j   ^ ^ ^ ^ ^)' ^ ^ ^B     r-   