
    Og                    t   d dl mZ d dlmZmZ d dl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mZ d dlmZmZ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 d d	l m!Z!m"Z" d d
l#m$Z$ d dl	m%Z% erd dl&m'Z' g dZ( ejR                  d      Z*dZ+d)dZ,dejZ                  z  Z.dejZ                  z  Z/	 	 	 	 	 	 	 	 	 	 	 	 	 	 d*dZ0e/e/e.dgZ1d+dZ2 G d de      Z3 G d de      Z4d,dZ5 G d de      Z6 G d de6      Z7 G d d e7      Z8 G d! d"e7      Z9 G d# d$e      Z: G d% d&e6      Z;	 	 	 	 	 	 	 	 	 	 d-d'Z<	 	 	 	 	 	 	 	 d.d(Z=y)/    )annotations)TYPE_CHECKINGOptional)abstractmethodN)Vec2Vec3NULLVECUCS
decdeg2dmsarc_angle_span_radxround)DimStyleOverride	Dimension	DXFEntity   )
BaseDimensionRendererget_required_defpointformat_textapply_dimpost	ToleranceMeasurementLengthMeasurementcompile_mtextorder_leader_pointsget_center_leader_points)ARROWSarrow_length)is_upside_down_text_angle)intersection_line_line_2d)GenericLayoutType)AngularDimensionAngular3PDimensionArcLengthDimensionezdxfz( c                X    | j                   j                  t        fd|D              S )Nc              3  .   K   | ]  } |        y wN ).0attrib_namehass     \/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/render/dim_curved.py	<genexpr>z*has_required_attributes.<locals>.<genexpr>.   s     @Ks;@s   )dxfhasattrall)entityattrib_namesr+   s     @r,   has_required_attributesr3   ,   s#    
**

C@<@@@    g      i@     f@c                    dfddfd}d}|dk(  r | t         z        dz   }|S |dk(  r || t         z        }|S |dk(  r | t        z        dz   }|S |d	k(  r |       d
z   }|S )Nc                $    t        |       S )N)dimrnddimdecdimzindimdsep)r   )_valuer9   r;   r8   r:   s    r,   decimal_formatz+format_angular_text.<locals>.decimal_format=   s    
 	
r4   c                    t        |       } t        |       \  }}}dkD  r$dz
  }t        ||      }|dd|dd |       dS dkD  r|dd|dd|ddS dkD  r
|dd|ddS |ddS )	N      z.0f   °'"   r   )r   r   round)r<   dmsplacesr=   r9   r8   s        r,   
dms_formatz'format_angular_text.<locals>.dms_formatF   s    FF+FV$1aA:aZFa AWBqgQ~a'8&9<<A:WBqgQqgR00A:WBqgQ''C|r4    r   rA   r   rD   g   r)r<   floatreturnstr)DEGGRAD)	valueangle_unitsr8   r9   r:   r;   rJ   textr=   s	     ````  @r,   format_angular_textrW   5   s    
 
& Daeck*T1 K 
	%#+&
 K	 
	edl+c1 K 
	e$s*Kr4         ?c                L    	 | t         |   z  S # t        $ r | t        z  cY S w xY wr'   )_ANGLE_UNITS
IndexErrorrR   )rT   dimaunits     r,   
to_radiansr]   m   s0    |H--- s{s    ##c                  L     e Zd Z	 	 	 	 d	 	 	 	 	 	 	 	 	 d fdZddZddZ xZS )AngularTolerancec                    || _         t        | 	  ||||       | j                  t	        | j
                  |      t	        | j                  |             y r'   )angular_unitssuper__init__update_tolerance_textr]   maximumminimum)self	dim_style
cap_heightwidth_factor	dim_scalerU   	__class__s         r,   rc   zAngularTolerance.__init__u   sL     )JiH
 	""t||[1t||[1	
r4   c                t    t        || j                  d| j                  | j                  | j                        S )zuRounding and text formatting of tolerance `value`, removes leading
        and trailing zeros if necessary.

        NrT   rU   r8   r9   r:   r;   )rW   ra   decimal_placessuppress_zerostext_decimal_separator)rg   rT   s     r,   r   zAngularTolerance.format_text   s;    
 #**&&&&//
 	
r4   c                >   |t        | j                  | j                        z   }|t        | j                  | j                        z
  }| j	                  |      | _        | j	                  |      | _        | j                  | j
                  | j                        | _        y r'   )	r]   re   ra   rf   r   
text_upper
text_lowerget_text_width
text_width)rg   measurementupper_limitlower_limits       r,   update_limitszAngularTolerance.update_limits   sz    
 "Jt||T=O=O$PP!Jt||T=O=O$PP**;7**;7--dootOr4   )rX   rX   rX   r   )
rh   r   ri   rO   rj   rO   rk   rO   rU   intrT   rO   rP   rQ   )rw   rO   rP   None)__name__
__module____qualname__rc   r   rz   __classcell__rl   s   @r,   r_   r_   t   sQ      !
#
 
 	

 
 
&
	Pr4   r_   c                      e Zd ZddZddZy)AngleMeasurementc                L    || _         || _        | j                  |      | _        y r'   )	raw_valuerT   text_overriderV   )rg   raw_measurement_values     r,   updatezAngleMeasurement.update   s#    .*
&&'<=	r4   c                    t        || j                  d | j                  | j                  dz  | j                        }| j
                  rt        || j
                        }|S )NrD   rn   )rW   rU   angular_decimal_placesangular_suppress_zerosdecimal_separatortext_post_process_formatr   rg   rT   rV   s      r,   r   zAngleMeasurement.format_text   s]    "((....!3**
 (( t'D'DEDr4   N)r   rO   rP   r}   r|   )r~   r   r   r   r   r(   r4   r,   r   r      s    >
r4   r   c                    | |z  }||kD  S r'   r(   )lengthradiusarc_spanrequired_arc_spans       r,   fits_into_arc_spanr      s    %'''r4   c                  B    e Zd Z	 	 d	 	 	 	 	 d fdZedd       Zedd       Zedd       Zedd       Z	edd       Z
edd       Zedd       Zedd	       Zdd
ZdddZddZddZddZd  fdZddZd!dZd"dZ	 	 	 	 	 	 d#dZd$dZ	 	 	 	 	 	 	 	 d%dZ xZS )&_CurvedDimensionLinec                p   t         |   |||       d| _        | j                         | _        | j                         | _        | j                         | _        | j                  j                  | _
        | j                         | _        | j                  j                  | _        t        | j                  | j                        | _        | j                  | j                  dz  z   | _        t!               | _        t!               | _        | j'                          | j(                  j*                  r/| j(                  j-                  | j.                  j0                         | j3                         | _        d| _        | j9                          | j;                          | j.                  j<                  | j4                  _        | j.                  j@                  | j4                  _	        | jB                  jE                  | j4                         | j.                  j<                  | jF                  jH                  _%        y )NT       @F)&rb   rc   remove_hidden_lines_of_dimlineget_center_of_arccenter_of_arcget_dim_line_radiusdim_line_radiusget_ext1_dirext1_diranglestart_angle_radget_ext2_dirext2_dirend_angle_radr   center_angle_radr   
ext1_start
ext2_startupdate_measurementtol
has_limitsrz   rw   rT   init_text_boxtext_boxarrows_outsidesetup_text_and_arrow_fittingsetup_text_locationtext_locationcentertext_rotationgeometryset_text_box	dimensionr.   text_midpointrg   r   ucsoverriderl   s       r,   rc   z_CurvedDimensionLine.__init__   s    	C2 /3+#'#9#9#;&*&>&>&@"//1&*mm&9&9"//1$(MM$7$7 *<  $"4"4*
   4#:#:S#@@ 	
 && 	!88HH""4#3#3#9#9: **, $))+  "  $//=="..<<""4==1 ,0+;+;+I+I(r4   c                r    | j                   j                  j                  t        | j                              S r'   )r   r   to_ocsr   r   rg   s    r,   ocs_center_of_arcz&_CurvedDimensionLine.ocs_center_of_arc   s(    }}  ''T-?-?(@AAr4   c                p    | j                   t        j                  | j                  | j                        z   S )z*Return the midpoint of the dimension line.)r   r   
from_angler   r   r   s    r,   dim_midpointz!_CurvedDimensionLine.dim_midpoint   s3     !!DOO!!4#7#7%
 
 	
r4   c                     y)zSetup measurement text.Nr(   r   s    r,   r   z'_CurvedDimensionLine.update_measurement        	r4   c                     y)z>Return the direction of the 1st extension line == start angle.Nr(   r   s    r,   r   z!_CurvedDimensionLine.get_ext1_dir  r   r4   c                     y)z<Return the direction of the 2nd extension line == end angle.Nr(   r   s    r,   r   z!_CurvedDimensionLine.get_ext2_dir  r   r4   c                     y)zReturn the center of the arc.Nr(   r   s    r,   r   z&_CurvedDimensionLine.get_center_of_arc  r   r4   c                     y)z^Return the distance from the center of the arc to the dimension line
        location
        Nr(   r   s    r,   r   z(_CurvedDimensionLine.get_dim_line_radius  s    
 	r4   c                     y r'   r(   r   s    r,   get_defpointsz"_CurvedDimensionLine.get_defpoints  s    r4   c                L   fd}| j                   j                  | j                  j                  } |d|j                          |d|j                          |d|j                          |d|j                          |d|j                          |d|j
                         y)	zYTransforms dimension definition points into WCS or if required into
        OCS.
        c                    j                  |       r/j                  | t              }j                  |  ||             y y r'   )is_supportedgetr	   set)attrfuncpointr.   s      r,   from_ucsz;_CurvedDimensionLine.transform_ucs_to_wcs.<locals>.from_ucs!  s8    %g.d5k* &r4   defpoint	defpoint2	defpoint3	defpoint4	defpoint5r   N)r   r.   r   r   to_wcsr   )rg   r   r   r.   s      @r,   transform_ucs_to_wcsz)_CurvedDimensionLine.transform_ucs_to_wcs  s|    
	+
 nn  mmSZZ(cjj)cjj)cjj)cjj)#**-r4   c                    | j                   | j                  j                         z   |z   }t        j                  | j
                        }| j                  ||z  z   S r'   )r   rw   text_vertical_distancer   r   r   r   )rg   shiftr   text_radial_dirs       r,   default_locationz%_CurvedDimensionLine.default_location/  s[      5578 	
 //$*?*?@!!Of$<<<r4   c                   t        | j                  j                  | j                  | j                         | j
                  _        | j                  j                  d| j                  j                  z  z   }t        || j                  | j                         | _	        t        |dz  | j                  | j                         | j
                  _
        | j
                  j                  r| j
                  j                  d| _        y y y )Nr   g?F)r   r   widthr   r   rw   is_wide_textarrows
arrow_sizer   text_is_outsideuser_text_rotationr   )rg   required_text_and_arrows_spaces     r,   r   z1_CurvedDimensionLine.setup_text_and_arrow_fitting8  s     -?MM!5!5t7N7N-
 )
% MMDKK***+ 	' #5*  ###
 
 0B*S0  ##0
 ,
( ,,  33; 38D/	 < -r4   c                8   | j                   }|j                  du }t        |j                  xs |j                        }|rt        j                  | j                        }d}|j                  r)d|_	        |j                  r| j                  j                  }| j                  |      |_        |j                  dkD  r|sd| _        n|j                  }t!        |t
              sJ |j"                  r|| j$                  z  }||_        |j&                  dk(  r/| j(                  |z
  j*                  | _        | j/                          n@|j&                  dk(  r|j0                  d|_        d|_        n|j&                  dk(  rd|_        |j                  | j(                  z
  j3                         }|j5                  d	      }|r^|r\|j                  r"|xj                  ||j                  z  z  c_        |j                  r"|xj                  ||j                  z  z  c_        |j0                  |j6                  }n|j0                  }| j8                  j:                  s<| j8                  j<                  j?                  |      }	tA        |	      rd|_!        |d
z  }||_"        y)z]Setup geometric text properties (location, rotation) and the TextBox
        object.
        N        r   )r   r   FTrD   )ccwr5   )#rw   user_locationbooltext_shift_htext_shift_vr   r   r   r   text_valignr   extension_linesextension_abover   r   r   
isinstancerelative_user_locationr   text_movement_ruler   	magnituder   r   r   	normalize
orthogonal	angle_degr   requires_extrusionr   to_ocs_angle_degr   has_upside_down_correctionr   )
rg   rw   at_default_locationhas_text_shiftingr   shift_text_upwardsr   text_tangential_dirrotation	wcs_angles
             r,   r   z(_CurvedDimensionLine.setup_text_location\  s~    && %0$=$=$E"&$$@(@(@#
  #ood.C.CDO(+***+'++)-)=)=)M)M&(,(=(=( )> )K% ''!+4E 7<3 (55MmT22211!2!22(5K%--2
 &&6) $
 113//14 11958K2.2+//14 /3+))D,>,>>ik 
 .88U8C#4''))'+*B*BB) ''))#k&>&>>)
 ))1*44H"55H}}// ))::8DI(39=6E!$,!r4   c                @   | j                   j                  dk(  r5t        | j                  | j                  | j
                  j                        S | j                  j                  \  }}}}| j                   j                  r||}}n||}}t        | j                  ||      S )Nr   )
rw   r   r   r   r   r   r   cornersr   r   )rg   c0c1c2c3p1p2s          r,   get_leader_pointsz&_CurvedDimensionLine.get_leader_points  s     ''1,+!!4==$++2H2H  "]]22NBB::RBRB&t'8'8"bAAr4   c                H   t         |   |       | j                          | j                         \  }}| j                  }|j
                  r| j                  j                  rt        || j                        }n|j
                  }| j                  ||j                  |j                         |j                  r0| j                         \  }}| j                  | j                   ||       | j#                  ||       | j                  j%                  | j'                                y)zMain method to create dimension geometry of basic DXF entities in the
        associated BLOCK layout.

        Args:
            block: target BLOCK for rendering

        N)rb   renderadd_extension_lines
add_arrowsrw   rV   r   supports_dxf_r2000r   r   add_measurement_textr   r   
has_leaderr	  
add_leaderr   add_dimension_lineadd_defpointsr   )	rg   blockadjust_start_angleadjust_end_anglerw   rV   r  r  rl   s	           r,   r  z_CurvedDimensionLine.render  s     	u  "/3/@,,&&}}//$[$((;"''%%k//1J1J %%//1B 1 12r: 24DE##D$6$6$89r4   c                &   | j                   }|j                  s6| j                  | j                  | j                  |j                  d             |j                  s7| j                  | j                  | j                  |j                  d             y y )Nr   rD   )	r   	suppress1_add_ext_liner   r   
dxfattribs	suppress2r   r   )rg   	ext_liness     r,   r  z(_CurvedDimensionLine.add_extension_lines  sv    ((	""	0D0DQ0G ""	0D0DQ0G #r4   c                R   | j                   }| j                  }| j                  }|j                  }||z
  j                  |kD  }|j
                  r|j                  }	|r||	}}	||||	z
  z  z   }n|j                  }
|r| }|
 }
|||
z  z  }||||z   z  z   }| j                  |||       y )N)r  )	r   r   r   r   r   has_fixed_lengthlength_belowoffsetadd_line)rg   start	directionr  r  r   r   	ext_above	is_inside	ext_belowr   ends               r,   r  z"_CurvedDimensionLine._add_ext_line  s    ((	##%%--	V^..7	%%!..I'0)9	Y&9*<==E%%F&J	 Y''EyFY$677eSZ8r4   c                (   | j                   }|j                         }| j                  }t        |      dk  ry| j                  | j
                  |z  z   }| j                  | j                  |z  z   }| j
                  j                         j                  }| j                  j                         j                  }| j                  }|j                   }	|j                   }
d}d}|j                  dkD  rj|	r1| j                  t        j                  |||j                  dz  |       |
r1| j                  t        j                  |||j                  dz  |       ||fS |j                   }||z  dz  t"        z  }|dz   }|}|r|dz  }|dz  }| }|}|	r#| j                  |j$                  ||||z   |       |
r#| j                  |j&                  ||||z
  |       |s6|	rt)        |j$                  |      |z  }|
rt)        |j&                  |      |z  }||fS )	zAdd arrows or ticks to dimension.

        Returns: dimension start- and end angle offsets to adjust the
            dimension line

        g-q=)r   r   r   r   )insertr   scaler  g      ?r5   )r)  r*  r   r  )r   r  r   absr   r   r   r   r   r   r  r  	tick_sizeadd_blockrefr   obliquer   rR   arrow1_namearrow2_namer   )rg   r   attribsr   r"  r'  angle1angle2outsidearrow1arrow2start_angle_offsetend_angle_offsetr   
arrow_tiltstart_angle	end_angler*  s                     r,   r  z_CurvedDimensionLine.add_arrows  sY    ##%%%v;""T]]V%;;  4==6#99))+55))+55%%%%%%%% c!!!NN # **S0& "  !!NN# **S0& " ` "#333Q  **J
 !+V 3c 9C ?J 5.KIu$U"	([
E!!&& (:5& "  !!&&&3& "   $V%7%7DvM ' $V%7%7DvM % "#333r4   c                V   | j                   }| j                  }| j                  }|j                  }| j                  }t        | j                        dz  }||kD  rd}||kD  rd}| j                  | j                  |||z   ||z
  | j                  j                         | j                         | j                  rr|j                  set        |j                  ||      \  }}| j!                  ||z
  ||z
         t        |j                  ||      \  }}| j!                  ||z   ||z          y y y )Nr   r   )r  remove_hidden_lines)r   r   r   r   r   r+  r   add_arcr   dimension_liner  r   r   	has_ticksarrow_offset_anglesr/  add_arrow_extension_line)	rg   start_offset
end_offsetr:  r;  r   sizer   max_adjustments	            r,   r  z'_CurvedDimensionLine.add_dimension_linec  sE    "11--	  %% #D$;$; <s B.(L&J,&
"**557 $ C C 	 	
 v'7'7':""D&($L* ))j(l* (;""D&($L* ))L(J& (8r4   c                    | j                  | j                  | j                  ||| j                  j	                                y )N)r:  r;  r  )r>  r   r   r?  r  )rg   r:  r;  s      r,   rB  z-_CurvedDimensionLine.add_arrow_extension_line  s=      #**557 	 	
r4   c                b    | j                   j                         }| j                  ||||       y)zAdd measurement text to dimension BLOCK.

        Args:
            dim_text: dimension text
            pos: text location
            rotation: text rotation in degrees

        )posr   r  N)rw   r  add_text)rg   dim_textrI  r   r1  s        r,   r  z)_CurvedDimensionLine.add_measurement_text  s,     ""--/hC(wOr4   NNr   r   r   zOptional[UCS]r   zOptional[DimStyleOverride])rP   r   rP   r   rP   r}   rP   rO   rP   z
list[Vec2])r   )r   rO   rP   r   )rP   ztuple[Vec2, Vec2])r  r    rP   r}   )r"  r   r#  r   rP   r}   )rP   tuple[float, float])rC  rO   rD  rO   rP   r}   )r:  rO   r;  rO   )rK  rQ   rI  r   r   rO   rP   r}   )r~   r   r   rc   propertyr   r   r   r   r   r   r   r   r   r   r   r   r   r	  r  r  r  r  r  rB  r  r   r   s   @r,   r   r      sW    "/3	4J4J 4J -	4Jl B B 
 
            .&="8Hd-LB(:6	9*P4d,, , 
	,\
PP"&P27P	Pr4   r   c                  0    e Zd Z	 	 	 	 	 	 ddZddZddZy)_AngularCommonBasec                r    t        | j                  |j                  |j                  ||j                        S )N)ri   rj   rk   rU   )r_   rh   text_heighttext_width_factorrU   )rg   r*  rw   s      r,   init_tolerancez!_AngularCommonBase.init_tolerance  s6      NN"..$66#//
 	
r4   c                X    t        | j                  | j                  | j                        S r'   )r   rh   default_colorrk   rg   colorr*  s      r,   init_measurementz#_AngularCommonBase.init_measurement  s$    NND..
 	
r4   c                N    | j                   j                  | j                         y r'   )rw   r   r   r   s    r,   r   z%_AngularCommonBase.update_measurement  s     7 78r4   N)r*  rO   rw   r   rP   r   r]  r{   r*  rO   rP   r   rO  )r~   r   r   rY  r^  r   r(   r4   r,   rU  rU    s)    	
	
)4	
		


9r4   rU  c                  \     e Zd ZdZ	 	 d	 	 	 	 	 d	 fdZd
dZddZddZddZddZ	 xZ
S )r!   a  
    Angular dimension line renderer. The dimension line is defined by two lines.

    Supported render types:

    - default location above
    - default location center
    - user defined location, text aligned with dimension line
    - user defined location horizontal text

    Args:
        dimension: DIMENSION entity
        ucs: user defined coordinate system
        override: dimension style override management object

    c                   t        |d      | _        t        |d      | _        t        |d      | _        t        |d      | _        t        |d      | _        t        |   |||       t        | j                  | j
                  | j                  | j                        | _
        t        | j                  | j
                  | j                  | j                        | _        y )Nr   r   r   r   r   )r#  baser  r  )r   
leg1_startleg1_end
leg2_startleg2_enddim_line_locationrb   rc   detect_closer_defpointr   r   r   r   r   s       r,   rc   zAngularDimension.__init__  s     0	:F-iE/	;G-iE!6y+!NC2
 1mm''}}	
 1mm''}}	
r4   c                t    | j                   | j                  | j                  | j                  | j                  gS r'   )rd  re  rf  rg  rh  r   s    r,   r   zAngularDimension.get_defpoints  s1    OOMMOOMM""
 	
r4   c                
   t        | j                  | j                  f| j                  | j                  f      }|Ht
        j                  d| j                   d       | j                  j                  | j                        }|S )Nz1Invalid colinear or parallel angle legs found in ))	r   rd  re  rf  rg  loggerwarningr   lerp)rg   r   s     r,   r   z"AngularDimension.get_center_of_arc  sp    *__dmm,__dmm,
 >NNCDNNCSSTU ]]''6Fr4   c                H    | j                   | j                  z
  j                  S r'   rh  r   r   r   s    r,   r   z$AngularDimension.get_dim_line_radius      &&););;FFFr4   c                    | j                   }| j                  j                  |      r| j                  n| j                  }||z
  j	                         S r'   )r   rd  isclosere  r   rg   r   r"  s      r,   r   zAngularDimension.get_ext1_dir  K    ## &&v. MM 	
 ))++r4   c                    | j                   }| j                  j                  |      r| j                  n| j                  }||z
  j	                         S r'   )r   rf  rt  rg  r   ru  s      r,   r   zAngularDimension.get_ext2_dir  rv  r4   rL  rM  rQ  rN  rP  r~   r   r   __doc__rc   r   r   r   r   r   r   r   s   @r,   r!   r!     sL    B "/3	

 
 -	
:
 G,,r4   r!   c                  \     e Zd ZdZ	 	 d	 	 	 	 	 d	 fdZd
dZddZddZddZddZ	 xZ
S )r"   a  
    Angular dimension line renderer. The dimension line is defined by three
    points.

    Supported render types:

    - default location above
    - default location center
    - user defined location, text aligned with dimension line
    - user defined location horizontal text

    Args:
        dimension: DIMENSION entity
        ucs: user defined coordinate system
        override: dimension style override management object

    c                    t        |d      | _        t        |d      | _        t        |d      | _        t        |d      | _        t
        |   |||       | j                  | _        | j                  | _        y Nr   r   r   r   )	r   rh  rd  rf  r   rb   rc   r   r   r   s       r,   rc   zAngular3PDimension.__init__B  sf     "7y*!M/	;G/	;G29kJC2////r4   c                ^    | j                   | j                  | j                  | j                  gS r'   rh  rd  rf  r   r   s    r,   r   z Angular3PDimension.get_defpointsP  ,    ""OOOO	
 	
r4   c                    | j                   S r'   r   r   s    r,   r   z$Angular3PDimension.get_center_of_arcX      !!!r4   c                H    | j                   | j                  z
  j                  S r'   rq  r   s    r,   r   z&Angular3PDimension.get_dim_line_radius[  rr  r4   c                P    | j                   | j                  z
  j                         S r'   rd  r   r   r   s    r,   r   zAngular3PDimension.get_ext1_dir^       $"4"44??AAr4   c                P    | j                   | j                  z
  j                         S r'   rf  r   r   r   s    r,   r   zAngular3PDimension.get_ext2_dira  r  r4   rL  rM  rQ  rN  rP  rx  r   s   @r,   r"   r"   )  sM    6 "/3	** * -	*
"GBBr4   r"   c                      e Zd ZddZy)ArcLengthMeasurementc                    t        || j                  | j                  | j                  | j                        }| j
                  r	t        |z   }| j                  rt        || j                        }|S )N)rT   r8   r9   r:   r;   )	r   
text_roundro   rp   r   has_arc_length_prefix
ARC_PREFIXr   r   r   s      r,   r   z ArcLengthMeasurement.format_textf  sf    ??&&&&**
 %%$D(( t'D'DEDr4   Nr|   )r~   r   r   r   r(   r4   r,   r  r  e  s    r4   r  c                  l     e Zd ZdZ	 	 d
	 	 	 	 	 d fdZddZddZddZddZddZ	ddZ
dd	Z xZS )r#   a  Arc length dimension line renderer.
    Requires DXF R2004.

    Supported render types:

    - default location above
    - default location center
    - user defined location, text aligned with dimension line
    - user defined location horizontal text

    Args:
        dimension: DXF entity DIMENSION
        ucs: user defined coordinate system
        override: dimension style override management object

    c                D   t        |d      | _        t        |d      | _        t        |d      | _        t        |d      | _        | j                  | j                  z
  j
                  | _        t        | !  |||       | j                  | _	        | j                  | _
        y r|  )r   rh  rd  rf  r   r   
arc_radiusrb   rc   r   r   r   s       r,   rc   zArcLengthDimension.__init__  s     "7y*!M/	;G/	;G29kJ??T-?-??JJC2////r4   c                ^    | j                   | j                  | j                  | j                  gS r'   r~  r   s    r,   r   z ArcLengthDimension.get_defpoints  r  r4   c                X    t        | j                  | j                  | j                        S r'   )r  rh   r[  rk   r\  s      r,   r^  z#ArcLengthDimension.init_measurement  s$    #NND..
 	
r4   c                    | j                   S r'   r  r   s    r,   r   z$ArcLengthDimension.get_center_of_arc  r  r4   c                H    | j                   | j                  z
  j                  S r'   rq  r   s    r,   r   z&ArcLengthDimension.get_dim_line_radius  rr  r4   c                P    | j                   | j                  z
  j                         S r'   r  r   s    r,   r   zArcLengthDimension.get_ext1_dir  r  r4   c                P    | j                   | j                  z
  j                         S r'   r  r   s    r,   r   zArcLengthDimension.get_ext2_dir  r  r4   c                    t        | j                  | j                        }|| j                  z  }| j                  j                  |       y r'   )r   r   r   r  rw   r   )rg   r   
arc_lengths      r,   r   z%ArcLengthDimension.update_measurement  s<    "4#7#79K9KLT__,

+r4   rL  rM  rQ  r`  rN  rP  rO  )r~   r   r   ry  rc   r   r^  r   r   r   r   r   r   r   s   @r,   r#   r#   u  sW    4 "/3	** * -	*


"GBB,r4   r#   c                    | j                  |      }| j                  |      }| j                  |      }t        ||z
        t        ||z
        k  r|S |S r'   )dotr+  )r#  rc  r  r  d0d1d2s          r,   ri  ri    sP     
t	B	r	B	r	B
27|s27|#	Ir4   c                N    d}||z  }t        | |      }|dkD  r
||z  }|dz  }||fS )Nr   r   )r   )
arrow_namerE  r   rC  rD  r   s         r,   rA  rA    sC     LvJ*d+F|c
##r4   )r1   r   r2   z	list[str])rT   rO   rU   r{   r8   zOptional[float]r9   r{   r:   r{   r;   rQ   rP   rQ   )rT   rO   r\   r{   rP   rO   )r   rO   r   rO   r   rO   rP   r   )
r#  r   rc  r   r  r   r  r   rP   r   )r  rQ   rE  rO   r   rO   rP   rR  )>
__future__r   typingr   r   abcr   loggingmath
ezdxf.mathr   r   r	   r
   r   r   r   ezdxf.entitiesr   r   r   dim_baser   r   r   r   r   r   r   r   r   r   ezdxf.render.arrowsr   r   ezdxf.tools.textr   r   ezdxf.eztypesr    __all__	getLoggerrm  r  r3   pirS   rR   rW   rZ   r]   r_   r   r   r   rU  r!   r"   r  r#   ri  rA  r(   r4   r,   <module>r     s   # *      B A   5 6 0/
J			7	#
A
 twwdggo--- - 	-
 - - 	-b 	+Py +P\{ ((
kP0 kP\9- 9*h,) h,V9B+ 9Bx,  C,- C,L


%)
/3
	
	$	$ 	$*/	$	$r4   