
    'j?                        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dS )    )annotations)TYPE_CHECKINGOptional)Vec2UCS)DimStyleOverride   )RadiusDimensionadd_center_markMeasurementRadiusMeasurement)	Dimension   Øc                  x     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

    colorintscalefloatreturnr   c                :    t          | j        ||t                    S N)r   	dim_stylePREFIX)selfr   r   s      S/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/render/dim_diameter.pyinit_measurementz"DiameterDimension.init_measurement(   s     vFFF    c                    t          | j        j        j                                      | j        j        j                  S r   )r   	dimensiondxfdefpointlerp	defpoint4)r   s    r   _centerzDiameterDimension._center+   s5    DN&/0055N(
 
 	
r   Nr    r   ucsOptional[UCS]overrideOptional[DimStyleOverride]c                    t                                          |||           t          | j        j        j                  | _        d S r   )super__init__r   r    r!   r"   point_on_circle2)r   r    r&   r(   	__class__s       r   r,   zDiameterDimension.__init__0   s?     	C222 $T^%7%@ A Ar   textstrposr   rotationNonec                    t                                          |                    t          d          |||           d S )Nz%%c)r+   add_textreplacer   )r   r/   r1   r2   
dxfattribsr.   s        r   r5   zDiameterDimension.add_text;   s7     	fe44c8ZPPPPPr   c                   | j         }|j        r'|j        r t                                                      S t          j        |j                  }|                    d          }|	                                }|j
        r| j        }n1| 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   r:   text_directionvertical_directionvertical_distancetext_midpointhdistr.   s          r   r=   z+DiameterDimension.get_default_text_locationA   s     && 	7;+N 	77744666,[-FGG+6646@@'>>@@% 	O KMM &,+()&' 
 !0D4E4MNM 25F FGGr   Fc                `    | j         j        s|                     | j        |          S | j        S Nrotate)rE   	suppress1	add_arrowrH   r   rR   s     r   _add_arrow_1zDiameterDimension._add_arrow_1W   s1    {$ 	(>>$"6v>FFF''r   Tc                `    | j         j        s|                     | j        |          S | j        S rP   )rE   	suppress2rT   r-   rU   s     r   _add_arrow_2zDiameterDimension._add_arrow_2]   s1    {$ 	)>>$"7>GGG((r   c                    | j         }|j        r|                     d          }| j        r)|                     ||                                            nt          |            |j        r|                     |           dS | 	                    |           dS |                     d          }|j
        dk    r,|                     | j        |           t          |            dS |                     ||                                            dS )zBCreate dimension geometry at the default dimension line locations.TrQ   Fr	   N)r:   r;   rV   outside_text_force_dimlineadd_diameter_dim_linerY   r   r<   add_horiz_ext_line_defaultadd_radial_ext_line_defaulttext_movement_ruleadd_radial_dim_line_from_textrC   )r   r:   connection_point1s      r   render_default_locationz)DiameterDimension.render_default_locationc   sG   && 	 $ 1 1 1 > >. &**%t'8'8':':     %%%2 D//0ABBBBB001BCCCCC $ 1 1 1 ? ?-2222K!2    %%%%% **%t'8'8':':    r   c                   | j         }|j        }|j        dk    }|sd|_        |                     |j                  }|j        rd| j        r|                     | j                   nt          |            |j        r| 	                    |           n| 
                    |           n|j        r| 	                    |           n||j        dk    rG|                     d          }|                     ||| j                                        d           n*|                     |j        |           t          |            ||_        dS )z>Create dimension geometry at user defined dimension locations.   FrQ   Tr7   remove_hidden_linesN)r:   r;   r_   rV   r[   add_radial_dim_linerH   r   r<   add_horiz_ext_line_useradd_radial_ext_line_usertext_inside_horizontalrY   add_linedimension_liner7   r`   user_location)r   r:   preserve_outsideleaderra   connection_point2s         r   render_user_locationz&DiameterDimension.render_user_location   s   &&6/14 	0*/K' --. . 
 
 & 	*. &(()=>>>>%%%2 A,,->????--.?@@@@1 *,,->????1Q66(,(9(9(9(F(F%MM))#'#6#A#A#C#C,0	 "     66#13D   $D)))&6###r   startendc                j    | j                                         }|                     |||d           dS )zAdd diameter dimension line.Tre   N)rl   r7   rk   )r   rr   rs   attribss       r   r\   z'DiameterDimension.add_diameter_dim_line   s6    %0022eSW$OOOOOr   )r   r   r   r   r   r   )NN)r    r   r&   r'   r(   r)   )r/   r0   r1   r   r2   r   r   r3   )r   r   )F)T)r   r3   )rr   r   rs   r   r   r3   )__name__
__module____qualname____doc__r   r%   r,   r5   r=   rV   rY   rb   rq   r\   __classcell__)r.   s   @r   r   r      s7        $G G G G
 
 
 "/3		B 	B 	B 	B 	B 	B 	BQ Q Q Q Q QH H H H H H,( ( ( () ) ) )   :*7 *7 *7 *7XP P P P P P P 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 ZP ZP ZP ZP ZP ZP ZP ZPr   