
    Og4                       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jb                  d      Z2 G d de"      Z3e' G d de3             Z4 edd edd ejj                  d d      e      i      Z6d0d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+      d,      Z> G d- d.e3      Z?d1d/Z@y)2    )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y)r#   z5Non-graphical entities stored in the OBJECTS section.N)__name__
__module____qualname____doc__r   MIN_DXF_VERSION_FOR_EXPORT     Z/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/entities/dxfobj.pyr#   r#   )   s    ?!(r2   r#   c                      e Zd ZdZy)r$   ACDBPLACEHOLDERN)r,   r-   r.   DXFTYPEr1   r2   r3   r$   r$   /   s    Gr2   r$   AcDbXrecordcloning     )defaultr   fixerc              #  l   K   | D ]+  }t        |t              r| t        |d   |d          - y w)Nr   r   )
isinstancer   r   )tagstags     r3   totagsrA   G   s9      )c6"IQQ((	)s   24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                @    t         |           t               | _        y N)super__init__r   r?   self	__class__s    r3   rG   zXRecord.__init__V   s    F	r2   c                \    t        |t              sJ t        | j                        |_        y rE   )r>   r%   r   r?   rI   entitycopy_strategys      r3   	copy_datazXRecord.copy_dataZ   s!    &'***499or2   c                   t         |   |      }|r	 |j                  d   }d}t        |      dkD  rc| j                  | j                  j                  t        k\  r:|d   \  }}|dk(  r
||_
        d}n#t        j                  d|j
                   d       t        ||d        | _        |S # t        $ r t	        d|j
                   d      w xY w)Nr   z*Missing subclass AcDbXrecord in XRecord (#)r9      z
XRecord (#z6): expected group code 280 as first tag in AcDbXrecord)rF   load_dxf_attribs
subclasses
IndexErrorr   handlelendoc
dxfversionr   r8   loggerinfor   r?   )rI   	processordxfr?   start_indexcodevaluerJ   s          r3   rS   zXRecord.load_dxf_attribs^   s     g&y1 ++A.
 K4y1} 88#txx':':g'E"&q'KD%s{&+&'( 5: ; T+,/0DI
)  '@AN s   B+ +#Cc                   t         |   |       |j                  t        t        j
                         |j                  d| j                  j                         |j                  t        t        | j                                     y )Nr9   )rF   export_entity
write_tag2r   acdb_xrecordnamer]   r8   
write_tagsr   rA   r?   rI   	tagwriterrJ   s     r3   rb   zXRecord.export_entity{   s\    i(_l.?.?@S$(("2"23T&"345r2   c                    | j                   j                          | j                   j                  t        |             y)zReset DXF tags.N)r?   clearextendrA   rI   r?   s     r3   resetzXRecord.reset   s&    				&r2   c                L    | j                   j                  t        |             y)zExtend DXF tags.N)r?   rk   rA   rl   s     r3   rk   zXRecord.extend   s    		&r2   c                8    | j                   j                          y)zRemove all DXF tags.N)r?   rj   rI   s    r3   rj   zXRecord.clear   s    		r2   rM   r	   returnNonerE   r\   zOptional[SubclassProcessor]rr   r!   rh   r"   rr   rs   )r?   z(Iterable[Union[DXFTag, tuple[int, Any]]]rr   rs   rr   rs   )r,   r-   r.   r/   r6   r   r   rd   
DXFATTRIBSrG   r   rO   rS   rb   rm   rk   rj   __classcell__rJ   s   @r3   r%   r%   O   sU    Gz<8J 5A &
 8<4	: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                0    t         |           d| _        y Nr2   )rF   rG   datarH   s    r3   rG   zVBAProject.__init__   s    	r2   c                J    t        |t              sJ |j                  |_        y rE   )r>   r&   r   rL   s      r3   rO   zVBAProject.copy_data   s    &*---kkr2   c                f    t         |   |      }|r| j                  |j                  d          |S )Nr   )rF   rS   load_byte_datarT   )rI   r\   r]   rJ   s      r3   rS   zVBAProject.load_dxf_attribs   s5     g&y1	 4 4Q 78
r2   c                    t        j                   d      }d |D        D ]  }|j                  |        |j                         | _        y )NBc              3  T   K   | ]   }|j                   d k(  s|j                   " yw)6  N)r_   r`   ).0r@   s     r3   	<genexpr>z,VBAProject.load_byte_data.<locals>.<genexpr>   s     Gsxx3#))Gs   (()arrayrk   tobytesr   )rI   r?   
byte_array	byte_datas       r3   r   zVBAProject.load_byte_data   sB    [[%
GtG 	)Ii(	)&&(	r2   c                    t         |   |       |j                  t        t        j
                         |j                  dt        | j                               | j                  |       y )NZ   )	rF   rb   rc   r   acdb_vba_projectre   rW   r   export_datarg   s     r3   rb   zVBAProject.export_entity   sM    i(_.>.C.CDRTYY0#r2   c                n    | j                   }|r'|j                  t        d|d d              |dd  }|r&y y )Nr      )r   	write_tagr   )rI   rh   r   s      r3   r   zVBAProject.export_data   s9    yyS$t* =>:D r2   c                    d| _         y r~   )r   rp   s    r3   rj   zVBAProject.clear   s	    	r2   rq   rE   rt   r?   r   rr   rs   ru   rh   r"   rv   )r,   r-   r.   r/   r6   r   r   r   rw   rG   r   rO   rS   r   rb   r   rj   rx   ry   s   @r3   r&   r&      sV     Gz+;<J 5A "
 8<4	)$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SORTENTSTABLEc                @    t         |           t               | _        y rE   )rF   rG   dicttablerH   s    r3   rG   zSortEntsTable.__init__   s    %)V
r2   c                \    t        |t              sJ t        |j                        |_        y rE   )r>   r'   r   r   rL   s      r3   rO   zSortEntsTable.copy_data   s"    &-000FLL)r2   c                ~    t         |   |      }|r*|j                  |t        dd      }| j	                  |       |S )Nr   F)log)rF   rS   fast_load_dxfattribs acdb_sort_ents_table_group_codes
load_table)rI   r\   r]   r?   rJ   s       r3   rS   zSortEntsTable.load_dxf_attribs   sI     g&y1115qe 2 D OOD!
r2   c                   t        |      D ]x  \  }}|j                  dk7  rt        d|j                   d      |j                  dk7  rt        d|j                   d      |j                  | j                  |j                  <   z y )NK  zInvalid handle code z, expected 331   zInvalid sort handle code z, expected 5)r   r_   r   r`   r   )rI   r?   rV   sort_handles       r3   r   zSortEntsTable.load_table  s    #(; 		9FK{{c!'*6;;-~F  1$'/}LI  (3'8'8DJJv||$		9r2   c                    t         |   |       |j                  t        t        j
                         |j                  d| j                  j                         | j                  |       y )Nr   )	rF   rb   rc   r   acdb_sort_ents_tablere   r]   r   export_tablerg   s     r3   rb   zSortEntsTable.export_entity  sO    i(_.B.G.GHS$((">">?)$r2   c                    | j                   j                         D ])  \  }}|j                  d|       |j                  d|       + y )Nr   r   )r   itemsrc   )rI   rh   rV   r   s       r3   r   zSortEntsTable.export_table  sC    #'::#3#3#5 	1FK  f-  K0	1r2   c                ,    t        | j                        S rE   )rW   r   rp   s    r3   __len__zSortEntsTable.__len__  s    4::r2   c                H    t        | j                  j                               S )zXYields all redraw associations as (object_handle, sort_handle)
        tuples.

        )iterr   r   rp   s    r3   __iter__zSortEntsTable.__iter__!  s    
 DJJ$$&''r2   c                "    || j                   |<   y)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   )rI   rV   r   s      r3   appendzSortEntsTable.append(  s     )

6r2   c                "    t               | _        y)z+Remove all handles from redraw order table.Nr   r   rp   s    r3   rj   zSortEntsTable.clear2  s    V
r2   c                $    t        |      | _        y)zSet all redraw associations from iterable `handles`, after removing
        all existing associations.

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

        Nr   )rI   handless     r3   set_handleszSortEntsTable.set_handles6  s     ']
r2   c                    | j                   y| j                   j                  }| j                  j                         D ci c]  \  }}||v r|| c}}| _        yc c}}w )z>Remove all handles which do not exist in the drawing database.N)rX   entitydbr   r   )rI   r   rV   r   s       r3   remove_invalid_handlesz$SortEntsTable.remove_invalid_handlesG  s]    8888$$ (,zz'7'7'9
#! K

 
s   Ac                >    	 | j                   |= y# t        $ r Y y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)rI   rV   s     r3   remove_handlezSortEntsTable.remove_handleR  s%    	

6" 		s    	rv   rq   rE   rt   r   ru   r   )rr   int)rr   r   )rV   strr   r   rr   rs   )r   zIterable[tuple[str, str]]rr   rs   )rV   r   rr   rs   )r,   r-   r.   r/   r6   r   r   r   rw   rG   r   rO   rS   r   rb   r   r   r   r   rj   r   r   r   rx   ry   s   @r3   r'   r'      sv    82 Gz+?@J, 5A *
 8<	4			
9%1
()#"	

r2   r'   	AcDbFieldrR      r   )evaluator_id
field_codefield_code_overflown_child_fieldsc                  &    e Zd ZdZdZ eee      Zy)r(   zDXF FIELD entityFIELDN)	r,   r-   r.   r/   r6   r   r   
acdb_fieldrw   r1   r2   r3   r(   r(     s    Gz:6Jr2   r(   c                `    t        | t              ryt        | t              r| j                  syy)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)r>   r#   r   is_graphic_entity)rM   s    r3   r)   r)     s)    
 &)$&-(1I1Ir2   )r?   r   rr   zIterable[DXFTag])rM   r   rr   zTypeGuard[DXFObject])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__	getLoggerrZ   r#   r$   is_in_integer_rangerd   rA   r%   r   r&   r   r   r'   r   r(   r)   r1   r2   r3   <module>r      s   # @ @ -   ! I I ! : :   N N $ #+7 
		7	#)	 )  )      	73i33Aq9 	
&) <i < <~   * * *Z #
 	ws|	
  $66J#K   EI E EP 
aj&qz!"+
B7I 7	r2   