Ë
    £èhS!  ã                  ó²   — d dl mZ d dlmZmZm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 erd dlmZ d d	lmZ d d
lmZmZmZmZmZmZ dgZ G d„ d«      Zy)é    )Úannotations)ÚTYPE_CHECKINGÚUnionÚOptional)ÚTags)ÚDXFStructureError)ÚACAD_XDICTIONARYÚXDICT_HANDLE_CODEÚAPP_DATA_MARKERé   )Údefault_copy)ÚDrawing)ÚAbstractTagWriter)Ú
DictionaryÚ	DXFEntityÚ	DXFObjectÚPlaceholderÚDictionaryVarÚXRecordÚExtensionDictc                  ó  — e Zd ZdZdZdd„Zedd„«       Zed d„«       Zd!d„Z	d!d„Z
d!d„Zd!d	„Zd
„ Zd„ Zd„ Zd"d#d„Zd$d„Zed%d„«       Zefd&d„Zed„ «       Zed„ «       Zd'd„Zed(d„«       Zd)d„Zd*d„Zd„ Zd+d,d„Zd-d„Zd.d„Zd/d„Z d0d„Z!y)1r   aP  Stores extended data of entities in app data 'ACAD_XDICTIONARY', app
    data contains just one entry to a hard-owned DICTIONARY objects, which is
    not shared with other entities, each entity copy has its own extension
    dictionary and the extension dictionary is destroyed when the owner entity
    is deleted from database.

    ©Ú_xdictc                ó   — || _         y ©Nr   ©ÚselfÚxdicts     ú4lib/python3.12/site-packages/ezdxf/entities/xdict.pyÚ__init__zExtensionDict.__init__,   s   € ð ˆ�ó    c                óf   — | j                   }|€J d«       ‚t        |t        «      rJ d|› d�«       ‚|S )zBReturns the underlying :class:`~ezdxf.entities.Dictionary` object.údestroyed extension dictionaryzdictionary handle #z not resolved)r   Ú
isinstanceÚstrr   s     r   Ú
dictionaryzExtensionDict.dictionary1   sC   € ð —‘ˆØÐ ÐBÐ"BÓBÐ Ü˜e¤SÔ)ÐUÐ-@ÀÀÀ}Ð+UÓUÐ)Øˆr!   c                óB   — | j                   j                  j                  S )zaReturns the handle of the underlying :class:`~ezdxf.entities.Dictionary`
        object.
        )r&   ÚdxfÚhandle©r   s    r   r)   zExtensionDict.handle9   s   € ð
 �‰×"Ñ"×)Ñ)Ð)r!   c                ó    — | j                   |   S )zGet self[key].©r&   ©r   Úkeys     r   Ú__getitem__zExtensionDict.__getitem__@   s   € à�‰˜sÑ#Ð#r!   c                ó"   — || j                   |<   y)a	  Set self[key] to value.

        Only DXF objects stored in the OBJECTS section are allowed as content
        of the extension dictionary. DXF entities stored in layouts are not
        allowed.

        Raises:
            DXFTypeError: invalid DXF type

        Nr,   )r   r.   Úvalues      r   Ú__setitem__zExtensionDict.__setitem__D   s   € ð  %ˆ�‰˜Òr!   c                ó   — | j                   |= y)z-Delete self[key], destroys referenced entity.Nr,   r-   s     r   Ú__delitem__zExtensionDict.__delitem__Q   s   € à�O‰O˜CÑ r!   c                ó   — || j                   v S )zReturn `key` in self.r,   r-   s     r   Ú__contains__zExtensionDict.__contains__U   s   € à�d—o‘oÐ%Ð%r!   c                ó,   — t        | j                  «      S )z.Returns count of extension dictionary entries.)Úlenr&   r*   s    r   Ú__len__zExtensionDict.__len__Y   s   € ä�4—?‘?Ó#Ð#r!   c                ó6   — | j                   j                  «       S )z=Returns a :class:`KeysView` of all extension dictionary keys.)r&   Úkeysr*   s    r   r;   zExtensionDict.keys]   s   € à�‰×#Ñ#Ó%Ð%r!   c                ó6   — | j                   j                  «       S )z²Returns an :class:`ItemsView` for all extension dictionary entries as
        (key, entity) pairs. An entity can be a handle string if the entity
        does not exist.
        )r&   Úitemsr*   s    r   r=   zExtensionDict.itemsa   s   € ð
 �‰×$Ñ$Ó&Ð&r!   Nc                ó:   — | j                   j                  ||«      S )z(Return extension dictionary entry `key`.)r&   Úget)r   r.   Údefaults      r   r?   zExtensionDict.geth   s   € à�‰×"Ñ" 3¨Ó0Ð0r!   c                ó8   — | j                   j                  |«      S )z)Discard extension dictionary entry `key`.)r&   Údiscardr-   s     r   rB   zExtensionDict.discardl   s   € à�‰×&Ñ& sÓ+Ð+r!   c                óL   — |j                   j                  |d¬«      } | |«      S )NT©ÚownerÚ
hard_owned)ÚobjectsÚadd_dictionary)ÚclsÚowner_handleÚdocr   s       r   ÚnewzExtensionDict.newp   s-   € à—‘×*Ñ*Øàð +ó 
ˆñ
 �5‹zÐr!   c                óN   — |j                  | j                  «      }t        |«      S )zXDeep copy of the extension dictionary all entries are virtual
        entities.
        )Úcopyr&   r   )r   Úcopy_strategyÚ	new_xdicts      r   rN   zExtensionDict.copyy   s#   € ð "×&Ñ& t§¡Ó7ˆ	Ü˜YÓ'Ð'r!   c                ó   — | j                   duS )znReturns ``True`` if the underlying :class:`~ezdxf.entities.Dictionary`
        object is not deleted.
        Nr   r*   s    r   Úis_alivezExtensionDict.is_alive€   s   € ð �{‰{ $Ð&Ð&r!   c                óX   — | j                   }|�t        |t        «      ry|j                  S )zrReturns ``True`` if the underlying :class:`~ezdxf.entities.Dictionary`
        really exist and is valid.
        F)r   r$   r%   rR   r   s     r   Úhas_valid_dictionaryz"ExtensionDict.has_valid_dictionaryˆ   s(   € ð
 —‘ˆØˆ=œJ u¬cÔ2ØØ�~‰~Ðr!   c                ó`   — | j                   sJ d«       ‚|| j                  j                  _        y)zrUpdate owner tag of underlying :class:`~ezdxf.entities.Dictionary`
        object.

        Internal API.
        r#   N)rR   r&   r(   rE   )r   r)   s     r   Úupdate_ownerzExtensionDict.update_owner’   s(   € ð �}Š}Ð>Ð>Ó>ˆ}Ø$*ˆ�‰×ÑÕ!r!   c                ó’   — |€J ‚t        |«      dk7  s|d   j                  t        k7  rt        d«      ‚ | |d   j                  «      S )Né   r   zACAD_XDICTIONARY error.)r8   Úcoder
   r   r1   )rI   Útagss     r   Ú	from_tagszExtensionDict.from_tags›   sJ   € àÐÐÐô ˆt‹9˜Š>˜T !™WŸ\™\Ô->Ò>Ü#Ð$=Ó>Ð>Ù�4˜‘7—=‘=Ó!Ð!r!   c                ó€   — | j                   }t        |t        «      sJ ‚|j                  j	                  |«      | _         y r   )r   r$   r%   Úentitydbr?   )r   rK   r)   s      r   Úload_resourceszExtensionDict.load_resources¤   s1   € Ø—‘ˆÜ˜&¤#Ô&Ð&Ð&Ø—l‘l×&Ñ& vÓ.ˆ�r!   c                ó  — | j                   €J ‚| j                   }t        |t        «      r|n|j                  j                  }|j                  t        t        «       |j                  t        |«       |j                  t        d«       y )NÚ})	r   r$   r%   r(   r)   Ú
write_tag2r   r	   r
   )r   Ú	tagwriterr   r)   s       r   Ú
export_dxfzExtensionDict.export_dxf©   sg   € Ø�{‰{Ð&Ð&Ð&Ø—‘ˆÜ$ U¬CÔ0‘°e·i±i×6FÑ6FˆØ×Ñœ_Ô.>Ô?Ø×ÑÔ.°Ô7Ø×Ñœ_¨cÕ2r!   c                ó^   — | j                   r| j                  j                  «        d| _        y)zBDestroy the underlying :class:`~ezdxf.entities.Dictionary` object.N)rT   r   Údestroyr*   s    r   re   zExtensionDict.destroy±   s"   € à×$Ò$Ø�K‰K×ÑÔ!Øˆ�r!   c                ó´   — | j                   }|j                  }|€J d«       ‚|j                  j                  |j                  j
                  |¬«      }|||<   |S )znCreate a new :class:`~ezdxf.entities.Dictionary` object as
        extension dictionary entry `name`.
        úvalid DXF document requiredrD   )r&   rK   rG   rH   r(   r)   )r   ÚnamerF   r&   rK   Únew_dicts         r   rH   zExtensionDict.add_dictionary·   s`   € ð —_‘_ˆ
Ø�n‰nˆØˆÐ=Ð =Ó=ˆØ—;‘;×-Ñ-Ø—.‘.×'Ñ'Ø!ð .ó 
ˆð $ˆ
�4ÑØˆr!   c                ó°   — | j                   }|j                  }|€J d«       ‚|j                  j                  |j                  j
                  «      }|||<   |S )zkCreate a new :class:`~ezdxf.entities.XRecord` object as
        extension dictionary entry `name`.
        rg   )r&   rK   rG   Úadd_xrecordr(   r)   )r   rh   r&   rK   Úxrecords        r   rk   zExtensionDict.add_xrecordÅ   sS   € ð —_‘_ˆ
Ø�n‰nˆØˆÐ=Ð =Ó=ˆØ—+‘+×)Ñ)¨*¯.©.×*?Ñ*?Ó@ˆØ"ˆ
�4ÑØˆr!   c                ó²   — | j                   }|j                  }|€J d«       ‚|j                  j                  |j                  j
                  |«      }|||<   |S )zqCreate a new :class:`~ezdxf.entities.DictionaryVar` object as
        extension dictionary entry `name`.
        rg   )r&   rK   rG   Úadd_dictionary_varr(   r)   )r   rh   r1   r&   rK   Údict_vars         r   rn   z ExtensionDict.add_dictionary_varÐ   sU   € ð —_‘_ˆ
Ø�n‰nˆØˆÐ=Ð =Ó=ˆØ—;‘;×1Ñ1°*·.±.×2GÑ2GÈÓOˆØ#ˆ
�4ÑØˆr!   c                ó°   — | j                   }|j                  }|€J d«       ‚|j                  j                  |j                  j
                  «      }|||<   |S )zoCreate a new :class:`~ezdxf.entities.Placeholder` object as
        extension dictionary entry `name`.
        rg   )r&   rK   rG   Úadd_placeholderr(   r)   )r   rh   r&   rK   Úplaceholders        r   rq   zExtensionDict.add_placeholderÛ   sT   € ð —_‘_ˆ
Ø�n‰nˆØˆÐ=Ð =Ó=ˆØ—k‘k×1Ñ1°*·.±.×2GÑ2GÓHˆØ&ˆ
�4ÑØÐr!   c                ó<   — | j                   j                  ||«       y)aB  Link `obj` to the extension dictionary as entry `name`.

        Linked objects are owned by the extensions dictionary and therefore
        cannot be a graphical entity, which have to be owned by a
        :class:`~ezdxf.layouts.BaseLayout`.

        Raises:
            DXFTypeError: `obj` has invalid DXF type

        N)r&   Úlink_dxf_object)r   rh   Úobjs      r   rt   zExtensionDict.link_dxf_objectæ   s   € ð 	�‰×'Ñ'¨¨cÕ2r!   )r   zUnion[str, Dictionary])Úreturnr   )rv   r%   )r.   r%   r   )r.   r%   rv   zOptional[DXFEntity])r.   r%   rv   ÚNone)rJ   r%   rK   r   )rv   r   )r)   r%   rv   rw   )rZ   r   )rK   r   rv   rw   )rb   r   rv   rw   )T)rh   r%   rF   Úboolrv   r   )rh   r%   rv   r   )rh   r%   r1   r%   rv   r   )rh   r%   rv   r   )rh   r%   ru   r   rv   rw   )"Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r    Úpropertyr&   r)   r/   r2   r4   r6   r9   r;   r=   r?   rB   ÚclassmethodrL   r   rN   rR   rT   rV   r[   r^   rc   re   rH   rk   rn   rq   rt   © r!   r   r   r   !   sï   „ ñð €Ióð
 òó ðð ò*ó ð*ó$ó%ó!ó&ò$ò&ò'ô1ó,ð òó ðð ".ô (ð ñ'ó ð'ð ñó ðó+ð ò"ó ð"ó/ó
3òôó	ó	ó	ô3r!   N)Ú
__future__r   Útypingr   r   r   Úezdxf.lldxf.tagsr   Úezdxf.lldxf.constr   r	   r
   r   rN   r   Úezdxf.documentr   Úezdxf.lldxf.tagwriterr   Úezdxf.entitiesr   r   r   r   r   r   Ú__all__r   r€   r!   r   Ú<module>r‰      sN   ðõ #ß 1Ñ 1Ý !Ý /÷ñ õ
 áÝ&Ý7÷÷ ð Ð
€÷P3ò P3r!   