
    Og                        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)	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     ]/var/www/html/public_html/myphp/venv/lib/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`     zz%D'DD%::$!'+v,0F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14H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xx((4HHOO
#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(( 		 nnnn7cCiC??imm+C((-)**?*?@

 ??imm+$*NN3$7GL!  1%GrNS( +1*C*CA*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    !%??imm+..C..C3aS9r%   c                \    | j                   j                  || j                  |             y N
dxfattribs)r.   	add_pointr`   )r6   posrZ   s      r&   
draw_pointzDXFBackend.draw_point~   s$    cd.E.Ej.QRr%   c                ^    | j                   j                  ||| j                  |             y rf   )r.   add_liner`   )r6   startendrZ   s       r&   	draw_linezDXFBackend.draw_line   s&    UCD4K4KJ4W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   sY     Uu:?))*5 	AJE3KK   @	A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   sc    ))*5??24GL /&&v./ KK&&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   sj     ))*5)./AAIIK//W= 	3EKK""5)z2	3 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     %%1H1H1T%U%%foo&74%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'35F3	3/ /.?/	/r%   r)   c                2    t        j                  | dz        S )NrJ   )r   rX   )r^   s    r&   alpha_to_transparencyr      s    $$US[11r%   )maxsizec                X    t        | dz        }t        D ]  }||k  s	|c S  t        d   S )Nd   )rW   r	   )width	width_intlws      r&   rU   rU      s8    ECK 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    ![[]]DKKMM1=CJJy![[]]DKKMM1=CJJy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    yy4HCJ
..
CNNXZZ0,dNSjj(**%++IIKK  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tQqT1Q4 lFNN5<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 ! )&$		    FJJq!Q	
H! HV2 4% % > >
r%   