
    h                        S SK Jr  S SKJrJr  S SKrS SKrS SKJrJ	r	J
r
  S SKJr  S SKJrJr  SSKJrJrJr  \(       a  S S	KJr  S
/r\R.                  " S5      r " S S
\5      rg)    )annotations)TYPE_CHECKINGOptionalN)Vec2UCSNULLVEC)const)DimStyleOverride	Dimension   )BaseDimensionRendererget_required_defpointcompile_mtext)GenericLayoutTypeOrdinateDimensionezdxfc                     ^  \ rS rSr  S     SU 4S jjjrSS jrSS jrSS jrSS jrSS jr	SU 4S jjr
SS	 jr        SS
 jrSrU =r$ )r      c                  > [        US5      U l        [        US5      U l        [        US5      U l        UR                  R                  SS5      * U l        [        R                  " U R                  5      U l	        [        R                  " U R                  5      U l        U R                  R                  5       U l        [        UR                  R                  SS5      [         R"                  -  5      U l        [&        TU ]Q  XU5        U R                  U R                  -
  U l        U R                  R-                  U R*                  5      nU R                  R-                  U R*                  5      n UR/                  5       U l         UR/                  5       U l        U R$                  (       d#  U R4                  U R0                  sU l        U l        U R7                  5         U R8                  R:                  (       a/  U R8                  R=                  U R>                  R@                  5        U RC                  5       U l"        U RG                  5       U R>                  l$        U RK                  5       U R>                  l&        U R>                  RH                  U RD                  l'        U R>                  RL                  U RD                  l(        U RR                  RU                  U RD                  5        U R>                  RH                  U RV                  R                  l,        g ! [2         a    [        SS5      U l         GNf = f! [2         a    [        SS5      U l         GNf = f)	Ndefpoint	defpoint2	defpoint3horizontal_direction        dimtyper   r   )-r   
origin_ocsfeature_location_ocsend_of_leader_ocsdxfgethorizontal_dirmathradiansrotationr   
from_anglelocal_x_axis
orthogonallocal_y_axisboolr	   DIM_ORDINATE_TYPEx_typesuper__init__leader_vec_ocsproject	normalizemeasurement_directionZeroDivisionErrormeasurement_orthogonalupdate_measurementtol
has_limitsupdate_limitsmeasurementvalueinit_text_boxtext_boxget_default_text_locationtext_locationget_default_text_rotationtext_rotationcenteranglegeometryset_text_box	dimensiontext_midpoint)selfrD   ucsoverrideleader_x_vecleader_y_vec	__class__s         K/var/www/html/env/lib/python3.13/site-packages/ezdxf/render/dim_ordinate.pyr-   OrdinateDimension.__init__    s    !6i L*?{+
! (={(

  )}}001GMMT%8%89 OODMM: --88:MMi+e.E.EE
 	2 #44t7P7PP((001D1DE((001D1DE	4/;/E/E/GD&	50<0F0F0HD' {{++** DD&(C
 	!88HH""4#3#3#9#9: **, *.)G)G)I&)-)G)G)I&  $//=="..<<""4==1 ,0+;+;+I+I(? ! 	4)-aD&	4 ! 	5*.q!*D'	5s$   4L 
M L>=L>M M c                    U R                   (       a  U R                  * nOU R                  nU R                  U R                  U R
                  R                  S-  -  -   UU R                  R                  5       -  -   $ )Ng      ?)	r+   r&   r(   r   r3   r;   widthr8   text_vertical_distance)rF   text_vertical_shifting_dirs     rL   r<   +OrdinateDimension.get_default_text_locationa   sv    ;;*.*;*;);&)-):):& ""))T]]-@-@3-FGH(55788	
    c                `    U R                   (       a  SU R                  -   $ SU R                  -   $ )Ng     V@r   )r+   r!   rF   s    rL   r>   +OrdinateDimension.get_default_text_rotationo   s)    0C0CCC0C0CCCrS   c                (   U R                   U R                  -
  nU R                  R                  U R                  (       a*  U R
                  R                  U5      R                  5        g U R                  R                  U5      R                  5        g N)	r   r   r8   updater+   r&   r/   	magnituder(   )rF   feature_location_vecs     rL   r4   $OrdinateDimension.update_measurements   sq    %)%>%>%P{{ %%&:;EE	
 ""**+?@JJ	
rS   c                H    U R                   U R                  U R                  /$ rX   )r   r   r   rU   s    rL   get_defpointsOrdinateDimension.get_defpoints|   s%    OO%%""
 	
rS   c                D  ^ U4S jnU R                   R                  mU R                  R                  nU" SUR                  5        U" SUR                  5        U" SUR                  5        U" SUR
                  5        UR                  U R                  5      * Tl        g)zITransforms dimension definition points into WCS or if required into
OCS.
c                `   > TR                  U [        5      nTR                  X" U5      5        g rX   )r    r   set)attrfuncpointr   s      rL   from_ucs8OrdinateDimension.transform_ucs_to_wcs.<locals>.from_ucs   s%    GGD'*EGGD$u+&rS   r   r   r   rE   N)	rD   r   rB   rG   to_wcsto_ocsto_ocs_angle_degr!   r   )rF   rf   rG   r   s      @rL   transform_ucs_to_wcs&OrdinateDimension.transform_ucs_to_wcs   s~    
	' nn  mmSZZ(cjj)cjj)#**- %($8$89L9L$M#M rS   c                  > [         TU ]  U5        U R                  5         U R                  nUR                  (       ac  U R
                  R                  (       a  [        X R                  5      nOUR                  nU R                  X2R                  UR                  5        U R
                  R                  U R                  5       5        g)zMain method to create dimension geometry of basic DXF entities in the
associated BLOCK layout.

Args:
    block: target BLOCK for rendering

N)r,   renderadd_ordinate_leaderr8   textrB   supports_dxf_r2000r   r5   add_measurement_textr=   r?   add_defpointsr^   )rF   blockr8   rp   rK   s       rL   rn   OrdinateDimension.render   s     	u  "&&}}//$[((;"''%%//1J1J 	##D$6$6$89rS   c                ^   U R                   R                  S5      nU R                  nU R                  R                  S-  nUR                  U R                  5      R                  SU-  -
  nU R                  X R                   R                  -  -   nU R                  U[        X45      -  -   nU R                  X#-  -
  nU R                  nU R                  R                  S:w  a  XU R                  R                  -  -  nU R!                  XVUS9  U R!                  XgUS9  U R!                  XxUS9  g )Nr   g       @r   )
dxfattribs)extension_linesrw   r3   arrows
arrow_sizer/   r.   rZ   r   offsetmaxr   r8   vertical_placementr;   rO   add_line)	rF   attribs	directionleg_sized0start0end0start1end1s	            rL   ro   %OrdinateDimension.add_ordinate_leader   s   &&11!4 //	;;))C/ t223==hN %%	4H4H4O4O(OO 	 ((9s87H+HH'')*>>%%..!3 3 333Dfw7dw7fw7rS   c                X    U R                   R                  5       nU R                  XX4S9  g)zAdd measurement text to dimension BLOCK.

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

)posr$   rw   N)r8   rw   add_text)rF   dim_textr   r$   r   s        rL   rr   &OrdinateDimension.add_measurement_text   s(     ""--/h(OrS   )r   r   r!   r.   r&   r(   r1   r3   r   r$   r;   r+   )NN)rD   r   rG   zOptional[UCS]rH   zOptional[DimStyleOverride])returnr   )r   float)r   None)r   z
list[Vec2])rt   r   r   r   )r   strr   r   r$   r   r   r   )__name__
__module____qualname____firstlineno__r-   r<   r>   r4   r^   rk   rn   ro   rr   __static_attributes____classcell__)rK   s   @rL   r   r      s     "/3	?J?J ?J -	?J ?JB
D

N(:*82PP"&P27P	P PrS   )
__future__r   typingr   r   loggingr"   
ezdxf.mathr   r   r   ezdxf.lldxfr	   ezdxf.entitiesr
   r   dim_baser   r   r   ezdxf.eztypesr   __all__	getLoggerloggerr    rS   rL   <module>r      sZ    # *   ) )  6  /
			7	#yP- yPrS   