
    h                        S SK Jr  S SKJrJrJrJr  S SKJr  S SK	J
r
JrJrJr  S SKJr  SSKJr  S SKr\(       a  S S	KJr  S S
K	Jr  S SKJr  S SKJr  SS/r\R4                  " S5      r " S S\5      rSSS.rSS jrg)    )annotations)TYPE_CHECKINGIterableCallableOptional)Self)factory
DXFGraphicSeqEnd	DXFEntity)const   )default_copyN)Drawing)r   )EntityDB)xrefentity_linkerLinkedEntitiesezdxfc                     ^  \ rS rSrSrSU 4S jjr\4SS jjrSS jrSS jr	S r
SS jrSS	 jrSS
 jrS rSSU 4S jjjrS rSSU 4S jjjrSU 4S jjrSU 4S jjrSU 4S jjrSrU =r$ ) r      zSuper 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U ]  5         / U l        S U l        g N)super__init___sub_entitiesseqendself	__class__s    J/var/www/html/env/lib/python3.13/site-packages/ezdxf/entities/subentity.pyr   LinkedEntities.__init__   s    /1(,    c                    [        U[        5      (       d   eU R                   Vs/ s H  o2R                  U5      PM     snUl        U R                  (       a!  UR                  U R                  5      Ul        ggs  snf )z1Copy all sub-entities ands SEQEND. (internal API)N)
isinstancer   r   copyr   )r   entitycopy_strategyes       r!   	copy_dataLinkedEntities.copy_data#   sj    &.1111+/+=+= 
+=aq!+= 
 ;;)..t{{;FM  
s   A;c                    [        U[        5      (       d   eUR                  U R                  R                  U R                  R
                  5        U R                  R                  U5        g)zLink VERTEX to ATTRIB entities.N)r%   r
   	set_ownerdxfhandle
paperspacer   append)r   r'   s     r!   link_entityLinkedEntities.link_entity,   sK    &*----$((*=*=>!!&)r#   c                    U R                   R                  UR                   l        U R                  b  U R                  R                  5         Xl        g)z"Link SEQEND entity. (internal API)N)r.   ownerr   destroy)r   r   s     r!   link_seqendLinkedEntities.link_seqend2   s5    88>>

;;"KK!r#   c                @    U R                   c  U R                  5         gg)zCreate always a SEQEND entity.N)r   
new_seqendr   s    r!   post_bind_hookLinkedEntities.post_bind_hook9   s    ;;OO r#   c              #  x   #    U R                    Sh  vN   U R                  (       a  U R                  v   gg N%7f)z2Yields all sub-entities and SEQEND. (internal API)Nr   r   r;   s    r!   all_sub_entitiesLinkedEntities.all_sub_entities>   s/     %%%%;;++  	&s   :8&:c                h    U R                  5        H  nUR                  (       d  M  U" U5        M      g)z;Call `func` for all sub-entities and SEQEND. (internal API)N)r@   is_alive)r   funcr'   s      r!   process_sub_entities#LinkedEntities.process_sub_entitiesD   s%    ++-FV .r#   c                   ^ ^ SUU 4S jjnT R                   (       a  T R                   R                  (       d  T R                  5         T R                  U5        g)zhAdd sub-entities (VERTEX, ATTRIB, SEQEND) to entity database `db`,
called from EntityDB. (internal API)
c                J   > TR                   U l         TR                  U 5        g r   )docadd)r'   dbr   s    r!   rJ   8LinkedEntities.add_sub_entities_to_entitydb.<locals>.addO   s    FJFF6Nr#   N)r'   r   )r   rC   r:   rE   )r   rK   rJ   s   `` r!   add_sub_entities_to_entitydb+LinkedEntities.add_sub_entities_to_entitydbJ   s:    
	 	 {{$++"6"6OO!!#&r#   c                    SU R                   R                  0nU R                  (       a"  [        R                  " SXR                  5      nO[        R
                  " SU5      nU R                  U5        g)z*Create and bind new SEQEND. (internal API)layerSEQENDN)r.   rP   rI   r	   create_db_entrynewr7   )r   attribsr   s      r!   r:   LinkedEntities.new_seqendW   sO    DHHNN+88,,XwIF[[73F r#   c                D   > [         TU ]  X5        U R                  5         g)z8Set owner of all sub-entities and SEQEND. (internal API)N)r   r-   take_ownership)r   r5   r0   r    s      r!   r-   LinkedEntities.set_owner`   s    
 	%,r#   c                    U R                   R                  nU R                   R                  nU R                  5        H6  nUR                  (       d  M  XR                   l        X#R                   l        M8     g)z=Take ownership of all sub-entities and SEQEND. (internal API)N)r.   r/   r0   r@   rC   r5   )r   r/   r0   r'   s       r!   rW   LinkedEntities.take_ownershiph   sN    XX((
++-F#)

 (2

% .r#   c                P   >^ U R                  U4S j5        [        TU ]	  T5        g)zaRemove all dependencies from current document to bind entity to
`other` document. (internal API)
c                &   > U R                  T5      $ r   )remove_dependencies)r)   others    r!   <lambda>4LinkedEntities.remove_dependencies.<locals>.<lambda>u   s    A,A,A%,Hr#   N)rE   r   r]   )r   r^   r    s    `r!   r]   "LinkedEntities.remove_dependenciesq   s!     	!!"HI#E*r#   c                n   > U R                   (       d  gU R                  S S9  U ?U ?[        TU ]  5         g)z Destroy all data and references.Nc                "    U R                  5       $ r   )r6   )r)   s    r!   r_   (LinkedEntities.destroy.<locals>.<lambda>}   s
    r#   )rD   )rC   rE   r   r   r   r6   r   s    r!   r6   LinkedEntities.destroyx   s4    }}!!'<!=Kr#   c                P   >^ [         TU ]  T5        U R                  U4S j5        g)z5Register required resources to the resource registry.c                &   > U R                  T5      $ r   )register_resources)r)   registrys    r!   r_   3LinkedEntities.register_resources.<locals>.<lambda>   s    A,@,@,Jr#   N)r   rh   rE   )r   ri   r    s    `r!   rh   !LinkedEntities.register_resources   s    "8,!!"JKr#   c                   > [        U[        5      (       d   e[        TU ]  X5        [	        U R                  5       UR                  5       5       H  u  p4UR                  XB5        M     g)z3Translate resources from self to the copied entity.N)r%   r   r   map_resourceszipr@   )r   clonemappingsource_cloner    s        r!   rm   LinkedEntities.map_resources   sW    %0000e-!$"7"7"95;Q;Q;STNF  1 Ur#   r?   )returnNone)r'   r   rt   ru   )r'   r   rt   ru   )r   r   rt   ru   )rt   zIterable[DXFEntity])rD   zCallable[[DXFEntity], None])rK   r   rt   ru   )r   )r5   zOptional[str]r0   intr   )r^   zOptional[Drawing])ri   zxref.Registryrt   ru   )ro   r   rp   zxref.ResourceMapperrt   ru   )__name__
__module____qualname____firstlineno____doc__r   r   r*   r2   r7   r<   r@   rE   rM   r:   r-   rW   r]   r6   rh   rm   __static_attributes____classcell__)r    s   @r!   r   r      si    -
 5A <*
'! 3+ +L
2 2r#   ATTRIBVERTEX)INSERTPOLYLINEc                 $   ^^ SmSmSUU4S jjn U $ )zCreate an DXF entities linker.N c                  > U R                  5       nSnTbP  SnUS:X  a  TR                  U 5        SmU$ UT:X  a  TR                  U 5        U$ [        R                  " SU S35      eU[
        ;   a8  US:X  a$  U R                  R                  SS	5      (       d   U$ U m[
        U   m U$ US
:X  a,  U R                  R                  c  [        R                  S5        U$ )zCollect 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

FNTrQ   zExpected DXF entity z
 or SEQENDr   attribs_followr   MTEXTzFound attached MTEXT entity. Please open an issue at github: https://github.com/mozman/ezdxf/issues and provide a DXF example file.)dxftyper7   r2   r   DXFStructureErrorLINKED_ENTITIESr.   getr/   loggererror)r'   r   are_linked_entitiesexpected_dxftypemain_entitys      r!   entity_linker_%entity_linker.<locals>.entity_linker_   s    ~~' $" #'("''/"N #"G ,,''/D #"A --*7):>  '("6::>>:JA+N+N  #" %#27#;  #"  vzz'8'8'@LL 
 #"r#   )r'   r   rt   bool )r   r   r   s    @@r!   r   r      s#    '+K@# @#D r#   )rt   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__	getLoggerr   r   r   r   r   r#   r!   <module>r      so    # > > " A A   &(' ,
-			7	#u2Z u2p &8<Gr#   