
    h                        S SK Jr  S SKJrJrJr  S SKJr  S SKrS SK	r
S SKJr  S SKJr  S SKJrJrJr  S SKJrJr  S S	KJr  S
SKJr  S
SKJrJrJrJr  S
SKJ r   S
SK!J"r"  \(       a  S SK#J$r$  S SK%J&r&   " S S\RN                  5      r(Sr)\RT                  " S S S 5      r+Sr, " S S\5      r-SS jr.\" SS9SS j5       r/\SS j5       r0S S jr1S!S jr2g)"    )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                  \    \ rS rSrSr\R                  " 5       r\R                  " 5       rSr	g)	ColorMode   zThis 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____firstlineno____doc__enumautoACIRGB__static_attributes__r       J/var/www/html/env/lib/python3.13/site-packages/ezdxf/addons/drawing/dxf.pyr   r      s!     ))+C ))+Cr(   r   g?   c                    ^  \ rS rSrSr\R                  4     SU 4S jjjrSS jrSS jr	SS jr
SS jrSS jrSS	 jr      SS
 jrSS jr      SS jr      SS jrS S jrS!S jrS"S jrS"S jrS"S jrS"S jrSrU =r$ )#
DXFBackend.   zThe :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                   > UR                   c   S5       e[        TU ]	  5         Xl        UR                   U l         X l        [
        U l        SU l        [        5       U l	        [        5       U l
        g )Nzvalid DXF document requiredT)docsuper__init__layout
color_mode	RGB_BLACKbg_color
is_dark_bgdict_layers_dxfattribs)selfr2   r3   	__class__s      r)   r1   DXFBackend.__init__8   s\     zz%D'DD%::$!'+v,0Fr(   c                    [         R                  R                  U5      U l        U R                  R                  [
        :  U l        g N)r   r&   from_hexr5   	luminanceDARK_COLOR_THRESHOLDr6   )r:   colors     r)   set_backgroundDXFBackend.set_backgroundE   s/    

++E2--114HHr(   c                    U R                   U   $ ! [         a     Of = fSUS 3nX R                   U'   U R                  R                  R	                  U5      (       d#  U R                  R                  R                  X!S9  U$ )NPEN_03d)rB   )r8   KeyErrorr/   layers	has_entryadd)r:   pen
layer_names      r)   get_layer_nameDXFBackend.get_layer_nameI   s|    	<<$$ 		 C9%
&Sxx((44HHOO
6s    
c                n   [        U5      n U R                  U   $ ! [         a     Of = fUR                  nUR                  nUS:  d  US:  a  SnUnU R
                  [        R                  :X  a  [        nUU R                  U5      [        UR                  5      S.nU R
                  [        R                  :X  a  [        R                  " U5      US'   UR                  SS nU(       a:   [!        US5      S-  n[        R"                  " U5      US'   O! [$         a     Of = fX`R                  U'   U$ )	Nr         )rB   layer
lineweight
true_color	      transparency)hashr9   rH   rgbrL   r3   r   r%   BYLAYERrN   make_lineweightrT   r&   r   rgb2intrB   intfloat2transparency
ValueError)	r:   
propertieskeyrZ   rL   aciattribsalphafs	            r)   resolve_propertiesDXFBackend.resolve_propertiesU   s*   :	##C(( 		 nnnn7cCiC??imm+C((-)**?*?@

 ??imm+$*NN3$7GL!  1%GrNS( +1*C*CA*F'   !(s    
)).D 
D$#D$c                    S n[         nU R                  [        R                  :X  a  UR                  nUR
                  nUR                  USUS9  g )Nr   )rB   stylerZ   )r[   r3   r   r&   rZ   rL   set_solid_fill)r:   hatchra   rZ   rc   s        r)   rk   DXFBackend.set_solid_fillv   sC    !%??imm+..C..C3aS9r(   c                T    U R                   R                  XR                  U5      S9  g N
dxfattribs)r2   	add_pointrg   )r:   posra   s      r)   
draw_pointDXFBackend.draw_point~   s"    c.E.Ej.QRr(   c                V    U R                   R                  XU R                  U5      S9  g ro   )r2   add_linerg   )r:   startendra   s       r)   	draw_lineDXFBackend.draw_line   s$    UD4K4KJ4WXr(   c                    [        U5      n[        U5      S:X  a  g U R                  U5      nU H  u  pEU R                  R	                  XEUS9  M!     g )Nr   rp   )listlenrg   r2   rw   )r:   linesra   rd   rx   ry   s         r)   draw_solid_linesDXFBackend.draw_solid_lines   sN     Uu:?))*5JEKK   @  r(   c                    U R                  U5      nUR                  (       a,  [        XS9 H  nU R                  R	                  U5        M      g U R                  R                  UR                  5       US9  g ro   )rg   
has_curvesr   r2   
add_entityadd_lwpolylinecontrol_vertices)r:   pathra   rd   entitys        r)   	draw_pathDXFBackend.draw_path   s]    ))*5??24L&&v. M KK&&t'<'<'>7&Sr(   c                    U R                  U5      nU Vs/ s H  oDR                  5       PM     nn[        XSS9 H/  nU R                  R	                  U5        U R                  Xb5        M1     g s  snf ro   )rg   to_pathr   r2   r   rk   )r:   pathsra   rd   ppy_pathsrl   s          r)   draw_filled_pathsDXFBackend.draw_filled_paths   s`     ))*5)./AIIK/=EKK""5)2 > 0s   A.c                    U R                   R                  U R                  U5      S9nUR                  R	                  UR                  5       SS9  U R                  X25        g )Nrp   T)	is_closed)r2   	add_hatchrg   r   add_polyline_pathverticesrk   )r:   pointsra   rl   s       r)   draw_filled_polygonDXFBackend.draw_filled_polygon   sR     %%1H1H1T%U%%foo&74%HE.r(   c                    g r>   r   )r:   
image_datara   s      r)   
draw_imageDXFBackend.draw_image       r(   c                    g r>   r   )r:   configs     r)   	configureDXFBackend.configure   r   r(   c                    g r>   r   r:   s    r)   clearDXFBackend.clear   r   r(   c                    g r>   r   r   s    r)   finalizeDXFBackend.finalize   r   r(   c                    g r>   r   )r:   r   ra   s      r)   enter_entityDXFBackend.enter_entity   r   r(   c                    g r>   r   )r:   r   s     r)   exit_entityDXFBackend.exit_entity   r   r(   )r9   r8   r5   r3   r/   r6   r2   )r2   r   r3   r   returnNone)rB   r   r   r   )rL   r^   r   str)ra   r   r   r7   )ra   r   r   r   )rs   r
   ra   r   r   r   )rx   r
   ry   r
   ra   r   r   r   )r   zIterable[tuple[Vec2, Vec2]]ra   r   r   r   )r   r   ra   r   r   r   )r   zIterable[BkPath2d]ra   r   r   r   )r   r   ra   r   r   r   )r   r   ra   r   r   r   )r   r   r   r   )r   r   )r   r   r    r!   r"   r   r&   r1   rC   rN   rg   rk   rt   rz   r   r   r   r   r   r   r   r   r   r   r'   __classcell__)r;   s   @r)   r,   r,   .   s     ;D--3 3.73	3 3I
B:SYA0A>OA	AT3'35F3	3/ /.?/	/ r(   r,   c                4    [         R                  " U S-  5      $ )NrQ   )r   r_   )re   s    r)   alpha_to_transparencyr      s    $$US[11r(   )maxsizec                \    [        U S-  5      n[         H  nX::  d  M
  Us  $    [        S   $ )Nd   )r^   r	   )width	width_intlws      r)   r\   r\      s1    ECK I#?I $ !$$r(   c                    UR                   R                  UR                   R                  S4U R                  S'   UR                  R                  UR                  R                  S4U R                  S'   g )Nr   z$EXTMINz$EXTMAX)extminxyheaderextmax)r/   bboxs     r)   update_extentsr      sL    ![[]]DKKMM1=CJJy![[]]DKKMM1=CJJyr(   c                (   UR                   S-  nUS-  nU R                  5       nUR                  UR                  UR                  4SSS9  UR                  UUR                  UR                  4UR                  UR                   R                  SS9  g )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    yy4HCJ
..
CNNXZZ0,dNSjj(**%++IIKK  r(   c                    UR                  5       nU R                  US   US   US   US   /S[        R                  " U5      0S9nU$ )Nr   r      r   rU   rp   )rect_vertices	add_solidr   r]   )mspr   rB   vbgs        r)   add_backgroundr      sV    A		
1qtQqT1Q4 lFNN5<Q-R 
 
B Ir(   )re   r^   r   float)r   r   r   r^   )r/   r   r   r   r   r   )r/   r   r   r   )r   r   r   r   rB   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   ra   r   ezdxf.documentr   ezdxf.entitiesr   Enumr   rA   r&   r4   r[   r,   r   r\   r   r   r   r   r(   r)   <module>r      s    # 9 9     3 4 4 ; $  F F ! )&$		    JJq!Q	
H! HV2 4% % > >
r(   