
    'j4                    H   d dl mZ d dlmZmZmZmZmZ d dl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mZmZ d d	lmZmZmZmZ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- d dl.m/Z/ g dZ0 ej1        d          Z2 G d de"          Z3e' G d de3                      Z4 edd edd ej5        d d          e          i          Z6d7d!Z7e' G d" d#e3                      Z8 ed$i           Z9e' G d% d&e3                      Z: ed'd( ed)          i          Z; ee;          Z<e' G d* d+e3                      Z= ed, ed           ed-           ed.           ed/          d0          Z> G d1 d2e3          Z?d8d6Z@dS )9    )annotations)TYPE_CHECKINGIterableUnionAnyOptional)Self	TypeGuardN)	validator)DXF2000DXFStructureErrorSUBCLASS_MARKER)Tags)dxftagDXFTagDXFBinaryTag)DXFAttrDXFAttributesDefSubclassRETURN_DEFAULTgroup_code_mapping)take2   )	DXFEntity
base_classSubclassProcessorDXFTagStorage)register_entity)default_copy)Auditor)DXFNamespace)AbstractTagWriter)	DXFObjectPlaceholderXRecord
VBAProjectSortEntsTableFieldis_dxf_objectezdxfc                      e Zd ZdZeZdS )r#   z5Non-graphical entities stored in the OBJECTS section.N)__name__
__module____qualname____doc__r   MIN_DXF_VERSION_FOR_EXPORT     O/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/entities/dxfobj.pyr#   r#   )   s        ??!(r2   r#   c                      e Zd ZdZdS )r$   ACDBPLACEHOLDERN)r,   r-   r.   DXFTYPEr1   r2   r3   r$   r$   /   s        GGGr2   r$   AcDbXrecordcloning     )defaultr   fixertagsr   returnIterable[DXFTag]c              #     K   | D ]:}t          |t                    r|V  t          |d         |d                   V  ;d S )Nr   r   )
isinstancer   r   )r=   tags     r3   totagsrC   G   s]       ) )c6"" 	)IIIIQQ((((((	) )r2   c                  ~     e Zd ZdZdZ eee          Z fdZ	e
fddZ	 dd fdZd fdZddZddZddZ xZS )r%   zDXF XRECORD entityXRECORDc                n    t                                                       t                      | _        d S N)super__init__r   r=   self	__class__s    r3   rI   zXRecord.__init__V   s(    FF			r2   entityr	   r>   Nonec                f    t          |t                    sJ t          | j                  |_        d S rG   )rA   r%   r   r=   rK   rM   copy_strategys      r3   	copy_datazXRecord.copy_dataZ   s+    &'*****49oor2   N	processorOptional[SubclassProcessor]r!   c                   t                                          |          }|r	 |j        d         }n&# t          $ r t	          d|j         d          w xY wd}t          |          dk    rZ| j        | j        j        t          k    r>|d         \  }}|dk    r
||_
        d}n#t                              d|j         d           t          ||d                    | _        |S )Nr   z*Missing subclass AcDbXrecord in XRecord (#)r9      z
XRecord (#z6): expected group code 280 as first tag in AcDbXrecord)rH   load_dxf_attribs
subclasses
IndexErrorr   handlelendoc
dxfversionr   r8   loggerinfor   r=   )rK   rS   dxfr=   start_indexcodevaluerL   s          r3   rX   zXRecord.load_dxf_attribs^   s    gg&&y11 	1 +A.   'NNNN   K4yy1}} 8#tx':g'E'E"&q'KD%s{{&+&'; ; ; ;   T+,,/00DI
s	   4 #A	tagwriterr"   c                <   t                                          |           |                    t          t          j                   |                    d| j        j                   |                    t          t          | j                                       d S )Nr9   )rH   export_entity
write_tag2r   acdb_xrecordnamera   r8   
write_tagsr   rC   r=   rK   re   rL   s     r3   rg   zXRecord.export_entity{   s{    i(((_l.?@@@S$("2333T&"3"34455555r2   r=   (Iterable[Union[DXFTag, tuple[int, Any]]]c                    | j                                          | j                             t          |                     dS )zReset DXF tags.N)r=   clearextendrC   rK   r=   s     r3   resetzXRecord.reset   s6    		&&&&&r2   c                T    | j                             t          |                     dS )zExtend DXF tags.N)r=   rp   rC   rq   s     r3   rp   zXRecord.extend   s$    	&&&&&r2   c                8    | j                                          dS )zRemove all DXF tags.N)r=   ro   rK   s    r3   ro   zXRecord.clear   s    	r2   rM   r	   r>   rN   rG   rS   rT   r>   r!   re   r"   r>   rN   )r=   rm   r>   rN   r>   rN   )r,   r-   r.   r/   r6   r   r   ri   
DXFATTRIBSrI   r   rR   rX   rg   rr   rp   ro   __classcell__rL   s   @r3   r%   r%   O   s        Gz<88J     5A & & & & &
 8<      :6 6 6 6 6 6' ' ' '
' ' ' '       r2   r%   AcDbVbaProjectc                  ~     e Zd ZdZdZ eee          Z fdZ	e
fddZ	 dd fdZddZd fdZddZddZ xZS )r&   zDXF VBA_PROJECT entityVBA_PROJECTc                V    t                                                       d| _        d S Nr2   )rH   rI   datarJ   s    r3   rI   zVBAProject.__init__   s$    			r2   rM   r	   r>   rN   c                L    t          |t                    sJ |j        |_        d S rG   )rA   r&   r   rP   s      r3   rR   zVBAProject.copy_data   s%    &*-----kr2   NrS   rT   r!   c                    t                                          |          }|r |                     |j        d                    |S )Nr   )rH   rX   load_byte_datarY   )rK   rS   ra   rL   s      r3   rX   zVBAProject.load_dxf_attribs   sE     gg&&y11 	9	 4Q 7888
r2   r=   r   c                    t          j         d          }d |D             D ]}|                    |           |                                | _        d S )NBc              3  :   K   | ]}|j         d k    |j        V  dS )6  N)rc   rd   ).0rB   s     r3   	<genexpr>z,VBAProject.load_byte_data.<locals>.<genexpr>   s*      GGsx3#)GGr2   )arrayrp   tobytesr   )rK   r=   
byte_array	byte_datas       r3   r   zVBAProject.load_byte_data   s\    [%%
GGtGGG 	) 	)Ii((((&&((			r2   re   r"   c                   t                                          |           |                    t          t          j                   |                    dt          | j                             |                     |           d S )NZ   )	rH   rg   rh   r   acdb_vba_projectrj   r\   r   export_datarl   s     r3   rg   zVBAProject.export_entity   sm    i(((_.>.CDDDRTY000#####r2   c                    | j         }|r9|                    t          d|d d                              |dd          }|7d S d S )Nr      )r   	write_tagr   )rK   re   r   s      r3   r   zVBAProject.export_data   sb    y 	S$tt* = =>>>:D  	 	 	 	 	r2   c                    d| _         d S r   )r   ru   s    r3   ro   zVBAProject.clear   s    			r2   rv   rG   rw   r=   r   r>   rN   rx   re   r"   ry   )r,   r-   r.   r/   r6   r   r   r   rz   rI   r   rR   rX   r   rg   r   ro   r{   r|   s   @r3   r&   r&      s          Gz+;<<J     5A " " " " "
 8<      ) ) ) )$ $ $ $ $ $          r2   r&   AcDbSortentsTableblock_record_handleJ  c                       e Zd ZdZdZ eee          Zd# fdZ	e
fd$dZ	 d%d& fdZd'dZd( fdZd)dZd*dZd+dZd,dZd Zd-d Zd#d!Zd.d"Z xZS )/r'   z.DXF SORTENTSTABLE entity - sort entities tableSORTENTSTABLEr>   rN   c                n    t                                                       t                      | _        d S rG   )rH   rI   dicttablerJ   s    r3   rI   zSortEntsTable.__init__   s(    %)VV


r2   rM   r	   c                f    t          |t                    sJ t          |j                  |_        d S rG   )rA   r'   r   r   rP   s      r3   rR   zSortEntsTable.copy_data   s-    &-00000FL))r2   NrS   rT   r!   c                    t                                          |          }|r3|                    |t          dd          }|                     |           |S )Nr   F)log)rH   rX   fast_load_dxfattribs acdb_sort_ents_table_group_codes
load_table)rK   rS   ra   r=   rL   s       r3   rX   zSortEntsTable.load_dxf_attribs   sa     gg&&y11 	"115qe 2  D OOD!!!
r2   r=   r   c                    t          |          D ]_\  }}|j        dk    rt          d|j         d          |j        dk    rt          d|j         d          |j        | j        |j        <   `d S )NK  zInvalid handle code z, expected 331   zInvalid sort handle code z, expected 5)r   rc   r   rd   r   )rK   r=   r[   sort_handles       r3   r   zSortEntsTable.load_table  s    #(;; 		9 		9FK{c!!'F6;FFF   1$$'IIII   (3'8DJv|$$		9 		9r2   re   r"   c                    t                                          |           |                    t          t          j                   |                    d| j        j                   |                     |           d S )Nr   )	rH   rg   rh   r   acdb_sort_ents_tablerj   ra   r   export_tablerl   s     r3   rg   zSortEntsTable.export_entity  sj    i(((_.B.GHHHS$(">???)$$$$$r2   c                    | j                                         D ]1\  }}|                    d|           |                    d|           2d S )Nr   r   )r   itemsrh   )rK   re   r[   r   s       r3   r   zSortEntsTable.export_table  s]    #':#3#3#5#5 	1 	1FK  f---  K0000	1 	1r2   intc                *    t          | j                  S rG   )r\   r   ru   s    r3   __len__zSortEntsTable.__len__  s    4:r2   r   c                N    t          | j                                                  S )zXYields all redraw associations as (object_handle, sort_handle)
        tuples.

        )iterr   r   ru   s    r3   __iter__zSortEntsTable.__iter__!  s     
 DJ$$&&'''r2   r[   strr   c                    || j         |<   dS )zAppend redraw association (handle, sort_handle).

        Args:
            handle: DXF entity handle (uppercase hex value without leading '0x')
            sort_handle: sort handle (uppercase hex value without leading '0x')

        N)r   )rK   r[   r   s      r3   appendzSortEntsTable.append(  s     )
6r2   c                ,    t                      | _        dS )z+Remove all handles from redraw order table.Nr   r   ru   s    r3   ro   zSortEntsTable.clear2  s    VV


r2   handlesIterable[tuple[str, str]]c                .    t          |          | _        dS )zSet all redraw associations from iterable `handles`, after removing
        all existing associations.

        Args:
            handles: iterable yielding (object_handle, sort_handle) tuples

        Nr   )rK   r   s     r3   set_handleszSortEntsTable.set_handles6  s     ']]


r2   c                    | j         dS | j         j        fd| j                                        D             | _        dS )z>Remove all handles which do not exist in the drawing database.Nc                $    i | ]\  }}|v 	||S r1   r1   )r   r[   r   entitydbs      r3   
<dictcomp>z8SortEntsTable.remove_invalid_handles.<locals>.<dictcomp>L  s4     
 
 
#!! K!!!r2   )r]   r   r   r   )rK   r   s    @r3   remove_invalid_handlesz$SortEntsTable.remove_invalid_handlesG  sV    8F8$
 
 
 
'+z'7'7'9'9
 
 



r2   c                :    	 | j         |= dS # t          $ r Y dS w xY w)zRemove handle of DXF entity from redraw order table.

        Args:
            handle: DXF entity handle (uppercase hex value without leading '0x')

        N)r   KeyError)rK   r[   s     r3   remove_handlezSortEntsTable.remove_handleR  s9    	
6""" 	 	 	DD	s    
ry   rv   rG   rw   r   rx   r   )r>   r   )r>   r   )r[   r   r   r   r>   rN   )r   r   r>   rN   )r[   r   r>   rN   )r,   r-   r.   r/   r6   r   r   r   rz   rI   r   rR   rX   r   rg   r   r   r   r   ro   r   r   r   r{   r|   s   @r3   r'   r'      sp       882 Gz+?@@J, , , , , , 5A * * * * *
 8<	 	 	 	 	 	 	
9 
9 
9 
9% % % % % %1 1 1 1
   ( ( ( () ) ) )  # # # #"	
 	
 	
 	

 
 
 
 
 
 
 
r2   r'   	AcDbFieldrW      r   )evaluator_id
field_codefield_code_overflown_child_fieldsc                  .    e Zd ZdZdZ eee          ZdS )r(   zDXF FIELD entityFIELDN)	r,   r-   r.   r/   r6   r   r   
acdb_fieldrz   r1   r2   r3   r(   r(     s*        Gz:66JJJr2   r(   rM   r   TypeGuard[DXFObject]c                p    t          | t                    rdS t          | t                    r	| j        sdS dS )zReturns ``True`` if the `entity` is a DXF object from the OBJECTS section,
    otherwise the entity is a table or class entry or a graphic entity which can
    not reside in the OBJECTS section.
    TF)rA   r#   r   is_graphic_entity)rM   s    r3   r)   r)     sA    
 &)$$ t&-(( 1I t5r2   )r=   r   r>   r?   )rM   r   r>   r   )A
__future__r   typingr   r   r   r   r   typing_extensionsr	   r
   loggingr   ezdxf.lldxfr   ezdxf.lldxf.constr   r   r   ezdxf.lldxf.tagsr   ezdxf.lldxf.typesr   r   r   ezdxf.lldxf.attributesr   r   r   r   r   ezdxf.toolsr   	dxfentityr   r   r   r   factoryr   copyr   ezdxf.auditr    ezdxf.entitiesr!   ezdxf.lldxf.tagwriterr"   __all__	getLoggerr_   r#   r$   is_in_integer_rangeri   rC   r%   r   r&   r   r   r'   r   r(   r)   r1   r2   r3   <module>r      s1   # " " " " " @ @ @ @ @ @ @ @ @ @ @ @ @ @ - - - - - - - -   ! ! ! ! ! ! I I I I I I I I I I ! ! ! ! ! ! : : : : : : : : : :                    N N N N N N N N N N N N $ $ $ $ $ $       8######++++++777777   
	7	#	#) ) ) ) )	 ) ) )          )       { 	773i3Aq99 	
 
 
 &) ) ) ) < < < < <i < < <~ ;   * * * * * * * *Z #{
 	wws||	
 
  $6#56J#K#K   E E E E EI E E EP [

gajj&wqzz!'"++  
B7 7 7 7 7I 7 7 7	 	 	 	 	 	r2   