
    'j                    N   d dl mZ d dlmZmZ d dlmZ d dlZd dlZd dl	m
Z
mZmZmZmZmZmZ d dlmZmZmZ ddlmZmZmZmZmZmZmZmZmZmZ d d	l m!Z!m"Z" d d
l#m$Z$ d dl	m%Z% erd dl&m'Z' g dZ( ej)        d          Z*dZ+dEdZ,dej-        z  Z.dej-        z  Z/dFd"Z0e/e/e.d#gZ1dGd%Z2 G d& d'e          Z3 G d( d)e          Z4dHd.Z5 G d/ d0e          Z6 G d1 d2e6          Z7 G d3 d4e7          Z8 G d5 d6e7          Z9 G d7 d8e          Z: G d9 d:e6          Z;dId@Z<dJdDZ=dS )K    )annotations)TYPE_CHECKINGOptional)abstractmethodN)Vec2Vec3NULLVECUCS
decdeg2dmsarc_angle_span_radxround)DimStyleOverride	Dimension	DXFEntity   )
BaseDimensionRendererget_required_defpointformat_textapply_dimpost	ToleranceMeasurementLengthMeasurementcompile_mtextorder_leader_pointsget_center_leader_points)ARROWSarrow_length)is_upside_down_text_angle)intersection_line_line_2d)GenericLayoutType)AngularDimensionAngular3PDimensionArcLengthDimensionezdxfz( entityr   attrib_names	list[str]c                R    | j         j        t          fd|D                       S )Nc              3  .   K   | ]} |          V  d S N ).0attrib_namehass     Q/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/render/dim_curved.py	<genexpr>z*has_required_attributes.<locals>.<genexpr>.   s-      @@Kss;@@@@@@    )dxfhasattrall)r%   r&   r.   s     @r/   has_required_attributesr5   ,   s0    
*
C@@@@<@@@@@@r1   g      i@     f@valuefloatangle_unitsintdimrndOptional[float]dimdecdimzindimdsepstrreturnc                   dfddfd}d}|dk    r | t           z            d	z   }nK|d
k    r || t           z            }n1|dk    r | t          z            dz   }n|dk    r |           dz   }|S )N_valuer8   rA   r@   c                ,    t          |           S )N)r;   r=   r>   r?   )r   )rC   r=   r?   r;   r>   s    r/   decimal_formatz+format_angular_text.<locals>.decimal_format=   s)    
 
 
 	
r1   c                   t          |           } t          |           \  }}}dk    r+dz
  }t          ||          }|dd|dd |           dS dk    r|dd|dd|ddS dk    r
|dd|ddS |ddS )	N      z.0f   °'"   r   )r   r   round)rC   dmsplacesrE   r=   r;   s        r/   
dms_formatz'format_angular_text.<locals>.dms_formatF   s    FF++FV$$1aA::aZFa  A<<<q<<<~~a'8'8<<<<A::000q000q00000A::'''q'''''||||r1    r   rI   r   rL   g   r)rC   r8   rA   r@   )DEGGRAD)	r7   r9   r;   r=   r>   r?   rR   textrE   s	     ````  @r/   format_angular_textrZ   5   s    
 
 
 
 
 
 
 
 
       & Da~eck**T1			z%#+&&			~edl++c1			~e$$s*Kr1         ?dimaunitc                X    	 | t           |         z  S # t          $ r | t          z  cY S w xY wr*   )_ANGLE_UNITS
IndexErrorrW   )r7   r\   s     r/   
to_radiansr`   m   sB    |H---   s{s    ))c                  :     e Zd Z	 	 	 	 dd fdZddZddZ xZS )AngularTolerancer[   r   	dim_styler   
cap_heightr8   width_factor	dim_scaler9   r:   c                    || _         t                                          ||||           |                     t	          | j        |          t	          | j        |                     d S r*   )angular_unitssuper__init__update_tolerance_textr`   maximumminimum)selfrc   rd   re   rf   r9   	__class__s         r/   rj   zAngularTolerance.__init__u   sm     )JiHHH
 	""t|[11t|[11	
 	
 	
 	
 	
r1   r7   rA   r@   c                T    t          || j        d| j        | j        | j                  S )zuRounding and text formatting of tolerance `value`, removes leading
        and trailing zeros if necessary.

        Nr7   r9   r;   r=   r>   r?   )rZ   rh   decimal_placessuppress_zerostext_decimal_separator)rn   r7   s     r/   r   zAngularTolerance.format_text   s9    
 #*&&/
 
 
 	
r1   measurementNonec                ,   |t          | j        | j                  z   }|t          | j        | j                  z
  }|                     |          | _        |                     |          | _        |                     | j        | j                  | _        d S r*   )	r`   rl   rh   rm   r   
text_upper
text_lowerget_text_width
text_width)rn   ru   upper_limitlower_limits       r/   update_limitszAngularTolerance.update_limits   s    
 "Jt|T=O$P$PP!Jt|T=O$P$PP**;77**;77--dotOOr1   )r[   r[   r[   r   )
rc   r   rd   r8   re   r8   rf   r8   r9   r:   r7   r8   rA   r@   )ru   r8   rA   rv   )__name__
__module____qualname__rj   r   r~   __classcell__ro   s   @r/   rb   rb   t   s          !
 
 
 
 
 
 
&
 
 
 
	P 	P 	P 	P 	P 	P 	P 	Pr1   rb   c                      e Zd Zd
dZddZd	S )AngleMeasurementraw_measurement_valuer8   rA   rv   c                V    || _         || _        |                     |          | _        d S r*   )	raw_valuer7   text_overriderY   )rn   r   s     r/   updatezAngleMeasurement.update   s*    .*
&&'<==			r1   r7   r@   c                    t          || j        d | j        | j        dz  | j                  }| j        rt          || j                  }|S )NrL   rq   )rZ   r9   angular_decimal_placesangular_suppress_zerosdecimal_separatortext_post_process_formatr   rn   r7   rY   s      r/   r   zAngleMeasurement.format_text   s^    "(..!3*
 
 
 ( 	F t'DEEDr1   N)r   r8   rA   rv   r   )r   r   r   r   r   r+   r1   r/   r   r      s<        > > > >
     r1   r   lengthradiusarc_spanboolc                    | |z  }||k    S r*   r+   )r   r   r   required_arc_spans       r/   fits_into_arc_spanr      s    %'''r1   c                  L    e Zd Z	 	 d3d4 fdZed5d            Zed6d            Zed7d            Zed6d            Z	ed6d            Z
ed6d            Zed8d            Zed9d            Zd7dZd:d;dZd7dZd7dZd<dZd= fd!Zd7d"Zd>d%Zd?d'Zd@d*ZdAd-ZdBd2Z xZS )C_CurvedDimensionLineN	dimensionr   ucsOptional[UCS]overrideOptional[DimStyleOverride]c                   t                                          |||           d| _        |                                 | _        |                                 | _        |                                 | _        | j        j	        | _
        |                                 | _        | j        j	        | _        t          | j
        | j                  | _        | j
        | j        dz  z   | _        t!                      | _        t!                      | _        |                                  | j        j        r$| j                            | j        j                   |                                 | _        d| _        |                                  |                                  | j        j        | j        _        | j        j         | j        _	        | j!        "                    | j                   | j        j        | j#        j$        _%        d S )NT       @F)&ri   rj   remove_hidden_lines_of_dimlineget_center_of_arccenter_of_arcget_dim_line_radiusdim_line_radiusget_ext1_dirext1_diranglestart_angle_radget_ext2_dirext2_dirend_angle_radr   center_angle_radr   
ext1_start
ext2_startupdate_measurementtol
has_limitsr~   ru   r7   init_text_boxtext_boxarrows_outsidesetup_text_and_arrow_fittingsetup_text_locationtext_locationcentertext_rotationgeometryset_text_boxr   r2   text_midpointrn   r   r   r   ro   s       r/   rj   z_CurvedDimensionLine.__init__   s    	C222 /3+#'#9#9#;#;&*&>&>&@&@"//11&*m&9"//11$(M$7 *< $"4*
 *
  4#:S#@@ 	
 &&&& 	!!!8 	;H""4#3#9::: **,, $))+++  """  $/=".<""4=111 ,0+;+I(((r1   rA   r   c                d    | j         j                            t          | j                            S r*   )r   r   to_ocsr   r   rn   s    r/   ocs_center_of_arcz&_CurvedDimensionLine.ocs_center_of_arc   s&    } ''T-?(@(@AAAr1   r   c                P    | j         t          j        | j        | j                  z   S )z*Return the midpoint of the dimension line.)r   r   
from_angler   r   r   s    r/   dim_midpointz!_CurvedDimensionLine.dim_midpoint   s-     !DO!4#7%
 %
 
 	
r1   rv   c                    dS )zSetup measurement text.Nr+   r   s    r/   r   z'_CurvedDimensionLine.update_measurement   	     	r1   c                    dS )z>Return the direction of the 1st extension line == start angle.Nr+   r   s    r/   r   z!_CurvedDimensionLine.get_ext1_dir  r   r1   c                    dS )z<Return the direction of the 2nd extension line == end angle.Nr+   r   s    r/   r   z!_CurvedDimensionLine.get_ext2_dir  r   r1   c                    dS )zReturn the center of the arc.Nr+   r   s    r/   r   z&_CurvedDimensionLine.get_center_of_arc  r   r1   r8   c                    dS )z^Return the distance from the center of the arc to the dimension line
        location
        Nr+   r   s    r/   r   z(_CurvedDimensionLine.get_dim_line_radius  s	    
 	r1   
list[Vec2]c                    d S r*   r+   r   s    r/   get_defpointsz"_CurvedDimensionLine.get_defpoints  s    r1   c                   fd}| j         j        | j        j        } |d|j                    |d|j                    |d|j                    |d|j                    |d|j                    |d|j                   dS )	zYTransforms dimension definition points into WCS or if required into
        OCS.
        c                                         |           r<                    | t                    }                    |  ||                     d S d S r*   )is_supportedgetr	   set)attrfuncpointr2   s      r/   from_ucsz;_CurvedDimensionLine.transform_ucs_to_wcs.<locals>.from_ucs!  sX    %% +g..dd5kk*****+ +r1   defpoint	defpoint2	defpoint3	defpoint4	defpoint5r   N)r   r2   r   r   to_wcsr   )rn   r   r   r2   s      @r/   transform_ucs_to_wcsz)_CurvedDimensionLine.transform_ucs_to_wcs  s    
	+ 	+ 	+ 	+ 	+
 n mSZ(((cj)))cj)))cj)))cj)))#*-----r1           shiftc                    | j         | j                                        z   |z   }t          j        | j                  }| j        ||z  z   S r*   )r   ru   text_vertical_distancer   r   r   r   )rn   r   r   text_radial_dirs       r/   default_locationz%_CurvedDimensionLine.default_location/  sS     55778 	
 /$*?@@!Of$<<<r1   c                x   t          | j        j        | j        | j                   | j        _        | j        j        d| j        j        z  z   }t          || j        | j                   | _	        t          |dz  | j        | j                   | j        _
        | j        j
        r| j        j        d| _        d S d S d S )Nr   g?F)r   r   widthr   r   ru   is_wide_textarrows
arrow_sizer   text_is_outsideuser_text_rotationr   )rn   required_text_and_arrows_spaces     r/   r   z1_CurvedDimensionLine.setup_text_and_arrow_fitting8  s     -?M!5t7N-
 -
 )
% MDK**+ 	' #5* ##
 #
 
 0B*S0 #0
 0
 ,
( ,	8 3; 38D///	8 	8;;r1   c                *   | j         }|j        du }t          |j        p|j                  }|rlt          j        | j                  }d}|j        rd|_	        |j
        r| j        j        }|                     |          |_        |j	        dk    r	|sd| _        n|j        }t!          |t
                    sJ |j        r
|| j        z  }||_        |j        dk    r)| j        |z
  j        | _        |                                  n3|j        dk    r|j        d|_        d|_        n|j        dk    rd|_        |j        | j        z
                                  }|                    d	          }|r@|r>|j        r|xj        ||j        z  z  c_        |j        r|xj        ||j        z  z  c_        |j        |j        }n|j        }| j        j        s:| j        j                            |          }	tA          |	          rd|_!        |d
z  }||_"        dS )z]Setup geometric text properties (location, rotation) and the TextBox
        object.
        Nr   r   )r   r   FTrL   )ccwr6   )#ru   user_locationr   text_shift_htext_shift_vr   r   r   r   text_valignr   extension_linesextension_abover   r   r   
isinstancerelative_user_locationr   text_movement_ruler   	magnituder   r   r   	normalize
orthogonal	angle_degr   requires_extrusionr   to_ocs_angle_degr   has_upside_down_correctionr   )
rn   ru   at_default_locationhas_text_shiftingr   shift_text_upwardsr   text_tangential_dirrotation	wcs_angles
             r/   r   z(_CurvedDimensionLine.setup_text_location\  s    & %0$=$E"&$@(@#
 #
  5	 #od.CDDO(+* N*+'+ N)-)=)M&(,(=(=( )> ) )K% '!++4E+ 7<3 (5MmT222221 3!22(5K%-22
 &6 $
 113333/144 1958K2.2++/144 /3+)D,>>ikk 
 .88U8CC 		#4 		' ))'+*BB)) ' ))#k&>>))
 )1*4HH"5H}/ 	" )::8DDI(33 "9=6E!$,!!!r1   tuple[Vec2, Vec2]c                    | j         j        dk    r%t          | j        | j        | j        j                  S | j        j        \  }}}}| j         j        r||}}n||}}t          | j        ||          S )Nr   )
ru   r   r   r   r   r   r   cornersr   r   )rn   c0c1c2c3p1p2s          r/   get_leader_pointsz&_CurvedDimensionLine.get_leader_points  s     '1,,+!4=$+2H   "]2NBB:  RBRB&t'8"bAAAr1   blockr    c                H   t                                          |           |                                  |                                 \  }}| j        }|j        r| j        j        rt          || j	                  }n|j        }| 
                    ||j        |j                   |j        r3|                                 \  }}|                     | j        ||           |                     ||           | j                            |                                            dS )zMain method to create dimension geometry of basic DXF entities in the
        associated BLOCK layout.

        Args:
            block: target BLOCK for rendering

        N)ri   renderadd_extension_lines
add_arrowsru   rY   r   supports_dxf_r2000r   r   add_measurement_textr   r   
has_leaderr  
add_leaderr   add_dimension_lineadd_defpointsr   )	rn   r  adjust_start_angleadjust_end_angleru   rY   r  r  ro   s	           r/   r  z_CurvedDimensionLine.render  s    	u  """/3/@/@,,& 
	;}/ ($[$(;;"'%%k/1J   % ;//11B 12r::: 24DEEE##D$6$6$8$899999r1   c                   | j         }|j        s4|                     | j        | j        |                    d                     |j        s6|                     | j        | j        |                    d                     d S d S )Nr   rL   )	r   	suppress1_add_ext_liner   r   
dxfattribs	suppress2r   r   )rn   	ext_liness     r/   r  z(_CurvedDimensionLine.add_extension_lines  s    (	" 		0D0DQ0G0G   " 		0D0DQ0G0G    	 	r1   start	directionc                   | j         }| j        }| j        }|j        }||z
  j        |k    }|j        r|j        }	|r||	}}	||||	z
  z  z   }n|j        }
|r| }|
 }
|||
z  z  }||||z   z  z   }|                     |||           d S )N)r   )	r   r   r   r   r   has_fixed_lengthlength_belowoffsetadd_line)rn   r#  r$  r   r"  r   r   	ext_above	is_inside	ext_belowr(  ends               r/   r  z"_CurvedDimensionLine._add_ext_line  s    (	#%-	V^.7	% 
	(!.I <'0)9	Y&9*<==EE%F !&J	 Y''EyFY$677eSZ88888r1   tuple[float, float]c                   | j         }|                                }| j        }t          |          dk     rdS | j        | j        |z  z   }| j        | j        |z  z   }| j                                        j        }| j                                        j        }| j	        }|j
         }	|j         }
d}d}|j        dk    r]|	r,|                     t          j        |||j        dz  |           |
r,|                     t          j        |||j        dz  |           n|j        }||z  dz  t"          z  }|dz   }|}|r|dz  }|dz  }| }|}|	r"|                     |j        ||||z   |           |
r"|                     |j        ||||z
  |           |s4|	rt)          |j        |          |z  }|
rt)          |j        |          |z  }||fS )	zAdd arrows or ticks to dimension.

        Returns: dimension start- and end angle offsets to adjust the
            dimension line

        g-q=)r   r   r   r   )insertr  scaler   g      ?r6   )r0  r1  r  r   )r   r   r   absr   r   r   r   r   r   r  r!  	tick_sizeadd_blockrefr   obliquer   rW   arrow1_namearrow2_namer   )rn   r   attribsr   r#  r-  angle1angle2outsidearrow1arrow2start_angle_offsetend_angle_offsetr   
arrow_tiltstart_angle	end_angler1  s                     r/   r  z_CurvedDimensionLine.add_arrows  su    ##%%%v;;8"T]V%;; 4=6#99))++5))++5%%%%% c!! !!N # *S0& "     !!N# *S0& "     *J
 !+V 3c 9C ?J 5.KI )u$U"	([
E !!& (:5& "     !!&&3& "     
  $V%7DDvM '  $V%7DDvM % "#333r1   start_offset
end_offsetc                   | j         }| j        }| j        }|j        }| j        }t          | j                  dz  }||k    rd}||k    rd}|                     | j        |||z   ||z
  | j	        
                                | j                   | j        rs|j        snt          |j        ||          \  }}|                     ||z
  ||z
             t          |j        ||          \  }}|                     ||z   ||z              d S d S d S )Nr   r   )r   remove_hidden_lines)r   r   r   r   r   r2  r   add_arcr   dimension_liner   r   r   	has_ticksarrow_offset_anglesr6  add_arrow_extension_line)	rn   rC  rD  rA  rB  r   sizer   max_adjustments	            r/   r  z'_CurvedDimensionLine.add_dimension_linec  ss    "1-	 % #D$; < <s B.((L&&J,&
"*5577 $ C 	 	
 	
 	
  	v'7 	':"D&( ($L* ))j(l*   (;"D&( ($L* ))L(J&    	 	 	 	r1   rA  rB  c                |    |                      | j        | j        ||| j                                                   d S )N)rA  rB  r   )rG  r   r   rH  r   )rn   rA  rB  s      r/   rK  z-_CurvedDimensionLine.add_arrow_extension_line  sK     #*5577 	 	
 	
 	
 	
 	
r1   dim_textr@   posr  c                j    | j                                         }|                     ||||           dS )zAdd measurement text to dimension BLOCK.

        Args:
            dim_text: dimension text
            pos: text location
            rotation: text rotation in degrees

        )rP  r  r   N)ru   r   add_text)rn   rO  rP  r  r8  s        r/   r  z)_CurvedDimensionLine.add_measurement_text  s8     "--//hC(wOOOOOr1   NNr   r   r   r   r   r   )rA   r   rA   r   rA   rv   rA   r8   rA   r   )r   )r   r8   rA   r   )rA   r  )r  r    rA   rv   )r#  r   r$  r   rA   rv   )rA   r.  )rC  r8   rD  r8   rA   rv   )rA  r8   rB  r8   )rO  r@   rP  r   r  r8   rA   rv   )r   r   r   rj   propertyr   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  rK  r  r   r   s   @r/   r   r      sm        "/3	4J 4J 4J 4J 4J 4J 4Jl B B B XB 
 
 
 X
    ^    ^    ^    ^    ^    ^. . . .&= = = = ="8 "8 "8 "8Hd- d- d- d-LB B B B(: : : : : :6	 	 	 	9 9 9 9*P4 P4 P4 P4d, , , ,\
 
 
 
P P P P P P P Pr1   r   c                  &    e Zd ZddZdd
ZddZdS )_AngularCommonBaser1  r8   ru   r   rA   r   c                R    t          | j        |j        |j        ||j                  S )N)rd   re   rf   r9   )rb   rc   text_heighttext_width_factorr9   )rn   r1  ru   s      r/   init_tolerancez!_AngularCommonBase.init_tolerance  s5      N".$6#/
 
 
 	
r1   colorr:   c                B    t          | j        | j        | j                  S r*   )r   rc   default_colorrf   rn   r`  r1  s      r/   init_measurementz#_AngularCommonBase.init_measurement  s"    ND.
 
 	
r1   rv   c                D    | j                             | j                   d S r*   )ru   r   r   r   s    r/   r   z%_AngularCommonBase.update_measurement  s"     788888r1   N)r1  r8   ru   r   rA   r   r`  r:   r1  r8   rA   r   rV  )r   r   r   r_  rd  r   r+   r1   r/   r[  r[    sP        	
 	
 	
 	

 
 
 

9 9 9 9 9 9r1   r[  c                  R     e 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	 xZ
S )r!   a  
    Angular dimension line renderer. The dimension line is defined by two lines.

    Supported render types:

    - default location above
    - default location center
    - user defined location, text aligned with dimension line
    - user defined location horizontal text

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

    Nr   r   r   r   r   r   c                   t          |d          | _        t          |d          | _        t          |d          | _        t          |d          | _        t          |d          | _        t                                          |||           t          | j	        | j        | j        | j                  | _
        t          | j        | j        | j        | j                  | _        d S )Nr   r   r   r   r   )r$  baser  r  )r   
leg1_startleg1_end
leg2_startleg2_enddim_line_locationri   rj   detect_closer_defpointr   r   r   r   r   s       r/   rj   zAngularDimension.__init__  s     0	:FF-iEE/	;GG-iEE!6y+!N!NC222
 1m'}	
 
 
 1m'}	
 
 
r1   rA   r   c                B    | j         | j        | j        | j        | j        gS r*   )rj  rk  rl  rm  rn  r   s    r/   r   zAngularDimension.get_defpoints  s&    OMOM"
 	
r1   r   c                    t          | j        | j        f| j        | j        f          }|Bt
                              d| j         d           | j                            | j                  }|S )Nz1Invalid colinear or parallel angle legs found in ))	r   rj  rk  rl  rm  loggerwarningr   lerp)rn   r   s     r/   r   z"AngularDimension.get_center_of_arc  st    *_dm,_dm,
 
 >NNUDNUUU   ]''66Fr1   r8   c                *    | j         | j        z
  j        S r*   rn  r   r   r   s    r/   r   z$AngularDimension.get_dim_line_radius      &);;FFr1   c                    | j         }| j                            |          r| j        n| j        }||z
                                  S r*   )r   rj  iscloserk  r   rn   r   r#  s      r/   r   zAngularDimension.get_ext1_dir  L    # &&v..!DMM 	
 ))+++r1   c                    | j         }| j                            |          r| j        n| j        }||z
                                  S r*   )r   rl  rz  rm  r   r{  s      r/   r   zAngularDimension.get_ext2_dir  r|  r1   rS  rT  rX  rU  rW  r   r   r   __doc__rj   r   r   r   r   r   r   r   s   @r/   r!   r!     s         B "/3	
 
 
 
 
 
 
:
 
 
 
    G G G G, , , ,, , , , , , , ,r1   r!   c                  R     e 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	 xZ
S )r"   a  
    Angular dimension line renderer. The dimension line is defined by three
    points.

    Supported render types:

    - default location above
    - default location center
    - user defined location, text aligned with dimension line
    - user defined location horizontal text

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

    Nr   r   r   r   r   r   c                &   t          |d          | _        t          |d          | _        t          |d          | _        t          |d          | _        t                                          |||           | j        | _        | j        | _        d S Nr   r   r   r   )	r   rn  rj  rl  r   ri   rj   r   r   r   s       r/   rj   zAngular3PDimension.__init__B  s}     "7y*!M!M/	;GG/	;GG29kJJC222//r1   rA   r   c                6    | j         | j        | j        | j        gS r*   rn  rj  rl  r   r   s    r/   r   z Angular3PDimension.get_defpointsP  "    "OO	
 	
r1   r   c                    | j         S r*   r   r   s    r/   r   z$Angular3PDimension.get_center_of_arcX      !!r1   r8   c                *    | j         | j        z
  j        S r*   rw  r   s    r/   r   z&Angular3PDimension.get_dim_line_radius[  rx  r1   c                D    | j         | j        z
                                  S r*   rj  r   r   r   s    r/   r   zAngular3PDimension.get_ext1_dir^      $"44??AAAr1   c                D    | j         | j        z
                                  S r*   rl  r   r   r   s    r/   r   zAngular3PDimension.get_ext2_dira  r  r1   rS  rT  rX  rU  rW  r~  r   s   @r/   r"   r"   )  s         6 "/3	* * * * * * *
 
 
 
" " " "G G G GB B B BB B B B B B B Br1   r"   c                      e Zd ZddZdS )ArcLengthMeasurementr7   r8   rA   r@   c                    t          || j        | j        | j        | j                  }| j        r
t          |z   }| j        rt          || j                  }|S )N)r7   r;   r=   r>   r?   )	r   
text_roundrr   rs   r   has_arc_length_prefix
ARC_PREFIXr   r   r   s      r/   r   z ArcLengthMeasurement.format_textf  sj    ?&&*
 
 
 % 	%$D( 	F t'DEEDr1   Nr   )r   r   r   r   r+   r1   r/   r  r  e  s(             r1   r  c                  b     e 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dZ
d dZ xZS )!r#   a  Arc length dimension line renderer.
    Requires DXF R2004.

    Supported render types:

    - default location above
    - default location center
    - user defined location, text aligned with dimension line
    - user defined location horizontal text

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

    Nr   r   r   r   r   r   c                X   t          |d          | _        t          |d          | _        t          |d          | _        t          |d          | _        | j        | j        z
  j        | _        t                                          |||           | j        | _	        | j        | _
        d S r  )r   rn  rj  rl  r   r   
arc_radiusri   rj   r   r   r   s       r/   rj   zArcLengthDimension.__init__  s     "7y*!M!M/	;GG/	;GG29kJJ?T-??JC222//r1   rA   r   c                6    | j         | j        | j        | j        gS r*   r  r   s    r/   r   z ArcLengthDimension.get_defpoints  r  r1   r`  r:   r1  r8   r   c                B    t          | j        | j        | j                  S r*   )r  rc   rb  rf   rc  s      r/   rd  z#ArcLengthDimension.init_measurement  s"    #ND.
 
 	
r1   r   c                    | j         S r*   r  r   s    r/   r   z$ArcLengthDimension.get_center_of_arc  r  r1   c                *    | j         | j        z
  j        S r*   rw  r   s    r/   r   z&ArcLengthDimension.get_dim_line_radius  rx  r1   c                D    | j         | j        z
                                  S r*   r  r   s    r/   r   zArcLengthDimension.get_ext1_dir  r  r1   c                D    | j         | j        z
                                  S r*   r  r   s    r/   r   zArcLengthDimension.get_ext2_dir  r  r1   rv   c                    t          | j        | j                  }|| j        z  }| j                            |           d S r*   )r   r   r   r  ru   r   )rn   r   
arc_lengths      r/   r   z%ArcLengthDimension.update_measurement  s@    "4#79KLLT_,

+++++r1   rS  rT  rX  rf  rU  rW  rV  )r   r   r   r  rj   r   rd  r   r   r   r   r   r   r   s   @r/   r#   r#   u  s         4 "/3	* * * * * * *
 
 
 

 
 
 

" " " "G G G GB B B BB B B B, , , , , , , ,r1   r#   r$  r   ri  r  r  c                    |                      |          }|                      |          }|                      |          }t          ||z
            t          ||z
            k    r|S |S r*   )dotr2  )r$  ri  r  r  d0d1d2s          r/   ro  ro    s`     
t		B	r		B	r		B
27||s27||##	Ir1   
arrow_namerL  r.  c                X    d}||z  }t          | |          }|dk    r
||z  }|dz  }||fS )Nr   r   )r   )r  rL  r   rC  rD  r   s         r/   rJ  rJ    sH     LvJ*d++F||c
##r1   )r%   r   r&   r'   )r7   r8   r9   r:   r;   r<   r=   r:   r>   r:   r?   r@   rA   r@   )r7   r8   r\   r:   rA   r8   )r   r8   r   r8   r   r8   rA   r   )
r$  r   ri  r   r  r   r  r   rA   r   )r  r@   rL  r8   r   r8   rA   r.  )>
__future__r   typingr   r   abcr   loggingmath
ezdxf.mathr   r   r	   r
   r   r   r   ezdxf.entitiesr   r   r   dim_baser   r   r   r   r   r   r   r   r   r   ezdxf.render.arrowsr   r   ezdxf.tools.textr   r   ezdxf.eztypesr    __all__	getLoggerrs  r  r5   pirX   rW   rZ   r^   r`   rb   r   r   r   r[  r!   r"   r  r#   ro  rJ  r+   r1   r/   <module>r     s   # " " " " " * * * * * * * *                          B A A A A A A A A A                        5 4 4 4 4 4 4 4 6 6 6 6 6 6 0 0 0 0 0 0 0//////
J
J
J		7	#	#
A A A A
 twdgo- - - -b 	   +P +P +P +P +Py +P +P +P\    {   (( ( ( (
kP kP kP kP kP0 kP kP kP\9 9 9 9 9- 9 9 9*h, h, h, h, h,) h, h, h,V9B 9B 9B 9B 9B+ 9B 9B 9Bx    ,    C, C, C, C, C,- C, C, C,L
 
 
 
	$ 	$ 	$ 	$ 	$ 	$r1   