
    Og?                    ~    d dl mZ d dlmZmZ d dlmZ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Z G d	 d
e      Zy)    )annotations)TYPE_CHECKINGOptional)Vec2UCS)DimStyleOverride   )RadiusDimensionadd_center_markMeasurementRadiusMeasurement)	Dimension   Øc                       e Zd ZdZddZd Z	 	 d	 	 	 	 	 d fdZ	 	 	 	 	 	 	 	 d fdZd fdZddZ	ddZ
dd	Zdd
ZddZ xZS )DiameterDimensionaH  
    Diameter dimension line renderer.

    Supported render types:
    - default location inside, text aligned with diameter dimension line
    - default location inside horizontal text
    - default location outside, text aligned with diameter dimension line
    - default location outside horizontal text
    - user defined location, text aligned with diameter 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        | j                  ||t              S N)r   	dim_stylePREFIX)selfcolorscales      ^/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/render/dim_diameter.pyinit_measurementz"DiameterDimension.init_measurement(   s     vFF    c                    t        | j                  j                  j                        j	                  | j                  j                  j
                        S r   )r   	dimensiondxfdefpointlerp	defpoint4)r   s    r   _centerzDiameterDimension._center+   s=    DNN&&//055NN((
 	
r   c                    t         |   |||       t        | j                  j                  j
                        | _        y r   )super__init__r   r   r   r   point_on_circle2)r   r   ucsoverride	__class__s       r   r%   zDiameterDimension.__init__0   s3     	C2 $T^^%7%7%@%@ Ar   c                R    t         |   |j                  t        d      |||       y )Nz%%c)r$   add_textreplacer   )r   textposrotation
dxfattribsr)   s        r   r+   zDiameterDimension.add_text;   s#     	fe4c8ZPr   c                   | j                   }|j                  r|j                  rt        |          S t        j                  |j                        }|j                  d      }|j                         }|j                  r| j                  }nO| j                  dz  | j                  j                  z   |j                  z   }| j                   | j"                  |z  z   }|||z  z   S )zYReturns default text midpoint based on `text_valign` and
        `text_outside`.
        T)ccwg       @)measurementtext_is_outsidetext_outside_horizontalr$   get_default_text_locationr   from_deg_angletext_rotation
orthogonaltext_vertical_distancetext_is_insidecenter_total_text_widtharrows
arrow_sizetext_gappoint_on_circledim_line_vec)r   r3   text_directionvertical_directionvertical_distancetext_midpointhdistr)   s          r   r6   z+DiameterDimension.get_default_text_locationA   s     &&&&;+N+N7466,,[-F-FG+6646@'>>@%% KKM &&,++(()&&' 
 !00D4E4E4MNM 25F FGGr   c                    | j                   j                  s| j                  | j                  |      S | j                  S Nrotate)r>   	suppress1	add_arrowrA   r   rK   s     r   _add_arrow_1zDiameterDimension._add_arrow_1W   s4    {{$$>>$"6"6v>FF'''r   c                    | j                   j                  s| j                  | j                  |      S | j                  S rI   )r>   	suppress2rM   r&   rN   s     r   _add_arrow_2zDiameterDimension._add_arrow_2]   s4    {{$$>>$"7"7>GG(((r   c                   | j                   }|j                  rz| j                  d      }| j                  r!| j	                  || j                                nt        |        |j                  r| j                  |       y| j                  |       y| j                  d      }|j                  dk(  r(| j                  | j                  |       t        |        y| j	                  || j                                y)zBCreate dimension geometry at the default dimension line locations.TrJ   Fr	   N)r3   r4   rO   outside_text_force_dimlineadd_diameter_dim_linerR   r   r5   add_horiz_ext_line_defaultadd_radial_ext_line_defaulttext_movement_ruleadd_radial_dim_line_from_textr<   )r   r3   connection_point1s      r   render_default_locationz)DiameterDimension.render_default_locationc   s    &&&& $ 1 1 1 >..**%t'8'8':  %22//0AB001BC $ 1 1 1 ?--222KK!2  % **%t'8'8':r   c                   | j                   }|j                  }|j                  dk7  }|sd|_        | j                  |j                        }|j                  rq| j                  r| j                  | j                         nt        |        |j                  r| j                  |       ||_        y| j                  |       ||_        y|j                  r| j                  |       ||_        y|j                  dk(  rG| j                  d      }| j                  ||| j                  j                         d       ||_        y| j!                  |j"                  |       t        |        ||_        y)z>Create dimension geometry at user defined dimension locations.   FrJ   Tr0   remove_hidden_linesN)r3   r4   rX   rO   rT   add_radial_dim_linerA   r   r5   add_horiz_ext_line_useradd_radial_ext_line_usertext_inside_horizontalrR   add_linedimension_liner0   rY   user_location)r   r3   preserve_outsideleaderrZ   connection_point2s         r   render_user_locationz&DiameterDimension.render_user_location   sl   &&&66//14*/K' --.. . 
 &&..(()=)=>%22,,->?. '7#+ --.?@* '7#' 11,,->?$ '7#! 11Q6(,(9(9(9(F%MM))#'#6#6#A#A#C,0	 "  '7# 66#113D $D)&6#r   c                b    | j                   j                         }| j                  |||d       y)zAdd diameter dimension line.Tr^   N)re   r0   rd   )r   startendattribss       r   rU   z'DiameterDimension.add_diameter_dim_line   s*    %%002eSW$Or   )r   intr   floatreturnr   )NN)r   r   r'   zOptional[UCS]r(   zOptional[DimStyleOverride])r-   strr.   r   r/   rp   rq   None)rq   r   )F)T)rq   rs   )rl   r   rm   r   rq   rs   )__name__
__module____qualname____doc__r   r"   r%   r+   r6   rO   rR   r[   rj   rU   __classcell__)r)   s   @r   r   r      s    $G
 "/3		B	B 	B -		BQQ"Q.3Q	QH,():*7XPr   r   N)
__future__r   typingr   r   
ezdxf.mathr   r   ezdxf.entities.dimstyleoverrider   
dim_radiusr
   r   r   r   ezdxf.entitiesr   r   r    r   r   <module>r      s:    # *   <  (	ZP ZPr   