Ë
    £èhëí  ã                  ó  — d dl mZ d dlmZmZmZmZmZmZm	Z	 d dl
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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& d dl'm(Z(m)Z) d dl*m+Z+m,Z- d dl.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 erd dl8m9Z9 d dl:m;Z; d dl!m<Z<m=Z=m>Z>m?Z?m@Z@ g d¢ZA ej„                  d«      ZCdZDdZE G d„ de$jŒ                  «      ZGi 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/d0“d1d2“d3d4“d5d6“d7d8“d9d:d;d<d=d>d?d@dAdBdCdDdEœ¥ZH G dF„ dG«      ZI	 dl	 	 	 dmdH„ZJdndI„ZKdodJ„ZLdpdK„ZMejœ                  ejž                  ej                   hZQdqdL„ZRdrdM„ZSdsdN„ZTdtdO„ZU	 	 	 	 	 	 	 	 drdP„ZVdudQ„ZWdudR„ZXefdvdS„ZYdwdT„ZZ G dU„ dV«      Z[ G dW„ dXej¸                  «      Z] G dY„ dZej¼                  «      Z_e_jÀ                  ee_jÂ                  e e_jÄ                  e e_jÆ                  eiZd G d[„ d\ej¸                  «      Ze G d]„ d^ej¸                  «      Zf G d_„ d`ej¸                  «      Zg G da„ dbej¸                  «      Zhe G dc„ dd«      «       Zidxde„Zj G df„ dge
jÖ                  «      Zl G dh„ diel«      Zm G dj„ dkel«      Zny)yé    )Úannotations)ÚAnyÚIterableÚIteratorÚOptionalÚTYPE_CHECKINGÚUnionÚcastN)Údefaultdict)Ú	dataclass)Úcolors)ÚBoundingBoxÚMatrix44ÚNULLVECÚOCSÚUCSÚUVecÚVec2ÚVec3ÚX_AXISÚZ_AXISÚfit_points_to_cad_cvÚis_point_left_of_line)Úfactory)Úconst)ÚProxyGraphic)ÚARROWSÚarrow_length)Ú	text_sizeÚtext)	Ú
AttribDataÚ	BlockDataÚ
LeaderDataÚ
LeaderLineÚMLeaderContextÚMLeaderStyleÚ	MTextDataÚMultiLeaderÚacdb_mleader_style)ÚDrawing)ÚBlockLayout)Ú
DXFGraphicÚInsertÚMTextÚSplineÚ	Textstyle)
Úvirtual_entitiesÚMultiLeaderBuilderÚMultiLeaderMTextBuilderÚMultiLeaderBlockBuilderÚConnectionSideÚHorizontalConnectionÚVerticalConnectionÚ
LeaderTypeÚTextAlignmentÚBlockAlignmentÚezdxfTgš™™™™™É?c                  ó   — e Zd Zy)ÚConnectionTypeErrorN)Ú__name__Ú
__module__Ú__qualname__© ó    ú4lib/python3.12/site-packages/ezdxf/render/mleader.pyr=   r=   [   s   „ ØrB   r=   Úleader_typeé   Úleader_line_coloré   Úleader_linetype_handleé   Úleader_lineweighté   Úhas_landingé   Úlanding_gapé    Ú
has_doglegé@   Údogleg_lengthé€   Úarrow_head_handleé   Úarrow_head_sizei   Úcontent_typei   Útext_style_handlei   Útext_left_attachment_typei   Útext_angle_typei    Útext_alignment_typei @  Ú
text_colori €  Úchar_heighti   i   i   i   i    i  @ i  € i   i   i   i   i   i    )Úhas_text_frameÚblock_record_handleÚblock_colorÚblock_scale_vectorÚblock_rotationÚblock_connection_typeÚscaleÚtext_right_attachment_typeÚtext_switch_alignmentÚtext_attachment_directionÚtext_top_attachment_typeÚtext_bottom_attachment_typec                  ó$   — e Zd Zdd„Zdd„Zdd„Zy)ÚMLeaderStyleOverridec                ó¨  — |j                   | _        |j                   | _        |j                  | _        |j                   j                  dd«      | _        t        |j                   j                  dd«      |j                   j                  dd«      |j                   j                  dd«      f«      | _        t        | j                  dz  «      | _
        y )NÚproperty_override_flagsr   Úblock_scale_xç      ð?Úblock_scale_yÚblock_scale_zi   )ÚdxfÚ
_style_dxfÚ_mleader_dxfÚcontextÚ_contextÚgetÚ_property_override_flagsr   Ú_block_scale_vectorÚboolÚuse_mtext_default_content)ÚselfÚstyleÚmleaders      rC   Ú__init__zMLeaderStyleOverride.__init__‚   s¥   € ØŸ)™)ˆŒØ#ŸK™KˆÔØŸ™ˆŒØ(/¯©¯©Ø% qó)
ˆÔ%ô $(à—	‘	—‘˜o¨sÓ3Ø—	‘	—‘˜o¨sÓ3Ø—	‘	—‘˜o¨sÓ3ðó$
ˆÔ ô *.Ø×)Ñ)¨WÑ5ó*
ˆÕ&rB   c                ó   — |dk(  r| j                   }n| j                  j                  |«      }t        s| j	                  |«      r9|dk(  r| j
                  j                  }|S | j                  j                  ||«      }|S )Nra   r]   )	ry   rs   Úget_defaultÚIGNORE_OVERRIDE_FLAGSÚis_overriddenrv   r]   rt   rw   )r|   Úattrib_nameÚvalues      rC   rw   zMLeaderStyleOverride.get”   sw   € àÐ.Ò.Ø×,Ñ,‰Eà—O‘O×/Ñ/°Ó<ˆEÝ  D×$6Ñ$6°{Ô$Cà˜mÒ+ØŸ™×1Ñ1�ð ˆð ×)Ñ)×-Ñ-¨k¸5ÓA�ØˆrB   c                ó^   — t         j                  |d«      }t        || j                  z  «      S ©Nr   )ÚOVERRIDE_FLAGrw   rz   rx   )r|   r„   Úflags      rC   rƒ   z"MLeaderStyleOverride.is_overridden¢   s*   € Ü× Ñ  ¨aÓ0ˆÜ�D˜4×8Ñ8Ñ8Ó9Ð9rB   N)r}   r&   r~   r(   )r„   ÚstrÚreturnr   )r„   rŠ   r‹   rz   )r>   r?   r@   r   rw   rƒ   rA   rB   rC   rk   rk   �   s   „ ó
ó$ô:rB   rk   c                óÖ   — | j                   }|€J d«       ‚|r0| j                  �$t        | j                  |«      j                  «       S t	        t        | |«      j                  «       «      S )Núvalid DXF document required)ÚdocÚproxy_graphicr   r1   ÚiterÚRenderEngineÚrun)r~   r�   rŽ   s      rC   r1   r1   §   sb   € ð �+‰+€CØˆ?Ð9Ð9Ó9ˆ?Ù˜×.Ñ.Ð:Ü˜G×1Ñ1°3Ó7×HÑHÓJÐJä”L ¨#Ó.×2Ñ2Ó4Ó5Ð5rB   c                ó  — | j                   j                  }|j                  j                  |«      }|€4t        j                  d|› d�«       |j                  j                  d«      }|€J d«       ‚t        t        t        |«      | «      S )Nzreferenced MLEADERSTYLE(#ú() does not exist, replaced by 'Standard'ÚStandardz0mandatory MLEADERSTYLE 'Standard' does not exist)
rr   Ústyle_handleÚentitydbrw   ÚloggerÚwarningÚmleader_stylesrk   r
   r&   )r~   rŽ   Úhandler}   s       rC   Ú	get_stylerœ   ²   s…   € Ø�[‰[×%Ñ%€FØ�L‰L×Ñ˜VÓ$€EØ€}Ü�‰Ø'¨ xð 0%ð &ô	
ð ×"Ñ"×&Ñ& zÓ2ˆØÐÐPÐPÓPÐÜ¤¤\°5Ó 9¸7ÓCÐCrB   c                óº   — |j                   j                  | «      }|€4t        j                  d| › d�«       |j                  j                  d«      }|€J d«       ‚|S )Nzreferenced STYLE(#r”   r•   z)mandatory STYLE 'Standard' does not exist)r—   rw   r˜   r™   Ústyles)r›   rŽ   Ú
text_styles      rC   Úget_text_styler    ¿   se   € Ø—‘×!Ñ! &Ó)€JØÐÜ�‰Ø   ð )%ð &ô	
ð —Z‘Z—^‘^ JÓ/ˆ
ØÐ!ÐNÐ#NÓNÐ!ØÐrB   c                ó`   — t        | «      dk  rt        S | d   | d   z
  }|j                  «       S )NrG   rE   r   )Úlenr   Ú	normalize)ÚverticesÚ	directions     rC   Úget_arrow_directionr¦   Ë   s4   € Ü
ˆ8ƒ}�qÒÜˆØ˜‘˜h q™kÑ)€IØ×ÑÓ Ð rB   c                ó¤   — t         j                  }d }t        j                  | «      \  }}|t        v r|}||fS |t         j                  k(  r|}||fS ©N)r   ÚBYBLOCKÚdecode_raw_color_intÚACI_COLOR_TYPESÚCOLOR_TYPE_RGB)Ú	raw_colorÚ	aci_colorÚ
true_colorÚ
color_typeÚcolors        rC   Údecode_raw_colorr²   Ù   s_   € Ü—‘€IØ $€JÜ×3Ñ3°IÓ>Ñ€J�Ø”_Ñ$Øˆ	ð �jÐ Ð ð 
”v×,Ñ,Ò	,Øˆ
à�jÐ Ð rB   c                ó„  — |j                   | _        | j                  }t        |j                  «      \  }}||_        |�||_        |j                  |_        | j                  €J ‚t        |j                  | j                  «      j                  j                  | j                  _        |j                  j                  t        «      s|j                  |_        |j                  |_        |j                   |z  |_        |j"                  |_        |j$                  |_        |j&                  |_        |j(                  |_        y r¨   )Údefault_contentr    rr   r²   r±   r¯   ÚinsertrŽ   r    r–   Únamer}   Ú	extrusionÚiscloser   Útext_directionÚwidthÚline_spacing_factorÚline_spacing_styleÚflow_directionÚ	alignmentÚattachment_point)ÚmtextÚ
mtext_datard   rr   r®   r¯   s         rC   Úcopy_mtext_datarÂ   å   s  € ð ×+Ñ+€E„JØ
�)‰)€CÜ,¨Z×-=Ñ-=Ó>Ñ€IˆzØ€C„IØÐØ#ˆŒØ×"Ñ"€C„JØ�9‰9Ð Ð Ð Ü$Ø×Ñ §¡óç	�c�$‰$ð 
‡I�I„Oð ×Ñ×'Ñ'¬Ô/Ø"×,Ñ,ˆŒØ#×2Ñ2€CÔà× Ñ  5Ñ(€C„IØ(×<Ñ<€CÔØ'×:Ñ:€CÔØ#×2Ñ2€CÔà%×/Ñ/€CÕrB   c                ó¦  — t        dt        j                  d| j                  ¬«      «      }| j                  j
                  |j                  _        | j                  }|j                  }|€t        d«      ‚|j                  }|j                  |j                  _
        |�2t        |||«       |j                  rt        ||«       t        |||«       |S )Nr.   ÚMTEXT)rŽ   z MULTILEADER has no MTEXT content)r
   r   ÚnewrŽ   rr   Úlayerru   rÀ   Ú	TypeErrorrd   r]   rÂ   Úhas_bg_fillÚset_mtext_bg_fillÚset_mtext_columns)r~   rÀ   ru   rÁ   rd   s        rC   Ú
make_mtextrË   ÿ   s§   € Ü�œ'Ÿ+™+ g°7·;±;Ô?Ó@€EØ—k‘k×'Ñ'€E‡I�I„OØ�o‰o€GØ—‘€JØÐÜÐ:Ó<Ð<Ø�M‰M€Eà#×/Ñ/€E‡I�IÔØÐÜ˜˜z¨5Ô1Ø×!Ò!Ü˜e ZÔ0Ü˜% ¨UÔ3Ø€LrB   c                óò  — |j                   | j                  _        d| j                  _        t        j
                  | j                  _        |j                  | j                  _        t	        j                  |j                  «      \  }}|t        v r|| j                  _        n$|t        j                  k(  r|| j                  _        |j                  s|t        j                  k(  rd| j                  _        y y )NrE   é   )Úbg_scale_factorrr   Úbox_fill_scaleÚbg_fillr   r©   Úbg_fill_colorÚbg_transparencyÚbg_fill_transparencyrª   Úbg_colorr«   r¬   Úbg_fill_true_colorÚuse_window_bg_colorÚCOLOR_TYPE_WINDOW_BG)rÀ   rÁ   r°   r±   s       rC   rÉ   rÉ     s¹   € ð  *×9Ñ9€E‡I�IÔØ€E‡I�IÔÜ$Ÿn™n€E‡I�IÔØ%/×%?Ñ%?€E‡I�IÔ"Ü×3Ñ3°J×4GÑ4GÓHÑ€J�Ø”_Ñ$Ø"'ˆ�	‰	ÕØ	”v×,Ñ,Ò	,Ø',ˆ�	‰	Ô$ð 	×&Ò&Øœ×4Ñ4Ò4ð ˆ�	‰	Õð 5rB   c                 ó   — y r¨   rA   )rÀ   rÁ   rd   s      rC   rÊ   rÊ   &  s   € ð
 	rB   c                óº   — | j                   }|j                  �|j                  j                  S |j                  �|j                  j                  S |j                  S r¨   )ru   rÀ   rµ   ÚblockÚplane_origin©Úentityru   s     rC   Ú_get_insertrÞ   .  sK   € Ø�n‰n€GØ‡}�}Ð Ø�}‰}×#Ñ#Ð#Ø	�‰Ð	"Ø�}‰}×#Ñ#Ð#Ø×ÑÐrB   c                óº   — | j                   }|j                  �|j                  j                  S |j                  �|j                  j                  S |j                  S r¨   )ru   rÀ   r·   rÚ   Úplane_z_axisrÜ   s     rC   Ú_get_extrusionrá   7  sK   € Ø�n‰n€GØ‡}�}Ð Ø�}‰}×&Ñ&Ð&Ø	�‰Ð	"Ø�}‰}×&Ñ&Ð&Ø×ÑÐrB   c                ó¼   — 	 | j                   r%| j                  j                  | j                  «      S 	 |j                  | j                  «      S # t        $ r Y Œ&w xY wr¨   )Úhas_dogleg_vectorÚdogleg_vectorr£   rR   ÚZeroDivisionError)ÚleaderÚdefaults     rC   Ú_get_dogleg_vectorrè   @  s_   € ðØ×#Ò#Ø×'Ñ'×1Ñ1°&×2FÑ2FÓGÐGð $ð ×Ñ˜V×1Ñ1Ó2Ð2øô ò Ùðús   ‚0A Á	AÁAc                ó¦   — |j                   j                  | «      }|€t        j                  d| › d�«       y |j                  j                  d«      S )Nzrequired BLOCK_RECORD entity #ú does not existr¶   )r—   rw   r˜   Úerrorrr   )r›   rŽ   Úblock_records      rC   Ú_get_block_namerí   J  sL   € Ø—<‘<×#Ñ# FÓ+€LØÐÜ�‰Ð5°f°X¸_ÐMÔNØØ×Ñ×Ñ Ó'Ð'rB   c                  ó"  — e Zd Zdd„Zedd„«       Zedd„«       Zedd„«       Zedd„«       Zdd„Z	dd„Z
dd„Zdd d
„Zd!d„Zd!d„Zd!d„Zd!d„Zd"d„Zd!d„Zd#d„Zd#d„Z	 d$	 	 	 	 	 d%d„Zd&d„Zd'd„Z	 	 d(	 	 	 	 	 d)d„Zdd*d„Z	 	 	 	 	 	 	 	 	 	 d+d„Zy	),r‘   c                óh  — g | _         || _        || _        t        ||«      | _        |j
                  | _        t        |«      | _        t        |«      | _	        d | _
        | j                  j                  t        «      st        | j                  «      | _
        | j                  j                  | _        | j
                  j                   | _        |j"                  j$                  | _        | j'                  «       | _        | j                  j+                  d«      | _        t/        | j                  j+                  d«      «      \  }}|| _        || _        | j                  j+                  d«      | _        d| _        t9        | j                  j+                  d«      «      | _        |j<                  D �ci c]  }|j>                  |j@                  “Œ c}| _        | j                  j+                  d«      | _!        d | _"        d | _#        t9        | j                  j+                  d«      «      | _$        | j                  j+                  d«      | _%        | j                  j+                  d	«      | _&        | j                  j+                  d
«      | _'        | j                  j+                  d«      | _(        y c c}w )NrJ   rF   rD   FrP   rT   rg   rY   re   rh   ri   ))Úentitiesr~   rŽ   rœ   r}   ru   rÞ   rµ   rá   r·   Úocsr¸   r   r   ÚzÚ	elevationrd   rr   rÆ   Úlinetype_nameÚlinetyperw   Ú
lineweightr²   Úleader_aci_colorÚleader_true_colorrD   r^   rz   rP   Úarrow_headsÚindexr›   rT   Údxf_mtext_entityÚ_dxf_mtext_extentsÚhas_horizontal_attachmentÚleft_attachment_typeÚright_attachment_typeÚtop_attachment_typeÚbottom_attachment_type)r|   r~   rŽ   r®   r¯   Úheads         rC   r   zRenderEngine.__init__S  s  € Ø*,ˆŒØˆŒØˆŒÜ+4°W¸cÓ+BˆŒ
Ø—‘ˆŒÜ! 'Ó*ˆŒÜ-¨gÓ6ˆŒØ"&ˆŒØ�~‰~×%Ñ%¤fÔ-Ü˜4Ÿ>™>Ó*ˆDŒHØ $§¡§¡ˆŒð !ŸL™L×.Ñ.ˆŒ
Ø—[‘[×&Ñ&ˆŒ
Ø×*Ñ*Ó,ˆŒØŸ*™*Ÿ.™.Ð)<Ó=ˆŒÜ 0Ø�J‰J�N‰NÐ.Ó/ó!
Ñˆ	�:ð &/ˆÔØ0:ˆÔØ $§
¡
§¡¨}Ó =ˆÔØ#ˆÔÜ $ T§Z¡Z§^¡^°LÓ%AÓ BˆŒà07×0CÒ0Có,
Ù0C¨ˆD�J‰J˜Ÿ™Ñ#Ð0Cñ,
ˆÔð "&§¡§¡Ð0CÓ!DˆÔØ37ˆÔØAEˆÔÜ)-Ø�J‰J�N‰NÐ6Ó7ó*
ˆÔ&ð %)§J¡J§N¡NÐ3NÓ$OˆÔ!Ø%)§Z¡Z§^¡^Ø(ó&
ˆÔ"ð $(§:¡:§>¡>Ð2LÓ#MˆÔ Ø&*§j¡j§n¡nØ)ó'
ˆÕ#ùò,
s   Æ1J/c                ó   — | j                   d uS r¨   )rñ   ©r|   s    rC   Úhas_extrusionzRenderEngine.has_extrusion€  s   € à�x‰x˜tÐ#Ð#rB   c                ó2   — | j                   j                  d uS r¨   )ru   rÀ   r  s    rC   Úhas_text_contentzRenderEngine.has_text_content„  ó   € à�|‰|×!Ñ!¨Ð-Ð-rB   c                ó2   — | j                   j                  d uS r¨   )ru   rÚ   r  s    rC   Úhas_block_contentzRenderEngine.has_block_contentˆ  r  rB   c                óÄ   — | j                   �| j                   S | j                  �#t        j                  | j                  «      \  }}nd\  }}||f| _         | j                   S )z Calculate MTEXT width on demand.©ç        r  )rü   rû   r   Úestimate_mtext_extents)r|   rº   Úheights      rC   Úmtext_extentszRenderEngine.mtext_extentsŒ  sj   € ð ×"Ñ"Ð.Ø×*Ñ*Ð*Ø× Ñ Ð,ô &×<Ñ<Ø×%Ñ%ó‰MˆE‘6ð %‰MˆE�6Ø#(¨& /ˆÔØ×&Ñ&Ð&rB   c                ó¾   — | j                   j                  «        t        | j                  «      dkD  r | j	                  «        | j                  «        | j                   S )z'Entry point to render MLEADER entities.ç•Ö&è.>)rð   ÚclearÚabsrd   Úadd_contentÚadd_leadersr  s    rC   r’   zRenderEngine.runž  sD   € à�‰×ÑÔÜˆt�z‰z‹?˜TÒ!Ø×ÑÔØ×ÑÔà�}‰}ÐrB   c                óþ   — | j                   j                  d«      }| j                  j                  j                  |«      }|�|j                  j
                  S t        j                  d|› d| j                  › �«       y)NrH   zinvalid linetype handle #ú in Ú
Continuous)	r}   rw   rŽ   r—   rr   r¶   r˜   r™   r~   )r|   r›   Últypes      rC   rô   zRenderEngine.linetype_name§  sd   € Ø—‘—‘Ð 8Ó9ˆØ—‘×!Ñ!×%Ñ% fÓ-ˆØÐØ—9‘9—>‘>Ð!Ü�‰Ð2°6°(¸$¸t¿|¹|¸nÐMÔNØrB   c                ó.  — d}| j                   j                  || j                  «      }|�|dk(  r|S | j                  j                  j                  |«      }|€(t
        j                  d|› d| j                  › d�«       |S |j                  j                  S )NÚ_CLOSED_FILLEDÚ0zarrow block #r  z0 does not exist, replaced by closed filled arrow)
rù   rw   rT   rŽ   r—   r˜   r™   r~   rr   r¶   )r|   rú   Úclosed_filledr›   rì   s        rC   Úarrow_block_namezRenderEngine.arrow_block_name¯  s—   € Ø(ˆØ×!Ñ!×%Ñ% e¨T×-CÑ-CÓDˆØˆ>˜V sš]Ø Ð Ø—x‘x×(Ñ(×,Ñ,¨VÓ4ˆØÐÜ�N‰NØ ˜x t¨D¯L©L¨>ð :2ð 3ôð !Ð Ø×Ñ×$Ñ$Ð$rB   Nc                óÒ   — | j                   }| j                  }|r |t        j                  urt	        |«      \  }}| j
                  || j                  | j                  dœ}|�||d<   |S )N)rÆ   r±   rõ   rö   r¯   )r÷   rø   r   ÚBY_BLOCK_RAW_VALUEr²   rÆ   rõ   rö   )r|   r­   r®   r¯   Úattribss        rC   Úleader_line_attribsz RenderEngine.leader_line_attribs½  sq   € Ø×)Ñ)ˆ	Ø×+Ñ+ˆ
ñ ˜¬&×*CÑ*CÑCÜ$4°YÓ$?Ñ!ˆI�zð —Z‘ZØØŸ™ØŸ/™/ñ	
ˆð Ð!Ø$.ˆG�LÑ!ØˆrB   c                óx   — | j                   r| j                  «        y | j                  r| j                  «        y y r¨   )r  Úadd_mtext_contentr
  Úadd_block_contentr  s    rC   r  zRenderEngine.add_contentÏ  s1   € à× Ò Ø×"Ñ"Õ$Ø×#Ò#Ø×"Ñ"Õ$ð $rB   c                ó¬   — t        | j                  «      }| j                  j                  |«       || _        | j
                  r| j                  «        y y r¨   )rË   r~   rð   Úappendrû   r^   Úadd_text_frame)r|   rÀ   s     rC   r%  zRenderEngine.add_mtext_contentÖ  sD   € Ü˜4Ÿ<™<Ó(ˆØ�‰×Ñ˜UÔ#Ø %ˆÔØ×ÒØ×ÑÕ!ð rB   c                 ó   — y r¨   rA   r  s    rC   r)  zRenderEngine.add_text_frameÝ  s   € ð 	rB   c           	     ó¼  — | j                   j                  }|€J ‚t        |j                  | j                  «      }|€y |j
                  }t        j                  |j                  «      }| j                  �| j                  j                  |«      }t        |j                  «      \  }}|j                  }|||||j                  |j                  |j                   |j"                  dœ}|�||d<   t%        dt'        j(                  d|| j                  ¬«      «      }	| j*                  j-                  |	«       | j.                  j0                  r| j3                  |	«       y y )N)r¶   rµ   Úrotationr±   r·   ÚxscaleÚyscaleÚzscaler¯   r-   ÚINSERT©Ú
dxfattribsrŽ   )ru   rÚ   rí   r_   rŽ   rµ   ÚmathÚdegreesr,  rñ   Úfrom_wcsr²   r±   rd   r·   ÚxÚyrò   r
   r   rÅ   rð   r(  r~   Úblock_attribsÚadd_block_attributes)
r|   rÚ   Ú
block_nameÚlocationr,  r®   r¯   rd   r"  rµ   s
             rC   r&  zRenderEngine.add_block_contentå  s(  € Ø—‘×"Ñ"ˆØÐ Ð Ð Ü$ U×%>Ñ%>ÀÇÁÓIˆ
ØÐØØ—<‘<ˆÜ—<‘< §¡Ó/ˆØ�8‰8ÐØ—x‘x×(Ñ(¨Ó2ˆHÜ 0°·±Ó =Ñˆ	�:Ø—‘ˆð ØØ ØØŸ™Ø—g‘gØ—g‘gØ—g‘gñ	
ˆð Ð!Ø$.ˆG�LÑ!ÜØ”g—k‘k (°wÀDÇHÁHÔMó
ˆð 	�‰×Ñ˜VÔ$Ø�<‰<×%Ò%Ø×%Ñ% fÕ-ð &rB   c                ón  — | j                   j                  }t        «       }| j                  j                  D ]h  }|j                  |j                  «      }|€$t        j                  d|j                  › d�«       ŒD|j                  j                  }|j                  ||<   Œj |r|j                  |«       y y )Nzrequired ATTDEF entity #rê   )rŽ   r—   Údictr~   r8  rw   r›   r˜   rë   rr   Útagr    Úadd_auto_attribs)r|   rµ   r—   ÚvaluesÚattribÚattdefr>  s          rC   r9  z!RenderEngine.add_block_attributes  s–   € Ø—8‘8×$Ñ$ˆÜ!%£ˆØ—l‘l×0Ô0ˆFØ—\‘\ &§-¡-Ó0ˆFØˆ~Ü—‘Ø.¨v¯}©}¨o¸_ÐMôð Ø—*‘*—.‘.ˆCØ Ÿ+™+ˆF�3ŠKð 1ñ Ø×#Ñ# FÕ+ð rB   c                ó  — | j                   dk(  ry | j                  j                  D ]a  }|j                  D ]  }| j	                  ||«       Œ | j
                  sŒ3|j                  r| j                  |«       ŒQ| j                  |«       Œc y r‡   )	rD   ru   ÚleadersÚlinesÚadd_leader_liner  rý   Úadd_text_underlineÚadd_overline)r|   ræ   Úlines      rC   r  zRenderEngine.add_leaders  sy   € Ø×Ñ˜qÒ Øà—l‘l×*Ô*ˆFØŸœ�Ø×$Ñ$ V¨TÕ2ð %ð ×$Ó$Ø×3Ò3ð ×+Ñ+¨FÕ3ð ×%Ñ% fÕ-ñ +rB   c                ó  — | j                   j                  }|€y | j                  dv }| j                  dv }|s|sy |j                  t        |«      z   }| j                  \  }}|| j                   j                  z   }|dk  ry |j                  }	| j                  €=|	j                  }
|j                  j                  j                  «       }|j                  }na| j                  j                  }t         ||	«      «      }
t         ||j                  «      «      j                  «       }t         ||«      «      }t        ||
|
|z   «      }| }|j                  j!                  |r|n| «      }|r|s|r|r| j#                  |||z   «       y y y )N)é   é   rK   r  )ru   rÀ   rþ   rÿ   Úlast_leader_pointrè   r  Úlanding_gap_sizerµ   rñ   Úvec2r¹   Ú
orthogonalr5  r   r   r£   Úadd_dxf_line)r|   ræ   rÀ   Úhas_left_underlineÚhas_right_underlineÚconnection_pointrº   r  ÚlengthÚstartÚstart2dÚup2dÚcp2dr5  Úis_leftÚis_rightrI  s                    rC   rG  zRenderEngine.add_text_underline'  su  € Ø—‘×"Ñ"ˆØˆ=ØØ!×6Ñ6¸)ÐCÐØ"×8Ñ8¸IÐEÐÙ"Ñ&9ØØ!×3Ñ3Ô6HÈÓ6PÑPÐØ×*Ñ*‰ˆˆvØ˜Ÿ™×6Ñ6Ñ6ˆØ�DŠ=Øð —‘ˆØ�8‰8ÐØ—j‘jˆGØ×'Ñ'×,Ñ,×7Ñ7Ó9ˆDØ#×(Ñ(‰Dà—x‘x×(Ñ(ˆHÜ™8 E›?Ó+ˆGÜ™ ×!5Ñ!5Ó6Ó7×BÑBÓDˆDÜ™Ð!1Ó2Ó3ˆDÜ'¨¨g°wÀ±~ÓFˆØ�;ˆØ×#Ñ#×-Ñ-¹©fÀfÀWÓMˆÙÑ*ÙÑ,à×ÑÐ.Ð0@À4Ñ0GÕHð -ˆHrB   c                ó  — | j                   j                  }|€y | j                  dk(  }| j                  dk(  }|s|sy | j                  \  }}|dk  ry |j
                  }|j                  }|j                  j                  |dz  «      }	||	z
  }
||	z   }| j                  €t        ||
|«      }n5| j                  j                  }t         ||«       ||
«       ||«      «      }| }|r|s|r|r| j                  |
|«       y y y )Né
   r  rG   )ru   rÀ   r  r   r  rM  rµ   r¹   r£   rñ   r   r5  rQ  )r|   ræ   rÀ   Úhas_bottom_lineÚhas_top_linerU  r  Úcenterrµ   Úline2rV  ÚendÚbottomr5  Útops                  rC   rH  zRenderEngine.add_overlineI  s  € Ø—‘×"Ñ"ˆØˆ=ØØ×5Ñ5¸Ñ;ˆØ×/Ñ/°2Ñ5ˆÙ¡<ØØ×+Ñ+‰ˆ�Ø�DŠ=Øð
 ×)Ñ)ˆØ—‘ˆØ×$Ñ$×.Ñ.¨v¸©zÓ:ˆØ˜‘ˆØ�u‰nˆà�8‰8ÐÜ*¨6°5¸#Ó>‰Fà—x‘x×(Ñ(ˆHÜ*Ù˜Ó ¡(¨5£/±8¸C³=óˆFð ˆjˆÙ‘©C±LØ×Ñ˜e SÕ)ð 5A¨CrB   c                óÒ   — t        |«      }|j                  }|j                  r2|r|j                  |«       |j                  |t	        |«      z   «       |S |j                  |«       |S r¨   )ÚlistrM  rý   r(  rè   )r|   ræ   Úline_verticesrP   r¤   Ú	end_points         rC   Úleader_verticeszRenderEngine.leader_verticesi  sb   € ô ˜Ó&ˆØ×,Ñ,ˆ	Ø×+Ò+ÙØ—‘ 	Ô*Ø�O‰O˜IÔ(:¸6Ó(BÑBÔCð ˆð �O‰O˜IÔ&ØˆrB   c                ó   — | j                   }|dk(  ry | j                  }|dk(  rd}| j                  ||j                  |«      }t	        |«      dk  ry t        |«      }|j                  }|j                  }| j                  | j                  |«      «      }	| j                  j                  }
| j                  |	|d   ||
|¬«       |t        |	|
«      z  }|dxx   |z  cc<   |dk(  r+t        ||dd  «      D ]  \  }}| j                  |||«       Œ y |dk(  r:|j                   rt#        |«      }n|d   |d   z
  }| j%                  |||g|¬«       y y )	Nr   rG   F)r¶   r;  r¥   rd   r±   rE   éÿÿÿÿéþÿÿÿ)Útangentsr±   )rD   rP   ri  r¤   r¢   r¦   r±   rú   Úcreate_arrow_blockr  ru   rV   Ú	add_arrowr   ÚziprQ  rý   rè   Úadd_dxf_spline)r|   ræ   rI  rD   rP   r¤   Úarrow_directionr­   rú   r:  Ú
arrow_sizeÚarrow_offsetÚsÚeÚend_tangents                  rC   rF  zRenderEngine.add_leader_linew  st  € à×+Ñ+ˆØ˜!ÒØØŸ?™?ˆ
Ø˜!ÒØˆJØ#×3Ñ3Ø�D—M‘M :ó 
ˆô ˆx‹=˜1ÒØä 3°HÓ =ˆØŸ™ˆ	Ø—Z‘ZˆØ×1Ñ1°$×2GÑ2GÈÓ2NÓOˆ
Ø ŸL™L×8Ñ8ˆ
Ø�‰ØØ˜a‘[Ø%ØØð 	ô 	
ð -¬|Ø˜
ó0
ñ 
ˆð 	�‹�|Ñ#‹Ø˜!ÒÜ˜H h¨q¨r lÖ3‘��1Ø×!Ñ! ! Q¨	Õ2ñ 4à˜AÒØ×/Ò/Ü0°Ó8‘à& r™l¨X°b©\Ñ9�Ø×ÑØà)¨;Ð7Øð	  õ ð rB   c                óä   — || j                   j                  vrWt        j                  |«      }|t        vrt        j                  }t        j
                  | j                   j                  |«      }|S r¨   )rŽ   Úblocksr   Ú
arrow_namer  Úcreate_block)r|   r¶   rz  s      rC   rn  zRenderEngine.create_arrow_block¤  sT   € Ø�t—x‘x—‘Ñ&ä×*Ñ*¨4Ó0ˆJØ¤Ñ'Ü#×1Ñ1�
Ü×&Ñ& t§x¡x§¡¸
ÓCˆDØˆrB   c                óì   — | j                  |«      }t        dt        j                  d|| j                  ¬«      «      }|j                  t        ||¬«      «       | j                  j                  |«       y )Nr/   ÚSPLINEr1  )rm  )	r#  r
   r   rÅ   rŽ   Úapply_construction_toolr   rð   r(  )r|   Ú
fit_pointsrm  r±   r"  Úsplines         rC   rq  zRenderEngine.add_dxf_spline­  sc   € ð ×*Ñ*¨5Ó1ˆÜØÜ�K‰K˜¨W¸$¿(¹(ÔCó
ˆð 	×&Ñ&Ü  °hÔ?ô	
ð 	�‰×Ñ˜VÕ$rB   c                ó°   — | j                  |«      }||d<   ||d<   | j                  j                  t        j                  d|| j
                  ¬«      «       y )NrV  rb  ÚLINEr1  )r#  rð   r(  r   rÅ   rŽ   )r|   rV  rb  r±   r"  s        rC   rQ  zRenderEngine.add_dxf_line½  sK   € Ø×*Ñ*¨5Ó1ˆØ ˆ�ÑØˆ�‰Ø�‰×ÑÜ�K‰K˜¨7¸¿¹ÔAõ	
rB   c                ó”  — | j                  |«      }||d<   | j                  �E| j                  j                  |«      }| j                  j                  |«      }| j                  |d<   ||d<   |j                  dz   |d<   ||d<   ||d<   ||d<   | j
                  j                  t        j                  d	|| j                  ¬
«      «       y )Nr¶   r·   rµ   g     €f@r,  r-  r.  r/  r0  r1  )
r#  rñ   r5  r·   Ú	angle_degrð   r(  r   rÅ   rŽ   )r|   r¶   r;  r¥   rd   r±   r"  s          rC   ro  zRenderEngine.add_arrowÅ  sÀ   € ð ×*Ñ*¨5Ó1ˆØˆ�‰Ø�8‰8ÐØ—x‘x×(Ñ(¨Ó2ˆHØŸ™×)Ñ)¨)Ó4ˆIØ#'§>¡>ˆG�KÑ à$ˆ�ÑØ'×1Ñ1°EÑ9ˆ�
ÑØ!ˆ�ÑØ!ˆ�ÑØ!ˆ�ÑØ�‰×ÑÜ�K‰K˜¨W¸$¿(¹(ÔCõ	
rB   )r~   r(   rŽ   r*   )r‹   rz   )r‹   ztuple[float, float])r‹   zlist[DXFGraphic])r‹   rŠ   )rú   Úintr‹   rŠ   r¨   )r­   úOptional[int]r‹   r=  )r‹   ÚNone)rµ   r-   )ræ   r#   ©F)ræ   r#   rg  ú
list[Vec3]r‹   r‰  )ræ   r#   rI  r$   )r¶   rŠ   r‹   rŠ   )NN)r  r‰  rm  zOptional[Iterable[UVec]]r±   r†  )rV  r   rb  r   r±   r†  )
r¶   rŠ   r;  r   r¥   r   rd   Úfloatr±   r…  )r>   r?   r@   r   Úpropertyr  r  r
  r  r’   rô   r  r#  r  r%  r)  r&  r9  r  rG  rH  ri  rF  rn  rq  rQ  ro  rA   rB   rC   r‘   r‘   R  s*  „ ó+
ðZ ò$ó ð$ð ò.ó ð.ð ò.ó ð.ð ò'ó ð'ó"óó%ôó$%ó"óó.ó@,ó.ó& IóD*ðB INðØ ðØ1;ðà	óó+óZð .2Ø#ð	%àð%ð +ð%ð ó	%ô 
ð
àð
ð ð
ð ð	
ð
 ð
ð ô
rB   r‘   c                  ó   — e Zd ZdZdZdZdZy)r8   zThe leader type.r   rE   rG   N)r>   r?   r@   Ú__doc__ÚnoneÚstraight_linesÚsplinesrA   rB   rC   r8   r8   Þ  s   „ Ùà€DØ€NØ�GrB   r8   c                  ó˜   — e Zd ZdZ ej
                  «       Z ej
                  «       Z ej
                  «       Z ej
                  «       Z	y)r5   zÍ
    The leader connection side.

    Vertical (top, bottom) and horizontal attachment sides (left, right)
    can not be mixed in a single entity - this is a limitation of the
    MULTILEADER entity.
    N)
r>   r?   r@   r�  ÚenumÚautoÚleftÚrightrd  rc  rA   rB   rC   r5   r5   ç  s=   „ ñð ˆ4�9‰9‹;€DØˆD�I‰I‹K€EØ
ˆ$�)‰)‹+€CØˆT�Y‰Y‹[�FrB   r5   c                  ó8   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZy)r6   z&The horizontal leader connection type.rk  r   rE   rG   rÍ   rI   rK  rL  é   rK   N)r>   r?   r@   r�  Úby_styleÚtop_of_top_lineÚmiddle_of_top_lineÚmiddle_of_textÚmiddle_of_bottom_lineÚbottom_of_bottom_lineÚbottom_of_bottom_line_underlineÚbottom_of_top_line_underlineÚbottom_of_top_lineÚ bottom_of_top_line_underline_allrA   rB   rC   r6   r6   þ  s>   „ Ù0à€HØ€OØÐØ€NØÐØÐØ&'Ð#Ø#$Ð ØÐØ'(Ñ$rB   r6   c                  ó   — e Zd ZdZdZdZdZy)r7   z$The vertical leader connection type.r   é	   r]  N)r>   r?   r@   r�  r˜  r`  Úcenter_overlinerA   rB   rC   r7   r7     s   „ Ù.à€HØ€FØ�OrB   r7   c                  ó   — e Zd ZdZdZdZdZy)r9   z"The :class:`MText` alignment type.rE   rG   rÍ   N)r>   r?   r@   r�  r”  r`  r•  rA   rB   rC   r9   r9     s   „ Ù,à€DØ€FØ�ErB   r9   c                  ó   — e Zd ZdZdZdZy)r:   z"The :class:`Block` alignment type.r   rE   N)r>   r?   r@   r�  Úcenter_extentsÚinsertion_pointrA   rB   rC   r:   r:     s   „ Ù,à€NØ�OrB   r:   c                  óB   — e Zd ZU dZded<   ded<   ded<   ded<   d	d„Zy)
ÚConnectionBoxzdContains the connection points for all 4 sides of the content, the
    landing gap is included.
    r   r”  r•  rd  rc  c                óÔ   — |t         j                  k(  r| j                  S |t         j                  k(  r| j                  S |t         j                  k(  r| j                  S | j                  S r¨   )r5   r”  r•  rd  rc  )r|   Úsides     rC   rw   zConnectionBox.get/  sS   € Ø”>×&Ñ&Ò&Ø—9‘9ÐØ”^×)Ñ)Ò)Ø—:‘:ÐØ”^×'Ñ'Ò'Ø—8‘8ˆOØ�{‰{ÐrB   N)r¬  r5   r‹   r   )r>   r?   r@   r�  Ú__annotations__rw   rA   rB   rC   rª  rª  $  s"   … ñð ƒJØƒKØ	ƒIØƒLôrB   rª  c                óÌ   — t        j                  | j                  «      sEt        | j                  «      }t	        |j                  | j                  «      «      }|j                  S y)z)Returns the ocs rotation angle of the UCSr  )r   r¸   Úuzr   r   r5  ÚuxÚangle)Úucsrñ   Úx_axis_in_ocss      rC   Úocs_rotationr´  9  sE   € ä�>‰>˜#Ÿ&™&Ô!Ü�#—&‘&‹kˆÜ˜SŸ\™\¨#¯&©&Ó1Ó2ˆØ×"Ñ"Ð"ØrB   c                  ó€  — e Zd Zdd„Zej
                  d„ «       Zd„ Zej
                  dd„«       Zej
                  	 	 	 	 	 	 dd„«       Z	ej
                  dd„«       Z
ej
                  dd„«       Zedd„«       Zed d	„«       Zed!d
„«       Zd"d„Z	 	 d#	 	 	 d$d„Zej&                  ej&                  ej&                  ej&                  fd„Zd%d„Zej0                  dej4                  ej8                  f	 	 	 	 	 d&d„Z	 	 d'	 	 	 d(d„Z	 	 	 	 	 	 d)d„Z	 d*	 	 	 	 	 	 	 d+d„Z d„ Z!d,d„Z"d„ Z#	 	 	 	 	 	 	 	 d-d„Z$e%	 	 	 	 	 	 d.d„«       Z&y)/r2   c                ó–  — |j                   }|€J d«       ‚|j                  j                  }|j                  j	                  |«      }|€t        d|› �«      ‚|| _        || _        || _        t        t        «      | _        | j                  |«       | j                  j                  j                  | j                  j                  _        y )Nr�   zinvalid MLEADERSTYLE handle #)rŽ   rr   r–   r—   rw   Ú
ValueErrorÚ_docÚ_mleader_styleÚ_multileaderr   rf  Ú_leadersÚset_mleader_stylerN  ru   )r|   ÚmultileaderrŽ   r›   r}   s        rC   r   zMultiLeaderBuilder.__init__C  s¶   € Ø�o‰oˆØˆÐ=Ð =Ó=ˆØ—‘×-Ñ-ˆØ!Ÿl™l×.Ñ.¨vÓ6ˆØˆ=ÜÐ<¸V¸HÐEÓFÐFØ"ˆŒ	Ø,1ˆÔØ'ˆÔÜ@KÜóA
ˆŒð 	×Ñ˜uÔ%à×Ñ×#Ñ#×4Ñ4ð 	×Ñ×!Ñ!Õ2rB   c                 ó   — y r¨   rA   r  s    rC   Ú_init_contentz MultiLeaderBuilder._init_contentU  ó   € àrB   c                 ó   — y r¨   rA   r  s    rC   Ú_reset_cachezMultiLeaderBuilder._reset_cacheY  s   € ØrB   c                 ó   — y)zÈReturns the connection box with the connection points on all 4 sides
        in build UCS coordinates. The origin of the build ucs is the insertion
        or attachment point of the content.
        NrA   r  s    rC   Ú_build_connection_boxz(MultiLeaderBuilder._build_connection_box\  s   € ð 	rB   c                 ó   — y r¨   rA   )r|   rµ   r,  s      rC   Ú _transform_content_to_render_ucsz3MultiLeaderBuilder._transform_content_to_render_ucsd  s   € ð 	rB   c                 ó   — y r¨   rA   )r|   Úconversion_factors     rC   Ú_apply_conversion_factorz+MultiLeaderBuilder._apply_conversion_factorj  rÀ  rB   c                 ó   — y r¨   rA   ©r|   r”  rc  s      rC   Ú_set_base_pointz"MultiLeaderBuilder._set_base_pointn  rÀ  rB   c                ó   — | j                   S )z8Returns the :class:`~ezdxf.entities.MultiLeader` entity.)rº  r  s    rC   r½  zMultiLeaderBuilder.multileaderr  s   € ð × Ñ Ð rB   c                ó.   — | j                   j                  S )zCReturns the context entity :class:`~ezdxf.entities.MLeaderContext`.)rº  ru   r  s    rC   ru   zMultiLeaderBuilder.contextw  s   € ð × Ñ ×(Ñ(Ð(rB   c                óB   — | j                   j                  j                  S r¨   )rº  ru   rN  r  s    rC   Ú_landing_gap_sizez$MultiLeaderBuilder._landing_gap_size|  s   € à× Ñ ×(Ñ(×9Ñ9Ð9rB   c                ó   ‡ ‡— ˆ ˆfd„}|‰ _         ‰ j                  j                  }|j                  Št        t        j
                  j                  «       «      }|D ]5  }|j                  |«      sŒ|j                  |‰j                  |«      «       Œ7  |«        t        ‰j                  ‰j                  ‰j                  «      |_        ‰ j                  j!                  |j"                  «       ‰ j%                  «        y)zyReset base properties by :class:`~ezdxf.entities.MLeaderStyle`
        properties. This also resets the content!
        c                 ór   •— ‰j                   ‰ j                  _         ‰j                  ‰ j                  _        y r¨   )r]   ru   rN  )r|   Ú	style_dxfs   €€rC   Úcopy_style_to_contextzCMultiLeaderBuilder.set_mleader_style.<locals>.copy_style_to_context…  s'   ø€ Ø'0×'<Ñ'<ˆD�L‰LÔ$Ø,5×,FÑ,FˆD�L‰LÕ)rB   N)r¹  rº  rr   rf  r)   r"  ÚkeysÚis_supportedÚsetr�   r   rn   rp   rq   ra   ru   Ú	set_scalerd   r¿  )r|   r}   rÔ  Úmultileader_dxfrÕ  ÚkeyrÓ  s   `     @rC   r¼  z$MultiLeaderBuilder.set_mleader_style€  sÐ   ù€ õ
	Gð $ˆÔØ×+Ñ+×/Ñ/ˆØ—I‘Iˆ	ÜÔ&×.Ñ.×3Ñ3Ó5Ó6ˆÛˆCØ×+Ñ+¨CÕ0Ø×#Ñ# C¨×)>Ñ)>¸sÓ)CÕDð ñ 	ÔÜ-1Ø×#Ñ#Ø×#Ñ#Ø×#Ñ#ó.
ˆÔ*ð 	�‰×Ñ˜×4Ñ4Ô5Ø×ÑÕrB   c                óâ   — | j                   }|j                  j                  }|r&d|j                  _        ||z  |j                  _        nd|j                  _        ||z  |j
                  _        y)a  Set the properties how to connect the leader line to the content.

        The landing gap is the space between the content and the start of the
        leader line. The "dogleg" is the first line segment of the leader
        in the "horizontal" direction of the content.

        rE   r   N)r½  rr   rd   rP   rR   ru   rN  )r|   rN   rR   r½  rd   s        rC   Úset_connection_propertiesz,MultiLeaderBuilder.set_connection_propertiesš  s]   € ð ×&Ñ&ˆØ—‘×%Ñ%ˆÙØ)*ˆK�O‰OÔ&Ø,9¸EÑ,AˆK�O‰OÕ)à)*ˆK�O‰OÔ&Ø/:¸UÑ/Bˆ×ÑÕ,rB   c                óà  — | j                   }| j                  }|t        j                  k(  r|j                  j
                  |_        nt        |«      |_        |t        j                  k(  r|j                  j                  |_	        nt        |«      |_	        |t        j                  k(  r|j                  j                  |_        nt        |«      |_        |t        j                  k(  r|j                  j                  |_        nt        |«      |_        | j                  j                  }|j                  |_        |j                  |_        |j                  |_        |j                  |_        y)z1Set the connection type for each connection side.N)ru   r¹  r6   r˜  rr   rY   Úleft_attachmentr…  re   Úright_attachmentr7   rh   Útop_attachmentri   Úbottom_attachmentrº  )r|   r”  r•  rd  rc  ru   r}   rr   s           rC   Úset_connection_typesz'MultiLeaderBuilder.set_connection_types¯  s  € ð —,‘,ˆØ×#Ñ#ˆØÔ'×0Ñ0Ò0Ø&+§i¡i×&IÑ&IˆGÕ#ä&)¨$£iˆGÔ#àÔ(×1Ñ1Ò1Ø',§y¡y×'KÑ'KˆGÕ$ä'*¨5£zˆGÔ$àÔ$×-Ñ-Ò-Ø%*§Y¡Y×%GÑ%GˆGÕ"ä%(¨£XˆGÔ"àÔ'×0Ñ0Ò0Ø(-¯	©	×(MÑ(MˆGÕ%ä(+¨F«ˆGÔ%à×Ñ×#Ñ#ˆØ(/×(?Ñ(?ˆÔ%Ø)0×)AÑ)AˆÔ&Ø'.×'=Ñ'=ˆÔ$Ø*1×*CÑ*CˆÕ'rB   c                ón  — t        |«      }|dk  rt        d|› �«      ‚| j                  }| j                  }|j                  j
                  }	 ||z  }||j                  _        |j                  xj                  |z  c_        |j                  |«       | j                  |«       y# t        $ r |}Y Œ`w xY w)z¢Set the overall scaling factor for the whole entity,
        except for the leader line vertices!

        Args:
            scale: scaling factor > 0.0

        r  zinvalid scaling factor: N)
rŠ  r·  ru   r½  rr   rd   rå   rR   rØ  rÉ  )r|   rd   Ú	new_scaleru   r½  Ú	old_scalerÈ  s          rC   Úset_overall_scalingz&MultiLeaderBuilder.set_overall_scalingÓ  s³   € ô ˜%“Lˆ	Ø˜ÒÜÐ7¸°wÐ?Ó@Ð@Ø—,‘,ˆØ×&Ñ&ˆØ—O‘O×)Ñ)ˆ	ð	*à )¨IÑ 5Ðð !*ˆ�‰ÔØ�‰×%Ò%Ð):Ñ:Õ%Ø×Ñ˜)Ô$Ø×%Ñ%Ð&7Õ8øô !ò 	*Ø )Òð	*ús   ÁB& Â&B4Â3B4r©   c                óp  — | j                   }t        j                  |«      |j                  _        | j
                  j                  j                  |«      }|€t        d|› d�«      ‚|j                  j                  |j                  _
        ||j                  _        t        |«      |j                  _        y)a  Set leader line properties.

        Args:
            color: line color as :ref:`ACI` or RGB tuple
            linetype: as name string, e.g. "BYLAYER"
            lineweight: as integer value, see: :ref:`lineweights`
            leader_type: straight lines of spline type

        Nzinvalid linetype name 'Ú')rº  r   Úencode_raw_colorrr   rF   r¸  Ú	linetypesrw   r·  r›   rH   rJ   r…  rD   )r|   r±   rõ   rö   rD   r~   Ú	linetype_s          rC   Úset_leader_propertiesz(MultiLeaderBuilder.set_leader_propertiesì  sŽ   € ð  ×#Ñ#ˆÜ(.×(?Ñ(?ÀÓ(Fˆ�‰Ô%Ø—I‘I×'Ñ'×+Ñ+¨HÓ5ˆ	ØÐÜÐ6°x°jÀÐBÓCÐCØ-6¯]©]×-AÑ-Aˆ�‰Ô*Ø(2ˆ�‰Ô%Ü"% kÓ"2ˆ�‰ÕrB   c                ó^  — |dk(  r | j                   j                  j                  }|| j                  j                  _        || j                  _        |rDt        j                  | j                  j                  |«      | j                  j                  _	        y| j                  j                  `	y)a  Set leader arrow properties all leader lines have the same arrow
        type.

        The MULTILEADER entity is able to support multiple arrows, but this
        seems to be unsupported by CAD applications and is therefore also not
        supported by the builder classes.

        r  N)
r¹  rr   rV   rº  ru   r   Úarrow_handler¸  ry  rT   )r|   r¶   Úsizes      rC   Úset_arrow_propertiesz'MultiLeaderBuilder.set_arrow_properties  s‡   € ð �3Š;Ø×&Ñ&×*Ñ*×:Ñ:ˆDØ04ˆ×Ñ×ÑÔ-Ø'+ˆ�‰Ô$ÙÜ6<×6IÑ6IØ—	‘	× Ñ  $ó7ˆD×Ñ×!Ñ!Õ3ð ×!Ñ!×%Ñ%Ñ7rB   c                óR   — | j                   |   j                  t        |«      «       y)a±  Add leader as iterable of vertices in render UCS coordinates
        (:ref:`WCS` by default).

        .. note::

            Vertical (top, bottom) and horizontal attachment sides (left, right)
            can not be mixed in a single entity - this is a limitation of the
            MULTILEADER entity.

        Args:
            side: connection side where to attach the leader line
            vertices: leader vertices

        N)r»  r(  rf  )r|   r¬  r¤   s      rC   rF  z"MultiLeaderBuilder.add_leader_line  s   € ð" 	�‰�dÑ×"Ñ"¤4¨£>Õ2rB   Nc                ó8  — t        |t        «      sJ d«       ‚t        j                  |«      }t	        j
                  |«      }| j                  «       }|j                  d|j                  |j                  f«       | j                  «        | j                  ||«       | j                  «        | j                  |j                  |j                  j                   «      |j                  |j"                  j                   «      ¬«       | j$                  j&                  j)                  «        | j*                  j-                  «       D ](  \  }}| j/                  |||j1                  |«      |«       Œ* |�| j3                  |«       | j4                  j7                  «        y)aŒ  Compute the required geometry data. The construction plane is
        the xy-plane of the given render :class:`~ezdxf.math.UCS`.

        Args:
            insert: insert location for the content in render UCS coordinates
            rotation: content rotation angle around the render UCS z-axis in degrees
            ucs: the render :class:`~ezdxf.math.UCS`, default is the :ref:`WCS`

        z insert has to be a Vec2() objectrÍ   )r”  rc  N)Ú
isinstancer   r3  Úradiansr   Úz_rotaterÄ  Úset_rowr6  r7  Ú$_set_required_multileader_attributesrÆ  Ú_set_attachment_directionrÌ  Ú	transformr”  Úvec3rc  ru   rD  r  r»  ÚitemsÚ_build_leaderrw   Ú_transform_to_wcsr½  Úupdate_proxy_graphic)r|   rµ   r,  r²  ÚmÚconnection_boxr¬  Úleader_liness           rC   ÚbuildzMultiLeaderBuilder.build2  sD  € ô ˜&¤$Ô'ÐKÐ)KÓKÐ'Ü—<‘< Ó)ˆä×Ñ˜hÓ'ˆØ×3Ñ3Ó5ˆØ	�	‰	�!�f—h‘h §¡Ð)Ô*à×1Ñ1Ô3Ø×-Ñ-¨f°hÔ?Ø×&Ñ&Ô(Ø×ÑØ—‘˜^×0Ñ0×5Ñ5Ó6Ø—;‘;˜~×4Ñ4×9Ñ9Ó:ð 	ô 	
ð 	�‰×Ñ×"Ñ"Ô$à"&§-¡-×"5Ñ"5Ö"7ÑˆD�,Ø×Ñ˜|¨T°>×3EÑ3EÀdÓ3KÈQÕOð #8àˆ?Ø×"Ñ" 3Ô'Ø×Ñ×-Ñ-Õ/rB   c                óR  — | j                   }|r™t        j                  |v xs t        j                  |v }t        j                  |v xs t        j
                  |v }|r|rt        d«      ‚|rdnd| j                  j                  _	        |rd| j                  j                  _
        y y y )Nz7invalid mix of horizontal and vertical connection typesr   rE   F)r»  r5   r”  r•  rd  rc  r=   rº  rr   rg   rP   )r|   rD  Ú
horizontalÚverticals       rC   rø  z,MultiLeaderBuilder._set_attachment_directionT  s³   € Ø—-‘-ˆÙÜ(×-Ñ-°Ð8ò Ü×$Ñ$¨Ð/ð ô '×*Ñ*¨gÐ5ò Ü×%Ñ%¨Ð0ð ñ ™hÜ)ØMóð ñ  ‘ Qð ×Ñ×!Ñ!Ô;ñ Ø38�×!Ñ!×%Ñ%Õ0ð ð rB   c                óN   — | j                   j                  |j                  «       y r¨   )r½  rù  Úmatrix)r|   r²  s     rC   rý  z$MultiLeaderBuilder._transform_to_wcsh  s   € à×Ñ×"Ñ" 3§:¡:Õ.rB   c                ó  — | j                   j                  }| j                  }|j                  d«      }|�||j                  vrC|j
                  j                  d«      }|€t        d«      ‚|j                  j                  |_        d|_	        y )NrH   ÚBYLAYERz*required linetype 'BYLAYER' does not existiÿÿÿ)
r½  rr   r¸  rw   r—   rê  r·  r›   rH   rm   )r|   rr   rŽ   r›   rõ   s        rC   r÷  z7MultiLeaderBuilder._set_required_multileader_attributesl  s{   € Ø×Ñ×"Ñ"ˆØ�i‰iˆØ—‘Ð1Ó2ˆØˆ>˜V¨3¯<©<Ñ7Ø—}‘}×(Ñ(¨Ó3ˆHØÐÜ Ð#MÓOÐOØ)1¯©×)<Ñ)<ˆCÔ&Ø&0ˆÕ#rB   c                óø  — t         |   }t        «       }t        | j                  j                  «      |_        t        | j                  j                  j                  «      |_	        d|_
        d|_        ||_        |t        j                  k(  s|t        j                  k(  rd|_        nd|_        | j"                  j                  j$                  r#|j&                  ||j                   z  z   |_        n|j&                  |_        |j+                  |j(                  «      |_        |j-                  |j                  «      |_        | j/                  ||«       | j                  j                  j1                  |«       y )NrE   r   )ÚDOGLEG_DIRECTIONSr#   r¢   ru   rD  rú   rŠ  rº  rr   rR   rã   Úhas_last_leader_linerä   r5   r”  r•  Úattachment_directionr½  rP   rú  rM  rù  Útransform_directionÚ_append_leader_linesr(  )r|   r  r¬  rT  rÿ  Údogleg_directionræ   s          rC   rü  z MultiLeaderBuilder._build_leaderw  s<  € ô -¨TÑ2ÐÜ“ˆÜ˜4Ÿ<™<×/Ñ/Ó0ˆŒô  % T×%6Ñ%6×%:Ñ%:×%HÑ%HÓIˆÔØ#$ˆÔ àð 	Ô#ð  0ˆÔØ”>×&Ñ&Ò&¨$´.×2FÑ2FÒ*FØ*+ˆFÕ'à*+ˆFÔ'ð ×Ñ×Ñ×*Ò*Ø'7×'<Ñ'<Ø  F×$8Ñ$8Ð#8Ñ8ñ(ˆFÕ$ð (8×'<Ñ'<ˆFÔ$ð $%§;¡;¨v×/GÑ/GÓ#HˆÔ Ø ×4Ñ4°V×5IÑ5IÓJˆÔð 	×!Ñ! &¨,Ô7Ø�‰×Ñ×#Ñ# FÕ+rB   c                ó¶   — t        |«      D ]K  \  }}t        «       }||_        t        j                  |«      |_        | j                  j                  |«       ŒM y r¨   )Ú	enumerater$   rú   r   rf  r¤   rE  r(  )ræ   r  rú   r¤   rI  s        rC   r  z'MultiLeaderBuilder._append_leader_lines£  sG   € ô  )¨Ö6‰OˆE�8Ü“<ˆDØˆDŒJÜ ŸI™I hÓ/ˆDŒMØ�L‰L×Ñ Õ%ñ	  7rB   ©r½  r(   ©r‹   rª  ©rµ   r   r,  rŠ  r‹   r‡  ©rÈ  rŠ  r‹   r‡  ©r”  r   rc  r   )r‹   r(   )r‹   r%   ©r‹   rŠ  )r}   r&   r  )rN   rŠ  rR   rŠ  )rd   rŠ  )r±   úUnion[int, colors.RGB]rõ   rŠ   rö   r…  )Ú r  )r¶   rŠ   rï  rŠ  )r¬  r5   r¤   zIterable[Vec2]r‹   r‡  )r  N)rµ   r   r,  rŠ  r²  úOptional[UCS]r‹   r‡  )r²  r   r‹   r‡  )r  úlist[list[Vec2]]r¬  r5   rT  r   rÿ  r   )ræ   r#   r  r  r‹   r‡  )'r>   r?   r@   r   ÚabcÚabstractmethodr¿  rÂ  rÄ  rÆ  rÉ  rÌ  r‹  r½  ru   rÐ  r¼  rÜ  r6   r˜  r7   râ  ræ  r   r©   r   ÚLINEWEIGHT_BYBLOCKr8   r�  rì  rð  rF  r  rø  rý  r÷  rü  Ústaticmethodr  rA   rB   rC   r2   r2   B  sJ  „ ó
ð$ 	×Ññó ðòð 	×Ñòó ðð 	×ÑðØðØ&+ðà	òó ðð
 	×Ñòó ðð 	×Ñòó ðð ò!ó ð!ð ò)ó ð)ð ò:ó ð:óð8 !Ø"ðCàðCð óCð. "×*Ñ*Ø"×+Ñ+Ø×'Ñ'Ø!×*Ñ*ó"DóH9ð6 )/¯©Ø!Ø×2Ñ2Ø×-Ñ-ð3à%ð3ð ð3ð ó	3ð6 Øð8àð8ð ó8ð43Ø"ð3Ø.<ð3à	ó3ð( IMð 0Øð 0Ø&+ð 0Ø8Eð 0à	ó 0òD9ó(/ò	1ð*,à&ð*,ð ð*,ð ð	*,ð
 ó*,ðX ð&Øð&Ø*:ð&à	ò&ó ñ&rB   r2   c                  ó¼   — e Zd Zd„ Zddej
                  df	 	 	 	 	 	 	 	 	 dd„Zdd„Zdd„Z	 	 	 	 	 	 dd„Z	dd	„Z
dej                  df	 	 	 	 	 	 	 	 	 	 	 	 	 dd
„Zdd„Zy)r3   c                ó–  — | j                  «        | j                  }| j                  }| j                  }d|j                  _        d |_        t        «       }||_        |j                  j                  |_
        |j                  j                  |_        |j                  j                  |_        |j                  j                  |_        y )NrG   )rÂ  ru   r¹  rº  rr   rW   rÚ   r'   rÀ   Údefault_text_contentr´   rX   r–   r\   r±   Útext_attachment_pointr¾   )r|   ru   r}   r~   rÀ   s        rC   r¿  z%MultiLeaderMTextBuilder._init_content¸  s˜   € Ø×ÑÔØ—,‘,ˆØ×#Ñ#ˆØ×#Ñ#ˆð $%ˆ�‰Ô ØˆŒô “ˆØˆŒà %§	¡	× >Ñ >ˆÔØ$Ÿ[™[×:Ñ:ˆÔØ—k‘k×,Ñ,ˆŒØ!Ÿ+™+×;Ñ;ˆ�rB   Nr  r  c                ó´  — | j                   }| j                  }|�$t        j                  |«      |j                  _        t        |«      |j                  _        | j                  «        |j                  €J ‚t        j                  |«      |j                  _        |r(|| j                  j                  j                  z  |_        |r| j!                  |«       yy)a\  Set MTEXT content.

        Args:
            content: MTEXT content as string
            color: block color as :ref:`ACI` or RGB tuple
            char_height: initial char height in drawing units
            alignment: :class:`TextAlignment` - left, center, right
            style: name of :class:`~ezdxf.entities.Textstyle` as string

        N)rº  ru   r   ré  rr   r\   r…  r$  r¿  rÀ   Ú
text_toolsÚescape_dxf_line_endingsr´   r½  rd   r]   Ú_set_mtext_style)r|   Úcontentr±   r]   r¾   r}   r~   ru   s           rC   Úset_contentz#MultiLeaderMTextBuilder.set_contentÏ  sµ   € ð( ×#Ñ#ˆØ—,‘,ˆàÐÜ%+×%<Ñ%<¸UÓ%CˆG�K‰KÔ"Ü,/°	«Nˆ�‰Ô)Ø×ÑÔà�}‰}Ð(Ð(Ð(Ü(2×(JÑ(JØó)
ˆ�‰Ô%ñ Ø"-°×0@Ñ0@×0DÑ0D×0JÑ0JÑ"JˆGÔÙØ×!Ñ! %Õ(ð rB   c                ó\  — | j                   j                  j                  |«      }|�w|j                  j                  | j
                  j                  _        | j                  j                  €J ‚|j                  j                  | j                  j                  _	        y t        d|› d�«      ‚)Nztext style 'z' does not exist)r¸  rž   rw   rr   r›   rº  rX   ru   rÀ   r–   r·  )r|   r¶   r}   s      rC   r(  z(MultiLeaderMTextBuilder._set_mtext_styleô  s‡   € Ø—	‘	× Ñ ×$Ñ$ TÓ*ˆØÐØ6;·i±i×6FÑ6FˆD×Ñ×!Ñ!Ô3Ø—<‘<×%Ñ%Ð1Ð1Ð1Ø.3¯i©i×.>Ñ.>ˆD�L‰L×ÑÕ+ä˜|¨D¨6Ð1AÐBÓCÐCrB   c           
     óÊ  ‡‡‡‡‡— dˆˆˆfd„}	 	 	 	 dˆˆfd„}| j                   }|j                  Št        ‰t        «      sJ d«       ‚t	        |j
                  «      }t	        |j                  «      }|j                  Š|j                  Št        | j                  «      }t        j                  |j                  «      r.t        j                  |«      }|j                   Š|j"                  Šnt        j$                  |«      \  ŠŠ |«       }|‰z   d‰z  z   }	||	z   dz  }
t'        t)        | ||«      «      t)        |	 ||«      «      t)        |
‰«      t)        |
‰ ‰z
  «      ¬«      S )	zÁReturns the connection box with the connection points on all 4 sides
        in build UCS coordinates. The origin of the build ucs is the attachment
        point of the MTEXT content.
        c                 ót   •— ‰€J ‚‰ } ‰j                   dk(  r‰ dz  ‰z
  } | S ‰j                   dk(  r‰ ‰z
  } | S )NrG   ç      à?rÍ   ©r¾   )r6  ÚgaprÀ   rº   s    €€€rC   Ú
get_left_xzAMultiLeaderMTextBuilder._build_connection_box.<locals>.get_left_x  sW   ø€ ØÐ$Ð$Ð$à�ˆAØ�‰ !Ò#Ø�F˜S‘L 3Ñ&�ð ˆHð —‘ AÒ%Ø�F˜S‘L�ØˆHrB   c                ór  •— ‰t         z  }| t        j                  k(  r‰ dz  S | t        j                  k(  r‰ dz  S | t        j                  k(  r	‰ ‰dz  z   S | t        j
                  t        j                  fv r‰ |z
  S | t        j                  t        j                  t        j                  fv r‰ |z
  S y)Nr.  r  )
ÚUNDERLINE_DISTANCE_FACTORr6   rš  r›  rœ  r�  rž  r   rŸ  r¡  )Ú
connectionÚunderline_distancer]   r  s     €€rC   Úvertical_connection_heightzQMultiLeaderMTextBuilder._build_connection_box.<locals>.vertical_connection_height  sÓ   ø€ ð "-Ô/HÑ!HÐØÔ1×DÑDÒDØ#�| cÑ)Ð)ØÔ3×BÑBÒBØ�w ‘}Ð$ØÔ3×IÑIÒIØ�w ¨sÑ!2Ñ2Ð2ØÜ$×:Ñ:Ü$×DÑDð ñ ð �wÐ!3Ñ3Ð3ØÜ$×7Ñ7Ü$×AÑAÜ$×EÑEð ñ ð
 $�|Ð&8Ñ8Ð8ØrB   zundefined MTEXT contentg       @r.  ©r”  r•  rd  rc  r  )r4  r6   r‹   rŠ  )ru   rÀ   ró  r'   r6   rÞ  rß  r]   rN  rË   rº  r&  Úhas_inline_formatting_codesr    r   Ú
mtext_sizeÚtotal_widthÚtotal_heightr  rª  r   )r|   r1  r6  ru   rÞ  rß  rÝ   rï  Úleft_xÚright_xÚcenter_xr]   r0  r  rÀ   rº   s              @@@@@rC   rÄ  z-MultiLeaderMTextBuilder._build_connection_boxý  sN  ü€ ÷	ð	Ø,ð	àö	ð. —,‘,ˆØ—‘ˆÜ˜%¤Ô+ÐFÐ-FÓFÐ+Ü.¨w×/FÑ/FÓGˆÜ/°×0HÑ0HÓIÐØ×)Ñ)ˆØ×&Ñ&ˆô
 ˜D×-Ñ-Ó.ˆÜ×1Ñ1°&·+±+Ô>Ü×'Ñ'¨Ó/ˆDØ×$Ñ$ˆEØ×&Ñ&‰Fä%×<Ñ<¸VÓD‰MˆE�6á“ˆØ˜5‘. 3¨¡9Ñ,ˆØ˜WÑ$¨Ñ+ˆô Ü�fÑ8¸ÓIÓJÜ�wÑ :Ð;KÓ LÓMÜ�X˜sÓ#Ü˜ 6 '¨C¡-Ó0ô	
ð 	
rB   c                ó°   — | j                   j                  }|€J ‚t        |_        t	        |«      |_        t        j                  |«      |_        ||_	        y r¨   )
ru   rÀ   r   r·   r   rµ   r   Úrotater¹   r,  )r|   rµ   r,  rÀ   s       rC   rÆ  z8MultiLeaderMTextBuilder._transform_content_to_render_ucsC  sI   € ð —‘×"Ñ"ˆØÐ Ð Ð Ü ˆŒÜ˜F“|ˆŒÜ%Ÿ}™}¨XÓ6ˆÔà!ˆ�rB   c                óZ   — | j                   j                  }|€J ‚|j                  |«       y r¨   )ru   rÀ   Úapply_conversion_factor)r|   rÈ  rÀ   s      rC   rÉ  z0MultiLeaderMTextBuilder._apply_conversion_factorN  s,   € Ø—‘×"Ñ"ˆØÐ Ð Ð Ø×%Ñ%Ð&7Õ8rB   c                óÈ  — |}|�||z  }t        |t        «      rt        j                  }n/|j                  dk  rt        j
                  nt        j                  }| j                  ||¬«       t        | j                  j                  j                  «      }	| j                  «       }
t        |t        «      rtd}|j                  dk  r(t        j
                  }|
j
                  j                   }n't        j                  }|
j                  j                   }| j!                  ||¬«       n‘t        |t        «      rvd}	d}|j                  dk\  r(t        j"                  }|
j"                  j                   }n't        j$                  }|
j$                  j                   }| j!                  ||¬«       nt'        d«      ‚|g}|�|j)                  ||z   «       | j+                  ||«       t-        | j.                  j                  j0                  «      }| j2                  }||z   }t4        |   }|	r	|||z   z  }n
t7        «       }||z   t7        ||«      z   }| j9                  ||¬«       y)	a+  Creates a quick MTEXT leader. The `target` point defines where the
        leader points to.
        The `segment1` is the first segment of the leader line relative to the
        `target` point, `segment2` is an optional second line segment relative
        to the first line segment.
        The `connection_type` defines the type of connection (horizontal or
        vertical) and the MTEXT alignment (left, center or right).
        Horizontal connections are always left or right aligned, vertical
        connections are always center aligned.

        Args:
            content: MTEXT content string
            target: leader target point as :class:`Vec2`
            segment1: first leader line segment as relative distance to `insert`
            segment2: optional second leader line segment as relative distance to
                first line segment
            connection_type: one of :class:`HorizontalConnection` or
                :class:`VerticalConnection`
            ucs: the rendering :class:`~ezdxf.math.UCS`, default is the :ref:`WCS`

        Nr  r/  )r”  r•  F)rd  rc  zinvalid connection type)r²  )ró  r7   r9   r`  r6  r•  r”  r*  rz   r½  rr   rP   rÄ  r6   r5   r7  râ  rc  rd  r·  r(  rF  rŠ  rº  rR   rÐ  r  r   r  )r|   r)  ÚtargetÚsegment1Úsegment2Úconnection_typer²  Úoffsetr¾   rP   r   Úmove_text_xr¬  Úmove_text_yÚpointsrR   r0  rM  r  Úlast_segmentrµ   s                        rC   Úquick_leaderz$MultiLeaderMTextBuilder.quick_leaderS  s>  € ð@ ˆØÐØ�hÑˆFÜ�oÔ'9Ô:Ü%×,Ñ,‰Ið (.§x¡x°3¢”×#Ò#¼M×<NÑ<Nð ð 	×Ñ˜¨IÐÔ6ô ˜$×*Ñ*×.Ñ.×9Ñ9Ó:ˆ
Ø×3Ñ3Ó5ˆÜ�oÔ';Ô<ØˆKØ�x‰x˜3ŠÜ%×+Ñ+�Ø-×3Ñ3×5Ñ5Ð5‘ä%×*Ñ*�Ø-×2Ñ2×4Ñ4Ð4�Ø×%Ñ%Ø$Ø%ð &õ ô ˜Ô);Ô<àˆJØˆKØ�x‰x˜3ŠÜ%×,Ñ,�Ø-×4Ñ4×6Ñ6Ð6‘ä%×)Ñ)�Ø-×1Ñ1×3Ñ3Ð3�Ø×%Ñ%Ø#Ø&ð &õ ô
 Ð6Ó7Ð7ð �ˆØÐØ�M‰M˜& 8Ñ+Ô,Ø×Ñ˜T 6Ô*ô ˜d×/Ñ/×3Ñ3×AÑAÓBˆØ×$Ñ$ˆØ" V™OÐÜ,¨TÑ2ÐÙØ+¨}¸sÑ/BÑC‰Lä›6ˆLà Ñ,¬t°KÀÓ/MÑMð 	ð 	�
‰
�6˜sˆ
Õ#rB   c                ó�   — | j                   j                  j                  dk(  r|| j                  _        y || j                  _        y r‡   )rº  rr   rg   ru   Ú
base_pointrË  s      rC   rÌ  z'MultiLeaderMTextBuilder._set_base_point¶  s4   € Ø×Ñ× Ñ ×:Ñ:¸aÒ?Ø&*ˆD�L‰LÕ#à&,ˆD�L‰LÕ#rB   )
r)  rŠ   r±   z Optional[Union[int, colors.RGB]]r]   rŠ  r¾   r9   r}   rŠ   )r¶   rŠ   r  r  r  )r)  rŠ   rD  r   rE  r   rF  zOptional[Vec2]rG  z/Union[HorizontalConnection, VerticalConnection]r²  r  r‹   r‡  r  )r>   r?   r@   r¿  r9   r”  r*  r(  rÄ  rÆ  rÉ  r6   rš  rM  rÌ  rA   rB   rC   r3   r3   ·  sê   „ ò<ð8 Ø Ø#0×#5Ñ#5Øð#)àð#)ð
ð#)ð ð#)ð !ð#)ð ó#)óJDóD
ðL	"Øð	"Ø&+ð	"à	ó	"ó9ð $(ð !×3Ñ3Ø!ða$àða$ð ða$ð ð	a$ð
 !ða$ð
ða$ð ða$ð 
óa$ôF-rB   r3   c                  óÀ   ‡ — e Zd Zdˆ fd„Zd„ Zˆ fd„Zedd„«       Zedd„«       Zdd„Z	dd„Z
dd„Zej                  d	ej                  f	 	 	 	 	 dd
„Zddd„Zdd„Zˆ xZS )r4   c                óP   •— t         ‰| �  |«       d | _        t        «       | _        y r¨   )Úsuperr   Ú_block_layoutr   Ú_extents)r|   r½  Ú	__class__s     €rC   r   z MultiLeaderBlockBuilder.__init__¾  s!   ø€ Ü‰Ñ˜Ô%Ø6:ˆÔÜ#›ˆ�rB   c                ó˜  — | j                  «        | j                  }| j                  }d|j                  _        d |_        t        «       }||_        |j                  j                  |_        |j                  j                  |j                  z  |_
        |j                  j                  |_        |j                  j                  |_        y )NrE   )rÂ  ru   rº  rr   rW   rÀ   r"   rÚ   r_   ra   rd   rb   r,  r`   r±   )r|   ru   r½  rÚ   s       rC   r¿  z%MultiLeaderBlockBuilder._init_contentÃ  s•   € Ø×ÑÔà—,‘,ˆØ×'Ñ'ˆð ()ˆ�‰Ô$ØˆŒô “ˆØˆŒà$/§O¡O×$GÑ$GˆÔ!à!—o‘o×8Ñ8¸7¿=¹=ÑHˆŒØ$Ÿ™×7Ñ7ˆŒØ!—o‘o×1Ñ1ˆ�rB   c                óN   •— t         ‰| �  «        d | _        t        «       | _        y r¨   )rR  rÂ  rS  r   rT  )r|   rU  s    €rC   rÂ  z$MultiLeaderBlockBuilder._reset_cache×  s   ø€ Ü‰ÑÔØ!ˆÔÜ#›ˆ�rB   c                óÐ  — | j                   �| j                   S | j                  j                  }t        |t        «      sJ d«       ‚|j
                  }| j                  j                  j                  |«      }|€t        d|› �«      ‚|j                  j                  }| j                  j                  j                  |«      }|€t        d|› dt        |«      › d�«      ‚|| _         |S )zReturns the block layout.úundefined BLOCK contentzinvalid BLOCK_RECORD handle #zBLOCK 'z' defined by z
 not found)rS  ru   rÚ   ró  r"   r_   r¸  r—   rw   r·  rr   r¶   ry  rŠ   )r|   rÚ   r›   rì   r¶   Úblock_layouts         rC   rZ  z$MultiLeaderBlockBuilder.block_layoutÜ  så   € ð ×ÑÐ)Ø×%Ñ%Ð%à—‘×"Ñ"ˆÜ˜%¤Ô+ÐFÐ-FÓFÐ+à×*Ñ*ˆØ—y‘y×)Ñ)×-Ñ-¨fÓ5ˆØÐÜÐ<¸V¸HÐEÓFÐFØ×Ñ×$Ñ$ˆØ—y‘y×'Ñ'×+Ñ+¨DÓ1ˆØÐÜØ˜$˜˜}¬S°Ó->Ð,?¸zÐJóð ð *ˆÔØÐrB   c                óì   — | j                   j                  sSddlm} | j                  }|j                  d„ |D «       «      }|j                  s|j                  t        g«       || _         | j                   S )z&Returns the bounding box of the block.r   )Úbboxc              3  óH   K  — | ]  }|j                  «       d k7  sŒ|–— Œ y­w)ÚATTDEFN)Údxftype)Ú.0rv  s     rC   Ú	<genexpr>z2MultiLeaderBlockBuilder.extents.<locals>.<genexpr>ù  s!   è ø€ ð #Ù'�a¨1¯9©9«;¸(Ó+B”™<ùs   ‚"›")rT  Úhas_datar;   r\  rZ  ÚextentsÚextendr   )r|   r\  rZ  rc  s       rC   rc  zMultiLeaderBlockBuilder.extentsò  sd   € ð �}‰}×%Ò%Ý"à×,Ñ,ˆLØ—l‘lñ #Ù'ó#ó ˆGð ×#Ò#Ø—‘¤˜yÔ)Ø#ˆDŒMØ�}‰}ÐrB   c           
     óD  — | j                   j                  }t        |t        «      sJ d«       ‚| j                  j
                  j                  }| j                  }| j                  }|j                  j                  }|j                  j                  }|j                  j                  dz  |z  }|j                  j                  dz  |z  }|j                  j                  |z  }	|j                  j                  |z  }
|j                  j                  |z  |	z
  }|j                  j                  |z  |
z
  }|t        j                   k(  rt#        | | d«      |_        d}d}t'        t)        ||z
  |«      t)        ||z   |«      t)        |||z   «      t)        |||z
  «      ¬«      S )zÀReturns the connection box with the connection points on all 4 sides
        in build UCS coordinates. The origin of the build ucs is the insertion
        point of the BLOCK content.
        rY  r.  r   r  r7  )ru   rÚ   ró  r"   rº  rr   rc   rZ  rc  rd   r6  r7  rï  rO  r`  r:   r§  r   rµ   rª  r   )r|   rÚ   rc   rZ  rc  ÚsxÚsyÚwidth2Úheight2Úbase_xÚbase_yr>  Úcenter_ys                rC   rÄ  z-MultiLeaderBlockBuilder._build_connection_box  sp  € ð —‘×"Ñ"ˆÜ˜%¤Ô+ÐFÐ-FÓFÐ+à $× 1Ñ 1× 5Ñ 5× KÑ KÐØ×(Ñ(ˆØ—,‘,ˆØ�[‰[�]‰]ˆØ�[‰[�]‰]ˆØ—‘—‘ #Ñ%¨Ñ*ˆØ—,‘,—.‘. 3Ñ&¨Ñ+ˆØ×(Ñ(×*Ñ*¨RÑ/ˆØ×(Ñ(×*Ñ*¨RÑ/ˆØ—>‘>×#Ñ# bÑ(¨6Ñ1ˆØ—>‘>×#Ñ# bÑ(¨6Ñ1ˆà ¤N×$AÑ$AÒAä  	¨H¨9°aÓ8ˆEŒLØˆHØˆHÜÜ�h Ñ'¨Ó2Ü�x &Ñ(¨(Ó3Ü�X˜x¨'Ñ1Ó2Ü˜ (¨WÑ"4Ó5ô	
ð 	
rB   c                óÚ   — | j                   j                  }t        |t        «      sJ d«       ‚t        |_        |j                  j                  |«      t        |«      z   |_        ||_	        y ©NrY  )
ru   rÚ   ró  r"   r   r·   rµ   r@  r   r,  )r|   rµ   r,  rÚ   s       rC   rÆ  z8MultiLeaderBlockBuilder._transform_content_to_render_ucs"  sT   € Ø—‘×"Ñ"ˆÜ˜%¤Ô+ÐFÐ-FÓFÐ+Ü ˆŒØ—|‘|×*Ñ*¨8Ó4´t¸F³|ÑCˆŒØ!ˆ�rB   c                ó€   — | j                   j                  }t        |t        «      sJ d«       ‚|j	                  |«       y rn  )ru   rÚ   ró  r"   rB  )r|   rÈ  rÚ   s      rC   rÉ  z0MultiLeaderBlockBuilder._apply_conversion_factor)  s6   € Ø—‘×"Ñ"ˆÜ˜%¤Ô+ÐFÐ-FÓFÐ+Ø×%Ñ%Ð&7Õ8rB   ro   c                ó’  — | j                   }| j                  j                  j                  |«      }|€t	        d|› d�«      ‚|j
                  |j                  _        t        j                  |«      |j                  _	        t        |||«      |j                  _        t        |«      |j                  _        | j                  «        y)a(  Set BLOCK content.

        Args:
            name: the block name as string
            color: block color as :ref:`ACI` or RGB tuple
            scale: the block scaling, not to be confused with overall scaling
            alignment: the block insertion point or the center of extents

        Nzundefined BLOCK 'rè  )rº  r¸  ry  rw   r·  r_   rr   r   ré  r`   r   ra   r…  rc   r¿  )r|   r¶   r±   rd   r¾   r~   rÚ   s          rC   r*  z#MultiLeaderBlockBuilder.set_content.  s�   € ð  ×#Ñ#ˆà—	‘	× Ñ ×$Ñ$ TÓ*ˆØˆ=ÜÐ0°°°aÐ8Ó9Ð9à*/×*CÑ*Cˆ�‰Ô'Ü"(×"9Ñ"9¸%Ó"@ˆ�‰ÔÜ)-¨e°U¸EÓ)Bˆ�‰Ô&Ü,/°	«Nˆ�‰Ô)Ø×ÑÕrB   c                óH  — | j                   }| j                  j                  }t        |j	                  «       «      D ]d  \  }}||j
                  j                  k(  sŒ |j                  t        |j
                  j                  |t        |«      t        |«      ¬«      «        y y)aQ  Add BLOCK attributes based on an ATTDEF entity in the block
        definition. All properties of the new created ATTRIB entity are
        defined by the template ATTDEF entity including the location.

        Args:
            tag: attribute tag name
            text: attribute content string
            width: width factor

        )r›   rú   rº   r    N)rZ  rº  r8  r  Úattdefsrr   r>  r(  r!   r›   rŠ  rŠ   )r|   r>  r    rº   rZ  r8  rú   rB  s           rC   Úset_attributez%MultiLeaderBlockBuilder.set_attributeJ  s…   € ð ×(Ñ(ˆØ×)Ñ)×7Ñ7ˆÜ& |×';Ñ';Ó'=Ö>‰MˆE�6Ø�f—j‘j—n‘nÓ$Ø×$Ñ$ÜØ%Ÿz™z×0Ñ0Ø#Ü# E›lÜ  ›Yô	ôñ ñ ?rB   c                ó&   — || j                   _        y r¨   )ru   rO  rË  s      rC   rÌ  z'MultiLeaderBlockBuilder._set_base_pointc  s   € à"&ˆ�‰ÕrB   r  )r‹   z'BlockLayout')r‹   r   r  )rµ   r   r,  rŠ  r  )r¶   rŠ   r±   r  rd   rŠ  )ro   )r>  rŠ   r    rŠ   rº   rŠ  r  )r>   r?   r@   r   r¿  rÂ  r‹  rZ  rc  rÄ  rÆ  rÉ  r   r©   r:   r§  r*  rs  rÌ  Ú__classcell__)rU  s   @rC   r4   r4   ½  sŠ   ø„ õ&ò
2ô(&ð
 òó ðð* òó ðó
óB"ó9ð )/¯©ØØ ×/Ñ/ðàðð &ðð ó	ô8÷2'rB   r4   rˆ  )r~   r(   r‹   zIterator[DXFGraphic])r~   r(   rŽ   r*   r‹   rk   )r›   rŠ   rŽ   r*   r‹   r0   )r¤   r‰  r‹   r   )r­   r…  r‹   ztuple[int, Optional[int]])rÀ   r.   rÁ   r'   rd   rŠ  r‹   r‡  )r~   r(   r‹   r.   )rÀ   r.   rÁ   r'   r‹   r‡  )rÝ   r(   r‹   r   )ræ   r#   rç   r   r‹   r   )r›   rŠ   rŽ   r*   r‹   zOptional[str])r²  r   r‹   rŠ  )oÚ
__future__r   Útypingr   r   r   r   r   r	   r
   r  r3  Úloggingr’  Úcollectionsr   Údataclassesr   r;   r   Ú
ezdxf.mathr   r   r   r   r   r   r   r   r   r   r   r   Úezdxf.entitiesr   Úezdxf.lldxfr   Úezdxf.proxygraphicr   Úezdxf.render.arrowsr   r   Úezdxf.toolsr   r    r&  Úezdxf.entities.mleaderr!   r"   r#   r$   r%   r&   r'   r(   r)   Úezdxf.documentr*   Úezdxf.layoutsr+   r,   r-   r.   r/   r0   Ú__all__Ú	getLoggerr˜   r‚   r3  ÚDXFErrorr=   rˆ   rk   r1   rœ   r    r¦   ÚCOLOR_TYPE_BY_BLOCKÚCOLOR_TYPE_BY_LAYERÚCOLOR_TYPE_ACIr«   r²   rÂ   rË   rÉ   rÊ   rÞ   rá   rè   rí   r‘   ÚIntEnumr8   ÚEnumr5   r”  r•  rd  rc  r  r6   r7   r9   r:   rª  r´  ÚABCr2   r3   r4   rA   rB   rC   Ú<module>r�     sR  ðõ #÷÷ ñ ó Û Û Û Ý #Ý !å ÷÷ ÷ ó õ #Ý Ý +ß 4ß 5÷
÷ 
õ 
ñ Ý&Ý)÷õ ò€ð 
ˆ×	Ñ	˜7Ó	#€ð Ð ð !Ð ô	˜%Ÿ.™.ô 	ðØ�6ðà˜ðð ˜fðð ˜ð	ð
 �6ðð �6ðð �&ðð �Vðð ˜ðð �vðð �Gðð ˜ðð   ðð �wðð ˜7ðð  �'ð!ð" �7ð#ð$ à"ØØ!ØØ$ØØ")Ø$Ø!(Ø 'Ø#*ò=€÷D#:ñ #:ðN ).ð6Øð6àó6ó
Dó	ó!ð ×ÑØ
×ÑØ
×Ñð€ó	!ó0ó4ó$ð*	Øð	Ø'ð	Ø05ð	à	ó	ó ó ð <Bô 3ó(÷I
ñ I
ôX�—‘ô ô�T—Y‘Yô ð  ×Ñ˜Ø×Ñ˜6˜'Ø×Ñ˜˜Ø×Ñ˜6ð	Ð ô)˜4Ÿ<™<ô )ô˜Ÿ™ô ô�D—L‘Lô ô�T—\‘\ô ð ÷ð ó ðó(ôi&˜Ÿ™ô i&ôjC-Ð0ô C-ôLh'Ð0õ h'rB   