Ë
    £èhß  ã                  óš  — d dl mZ d dlmZmZmZ d dlmZ d dlZd dl	Z
d dlmZ d dlmZ d dlmZmZmZ d dl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  d
dl!m"Z" erd dl#m$Z$ d dl%m&Z&  G d„ dejN                  «      Z(dZ) ejT                  d d d «      Z+dZ, G d„ de«      Z-dd„Z. ed¬«      dd„«       Z/edd„«       Z0d d„Z1d!d„Z2y)"é    )Úannotations)ÚIterableÚTYPE_CHECKINGÚno_type_check)Ú	lru_cacheN)Úcolors)ÚVALID_DXF_LINEWEIGHTS)ÚVec2ÚBoundingBox2dÚMatrix44)Úto_splines_and_polylinesÚ
to_hatches)Ú
BaseLayouté   )ÚColor)ÚBackendInterfaceÚBkPath2dÚ
BkPoints2dÚ	ImageData)ÚConfiguration)ÚBackendProperties)ÚDrawing)ÚSolidc                  óT   — e Zd ZdZ ej
                  «       Z ej
                  «       Zy)Ú	ColorModezÜThis enum is used to define the color output mode of the :class:`DXFBackend`.

    Attributes:
        ACI: the color is set as :ref:`ACI` and assigned by layer
        RGB: the color is set as RGB true color value

    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚenumÚautoÚACIÚRGB© ó    ú8lib/python3.12/site-packages/ezdxf/addons/drawing/dxf.pyr   r      s%   „ ñð ˆ$�)‰)‹+€Cð ˆ$�)‰)‹+�Cr%   r   gš™™™™™É?é   c                  óê   ‡ — e Zd ZdZej
                  f	 	 	 	 	 dˆ f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dd„Zd d„Zd d„Zd d„Zd d„Zˆ xZS )!Ú
DXFBackenda  The :class:`DXFBackend` creates simple DXF files of POINT, LINE, LWPOLYLINE and
    HATCH entities. This backend does ot need any additional packages.

    Args:
        layout: a DXF :class:`~ezdxf.layouts.BaseLayout`
        color_mode: see :class:`ColorMode`

    c                óæ   •— |j                   €J d«       ‚t        ‰| �	  «        || _        |j                   | _         || _        t
        | _        d| _        t        «       | _	        t        «       | _
        y )Nzvalid DXF document requiredT)ÚdocÚsuperÚ__init__ÚlayoutÚ
color_modeÚ	RGB_BLACKÚbg_colorÚ
is_dark_bgÚdictÚ_layersÚ_dxfattribs)Úselfr.   r/   Ú	__class__s      €r&   r-   zDXFBackend.__init__8   s`   ø€ ð �z‰zÐ%ÐDÐ'DÓDÐ%Ü‰ÑÔØˆŒØ—:‘:ˆŒØ$ˆŒÜ!ˆŒØˆŒÜ'+£vˆŒÜ,0«FˆÕr%   c                ó�   — t         j                  j                  |«      | _        | j                  j                  t
        k  | _        y ©N)r   r#   Úfrom_hexr1   Ú	luminanceÚDARK_COLOR_THRESHOLDr2   )r6   Úcolors     r&   Úset_backgroundzDXFBackend.set_backgroundE   s/   € ÜŸ
™
×+Ñ+¨EÓ2ˆŒØŸ-™-×1Ñ1Ô4HÑHˆ�r%   c                ó  — 	 | j                   |   S # t        $ r Y nw xY wd|d›�}|| j                   |<   | j                  j                  j	                  |«      s'| j                  j                  j                  ||¬«       |S )NÚPEN_Ú03d)r=   )r4   ÚKeyErrorr+   ÚlayersÚ	has_entryÚadd)r6   ÚpenÚ
layer_names      r&   Úget_layer_namezDXFBackend.get_layer_nameI   s}   € ð	Ø—<‘< Ñ$Ð$øÜò 	Ùð	úð ˜C ˜9Ð%ˆ
Ø&ˆ�‰�SÑØ�x‰x�‰×(Ñ(¨Ô4Ø�H‰H�O‰O×Ñ 
°#ÐÔ6ØÐs   ‚ ‘	œc                óV  — t        |«      }	 | j                  |   S # t        $ r Y nw xY w|j                  }|j                  }|dk  s|dkD  rd}|}| j
                  t        j                  k(  rt        }|| j                  |«      t        |j                  «      dœ}| j
                  t        j                  k(  rt        j                  |«      |d<   |j                  dd }|r8	 t!        |d«      dz  }t        j"                  |«      |d<   n# t$        $ r Y nw xY w|| j                  |<   |S )	Nr   éÿ   é   )r=   ÚlayerÚ
lineweightÚ
true_coloré	   é   Útransparency)Úhashr5   rB   ÚrgbrF   r/   r   r"   ÚBYLAYERrH   Úmake_lineweightrM   r#   r   Úrgb2intr=   ÚintÚfloat2transparencyÚ
ValueError)	r6   Ú
propertiesÚkeyrS   rF   ÚaciÚattribsÚalphaÚfs	            r&   Úresolve_propertieszDXFBackend.resolve_propertiesU   s,  € Ü�:Óˆð	Ø×#Ñ# CÑ(Ð(øÜò 	Ùð	úð �n‰nˆØ�n‰nˆØ�Š7�c˜C’iØˆCØˆØ�?‰?œiŸm™mÒ+ÜˆCàØ×(Ñ(¨Ó-Ü)¨*×*?Ñ*?Ó@ñ
ˆð
 �?‰?œiŸm™mÒ+Ü$*§N¡N°3Ó$7ˆG�LÑ!à× Ñ   1Ð%ˆÙðGÜ˜˜r“N SÑ(�ô +1×*CÑ*CÀAÓ*F�˜Ò'øô ò Ùðúð !(ˆ×Ñ˜ÑØˆs   � œ	(§(Ã#D Ä	DÄDc                ó¦   — d }t         }| j                  t        j                  k(  r|j                  }|j
                  }|j                  |d|¬«       y )Nr   )r=   ÚstylerS   )rT   r/   r   r#   rS   rF   Úset_solid_fill)r6   ÚhatchrZ   rS   r\   s        r&   rc   zDXFBackend.set_solid_fillv   sC   € Ø!%ˆÜˆØ�?‰?œiŸm™mÒ+Ø—.‘.ˆCØ—.‘.ˆCØ×Ñ 3¨a°SÐÕ9r%   c                ó\   — | j                   j                  || j                  |«      ¬«       y ©N©Ú
dxfattribs)r.   Ú	add_pointr`   )r6   ÚposrZ   s      r&   Ú
draw_pointzDXFBackend.draw_point~   s$   € Ø�‰×Ñ˜c¨d×.EÑ.EÀjÓ.QÐÕRr%   c                ó^   — | j                   j                  ||| j                  |«      ¬«       y rf   )r.   Úadd_liner`   )r6   ÚstartÚendrZ   s       r&   Ú	draw_linezDXFBackend.draw_line�   s&   € Ø�‰×Ñ˜U C°D×4KÑ4KÈJÓ4WÐÕXr%   c                óª   — t        |«      }t        |«      dk(  ry | j                  |«      }|D ]#  \  }}| j                  j	                  |||¬«       Œ% y )Nr   rg   )ÚlistÚlenr`   r.   rm   )r6   ÚlinesrZ   r]   rn   ro   s         r&   Údraw_solid_lineszDXFBackend.draw_solid_lines„   sR   € ô �U“ˆÜˆu‹:˜Š?ØØ×)Ñ)¨*Ó5ˆÛ‰JˆE�3Ø�K‰K× Ñ  ¨¸Ð Õ@ñ  r%   c                óð   — | j                  |«      }|j                  r.t        ||¬«      D ]  }| j                  j	                  |«       Œ y | j                  j                  |j                  «       |¬«       y rf   )r`   Ú
has_curvesr   r.   Ú
add_entityÚadd_lwpolylineÚcontrol_vertices)r6   ÚpathrZ   r]   Úentitys        r&   Ú	draw_pathzDXFBackend.draw_pathŽ   s_   € Ø×)Ñ)¨*Ó5ˆØ�?Š?Ü2°4ÀG×L�Ø—‘×&Ñ& vÕ.ñ Mð �K‰K×&Ñ& t×'<Ñ'<Ó'>È7Ð&ÕSr%   c                óè   — | j                  |«      }|D �cg c]  }|j                  «       ‘Œ }}t        ||¬«      D ]/  }| j                  j	                  |«       | j                  ||«       Œ1 y c c}w rf   )r`   Úto_pathr   r.   rx   rc   )r6   ÚpathsrZ   r]   ÚpÚpy_pathsrd   s          r&   Údraw_filled_pathszDXFBackend.draw_filled_paths–   sf   € ð ×)Ñ)¨*Ó5ˆÙ).Ó/© A�A—I‘I•K¨ˆÐ/Ü °W×=ˆEØ�K‰K×"Ñ" 5Ô)Ø×Ñ  zÕ2ñ >ùò 0s   –A/c                óÔ   — | j                   j                  | j                  |«      ¬«      }|j                  j	                  |j                  «       d¬«       | j                  ||«       y )Nrg   T)Ú	is_closed)r.   Ú	add_hatchr`   r€   Úadd_polyline_pathÚverticesrc   )r6   ÚpointsrZ   rd   s       r&   Údraw_filled_polygonzDXFBackend.draw_filled_polygonŸ   sT   € ð —‘×%Ñ%°×1HÑ1HÈÓ1TÐ%ÓUˆØ�‰×%Ñ% f§o¡oÓ&7À4Ð%ÔHØ×Ñ˜E :Õ.r%   c                 ó   — y r9   r$   )r6   Ú
image_datarZ   s      r&   Ú
draw_imagezDXFBackend.draw_image¦   ó   € Ør%   c                 ó   — y r9   r$   )r6   Úconfigs     r&   Ú	configurezDXFBackend.configure©   rŽ   r%   c                 ó   — y r9   r$   ©r6   s    r&   ÚclearzDXFBackend.clear¬   rŽ   r%   c                 ó   — y r9   r$   r“   s    r&   ÚfinalizezDXFBackend.finalize¯   rŽ   r%   c                 ó   — y r9   r$   )r6   r|   rZ   s      r&   Úenter_entityzDXFBackend.enter_entity²   rŽ   r%   c                 ó   — y r9   r$   )r6   r|   s     r&   Úexit_entityzDXFBackend.exit_entityµ   rŽ   r%   )r.   r   r/   r   ÚreturnÚNone)r=   r   r›   rœ   )rF   rW   r›   Ústr)rZ   r   r›   r3   )rZ   r   r›   rœ   )rj   r
   rZ   r   r›   rœ   )rn   r
   ro   r
   rZ   r   r›   rœ   )rt   zIterable[tuple[Vec2, Vec2]]rZ   r   r›   rœ   )r{   r   rZ   r   r›   rœ   )r€   zIterable[BkPath2d]rZ   r   r›   rœ   )r‰   r   rZ   r   r›   rœ   )rŒ   r   rZ   r   r›   rœ   )r�   r   r›   rœ   )r›   rœ   )r   r   r   r   r   r#   r-   r>   rH   r`   rc   rk   rp   ru   r}   rƒ   rŠ   r�   r‘   r”   r–   r˜   rš   Ú__classcell__)r7   s   @r&   r)   r)   .   sÐ   ø„ ñð ;D¿-¹-ð3Ø ð3Ø.7ð3à	õ3óIó
óóB:óSóYðAØ0ðAØ>OðAà	óAóTð3Ø'ð3Ø5Fð3à	ó3ð/Ø ð/Ø.?ð/à	ó/óóóóó÷r%   r)   c                ó2   — t        j                  | dz  «      S )NrJ   )r   rX   )r^   s    r&   Úalpha_to_transparencyr    ¹   s   € Ü×$Ñ$ U¨S¡[Ó1Ð1r%   )Úmaxsizec                óX   — t        | dz  «      }t        D ]  }||k  sŒ	|c S  t        d   S )Néd   éÿÿÿÿ)rW   r	   )ÚwidthÚ	width_intÚlws      r&   rU   rU   ½   s3   € ä�E˜C‘KÓ €Iß#ˆØ˜‹?ØŠIð $ô ! Ñ$Ð$r%   c                óì   — |j                   j                  |j                   j                  df| j                  d<   |j                  j                  |j                  j                  df| j                  d<   y )Nr   z$EXTMINz$EXTMAX)ÚextminÚxÚyÚheaderÚextmax)r+   Úbboxs     r&   Úupdate_extentsr¯   Æ   sL   € à!Ÿ[™[Ÿ]™]¨D¯K©K¯M©M¸1Ð=€C‡J�JˆyÑØ!Ÿ[™[Ÿ]™]¨D¯K©K¯M©M¸1Ð=€C‡J�JˆyÒr%   c                ó4  — |j                   dz  }|dz  }| j                  «       }|j                  |j                  |j                  fdd¬«       |j                  ||j                  |j                  f|j                  |j                   j                  d¬«       y )Ng      D@g      à?)r   r   r   r   Úmm)ÚsizeÚmarginsÚunitsé   )Úcenterr²   Úview_center_pointÚview_heightÚstatus)r²   Ú
paperspaceÚ
page_setuprª   r«   Úadd_viewportr¶   )r+   r®   Úpsp_sizeÚ
psp_centerÚpsps        r&   Úsetup_paperspacerÀ   Ì   s   € Ø�y‰y˜4Ñ€HØ˜C‘€JØ
�.‰.Ó
€CØ‡N�N˜Ÿ™ X§Z¡ZÐ0¸,Èd€NÔSØ×ÑØØ�j‰j˜(Ÿ*™*Ð%ØŸ+™+Ø—I‘I—K‘KØð õ r%   c                ó–   — |j                  «       }| j                  |d   |d   |d   |d   gdt        j                  |«      i¬«      }|S )Nr   r   é   rµ   rN   rg   )Úrect_verticesÚ	add_solidr   rV   )Úmspr®   r=   ÚvÚbgs        r&   Úadd_backgroundrÈ   Ú   sV   € Ø×ÑÓ€AØ	�‰Ø	
ˆ1‰ˆq�‰t�Q�q‘T˜1˜Q™4Ð ¨l¼F¿N¹NÈ5Ó<QÐ-Rð 
ó 
€Bð €Ir%   )r^   rW   r›   Úfloat)r¥   rÉ   r›   rW   )r+   r   r®   r   r›   rœ   )r+   r   r®   r   )rÅ   r   r®   r   r=   z
colors.RGBr›   r   )3Ú
__future__r   Útypingr   r   r   Ú	functoolsr   r    ÚnumpyÚnpÚezdxfr   Úezdxf.lldxf.constr	   Ú
ezdxf.mathr
   r   r   Ú
ezdxf.pathr   r   Úezdxf.layoutsr   Ú
type_hintsr   Úbackendr   r   r   r   r�   r   rZ   r   Úezdxf.documentr   Úezdxf.entitiesr   ÚEnumr   r<   r#   r0   rT   r)   r    rU   r¯   rÀ   rÈ   r$   r%   r&   Ú<module>rÙ      sÀ   ðõ #ß 9Ñ 9Ý Û Û å Ý 3ß 4Ñ 4ß ;Ý $å ß FÓ FÝ !Ý )áÝ&Ý$ô�—	‘	ô ð  Ð ØˆF�J‰J�q˜!˜QÓ€	Ø
€ôHÐ!ô HóV2ñ �4Ôò%ó ð%ð ò>ó ð>ó
ôr%   