
    h                       S SK Jr  S SKJrJr  S SKJr  S SKrS SKrS SK	J
r
JrJrJrJrJrJr  S SKJrJrJr  SSKJrJrJrJrJrJrJrJrJrJr  S S	K J!r!J"r"  S S
K#J$r$  S SK	J%r%  \(       a  S SK&J'r'  / SQr(\RR                  " S5      r*Sr+S)S jr,S\RZ                  -  r.S\RZ                  -  r/              S*S jr0\/\/\.S/r1S+S jr2 " S S\5      r3 " S S\5      r4S,S jr5 " S S\5      r6 " S S\65      r7 " S S \75      r8 " S! S"\75      r9 " S# S$\5      r: " S% S&\65      r;          S-S' jr<        S.S( jr=g)/    )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                Z   ^ U R                   R                  m[        U4S jU 5       5      $ )Nc              3  4   >#    U  H  nT" U5      v   M     g 7fN ).0attrib_namehass     I/var/www/html/env/lib/python3.13/site-packages/ezdxf/render/dim_curved.py	<genexpr>*has_required_attributes.<locals>.<genexpr>.   s     @<Ks;<s   )dxfhasattrall)entityattrib_namesr+   s     @r,   has_required_attributesr4   ,   s#    
**

C@<@@@    g      i@     f@c                   ^^^^^ SUUUU4S jjmSUUU4S jjnSnUS:X  a  T" U [         -  5      S-   nU$ US:X  a  U" U [         -  5      nU$ US:X  a  T" U [        -  5      S-   nU$ US	:X  a  T" U 5      S
-   nU$ )Nc                   > [        U TTTTS9$ )N)dimrnddimdecdimzindimdsep)r   )_valuer:   r<   r9   r;   s    r,   decimal_format+format_angular_text.<locals>.decimal_format=   s    
 	
r5   c                   > Tb  [        U T5      n [        U 5      u  pnTS:  a#  TS-
  n[        X45      nUS SUS ST" U5       S3$ TS:  a  US SUS SUS S3$ TS:  a
  US SUS S3$ US S3$ )	N      z.0f   °'"   r   )r   r   round)r=   dmsplacesr>   r:   r9   s        r,   
dms_format'format_angular_text.<locals>.dms_formatF   s    FF+FV$aA:aZFa AWBqgQ~a'8&9<<A:WBqgQqgR00A:WBqgQ''C|r5    r   rC   r   rF   g   r)r=   floatreturnstr)DEGGRAD)	valueangle_unitsr9   r:   r;   r<   rL   textr>   s	     ````  @r,   format_angular_textrZ   5   s    
 
 & Daeck*T1 K 
	%#+&
 K	 
	edl+c1 K 
	e$s*Kr5         ?c                N     U [         U   -  $ ! [         a    U [        -  s $ f = fr'   )_ANGLE_UNITS
IndexErrorrU   )rW   dimaunits     r,   
to_radiansr`   m   s0    |H--- s{s    $$c                  ^   ^  \ rS rSr    S         SU 4S jjjrSS jrS	S jrSrU =r$ )
AngularTolerancet   c                   > XPl         [        TU ]	  XX45        U R                  [	        U R
                  U5      [	        U R                  U5      5        g r'   )angular_unitssuper__init__update_tolerance_textr`   maximumminimum)self	dim_style
cap_heightwidth_factor	dim_scalerX   	__class__s         r,   rg   AngularTolerance.__init__u   sF     )H
 	""t||[1t||[1	
r5   c           	     n    [        UU R                  SU R                  U R                  U R                  S9$ )zeRounding and text formatting of tolerance `value`, removes leading
and trailing zeros if necessary.

NrW   rX   r9   r:   r;   r<   )rZ   re   decimal_placessuppress_zerostext_decimal_separator)rk   rW   s     r,   r   AngularTolerance.format_text   s;    
 #**&&&&//
 	
r5   c                >   U[        U R                  U R                  5      -   nU[        U R                  U R                  5      -
  nU R	                  U5      U l        U R	                  U5      U l        U R                  U R
                  U R                  5      U l        g r'   )	r`   ri   re   rj   r   
text_upper
text_lowerget_text_width
text_width)rk   measurementupper_limitlower_limits       r,   update_limitsAngularTolerance.update_limits   sz    
 "Jt||T=O=O$PP!Jt||T=O=O$PP**;7**;7--dootOr5   )re   rz   ry   r|   )r[   r[   r[   r   )
rl   r   rm   rR   rn   rR   ro   rR   rX   intrW   rR   rS   rT   )r}   rR   rS   None)	__name__
__module____qualname____firstlineno__rg   r   r   __static_attributes____classcell__rp   s   @r,   rb   rb   t   s\      !
#
 
 	

 
 
 
&
	P 	Pr5   rb   c                  (    \ rS rSrSS jrSS jrSrg)AngleMeasurement   c                H    Xl         Xl        U R                  U5      U l        g r'   )	raw_valuerW   text_overriderY   )rk   raw_measurement_values     r,   updateAngleMeasurement.update   s    .*
&&'<=	r5   c           	         [        UU R                  S U R                  U R                  S-  U R                  S9nU R
                  (       a  [        X R
                  5      nU$ )NrF   rs   )rZ   rX   angular_decimal_placesangular_suppress_zerosdecimal_separatortext_post_process_formatr   rk   rW   rY   s      r,   r   AngleMeasurement.format_text   s[    "((....!3**
 (( 'D'DEDr5   )r   rY   rW   N)r   rR   rS   r   r   )r   r   r   r   r   r   r   r(   r5   r,   r   r      s    >
r5   r   c                    X-  nX#:  $ r'   r(   )lengthradiusarc_spanrequired_arc_spans       r,   fits_into_arc_spanr      s    %''r5   c                  |  ^  \ rS rSr  S     SU 4S jjjr\SS j5       r\SS j5       r\SS j5       r	\SS j5       r
\SS j5       r\SS j5       r\SS	 j5       r\SS
 j5       rSS jrSS S jjrSS jrSS jrS!S jrS"U 4S jjrSS jrS#S jrS$S jr      S%S jrS&S jr        S'S jrSrU =r$ )(_CurvedDimensionLine   c                x  > [         TU ]  XU5        SU l        U R                  5       U l        U R                  5       U l        U R                  5       U l        U R                  R                  U l
        U R                  5       U l        U R                  R                  U l        [        U R                  U R                  5      U l        U R                  U R                  S-  -   U l        [!        5       U l        [!        5       U l        U R'                  5         U R(                  R*                  (       a/  U R(                  R-                  U R.                  R0                  5        U R3                  5       U l        SU l        U R9                  5         U R;                  5         U R.                  R<                  U R4                  l        U R.                  R@                  U R4                  l	        U RB                  RE                  U R4                  5        U R.                  R<                  U RF                  RH                  l%        g )NT       @F)&rf   rg   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_limitsr   r}   rW   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rk   r   ucsoverriderp   s       r,   rg   _CurvedDimensionLine.__init__   s    	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(r5   c                r    U R                   R                  R                  [        U R                  5      5      $ r'   )r   r   to_ocsr   r   rk   s    r,   ocs_center_of_arc&_CurvedDimensionLine.ocs_center_of_arc   s(    }}  ''T-?-?(@AAr5   c                r    U R                   [        R                  " U R                  U R                  5      -   $ )z*Return the midpoint of the dimension line.)r   r   
from_angler   r   r   s    r,   dim_midpoint!_CurvedDimensionLine.dim_midpoint   s3     !!DOO!!4#7#7%
 
 	
r5   c                    g)zSetup measurement text.Nr(   r   s    r,   r   '_CurvedDimensionLine.update_measurement        	r5   c                    g)z>Return the direction of the 1st extension line == start angle.Nr(   r   s    r,   r   !_CurvedDimensionLine.get_ext1_dir  r   r5   c                    g)z<Return the direction of the 2nd extension line == end angle.Nr(   r   s    r,   r   !_CurvedDimensionLine.get_ext2_dir  r   r5   c                    g)zReturn the center of the arc.Nr(   r   s    r,   r   &_CurvedDimensionLine.get_center_of_arc  r   r5   c                    g)zNReturn the distance from the center of the arc to the dimension line
location
Nr(   r   s    r,   r   (_CurvedDimensionLine.get_dim_line_radius  s    
 	r5   c                    g r'   r(   r   s    r,   get_defpoints"_CurvedDimensionLine.get_defpoints  s    r5   c                N  ^ U4S jnU R                   R                  mU R                  R                  nU" SUR                  5        U" SUR                  5        U" SUR                  5        U" SUR                  5        U" SUR                  5        U" SUR
                  5        g)	zITransforms dimension definition points into WCS or if required into
OCS.
c                   > TR                  U 5      (       a.  TR                  U [        5      nTR                  X" U5      5        g g r'   )is_supportedgetr	   set)attrfuncpointr/   s      r,   from_ucs;_CurvedDimensionLine.transform_ucs_to_wcs.<locals>.from_ucs!  s;    %%g.d5k* &r5   defpoint	defpoint2	defpoint3	defpoint4	defpoint5r   N)r   r/   r   r   to_wcsr   )rk   r   r   r/   s      @r,   transform_ucs_to_wcs)_CurvedDimensionLine.transform_ucs_to_wcs  s|    
	+
 nn  mmSZZ(cjj)cjj)cjj)cjj)#**-r5   c                    U R                   U R                  R                  5       -   U-   n[        R                  " U R
                  5      nU R                  X2-  -   $ r'   )r   r}   text_vertical_distancer   r   r   r   )rk   shiftr   text_radial_dirs       r,   default_location%_CurvedDimensionLine.default_location/  sY      5578 	
 //$*?*?@!!O$<<<r5   c                2   [        U R                  R                  U R                  U R                  5      (       + U R
                  l        U R                  R                  SU R                  R                  -  -   n[        UU R                  U R                  5      (       + U l	        [        US-  U R                  U R                  5      (       + U R
                  l
        U R
                  R                  (       a   U R
                  R                  c  SU l        g g g )Nr   g?F)r   r   widthr   r   r}   is_wide_textarrows
arrow_sizer   text_is_outsideuser_text_rotationr   )rk   required_text_and_arrows_spaces     r,   r   1_CurvedDimensionLine.setup_text_and_arrow_fitting8  s     -?MM!5!5t7N7N-
 )
% MMDKK***+ 	' #5*  ###
 
 0B*S0  ##0
 ,
( ,,  33; 38D/	 < -r5   c                   U R                   nUR                  SL n[        UR                  =(       d    UR                  5      nU(       a  [
        R                  " U R                  5      nSnUR                  (       a.  SUl	        UR                  (       a  U R                  R                  nU R                  US9Ul        UR                  S:  a  U(       d  SU l        OUR                  n[!        U[
        5      (       d   eUR"                  (       a  X`R$                  -  nXal        UR&                  S:X  a/  U R(                  U-
  R*                  U l        U R/                  5         OCUR&                  S:X  a  UR0                  c  SUl        SUl        OUR&                  S:X  a  SUl        UR                  U R(                  -
  R3                  5       nUR5                  SS	9nU(       ak  U(       ad  UR                  (       a!  U=R                  XqR                  -  -  sl        UR                  (       a!  U=R                  XAR                  -  -  sl        UR0                  c  UR6                  nOUR0                  nU R8                  R:                  (       dA  U R8                  R<                  R?                  U5      n	[A        U	5      (       a  SUl!        US
-  nXl"        g)zMSetup geometric text properties (location, rotation) and the TextBox
object.
N        r   )r   r   FTrF   )ccwr6   )#r}   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   )
rk   r}   at_default_locationhas_text_shiftingr   shift_text_upwardsr  text_tangential_dirrotation	wcs_angles
             r,   r   (_CurvedDimensionLine.setup_text_location\  s{    && %0$=$=$E"&$$@(@(@#
  #ood.C.CDO(+***+'++)-)=)=)M)M&(,(=(=( )> )K% ''!+4E 7<3 (55MmT222211!2!22(5%--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) ''))#&>&>>)
 ))1*44H"55H}}// ))::8DI(339=6E!$,!r5   c                >   U R                   R                  S:X  a5  [        U R                  U R                  U R
                  R                  5      $ U R                  R                  u  pp4U R                   R                  (       a  X4peOXpe[        U R                  XV5      $ )Nr   )
r}   r  r   r   r   r   r   cornersr  r   )rk   c0c1c2c3p1p2s          r,   get_leader_points&_CurvedDimensionLine.get_leader_points  s     ''1,+!!4==$++2H2H  "]]22NBB::BB&t'8'8"AAr5   c                Z  > [         TU ]  U5        U R                  5         U R                  5       u  p#U R                  nUR
                  (       a  U R                  R                  (       a  [        X@R                  5      nOUR
                  nU R                  XTR                  UR                  5        UR                  (       a.  U R                  5       u  pgU R                  U R                   Xg5        U R#                  X#5        U R                  R%                  U R'                  5       5        g)zMain method to create dimension geometry of basic DXF entities in the
associated BLOCK layout.

Args:
    block: target BLOCK for rendering

N)rf   renderadd_extension_lines
add_arrowsr}   rY   r   supports_dxf_r2000r   r   add_measurement_textr   r   
has_leaderr$  
add_leaderr   add_dimension_lineadd_defpointsr   )	rk   blockadjust_start_angleadjust_end_angler}   rY   r"  r#  rp   s	           r,   r'  _CurvedDimensionLine.render  s     	u  "/3/@,&&}}//$[((;"''%%//1J1J %%//1 1 12: 2E##D$6$6$89r5   c                :   U R                   nUR                  (       d6  U R                  U R                  U R                  UR                  S5      5        UR                  (       d7  U R                  U R                  U R                  UR                  S5      5        g g )Nr   rF   )	r	  	suppress1_add_ext_liner   r   
dxfattribs	suppress2r   r   )rk   	ext_liness     r,   r(  (_CurvedDimensionLine.add_extension_lines  sv    ((	""	0D0DQ0G ""	0D0DQ0G #r5   c                X   U R                   nU R                  nU R                  nUR                  nX-
  R                  U:  nUR
                  (       a  UR                  n	U(       a  XypyXRXi-
  -  -   nO UR                  n
U(       a  U* nU
* n
XU
-  -  nXRXg-   -  -   nU R                  XUS9  g )N)r7  )	r	  r   r   r
  r  has_fixed_lengthlength_belowoffsetadd_line)rk   start	directionr7  r9  r   r   	ext_above	is_inside	ext_belowr>  ends               r,   r6  "_CurvedDimensionLine._add_ext_line  s    ((	##%%--	^..7	%%!..I'09&*<==E%%F&J	 ''EF$677eZ8r5   c                l   U R                   nUR                  5       nU R                  n[        U5      S:  a  gU R                  U R
                  U-  -   nU R                  U R                  U-  -   nU R
                  R                  5       R                  nU R                  R                  5       R                  nU R                  nUR                  (       + n	UR                  (       + n
SnSnUR                  S:  am  U	(       a.  U R                  [        R                  UUUR                  S-  US9  U
(       a.  U R                  [        R                  UUUR                  S-  US9  X4$ UR                   nX-  S-  ["        -  nUS-   nUnU(       a  US-  nUS-  nU* nUnU	(       a  U R                  UR$                  UUX-   US9  U
(       a   U R                  UR&                  UUUU-
  US9  U(       d@  U	(       a  [)        UR$                  U5      U-  nU
(       a  [)        UR&                  U5      U-  nX4$ )	zuAdd arrows or ticks to dimension.

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

g-q=)r  r  r  r   )insertr  scaler7  g      ?r6   )rH  rI  r  r7  )r   r7  r   absr   r   r   r  r  r   r5  r8  	tick_sizeadd_blockrefr   obliquer   rU   arrow1_namearrow2_namer   )rk   r   attribsr   r@  rE  angle1angle2outsidearrow1arrow2start_angle_offsetend_angle_offsetr   
arrow_tiltstart_angle	end_anglerI  s                     r,   r)  _CurvedDimensionLine.add_arrows  sO    ##%%%v;""T]]V%;;  4==6#99))+55))+55%%%%%%%% c!!!NN # **S0& "  !!NN# **S0& " ` "33Q  **J
 !+ 3c 9C ?J 5.KIu$U"	([
E!!&& (5& "  !!&&&3& "   $V%7%7DvM ' $V%7%7DvM % "33r5   c           	     P   U R                   nU R                  nU R                  nUR                  nU R                  n[        U R                  5      S-  nX:  a  SnX(:  a  SnU R                  U R                  UX1-   XB-
  U R                  R                  5       U R                  S9  U R                  (       ao  UR                  (       d]  [        UR                  Xg5      u  pU R!                  X2-
  X1-
  5        [        UR                  Xg5      u  pU R!                  XA-   XB-   5        g g g )Nr   r  )r7  remove_hidden_lines)r   r   r   r   r   rJ  r   add_arcr   dimension_liner7  r   r   	has_ticksarrow_offset_anglesrN  add_arrow_extension_line)	rk   start_offset
end_offsetrY  rZ  r   sizer   max_adjustments	            r,   r.  '_CurvedDimensionLine.add_dimension_linec  s-    "11--	  %% #D$;$; <s B(L&J&"**557 $ C C 	 	
 v'7'7':""D($L ))(* (;""D($L ))(& (8r5   c                    U R                  U R                  U R                  UUU R                  R	                  5       S9  g )N)rY  rZ  r7  )r^  r   r   r_  r7  )rk   rY  rZ  s      r,   rb  -_CurvedDimensionLine.add_arrow_extension_line  s=      #**557 	 	
r5   c                X    U R                   R                  5       nU R                  XX4S9  g)zAdd measurement text to dimension BLOCK.

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

)posr  r7  N)r}   r7  add_text)rk   dim_textrk  r  rP  s        r,   r+  )_CurvedDimensionLine.add_measurement_text  s(     ""--/h(Or5   )r   r   r   r   r   r   r   r   r   r   r   r   r   NNr   r   r   zOptional[UCS]r   zOptional[DimStyleOverride])rS   r   rS   r   rS   r   rS   rR   rS   z
list[Vec2])r  )r   rR   rS   r   )rS   ztuple[Vec2, Vec2])r0  r    rS   r   )r@  r   rA  r   rS   r   )rS   tuple[float, float])rc  rR   rd  rR   rS   r   )rY  rR   rZ  rR   )rm  rT   rk  r   r  rR   rS   r   )r   r   r   r   rg   propertyr   r   r   r   r   r   r   r   r   r   r   r   r   r$  r'  r(  r6  r)  r.  rb  r+  r   r   r   s   @r,   r   r      sc    "/3	4J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 Pr5   r   c                  >    \ rS rSr      SS jrSS jrS	S jrSrg)
_AngularCommonBasei  c                l    [        U R                  UR                  UR                  UUR                  S9$ )N)rm   rn   ro   rX   )rb   rl   text_heighttext_width_factorrX   )rk   rI  r}   s      r,   init_tolerance!_AngularCommonBase.init_tolerance  s6      NN"..$66#//
 	
r5   c                X    [        U R                  U R                  U R                  5      $ r'   )r   rl   default_colorro   rk   colorrI  s      r,   init_measurement#_AngularCommonBase.init_measurement  s$    NND..
 	
r5   c                N    U R                   R                  U R                  5        g r'   )r}   r   r   r   s    r,   r   %_AngularCommonBase.update_measurement  s     7 78r5   r(   N)rI  rR   r}   r   rS   r   r  r   rI  rR   rS   r   rr  )r   r   r   r   r|  r  r   r   r(   r5   r,   rx  rx    s)    	
	
)4	
		


9r5   rx  c                  t   ^  \ rS rSrSr  S
     SU 4S jjjrSS jrSS jrSS jrSS jr	SS jr
S	rU =r$ )r!   i  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                  > [        US5      U l        [        US5      U l        [        US5      U l        [        US5      U l        [        US5      U l        [        TU ]  XU5        [        U R                  U R
                  U R                  U R                  S9U l
        [        U R                  U R
                  U R                  U R                  S9U l        g )Nr   r   r   r   r   )rA  baser"  r#  )r   
leg1_startleg1_end
leg2_startleg2_enddim_line_locationrf   rg   detect_closer_defpointr   r   r   r   r   s       r,   rg   AngularDimension.__init__  s     0	:F-iE/	;G-iE!6y+!N2
 1mm''}}	
 1mm''}}	
r5   c                t    U R                   U R                  U R                  U R                  U R                  /$ r'   )r  r  r  r  r  r   s    r,   r   AngularDimension.get_defpoints  s1    OOMMOOMM""
 	
r5   c                   [        U R                  U R                  4U R                  U R                  45      nUcH  [
        R                  SU R                   S35        U R                  R                  U R                  5      nU$ )Nz1Invalid colinear or parallel angle legs found in ))	r   r  r  r  r  loggerwarningr   lerp)rk   r   s     r,   r   "AngularDimension.get_center_of_arc  sp    *__dmm,__dmm,
 >NNCDNNCSSTU ]]''6Fr5   c                H    U R                   U R                  -
  R                  $ r'   r  r   r  r   s    r,   r   $AngularDimension.get_dim_line_radius      &&););;FFFr5   c                    U R                   nU R                  R                  U5      (       a  U R                  OU R                  nX!-
  R	                  5       $ r'   )r   r  iscloser  r  rk   r   r@  s      r,   r   AngularDimension.get_ext1_dir  L    ## &&v.. MM 	
 ))++r5   c                    U R                   nU R                  R                  U5      (       a  U R                  OU R                  nX!-
  R	                  5       $ r'   )r   r  r  r  r  r  s      r,   r   AngularDimension.get_ext2_dir  r  r5   )r  r   r   r  r  r  r  ro  rp  rt  rq  rs  r   r   r   r   __doc__rg   r   r   r   r   r   r   r   r   s   @r,   r!   r!     sV    B "/3	

 
 -	
 
:
 G,, ,r5   r!   c                  t   ^  \ rS rSrSr  S
     SU 4S jjjrSS jrSS jrSS jrSS jr	SS jr
S	rU =r$ )r"   i)  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                   > [        US5      U l        [        US5      U l        [        US5      U l        [        US5      U l        [
        TU ]  XU5        U R                  U l        U R                  U l        g Nr   r   r   r   )	r   r  r  r  r   rf   rg   r   r   r   s       r,   rg   Angular3PDimension.__init__B  sd     "7y*!M/	;G/	;G29kJ2////r5   c                ^    U R                   U R                  U R                  U R                  /$ r'   r  r  r  r   r   s    r,   r    Angular3PDimension.get_defpointsP  ,    ""OOOO	
 	
r5   c                    U R                   $ r'   r   r   s    r,   r   $Angular3PDimension.get_center_of_arcX      !!!r5   c                H    U R                   U R                  -
  R                  $ r'   r  r   s    r,   r   &Angular3PDimension.get_dim_line_radius[  r  r5   c                P    U R                   U R                  -
  R                  5       $ r'   r  r   r  r   s    r,   r   Angular3PDimension.get_ext1_dir^       $"4"44??AAr5   c                P    U R                   U R                  -
  R                  5       $ r'   r  r   r  r   s    r,   r   Angular3PDimension.get_ext2_dira  r  r5   )r   r  r   r   r  r  ro  rp  rt  rq  rs  r  r   s   @r,   r"   r"   )  sX    6 "/3	** * -	* *
"GBB Br5   r"   c                      \ rS rSrSS jrSrg)ArcLengthMeasurementie  c                    [        UU R                  U R                  U R                  U R                  S9nU R
                  (       a	  [        U-   nU R                  (       a  [        X R                  5      nU$ )N)rW   r9   r:   r;   r<   )	r   
text_roundrt   ru   r   has_arc_length_prefix
ARC_PREFIXr   r   r   s      r,   r    ArcLengthMeasurement.format_textf  sd    ??&&&&**
 %%$D(( 'D'DEDr5   r(   Nr   )r   r   r   r   r   r   r(   r5   r,   r  r  e  s    r5   r  c                     ^  \ rS rSrSr  S     SU 4S jjjrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSrU =r$ )r#   iu  at  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                B  > [        US5      U l        [        US5      U l        [        US5      U l        [        US5      U l        U R                  U R                  -
  R
                  U l        [        TU ]!  XU5        U R                  U l	        U R                  U l
        g r  )r   r  r  r  r   r  
arc_radiusrf   rg   r   r   r   s       r,   rg   ArcLengthDimension.__init__  s     "7y*!M/	;G/	;G29kJ??T-?-??JJ2////r5   c                ^    U R                   U R                  U R                  U R                  /$ r'   r  r   s    r,   r    ArcLengthDimension.get_defpoints  r  r5   c                X    [        U R                  U R                  U R                  5      $ r'   )r  rl   r  ro   r  s      r,   r  #ArcLengthDimension.init_measurement  s$    #NND..
 	
r5   c                    U R                   $ r'   r  r   s    r,   r   $ArcLengthDimension.get_center_of_arc  r  r5   c                H    U R                   U R                  -
  R                  $ r'   r  r   s    r,   r   &ArcLengthDimension.get_dim_line_radius  r  r5   c                P    U R                   U R                  -
  R                  5       $ r'   r  r   s    r,   r   ArcLengthDimension.get_ext1_dir  r  r5   c                P    U R                   U R                  -
  R                  5       $ r'   r  r   s    r,   r   ArcLengthDimension.get_ext2_dir  r  r5   c                    [        U R                  U R                  5      nXR                  -  nU R                  R                  U5        g r'   )r   r   r   r  r}   r   )rk   r   
arc_lengths      r,   r   %ArcLengthDimension.update_measurement  s:    "4#7#79K9KL__,

+r5   )r  r   r  r   r   r  r  ro  rp  rt  r  rq  rs  rr  )r   r   r   r   r  rg   r   r  r   r   r   r   r   r   r   r   s   @r,   r#   r#   u  sa    4 "/3	** * -	* *


"GBB, ,r5   r#   c                    U R                  U5      nU R                  U5      nU R                  U5      n[        XT-
  5      [        Xd-
  5      ::  a  U$ U$ r'   )dotrJ  )rA  r  r"  r#  d0d1d2s          r,   r  r    sL     
t	B	r	B	r	B
27|s27|#	Ir5   c                H    SnX-  n[        X5      nUS:  a	  XR-  nUS-  nX44$ )Nr  r   )r   )
arrow_namere  r   rc  rd  r   s         r,   ra  ra    s;     LJ*+F|c
##r5   )r2   r   r3   z	list[str])rW   rR   rX   r   r9   zOptional[float]r:   r   r;   r   r<   rT   rS   rT   )rW   rR   r_   r   rS   rR   )r   rR   r   rR   r   rR   rS   r  )
rA  r   r  r   r"  r   r#  r   rS   r   )r  rT   re  rR   r   rR   rS   ru  )>
__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__	getLoggerr  r  r4   pirV   rU   rZ   r]   r`   rb   r   r   r   rx  r!   r"   r  r#   r  ra  r(   r5   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
	
	$	$ 	$*/	$	$r5   