Ë
    £èh¾   ã                  óô   — 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
mZmZmZ d dlmZ ddlmZ d dlZerd d	lmZ d d
l	mZ d dlmZ d dlmZ ddgZ ej4                  d«      Z G d„ de«      ZdddœZdd„Zy)é    )Úannotations)ÚTYPE_CHECKINGÚIterableÚCallableÚOptional)ÚSelf)ÚfactoryÚ
DXFGraphicÚSeqEndÚ	DXFEntity)Úconsté   )Údefault_copyN)ÚDrawing)r   )ÚEntityDB)ÚxrefÚentity_linkerÚLinkedEntitiesÚezdxfc                  óª   ‡ — e Zd ZdZdˆ fd„Zefdd„Zdd„Zdd„Zd„ Z	dd„Z
dd„Zdd	„Zd
„ Zddˆ fd„Zd„ Zddˆ fd„Zdˆ fd„Zdˆ fd„Zdˆ fd„Zˆ xZS )r   z¤Super class for common features of the INSERT and the POLYLINE entity.
    Both have linked entities like the VERTEX or ATTRIB entity and a
    SEQEND entity.

    c                ó>   •— t         ‰| �  «        g | _        d | _        y ©N)ÚsuperÚ__init__Ú_sub_entitiesÚseqend©ÚselfÚ	__class__s    €ú8lib/python3.12/site-packages/ezdxf/entities/subentity.pyr   zLinkedEntities.__init__   s   ø€ Ü‰ÑÔØ/1ˆÔØ(,ˆ�ó    c                óè   — t        |t        «      sJ ‚| j                  D �cg c]  }|j                  |«      ‘Œ c}|_        | j                  r!|j                  | j                  «      |_        yyc c}w )z1Copy all sub-entities ands SEQEND. (internal API)N)Ú
isinstancer   r   Úcopyr   )r   ÚentityÚcopy_strategyÚes       r    Ú	copy_datazLinkedEntities.copy_data#   si   € ä˜&¤.Ô1Ð1Ð1à+/×+=Ò+=ó 
Ù+= aˆM×Ñ˜qÕ!Ð+=ñ 
ˆÔð �;Š;Ø)×.Ñ.¨t¯{©{Ó;ˆF�Mð ùò 
s   ¡A/c                óÒ   — t        |t        «      sJ ‚|j                  | j                  j                  | j                  j
                  «       | j                  j                  |«       y)zLink VERTEX to ATTRIB entities.N)r#   r
   Ú	set_ownerÚdxfÚhandleÚ
paperspacer   Úappend)r   r%   s     r    Úlink_entityzLinkedEntities.link_entity,   sH   € ä˜&¤*Ô-Ð-Ð-Ø×Ñ˜Ÿ™Ÿ™¨$¯(©(×*=Ñ*=Ô>Ø×Ñ×!Ñ! &Õ)r!   c                ó¨   — | j                   j                  |j                   _        | j                  �| j                  j                  «        || _        y)z"Link SEQEND entity. (internal API)N)r+   Úownerr   Údestroy)r   r   s     r    Úlink_seqendzLinkedEntities.link_seqend2   s7   € àŸ8™8Ÿ>™>ˆ�
‰
ÔØ�;‰;Ð"Ø�K‰K×ÑÔ!Øˆ�r!   c                ó>   — | j                   €| j                  «        yy)zCreate always a SEQEND entity.N)r   Ú
new_seqend©r   s    r    Úpost_bind_hookzLinkedEntities.post_bind_hook9   s   € à�;‰;ÐØ�O‰OÕð r!   c              #  ón   K  — | j                   E d{  –—†  | j                  r| j                  –— yy7 Œ ­w)z2Yields all sub-entities and SEQEND. (internal API)N)r   r   r6   s    r    Úall_sub_entitieszLinkedEntities.all_sub_entities>   s0   è ø€ à×%Ñ%×%Ð%Ø�;Š;Ø—+‘+Óð ð 	&ús   ‚5’3“!5c                óX   — | j                  «       D ]  }|j                  sŒ ||«       Œ y)z;Call `func` for all sub-entities and SEQEND. (internal API)N)r9   Úis_alive)r   Úfuncr%   s      r    Úprocess_sub_entitiesz#LinkedEntities.process_sub_entitiesD   s#   € à×+Ñ+Ö-ˆFØ�‹Ù�V•ñ .r!   c                óœ   ‡ ‡— dˆˆ fd„}‰ j                   r‰ j                   j                  s‰ j                  «        ‰ j                  |«       y)zxAdd sub-entities (VERTEX, ATTRIB, SEQEND) to entity database `db`,
        called from EntityDB. (internal API)
        c                óJ   •— ‰j                   | _         ‰j                  | «       y r   )ÚdocÚadd)r%   Údbr   s    €€r    rA   z8LinkedEntities.add_sub_entities_to_entitydb.<locals>.addO   s   ø€ ØŸ™ˆFŒJØ�F‰F�6�Nr!   N)r%   r   )r   r;   r5   r=   )r   rB   rA   s   `` r    Úadd_sub_entities_to_entitydbz+LinkedEntities.add_sub_entities_to_entitydbJ   s5   ù€ ö
	ð �{Š{ $§+¡+×"6Ò"6Ø�O‰OÔØ×!Ñ! #Õ&r!   c                óÞ   — d| j                   j                  i}| j                  r"t        j                  d|| j                  «      }nt        j
                  d|«      }| j                  |«       y)z*Create and bind new SEQEND. (internal API)ÚlayerÚSEQENDN)r+   rE   r@   r	   Úcreate_db_entryÚnewr3   )r   Úattribsr   s      r    r5   zLinkedEntities.new_seqendW   sQ   € à˜DŸH™HŸN™NÐ+ˆØ�8Š8Ü×,Ñ,¨X°wÀÇÁÓI‰Fä—[‘[ ¨7Ó3ˆFØ×Ñ˜Õ r!   c                óF   •— t         ‰| �  ||«       | j                  «        y)z8Set owner of all sub-entities and SEQEND. (internal API)N)r   r*   Útake_ownership)r   r1   r-   r   s      €r    r*   zLinkedEntities.set_owner`   s    ø€ ô
 	‰Ñ˜% Ô,Ø×ÑÕr!   c                óä   — | j                   j                  }| j                   j                  }| j                  «       D ]1  }|j                  sŒ||j                   _        ||j                   _        Œ3 y)z=Take ownership of all sub-entities and SEQEND. (internal API)N)r+   r,   r-   r9   r;   r1   )r   r,   r-   r%   s       r    rK   zLinkedEntities.take_ownershiph   sP   € à—‘—‘ˆØ—X‘X×(Ñ(ˆ
Ø×+Ñ+Ö-ˆFØ�‹Ø#)�—
‘
Ô Ø(2�—
‘
Õ%ñ .r!   c                óN   •‡— | j                  ˆfd„«       t        ‰| �	  ‰«       y)zqRemove all dependencies from current document to bind entity to
        `other` document. (internal API)
        c                ó&   •— | j                  ‰«      S r   )Úremove_dependencies)r'   Úothers    €r    Ú<lambda>z4LinkedEntities.remove_dependencies.<locals>.<lambda>u   s   ø€ ¨A×,AÑ,AÀ%Ô,Hr!   N)r=   r   rO   )r   rP   r   s    `€r    rO   z"LinkedEntities.remove_dependenciesq   s!   ù€ ð 	×!Ñ!Ó"HÔIÜ‰Ñ# EÕ*r!   c                ój   •— | j                   sy| j                  d„ ¬«       | `| `t        ‰| �  «        y)z Destroy all data and references.Nc                ó"   — | j                  «       S r   )r2   )r'   s    r    rQ   z(LinkedEntities.destroy.<locals>.<lambda>}   s
   € °·±´r!   )r<   )r;   r=   r   r   r   r2   r   s    €r    r2   zLinkedEntities.destroyx   s4   ø€ à�}Š}Øà×!Ñ!Ñ'<Ð!Ô=ØÐØˆKÜ‰‰Õr!   c                óN   •‡— t         ‰| �  ‰«       | j                  ˆfd„«       y)z5Register required resources to the resource registry.c                ó&   •— | j                  ‰«      S r   )Úregister_resources)r'   Úregistrys    €r    rQ   z3LinkedEntities.register_resources.<locals>.<lambda>…   s   ø€ ¨A×,@Ñ,@ÀÔ,Jr!   N)r   rV   r=   )r   rW   r   s    `€r    rV   z!LinkedEntities.register_resources‚   s   ù€ ä‰Ñ" 8Ô,Ø×!Ñ!Ó"JÕKr!   c                óÎ   •— t        |t        «      sJ ‚t        ‰| �  ||«       t	        | j                  «       |j                  «       «      D ]  \  }}|j                  ||«       Œ y)z3Translate resources from self to the copied entity.N)r#   r   r   Úmap_resourcesÚzipr9   )r   ÚcloneÚmappingÚsourceÚ_cloner   s        €r    rY   zLinkedEntities.map_resources‡   sZ   ø€ ä˜%¤Ô0Ð0Ð0Ü‰Ñ˜e WÔ-Ü! $×"7Ñ"7Ó"9¸5×;QÑ;QÓ;SÖT‰NˆF�FØ× Ñ  ¨Õ1ñ Ur!   )ÚreturnÚNone)r%   r   r_   r`   )r%   r   r_   r`   )r   r   r_   r`   )r_   zIterable[DXFEntity])r<   zCallable[[DXFEntity], None])rB   r   r_   r`   )r   )r1   zOptional[str]r-   Úintr   )rP   zOptional[Drawing])rW   zxref.Registryr_   r`   )r[   r   r\   zxref.ResourceMapperr_   r`   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r(   r/   r3   r7   r9   r=   rC   r5   r*   rK   rO   r2   rV   rY   Ú__classcell__)r   s   @r    r   r      s_   ø„ ñõ-ð
 5Aô <ó*óòó
óó'ò!öò3ö+õõL÷
2ñ 2r!   ÚATTRIBÚVERTEX)ÚINSERTÚPOLYLINEc                 ó    ‡‡— dŠdŠdˆˆfd„} | S )zCreate an DXF entities linker.NÚ c                óœ  •— | j                  «       }d}‰�Md}|dk(  r‰j                  | «       dŠ|S |‰k(  r‰j                  | «       |S t        j                  d|› d�«      ‚|t
        v r1|dk(  r| j                  j                  dd	«      s	 |S | Št
        |   Š|S |d
k(  r+| j                  j                  €t        j                  d«       |S )a  Collect and link entities which are linked to a parent entity:

        - VERTEX -> POLYLINE
        - ATTRIB -> INSERT

        Args:
             entity: examined DXF entity

        Returns:
             True if `entity` is linked to a parent entity

        FNTrF   zExpected DXF entity z
 or SEQENDri   Úattribs_followr   ÚMTEXTzƒFound attached MTEXT entity. Please open an issue at github: https://github.com/mozman/ezdxf/issues and provide a DXF example file.)Údxftyper3   r/   r   ÚDXFStructureErrorÚLINKED_ENTITIESr+   Úgetr,   ÚloggerÚerror)r%   rp   Úare_linked_entitiesÚexpected_dxftypeÚmain_entitys      €€r    Úentity_linker_z%entity_linker.<locals>.entity_linker_—   s  ø€ ð —~‘~Ó'ˆð $ÐØÐ"ð #'ÐØ˜(Ò"Ø×'Ñ'¨Ô/à"�ðN #Ð"ðG Ð,Ò,Ø×'Ñ'¨Ô/ðD #Ð"ôA ×-Ñ-Ø*¨7¨)°:Ð>óð ð œÑ'à˜(Ò"¨6¯:©:¯>©>Ð:JÈAÔ+Nð ð #Ð"ð %�Ü#2°7Ñ#;Ð ð #Ð"ð ˜Ò  v§z¡z×'8Ñ'8Ð'@Ü�L‰Lð ôð
 #Ð"r!   )r%   r   r_   Úbool© )ry   rw   rx   s    @@r    r   r   ’   s   ù€ à'+€KØÐö@#ðD Ðr!   )r_   zCallable[[DXFEntity], bool])Ú
__future__r   Útypingr   r   r   r   Útyping_extensionsr   Úezdxf.entitiesr	   r
   r   r   Úezdxf.lldxfr   r$   r   ÚloggingÚezdxf.documentr   Úezdxf.entitydbr   r   r   Ú__all__Ú	getLoggerrt   r   rr   r   r{   r!   r    Ú<module>r†      sq   ðõ #ß >Ó >Ý "ç AÓ AÝ Ý Û áÝ&Ý(Ý'Ýð Ð,Ð
-€Ø	ˆ×	Ñ	˜7Ó	#€ôu2�Zô u2ðp &°8Ñ<€ôGr!   