
    'j                        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j'                  Z(dZ) ej*        d d d           Z+dZ, G d de          Z-d,dZ. ed          d-d            Z/ed.d$            Z0d/d%Z1d0d+Z2dS )1    )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                  N    e Zd ZdZ ej                    Z ej                    ZdS )	ColorModezThis 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     R/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/addons/drawing/dxf.pyr   r      s6          $)++C $)++CCCr%   r   g?   c                       e Zd ZdZej        fd1 fdZd2dZd3dZd4dZ	d5dZ
d6dZd7dZd8dZd9d Zd:d#Zd;d&Zd<d)Zd=d,Zd>d-Zd>d.Zd>d/Zd>d0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`

    layoutr   
color_moder   returnNonec                   |j         
J d            t                                                       || _        |j         | _         || _        t
          | _        d| _        t                      | _	        t                      | _
        d S )Nzvalid DXF document requiredT)docsuper__init__r*   r+   	RGB_BLACKbg_color
is_dark_bgdict_layers_dxfattribs)selfr*   r+   	__class__s      r&   r1   zDXFBackend.__init__8   st     z%%'D%%%:$!'+vv,0FFr%   colorr   c                    t           j                            |          | _        | j        j        t
          k     | _        d S N)r   r#   from_hexr3   	luminanceDARK_COLOR_THRESHOLDr4   )r8   r:   s     r&   set_backgroundzDXFBackend.set_backgroundE   s/    
++E22-14HHr%   penintstrc                    	 | j         |         S # t          $ r Y nw xY wd|d}|| j         |<   | j        j                            |          s!| j        j                            ||           |S )NPEN_03d)r:   )r6   KeyErrorr/   layers	has_entryadd)r8   rA   
layer_names      r&   get_layer_namezDXFBackend.get_layer_nameI   s    	<$$ 	 	 	D	 &C%%%
&Sx((44 	7HO
#666s    

propertiesr   r5   c                0   t          |          }	 | j        |         S # t          $ r Y nw xY w|j        }|j        }|dk     s|dk    rd}|}| j        t          j        k    rt          }|| 	                    |          t          |j                  d}| j        t          j        k    rt          j        |          |d<   |j        dd         }|r<	 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)hashr7   rG   rgbrA   r+   r   r"   BYLAYERrL   make_lineweightrR   r#   r   rgb2intr:   rB   float2transparency
ValueError)	r8   rM   keyrX   rA   aciattribsalphafs	            r&   resolve_propertieszDXFBackend.resolve_propertiesU   sV   :	#C(( 	 	 	D	 nn77cCiiC?im++C((--)**?@@
 

 ?im++$*N3$7$7GL! 1% 	GGrNNS( +1*CA*F*F''     !(s    
++C< <
D	D	c                    d }t           }| j        t          j        k    r|j        }|j        }|                    |d|           d S )Nr   )r:   stylerX   )rY   r+   r   r#   rX   rA   set_solid_fill)r8   hatchrM   rX   r_   s        r&   rf   zDXFBackend.set_solid_fillv   sJ    !%?im++.C.C3aS99999r%   posr
   c                d    | j                             ||                     |                     d S N
dxfattribs)r*   	add_pointrc   )r8   rh   rM   s      r&   
draw_pointzDXFBackend.draw_point~   s1    cd.E.Ej.Q.QRRRRRr%   startendc                f    | j                             |||                     |                     d S rj   )r*   add_linerc   )r8   ro   rp   rM   s       r&   	draw_linezDXFBackend.draw_line   s3    UCD4K4KJ4W4WXXXXXr%   linesIterable[tuple[Vec2, Vec2]]c                    t          |          }t          |          dk    rd S |                     |          }|D ]"\  }}| j                            |||           #d S )Nr   rk   )listlenrc   r*   rr   )r8   rt   rM   r`   ro   rp   s         r&   draw_solid_lineszDXFBackend.draw_solid_lines   sw     Uu::??F))*55 	A 	AJE3K   @@@@	A 	Ar%   pathr   c                    |                      |          }|j        r0t          ||          D ]}| j                            |           d S | j                            |                                |           d S rj   )rc   
has_curvesr   r*   
add_entityadd_lwpolylinecontrol_vertices)r8   rz   rM   r`   entitys        r&   	draw_pathzDXFBackend.draw_path   s    ))*55? 	T24GLLL / /&&v..../ / K&&t'<'<'>'>7&SSSSSr%   pathsIterable[BkPath2d]c                    |                      |          }d |D             }t          ||          D ]2}| j                            |           |                     ||           3d S )Nc                6    g | ]}|                                 S r$   )to_path).0ps     r&   
<listcomp>z0DXFBackend.draw_filled_paths.<locals>.<listcomp>   s     ///AAIIKK///r%   rk   )rc   r   r*   r}   rf   )r8   r   rM   r`   py_pathsrg   s         r&   draw_filled_pathszDXFBackend.draw_filled_paths   s     ))*55/////W=== 	3 	3EK""5)))z2222	3 	3r%   pointsr   c                    | j                             |                     |                    }|j                            |                                d           |                     ||           d S )Nrk   T)	is_closed)r*   	add_hatchrc   r   add_polyline_pathverticesrf   )r8   r   rM   rg   s       r&   draw_filled_polygonzDXFBackend.draw_filled_polygon   sk     %%1H1H1T1T%UU%%foo&7&74%HHHE:.....r%   
image_datar   c                    d S r<   r$   )r8   r   rM   s      r&   
draw_imagezDXFBackend.draw_image       r%   configr   c                    d S r<   r$   )r8   r   s     r&   	configurezDXFBackend.configure   r   r%   c                    d S r<   r$   r8   s    r&   clearzDXFBackend.clear   r   r%   c                    d S r<   r$   r   s    r&   finalizezDXFBackend.finalize   r   r%   c                    d S r<   r$   )r8   r   rM   s      r&   enter_entityzDXFBackend.enter_entity   r   r%   c                    d S r<   r$   )r8   r   s     r&   exit_entityzDXFBackend.exit_entity   r   r%   )r*   r   r+   r   r,   r-   )r:   r   r,   r-   )rA   rB   r,   rC   )rM   r   r,   r5   )rM   r   r,   r-   )rh   r
   rM   r   r,   r-   )ro   r
   rp   r
   rM   r   r,   r-   )rt   ru   rM   r   r,   r-   )rz   r   rM   r   r,   r-   )r   r   rM   r   r,   r-   )r   r   rM   r   r,   r-   )r   r   rM   r   r,   r-   )r   r   r,   r-   )r,   r-   )r   r   r   r   r   r#   r1   r@   rL   rc   rf   rn   rs   ry   r   r   r   r   r   r   r   r   r   __classcell__)r9   s   @r&   r)   r)   .   s         ;D-3 3 3 3 3 3 3I I I I
 
 
 
   B: : : :S S S SY Y Y YA A A AT T T T3 3 3 3/ / / /                      r%   r)   ra   rB   r,   floatc                0    t          j        | dz            S )NrO   )r   r\   )ra   s    r&   alpha_to_transparencyr      s    $US[111r%   )maxsizewidthc                h    t          | dz            }t          D ]}||k    r|c S t          d         S )Nd   )rB   r	   )r   	width_intlws      r&   rZ   rZ      sD    ECK  I#  ??III  $$r%   r/   r   bboxr   r-   c                    |j         j        |j         j        df| j        d<   |j        j        |j        j        df| j        d<   d S )Nr   z$EXTMINz$EXTMAX)extminxyheaderextmax)r/   r   s     r&   update_extentsr      s>    ![]DKM1=CJy![]DKM1=CJyr%   c                    |j         dz  }|dz  }|                                 }|                    |j        |j        fdd           |                    ||j        |j        f|j        |j         j        d           d S )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    y4HCJ
..

CNNXZ0,dNSSSj(*%+IK      r%   mspr   r:   
colors.RGBr   c                    |                                 }|                     |d         |d         |d         |d         gdt          j        |          i          }|S )Nr   r      r   rS   rk   )rect_vertices	add_solidr   r[   )r   r   r:   vbgs        r&   add_backgroundr      s_    A		
1qtQqT1Q4 lFN5<Q<Q-R 
 
 
B Ir%   )ra   rB   r,   r   )r   r   r,   rB   )r/   r   r   r   r,   r-   )r/   r   r   r   )r   r   r   r   r:   r   r,   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   rM   r   ezdxf.documentr   ezdxf.entitiesr   Enumr   r?   r#   r2   rY   r)   r   rZ   r   r   r   r$   r%   r&   <module>r      sf   # " " " " " 9 9 9 9 9 9 9 9 9 9                  3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 ; ; ; ; ; ; ; ; $ $ $ $ $ $       F F F F F F F F F F F F ! ! ! ! ! ! ) ) ) ) ) ) %&&&&&&$$$$$$    	      FJq!Q	
H H H H H! H H HV2 2 2 2 4% % % % > > > >
        r%   