
    hOM                        S SK Jr  S SKJrJr  S SKJrJrJr  S SK	J
r
  S SKJrJr  S SKJr  S SKJr  S SKJrJrJrJr  \(       a  S S	KJr  S S
KJr   " S S\5      r " S S\5      rSS jrg)    )annotations)TYPE_CHECKINGOptional)Vec2UCSUVec)normalize_text_angle)ARROWSconnection_point)DimStyleOverride)DXFInternalEzdxfError)BaseDimensionRendererMeasurementLengthMeasurementcompile_mtext)	Dimension)GenericLayoutTypec                  L   ^  \ rS rSr        SU 4S jjrSU 4S jjrSrU =r$ )RadiusMeasurement   c                2   > [         TU ]  XU5        X@l        g N)super__init__text_prefix)self	dim_stylecolorscaleprefix	__class__s        I/var/www/html/env/lib/python3.13/site-packages/ezdxf/render/dim_radius.pyr   RadiusMeasurement.__init__   s     	51!    c                x   > [         TU ]  U5      nU(       a"  US   U R                  :w  a  U R                  U-   nU$ )Nr   )r   format_textr   )r   valuetextr!   s      r"   r&   RadiusMeasurement.format_text   s;    w"5)DGt///##d*Dr$   )r   )r   r   r   intr   floatr    str)r'   r+   returnr,   )__name__
__module____qualname____firstlineno__r   r&   __static_attributes____classcell__r!   s   @r"   r   r      s2    ")"25">C"MP" r$   r   c                    ^  \ rS 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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 S jrS S jrS S jr        S!S jrSS jrSrU =r$ )"RadiusDimension%   a  
Radial dimension line renderer.

Supported render types:
- default location inside, text aligned with radial dimension line
- default location inside horizontal text
- default location outside, text aligned with radial dimension line
- default location outside horizontal text
- user defined location, text aligned with radial dimension line
- user defined location horizontal text

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

c                T    [        U R                  R                  R                  5      $ r   )r   	dimensiondxfdefpointr   s    r"   _centerRadiusDimension._center9   s    DNN&&//00r$   c                  > [         TU ]  XU5        U R                  R                  nU R                  nUS:X  a  SU l        OUS:X  a  SU l        O[        SU 35      eU R                  5       U l	        [        U R                  R                  R                  5      U l        UR                  cc  UR                  (       aR  UR                   (       aA  UR"                  S:X  a1  U R                  R%                  U R                  5      Ul        SUl        U R                  U R                  -
  nUR)                  5       U l        U R*                  R,                  U l        UR0                  U l        UR5                  U R                  R7                  5       5        U R2                  SU R8                  R:                  -  -   U l        U R                  U R*                  U R<                  -  -   U l        [A        U RB                  RE                  SS5      5      U l#        URH                  (       + Ul%        UR                  b   U RM                  UR                  5      Ul%        S	U l'        URP                  (       aU  U RS                  5       U l'        U RT                  RV                  (       a%  U RT                  RY                  URZ                  5        U R.                  nURJ                  (       a  UR\                  (       a  S	nO$UR                  (       a  UR                   (       a  S	n[_        USS
9Ul0        U Rc                  5       Ul2        U Rf                  Ri                  U Rk                  5       5        UR                  (       a&  UR                  U R                  R                  l6        g URJ                  (       a7  UR\                  (       a&  U R>                  U R                  R                  l6        g URd                  U R                  R                  l6        g )N   T   zInvalid dimension type    r      dimtofl        )fix_upside_down)7r   r   r9   dimtypemeasurementis_diameter_dimis_radius_dimr   r=   centerr   r:   	defpoint4point_on_circleuser_locationtext_is_insidetext_inside_horizontaltext_movement_rulelerptext_valign	normalizedim_line_vec	angle_degdim_line_angle	magnituderadiusupdateget_measurementarrows
arrow_sizeoutside_default_distanceoutside_default_defpointboolr   getoutside_text_force_dimlineforce_text_insidetext_is_outsideis_location_outside_total_text_widthr(   total_text_widthtol
has_limitsupdate_limitsr'   text_outside_horizontalr	   text_rotationget_text_locationtext_locationgeometryset_text_boxinit_text_boxtext_midpoint)	r   r9   ucsoverriderG   rH   	directionrotationr!   s	           r"   r   RadiusDimension.__init__<   s    	2..((&&a<#'D \!%D'*A'(KLL LLN%)$..*<*<*F*F%G$$,**6622a7 -1KK,<,<((-) +,'((4;;6	%//1"//99))4>>99;<(,a$++:P:P6P(P%(, = ==)
% +/t~~/A/A)Q/O*P' +6*G*G&G#$$0*.*B*B))+K' ),%)%:%:%<D"xx"" &&{'8'89 &&&&;+N+NH''K,N,NH %9d%
!
 %)$:$:$<!""4#5#5#78$$/:/H/HDNN, ''K,O,O/3/L/LDNN,/:/H/HDNN,r$   c                0    [        U R                  XS5      $ )NR)r   r   )r   r   r   s      r"   init_measurement RadiusDimension.init_measurement   s     sCCr$   c                p    U R                   R                  b  U R                  5       $ U R                  5       $ )zKReturns text midpoint from user defined location or default text
location.
)rH   rN   get_user_defined_text_locationget_default_text_locationr<   s    r"   rm   !RadiusDimension.get_text_location   s4     ))566881133r$   c                0   U R                   nUR                  (       a  UR                  (       a  U R                  S-  nUR                  S:X  a  X R
                  R                  -  nU R                  S-  nSUs=:  a  S::  a  O  OU* nU R                  [        X!R                  5       45      -   $ [        R                  " UR                  5      nUR                  SS9nUR                  5       nUR                  (       aC  U R                  U R
                  R                  -
  S-  nU R                   U R"                  U-  -   nOOU R                  S-  U R
                  R                  -   UR$                  -   nU R&                  U R"                  U-  -   nXuU-  -   $ )zHReturns default text midpoint based on `text_valign` and
`text_outside`
       @r        v@g     V@g     p@T)ccw)rH   rd   rk   rf   vertical_placementr\   r]   rW   r_   r   text_vertical_distancefrom_deg_anglerl   
orthogonalrO   rY   rK   rU   text_gaprM   )r   rH   hdistangletext_directionvertical_directionvertical_distancerr   s           r"   r~   )RadiusDimension.get_default_text_location   sx    &&&&;+N+N**S0E..!3///''%/Ee$u$004::<=4   ,,[-F-FG+6646@'>>@%%[[4;;#9#99S@E KK4+<+<u+DEM &&,++(()&&' 
 !00D4E4E4MNM5F FGGr$   c                   U R                   n[        UR                  [        5      (       d   eUR                  =(       a    UR
                  nUR                  =(       a    UR                  nU(       d  U(       a  U R                  S-  nUR                  S:X  a  X@R                  R                  -  nUR                  R                  U R                  R                  ::  a  U* nUR                  5       nUR                  [        XE45      -   $ [        R                  " UR                   5      R#                  5       nUR                  XaR                  5       -  -   $ )z:Returns text midpoint for user defined dimension location.r   r   )rH   
isinstancerN   r   rd   rk   rO   rP   rf   r   r\   r]   xrM   r   r   rl   r   )r   rH   text_outside_horiztext_inside_horizr   vdisttext_normal_vecs          r"   r}   .RadiusDimension.get_user_defined_text_location   s'   &&+33T::::''OK,O,O 	 &&M;+M+M 	 !2**S0E..!3///((**d.B.B.D.DD668E,,tUN/CCC"11))jl  ))!$F$F$HHIr$   c                N    XR                   -
  R                  nX R                  :  $ r   )rK   rX   rY   )r   locationrY   s      r"   re   #RadiusDimension.is_location_outside   s!    [[(33##r$   c                .  > [         TU ]  U5        U R                  nU R                  R                  (       d.  UR
                  b  U R                  5         OU R                  5         UR                  (       an  U R                  R                  (       a!  [        U R                  U R                  5      nOUR                  nU R                  X2R                  UR                  5        U R                  R!                  U R"                  U R$                  /5        g)zPCreate dimension geometry of basic DXF entities in the associated
BLOCK layout.
N)r   renderrH   dimension_line	suppress1rN   render_user_locationrender_default_locationr(   ro   supports_dxf_r2000r   rh   add_measurement_textrn   rl   add_defpointsrK   rM   )r   blockrH   r(   r!   s       r"   r   RadiusDimension.render   s    
 	u&&"",,((4))+,,. }}//$T%5%5txx@"''%%//1J1J
 	##T[[$2F2F$GHr$   c                t   U R                   nU R                  R                  (       d%  U R                  U R                  UR
                  S9nOU R                  nUR
                  (       am  U R                  (       a  U R                  U R                  5        O[        U 5        UR                  (       a  U R                  U5        gU R                  U5        gUR                  S:X  aA  U R                  U R                  R                  U R                  5      U5        [        U 5        gU R                  U5        g)zBCreate dimension geometry at the default dimension line locations.rotaterB   N)rH   r\   r   	add_arrowrM   rd   rb   add_radial_dim_lineadd_center_markrk   add_horiz_ext_line_defaultadd_radial_ext_line_defaultrQ   add_radial_dim_line_from_textrK   rR   )r   rH   arrow_connection_points      r"   r   'RadiusDimension.render_default_location   s    &&{{$$%)^^$$[-H-H &4 &" &*%9%9"&&..(()=)=>%22//0FG001GH--222KK$$T%9%9:*  % (()?@r$   c                   U R                   nUR                  nUR                  S:g  nU(       d  SUl        U R                  R                  (       d%  U R                  U R                  UR                  S9nOU R                  nUR                  (       am  U R                  (       a  U R                  U R                  5        O[        U 5        UR                  (       a  U R                  U5        O~U R                  U5        OlUR                  (       a  U R                  U5        OIUR                  S:X  a  U R                  U5        O'U R                  UR                  U5        [        U 5        X!l        g)z>Create dimension geometry at user defined dimension locations.rC   Fr   N)rH   rd   rQ   r\   r   r   rM   rb   r   r   rk   add_horiz_ext_line_useradd_radial_ext_line_userrP   r   rN   )r   rH   preserve_outsideleaderr   s        r"   r   $RadiusDimension.render_user_location  s/   &&&66//14 ' {{$$%)^^$$[-H-H &4 &" &*%9%9"&&..(()=)=>%22,,-CD--.DE11,,-CD11Q6,,-CD 66#113I $D)&6#r$   c                p   U R                   nUR                  5       nUR                  nUR                  S:  a:  U R	                  [
        R                  UU R                  UR                  S-  US9  U$ UR                  nU R                  nU(       a  US-  nU R	                  UUUUUS9  [        XQXg5      nU$ )zMAdd arrow or tick to dimension line, returns dimension line connection point.rE   r   )insertrv   r   
dxfattribsg     f@)r   r   rv   r   )
r\   r   arrow1_name	tick_sizeadd_blockrefr
   obliquerW   r]   r   )r   r   r   r\   attribs
arrow_namer   r   s           r"   r   RadiusDimension.add_arrowC  s    ##%''
c!,,&&,"  *  %%E''E"   (
eKHr$   c                n    U R                   R                  5       nU R                  U R                  XSS9  g)zAdd radial dimension line.Tr   remove_hidden_linesN)r   r   add_linerK   )r   endr   s      r"   r   #RadiusDimension.add_radial_dim_linea  s2    %%002KKd 	 	
r$   c                    U R                   R                  5       nU R                  S-  nU R                  R                  S:w  a  U* nU R                  XR                  U-  -   UUSS9  g)zBAdd radial dimension line, starting point at the measurement text.rC   r   Fr   N)r   r   rf   rH   r   r   rU   )r   startr   r   hshifts        r"   r   -RadiusDimension.add_radial_dim_line_from_texth  sl    %%002''!+..!3WF%%.. %	 	 	
r$   c                   U R                   R                  5       nU R                  XR                  US9  U R                  R
                  S:X  a  U R                  R                  nOU R                  nU R                  S-  nSUs=:  a  S::  a  O  OU* nU R                  [        US45      -   nU R                  U R                  XRS9  g)zHAdd horizontal outside extension line from start for default
locations.
r   r   r   Z   i  N)r   r   r   r_   rH   r   r\   r]   rf   rW   r   )r   r   r   r   r   r   s         r"   r   *RadiusDimension.add_horiz_ext_line_defaultu  s     %%002e::wO..!3KK**E**E##e+FE++dE1:.>>d33SMr$   c                   U R                   n[        UR                  [        5      (       d   eU R                  R                  5       nU R                  XR                  US9  UR                  S:X  a  U R                  R                  nOU R                  nUR                  R                  U R                  R                  ::  a  U* nUR                  [        US45      -   nU R                  UR                  XSS9  g)zDAdd horizontal extension line from start for user defined locations.r   r   N)rH   r   rN   r   r   r   r   r   r\   r]   rf   r   rM   )r   r   rH   r   r   r   s         r"   r   'RadiusDimension.add_horiz_ext_line_user  s    &&+33T::::%%002e667K))Q.KK**E**E$$&&$*>*>*@*@@FE''$qz*::k//Ir$   c                    U R                   R                  5       nU R                  R                  U R                  -   nXR
                  U-  -   nU R                  XUSS9  g)zCAdd radial outside extension line from start for default locations.Tr   N)r   r   rH   r   rf   rU   r   r   r   r   lengthr   s        r"   r   +RadiusDimension.add_radial_ext_line_default  sW    %%002!!**T-C-CC''&00eW$Or$   c                    U R                   R                  5       nU R                  S-  nU R                  R                  S:X  a  U* nU R                  R
                  U R                  U-  -   nU R                  XUS9  g)zGAdd radial outside extension line from start for user defined location.r   r   r   N)r   r   rf   rH   r   rN   rU   r   r   s        r"   r   (RadiusDimension.add_radial_ext_line_user  sr    %%002''#-..!3WF,,t/@/@6/IIeW5r$   c                X    U R                   R                  5       nU R                  XX4S9  g)z(Add measurement text to dimension BLOCK.)posrv   r   N)rH   r   add_text)r   dim_textr   rv   r   s        r"   r   $RadiusDimension.add_measurement_text  s(     ""--/h(Or$   c                   ^  U 4S jnT R                   R                  nU" SUR                  5        U" SUR                  5        U" SUR                  5        g)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.

c                ~   > TR                   R                  U 5      nTR                   R                  X" U5      5        g r   )r9   get_dxf_attribset_dxf_attrib)attrfuncpointr   s      r"   from_ucs6RadiusDimension.transform_ucs_to_wcs.<locals>.from_ucs  s/    NN11$7ENN))$U<r$   r;   rL   rr   N)ro   rs   to_wcsto_ocs)r   r   rs   s   `  r"   transform_ucs_to_wcs$RadiusDimension.transform_ucs_to_wcs  sC    	= mmSZZ(cjj)#**-r$   )rf   rK   rW   rU   rI   rJ   r_   r^   rb   rM   rY   )NN)r9   r   rs   zOptional[UCS]rt   zOptional[DimStyleOverride])r   r*   r   r+   r-   r   )r-   r   )r   r   r-   r`   )r   r   r-   None)r-   r   )r   r`   r-   r   )r   r   r-   r   )r   r   r-   r   )r   r,   r   r   rv   r+   r-   r   )r.   r/   r0   r1   __doc__r=   r   rz   rm   r~   r}   re   r   r   r   r   r   r   r   r   r   r   r   r   r2   r3   r4   s   @r"   r6   r6   %   s    &1 "/3	UIUI UI -	UI UInD4HB:$I4A>'7R<

N JP6PP"&P27P	P. .r$   r6   c                L   U R                   R                  nUS:X  a  U R                  R                  nO.US:X  a  U R                  R                  S-  nO[	        SU 35      eU R
                  R                  SS5      nUS:X  a  gSnUS:  a  [        U5      nS	n[        U R                  5      n[        US45      n[        SU45      nS
U R                  R                  0nU R                  XV-
  XV-   U5        U R                  XW-
  XW-   U5        U(       a  X2-   n	U	SU-  :  a  gUS-  n
US-  n[        U	S45      n[        SU	45      nU R                  XZ-   X\-   U5        U R                  XZ-
  X\-
  U5        U R                  X[-   X]-   U5        U R                  X[-
  X]-
  U5        gg)zwAdd center mark/lines to radius and diameter dimensions.

Args:
    dim: RadiusDimension or DiameterDimension renderer
rA   r@   r   zInvalid dimension type: dimcenr   NFTr   rC   )r9   rG   rH   	raw_value	TypeErrorr   ra   absr   rK   r   r   r   )dimdim_typerY   	mark_sizecenter_linesrK   
mark_x_vec
mark_y_vecr   sizestart_x_vecstart_y_vec	end_x_vec	end_y_vecs                 r"   r   r     s    }}$$H1}**	Q**S028*=>>!!(A.IA~L1}	N	#**F y!n%Jq)n%J3--334JLL$f&9:FLL$f&9:F!!i- 1n 1n$O	!TO	V)6+=zJV)6+=zJV)6+=zJV)6+=zJ r$   N)r   r6   r-   r   )
__future__r   typingr   r   
ezdxf.mathr   r   r   ezdxf.toolsr	   ezdxf.render.arrowsr
   r   ezdxf.entities.dimstyleoverrider   ezdxf.lldxf.constr   ezdxf.render.dim_baser   r   r   r   ezdxf.entitiesr   ezdxf.eztypesr   r   r6   r    r$   r"   <module>r     sW    # * & & , 8 < 3  (/) U.+ U.p+Kr$   