Ë
    £èh@É  ã                  óp  — d dl mZ d dlmZmZmZmZmZ d dlZd dl	Z	d dl
mZmZmZmZmZmZ d dl
mZmZmZmZ d dlmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZ d dl m!Z! d dl"m#Z#m$Z$ erd dl%m&Z& d dl"m'Z' d dl(m)Z)  G d„ de«      Z*dZ+dZ,e,dz   Z-e,dz   Z.dZ/d2d„Z0d3d„Z1	 	 	 	 d4	 	 	 	 	 	 	 	 	 	 	 d5d„Z2d6d„Z3 G d„ d«      Z4 G d„ d«      Z5 G d„ d «      Z6 G d!„ d"«      Z7 G d#„ d$«      Z8 G d%„ d&e8«      Z9 G d'„ d(«      Z: G d)„ d*«      Z;d7d+„Z<	 	 	 	 	 	 	 	 d8d,„Z=d9d-„Z>	 	 	 	 	 	 	 	 	 	 	 	 d:d.„Z?d;d/„Z@d<d0„ZAd=d1„ZBy)>é    )Úannotations)ÚTYPE_CHECKINGÚIterableÚOptionalÚAnyÚcastN)ÚVec3ÚVec2ÚUVecÚConstructionLineÚConstructionBoxÚConstructionArc)ÚUCSÚPassTroughUCSÚxroundÚZ_AXIS)Úconst)ÚTextEntityAlignment)Úoptions)ÚDXFValueErrorÚDXFUndefinedBlockError)Úsuppress_zeros)ÚARROWS)ÚDimStyleOverrideÚ	Dimension)ÚDrawing)Ú	Textstyle)ÚGenericLayoutTypec                  óV   ‡ — e Zd ZdZ edd«      dddddf	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zˆ xZS )ÚTextBoxzText boundaries representation.r   ç        c                óB   •— t         ‰| �  ||d|z  z   |d|z  z   |«       y )Nç       @)ÚsuperÚ__init__)ÚselfÚcenterÚwidthÚheightÚangleÚhgapÚvgapÚ	__class__s          €ú5lib/python3.12/site-packages/ezdxf/render/dim_base.pyr%   zTextBox.__init__'   s*   ø€ ô 	‰Ñ˜ ¨¨t©Ñ!3°V¸cÀD¹jÑ5HÈ%ÕPó    )r'   r
   r(   Úfloatr)   r0   r*   r0   r+   r0   r,   r0   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   r%   Ú__classcell__)r-   s   @r.   r    r    $   sl   ø„ Ù)ñ ˜A˜q“zØØØØØð	Qàð	Qð ð	Qð ð		Qð
 ð	Qð ð	Qð ÷	Qñ 	Qr/   r    ô   Â±z\A{align};{txt}{{\H{fac:.2f}x;z{tol}}}z\S{upr}^ {lwr};}}z {{\H{fac:.2f}x;\S{upr}^ {lwr};}}c                ó   — | �t        | «      S y ©N)r
   )Úvs    r.   ÚOptionalVec2r:   :   s   € Ø€}Ü�A‹wˆàr/   c                ó   — | dk  ry| dkD  ryy)Nr!   Ú-r   Ú+Ú © )Úvalues    r.   Ú	sign_charrA   A   s   € Øˆs‚{ØØ	�ŠØàr/   c                óú   — |�t        | |«      } |€d}|dz  }ndt        |«      z   dz   }|j                  | «      }t        |dz  «      }t        |dz  «      }t	        |||«      }|dk7  r|j                  d|«      }|S )Nz{:f}é   z{:.zf}é   Ú.)r   ÚstrÚformatÚboolr   Úreplace)	r@   ÚdimrndÚdimdecÚdimzinÚdimdsepÚfmtÚtextÚleadingÚpendings	            r.   Úformat_textrR   J   s’   € ð ÐÜ�u˜fÓ%ˆà€~Øˆð ˜!‘‰à”c˜&“kÑ! DÑ(ˆØ�:‰:�eÓ€Dä�6˜A‘:Ó€GÜ�6˜A‘:Ó€GÜ˜$ ¨Ó1€DØ�#‚~Ø�|‰|˜C Ó)ˆØ€Kr/   c                óp   — d|v r$|j                  ddd«      }|j                  | «      S t        d|› d�«      ‚)Nú<>z{}é   zInvalid dimpost string: "Ú")rI   rG   r   )rO   ÚdimpostrN   s      r.   Úapply_dimpostrX   e   s?   € Øˆw�Ø�o‰o˜d D¨!Ó,ˆØ�z‰z˜$ÓÐäÐ7¸°yÀÐBÓCÐCr/   c                  óv   — e Zd Z	 	 	 d	 	 	 	 	 	 	 dd„Zedd„«       Zd„ Zd„ Zdd„Zd„ Z	dd„Z
dd„Zdd	„Zdd
„Zy)Ú	Tolerancec                ó–  — || _         || _        |j                  }t         |dd«      «      | _        d| _        | j                  st         |dd«      «      | _         |dd«      | _        |j                  «       | _        d| _	         |dd	«      | _
         |d
d	«      | _         |dd«      | _         |dd«      | _         |dd«      | _        d| _        d	| _        d	| _        d| _        d| _        || j                  z  | j                  z  | _        | j                  r| j+                  «        y | j
                  r| j-                  «        y y )NÚdimtolr   FÚdimlimÚdimtfacg      à?gš™™™™™õ?Údimtmr!   ÚdimtpÚdimtdecé   ÚdimtoljÚdimtzinÚ )Útext_width_factorÚ	dim_scaleÚgetrH   Úhas_toleranceÚ
has_limitsÚtext_scale_factorÚget_decimal_separatorÚtext_decimal_separatorÚline_spacingÚminimumÚmaximumÚdecimal_placesÚvalignr   rO   Útext_heightÚ
text_widthÚ
text_upperÚ
text_lowerÚchar_heightÚinit_toleranceÚinit_limits)r&   Ú	dim_styleÚ
cap_heightÚwidth_factorrg   rh   s         r.   r%   zTolerance.__init__n   s@  € ð ".ˆÔØ"ˆŒØ�m‰mˆô "¡# h°Ó"2Ó3ˆÔØˆŒØ×!Ò!ä"¡3 x°Ó#3Ó4ˆDŒOñ ),¨I°sÓ(;ˆÔà&/×&EÑ&EÓ&GˆÔ#ð $(ˆÔñ " '¨3Ó/ˆŒñ " '¨3Ó/ˆŒñ $' y°!Ó#4ˆÔñ ˜y¨!Ó,ˆŒñ $' y°!Ó#4ˆÔØˆŒ	Ø"%ˆÔØ!$ˆŒØ!ˆŒØ!ˆŒØ",¨t×/EÑ/EÑ"EÈÏÉÑ"VˆÔØ×ÒØ×ÑÕ!Ø�_Š_Ø×ÑÕð r/   c                ó6   — | j                   xs | j                  S r8   ©ri   rj   ©r&   s    r.   ÚenabledzTolerance.enabled¸   s   € à×!Ñ!Ò4 T§_¡_Ð4r/   c                ó    — d| _         d| _        y ©NFr~   r   s    r.   ÚdisablezTolerance.disable¼   s   € Ø"ˆÔØˆ�r/   c                ó¨  — | j                   | j                  k(  r=| j                  | _        | j	                  | j
                  | j
                  «      | _        nV| j                  | j                  | j                  z  z   | _        | j	                  | j                  | j                  «      | _        | j                  | j                  | j                   «       y r8   )ro   rp   rw   rs   Úget_text_widthrO   rt   rn   ru   rv   Úupdate_tolerance_textr   s    r.   rx   zTolerance.init_toleranceÀ   s˜   € ð �<‰<˜4Ÿ<™<Ò'Ø#×/Ñ/ˆDÔØ"×1Ñ1°$·)±)¸T¿Y¹YÓGˆD�Oð  $×/Ñ/°4×3CÑ3CÀd×FWÑFWÑ3WÑXˆDÔØ"×1Ñ1°$·/±/À4Ç?Á?ÓSˆDŒOØ×"Ñ" 4§<¡<°·±Õ>r/   c                ó  — ||k(  r't         | j                  t        |«      «      z   | _        y t	        |«      | j                  t        |«      «      z   | _        t	        |dz  «      | j                  t        |«      «      z   | _        y )Néÿÿÿÿ)Ú
PLUS_MINUSrR   ÚabsrO   rA   ru   rv   )r&   Ú	tol_upperÚ	tol_lowers      r.   r†   zTolerance.update_tolerance_textÍ   sn   € Ø˜	Ò!Ü" T×%5Ñ%5´c¸)³nÓ%EÑEˆD�Iä'¨	Ó2°T×5EÑ5EÄcÈ)ÃnÓ5UÑUˆDŒOÜ'¨	°B©Ó7¸$×:JÑ:JÜ�I“ó;ñ ˆD�Or/   c                óZ   — | j                   | j                  | j                  z  z   | _        y r8   )rw   rs   rn   r   s    r.   ry   zTolerance.init_limitsÖ   s(   € ð  ×+Ñ+¨t×/?Ñ/?À$×BSÑBSÑ/SÑTˆÕr/   c                ó^   — t        |d| j                  | j                  | j                  ¬«      S )zuRounding and text formatting of tolerance `value`, removes leading
        and trailing zeros if necessary.

        N)r@   rJ   rK   rL   rM   )rR   rq   r   rm   ©r&   r@   s     r.   rR   zTolerance.format_textÜ   s2   € ô ØØØ×&Ñ&Ø×&Ñ&Ø×/Ñ/ô
ð 	
r/   c                óv   — t        t        |«      t        |«      «      }| j                  | j                  z  |z  S )zCReturns the text width of the tolerance (upr/lwr) in drawing units.)ÚmaxÚlenrs   rf   )r&   ÚuprÚlwrÚcounts       r.   r…   zTolerance.get_text_widthê   s4   € ô ”C˜“Hœc #›hÓ'ˆØ×Ñ $×"8Ñ"8Ñ8¸5Ñ@Ð@r/   c                óâ  — | j                   r t        t        | j                  «      d«      }t	        |d«      }| j
                  s:t        j                  ||| j                  | j                  | j                  ¬«      }|S t        j                  ||| j                  | j
                  ¬«      }|S | j                  r6t        j                  | j                  | j                  | j                  ¬«      }|S )Nr   rb   )ÚalignÚtxtÚfacr“   r”   )r—   r˜   r™   Útol)r“   r”   r™   )ri   r‘   Úintrr   ÚminrO   ÚTOLERANCE_TEMPLATE2rG   rk   ru   rv   ÚTOLERANCE_TEMPLATE1rj   ÚLIMITS_TEMPLATE)r&   rO   r—   s      r.   Úcompile_mtextzTolerance.compile_mtextð   sÛ   € Ø×ÒÜœ˜DŸK™KÓ(¨!Ó,ˆEÜ˜˜q“MˆEØ—9’9Ü*×1Ñ1ØØØ×.Ñ.ØŸ™ØŸ™ð 2ó �ð( ˆô +×1Ñ1ØØØ×.Ñ.ØŸ	™	ð	 2ó �ð ˆð �_Š_Ü"×)Ñ)Ø—O‘OØ—O‘OØ×*Ñ*ð *ó ˆDð
 ˆr/   c                óî   — || j                   z   }|| j                  z
  }| j                  |«      | _        | j                  |«      | _        | j                  | j                  | j                  «      | _        y r8   )rp   ro   rR   ru   rv   r…   rt   )r&   ÚmeasurementÚupper_limitÚlower_limits       r.   Úupdate_limitszTolerance.update_limits  s^   € Ø! D§L¡LÑ0ˆØ! D§L¡LÑ0ˆØ×*Ñ*¨;Ó7ˆŒØ×*Ñ*¨;Ó7ˆŒØ×-Ñ-¨d¯o©o¸t¿¹ÓOˆ�r/   N)ç      ð?r¦   r¦   )rz   r   r{   r0   r|   r0   rg   r0   ©ÚreturnrH   )r‹   r0   rŒ   r0   ©r@   r0   r¨   rF   )r“   rF   r”   rF   r¨   r0   )rO   rF   r¨   rF   )r¢   r0   r¨   ÚNone)r1   r2   r3   r%   Úpropertyr€   rƒ   rx   r†   ry   rR   r…   r    r¥   r?   r/   r.   rZ   rZ   m   s}   „ ð  Ø!ØðHà#ðHð ðHð ð	Hð
 óHðT ò5ó ð5ò ò?óòUó
óAóô6Pr/   rZ   c                  óB   — e Zd ZU ej                  Zded<   dd„Zddd„Zy)	ÚExtensionLinesr›   Údefault_lineweightc                ó¤  — |j                   } |d|«      | _         |dd«      | _         |dd«      | _         |d| j                  «      | _        t         |dd«      «      | _        t         |dd«      «      | _         |d	d
«      |z  | _	         |dd
«      |z  | _
        t         |dd«      «      | _         |d| j                  «      |z  | _        y )NÚdimclreÚdimltex1re   Údimltex2ÚdimlweÚdimse1r   Údimse2Údimexer!   ÚdimexoÚdimfxlonÚdimfxl)rh   ÚcolorÚ	linetype1Ú	linetype2r®   Ú
lineweightrH   Ú	suppress1Ú	suppress2Úextension_aboveÚoffsetÚhas_fixed_lengthÚlength_below©r&   rz   Údefault_colorÚscalerh   s        r.   r%   zExtensionLines.__init__  sÌ   € Ø�m‰mˆÙ˜i¨Ó7ˆŒ
Ù! *¨bÓ1ˆŒÙ! *¨bÓ1ˆŒÙ" 8¨T×-DÑ-DÓEˆŒÜ#¡C¨°!Ó$4Ó5ˆŒÜ#¡C¨°!Ó$4Ó5ˆŒñ
 '*¨(°CÓ&8¸5Ñ&@ˆÔñ ! ¨3Ó/°%Ñ7ˆŒô '+©3¨z¸1Ó+=Ó&>ˆÔñ $' x°×1EÑ1EÓ#FÈÑ#NˆÕr/   c                óä   — d| j                   i}|dk(  r| j                  }n |dk(  r| j                  }nt        d|› �«      ‚|r||d<   | j                  | j
                  k7  r| j                  |d<   |S )ú6Returns default dimension line DXF attributes as dict.rº   rU   rb   zinvalid argument num:Úlinetyper½   )rº   r»   r¼   Ú
ValueErrorr½   r®   )r&   ÚnumÚattribsrÉ   s       r.   Ú
dxfattribszExtensionLines.dxfattribs/  su   € à#*¨D¯J©JÐ"7ˆØ�!Š8Ø—~‘~‰HØ�AŠXØ—~‘~‰HäÐ4°S°EÐ:Ó;Ð;áØ"*ˆG�JÑØ�?‰?˜d×5Ñ5Ò5Ø$(§O¡OˆG�LÑ!Øˆr/   N©rz   r   rÅ   r›   rÆ   r0   )rU   )rË   r›   r¨   r   ©	r1   r2   r3   r   ÚLINEWEIGHT_BYBLOCKr®   Ú__annotations__r%   rÍ   r?   r/   r.   r­   r­     s   … Ø#×6Ñ6Ð˜Ó6óOõ2r/   r­   c                  ó@   — e Zd ZU ej                  Zded<   dd„Zdd„Zy)ÚDimensionLiner›   r®   c                ó0  — |j                   } |d|«      | _         |dd«      |z  | _         |dd«      | _         |d| j                  «      | _        t         |dd«      «      | _        t         |d	d«      «      | _        t         |d
d«      «      | _	        y )NÚdimclrdÚdimdler!   Údimltypere   ÚdimlwdÚdimsd1r   Údimsd2ÚdimtoflrU   )
rh   rº   Ú	extensionrÉ   r®   r½   rH   r¾   r¿   Úhas_dim_line_if_text_outsiderÄ   s        r.   r%   zDimensionLine.__init__C  s�   € Ø�m‰mˆÙ˜i¨Ó7ˆŒ
ñ !$ H¨cÓ 2°UÑ :ˆŒÙ  ¨RÓ0ˆŒÙ" 8¨T×-DÑ-DÓEˆŒô  $¡C¨°!Ó$4Ó5ˆŒô  $¡C¨°!Ó$4Ó5ˆŒô 37±s¸9ÀaÓ7HÓ2IˆÕ)r/   c                ó¨   — d| j                   i}| j                  r| j                  |d<   | j                  | j                  k7  r| j                  |d<   |S )rÈ   rº   rÉ   r½   )rº   rÉ   r½   r®   )r&   rÌ   s     r.   rÍ   zDimensionLine.dxfattribs]  sJ   € à#*¨D¯J©JÐ"7ˆØ�=Š=Ø"&§-¡-ˆG�JÑØ�?‰?˜d×5Ñ5Ò5Ø$(§O¡OˆG�LÑ!Øˆr/   NrÎ   ©r¨   r   rÏ   r?   r/   r.   rÓ   rÓ   @  s   … Ø#×6Ñ6Ð˜Ó6óJô4r/   rÓ   c                  ó.   — e Zd Zdd„Zedd„«       Zdd„Zy)ÚArrowsc                ó6  — |j                   } |d|«      | _         |dd«      |z  | _        d| _        d| _         |dd«      |z  | _        d| _        d| _        | j                  dkD  r| j                  dz  | _        y |j                  «       \  | _        | _        y )	NrÕ   Údimtszr!   re   Údimaszg      Ð?Fr#   )	rh   rº   Ú	tick_sizeÚarrow1_nameÚarrow2_nameÚ
arrow_sizer¾   r¿   Úget_arrow_names)r&   rz   rº   rÆ   rh   s        r.   r%   zArrows.__init__h  sš   € Ø�m‰mˆÙ˜i¨Ó/ˆŒ
Ù # H¨cÓ 2°UÑ :ˆŒØ "ˆÔØ "ˆÔÙ!$ X¨tÓ!4°uÑ!<ˆŒØˆŒØˆŒà�>‰>˜CÒð #Ÿn™n¨sÑ2ˆD�Oð ×)Ñ)Ó+ñØÔ ØÕ r/   c                ó    — | j                   dkD  S ©Nr!   )rå   r   s    r.   Ú	has_tickszArrows.has_ticks~  s   € à�~‰~ Ñ#Ð#r/   c                ó   — d| j                   iS ©Nrº   )rº   r   s    r.   rÍ   zArrows.dxfattribs‚  s   € Ø˜Ÿ™Ð$Ð$r/   N©rz   r   rº   r›   rÆ   r0   r§   rß   )r1   r2   r3   r%   r«   rì   rÍ   r?   r/   r.   rá   rá   g  s    „ ó,ð, ò$ó ð$ô%r/   rá   c                  óÐ   — e Zd Z	 	 	 	 	 	 dd„Zed„ «       Zed„ «       Zdd„Zedd„«       Zdd„Z	dd„Z
dd„Zddd	„Zdd
„Zej                  dd„«       Zej                  dd„«       Zy)ÚMeasurementc                ór  — d| _         d| _        d| _        |j                  }|j                  }|€J d«       ‚t        |j                  dd «      «      | _        |j                  dd«      | _        |j                  dd«      | _	        |j                  dd«      | _
        |j                  }d	| _        |j                  d
d «      | _         |dd«      | _         |dt         j"                  «      }||j$                  j&                  vrd}|| _        t+        ||«      }t-        ||«      |z  | _        |j                  dd«      | _        |j2                  j                  | _         |dd«      |z  | _        |j                  dd «      | _        | j8                  | _         |d|«      | _         |dd «      | _         |dd«      | _          |dd«      | _!         |dd«      | _"         |dd«      | _#        |jI                  «       | _%         |dd«      | _&         |dd«      | _'         |dd«      | _(        d | _)         |d!d«      | _*         |d"d«      | _+         |d#d«      | _,         |d$d«      | _-        | j                  d uxr | jZ                  dk(  | _.         |d%d«      | _/         |d&d«      | _0        tc         |d'd«      «      | _2         |d(d«      | _3         |d)d«      | _4         |d*d«      | _5         |d+d«      | _6        d| _7         |d,d«      dk(  rd-| _7        d| _8        ts        dd«      | _:        d| _;        d| _<        y ).Nr!   re   úvalid DXF document requiredÚuser_locationÚrelative_user_locationFÚtext_shift_hÚtext_shift_vé   Úhorizontal_directionÚdimlfacr¦   ÚdimtxstyÚStandardr(   Údimgapg      ä?Útext_rotationÚdimclrtrJ   rK   rb   ÚdimadecrL   rC   ÚdimazinrW   Údimtfillr   ÚdimtfillclrrU   gš™™™™™ñ?ÚdimjustÚdimtadÚdimtvpÚdimtmoveÚdimtihÚdimtohÚdimtixÚdimatfitÚdimlunitÚdimfracÚdimaunitÚ	dimarcsymT)=Ú	raw_valuer@   rO   Ú	dimensionÚdocr:   Úpoprô   rõ   rö   r÷   rh   Útext_attachment_pointÚget_dxf_attribrù   Úmeasurement_factorr   Údefault_dimension_text_styleÚtablesÚstylesÚtext_style_nameÚget_text_styleÚget_char_heightrs   rf   ÚdxfÚstored_dim_textÚtext_gapÚuser_text_rotationrþ   Ú
text_colorÚ
text_roundrq   Úangular_decimal_placesr   Úangular_suppress_zerosrl   Údecimal_separatorÚtext_post_process_formatÚ	text_fillÚtext_fill_colorÚtext_box_fill_scaleÚtext_halignÚtext_valignÚtext_vertical_positionÚtext_movement_ruleÚ
has_leaderÚtext_inside_horizontalÚtext_outside_horizontalrH   Úforce_text_insideÚtext_fitting_ruleÚlength_unitÚfraction_formatÚangle_unitsÚhas_arc_length_prefixÚtext_is_outsider
   Útext_locationÚis_wide_textÚhas_upside_down_correction)	r&   rz   rº   rÆ   r  r  rh   Ú
style_nameÚ
text_styles	            r.   r%   zMeasurement.__init__‡  sh  € ð !$ˆŒàˆŒ
àˆŒ	à×'Ñ'ˆ	Ø�m‰mˆØˆÐ=Ð =Ó=ˆô .:Ø�M‰M˜/¨4Ó0ó.
ˆÔð
 -6¯M©MØ$ eó-
ˆÔ#ð $-§=¡=°ÀÓ#EˆÔà#,§=¡=°ÀÓ#EˆÔð �m‰mˆð +,ˆÔ"ð 6?×5MÑ5MØ" Dó6
ˆÔ!ñ
 *-¨Y¸Ó)<ˆÔñ ˜j¬'×*NÑ*NÓOˆ
Ø˜SŸZ™Z×.Ñ.Ñ.Ø#ˆJØ$.ˆÔÜ# C¨Ó4ˆ
Ü"1°)¸ZÓ"HÈ5Ñ"PˆÔØ(2×(AÑ(AÀ'È3Ó(OˆÔØ$-§M¡M×$6Ñ$6ˆÔñ  # 8¨UÓ3°eÑ;ˆŒð *3×)AÑ)AÀ/ÐSWÓ)XˆÔà$(×$;Ñ$;ˆÔÙ" 9¨eÓ4ˆŒÙ+.¨x¸Ó+>ˆŒÙ#& x°Ó#3ˆÔÙ+.¨y¸!Ó+<ˆÔ#ñ $' x°Ó#3ˆÔñ ,/¨y¸!Ó+<ˆÔ#ð '0×&EÑ&EÓ&GˆÔá-0°¸BÓ-?ˆÔ%ñ
 " *¨aÓ0ˆŒÙ$'¨°qÓ$9ˆÔØ*-ˆÔ ñ !$ I¨qÓ 1ˆÔñ !$ H¨aÓ 0ˆÔñ .1°¸3Ó-?ˆÔ#ñ (+¨:°qÓ'9ˆÔð ×Ñ dÐ*ÒK¨t×/FÑ/FÈ!Ñ/Kð 	Œñ -0°¸!Ó,<ˆÔ#ñ .1°¸1Ó-=ˆÔ$ô (,©C°¸!Ó,<Ó'=ˆÔñ '*¨*°aÓ&8ˆÔñ !$ J°Ó 2ˆÔñ %(¨	°1Ó$5ˆÔñ !$ J°Ó 2ˆÔà+0ˆÔ"Ùˆ{˜AÓ !Ò#Ø)-ˆDÔ&ð &+ˆÔô $(¨¨1£:ˆÔð #(ˆÔð 16ˆÕ'r/   c                ó   — | j                    S r8   )r7  r   s    r.   Útext_is_insidezMeasurement.text_is_insideR  s   € à×'Ñ'Ð'Ð'r/   c                óH   — t        | j                  xs | j                  «      S r8   )rH   rö   r÷   r   s    r.   Úhas_relative_text_movementz&Measurement.has_relative_text_movementV  s   € ä�D×%Ñ%Ò:¨×):Ñ):Ó;Ð;r/   c                óp   — t        | j                  | j                  f«      }||j                  |«      z  }|S )a5  Add `self.text_shift_h` and `sel.text_shift_v` to point `location`,
        shifting along and perpendicular to text orientation defined by
        `text_rotation`.

        Args:
            location: location point
            text_rotation: text rotation in degrees

        Returns: new location

        )r
   rö   r÷   Ú
rotate_deg)r&   Úlocationrþ   Ú	shift_vecs       r.   Úapply_text_shiftzMeasurement.apply_text_shiftZ  s9   € ô ˜$×+Ñ+¨T×->Ñ->Ð?Ó@ˆ	Ø�I×(Ñ(¨Ó7Ñ7ˆØˆr/   c                óD   — | j                   dk(  ry| j                   dk(  ryy)z|Returns vertical placement of dimension text as 1 for above, 0 for
        center and -1 for below dimension line.

        r   rD   rˆ   rU   )r+  r   s    r.   Úvertical_placementzMeasurement.vertical_placementj  s)   € ð ×Ñ˜qÒ ØØ×Ñ Ò"Øàr/   c                ó¤   — | j                   dk(  r| j                  | j                  z  S | j                  dz  | j                  z   | j                  z  S )zœReturns the vertical distance for dimension line to text midpoint.
        Positive values are above the line, negative values are below the line.

        r   r#   )r+  rs   r,  r  rG  r   s    r.   Útext_vertical_distancez"Measurement.text_vertical_distancew  sN   € ð
 ×Ñ˜qÒ Ø×#Ñ# d×&AÑ&AÑAÐAà×$Ñ$ sÑ*¨T¯]©]Ñ:¸d×>UÑ>UÑUÐUr/   c                óP   — | j                   | j                  z  }t        |«      |z  S )z;
        Return width of `text` in drawing units.

        )rs   rf   r’   )r&   rO   Ú
char_widths      r.   rt   zMeasurement.text_width�  s)   € ð ×%Ñ%¨×(>Ñ(>Ñ>ˆ
Ü�4‹y˜:Ñ%Ð%r/   c                óv   — | j                   }|dk(  ry| j                  |«      }|r|j                  d|d«      S |S )zrCreate dimension text for `measurement` in drawing units and applies
        text overriding properties.

        r>   re   rT   rU   )r  rR   rI   )r&   r¢   rO   Úformatted_measurements       r.   Útext_overridezMeasurement.text_overrideŠ  sG   € ð
 ×#Ñ#ˆØ�3Š;ØØ $× 0Ñ 0°Ó =ÐÙà—<‘< Ð&;¸QÓ?Ð?Ø$Ð$r/   c                óV   — t        |«      | _        |rdnd| _        || _        d| _        y)áR  Set user defined dimension text location. ezdxf defines a user
        defined location per definition as 'outside'.

        Args:
            location: text midpoint
            leader: use leader or not (movement rules)
            relative: is location absolute (in UCS) or relative to dimension
                line center.

        rU   rb   TN)r
   rô   r-  rõ   r7  ©r&   rC  ÚleaderÚrelatives       r.   Úlocation_overridezMeasurement.location_override˜  s,   € ô " (›^ˆÔÙ'-¡!°1ˆÔØ&.ˆÔ#Ø#ˆÕr/   c                ó   — d| j                   iS rî   )r!  r   s    r.   rÍ   zMeasurement.dxfattribs¨  s   € Ø˜Ÿ™Ð)Ð)r/   c                 ó   — y)z\Update raw measurement value, scaled measurement value and
        dimension text.

        Nr?   ©r&   Úraw_measurement_values     r.   ÚupdatezMeasurement.update«  ó   � r/   c                 ó   — y)úkRounding and text formatting of `value`, removes leading and
        trailing zeros if necessary.

        Nr?   r�   s     r.   rR   zMeasurement.format_text²  rZ  r/   Nrï   )rC  r
   rþ   r0   r¨   r
   ©r¨   r0   )rO   rF   r¨   r0   )r¢   r0   r¨   rF   ©FF©rC  r   r¨   rª   rß   ©rX  r0   r¨   rª   r©   )r1   r2   r3   r%   r«   r>  r@  rE  rG  rI  rt   rN  rT  rÍ   ÚabcÚabstractmethodrY  rR   r?   r/   r.   rñ   rñ   †  s·   „ ðI6à#ðI6ð ðI6ð ó	I6ðV ñ(ó ð(ð ñ<ó ð<óð  ò
ó ð
óVó&ó%ô$ó *ð 	×Ñòó ðð 	×Ñòó ñr/   rñ   c                  ó   — e Zd Zdd„Zdd„Zy)ÚLengthMeasurementc                óz   — || _         || j                  z  | _        | j                  | j                  «      | _        y)z[Update raw measurement value, scaled measurement value and
        dimension text.
        N)r  r  r@   rN  rO   rW  s     r.   rY  zLengthMeasurement.update»  s3   € ð /ˆŒØ*¨T×-DÑ-DÑDˆŒ
Ø×&Ñ& t§z¡zÓ2ˆ�	r/   c                ó¸   — t        || j                  | j                  | j                  | j                  «      }| j
                  rt        || j
                  «      }|S )r\  )rR   r"  rq   r   r%  r&  rX   )r&   r@   rO   s      r.   rR   zLengthMeasurement.format_textÃ  sU   € ô
 ØØ�O‰OØ×ÑØ×ÑØ×"Ñ"ó
ˆð ×(Ò(Ü   t×'DÑ'DÓEˆDØˆr/   Nr`  r©   )r1   r2   r3   rY  rR   r?   r/   r.   rd  rd  º  s   „ ó3ôr/   rd  c                  óÐ   — e Zd ZdZ	 	 	 	 	 	 dd„Ze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d„Zy)ÚGeometryz»
    Geometry layout entities are located in the OCS defined by the extrusion
    vector of the DIMENSION entity and the z-axis of the OCS
    point 'text_midpoint' (group code 11).

    c                ó†  — |j                   €J d«       ‚|| _        |j                   | _         | j                   j                  | _        | j                  dk\  | _        | j                  dk\  | _        || _        |j                  | _        | j                  j                  t        «       | _
        || _        t        «       | _        y )Nró   ÚAC1015ÚAC1021)r  r  Ú
dxfversionÚsupports_dxf_r2000Úsupports_dxf_r2007ÚucsÚuzÚ	extrusionÚiscloser   Úrequires_extrusionÚlayoutr    Ú	_text_box)r&   r  ro  rt  s       r.   r%   zGeometry.__init__Ü  s›   € ð �}‰}Ð(ÐGÐ*GÓGÐ(Ø$-ˆŒØ%ŸM™MˆŒØ#Ÿx™x×2Ñ2ˆŒØ(,¯©¸8Ñ(CˆÔØ(,¯©¸8Ñ(CˆÔØˆŒØ"Ÿv™vˆŒØ,0¯N©N×,BÑ,BÄ6Ó,JÐ(JˆÔØ)/ˆŒÜ")£)ˆ�r/   c                ój   — | j                   j                  dkD  xr | j                   j                  dkD  S rë   )ru  r(   r)   r   s    r.   Úhas_text_boxzGeometry.has_text_boxî  s+   € à�~‰~×#Ñ# cÑ)ÒI¨d¯n©n×.CÑ.CÀcÑ.IÐIr/   c                ó   — || _         y r8   )rt  )r&   rt  s     r.   Ú
set_layoutzGeometry.set_layoutò  s	   € Øˆ�r/   c                ó   — || _         y r8   )ru  )r&   Útext_boxs     r.   Úset_text_boxzGeometry.set_text_boxõ  s	   € Ø!ˆ�r/   c                ó2   — || j                   j                  v S r8   )r  Úblocks©r&   Únames     r.   Ú	has_blockzGeometry.has_blockø  s   € Ø�t—x‘x—‘Ð&Ð&r/   c                óÔ   — | j                   j                  t        |«      «      j                  }| j                   j	                  |«      }| j
                  j                  |||||«       y r8   )ro  Úto_ocsr	   Úvec2Úto_ocs_angle_degrt  Úadd_arrow_blockref)r&   r€  ÚinsertÚsizeÚrotationrÍ   s         r.   r†  zGeometry.add_arrow_blockrefû  sN   € ð —‘—‘¤ f£Ó.×3Ñ3ˆØ—8‘8×,Ñ,¨XÓ6ˆØ�‰×&Ñ& t¨V°T¸8ÀZÕPr/   c                óÖ   — | j                   j                  t        |«      «      j                  }| j                   j	                  |«      |d<   | j
                  j                  |||«       y )Nr‰  )ro  rƒ  r	   r„  r…  rt  Úadd_blockref)r&   r€  r‡  r‰  rÍ   s        r.   r‹  zGeometry.add_blockref  sO   € ð —‘—‘¤ f£Ó.×3Ñ3ˆØ!%§¡×!:Ñ!:¸8Ó!Dˆ
�:ÑØ�‰× Ñ   v¨zÕ:r/   c                ó  — | j                   j                  |«      |d<   | j                  j                  ||¬«      }|j	                  | j                   j                  t        |«      «      j                  t        j                  ¬«       y )Nr‰  ©rÍ   )r—   )
ro  r…  rt  Úadd_textÚset_placementrƒ  r	   r„  r   ÚMIDDLE_CENTER)r&   rO   Úposr‰  rÍ   Úentitys         r.   rŽ  zGeometry.add_text  sl   € Ø!%§¡×!:Ñ!:¸8Ó!Dˆ
�:ÑØ—‘×%Ñ% d°zÐ%ÓBˆð
 	×ÑØ�H‰H�O‰OœD ›IÓ&×+Ñ+Ü%×3Ñ3ð 	õ 	
r/   c                óÚ   — | j                   j                  |«      |d<   | j                   j                  t        |«      «      j                  |d<   | j
                  j                  ||«       y )Nr‰  r‡  )ro  r…  rƒ  r	   r„  rt  Ú	add_mtext)r&   rO   r‘  r‰  rÍ   s        r.   r”  zGeometry.add_mtext&  sR   € ð
 "&§¡×!:Ñ!:¸8Ó!Dˆ
�:ÑØ#Ÿx™xŸ™¬t°C«yÓ9×>Ñ>ˆ
�8ÑØ�‰×Ñ˜d JÕ/r/   c                ó¼   — ddi}|D ]S  }| j                   j                  t        |«      «      j                  d¬«      }| j                  j                  ||¬«       ŒU y )NÚlayerÚ	Defpointsr!   )Úzr�  )ro  rƒ  r	   rI   rt  Ú	add_point)r&   ÚpointsrÌ   ÚpointrC  s        r.   Úadd_defpointszGeometry.add_defpoints/  sW   € à�[ð
ˆó ˆEð —x‘x—‘¤t¨E£{Ó3×;Ñ;¸cÐ;ÓBˆHØ�K‰K×!Ñ! (°wÐ!Õ?ñ r/   c                óJ  ‡ ‡‡‡— ˆˆ ˆfd„}dˆfd„}‰ j                   j                  Š|rñ‰ j                  rå‰ j                  }t	        |j                  ‰«      «      }t	        |j                  |«      «      }	||	z   }
|
dk(  ry|
dk(  rG|j                  t        ‰|«      «      }t        |«      dk(  r|d   }n ||Ž \  }}|	r‰n|} |||«       y|j                  t        ‰|«      «      }t        |«      dk(  r% ||d   |d   «      \  }} |‰|«        |||«       y |‰|«       y)a™  Add a LINE entity to the geometry layout. Removes parts of the line
        hidden by dimension text if `remove_hidden_lines` is True.

        Args:
            start: start point of line
            end: end point of line
            dxfattribs: additional or overridden DXF attributes
            remove_hidden_lines: removes parts of the line hidden by dimension
                text if ``True``

        c                ó¦   •— ‰j                   j                   ‰t        | «      «      j                   ‰t        |«      «      j                  ‰¬«       y )Nr�  )rt  Úadd_liner	   r„  )ÚstartÚendrÍ   r&   rƒ  s     €€€r.   Úadd_line_to_blockz,Geometry.add_line.<locals>.add_line_to_blockM  sA   ø€ à�K‰K× Ñ Ù”t˜E“{Ó#×(Ñ(Ù”t˜C“yÓ!×&Ñ&Ø%ð !õ r/   c                óR   •— ‰| z
  j                   ‰|z
  j                   k  r| |fS || fS r8   ©Ú	magnitude)ÚaÚbr   s     €r.   Úorderz Geometry.add_line.<locals>.orderU  s1   ø€ Ø˜‘	×$Ñ$¨°©	×'<Ñ'<Ò<Ø˜!�t�à˜!�t�r/   rb   NrU   r   )r¦  r
   r§  r
   r¨   útuple[Vec2, Vec2])	ro  rƒ  rw  ru  r›   Ú	is_insideÚ	intersectr   r’   )r&   r   r¡  rÍ   Úremove_hidden_linesr¢  r¨  r{  Ústart_insideÚ
end_insideÚinsideÚintersection_pointsÚp1Ú_Úp2rƒ  s   `` `           @r.   rŸ  zGeometry.add_line:  s3  û€ ö&	õ	ð —‘—‘ˆÙ 4×#4Ò#4Ø—~‘~ˆHÜ˜x×1Ñ1°%Ó8Ó9ˆLÜ˜X×/Ñ/°Ó4Ó5ˆJØ! JÑ.ˆFØ˜Š{ØØ˜1’Ø&.×&8Ñ&8Ô9IÈ%ÐQTÓ9UÓ&VÐ#ÜÐ*Ó+¨qÒ0à,¨QÑ/‘Bñ "Ð#6Ð7‘E�B˜Ù(‘U¨c�Ù! " bÔ)Øà&.×&8Ñ&8Ô9IÈ%ÐQTÓ9UÓ&VÐ#ÜÐ*Ó+¨qÒ0á"Ð#6°qÑ#9Ð;NÈqÑ;QÓR‘F�B˜á% e¨RÔ0Ù% b¨#Ô.Øá˜% Õ%r/   Nc                ó.  ‡ ‡‡‡
‡— dˆˆ
ˆˆˆ fd„}‰ j                   j                  t        |«      «      j                  Š‰ j                   j                  Š
|r7‰ j
                  r+t        |‰||‰ j                  «      D ]  \  }}	 |||	«       Œ y |||«       y)aì  Add a ARC entity to the geometry layout. Removes parts of the arc
        hidden by dimension text if `remove_hidden_lines` is True.

        Args:
            center: center of arc
            radius: radius of arc
            start_angle: start angle in radians
            end_angle: end angle in radians
            dxfattribs: additional or overridden DXF attributes
            remove_hidden_lines: removes parts of the arc hidden by dimension
                text if ``True``

        c           
     óª   •— ‰j                   j                  ‰‰t        j                   ‰| «      «      t        j                   ‰|«      «      ‰¬«       y)z!Add ARC entity to geometry block.)r'   ÚradiusÚstart_angleÚ	end_anglerÍ   N)rt  Úadd_arcÚmathÚdegrees)ÚsÚerÍ   Ú	ocs_angleÚ
ocs_centerr¶  r&   s     €€€€€r.   r¹  z!Geometry.add_arc.<locals>.add_arc‘  sC   ø€ à�K‰K×ÑØ!ØÜ ŸL™L©°1«Ó6ÜŸ,™,¡y°£|Ó4Ø%ð  õ r/   N)r¼  r0   r½  r0   r¨   rª   )ro  rƒ  r	   r„  Úto_ocs_angle_radrw  Úvisible_arcsru  )r&   r'   r¶  r·  r¸  rÍ   r¬  r¹  r   r¡  r¾  r¿  s   ` `  `    @@r.   r¹  zGeometry.add_arcz  sƒ   ü€ ÷.	ñ 	ð —X‘X—_‘_¤T¨&£\Ó2×7Ñ7ˆ
Ø—H‘H×-Ñ-ˆ	Ù 4×#4Ò#4Ü*ØØØØØ—‘ö‘
��sñ ˜˜sÕ#ññ �K Õ+r/   )r  r   ro  r   rt  z'GenericLayoutType'r§   )rt  r   r¨   rª   )r{  r    r¨   rª   )r€  rF   r¨   rH   )
r€  rF   r‡  r
   rˆ  r0   r‰  r0   r¨   rª   )r€  rF   r‡  r
   r‰  r0   r¨   rª   ©rO   rF   r‘  r
   r‰  r0   r¨   rª   )rš  zIterable[Vec2]r¨   rª   ©F©r   r
   r¡  r
   r¨   rª   r‚   ©
r'   r
   r¶  r0   r·  r0   r¸  r0   r¨   rª   )r1   r2   r3   r4   r%   r«   rw  ry  r|  r�  r†  r‹  rŽ  r”  rœ  rŸ  r¹  r?   r/   r.   rh  rh  Ô  s'  „ ñð,àð,ð ð,ð $ó	,ð$ òJó ðJóó"ó'ðQàðQð ðQð ð	Qð
 ðQð 
óQð ;àð;ð ð;ð ð	;ð 
ó;ó

ó0ó	@ð  "ð>&àð>&ð ð>&ð 
ó>&ðL Ø!ð1,àð1,ð ð1,ð ð	1,ð
 ð1,ð 
ô1,r/   rh  c                  óþ   — e Zd ZdZ	 	 d	 	 	 	 	 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„Zd$d„Zd%d&d„Z	 d'	 	 	 	 	 d(d„Z	 	 d)	 	 	 	 	 	 	 	 	 d*d„Z	 	 	 	 	 	 	 	 	 	 d+d„Zd,d„Zd-d„Zd.d„Zd.d„Zy)/ÚBaseDimensionRendererz,Base rendering class for DIMENSION entities.Nc                óŽ  — || _         | j                  ||«      | _        |  |r|| _        nt	        |«      | _        | j                   j
                  j                  | _        | j                   j
                  j                  | _	        | j                  j                  } |dd«      | _        t        | j                  «      dk  rd| _         |dd«      | _        | j                  | j                  | j                  «      | _        | j!                  | j                  | j                  «      | _        | j%                  | j                  | j                  «      | _        | j                  j)                  dd«      | j&                  _        | j                  j)                  dd«      | j&                  _        | j/                  | j                  | j                  «      | _        | j3                  | j                  | j                  «      | _        t7        | j                  j8                  | j4                  j8                  «      | j                  _        y )	NÚdimscaler¦   g•Ö&è.>Údimcenr   Úsuppress_arrow1FÚsuppress_arrow2)r  Úinit_geometryÚgeometryrz   r   r  rº   rÅ   r–  Údefault_layerrh   rg   rŠ   Údim_center_marksÚinit_measurementr¢   Úinit_dimension_lineÚdimension_lineÚinit_arrowsÚarrowsr  r¾   r¿   Úinit_extension_linesÚextension_linesrx   rš   r‘   rs   )r&   r  ro  Úoverriderh   s        r.   r%   zBaseDimensionRenderer.__init__±  sÃ  € ð %.ˆŒØ×*Ñ*¨9°cÓ:ˆŒñ 	ÙØ%ˆD�Nä-¨iÓ8ˆDŒNð
 #'§.¡.×"4Ñ"4×":Ñ":ˆÔØ"&§.¡.×"4Ñ"4×":Ñ":ˆÔà�n‰n× Ñ ˆá # J°Ó 4ˆŒÜˆt�~‰~Ó Ò%Ø ˆDŒNñ &)¨°1Ó%5ˆÔà×0Ñ0°×1CÑ1CÀTÇ^Á^ÓTˆÔØ-1×-EÑ-EØ×Ñ §¡ó.
ˆÔð #×.Ñ.¨t×/AÑ/AÀ4Ç>Á>ÓRˆŒð !%§¡× 2Ñ 2Ð3DÀeÓ Lˆ�‰ÔØ $§¡× 2Ñ 2Ð3DÀeÓ Lˆ�‰Ôà/3×/HÑ/HØ×Ñ §¡ó0
ˆÔð #×1Ñ1°$·.±.À$×BRÑBRÓSˆŒô (+Ø×Ñ×(Ñ(¨$¯(©(×*>Ñ*>ó(
ˆ×ÑÕ$r/   c                óJ   — ddl m} t        ||xs
 t        «        |«       «      S )Nr   )ÚVirtualLayout)Úezdxf.layoutsrÚ  rh  r   )r&   r  ro  rÚ  s       r.   rÍ  z#BaseDimensionRenderer.init_geometryí  s   € Ý/ä˜	 3Ò#9¬-«/¹=»?ÓKÐKr/   c                ó\   — t        | j                  |j                  |j                  |¬«      S )N)r{   r|   rg   )rZ   rz   rs   rf   )r&   rÆ   r¢   s      r.   rx   z$BaseDimensionRenderer.init_toleranceò  s+   € ÜØ�N‰NØ"×.Ñ.Ø$×6Ñ6Øô	
ð 	
r/   c                ó0   — t        | j                  ||«      S r8   )r­   rz   ©r&   rº   rÆ   s      r.   rÖ  z*BaseDimensionRenderer.init_extension_linesú  s   € Ü˜dŸn™n¨e°UÓ;Ð;r/   c                ó0   — t        | j                  ||«      S r8   )rÓ   rz   rÞ  s      r.   rÒ  z)BaseDimensionRenderer.init_dimension_lineý  s   € Ü˜TŸ^™^¨U°EÓ:Ð:r/   c                ó0   — t        | j                  ||«      S r8   )rá   rz   rÞ  s      r.   rÔ  z!BaseDimensionRenderer.init_arrows   s   € Ü�d—n‘n e¨UÓ3Ð3r/   c                ó0   — t        | j                  ||«      S r8   )rd  rz   rÞ  s      r.   rÑ  z&BaseDimensionRenderer.init_measurement  s   € Ü  §¡°¸Ó>Ð>r/   c           	     ó¶   — | j                   }t        |j                  | j                  «       |j                  |j
                  xs dd|j                  dz  ¬«      S )Nr!   g      è?)r'   r(   r)   r*   r+   r,   )r¢   r    r8  Útotal_text_widthrs   rþ   r  )r&   r¢   s     r.   Úinit_text_boxz#BaseDimensionRenderer.init_text_box  sY   € Ø×&Ñ&ˆÜØ×,Ñ,Ø×'Ñ'Ó)Ø×*Ñ*Ø×+Ñ+Ò2¨sð à×%Ñ%¨Ñ,ô
ð 	
r/   c                ó.   — t        | j                  |«      S r8   )Úget_required_defpointr  r  s     r.   ræ  z+BaseDimensionRenderer.get_required_defpoint  s   € Ü$ T§^¡^°TÓ:Ð:r/   c                óœ   — | j                   j                  |«       | j                   j                  s| j                  j	                  «        y y r8   )rÎ  ry  rm  rš   rƒ   )r&   Úblocks     r.   ÚrenderzBaseDimensionRenderer.render  s:   € ð 	�‰× Ñ  Ô'ð �}‰}×/Ò/Ø�H‰H×ÑÕð 0r/   c                ó*  — d}| j                   j                  }|rx| j                  j                  r| j                  j                  }|S | j                   j	                  |«      }| j                  j
                  r|| j                  j                  z  }|S rë   )r¢   rO   rš   rj   rt   ri   )r&   r(   rO   s      r.   rã  z&BaseDimensionRenderer.total_text_width"  s|   € ØˆØ×Ñ×$Ñ$ˆÙØ�x‰x×"Ò"ØŸ™×+Ñ+�ð
 ˆð ×(Ñ(×3Ñ3°DÓ9�Ø—8‘8×)Ò)Ø˜TŸX™X×0Ñ0Ñ0�EØˆr/   c                ó4   — | j                   | j                  dœS )z'Returns default DXF attributes as dict.)r–  rº   )rÏ  rÅ   r   s    r.   Údefault_attributesz(BaseDimensionRenderer.default_attributes.  s    € ð ×'Ñ'Ø×'Ñ'ñ
ð 	
r/   c                óx   — | j                   j                  |||«       | j                  j                  |||«       y)rP  N)rz   Úset_locationr¢   rT  rQ  s       r.   rT  z'BaseDimensionRenderer.location_override5  s2   € ð 	�‰×#Ñ# H¨f°hÔ?Ø×Ñ×*Ñ*¨8°V¸XÕFr/   c                ó†   — | j                  «       }|r|j                  |«       | j                  j                  ||||«       y)a˜  Add a LINE entity to the dimension BLOCK. Remove parts of the line
        hidden by dimension text if `remove_hidden_lines` is True.

        Args:
            start: start point of line
            end: end point of line
            dxfattribs: additional or overridden DXF attributes
            remove_hidden_lines: removes parts of the line hidden by dimension
                text if ``True``

        N)rì  rY  rÎ  rŸ  )r&   r   r¡  rÍ   r¬  rÌ   s         r.   rŸ  zBaseDimensionRenderer.add_lineC  s:   € ð& ×)Ñ)Ó+ˆÙØ�N‰N˜:Ô&Ø�‰×Ñ˜u c¨:Ð7JÕKr/   c                óŠ   — | j                  «       }|r|j                  |«       | j                  j                  ||||||«       y)aë  Add a ARC entity to the geometry layout. Remove parts of the arc
        hidden by dimension text if `remove_hidden_lines` is True.

        Args:
            center: center of arc
            radius: radius of arc
            start_angle: start angle in radians
            end_angle: end angle in radians
            dxfattribs: additional or overridden DXF attributes
            remove_hidden_lines: removes parts of the arc hidden by dimension
                text if ``True``

        N)rì  rY  rÎ  r¹  )r&   r'   r¶  r·  r¸  rÍ   r¬  rÌ   s           r.   r¹  zBaseDimensionRenderer.add_arc[  sA   € ð, ×)Ñ)Ó+ˆÙØ�N‰N˜:Ô&Ø�‰×ÑØ�F˜K¨°GÐ=Põ	
r/   c                óL  — | j                  «       }|r|j                  |«       |t        v r | j                  j	                  |||||«       y|�| j                  j                  |«      st        d|› d�«      ‚|dk7  r
||d<   ||d<   | j                  j                  ||||«       y)ay  
        Add block references and standard arrows to the dimension BLOCK.

        Args:
            name: block or arrow name
            insert: insertion point in UCS
            rotation: rotation angle in degrees in UCS (x-axis is 0 degrees)
            scale: scaling factor for x- and y-direction
            dxfattribs: additional or overridden DXF attributes

        NzUndefined block: "rV   r¦   ÚxscaleÚyscale)rì  rY  r   rÎ  r†  r�  r   r‹  )r&   r€  r‡  r‰  rÆ   rÍ   rÌ   s          r.   r‹  z"BaseDimensionRenderer.add_blockrefx  s    € ð& ×)Ñ)Ó+ˆÙØ�N‰N˜:Ô&à”6‰>à�M‰M×,Ñ,¨T°6¸5À(ÈGÕTàˆ| 4§=¡=×#:Ñ#:¸4Ô#@Ü,Ð/AÀ$ÀÀqÐ-IÓJÐJØ˜Š|Ø$)�˜Ñ!Ø$)�˜Ñ!Ø�M‰M×&Ñ& t¨V°X¸wÕGr/   c                ó$  — | j                   }| j                  }| j                  «       }|j                  |d<   |j                  |d<   |j
                  r‡|j                  |d<   |j                  |d<   |j                  r4|j                  |d<   |j                  |d<   |j                  dk(  rdnd|d	<   |r|j                  |«       |j                  ||||¬
«       y|j                  |d<   |r|j                  |«       |j                  ||||¬
«       y)aB  
        Add TEXT (DXF R12) or MTEXT (DXF R2000+) entity to the dimension BLOCK.

        Args:
            text: text as string
            pos: insertion location in UCS
            rotation: rotation angle in degrees in UCS (x-axis is 0 degrees)
            dxfattribs: additional or overridden DXF attributes

        Ústylerº   rw   Úattachment_pointÚbox_fill_scaleÚbg_fill_colorrU   é   Úbg_fillr�  r)   N)rÎ  r¢   rì  r  r!  rm  rs   r  r'  r)  r(  rY  r”  rŽ  )r&   rO   r‘  r‰  rÍ   rÎ  r¢   rÌ   s           r.   rŽ  zBaseDimensionRenderer.add_textš  s  € ð —=‘=ˆØ×&Ñ&ˆØ×)Ñ)Ó+ˆØ&×6Ñ6ˆ�ÑØ&×1Ñ1ˆ�Ñà×&Ò&Ø%0×%<Ñ%<ˆG�MÑ"Ø*5×*KÑ*KˆGÐ&Ñ'Ø×$Ò$Ø,7×,KÑ,K�Ð(Ñ)Ø+6×+FÑ+F�˜Ñ(Ø*5×*?Ñ*?À1Ò*D¡QÈ!�˜	Ñ"áØ—‘˜zÔ*Ø×Ñ˜t S¨(¸wÐÕGà +× 7Ñ 7ˆG�HÑÙØ—‘˜zÔ*Ø×Ñ˜d C¨¸gÐÕFr/   c                ó€   — d| j                   j                  i}| j                  |||«       | j                  |||«       y)z­
        Add simple leader line from p1 to p2 to p3.

        Args:
            p1: target point
            p2: first text point
            p3: second text point

        rº   N)rÓ  rº   rŸ  )r&   r±  r³  Úp3rÍ   s        r.   Ú
add_leaderz BaseDimensionRenderer.add_leader¼  s:   € ð ˜t×2Ñ2×8Ñ8Ð9ˆ
Ø�‰�b˜"˜jÔ)Ø�‰�b˜"˜jÕ)r/   c                 ó   — y)zÅTransforms dimension definition points into WCS or if required into
        OCS.

        Can not be called in __init__(), because inherited classes may be need
        unmodified values.

        Nr?   r   s    r.   Útransform_ucs_to_wcsz*BaseDimensionRenderer.transform_ucs_to_wcsË  s   € ð 	r/   c                ó°   — | j                  «        | j                  j                  r0| j                  j                  | j                  j
                  _        y y r8   )rÿ  rÎ  rs  rq  r  r  r   s    r.   ÚfinalizezBaseDimensionRenderer.finalizeÕ  s<   € Ø×!Ñ!Ô#Ø�=‰=×+Ò+Ø+/¯=©=×+BÑ+BˆD�N‰N×ÑÕ(ð ,r/   )NN)r  r   ro  úOptional[UCS]rØ  zOptional[DimStyleOverride]r8   )r  r   ro  r  )rÆ   r0   r¢   rñ   r¨   rZ   )rº   r›   rÆ   r0   r¨   r­   )rº   r›   rÆ   r0   r¨   rÓ   )rº   r›   rÆ   r0   r¨   rá   )rº   r›   rÆ   r0   r¨   rñ   )r¨   r    )r€  rF   r¨   r
   )rè  r   r]  )r¨   zdict[str, Any]r^  r_  rÃ  rÄ  r‚   rÅ  )
r€  rF   r‡  r
   r‰  r0   rÆ   r0   r¨   rª   rÂ  )r±  r
   r³  r
   rü  r
   )r¨   rª   )r1   r2   r3   r4   r%   rÍ  rx   rÖ  rÒ  rÔ  rÑ  rä  ræ  ré  rã  rì  rT  rŸ  r¹  r‹  rŽ  rý  rÿ  r  r?   r/   r.   rÇ  rÇ  ®  s'  „ Ù6ð
 "Ø/3ð	:
àð:
ð ð:
ð -ó	:
ôxLó

ó<ó;ó4ó?ó
ó;óó
ó
ôGð& "ðLàðLð ðLð 
óLð< Ø!ð
àð
ð ð
ð ð	
ð
 ð
ð 
ó
ð: Hàð Hð ð Hð ð	 Hð
 ð Hð 
ó HóD GóD*óôCr/   rÇ  c                óP   — | |z
  j                   | |z
  j                   kD  r||fS ||fS r8   r¤  )r±  r³  rü  s      r.   Úorder_leader_pointsr  Û  s0   € Ø
ˆR‰×Ñ˜b 2™g×0Ñ0Ò0Ø�2ˆvˆà�2ˆvˆr/   c                óò   — |j                   \  }}}}|j                  |«      }|j                  |«      }|}	||z
  j                  |«      }
| j                  |«      | j                  |«      kD  r|}	|
 }
|	|
z   |	fS )zFReturns the leader points of the "leg" for a vertical centered leader.)ÚcornersÚlerpÚ	normalizeÚdistance)Útarget_pointr{  Ú
leg_lengthÚc0Úc1Úc2Úc3Úleft_centerÚright_centerÚconnection_pointÚ
leg_vectors              r.   Úget_center_leader_pointsr  â  s‹   € ð ×%Ñ%�N€BˆˆB�ð —'‘'˜"“+€KØ—7‘7˜2“;€LØ"ÐØ�r‘'×$Ñ$ ZÓ0€JØ×Ñ˜[Ó)¨L×,AÑ,AÀ,Ó,OÒOØ'ÐØ �[ˆ
ð
 ˜jÑ(Ð*:Ð:Ð:r/   c                óš   — | j                   }|j                  |«      rt        |j                  |«      «      S t	        j
                  |«      ‚r8   )r  Úhasattrr
   rh   r   ÚDXFMissingDefinitionPoint)Údimr€  r  s      r.   ræ  ræ  ø  s;   € Ø
�'‰'€CØ
‡{�{�4ÔÜ�C—G‘G˜D“MÓ"Ð"Ü
×
)Ñ
)¨$Ó
/Ð/r/   c                ó’  — g }|t         j                  z  }|t         j                  z  }t        | |t        j                  |«      t        j                  |«      «      }|j	                  «       D ]w  }|j                  |«      D ]a  }|| z
  j                  t         j                  z  }	|s|j                  |	«       Œ7t        j                  |d   |	«      rŒQ|j                  |	«       Œc Œy t        |«      dk(  rJ||kD  r'|D �
cg c]  }
|
|k\  r|
n|
t         j                  z   ‘Œ }}
|j                  «        ||d   f|d   |fgS ||fgS c c}
w )aa  Returns the visible parts of an arc intersecting with a construction box
    as (start angle, end angle) tuples.

    Args:
        center: center of the arc
        radius: radius of the arc
        start_angle: start angle of arc in radians
        end_angle: end angle of arc in radians
        box: construction box which may intersect the arc

    rˆ   rb   r   rU   )rº  Útaur   r»  Úborder_linesÚintersect_liner*   Úappendrr  r’   Úsort)r'   r¶  r·  r¸  ÚboxÚintersection_anglesÚarcÚlineÚintersection_pointr*   r¦  s              r.   rÁ  rÁ  ÿ  sS  € ð& (*ÐØ”4—8‘8Ñ€KØ”—‘Ñ€IÜ
Ø�œŸ™ [Ó1´4·<±<À	Ó3Jó€Cð × Ñ Ö"ˆØ"%×"4Ñ"4°TÖ":ÐØ'¨&Ñ0×7Ñ7¼$¿(¹(ÑBˆEÙ&Ø#×*Ñ*¨5Õ1ä—\‘\Ð"5°bÑ"9¸5ÕAØ#×*Ñ*¨5Õ1ñ #;ð #ô ÐÓ 1Ò$Ø˜Ò"áCVó#ÙCV¸a�a˜;Ò&‘¨A´·±©LÑ8ÐCVð  ð #ð 	× Ñ Ô"àÐ-¨aÑ0Ð1Ø  Ñ# YÐ/ð
ð 	
ð ˜iÐ(Ð)Ð)ùò#s   Ã>!Ec                óÀ   — | €J d«       ‚| j                   j                  j                  }	  ||«      }t        d|«      S # t        j                  $ r  |d«      }Y Œ)w xY w)Nró   rü   r   )r  r  rh   r   ÚDXFTableEntryErrorr   )r  r€  Ú	get_stylerõ  s       r.   r  r  1  se   € Øˆ?Ð9Ð9Ó9ˆ?Ø—
‘
×!Ñ!×%Ñ%€Ið&Ù˜$“ˆô �˜UÓ#Ð#øô ×#Ñ#ò &Ù˜*Ó%Šð&ús   «? ¿AÁAc                ól   — |j                   j                  dd«      }|dk(  r| j                  dd«      }|S )z:Unscaled character height defined by text style or DIMTXT.r)   r!   Údimtxtr¦   )r  rh   )rz   r<  r)   s      r.   r  r  ;  s4   € à—N‘N×&Ñ& x°Ó5€FØ�‚}Ø—‘˜x¨Ó-ˆØ€Mr/   c                óX   — | j                   }|j                  r|j                  |«      }|S r8   )rO   r€   r    )r¢   rš   rO   s      r.   r    r    C  s)   € Ø×Ñ€DØ
‡{‚{Ø× Ñ  Ó&ˆØ€Kr/   )r¨   zOptional[Vec2]r©   )Nrb   r   rE   )r@   r0   rJ   zOptional[float]rK   r›   rL   r›   rM   rF   r¨   rF   )rO   rF   rW   rF   r¨   rF   )r±  r
   r³  r
   rü  r
   r¨   r©  )r
  r
   r{  r    r  r0   r¨   r©  )r  r   r€  rF   r¨   r
   )r'   r
   r¶  r0   r·  r0   r¸  r0   r  r   r¨   zlist[tuple[float, float]])r  z	'Drawing'r€  rF   r¨   r   )rz   r   r<  r   r¨   r0   )r¢   rñ   rš   rZ   r¨   rF   )CÚ
__future__r   Útypingr   r   r   r   r   rº  ra  Ú
ezdxf.mathr	   r
   r   r   r   r   r   r   r   r   Úezdxf.lldxfr   Úezdxf.enumsr   Úezdxf._optionsr   Úezdxf.lldxf.constr   r   Úezdxf.toolsr   Úezdxf.render.arrowsr   Úezdxf.entitiesr   r   Úezdxf.documentr   r   Úezdxf.eztypesr   r    r‰   Ú_TOLERANCE_COMMONrž   r�   rŸ   r:   rA   rR   rX   rZ   r­   rÓ   rá   rñ   rd  rh  rÇ  r  r  ræ  rÁ  r  r  r    r?   r/   r.   Ú<module>r7     sÁ  ðõ #÷õ ó Û 
÷÷ ÷ :Ó 9Ý Ý +Ý "ß CÝ &Ý &ß 6áÝ&Ý(Ý/ôQˆoô Qð €
Ø5Ð Ø'¨*Ñ4Ð Ø'Ð*>Ñ>Ð Ø5€óóð #ØØØðØðàðð ðð ð	ð
 ðð 	óó6D÷cPñ cP÷L*ñ *÷Z$ñ $÷N%ñ %÷>qñ qôh	˜ô ÷4W,ñ W,÷tjCñ jCóZ	ð;Øð;Ø")ð;Ø7<ð;àó;ó,0ð/*Øð/*àð/*ð ð/*ð ð	/*ð
 
ð/*ð ó/*ód$óôr/   