
    OgOM                        d dl mZ d dlmZmZ d dlmZmZ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mZmZ erd d	lmZ d d
lmZ  G d de      Z G d de      ZddZy)    )annotations)TYPE_CHECKINGOptional)Vec2UCSUVec)normalize_text_angle)ARROWSconnection_point)DimStyleOverride)DXFInternalEzdxfError)BaseDimensionRendererMeasurementLengthMeasurementcompile_mtext)	Dimension)GenericLayoutTypec                  <     e Zd Z	 	 	 	 	 	 	 	 d fdZd fdZ xZS )RadiusMeasurementc                6    t         |   |||       || _        y N)super__init__text_prefix)self	dim_stylecolorscaleprefix	__class__s        \/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/render/dim_radius.pyr   zRadiusMeasurement.__init__   s     	E51!    c                l    t         |   |      }|r!|d   | j                  k7  r| j                  |z   }|S )Nr   )r   format_textr   )r   valuetextr    s      r!   r$   zRadiusMeasurement.format_text   s;    w"5)DGt///##d*Dr"   )r   r   r   intr   floatr   str)r%   r(   returnr)   )__name__
__module____qualname__r   r$   __classcell__r    s   @r!   r   r      s2    ")"25">C"MP" r"   r   c                       e Zd 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 f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Z xZS ) RadiusDimensiona@  
    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    t        | j                  j                  j                        S r   )r   	dimensiondxfdefpointr   s    r!   _centerzRadiusDimension._center9   s    DNN&&//00r"   c                   t         |   |||       | j                  j                  }| j                  }|dk(  rd| _        n|dk(  rd| _        nt        d|       | j                         | _	        t        | j                  j                  j                        | _        |j                  X|j                  rL|j                   r@|j"                  dk(  r1| j                  j%                  | j                        |_        d|_        | j                  | j                  z
  }|j)                         | _        | j*                  j,                  | _        |j0                  | _        |j5                  | j                  j7                                | j2                  d| j8                  j:                  z  z   | _        | j                  | j*                  | j<                  z  z   | _        tA        | jB                  jE                  dd            | _#        |jH                   |_%        |j                   | jM                  |j                        |_%        d	| _'        |jP                  rP| jS                         | _'        | jT                  jV                  r%| jT                  jY                  |jZ                         | j.                  }|jJ                  r|j\                  rd	}n|j                  r|j                   rd	}t_        |d
      |_0        | jc                         |_2        | jf                  ji                  | jk                                |j                  r&|j                  | j                  j                  _6        y |jJ                  r2|j\                  r&| j>                  | j                  j                  _6        y |jd                  | j                  j                  _6        y )N   T   zInvalid dimension type    r      dimtofl        )fix_upside_down)7r   r   r3   dimtypemeasurementis_diameter_dimis_radius_dimr   r7   centerr   r4   	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   r3   ucsoverrider@   rA   	directionrotationr    s	           r!   r   zRadiusDimension.__init__<   s    	C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                2    t        | j                  ||d      S )NR)r   r   )r   r   r   s      r!   init_measurementz RadiusDimension.init_measurement   s     sCCr"   c                n    | j                   j                  | j                         S | j                         S )z[Returns text midpoint from user defined location or default text
        location.
        )rA   rG   get_user_defined_text_locationget_default_text_locationr6   s    r!   rf   z!RadiusDimension.get_text_location   s4     ))566881133r"   c                   | j                   }|j                  r|j                  r| j                  dz  }|j                  dk(  r|| j
                  j                  z  }| j                  dz  }d|cxk  rdk  rn n| }| j                  t        ||j                         f      z   S t        j                  |j                        }|j                  d      }|j                         }|j                  rC| j                  | j
                  j                  z
  dz  }| j                   | j"                  |z  z   }nO| j                  dz  | j
                  j                  z   |j$                  z   }| j&                  | j"                  |z  z   }|||z  z   S )zXReturns default text midpoint based on `text_valign` and
        `text_outside`
               @r        v@g     V@g     p@T)ccw)rA   r]   rd   r_   vertical_placementrU   rV   rP   rX   r   text_vertical_distancefrom_deg_anglere   
orthogonalrH   rR   rD   rN   text_gaprF   )r   rA   hdistangletext_directionvertical_directionvertical_distancerk   s           r!   ru   z)RadiusDimension.get_default_text_location   s    &&&&;+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 25F FGGr"   c                ~   | j                   }t        |j                  t              sJ |j                  xr |j
                  }|j                  xr |j                  }|s|r| j                  dz  }|j                  dk(  r|| j                  j                  z  }|j                  j                  | j                  j                  k  r| }|j                         }|j                  t        ||f      z   S t        j                  |j                         j#                         }|j                  ||j                         z  z   S )z:Returns text midpoint for user defined dimension location.rw   r   )rA   
isinstancerG   r   r]   rd   rH   rI   r_   rz   rU   rV   xrF   r{   r|   re   r}   )r   rA   text_outside_horiztext_inside_horizr   vdisttext_normal_vecs          r!   rt   z.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,,tUEN/CCC"11))jl  ))!K$F$F$HHIr"   c                R    || j                   z
  j                  }|| j                  kD  S r   )rD   rQ   rR   )r   locationrR   s      r!   r^   z#RadiusDimension.is_location_outside   s%    T[[(33##r"   c                   t         |   |       | j                  }| j                  j                  s-|j
                  | j                          n| j                          |j                  rj| j                  j                  r!t        | j                  | j                        }n|j                  }| j                  ||j                  |j                         | j                  j!                  | j"                  | j$                  g       y)z`Create dimension geometry of basic DXF entities in the associated
        BLOCK layout.
        N)r   renderrA   dimension_line	suppress1rG   render_user_locationrender_default_locationr&   rh   supports_dxf_r2000r   ra   add_measurement_textrg   re   add_defpointsrD   rF   )r   blockrA   r&   r    s       r!   r   zRadiusDimension.render   s    
 	u&&"",,((4))+,,. }}//$T%5%5txx@"''%%k//1J1J
 	##T[[$2F2F$GHr"   c                P   | j                   }| j                  j                  s(| j                  | j                  |j
                        }n| j                  }|j
                  rc| j                  r| j                  | j                         nt        |        |j                  r| j                  |       y| j                  |       y|j                  dk(  rA| j                  | j                  j                  | j                        |       t        |        y| j                  |       y)zBCreate dimension geometry at the default dimension line locations.rotater;   N)rA   rU   r   	add_arrowrF   r]   r[   add_radial_dim_lineadd_center_markrd   add_horiz_ext_line_defaultadd_radial_ext_line_defaultrJ   add_radial_dim_line_from_textrD   rK   )r   rA   arrow_connection_points      r!   r   z'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                   | j                   }|j                  }|j                  dk7  }|sd|_        | j                  j                  s(| j                  | j                  |j                        }n| j                  }|j                  rq| j                  r| j                  | j                         nt        |        |j                  r| j                  |       ||_        y| j                  |       ||_        y|j                  r| j                  |       ||_        y|j                  dk(  r| j                  |       ||_        y| j                  |j                  |       t        |        ||_        y)z>Create dimension geometry at user defined dimension locations.r<   Fr   N)rA   r]   rJ   rU   r   r   rF   r[   r   r   rd   add_horiz_ext_line_useradd_radial_ext_line_userrI   r   rG   )r   rA   preserve_outsideleaderr   s        r!   r   z$RadiusDimension.render_user_location  s_   &&&66//14 ' {{$$%)^^$$[-H-H &4 &" &*%9%9"&&..(()=)=>%22,,-CD" '7# --.DE '7# 11,,-CD '7# 11Q6,,-CD '7# 66#113I $D)&6#r"   c                t   | j                   }|j                         }|j                  }|j                  dkD  r=| j	                  t
        j                  || j                  |j                  dz  |       |S |j                  }| j                  }|r|dz  }| j	                  |||||       t        ||||      }|S )zMAdd arrow or tick to dimension line, returns dimension line connection point.r>   rw   )insertro   r   
dxfattribsg     f@)r   r   ro   r   )
rU   r   arrow1_name	tick_sizeadd_blockrefr
   obliquerP   rV   r   )r   r   r   rU   attribs
arrow_namer   r   s           r!   r   zRadiusDimension.add_arrowC  s    ##%''
c!,,&&,"  *  %%E''E"   (
HeUKHr"   c                v    | j                   j                         }| j                  | j                  ||d       y)zAdd radial dimension line.Tr   remove_hidden_linesN)r   r   add_linerD   )r   endr   s      r!   r   z#RadiusDimension.add_radial_dim_linea  s4    %%002KKd 	 	
r"   c                    | j                   j                         }| j                  dz  }| j                  j                  dk7  r| }| j                  || j                  |z  z   ||d       y)zBAdd radial dimension line, starting point at the measurement text.r<   r   Fr   N)r   r   r_   rA   rz   r   rN   )r   startr   r   hshifts        r!   r   z-RadiusDimension.add_radial_dim_line_from_texth  sn    %%002''!+..!3WFD%%.. %	 	 	
r"   c                   | j                   j                         }| j                  || j                  |       | j                  j
                  dk(  r| j                  j                  }n| j                  }| j                  dz  }d|cxk  rdk  rn n| }| j                  t        |df      z   }| j                  | j                  ||       y)zXAdd horizontal outside extension line from start for default
        locations.
        r   r   rx   Z   i  N)r   r   r   rX   rA   rz   rU   rV   r_   rP   r   )r   r   r   r   r   r   s         r!   r   z*RadiusDimension.add_horiz_ext_line_defaultu  s     %%002eT::wO..!3KK**E**E##e+FE++dE1:.>>d33SWMr"   c                   | j                   }t        |j                  t              sJ | j                  j                         }| j                  ||j                  |       |j                  dk(  r| j                  j                  }n| j                  }|j                  j                  | j                  j                  k  r| }|j                  t        |df      z   }| j                  |j                  ||       y)zDAdd horizontal extension line from start for user defined locations.r   r   N)rA   r   rG   r   r   r   r   rz   rU   rV   r_   r   rF   )r   r   rA   r   r   r   s         r!   r   z'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                    | j                   j                         }| j                  j                  | j                  z   }|| j
                  |z  z   }| j                  |||d       y)zCAdd radial outside extension line from start for default locations.Tr   N)r   r   rA   r~   r_   rN   r   r   r   r   lengthr   s        r!   r   z+RadiusDimension.add_radial_ext_line_default  s[    %%002!!**T-C-CCd''&00eSW$Or"   c                   | j                   j                         }| j                  dz  }| j                  j                  dk(  r| }| j                  j
                  | j                  |z  z   }| j                  |||       y)zGAdd radial outside extension line from start for user defined location.rw   r   r   N)r   r   r_   rA   rz   rG   rN   r   r   s        r!   r   z(RadiusDimension.add_radial_ext_line_user  st    %%002''#-..!3WF,,t/@/@6/IIeSW5r"   c                b    | j                   j                         }| j                  ||||       y)z(Add measurement text to dimension BLOCK.)posro   r   N)rA   r   add_text)r   dim_textr   ro   r   s        r!   r   z$RadiusDimension.add_measurement_text  s,     ""--/hC(wOr"   c                      fd} j                   j                  } |d|j                          |d|j                          |d|j                         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.

        c                    j                   j                  |       }j                   j                  |  ||             y r   )r3   get_dxf_attribset_dxf_attrib)attrfuncpointr   s      r!   from_ucsz6RadiusDimension.transform_ucs_to_wcs.<locals>.from_ucs  s/    NN11$7ENN))$U<r"   r5   rE   rk   N)rh   rl   to_wcsto_ocs)r   r   rl   s   `  r!   transform_ucs_to_wcsz$RadiusDimension.transform_ucs_to_wcs  sC    	= mmSZZ(cjj)#**-r"   )NN)r3   r   rl   zOptional[UCS]rm   zOptional[DimStyleOverride])r   r'   r   r(   r*   r   )r*   r   )r   r   r*   rY   )r   r   r*   None)r*   r   )r   rY   r*   r   )r   r   r*   r   )r   r   r*   r   )r   r)   r   r   ro   r(   r*   r   )r+   r,   r-   __doc__r7   r   rr   rf   ru   rt   r^   r   r   r   r   r   r   r   r   r   r   r   r   r.   r/   s   @r!   r1   r1   %   s    &1 "/3	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"   r1   c                R   | j                   j                  }|dk(  r| j                  j                  }n-|dk(  r| j                  j                  dz  }nt	        d|       | j
                  j                  dd      }|dk(  ryd}|dk  rt        |      }d	}t        | j                        }t        |df      }t        d|f      }d
| j                  j                  i}| j                  ||z
  ||z   |       | j                  ||z
  ||z   |       |r||z   }	|	d|z  k  ry|dz  }
|dz  }t        |	df      }t        d|	f      }| j                  ||
z   ||z   |       | j                  ||
z
  ||z
  |       | j                  ||z   ||z   |       | j                  ||z
  ||z
  |       yy)zAdd center mark/lines to radius and diameter dimensions.

    Args:
        dim: RadiusDimension or DiameterDimension renderer
    r:   r9   rw   zInvalid dimension type: dimcenr   NFTr   r<   )r3   r@   rA   	raw_value	TypeErrorr   rZ   absr   rD   r   r   r   )dimdim_typerR   	mark_sizecenter_linesrD   
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*$fz&9:FLL*$fz&9:F6!!i- 1n 1n$O	!TO	Vk)6I+=zJVk)6I+=zJVk)6I+=zJVk)6I+=zJ r"   N)r   r1   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   r1   r    r"   r!   <module>r      sW    # * & & , 8 < 3  (/) U.+ U.p+Kr"   