Ë
    £èhbQ  ã                  ór  — d dl mZ d dlmZmZmZ d dlZd dlZd dl	m
Z
 d dlmZmZmZ d dlmZ ddlmZ dd	lmZmZmZmZ dd
lmZmZ ddlmZ ddlmZmZ dgZ  e!d«      Z"dZ#dZ$dZ%dZ&d Z' e
jP                  ddd«      Z) e
jP                  d d d «      Z*dZ+ e,ejZ                  «      Z. e,ej^                  «      Z0 e,ejb                  «      Z2 e,ejf                  «      Z4 G d„ dejj                  «      Z6 G d„ d«      Z7d!d„Z8 G d„ de«      Z9d"d„Z:	 	 d#	 	 	 	 	 	 	 d$d„Z;d%d„Z<d&d„Z=d'd(d„Z>d)d„Z?ed*d „«       Z@y)+é    )Úannotations)ÚIterableÚSequenceÚno_type_checkN)Úcolors)ÚVec2ÚBoundingBox2dÚMatrix44)ÚCommandé   )ÚColor)ÚBackendInterfaceÚBkPath2dÚ
BkPoints2dÚ	ImageData)ÚConfigurationÚLineweightPolicy)ÚBackendProperties)ÚlayoutÚrecorderÚPlotterBackendÚ;s   %0B;IN;BP;s	   PU;PA0,0;é
   é(   éÿ   c                  ó:  ‡ — e Zd ZdZdˆ fd„Z ej                  «       dddddœ	 	 	 	 	 	 	 	 	 dd„Z ej                  «       f	 	 	 	 	 dd	„Z ej                  «       f	 	 	 	 	 dd
„Z	 ej                  «       f	 	 	 	 	 dd„Z
 ej                  «       f	 	 	 	 	 dd„Zˆ xZS )r   aª  The :class:`PlotterBackend` creates HPGL/2 plot files for output on raster
    plotters. This backend does not need any additional packages.  This backend support
    content cropping at page margins.

    The plot files are tested by the plot file viewer `ViewCompanion Standard`_
    but not on real hardware - please use with care and give feedback.

    .. _ViewCompanion Standard: http://www.softwarecompanions.com/

    c                ó"   •— t         ‰| �  «        y ©N)ÚsuperÚ__init__)ÚselfÚ	__class__s    €ú:lib/python3.12/site-packages/ezdxf/addons/drawing/hpgl2.pyr    zPlotterBackend.__init__2   s   ø€ Ü‰ÑÕó    NTr   é@   )ÚsettingsÚ
render_boxÚcurvesÚdecimal_placesÚbasec               ó°  — d}t        j                   |«      }| j                  «       }|€|j                  «       }t        j                  |d¬«      }	|	j                  ||«      }|j                  dk(  s|j                  dk(  ryt        |j                  |j                  «      t        z  |_        |	j                  |||¬«      }
|j                  |
«       |j                  rH|j!                  |¬«      \  }}|j#                  |«      }dt        z  }|j%                  ||z  ||z  |«       t'        |||||¬«      }|j)                  |«       |j+                  «       S )	uo  Returns the HPGL/2 data as bytes.

        Args:
            page: page definition, see :class:`~ezdxf.addons.drawing.layout.Page`
            settings: layout settings, see :class:`~ezdxf.addons.drawing.layout.Settings`
            render_box: set explicit region to render, default is content bounding box
            curves: use BÃ¨zier curves for HPGL/2 output
            decimal_places: HPGL/2 output precision, less decimal places creates smaller
                files but for the price of imprecise curves (text)
            base: base for polyline encoding, 32 for 7 bit encoding or 64 for 8 bit encoding

        F)Úflip_yr   r$   )r&   Ú
top_origin)r-   gš™™™™™¹?©r&   r(   r)   r*   )ÚcopyÚplayerÚbboxr   ÚLayoutÚget_final_pageÚwidthÚheightÚmaxÚwidth_in_mmÚheight_in_mmÚ	MM_TO_PLUÚoutput_coordinate_spaceÚget_placement_matrixÚ	transformÚcrop_at_marginsÚget_margin_rectÚpage_output_scale_factorÚ	crop_rectÚ_RenderBackendÚreplayÚ	get_bytes)r!   Úpager&   r'   r(   r)   r*   r-   r0   Úoutput_layoutÚmÚp1Úp2Úoutput_scaleÚmax_sagittaÚbackends                   r#   rC   zPlotterBackend.get_bytes5   sN  € ð, ˆ
Ü—9‘9˜XÓ&ˆà—‘“ˆØÐØŸ™›ˆJô Ÿ™ j¸Ô?ˆØ×+Ñ+¨D°(Ó;ˆØ�:‰:˜Š?˜dŸk™k¨QÒ.Øô �× Ñ  $×"3Ñ"3Ó4´yÑ@ð 	Ô(ð ×.Ñ.Ø˜8°
ð /ó 
ˆð 	×Ñ˜ÔØ×#Ò#Ø×)Ñ)°ZÐ)Ó@‰FˆB�à#×<Ñ<¸TÓBˆLØ¤	™/ˆKà×Ñ˜R ,Ñ.°°\Ñ0AÀ;ÔOÜ ØØØØ)Øô
ˆð 	�‰�gÔØ× Ñ Ó"Ð"r$   c                ó.   — | j                  ||ddd¬«      S )a  Returns the HPGL/2 data as 7-bit encoded bytes curves as approximated
        polylines and coordinates are rounded to integer values.
        Has often the smallest file size and should be compatible to all output devices
        but has a low quality text rendering.
        Fr   é    r.   ©rC   ©r!   rD   r&   s      r#   Ú
compatiblezPlotterBackend.compatibler   s%   € ð �~‰~Ø˜8¨EÀ!È"ð ó 
ð 	
r$   c                ó.   — | j                  ||ddd¬«      S )u
  Returns the HPGL/2 data as 8-bit encoded bytes, curves as BÃ©zier
        curves and coordinates are rounded to integer values.
        Has a smaller file size than normal quality and the output device must support
        8-bit encoding and BÃ¨zier curves.
        Tr   r%   r.   rN   rO   s      r#   Úlow_qualityzPlotterBackend.low_quality~   ó%   € ð �~‰~Ø˜8¨DÀÈð ó 
ð 	
r$   c                ó.   — | j                  ||ddd¬«      S )u*  Returns the HPGL/2 data as 8-bit encoded bytes, curves as BÃ©zier
        curves and coordinates are floats rounded to one decimal place.
        Has a smaller file size than high quality and the output device must support
        8-bit encoding, BÃ¨zier curves and fractional coordinates.
        Tr   r%   r.   rN   rO   s      r#   Únormal_qualityzPlotterBackend.normal_qualityŠ   rS   r$   c                ó.   — | j                  ||ddd¬«      S )u"  Returns the HPGL/2 data as 8-bit encoded bytes and all curves as BÃ©zier
        curves and coordinates are floats rounded to two decimal places.
        Has the largest file size and the output device must support 8-bit encoding,
        BÃ¨zier curves and fractional coordinates.
        Té   r%   r.   rN   rO   s      r#   Úhigh_qualityzPlotterBackend.high_quality–   rS   r$   ©ÚreturnÚNone)
rD   úlayout.Pager&   úlayout.Settingsr'   zBoundingBox2d | Noner)   ÚintrZ   Úbytes)rD   r\   r&   r]   rZ   r_   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r    r   ÚSettingsrC   rP   rR   rU   rX   Ú__classcell__)r"   s   @r#   r   r   &   s  ø„ ñ	õð %4 F§O¡OÓ$5Ø+/ØØØñ;#àð;#ð "ð	;#ð
 )ð;#ð ð;#ð 
ó;#ð| >M¸V¿_¹_Ó=Nð

Øð

Ø+:ð

à	ó

ð >M¸V¿_¹_Ó=Nð

Øð

Ø+:ð

à	ó

ð >M¸V¿_¹_Ó=Nð

Øð

Ø+:ð

à	ó

ð >M¸V¿_¹_Ó=Nð

Øð

Ø+:ð

à	÷

r$   c                  ó6   — e Zd Zddd„Zd	d„Zd
d„Zdd„Zdd„Zy)ÚPenTablec                óB   — t        «       | _        t        |«      | _        y r   )ÚdictÚpensr^   Úmax_pens)r!   rk   s     r#   r    zPenTable.__init__¤   s   € Ü+/«6ˆŒ	Ü˜H›ˆ�r$   c                ó   — || j                   v S r   ©rj   ©r!   Úindexs     r#   Ú__contains__zPenTable.__contains__¨   s   € Ø˜Ÿ	™	Ð!Ð!r$   c                ó    — | j                   |   S r   rm   rn   s     r#   Ú__getitem__zPenTable.__getitem__«   s   € Ø�y‰y˜ÑÐr$   c                ó"   — || j                   |<   y r   rm   )r!   ro   Úcolors      r#   Úadd_penzPenTable.add_pen®   s   € Ø ˆ�	‰	�%Òr$   c                ó:  — d| j                   dz
  › d�j                  «       g}| j                  j                  «       D ��cg c]	  \  }}||f‘Œ }}}|j	                  «        |D ]   \  }}|j                  t        ||«      «       Œ" dj                  |«      S c c}}w )NÚNPr   r   r$   )rk   Úencoderj   ÚitemsÚsortÚappendÚmake_pcÚjoin)r!   Úcommandro   Úrgbrj   s        r#   Úto_byteszPenTable.to_bytes±   s•   € Ø"$ T§]¡]°1¡_Ð$5°QÐ 7× >Ñ >Ó @ÐAˆà+/¯9©9¯?©?Ô+<ô.
Ù+<™Z˜U CˆU�CŠLÐ+<ð 	ñ .
ð 	�	‰	ŒÛ‰JˆE�3Ø�N‰Nœ7 5¨#Ó.Õ/ð à�x‰x˜Ó Ð ùó.
s   Á BN)r%   )rk   r^   rZ   r[   )ro   r^   rZ   Úbool)ro   r^   rZ   ú
colors.RGB)ro   r^   rt   r‚   ©rZ   r_   )r`   ra   rb   r    rp   rr   ru   r€   © r$   r#   rg   rg   £   s   „ ô&ó"ó ó!ô!r$   rg   c           	     óx   — d| › d|j                   › d|j                  › d|j                  › d�	j                  «       S )NÚPCÚ,r   )ÚrÚgÚbrx   )Úpenr   s     r#   r|   r|   ¼   s8   € à�ˆu�A�c—e‘e�W˜A˜cŸe™e˜W A c§e¡e W¨AÐ.×5Ñ5Ó7Ð7r$   c                  ó:  — e Zd ZdZddd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,d„Zed-d„«       Zd.d„Zd/d„Zd0d„Zd1d„Z	 	 	 	 	 	 d2d„Zd3d„Z	 	 	 	 	 	 d4d„Z	 	 	 	 	 	 d5d„Zd6d„Zd7d„Zd)d„Zd)d„Zd)d„Zd)d „Zy!)8rA   aù  Creates the HPGL/2 output.

    This backend requires some preliminary work, record the frontend output via the
    Recorder backend to accomplish the following requirements:

    - Move content in the first quadrant of the coordinate system.
    - The output coordinates are integer values, scale the content appropriately:
        - 1 plot unit (plu) = 0.025mm
        - 40 plu = 1mm
        - 1016 plu = 1 inch
        - 3.39 plu = 1 dot @300 dpi
    - Replay the recorded output on this backend.

    TrW   r%   )r(   r)   r*   c               óx  — || _         || _        t        |dz  «      | _        |rt	        |«      nd | _        || _        g | _        g | _        t        d¬«      | _
        d| _        d| _        | j                  |«       t        «       | _        d| _        d| _        t$        j&                  | _        t+        |j,                  |j.                  «      }t        ||j0                  z  d«      | _        t        | j0                  |j2                  z  d«      | _        t        | j0                  |j4                  z  d«      | _        y )	Ng¤p=
×£
@é   )rk   r   g        çš™™™™™©?ç      ð?rW   )r&   r(   ÚroundÚfactional_bitsr^   r)   r*   ÚheaderÚdatarg   Ú	pen_tableÚcurrent_penÚcurrent_pen_widthÚsetupri   Ú_stroke_width_cacheÚmin_lineweightÚlineweight_scalingr   ÚABSOLUTEÚlineweight_policyr6   r7   r8   Úmax_stroke_widthÚmin_stroke_widthÚfixed_stroke_width)r!   rD   r&   r(   r)   r*   Úmax_sizes          r#   r    z_RenderBackend.__init__Ñ   s  € ð !ˆŒØˆŒÜ# N°TÑ$9Ó:ˆÔá#1ŒC�Ô°tð 	Ôð ˆŒ	Ø#%ˆŒØ!#ˆŒ	Ü!¨3Ô/ˆŒØ !ˆÔØ(+ˆÔØ�
‰
�4Ôä7;³vˆÔ ð #ˆÔØ"%ˆÔÜ!1×!:Ñ!:ˆÔô �t×'Ñ'¨×):Ñ):Ó;ˆÜ',¨X¸×8QÑ8QÑ-QÐSTÓ'UˆÔä',Ø×!Ñ! H×$=Ñ$=Ñ=¸qó(
ˆÔô
 */Ø×!Ñ! H×$?Ñ$?Ñ?Àó*
ˆÕr$   c                óæ   — d|j                   t        z  d›d|j                  t        z  d›d�}| j                  j	                  |j                  «       «       | j                  j	                  d«       y )NÚPSz.0fr‡   r   s   FT1;PA;)r7   r9   r8   r“   r{   rx   )r!   rD   Úcmds      r#   r˜   z_RenderBackend.setup   s^   € Ø�4×#Ñ#¤IÑ-¨cÐ2°!°D×4EÑ4EÄiÑ4OÐPSÐ3TÐTUÐVˆØ�‰×Ñ˜3Ÿ:™:›<Ô(Ø�‰×Ñ˜:Õ&r$   c                óª   — t        | j                  «      }|j                  | j                  j	                  «       «       t        || j                  «      S r   )Úlistr“   r{   r•   r€   Úcompile_hpgl2r”   )r!   r“   s     r#   rC   z_RenderBackend.get_bytes  s:   € Ü" 4§;¡;Ó/ˆØ�‰�d—n‘n×-Ñ-Ó/Ô0Ü˜V T§Y¡YÓ/Ð/r$   c                óä   — || j                   v rE| j                   |   }||k7  r/| j                  j                  t        t        |«      «       t        }|S | j                   j                  ||«       |S r   )r•   r”   r{   r|   ÚDEFAULT_PENru   )r!   Ú
pen_numberr   Ú	pen_colors       r#   Úswitch_current_penz!_RenderBackend.switch_current_pen
  sf   € Ø˜Ÿ™Ñ'ØŸ™ zÑ2ˆIØ�iÒØ—	‘	× Ñ ¤¬°cÓ!:Ô;Ü(�
ð Ðð �N‰N×"Ñ" :¨sÔ3ØÐr$   c                óŒ   — | j                   |k(  ry | j                  j                  d|› d�j                  «       «       || _         y )NÚSPr   )r–   r”   r{   rx   )r!   rª   s     r#   Úset_penz_RenderBackend.set_pen  s?   € Ø×Ñ˜zÒ)ØØ�	‰	×Ñ˜2˜j˜\¨Ð+×2Ñ2Ó4Ô5Ø%ˆÕr$   c                óŽ   — | j                   |k(  ry | j                  j                  d|d›d�j                  «       «       || _         y )NÚPWr‰   r   )r—   r”   r{   rx   )r!   r4   s     r#   Úset_pen_widthz_RenderBackend.set_pen_width  s@   € Ø×!Ñ! UÒ*ØØ�	‰	×Ñ˜2˜e A˜Y a˜×/Ñ/Ó1Ô2Ø!&ˆÕr$   c                óä   — t        |j                  | j                  «      }t        |j                  | j                  «      }| j                  j                  d|› d|› d�j                  «       «       y )NzPA;PUr‡   z;PM;)r‘   Úxr)   Úyr”   r{   rx   )r!   Ústart_pointr´   rµ   s       r#   Úenter_polygon_modez!_RenderBackend.enter_polygon_mode   sX   € Ü�+—-‘- ×!4Ñ!4Ó5ˆÜ�+—-‘- ×!4Ñ!4Ó5ˆØ�	‰	×Ñ˜5   1 Q C tÐ,×3Ñ3Ó5Õ6r$   c                ó:   — | j                   j                  d«       y )Ns   PM1;©r”   r{   ©r!   s    r#   Úclose_current_polygonz$_RenderBackend.close_current_polygon%  s   € Ø�	‰	×Ñ˜Õ!r$   c                ó:   — | j                   j                  d«       y )Ns   PM2;FP;r¹   rº   s    r#   Úfill_polygonz_RenderBackend.fill_polygon(  s   € Ø�	‰	×Ñ˜Õ$r$   c                óö   — |j                   }| j                  |j                  «      \  }}| j                  |j                  «      }| j                  ||«      }| j                  |«       | j                  |«       y r   )r‹   Úresolve_pen_colorrt   Úresolve_pen_widthÚ
lineweightr¬   r¯   r²   )r!   Ú
propertiesrª   r«   ÚopacityÚ	pen_widths         r#   Úset_propertiesz_RenderBackend.set_properties+  sh   € Ø—^‘^ˆ
Ø!×3Ñ3°J×4DÑ4DÓEÑˆ	�7Ø×*Ñ*¨:×+@Ñ+@ÓAˆ	Ø×,Ñ,¨Z¸ÓCˆ
Ø�‰�ZÔ Ø×Ñ˜9Õ%r$   c                óš   — | j                  |«       | j                  j                  t        || j                  | j
                  «      «       y r   )rÅ   r”   r{   Úpolyline_encoderr’   r*   )r!   ÚverticesrÂ   s      r#   Úadd_polyline_encodedz#_RenderBackend.add_polyline_encoded3  s8   € ð 	×Ñ˜JÔ'Ø�	‰	×ÑÔ)¨(°D×4GÑ4GÈÏÉÓSÕTr$   c                ó  — | j                   rM|j                  rA| j                  |«       | j                  j	                  t        || j                  «      «       y t        |j                  t        d¬«      «      }| j                  ||«       y )Né   )Úsegments)r(   Ú
has_curvesrÅ   r”   r{   Úpath_encoderr)   r¦   Ú
flatteningÚMAX_FLATTENrÉ   )r!   ÚpathrÂ   Úpointss       r#   Úadd_pathz_RenderBackend.add_path9  sc   € Ø�;Š;˜4Ÿ?š?Ø×Ñ 
Ô+Ø�I‰I×Ñœ\¨$°×0CÑ0CÓDÕEä˜$Ÿ/™/¬+À˜/ÓBÓCˆFØ×%Ñ% f¨jÕ9r$   c                ó~   — t         j                  j                  | «      }|t        k(  rt        }|t        | dd «      fS )Né   é	   )r   ÚRGBÚfrom_hexÚWHITEÚBLACKÚalpha_to_opacity)rt   r   s     r#   r¿   z _RenderBackend.resolve_pen_colorA  s9   € ä�j‰j×!Ñ! %Ó(ˆØ”%Š<ÜˆCØÔ$ U¨1¨Q ZÓ0Ð0Ð0r$   c                óÈ  — 	 | j                   |   S # t        $ r 	 | j                  }Y nw xY w| j                  }|t        j
                  k(  rI| j                  r$t        | j                  |«      | j                  z  }n| j                  }t        |d«      }n>|t        j                  k(  r+t        t        || j                  | j                  «      d«      }|| j                   |<   |S ©NrW   )r™   ÚKeyErrorr    r�   r   rœ   r›   r6   rš   r‘   ÚRELATIVEÚmap_lineweight_to_stroke_widthrŸ   rž   )r!   r4   Ústroke_widthÚpolicys       r#   rÀ   z _RenderBackend.resolve_pen_widthH  sÞ   € ð	3Ø×+Ñ+¨EÑ2Ð2øÜò 	3ØØ×2Ñ2ŠLð	3úð ×'Ñ'ˆØÔ%×.Ñ.Ò.Ø×&Ò&Ü˜D×/Ñ/°Ó7¸$×:QÑ:QÑQ‘à×+Ñ+�Ü  ¨›?‰LØÔ'×0Ñ0Ò0Ü Ü.Ø˜4×0Ñ0°$×2GÑ2Góð ó	ˆLð +7ˆ× Ñ  Ñ'ØÐs   ‚ ‘*©*c                 ó   — y r   r„   )r!   rt   s     r#   Úset_backgroundz_RenderBackend.set_background_  s   € àr$   c                ó*   — | j                  |g|«       y r   ©rÉ   )r!   ÚposrÂ   s      r#   Ú
draw_pointz_RenderBackend.draw_pointc  s   € Ø×!Ñ! 3 %¨Õ4r$   c                ó,   — | j                  ||g|«       y r   ræ   )r!   ÚstartÚendrÂ   s       r#   Ú	draw_linez_RenderBackend.draw_linef  s   € Ø×!Ñ! 5¨# ,°
Õ;r$   c                ój   — t        |«      }t        |«      dk(  ry |D ]  }| j                  ||«       Œ y ©Nr   )r¦   ÚlenrÉ   )r!   ÚlinesrÂ   Úlines       r#   Údraw_solid_linesz_RenderBackend.draw_solid_linesi  s5   € ô �U“ˆÜˆu‹:˜Š?ØÛˆDØ×%Ñ% d¨JÕ7ñ r$   c                óp   — |j                  «       D ]#  }t        |«      dk(  rŒ| j                  ||«       Œ% y rî   )Ú	sub_pathsrï   rÓ   )r!   rÑ   rÂ   Úsub_paths       r#   Ú	draw_pathz_RenderBackend.draw_pathr  s0   € ØŸ™Ö(ˆHÜ�8‹} Ò!ØØ�M‰M˜( JÕ/ñ )r$   c                ó.  — t        |«      }t        |«      dk(  ry | j                  |d   j                  «       |D ]H  }|j	                  «       D ]3  }t        |«      dk(  rŒ| j                  ||«       | j                  «        Œ5 ŒJ | j                  «        y rî   )r¦   rï   r·   rê   rô   rÓ   r»   r½   )r!   ÚpathsrÂ   Úprõ   s        r#   Údraw_filled_pathsz _RenderBackend.draw_filled_pathsx  s‚   € ô �U“ˆÜˆu‹:˜Š?ØØ×Ñ  a¡§¡Ô/ÛˆAØŸK™KžM�Ü�x“= AÒ%ØØ—‘˜h¨
Ô3Ø×*Ñ*Õ,ñ	 *ð ð 	×ÑÕr$   c                ó–   — |j                  «       }|r7| j                  |d   «       | j                  ||«       | j                  «        y y rî   )rÈ   r·   rÉ   r½   )r!   rÒ   rÂ   Úpoints2ds       r#   Údraw_filled_polygonz"_RenderBackend.draw_filled_polygon‡  sF   € ð  &Ÿ™Ó0ˆÙØ×#Ñ# H¨Q¡KÔ0Ø×%Ñ% h°
Ô;Ø×ÑÕð r$   c                 ó   — y r   r„   )r!   Ú
image_datarÂ   s      r#   Ú
draw_imagez_RenderBackend.draw_image�  ó   € Ør$   c                ó¦   — |j                   | _         |j                  r#|j                  dz  dz  }t        d|«      | _        |j                  | _        y )Ngffffff9@i,  r�   )r�   rš   r6   r›   )r!   ÚconfigÚmin_lineweight_mms      r#   Ú	configurez_RenderBackend.configure“  sM   € Ø!'×!9Ñ!9ˆÔØ× Ò à &× 5Ñ 5¸Ñ <¸sÑ BÐÜ"% dÐ,=Ó">ˆDÔØ"(×";Ñ";ˆÕr$   c                 ó   — y r   r„   rº   s    r#   Úclearz_RenderBackend.clear›  r  r$   c                 ó   — y r   r„   rº   s    r#   Úfinalizez_RenderBackend.finalizež  r  r$   c                 ó   — y r   r„   )r!   ÚentityrÂ   s      r#   Úenter_entityz_RenderBackend.enter_entity¡  r  r$   c                 ó   — y r   r„   )r!   r  s     r#   Úexit_entityz_RenderBackend.exit_entity¤  r  r$   N)
rD   r\   r&   r]   r)   r^   r*   r^   rZ   r[   )rD   r\   rZ   r[   rƒ   )rª   r^   r   r‚   rZ   r^   )rª   r^   rZ   r[   )r4   ÚfloatrZ   r[   )r¶   r   rZ   r[   rY   )rÂ   r   rZ   r[   )rÈ   úIterable[Vec2]rÂ   r   )rÑ   r   rÂ   r   )rt   r   rZ   ztuple[colors.RGB, float])r4   r  rZ   r  )rt   r   rZ   r[   )rç   r   rÂ   r   rZ   r[   )rê   r   rë   r   rÂ   r   rZ   r[   )rð   zIterable[tuple[Vec2, Vec2]]rÂ   r   rZ   r[   )rÑ   r   rÂ   r   rZ   r[   )rø   zIterable[BkPath2d]rÂ   r   rZ   r[   )rÒ   r   rÂ   r   rZ   r[   )rÿ   r   rÂ   r   rZ   r[   )r  r   rZ   r[   ) r`   ra   rb   rc   r    r˜   rC   r¬   r¯   r²   r·   r»   r½   rÅ   rÉ   rÓ   Ústaticmethodr¿   rÀ   rä   rè   rì   rò   rö   rú   rý   r   r  r  r	  r  r  r„   r$   r#   rA   rA   Á   s4  „ ñð( ØØñ-
àð-
ð "ð	-
ð ð-
ð ð-
ð 
ó-
ó^'ó
0ó
ó&ó'ó7ó
"ó%ó&ðUØ&ðUØ4EóUó:ð ò1ó ð1óó.ó5ó<ð8Ø0ð8Ø>Oð8à	ó8ó0ðØ'ðØ5Fðà	óð Ø ð Ø.?ð à	ó óó<óóóôr$   rA   c                óX   — t        | «      r	 t        | d«      dz  S y# t        $ r Y yw xY w)Né   r   r�   )rï   r^   Ú
ValueError)Úalphas    r#   rÛ   rÛ   ¨  s=   € ô ˆ5„zð	Ü�u˜b“> CÑ'Ð'ð øô ò 	ØØð	ús   � �	)¨)c                ó€   — t        t        | |«      |«      |z
  } ||z
  ||z
  z  }t        |t        | |z  «      z   d«      S rÝ   )r6   Úminr‘   )rÁ   rŸ   rž   rš   Úmax_lineweightÚfactors         r#   rà   rà   ³  sN   € ô ”S˜ ^Ó4°nÓEÈÑV€JØÐ!1Ñ1°nÀ~Ñ6UÑV€FÜÐ!¤E¨*°vÑ*=Ó$>Ñ>ÀÓBÐBr$   c                óD   — t        | j                  t        ¬«      «      }|S )N)Údistance)r¦   rÏ   ÚFLATTEN_MAX)rÑ   rÒ   s     r#   Úflatten_pathr  ¿  s   € Ü�$—/‘/¬;�/Ó7Ó8€FØ€Mr$   c                óà   — t        t        «      }|j                  dj                  | «      «       |j                  dj                  |«      «       |j                  t        «       t        |«      S )Nr$   )Ú	bytearrayÚPRELUDEÚextendr}   ÚEPILOGr_   )r“   ÚcommandsÚoutputs      r#   r§   r§   Ä  sL   € Ü”wÓ€FØ
‡M�M�#—(‘(˜6Ó"Ô#Ø
‡M�M�#—(‘(˜8Ó$Ô%Ø
‡M�M”&ÔÜ�‹=Ðr$   c                óZ  — |r| d|z  z  } t        | «      }|dk\  r|dz  }nt        |«      dz  dz   }t        «       }||k\  r)t        ||«      \  }}|j	                  d|z   «       ||k\  rŒ)|dk(  r|j	                  d|z   «       t        |«      S |j	                  d|z   «       t        |«      S )Nr   r   rW   é?   r%   é¿   é_   )r‘   Úabsr  Údivmodr{   r_   )ÚvalueÚ	frac_bitsr*   r´   Úcharsrˆ   s         r#   Ú	pe_encoder.  Ì  s´   € ÙØ��i‘ÑˆÜˆe‹€AØˆA‚vØ	ˆQ‰‰ä�‹F�Q‰J˜‰Nˆä‹K€EØ
ˆtŠ)Ü�a˜‹‰ˆˆ1Ø�‰�R˜!‘VÔð ˆt‹)ð ˆr‚zØ�‰�S˜1‘WÔô �‹<Ðð 	�‰�R˜!‘VÔÜ�‹<Ðr$   c                ó   — d}|dk(  rd}|r|dt        |d|«      z   z  }|dz   g}t        | «      } | d   }|j                  t        |j                  ||«      «       |j                  t        |j                  ||«      «       | dd  D ]U  }||z
  }|j                  t        |j                  ||«      «       |j                  t        |j                  ||«      «       |}ŒW |j                  d«       d	j                  |«      S )
Ns   PErM   s   PE7ó   >r   s   <=r   ó   ;r$   )r.  r¦   r{   r´   rµ   r}   )rÈ   r,  r*   r¤   r”   ÚcurrentÚvertexÚdeltas           r#   rÇ   rÇ   à  sê   € Ø
€CØˆr‚zØˆÙØˆt”i 	¨1¨dÓ3Ñ3Ñ3ˆØ�%‰Kˆ=€DÜ�H‹~€Hà�q‰k€GØ‡K�K”	˜'Ÿ)™) Y°Ó5Ô6Ø‡K�K”	˜'Ÿ)™) Y°Ó5Ô6Ø˜1˜2“,ˆà˜Ñ ˆØ�‰”I˜eŸg™g y°$Ó7Ô8Ø�‰”I˜eŸg™g y°$Ó7Ô8Ø‰ð ð 	‡K�K�ÔØ�8‰8�D‹>Ðr$   c                óæ  — | j                   }t        |j                  |«      }t        |j                  |«      }d|d›d|d›d�j	                  «       g}t
        j                  }t        | «      �rbg }| j                  «       D �],  }|j                  |z
  }	t        |	j                  |«      }
t        |	j                  |«      }|j                  t
        j                  k(  rc|
d›d|d›d�j	                  «       }|t
        j                  k(  r|d   d d dz   |z   |d<   n|j                  d|z   «       t
        j                  }�nb|j                  t
        j                  k(  r5|j                  |z
  }|j                  |z
  }d	|z  d
z  }|d	||z
  z  d
z  z   }nG|j                  t
        j                  k(  r|j                   |z
  }|j"                  |z
  }nt%        d«      ‚t        |j                  |«      }t        |j                  |«      }t        |j                  |«      }t        |j                  |«      }|d›d|d›d|d›d|d›d|
d›d|d›d�j	                  «       }|t
        j                  k(  r|d   d d dz   |z   |d<   n|j                  d|z   «       t
        j                  }|j                  }�Œ/ |j                  dj'                  |«      «       |j                  d«       dj'                  |«      S )NzPU;PAr‰   r‡   z;PD;r   éÿÿÿÿó   ,s   PRg       @g      @z/internal error: MOVE_TO command is illegal heres   BRr$   s   PU;)rê   r‘   r´   rµ   rx   r   ÚMOVE_TOrï   r#  rë   ÚtypeÚLINE_TOr{   Ú	CURVE3_TOÚctrlÚ	CURVE4_TOÚctrl1Úctrl2r  r}   )rÑ   r)   r2  r´   rµ   r”   Úprev_commandr#  r¤   r4  ÚxeÚyeÚcoordsÚcontrolrë   Ú	control_1Ú	control_2Úx1Úy1Úx2Úy2s                        r#   rÎ   rÎ   ö  s¦  € ð �j‰j€GÜˆg�i‰i˜Ó(€AÜˆg�i‰i˜Ó(€AØ�A�a�5˜˜!˜A˜˜dÐ#×*Ñ*Ó,Ð-€DÜ—?‘?€LÜ
ˆ4…yØ "ˆØ—=‘=—?ˆCØ—G‘G˜gÑ%ˆEÜ�u—w‘w Ó/ˆBÜ�u—w‘w Ó/ˆBØ�x‰xœ7Ÿ?™?Ò*Ø˜q˜6  2 a &¨Ð*×1Ñ1Ó3�Ø¤7§?¡?Ò2à#+¨B¡<°°Ð#4°tÑ#;¸fÑ#D�H˜R’Là—O‘O E¨F¡NÔ3Ü&Ÿ™’à—8‘8œw×0Ñ0Ò0Ø!Ÿh™h¨Ñ0�GØŸ'™' GÑ+�CØ # g¡°Ñ 3�IØ # c¨W°s©]Ñ&;¸cÑ&AÑ A‘IØ—X‘X¤×!2Ñ!2Ò2Ø #§	¡	¨GÑ 3�IØ #§	¡	¨GÑ 3‘Iä$Ð%VÓWÐWÜ˜9Ÿ;™;¨Ó7�Ü˜9Ÿ;™;¨Ó7�Ü˜9Ÿ;™;¨Ó7�Ü˜9Ÿ;™;¨Ó7�Ø˜q˜6  2 a &¨¨"¨Q¨¨q°°A°°a¸¸1°v¸Q¸rÀ!¸fÀAÐF×MÑMÓO�Ø¤7×#4Ñ#4Ò4à#+¨B¡<°°Ð#4°tÑ#;¸fÑ#D�H˜R’Là—O‘O E¨F¡NÔ3Ü&×0Ñ0�Ø—g‘gŠGðE #ðF 	�‰�C—H‘H˜XÓ&Ô'Ø‡K�K�ÔØ�8‰8�D‹>Ðr$   )r‹   r^   r   r‚   rZ   r_   )r  ÚstrrZ   r  )r�   gáz®Gá @)rÁ   r  rŸ   r  rž   r  rZ   r  )rÑ   r   rZ   zSequence[Vec2])r“   úSequence[bytes]r#  rL  rZ   r_   )r   r%   )r+  r  r,  r^   r*   r^   rZ   r_   )rÈ   r  r,  r^   r*   r^   rZ   r_   )rÑ   r   r)   z
int | NonerZ   r_   )AÚ
__future__r   Útypingr   r   r   r/   ÚnumpyÚnpÚezdxfr   Ú
ezdxf.mathr   r	   r
   Ú
ezdxf.pathr   Ú
type_hintsr   rK   r   r   r   r   r  r   r   rÂ   r   Ú r   r   Ú__all__ÚordÚ	SEMICOLONr   r"  r  r9   r©   r×   rÙ   rÚ   rÐ   r^   r8  ÚCMD_MOVE_TOr:  ÚCMD_LINE_TOr;  ÚCMD_CURVE3_TOr=  ÚCMD_CURVE4_TOÚRecorderr   rg   r|   rA   rÛ   rà   r  r§   r.  rÇ   rÎ   r„   r$   r#   Ú<module>r^     sb  ðõ #ß 4Ñ 4Û Û å ß 4Ñ 4Ý å ß FÓ Fß 3Ý )ß ð Ð
€á�‹H€	Ø
€Ø	€Ø€Ø€	Ø€Øˆ�
‰
�3˜˜SÓ!€Øˆ�
‰
�1�a˜Ó€Ø€ñ �'—/‘/Ó"€Ù�'—/‘/Ó"€Ù�G×%Ñ%Ó&€Ù�G×%Ñ%Ó&€ôz
�X×&Ñ&ô z
÷z!ñ !ó28ô
dÐ%ô dóNð Øð	CØð	Càð	Cð ð	Cð ó	Cóó
ôó(ð, ò.ó ñ.r$   