Ë
    £èhî  ã                  ó~   — 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      ú9lib/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=   € Ü�D—N‘N×&Ñ&×/Ñ/Ó0×5Ñ5Ø�N‰N×Ñ×(Ñ(ó
ð 	
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#   ø€ ô 	‰Ñ˜Ÿ™¤f¨eÓ4°c¸8ÀZÕ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Ñ6¸4Ð6Ó@ÐØ'×>Ñ>Ó@ÐØ×%Ò%Ø ŸK™K‰Mð ×&Ñ&¨Ñ,Ø—+‘+×(Ñ(ñ)à×&Ñ&ñ'ð ð
 !×0Ñ0°D×4EÑ4EÈÑ4MÑNˆMØÐ 2Ð5FÑ 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Ñ"6¸v�>Ó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Ñ0Ð1BÕCà $× 1Ñ 1¸Ð 1Ó ?ÐØ×-Ñ-°Ò2à×2Ñ2Ø—K‘KÐ!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Ñ1°QÒ6à(,×(9Ñ(9ÀÐ(9Ó(FÐ%Ø—M‘MØ)Ø)Ø#'×#6Ñ#6×#AÑ#AÓ#CØ,0ð	 "ô ð '7ˆÕ#ð ×6Ñ6Ø#×1Ñ1Ð3Dôô $ 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ˆØ�‰�e˜S¨WÈ$ˆÕ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ó,(ó)óó:*7÷X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   