
    Og                        d dl mZ d dlmZmZ d dlZd dlZd dlmZm	Z	m
Z
 d dlmZ d dlmZmZ ddlmZmZmZ erd d	lmZ d
gZ ej.                  d      Z G d d
e      Zy)    )annotations)TYPE_CHECKINGOptionalN)Vec2UCSNULLVEC)const)DimStyleOverride	Dimension   )BaseDimensionRendererget_required_defpointcompile_mtext)GenericLayoutTypeOrdinateDimensionezdxfc                       e Zd Z	 	 d
	 	 	 	 	 d fdZddZddZddZddZddZd fdZ	ddZ
	 	 	 	 	 	 	 	 dd	Z xZS )r   c                   t        |d      | _        t        |d      | _        t        |d      | _        |j                  j                  dd       | _        t        j                  | j                        | _	        t        j                  | j                        | _        | j                  j                         | _        t        |j                  j                  dd      t         j"                  z        | _        t&        | Q  |||       | j                  | j                  z
  | _        | j                  j-                  | j*                        }| j                  j-                  | j*                        }	 |j/                         | _        	 |j/                         | _        | j$                  s#| j4                  | j0                  c| _        | _        | j7                          | j8                  j:                  r/| j8                  j=                  | j>                  j@                         | jC                         | _"        | jG                         | j>                  _$        | jK                         | j>                  _&        | j>                  jH                  | jD                  _'        | j>                  jL                  | jD                  _(        | jR                  jU                  | jD                         | j>                  jH                  | jV                  j                  _,        y # t2        $ r t        dd      | _        Y w xY w# t2        $ r t        dd      | _        Y w xY w)	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)selfrC   ucsoverrideleader_x_vecleader_y_vec	__class__s         ^/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/render/dim_ordinate.pyr,   zOrdinateDimension.__init__    s    !6i L*?{+
! (={(

  )}}001GMMT%8%89 OODMM: --88:MMi+e.E.EE
 	C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$   3L 	L5 L21L25MMc                    | j                   r| j                   }n| j                  }| j                  | j                  | j
                  j                  dz  z  z   || j                  j                         z  z   S )Ng      ?)	r*   r%   r'   r   r2   r:   widthr7   text_vertical_distance)rE   text_vertical_shifting_dirs     rK   r;   z+OrdinateDimension.get_default_text_locationa   sv    ;;*.*;*;);&)-):):& ""))T]]-@-@3-FGH(55788	
    c                V    | j                   rd| j                  z   S d| j                  z   S )Ng     V@r   )r*   r    rE   s    rK   r=   z+OrdinateDimension.get_default_text_rotationo   s)    0C0CCC0C0CCCrP   c                   | j                   | j                  z
  }| j                  j                  | j                  r*| j
                  j                  |      j                         y | j                  j                  |      j                         y N)	r   r   r7   updater*   r%   r.   	magnituder'   )rE   feature_location_vecs     rK   r3   z$OrdinateDimension.update_measurements   sq    %)%>%>%P{{ %%&:;EE	
 ""**+?@JJ	
rP   c                H    | j                   | j                  | j                  gS rT   )r   r   r   rR   s    rK   get_defpointszOrdinateDimension.get_defpoints|   s%    OO%%""
 	
rP   c                B   fd}| j                   j                  | j                  j                  } |d|j                          |d|j                          |d|j                          |d|j
                         |j                  | j                         _        y)zYTransforms dimension definition points into WCS or if required into
        OCS.
        c                b    j                  | t              }j                  |  ||             y rT   )r   r   set)attrfuncpointr   s      rK   from_ucsz8OrdinateDimension.transform_ucs_to_wcs.<locals>.from_ucs   s%    GGD'*EGGD$u+&rP   r   r   r   rD   N)	rC   r   rA   rF   to_wcsto_ocsto_ocs_angle_degr    r   )rE   r`   rF   r   s      @rK   transform_ucs_to_wcsz&OrdinateDimension.transform_ucs_to_wcs   s~    
	' nn  mmSZZ(cjj)cjj)#**- %($8$89L9L$M#M rP   c                   t         |   |       | j                          | j                  }|j                  r`| j
                  j                  rt        || j                        }n|j                  }| j                  ||j                  |j                         | j
                  j                  | j                                y)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_leaderr7   textrA   supports_dxf_r2000r   r4   add_measurement_textr<   r>   add_defpointsrY   )rE   blockr7   rh   rJ   s       rK   rf   zOrdinateDimension.render   s     	u  "&&}}//$[$((;"''%%k//1J1J 	##D$6$6$89rP   c                |   | j                   j                  d      }| j                  }| j                  j                  dz  }|j                  | j                        j                  d|z  z
  }| j                  || j                   j                  z  z   }| j                  |t        ||      z  z   }| j                  ||z  z
  }| j                  }| j                  j                  dk7  r||| j                  j                  z  z  }| j!                  |||       | j!                  |||       | j!                  |||       y )Nr   g       @r   )
dxfattribs)extension_linesrn   r2   arrows
arrow_sizer.   r-   rV   r   offsetmaxr   r7   vertical_placementr:   rM   add_line)	rE   attribs	directionleg_sized0start0end0start1end1s	            rK   rg   z%OrdinateDimension.add_ordinate_leader   s'   &&11!4 //	;;))C/ t223==hN %%	D4H4H4O4O(OO 	 ((9s8R7H+HH'')h*>>%%..!3I 3 333Dfdw7dFw7fdw7rP   c                b    | j                   j                         }| j                  ||||       y)zAdd measurement text to dimension BLOCK.

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

        )posr#   rn   N)r7   rn   add_text)rE   dim_textr   r#   rv   s        rK   rj   z&OrdinateDimension.add_measurement_text   s,     ""--/hC(wOrP   )NN)rC   r   rF   zOptional[UCS]rG   zOptional[DimStyleOverride])returnr   )r   float)r   None)r   z
list[Vec2])rl   r   r   r   )r   strr   r   r#   r   r   r   )__name__
__module____qualname__r,   r;   r=   r3   rY   rd   rf   rg   rj   __classcell__)rJ   s   @rK   r   r      s     "/3	?J?J ?J -	?JB
D

N(:*82PP"&P27P	PrP   )
__future__r   typingr   r   loggingr!   
ezdxf.mathr   r   r   ezdxf.lldxfr	   ezdxf.entitiesr
   r   dim_baser   r   r   ezdxf.eztypesr   __all__	getLoggerloggerr    rP   rK   <module>r      s\    # *   ) )  6  /
			7	#yP- yPrP   