
    Og                    h   d dl mZ d dlmZmZmZmZmZmZ d dl	m
Z
 d dlZd dlZd dlZd dlmZ d dlmZ d dl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 d dlmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' d dl(m)Z) d dl*m+Z+ d dl,m-Z-m.Z. d dl/m0Z0 ddl1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8 ddl9m:Z: ddl;m<Z< ddlm=Z= er2d dl>m?Z? d dl@mAZA d dlBmCZCmDZD d dlEmFZF d dlGmHZH d dlmIZI d dlJmKZK d dl(mLZL g dZM ej                  d       ZO ed!i d" ed#d$%      d& ed'      d( ed)      d* ed+d%      d, ed-e)j                  %      d. ed/      d0 ed1ej                  %      d2 ed3d%      d4 ed5d%      d6 ed7d8%      d9 ed:      d; ed<d=%      d> ed?d$%      d@ edA      dB edCd%      dD edEd%      dF edGd%      i dH edId$%      dJ edKe)j                  %      dL edMd %      dN edO      dP edQe)j                  %      dR edSej                   eddd      T      dU edVd %      dW edXd %      dY edZd %      d[ ed\d ej                  ]      d^ ed_d ej                  ]      d` edadej                  ]      db edcdej                  ]      dd eded ej                  ]      df edgdhej                  ]      di edjdhej                  ]      dk edld ej                  ]            ZV eeV      ZWdmZXdnZYdoZZdpZ[dqZ\drZ]dsZ^dtZ_duZ`	 	 	 	 	 	 ddvZa edwdx      Zb edydz      Zce: G d{ d|e7             Zde: G d} d~ed             Ze G d d      Zf G d d      Zg G d d      Zh G d d      Zi G d d      Zj edi d edad$%      d> ed+d$%      d ed1d%      d ed?d %      d ed)d$%      d edd%      d ed7d%      d* edCd%      d, ed-e)j                  %      d. ed'      d0 edKd%      d2 ed3d%      d ed<d%      d4 ed5d%      d6 edVd8%      d edd%      d9 ed/      i d; edd=%      d edpd%      d@ ed:      dB edGd%      dF edId%      dH edXd %      dD ed_d%      dJ edQe)j                  %      d edcd=%      dL edMd %      d edd %      d edd=%      d edZ      dN edA      dP ede)j                  %      d edd%      d edd%       edd%       ed\d%       edd %       edd %       edd%       edld %       edd %       edd%       eded %       edgdh%       edjdh%       edd      d      Zk eek      ZldZme: G d de5             Zn G d de<en         Zoy)    )annotations)TYPE_CHECKINGUnionOptionalIterableAnyIterator)SelfN)
namedtuple)const)
cast_value)DXFAttrDXFAttributesDefSubclassXTypegroup_code_mapping)Tags)EXT_MAX_STR_LEN)	Vec3NULLVECX_AXISY_AXISZ_AXISMatrix44WCSTransformOCSTransformNonUniformScalingError)colors)ProxyGraphicError)safe_stringscale_mtext_inline_commands)safe_handle   )
base_classSubclassProcessor)	DXFObject)
DXFGraphicacdb_entity)register_entity)ObjectCollection)default_copy)Auditor)Drawing)DXFNamespace	DXFEntity)
BaseLayout)AbstractTagWriter)DXFTag)EntityQuery)xref)MultiLeaderMLeaderMLeaderStyleMLeaderStyleCollectionMLeaderContext	MTextData	BlockData
LeaderData
LeaderLineArrowHeadData
AttribDataezdxfAcDbMLeaderversion     )defaultstyle_handleT  property_override_flagsZ   leader_type   leader_line_color[   leader_linetype_handleU  leader_lineweight   has_landing"  
has_dogleg#  dogleg_length)      arrow_head_handleV  arrow_head_size*      content_type   text_style_handleW  text_left_attachment_type   text_right_attachment_type_   text_angle_type   text_alignment_type   
text_color\   has_text_frame$  block_record_handleX  block_color]   block_scale_vector
   )xtyperE   block_rotation+   block_connection_type   is_annotative%  is_text_direction_negative&  )rE   
dxfversiontext_IPE_align   text_attachment_point   scale-   text_attachment_direction  text_bottom_attachment_type  	   text_top_attachment_type  leader_extend_to_text'  zCONTEXT_DATA{zLEADER{zLEADER_LINE{i,  i-  .  i/  0  i1  c                N    dfdt        |        t              |      S )Nc                   | g}t              } | j                  |k7  r| j                  t        k(  r|j                   | t                     nT| j                  t
        k(  r0| j                  t        k(  r|j                   | t                     n|j                  |        t              } | j                  |k7  r|S N)	nextcodeSTART_LEADERappend
END_LEADERSTART_LEADER_LINEvalueLEADER_LINE_STREND_LEADER_LINE)tagstop	collectorbuild_structuretagss      [/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/entities/mleader.pyr   z-compile_context_tags.<locals>.build_structure   s    E	4jhh$xx<'  j!AB ..3993O  o!FG  %t*C hh$     )r   r2   r   intreturnlist[Union[DXFTag, list]])iterr   )data	stop_coder   r   s     @@r   compile_context_tagsr      s$     :D4:y11r   r>   zindex, handler?   zhandle, index, width, textc                  z    e Zd ZdZ eeee      Ze	j                  Zd fdZedd       ZddZd dZedd       Zd!dZd"dZefd#d	Z	 d$	 	 	 d% fd
Zed&d       Zed'd       Zed(d       Zed)d       Zd*dZd+ fdZd+dZd+dZd, fdZ d- fdZ!d.dZ"d.dZ#d/dZ$d$d0dZ%d/dZ&d1dZ'd2dZ(d Z) xZ*S )3r5   MULTILEADERc                \    t         |           t               | _        g | _        g | _        y r   )super__init__r9   contextarrow_headsblock_attribs)self	__class__s    r   r   zMultiLeader.__init__	  s(    %'02/1r   c                2    | j                   j                  duS )z*``True`` if MULTILEADER has MTEXT content.N)r   mtextr   s    r   has_mtext_contentzMultiLeader.has_mtext_content       ||!!--r   c                L    | j                   j                  }||j                  S y)zYGet MTEXT content as string, return "" if MULTILEADER has
        BLOCK content.
         )r   r   default_content)r   r   s     r   get_mtext_contentzMultiLeader.get_mtext_content  s(     ""(((r   c                `    | j                   j                  }|t        |t              |_        yy)z\Set MTEXT content as string, does nothing if MULTILEADER has
        BLOCK content.
        N)r   r   r    r   r   )r   textr   s      r   set_mtext_contentzMultiLeader.set_mtext_content  s-     ""$/o$FE! r   c                2    | j                   j                  duS )z*``True`` if MULTILEADER has BLOCK content.N)r   blockr   s    r   has_block_contentzMultiLeader.has_block_content%  r   r   c                   | j                   J d       | j                   j                  }t               }| j                  D ]C  }|j	                  |j
                        }|!|j                  ||j                  j                  <   E |S )zGet BLOCK attributes as dictionary of (tag, value) pairs.
        Returns an empty dictionary if MULTILEADER has MTEXT content.
        valid DXF document required)	docentitydbdictr   gethandler   dxfr   )r   r   r   attrattdefs        r   get_block_contentzMultiLeader.get_block_content*  sz     xx#B%BB#88$$#v&& 	1D\\$++.F!'+yyVZZ^^$	1 r   c                   | j                   J d       | j                   j                  }t               }| j                  }t	        |      D ]p  \  }}|j                  |j                        }|$|j                  j                  }t        |j                  |      t              }	|	\|j                  |	      ||<   r |S )z{Set BLOCK attributes by a dictionary of (tag, value) pairs.
        Does nothing if MULTILEADER has MTEXT content.
        r   )r   )r   r   r   r   	enumerater   r   r   r   r    r   _replace)
r   contentr   r   r   indexr   r   r   new_texts
             r   set_block_contentzMultiLeader.set_block_content7  s     xx#B%BB#88$$#v**$]3 	HKE4\\$++.F!jjnn&w{{3'7I'+/==h=+GM%(	H r   c                    t        |t              sJ t        j                  | j                        |_        t        j                  | j
                        |_        t        j                  | j                        |_        y)zCopy leadersN)
isinstancer5   copydeepcopyr   r   r   )r   entitycopy_strategys      r   	copy_datazMultiLeader.copy_dataH  sT    &+...t||4!]]4+;+;<#}}T-?-?@r   c                   t         |   |      }||S |j                  d      }|r+| j                  |      }|r;	 | j	                  |      | _        n#t        j                  d|j                   d      | j                  |      | _        | j                  |      | _        |j                  |t         |d       |S # t        j                  $ r& t        j                  d|j                   d       Y w xY w)NrD   z/Context structure error in entity MULTILEADER(#)z/missing 'AcDbMLeader' subclass in MULTILEADER(#T)subclassrecover)r   load_dxf_attribssubclass_by_indexextract_context_dataload_contextr   r   DXFStructureErrorloggerinfor   extract_arrow_headsr   extract_block_attribsr   fast_load_dxfattribsacdb_mleader_group_codes)r   	processorr   r   r   r   s        r   r   zMultiLeader.load_dxf_attribsO  s    g&y1J**1-//5G#'#4#4W#=DL ))A#**QO   33D9!77=&&)D$ 	' 	
 
 .. KKI#**UVWs   B= =6C65C6c                    d\  }}g }t        |       D ]4  \  }}|j                  t        k(  r|}|j                  t        k(  s0|dz   }6 |r|r
| || }| ||= |S )N)NNr#   )r   r   START_CONTEXT_DATAEND_CONTEXT_DATA)r   startendcontext_datar   r   s         r   r   z MultiLeader.extract_context_datal  sr    
s#D/ 	 JE3xx----ai		  Sc?LU3Yr   c                    	 t        | t              }t        j                  |      S # t        $ r t
        j                  w xY wr   )r   r   r9   loadStopIterationr   r   )r   r   s     r   r   zMultiLeader.load_context|  sD    	0*41ABG "&&w//  	*)))	*s	   ' Ac                    fd}g 	 | j                  d      }|}t               | j	                  ddh|      D ]  \  }}|dz  }||<   |dk(  s |         | ||= S # t        j                  $ r cY S w xY w)Nc            	         j                  t         j                  dd       j                  dd                    j                          y )N^   r   Y  0)r   r>   r   clear)r   headss   r   
store_headz3MultiLeader.extract_arrow_heads.<locals>.store_head  s?    LLMM"a(MM#s+ OOr   r   r   r#   )	tag_indexr   DXFValueErrorr   collect_consecutive_tags)r   r   r   r   r   r   r   r   s         @@r   r   zMultiLeader.extract_arrow_heads  s    	 &(	NN2&E F	88"cEJ 	KD%1HC#IdOs{		 sO "" 	L	s   A# #A;:A;c                4   fd}g 	 | j                  d      }|}t               | j	                  h d|      D ]&  \  }}|dz  }|dk(  rt              r |        ||<   ( t              r |        | ||= S # t        j                  $ r cY S w xY w)Nc                      j                  t        j                  dd      j                  dd      j                  dd      j                  dd                   j                          y )	NJ  r      r   ,         ?r   r   )r   r?   r   r   )attribsr   s   r   store_attribz7MultiLeader.extract_block_attribs.<locals>.store_attrib  s[    NNMM#s+MM#q)MM"c*MM#r*	 OOr   r  >   r  r   r  r  r#   )r   r   r   r   r   len)r   r  r   r   r   r   r  r   s         @@r   r   z!MultiLeader.extract_block_attribs  s    		 %'	NN3'E $(F	889LeT 	$KD%1HCs{s9~#IdO		$
 y>N sO "" 	N	s   A? ?BBc                v    | j                   j                  ryt        j                  dt	        |        d       y)NTzIgnore z% at DXF export, invalid context data.F)r   is_validr   debugstr)r   	tagwriters     r   preprocess_exportzMultiLeader.preprocess_export  s/    <<  LL73t9+-RSTr   c                   d'fd}t         |   |       | j                  |j                  }|j                   dt
        j                          dj                         | j                  j                  |        dj                          dj                          dj                          dj                          dj                          d	j                          d
j                           dj"                          dj$                          |dd        dj&                          dj(                          dj*                          dj,                          dj.                          dj0                          dj2                          dj4                          dj6                          |dd        dj8                         |j;                  dj<                          dj>                          dj@                          djB                         |tD        jF                  k\  rn| jI                  |       | jK                  |        djL                          d jN                          d!jP                          d"jR                         |tD        jT                  k\  r9 d#jV                          d$jX                          d%jZ                         |tD        j\                  k\  r d&j^                         y y )(Nc                @    j                  |      }|
 | |       y y r   )r   )r   namer   r   
write_tag2s      r   write_handle_if_existz8MultiLeader.export_entity.<locals>.write_handle_if_exist  s%    WWT]F!4( "r   d   rC   rG   rI   rK   rM   rO   rQ   rS   rU   rW   rZ   rY   r\   r_   ra   rc   re   rg   ri   rk   rm   ro   rn   rq   rs   rv   rx   rz   r|   r   r   r   r   r   r   r   )r   r   r  r  )0r   export_entityr   r}   r  acdb_mleaderr  rB   r   
export_dxfrF   rH   rJ   rL   rN   rP   rR   rT   rV   r[   r^   r`   rb   rd   rf   rh   rj   rl   rp   write_vertexrr   ru   rw   ry   r   DXF2007export_arrow_headsexport_block_attribsr{   r~   r   r   DXF2010r   r   r   DXF2013r   )r   r  r  rB   r   r  r   s       @@r   r  zMultiLeader.export_entity  s   	)
 	i(hh&&))
3))*3$	*
 	3(()2s2233(2s,,-32233--.3(3'2s(()c#672s**+3(()3--.35562s5563++,3//02s~~&3**+c#892s'r3#9#9:2s))*31123))*emm###I.%%i0sC::;sC../sC556r399%emm#sC99:sC;;<sC889emm#sC556 $r   c                t    | j                   D ])  \  }}|j                  d|       |j                  d|       + y )Nr   r   )r   r  )r   r  r   r   s       r   r  zMultiLeader.export_arrow_heads  s;    !-- 	.ME6  U+  f-	.r   c                "   | j                   D ]  }|j                  d|j                         |j                  d|j                         |j                  d|j                         |j                  dt        |j                  t                      y )Nr  r  r  r   )r   r  r   r   widthr    r   r   )r   r  attribs      r   r  z MultiLeader.export_block_attribs  sp    (( 	QF  fmm4  fll3  V\\2  k&++&OP		Qr   c                   t         |   |       | j                  }|j                  |j                         |j                  |j
                         |j                  |j                         |j                  |j                         |j                  |j                         | j                  D ]  }|j                  |j                          | j                  j                  |       yz5Register required resources to the resource registry.N)r   register_resourcesr   
add_handlerF   rN   rY   r`   rn   r   r   r   )r   registryr   
arrow_headr   s       r   r#  zMultiLeader.register_resources  s    "8,hhC,,-C667C112C112C334** 	3J
 1 12	3 	''1r   c                4   t        |t              sJ t        |   ||       | j                  }|j                  }|j                  |j                        |_        |j                  |j                        |_        |j                  |j                        |_        |j                  |j                        |_	        |j                  |j                        |_
        |j                  |       |j                  |       |j                  j                  |       yz3Translate resources from self to the copied entity.N)r   r5   r   map_resourcesr   
get_handlerF   rN   rY   r`   rn   map_arrow_head_handlesmap_block_attrib_handlesr   )r   clonemappingr   	clone_dxfr   s        r   r)  zMultiLeader.map_resources!  s    %---eW-hhII	!(!3!3C4D4D!E	+2+=+=&&,
	( '.&8&89N9N&O	#&-&8&89N9N&O	#(/(:(:3;R;R(S	%$$W-&&w/##G,r   c                    | j                   D cg c]-  }|j                  |j                  |j                              / c}| _         y c c}w N)r   )r   r   r*  r   )r   r.  arrows      r   r+  z"MultiLeader.map_arrow_head_handles2  sD     ))
 NN'"4"4U\\"BNC
 
   2A
c                    | j                   D cg c]-  }|j                  |j                  |j                              / c}| _         y c c}w r1  )r   r   r*  r   )r   r.  r   s      r   r,  z$MultiLeader.map_block_attrib_handles8  sD     ,,
 OO7#5#5fmm#DOE
 
r3  c                "    | j                         S )a  Yields the graphical representation of MULTILEADER as virtual DXF
        primitives.

        These entities are located at the original location, but are not stored
        in the entity database, have no handle and are not assigned to any
        layout.

        )__virtual_entities__r   s    r   virtual_entitieszMultiLeader.virtual_entities>  s     ((**r   c                     ddl m}  || |      S )a  Explode MULTILEADER as DXF primitives into target layout,
        if target layout is ``None``, the target layout is the layout of the
        source entity.

        Returns an :class:`~ezdxf.query.EntityQuery` container with all DXF
        primitives.

        Args:
            target_layout: target layout for the DXF primitives, ``None`` for
                same layout as the source entity.

        r   )explode_entity)ezdxf.exploder9  )r   target_layoutr9  s      r   explodezMultiLeader.explodeI  s     	1dM22r   c                z    ddl m} 	 |j                  | d      S # t        $ r |j                  | d      cY S w xY w)z'Support for "VirtualEntities" protocol.r   )mleaderTproxy_graphicF)ezdxf.renderr>  r7  r   )r   r>  s     r   r6  z MultiLeader.__virtual_entities__Z  sH    (	G++D+EE  	G++D+FF	Gs    ::c              #    K   dD ]%  }| j                   j                  |d      }|"| ' | j                  D ]  }|j                    | j                  j
                  (| j                  j
                  j                  }|| yyywz(Support for "ReferencedBlocks" protocol.)rn   rY   N)r   r   r   r   r   r   rn   )r   r  r   r&  s       r   __referenced_blocks__z!MultiLeader.__referenced_blocks__c  s      A 	DXX\\$-F!	 ** 	$J###	$ <<)\\'';;F! " *s   $BA$Bc                   | j                   }| j                  }t        |      }|j                  st	        d      t        |j                  j                        dkD  s"t        |j                  j                        dkD  r|j                  st	        d      |j                  |       |j                  |_        |j                  |_        |xj                  |j                  z  c_        |j                  r6|j                  j                   |_        |j                  j                  |_        | j'                  |       | j)                          | S )a  Transform the MULTILEADER entity by transformation matrix `m` inplace.

        Non-uniform scaling is not supported.

        Args:
            m: transformation :class:`~ezdxf.math.Matrix44`

        Raises:
            NonUniformScalingError: for non-uniform scaling

        z0MULTILEADER does not support non-uniform scaling-q=)r   r   r   has_uniform_xy_scalingr   absplane_x_axiszplane_y_axishas_uniform_xyz_scaling	transformr[   r   rV   uniform_scaler   rotationru   rr   post_transformupdate_proxy_graphic)r   mr   r   wcss        r   rM  zMultiLeader.transformu  s    hh,,1o))(B  w##%%&.#g6J6J6L6L2MPU2U..,F  	#%55MM	S...==!(!7!7C%,]]%8%8C" 	A 	!!#r   c                    d | _         y r   r?  r   s    r   rQ  z MultiLeader.update_proxy_graphic  s
    !r   r   Noner   bool)r   r  )r   r  )r   dict[str, str])r   rY  )r   r/   r   rV  r   r   zOptional[SubclassProcessor]r   r.   )r   r   r   list[DXFTag])r   r[  r   r9   )r   r   r   zlist[ArrowHeadData])r   r   r   zlist[AttribData])r  r1   r   rX  r  r1   r   rV  r%  zxref.Registryr   rV  r-  r
   r.  xref.ResourceMapperr   rV  )r.  r_  )r   zIterator[DXFGraphic])r;  zOptional[BaseLayout]r   r3   r   zIterable[str])rR  r   r   r5   )+__name__
__module____qualname__DXFTYPEr   r$   r(   r  
DXFATTRIBSr   DXF2000MIN_DXF_VERSION_FOR_EXPORTr   propertyr   r   r   r   r   r   r+   r   r   staticmethodr   r   r   r   r  r  r  r  r#  r)  r+  r,  r7  r<  r6  rD  rM  rQ  __classcell__r   s   @r   r5   r5     s#   Gz;EJ!&2 . .G . ." :F A 8<4	:   0 0  8  @;7z.
Q2-"

	+3"G$,\"r   r5   c                      e Zd ZdZy)r6   MLEADERN)ra  rb  rc  rd   r   r   r6   r6     s    Gr   r6   c                      e Zd Zddddddddd	d
ddddddZddZedd       ZddZddZe	dd       Z
e	d d       Zd!dZd"dZd#dZy)$r9   r   
base_pointchar_heightr[   landing_gap_sizeleft_attachmentright_attachmenttext_align_typeattachment_typeplane_originrI  rK  plane_normal_reversedtop_attachmentbottom_attachment)(   rs   rW         rg   ri   rx   r  n   o   p   )  r   r   c                    g | _         d| _        t        | _        d| _        d| _        d| _        d| _        d| _        d| _	        d| _
        d | _        d | _        t        | _        t        | _        t         | _        d| _        d| _        d| _        y )Nr  g      @       @r#   r   r   )leadersr   r   rp  rq  r[   rr  rs  rt  ru  rv  r   r   rw  r   rI  r   rK  rx  ry  rz  r   s    r   r   zMLeaderContext.__init__  s    )+
  !(" #  !  *.
*.
")"("(*+"!"r   c                   |d   t         t        fk(  sJ  |        }d }|D ]  }t        |t              r/|j                  j                  t        j                  |             B|\  }}|r|j                  ||      r\d }|dk(  r|dk(  rt               }||_
        z|dk(  r|dk(  rt               }||_        t        j                  j                  |      }|s|j!                  |t#        ||              |S )Nr   rS   r#   (  )r   CONTEXT_STRr   listr  r   r<   r   parser:   r   r;   r   r9   ATTRIBSr   __setattr__r   )clsr   ctxr   r   r   r   r  s           r   r   zMLeaderContext.load  s    qz0+>>>>e04 	CC#t$"":??3#78KD%==u-"Gs{uz#+#	!#+#	%--11$7OOD*T5*AB+	C, 
r   c                    | j                   | j                   j                  |       | j                  | j                  j                  |       yyr"  )r   r#  r   r   r%  s     r   r#  z!MLeaderContext.register_resources   s?    ::!JJ))(3::!JJ))(3 "r   c                    | j                   | j                   j                  |       | j                  | j                  j                  |       yyr(  )r   r)  r   r   r.  s     r   r)  zMLeaderContext.map_resources  s?    ::!JJ$$W-::!JJ$$W- "r   c                     y)NTrn  r   s    r   r	  zMLeaderContext.is_valid  s    r   c                    | j                   j                  | j                        j                         }| j                  r| }|S r   )rI  crossrK  	normalizerx  )r   z_axiss     r   plane_z_axiszMLeaderContext.plane_z_axis  s<    ""(():):;EEG%%WFr   c                   |j                   }|j                  } |t        t                |d| j                          |d| j
                          |d| j                          |d| j                          |d| j                          |d| j                          |d| j                          |d| j                          |d	| j                         | j                  r% |d
d       | j                  j                  |       n	 |d
d       | j                  r% |dd       | j                  j                  |       n	 |dd        |d| j                           |d| j"                          |d| j$                          |d| j&                         | j(                  D ]  }|j                  |        |j*                  t,        j.                  k\  r& |d| j0                          |d| j2                          |t4        d       y )Nr{  rs   rW   r|  r}  rg   ri   rx   r  rS   r#   r   r  r~  r  r  r  r   r   })r  r  r   r  r   rp  rq  r[   rr  rs  rt  ru  rv  r   r  r   rw  rI  rK  rx  r  r}   r   r  ry  rz  r   )r   r  r  r  leaders        r   r  zMLeaderContext.export_dxf  s   ))
 --%{32tzz"R)2t''(3,,-3--.3,,-3--.3,,-3,,-::sAJJ!!),sA::sAJJ!!),sAS$++,S$++,S$++,3223 ll 	)Fi(	) 5==0sD//0sD223#S)r   c                H   |j                   }|j                  }| xj                  |z  c_        |j                  | j                        | _        | xj
                  |z  c_        | xj                  |z  c_        | xj                  |z  c_        |j                  | j                        | _        |j                  | j                  d      | _
        |j                  | j                  d      | _        d| _        |j                  t        d      }|j                  | j                         rd| _        | j                   D ]  }|j                  |        | j"                  | j"                  j                  |       | j$                  | j$                  j                  |       y y )NTr  r   r#   )rR  rN  r   rM  rp  rq  r[   rr  rw  transform_directionrI  rK  rx  r   iscloser  r  r   r   )r   rS  rR  r   r  r  s         r   rM  zMLeaderContext.transformC  sV   EE!!

e
++doo6E!%&KK(9(9:11$2C2Ct1T11$2C2Ct1T%&"&&v&>>>4,,,-)*D&ll 	"FS!	"::!JJ  %::!JJ  % "r   c                    	 || j                   z  }|| _         | xj                  |z  c_        | xj                  |z  c_        | xj                  |z  c_        y # t        $ r Y y w xY wr   )r   ZeroDivisionErrorrq  r[   rr  )r   r   conversion_factors      r   	set_scalezMLeaderContext.set_scaleZ  si    	 %

 2 
-- 11!22 ! 		s   A 	A$#A$NrU  )r   r   r   r9   r]  r.  r_  r   rV  rW  )r   r   r\  rS  r   r   rV  )r   float)ra  rb  rc  r  r   classmethodr   r#  r)  rh  r	  r  r  rM  r  rn  r   r   r9   r9     s    $ G$!#F  84.    (*T&.3r   r9   c            
          e Zd Zi ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+Zd4d,Zd5d-Zd6d.Zd7d/Zd8d0Zd9d1Z	d:d2Z
y3);r:   r   r      	extrusionrG   rF      insert   text_directionr\   rO  rv   r  r  defined_heightr   line_spacing_factorrK   line_spacing_stylerI   colorrQ   	alignmentr_   flow_directionrM   bg_color   bg_scale_factorrk   bg_transparencyrU   use_window_bg_colorhas_bg_fillcolumn_typeuse_auto_heightcolumn_widthcolumn_gutter_widthcolumn_flow_reversedcolumn_sizesuse_word_break)rm   rc   rz         r|      r   c                   d| _         t        | _        d| _        t        | _        t        | _        d| _        d| _	        d| _
        d| _        d| _        t        j                  | _        d| _        d| _        t        j$                  | _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        g | _        d| _        y )Nr   r           r  r#   g      ?r   )r   r   r  rF   r   r  r   r  rO  r  r  r  r  r   BY_BLOCK_RAW_VALUEr  r  r  WINDOW_BG_RAW_VALUEr  r  r  r  r  r  r  r  r  r  r  r  r   s    r   r   zMTextData.__init__  s    $&%!$#$*"
%(*- '( 33
#$#77&)$%()  ! !$%#&*- )*!)+#$r   c                :    |j                  | j                         yr"  )r$  rF   r  s     r   r#  zMTextData.register_resources  s    D--.r   c                D    |j                  | j                        | _        yr(  )r*  rF   r  s     r   r)  zMTextData.map_resources  s    #..t/@/@Ar   c                    |dk(  r%| j                   j                  t        |             yt        j                  j                  |      }|r| j                  |t        ||             t        |      S )Nr  T)	r  r   r  r:   r  r   r  r   rX  r   r   r   r   s       r   r  zMTextData.parse  s^    3;$$U5\2""&&t,VZe%<=F|r   c                &   |j                   }|j                  } |dt        | j                  t                      |d| j
                          |dt        | j                                |d| j                          |d| j                          |d| j                          |d| j                          |d| j                          |d	| j                          |d
| j                          |d| j                          |d| j                           |d| j"                          |d| j$                          |d| j&                          |d| j(                          |d| j*                          |d| j,                          |d| j.                          |d| j0                          |d| j2                          |d| j4                          |d| j6                         | j8                  D ]  } |d|         |d| j:                         y )Nr   r  rG   r  r  r\   rv   r  r   rK   rI   rQ   r_   rM   r  rk   rU   rm   rc   rz   r  r  r|   r  r   )r  r  r    r   r   r  r"   rF   r  r  rO  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  )r   r  r  r  sizes        r   r  zMTextData.export_dxf  s   ))
 --3D$8$8/JKR(3D$5$567R%R,,-2t}}%2tzz"2t**+2t//03//02tzz"3'3++,2t}}%3,,-2t++,30013(()3(()3,,-3))*30013112%% 	"DsD!	"3++,r   c                   |j                   }t        | j                  |      }|j                  | _        |j	                  | j
                        | _        |j                   j                  | j                  d      | _        |j                  | j                        | _	        |j                  }t        j                  |d      st        |      dk  ry | xj                  |z  c_        | xj                  |z  c_        | xj                   |z  c_        | xj"                  |z  c_        | j$                  D cg c]  }||z  	 c}| _        t'        | j(                  |      | _        y c c}w )NTr  r  rF  )rR  r   r  new_extrusionrM  r  r  r  transform_anglerO  rN  mathr  rH  r  r  r  r  r  r!   r   )r   rS  rR  ocsr   r  s         r   rM  zMTextData.transform  s   EE4>>1-**kk$++.!ee774 8 
 ++DMM:!!<<s#s5zU':

e
u$U"  E) 6:6G6GHdTE\H:4;O;OQVW Is   3E#c                z   t        j                  |d      st        |      dk  ry | xj                  |z  c_        | xj                  |z  c_        | xj
                  |z  c_        | xj                  |z  c_        | j                  D cg c]  }||z  	 c}| _        t        | j                  |      | _	        y c c}w )Nr  rF  )
r  r  rH  r  r  r  r  r  r!   r   )r   r  hs      r   apply_conversion_factorz!MTextData.apply_conversion_factor  s    <<)3/37H3IU3R

''
00..  $55 <@<M<MNqQ!22N:  "3 
 Os   B8NrU  r]  r  r   r   r   rX  r\  r  r  r  )ra  rb  rc  r  r   r#  r)  r  r  rM  r  rn  r   r   r:   r:   e  s   
K 	^ 	H	
 	 	J 	G 	 	! 	! 	G 	[ 	 	J 	  	!" 	"#$ "#3G8%6/B-<X*
r   r:   c                      e Zd ZdddddddZddZdd	Zdd
Zedd       Zej                  dd       ZddZ
ddZddZddZy)r;   rn   r  r  r   rO  r  )rO            .   rq   c                    d | _         t        | _        t        | _        t        ddd      | _        d| _        t        j                  | _
        g | _        y )Nr#   r   )rn   r   r  r   r  r   r   rO  r   r  r  _matrixr   s    r   r   zBlockData.__init__  sD    26 %#1a=
  33
 %'r   c                :    |j                  | j                         yr"  )r$  rn   r  s     r   r#  zBlockData.register_resources  s    D445r   c                `    | j                   J |j                  | j                         | _         yr(  )rn   r*  r  s     r   r)  zBlockData.map_resources	  s-    ''333#*#5#5d6N6N#O r   c                    t        | j                        dk(  rt        | j                        }n
t               }|j                          |S )Nr  )r  r  r   	transposer   rR  s     r   matrix44zBlockData.matrix44  s6    t||"&A
A	r   c                d    |j                         }|j                          t        |      | _        y r   )r   r  r  r  r  s     r   r  zBlockData.matrix44  s!    FFH	Awr   c                    t         j                  j                  |      }|r| j                  |t	        ||             y|dk(  r%| j
                  j                  t        |             yy)N/   FT)r;   r  r   r  r   r  r   r  r  s       r   r  zBlockData.parse  s`    ""&&t,VZe%<=  RZLLe-  r   c                   |j                   }|j                  }| j                  r |d| j                         n	 |dd        |d| j                          |d| j                          |d| j
                          |d| j                          |d| j                         | j                  }t        |      dk7  rt        t                     }|D ]  } |d|        y )	NrO   r   r  r  r  r  rq   r  )r  r  rn   r  r  r   rO  r  r  r  r  r   )r   r  r  r  rR  r   s         r   r  zBlockData.export_dxf(  s    ))
 --##sD445 sC R(R%R$2t}}%2tzz"LLq6R<
 XZ A 	"Er5!	"r   c                R   |j                   }t        | j                  |      }|j                  | _        |j	                  | j
                        | _        |j                  | j                        | _        |j                  | j                        | _	        | j                  |z  | _
        y r   )rR  r   r  r  rM  r  transform_scale_vectorr   r  rO  r  )r   rS  rR  r  s       r   rM  zBlockData.transform@  sx    EE4>>1-**kk$++.//

;
++DMM:)r   c                .    | xj                   |z  c_         y r   )r   )r   r  s     r   r  z!BlockData.apply_conversion_factorJ  s    

''
r   NrU  r]  r  )r   r   )rR  r   r   rV  r  r\  r  r  )ra  rb  rc  r  r   r#  r)  rh  r  setterr  r  rM  r  rn  r   r   r;   r;     sk    "G	'6P
   __ 
	"0*(r   r;   c                  H    e Zd ZddZedd       Zed	d       Zd
dZddZ	y)r<   c                    g | _         d| _        d| _        t        | _        t
        | _        d| _        d| _        d| _	        g | _
        y )Nr   r  )lineshas_last_leader_linehas_dogleg_vectorr   last_leader_pointr   dogleg_vectorrV   r   attachment_directionbreaksr   s    r   r   zLeaderData.__init__P  sK    ')
 *+!&''.#)$'
 *+!"$r   c                .    t        | j                         S r   )rX  r  r   s    r   has_horizontal_attachmentz$LeaderData.has_horizontal_attachment`  s    11222r   c                   |d   t         t        fk(  sJ  |        }|D ]  }t        |t              r/|j                  j                  t        j                  |             B|\  }}|dk(  r||_        T|dk(  r||_	        a|dk(  rt        |      |_        w|dk(  rt        |      |_        |dk(  r||_        |dk(  r||_        |dk(  r||_        |d	v s|j                   j                  t        |              |S )
Nr   rS   rU   rs   r  r{  rI   r   )r  r  )r   
LEADER_STRr   r  r  r   r=   r   r  r  r   r  r  rV   r   r  r  )r  r   r  r   r   r   s         r   r   zLeaderData.loadd  s    qzlJ7777 	2C#t$##JOOC$89KD%s{.3++0(+/;('+E{$',$$.3+!$$T%[1+	2. r   c                @   |j                   }|j                  } |t        t                |d| j                          |d| j
                          |d| j                          |d| j                         d}| j                  D ]  } |d|z   |       d|z
  }  |d| j                          |d	| j                         | j                  D ]  }|j                  |        |j                  t        j                  k\  r |d
| j                           |t"        d       y )NrS   rU   rs   r  r   r  r#   rI   r{  r   r  )r  r  r   r  r  r  r  r  r  r   rV   r  r  r}   r   r  r  r   )r   r  r  r  r   vertexlines          r   r  zLeaderData.export_dxf  s    ))
 --<,31123../R//0R++,kk 	FdF+t8D	 	2tzz"2t))* JJ 	'DOOI&	' 5==0sD556:s#r   c                   |j                   }|j                  | j                        | _        	 |j                  | j                  j                  | j                              }|j                         | _        |j                  | _        t        |j                  | j                              | _        | j                  D ]  }|j                  |        y # t        $ r) |j                  t        | j                  dd            }Y w xY wNr   )rR  rM  r  r  r  r  rV   r  r   	magnituder  transform_verticesr  r  )r   rS  rR  dog_legleader_lines        r   rM  zLeaderData.transform  s    EE!"T-C-C!D	L++"",,T-?-?@G
 %..0$..1//<=:: 	'K!!#&	' ! 	L++D1C1CQ,JKG	Ls   4C /DDNrU  rW  )r   r   r\  r  )
ra  rb  rc  r   rh  r  r  r   r  rM  rn  r   r   r<   r<   O  s9    %  3 3  8$4'r   r<   c                  6    e Zd ZddZedd       ZddZd	dZy)
r=   c                X    g | _         g | _        d| _        t        j                  | _        y r  )verticesr  r   r   r  r  r   s    r   r   zLeaderLine.__init__  s&    $&.0 
 33
r   c                8   |d   t         t        fk(  sJ t               }|j                  }g }|D ]_  \  }}|dk(  r|j	                  t        |             &|dv r|j	                  t        ||             F|dk(  r||_        S|dk(  sY||_        a |r||_	        |S )Nr   rs   )rI   r  r  rM   rk   )
r   r   r=   r  r   r   r   r   r  r  )r  r   r  r  r  r   r   s          r   r   zLeaderLine.load  s    Aw,o>>>>|== 	#KD%rzU,%ju56"
"
	#  DKr   c                   |j                   }|j                  } |t        t               | j                  D ]  } |d|        | j
                  r>d}| j
                  D ]-  }t        |t              r
 |d|        |d|z   |       d|z
  }/  |d| j                          |d| j                          |t        d       y )	Nrs   r   rI   r  r#   rM   rk   r  )r  r  r   r   r  r  r   r   r   r  r   )r   r  r  r  r  r   r   s          r   r  zLeaderLine.export_dxf  s    ))
 --$o6mm 	%FV$	%;;D $eS)r5) !dE2t8D$ 	2tzz"2tzz"?C(r   c                @   |j                   }t        |j                  | j                              | _        | j                  r]g }| j                  D ]D  }t        |t              r!|j                  |j                  |             4|j                  |       F || _        y y r   )	rR  r  r   r  r  r   r   r   rM  )r   rS  rR  r  r   s        r   rM  zLeaderLine.transform  s~    EEQ11$--@A;;-/F )eT*MM!++e"45MM%(	)
 !DK r   NrU  )r   r[  r\  r  )ra  rb  rc  r   r  r   r  rM  rn  r   r   r=   r=     s%    	4  $),
!r   r=   AcDbMLeaderStyleunknown1draw_mleader_order_typedraw_leader_order_typemax_leader_segments_pointsfirst_segment_angle_constraintr{  r  second_segment_angle_constraintrr  r  r     Standardr  default_text_contentr   rq  text_align_always_leftr  align_spacer  has_block_scalingr   block_scale_xr  block_scale_y1   r|  r  r  r  r  r  g      @i*  T)optional)block_scale_zhas_block_rotationru   rw   r   overwrite_property_valuery   break_gap_sizer   r   r   unknown2)rN   rY   r`   rn   c                       e Zd ZdZ eee      Zej                  Z
	 d	 	 	 d fdZd fdZd fdZddZej                   dej"                  df	 	 	 	 	 	 	 ddZddd	Zd fd
ZddZd fdZ xZS )r7   MLEADERSTYLEc                Z    t         |   |      }|r|j                  |t        d       |S )Nr#   )r   )r   r   r   acdb_mleader_style_group_codes)r   r   r   r   s      r   r   zMLeaderStyle.load_dxf_attribs9  s9     g&y1**3a +  
r   c                    t         |   |       | j                  }t        D ]#  }|j	                  |j                  |d             % y )Nr   )r   r#  r   MLEADER_STYLE_HANDLE_ATTRIBSr$  r   )r   r%  r   attrib_namer   s       r   r#  zMLeaderStyle.register_resourcesC  sA    "8,hh7 	;KS 9:	;r   c           	     "   t         |   ||       | j                  }t        D ]i  }|j	                  |      r;|j                  j                  ||j                  |j                  |                   O|j                  j                  |       k y r   )	r   r)  r   r%  hasattrsetr*  r   discard)r   r-  r.  r   r&  r   s        r   r)  zMLeaderStyle.map_resourcesI  sn    eW-hh7 	/K{{;'		k7+=+=cggk>R+ST		!!+.		/r   c                    | j                   J d       | j                   j                  j                  |      }|&|j                  j                  | j                  _        y t        d| d      )Nr   ztext style 'z' does not exist)r   stylesr   r   r   r`   
ValueError)r   r  styles      r   set_mtext_stylezMLeaderStyle.set_mtext_styleR  sa    xx#B%BB###D)).)9)9DHH&|D61ABCCr   BYBLOCKr#   c                   | j                   J d       t        j                  |      | j                  _        | j                   j
                  j                  |      }|t        d| d      |j                  j                  | j                  _	        t        |      | j                  _        t        |      | j                  _        y )Nr   zinvalid linetype name '')r   r   encode_raw_colorr   rL   	linetypesr   r-  r   rN   r   rP   rJ   )r   r  linetype
lineweightrJ   	linetype_s         r   set_leader_propertiesz"MLeaderStyle.set_leader_propertiesZ  s     xx#B%BB#%+%<%<U%C"HH&&**84	6xjBCC*3--*>*>'%(_"";/r   c                    ddl m} | j                  J d       |r6|j                  | j                  j                  |      | j
                  _        y | j
                  `y )Nr   )ARROWSr   )ezdxf.render.arrowsr:  r   arrow_handleblocksr   rY   )r   r  r:  s      r   set_arrow_headzMLeaderStyle.set_arrow_headj  sK    .xx#B%BB#)/)<)<TXX__d)SDHH& *r   c                    t         |   |       |j                  t        j                  t
        j                         | j                  j                  |t
        j                  j                                y r   )r   r  r  r   SUBCLASS_MARKERacdb_mleader_styler  r   export_dxf_attribsr  keys)r   r  r   s     r   r  zMLeaderStyle.export_entityu  sQ    i(U224F4K4KL##I/A/I/I/N/N/PQr   c              #  `   K   dD ]%  }| j                   j                  |d      }|"| ' ywrC  )r   r   )r   r  r   s      r   rD  z"MLeaderStyle.__referenced_blocks__z  s4     @ 	DXX\\$-F!	s   $..c           	        ddl m} | j                  sy t        	|   |       |j
                  }| j                  }t        |       }|j                  dd       }|||vr|j                  j                  j                  d      }|I|j                  j                  | j                  _        |j                  |j                  | d| d|        nRt        j!                  d       | j                  j#                  d       |j                  |j                  | d| |        d	D ]V  }|j                  |      }||d
k(  r||vs!|j#                  |       |j                  |j$                  | d| d| |        X y )Nr   )
AuditErrorr`   r  z: text_style_handle=z0 is not valid, replaced by 'Standard' text stylez-required text style 'Standard' does not existz$: removed invalid text_style_handle=)rY   rn   r   z: removed invalid =)ezdxf.auditrF  is_aliver   auditr   r   r  r   r   r,  r   r`   fixed_errorUNDEFINED_TEXT_STYLEr   warningr*  UNDEFINED_BLOCK)
r   auditorrF  r   r   r  r   standardr   r   s
            r   rJ  zMLeaderStyle.audit  sx   *}}g##hh4y,d3&"8{{))--j9H#-5\\-@-@*##33f0 9, -	 NO  !45##33f@I
 C 
	FWWV_F~3X%F###..f.vhax@
	r   r   rZ  r]  r^  )r  r  r   rV  )r  zUnion[int, colors.RGB]r5  r  r6  r   rJ   r   )r   )r  r  r\  r`  )rO  r,   r   rV  )ra  rb  rc  rd  r   r$   rA  re  r   rf  rg  r   r#  r)  r/  r   r0  LINEWEIGHT_BYBLOCKr8  r>  r  rD  rJ  rj  rk  s   @r   r7   r7   3  s    Gz+=>J!& 8<4	;/D )/!220%0 0 	0
 0 	+R
& &r   r7   c                  (     e Zd Zd fdZddZ xZS )r8   c                J    t         |   |dd       | j                          y )NACAD_MLEADERSTYLEr!  )	dict_nameobject_type)r   r   create_required_entries)r   r   r   s     r   r   zMLeaderStyleCollection.__init__  s$    (;X$$&r   c                    d| vr\| j                  d      }| j                  j                  j                  d      }|j                  j
                  |j                  _        y y )Nr  )newr   r,  r   r   r   r`   )r   mleader_style
text_styles      r   rW  z.MLeaderStyleCollection.create_required_entries  sM    T! HHZ0M,,Z8J2<..2G2GM/	 "r   )r   r-   rU  )ra  rb  rc  r   rW  rj  rk  s   @r   r8   r8     s    'Hr   r8   )r   r[  r   r   r   r   )p
__future__r   typingr   r   r   r   r   r	   typing_extensionsr
   r   loggingr  collectionsr   ezdxf.lldxfr   ezdxf.lldxf.typesr   ezdxf.lldxf.attributesr   r   r   r   r   ezdxf.lldxf.tagsr   ezdxf.lldxf.constr   
ezdxf.mathr   r   r   r   r   r   r   r   r   r@   r   ezdxf.proxygraphicr   ezdxf.tools.textr    r!   ezdxf.tools.handler"   	dxfentityr$   r%   dxfobjr&   dxfgfxr'   r(   factoryr)   objectcollectionr*   r+   rH  r,   ezdxf.documentr-   ezdxf.entitiesr.   r/   ezdxf.layoutsr0   ezdxf.lldxf.tagwriterr1   r2   ezdxf.queryr3   r4   __all__	getLoggerr   r  rQ  point3dr  r  r  r  r   r  r  r   r   r   r   r   r   r   r   r>   r?   r5   r6   r9   r:   r;   r<   r=   rA  r#  r%  r7   r8   rn  r   r   <module>rw     sB   # J J "    "  (  " -
 
 
  0 E * 4  + $ . #&6(7(' 
		7	# |73*||
 	"72;|R 	wsA.S|T 	WR1J1JKU|V 	!'#,W|X 	WS%2J2JKY|Z 	wsA.[|\ 	gc1-]|^ 	Q/_|b 	WS\c|f 	72q1g|h 	Q/i|t 	WS\u|v 	$WS!%<w|P 	%gb!&<Q|R 	732S|\ 	wsA6]|^ 	gb&*C*CD_|` 	'#q1a|d 	ws|e|f 	wr6+D+DEg|h 	gbtAqRS}Ui|j 	'"a0k|l 	 a!8m|r 	a0s|J 	%gc1&WK|L 	'#qU]]KM|N 	 aEMM!RO|V 	Q5==AW|` 	$WS!%Va|h 	&wu}}(
i|t 	#GCu}}$Uu|v 	 aEMM!Rw|Z .l; 
   
 2
2#&22, ?O<&BC
 a"* a" a"H k  u3 u3pH
 H
V\( \(~Y' Y'x@! @!F !7GC+7Q/7 	"73#:7 	!'#q"9	7
 	%gb!&<7 	)'"c*B7 	*72s+C7 	wsA.7 	WR1J1JK7 	!'#,7 	WR47  	wsA.!7" 	GB4#7$ 	gc1-%7& 	Q/'7( 	:.)7, 	WS\-7. 	72q1/70 	R 8172 	WS\374 	$WS!%<576 	732778 	wsA697: 	%gc1&=;7< 	gb&*C*CD=7> 	wr1-?7@ 	'#q1A7B 	!'#q"9C7D 	wr1-E7F 	WS\G7H 	ws|I7J 	wr6+D+DEK7L 	Q/M7N 	Q/O7P !a0%c15!#q1!(a!8a($+C$; a0!#t4%,S!%<'.sA'>$+C$;C$/m7: v "44F!G    s9 s sl
H-l; 
Hr   