
    h&^                    $   S SK Jr  S SKJrJrJrJr  S SKrS SKJ	r	J
r
JrJrJr  S SKJrJr  S SKJr  SSKJrJrJrJrJr  \(       a  S S	KJr  S S
KJr   " S S\5      r\R<                  \R>                  \R@                  \RB                  \RD                  \RF                  \RH                  \RJ                  \RL                  \RN                  \RP                  \RR                  1r* S     SS jjr+       S                 SS jjr,g)    )annotations)TYPE_CHECKINGIterablecastOptionalN)Vec3Vec2UVecConstructionRayUCS)ARROWSconnection_point)DimStyleOverride   )BaseDimensionRendererLengthMeasurementMeasurementcompile_mtextorder_leader_points)	Dimension)GenericLayoutTypec                     ^  \ rS rSrSr  S     SU 4S jjjrSS jrSU 4S jjrSS jrSS jr	SS jr
S	 r        SS
 jrSS jr S     SS jjrSS jrSrU =r$ )LinearDimension   zLinear dimension line renderer, used for horizontal, vertical, rotated
and aligned DIMENSION entities.

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

c                  > [         TU ]  XU5        U R                  nUR                  S:X  a  SUl        U R                  R                  SS5      U l        U R                  R                  SS5      U l        [        R                  " U R                  5      U l
        U R                  U R                  -   U l        [        R                  " U R                  5      U l        U R                  Ul        UR                  S;   a  U R                  Ul        [        U R                  R                   R"                  5      U l        [        U R                  R                   R&                  5      U l        [+        U R$                  U R                  S9n[+        U R(                  U R                  S9n[+        U R                  R                   R,                  U R                  S9nUR/                  U5      U l        UR/                  U5      U l        U R0                  R5                  U R2                  5      U l        U R0                  U R2                  :X  a&  [        R8                  " U R                  5      U l        O,U R2                  U R0                  -
  R=                  5       U l        [?        U R0                  5      U R                  R                   l        U R2                  U R0                  -
  R@                  nURC                  U5        U RD                  RG                  SS	5      U l$        U RD                  RG                  S
S 5      U l%        SU l&        SU RN                  RP                  -  URR                  -   U l*        U RT                  U:  U l+        URX                  (       Ga/  U R[                  5       U l&        U R\                  R^                  (       a/  U R\                  Ra                  U R                  Rb                  5        U RH                  (       a  SUl2        URf                  S:X  a@  [i        URd                  5      S:  a'  U RL                  SU RN                  RP                  -  -   n	OU RL                  n	X:  Ul5        URl                  (       d  URj                  Ul7        O(URj                  (       a  UR                  S:  a  SUl        U RH                  (       a  URj                  (       a  U RJ                  (       a  URp                  URR                  -   n
U RJ                  S:X  a,  Xl9        URt                  S:X  a  U=Rr                  U
-  sl9        O=U RJ                  S:X  a-  U
* Ul9        URt                  S:X  a  U=Rr                  U
-  sl9        U Rw                  5       Ul<        UR                  nURz                  b  URz                  nOIURn                  (       a  UR|                  (       a  SnO$UR~                  (       a  UR                  (       a  SnXl        U R                  5       nU R                  R                  U5        UR                  (       aW  UR                  tpn[        U R6                  X5      u  U lG        U lH        U R                  U R                  R                   lI        g URx                  U R                  R                   lI        g g )Nr      oblique_angleZ   angle      )r   multi_point_modeFmove_wide_text        gffffff?r!   r   )Jsuper__init__measurementtext_movement_rule	dimensionget_dxf_attribr   dim_line_anglemathradiansdim_line_angle_radext_line_angleext_line_angle_radtext_rotationtext_halignr	   dxf	defpoint2ext1_line_start	defpoint3ext2_line_startr   defpoint	intersectdim_line_startdim_line_endlerpdim_line_center
from_angledim_line_vec	normalizer   	magnitudeupdate	dim_stylepopr#   r$   _total_text_widtharrows
arrow_sizetext_gaprequired_arrows_spacearrows_outsidetexttotal_text_widthtol
has_limitsupdate_limitsvaluetext_vertical_positiontext_valignabsis_wide_textforce_text_insidetext_is_outsidetext_heighttext_shift_vvertical_placementget_text_locationtext_locationuser_text_rotationtext_outside_horizontaltext_is_insidetext_inside_horizontalinit_text_boxgeometryset_text_box
has_leadercornersr   leader1leader2text_midpoint)selfr+   ucsoverrider)   ext1_rayext2_raydim_line_rayraw_measurementrequired_spaceshift_valuerotationtext_boxp1p2_	__class__s                   I/var/www/html/env/lib/python3.13/site-packages/ezdxf/render/dim_linear.pyr(   LinearDimension.__init__"   sh    	2&&))Q. ./K*$(NN$A$AR%
 &*^^%B%B7A%N)-d6I6I)J%)%8%84;M;M%M)-d6I6I)J %)$7$7!""f,(,(;(;K%#DNN$6$6$@$@A#DNN$6$6$@$@A"  (?(?
 #  (?(?
 'NN''t/F/F
 %1$:$:8$D"."8"8"B%)%8%8%=%=d>O>O%P$"3"33 $0G0G HD !!D$7$77ik 
 '+4+>+>&?#,,t/B/BBMM?+ !% 2 23Eu M
 /3nn.@.@d/

 )* &&&)=)== 	" %)$>$>$P %)%:%:%<D"xx"" &&t'7'7'='=>$$ 692 ''1,::;cA **Q1G1G-GG  "&!7!7'5'GK$00.9.F.F+))k.E.E.I*+'
 %%,,'')558L8LL&&!+/:,#66"< $00K?0((A-0;|K,#66!; $00K?0 )-(>(>(@K% *77H--9&99++77**66(0%))+HMM&&x0%%%--
-@((".*dl 48<<""0 4?3L3L""0k     c                X    [        U R                  U R                  U R                  5      $ N)r   rE   default_color	dim_scale)rj   colorscales      ry   init_measurement LinearDimension.init_measurement   s$     NND..
 	
r{   c                  > [         TU ]  U5        U R                  nU R                  nUR                  (       dW  UR
                  S:H  nU R                  U R                  U R                  U5      u  pVU R                  XVUR                  S5      S9  UR                  (       dW  UR
                  S:H  nU R                  U R                  U R                  U5      u  pVU R                  XVUR                  S5      S9  U R                  5       u  pU R                  X5        UR                   (       a  U R"                  R$                  (       a  ['        X0R(                  5      n
OUR                   n
U R+                  XR,                  UR.                  5        UR0                  (       a1  U R3                  U R4                  U R6                  U R8                  5        U R"                  R;                  U R                  U R                  U R                  /5        g)zMain method to create dimension geometry of basic DXF entities in the
associated BLOCK layout.

Args:
    block: target BLOCK for rendering

r!   r   
dxfattribsr"   r   N)r'   renderextension_linesr)   	suppress1r4   extension_line_pointsr7   r<   add_liner   	suppress2r9   r=   
add_arrowsadd_dimension_linerM   rc   supports_dxf_r2000r   rO   add_measurement_textr]   r3   re   
add_leaderr?   rg   rh   add_defpoints)rj   block	ext_linesr)   above_ext_line1startendabove_ext_line2r<   r=   rM   rx   s              ry   r   LinearDimension.render   s    	u ((	&&"")55:O33$$d&9&9?JE MM%1E1Ea1HMI "")55:O33$$d&7&7JE MM%1E1Ea1HMI (,'8$ 	= }}//$[((;"''%%//1J1J %%(($,,
 	##  $"6"68L8LM	
r{   c                \   U R                   nUR                  (       a<  U R                  5       nUR                  X!R                  5      nU R                  U5        UR                  b5  UR                  nUR                  (       a  U R                  U-   nSUl	        U$ U R                  5       nU$ )zOGet text midpoint in UCS from user defined location or default text
location.

T)
r)   has_relative_text_movementdefault_text_locationapply_text_shiftr3   location_overrideuser_locationrelative_user_locationr?   rX   )rj   r)   locations      ry   r\   !LinearDimension.get_text_location  s     &&11113H"3333H ""8,$$0"00H11//(:*.K'  113Hr{   c                   U R                   nU R                  nU R                  nUR                  nU R                  nUS;   a  UR
                  UR                  S-  -   nU R                  U-  nUS:X  a  UOUU-
  nUR                  U R                  S-  -   n	U[        R                  " U R                  5      R                  U	5      -  nU$ UR                  (       a  SnUS:X  a  U R                  nO\U R                  S-  U R                   R"                  -   UR
                  -   nUS:X  a  XR                  U-  -   nOX R                  U-  -
  nUR                  (       a*  UR                  UR
                  -   UR                  S-  -   n	OUR%                  5       n	XR                  R'                  5       R                  U	5      -  nU$ )zpCalculate default text location in UCS based on `self.text_halign`,
`self.text_valign` and `self.text_outside`

r           @r!   r   r   )r<   r=   r)   r4   r   rJ   rY   rA   extension_aboverG   r	   from_deg_angler1   rB   rX   r?   rH   rI   text_vertical_distance
orthogonal)
rj   r   r   r)   halignr   hdisthvecr   vdists
             ry   r   %LinearDimension.default_text_location  s   
 ##&&((((	V((;+B+BS+HHE$$u,D!'1#=H--0F0F0LLE++D,?,?@JJ HD ; **{// **S0kk,,-!**+  aK$(9(9E(ABH"&7&7%&?@H**--!**+!--34  $::<))446@@GGHr{   c                   U R                   nUR                  5       nU R                  nU R                  nU R                  nUR
                  (       + nUR                  (       + nUR                  S:  a  U(       a8  U R                  [        R                  UU R                  UR                  S-  US9  U(       a8  U R                  [        R                  UU R                  UR                  S-  US9  X44$ UR                  nU R                  S-   n	U R                  n
U(       a  XpU(       a  U R                  UR                  UUU	US9  U(       a  U R                  UR                  UUU
US9  U(       d?  U(       a  [        UR                  X8U	5      nU(       a  [        UR                  XHU
5      nX44$ U R!                  5         X44$ )zO
Add arrows or ticks to dimension.

Returns: dimension line connection points

r%   r   )insertrs   r   r   g     f@)r   r   rs   r   )rH   r   r<   r=   rL   r   r   	tick_sizeadd_blockrefr   obliquer-   rI   arrow1_namearrow2_namer   add_arrow_extension_lines)rj   rH   attribsr   r   outsidearrow1arrow2r   start_angle	end_angles              ry   r   LinearDimension.add_arrowsQ  s    ##%##%%%%%%%%c!!!NN !00 **S0& "  !!NN!00 **S0& " \ zM %%E--5K++I)2Y!!&& (& "  !!&&&& "   ,**E+E ***C	C z ..0zr{   c                   SS jnU R                   R                  5       nU R                  nU R                  nU R                  nUR
                  nUR                  (       dI  U" UR                  5      (       a2  U R                  X@R                  U-  -
  X@R                  SU-  -  -
  US9  UR                  (       dK  U" UR                  5      (       a3  U R                  XPR                  U-  -   XPR                  SU-  -  -   US9  ggg)zkAdd extension lines to arrows placed outside of dimension extension
lines. Called by `self.add_arrows()`.

c                ^    U S L=(       a#    U [         ;   =(       a    U [         R                  ;  $ r}   )r   ORIGIN_ZERO)names    ry   has_arrow_extensionFLinearDimension.add_arrow_extension_lines.<locals>.has_arrow_extension  s.    T! 5V^5!3!33r{   r   r   N)r   strreturnbool)dimension_liner   rH   r<   r=   rI   r   r   r   rA   r   r   )rj   r   r   rH   r   r   rI   s          ry   r   )LinearDimension.add_arrow_extension_lines  s    	 %%002##&&
$78J8J$K$KMM))J66))Q^<<"   $78J8J$K$KMM''*44''1z>::"   %Lr{   c                :    U R                  XU[        5       5        g)zAdd measurement text to dimension BLOCK.

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

N)add_textdict)rj   dim_textposrs   s       ry   r   $LinearDimension.add_measurement_text  s     	hXtv6r{   c                r   U R                   nU R                  nU R                  UR                  -  nUR                  nU(       d%  [
        R                  " UR                  5      (       a  X-
  nU(       d%  [
        R                  " UR                  5      (       a  X%-   nUR                  5       nUR                  (       d  UR                  (       aW  UR                  U5      nUR                  (       d  U R                  XUSS9  UR                  (       d  U R                  XUSS9  ggU R                  XUSS9  g)a	  Add dimension line to dimension BLOCK, adds extension DIMDLE if
required, and uses DIMSD1 or DIMSD2 to suppress first or second part of
dimension line. Removes line parts hidden by dimension text.

Args:
    start: dimension line start
    end: dimension line end

T)r   remove_hidden_linesN)r   rH   rA   	extension	has_ticksr   has_extension_liner   r   r   r   r   r>   r   )	rj   r   r   dim_linerH   r   ticksr   centers	            ry   r   "LinearDimension.add_dimension_line  s    &&%%(:(::	  F--f.@.@AA%EF--f.@.@AA/C%%'!3!3 ZZ_F%%g4   %%G   &
 MMwD  r{   c                   X:X  a!  [         R                  " U R                  5      nOX!-
  R                  5       nU R                  R
                  (       a  X$U R                  R                  -  -
  nOXU R                  R                  -  -   nU R                  R                  nU(       a  XPR                  -  nX$U-  -   nX4$ )aG  Adjust start and end point of extension line by dimension variables
DIMEXE, DIMEXO, DIMEXFIX, DIMEXLEN.

Args:
    start: start point of extension line (measurement point)
    end: end point at dimension line
    text_above_extline: True if text is above and aligned with extension line

Returns: adjusted start and end point

)
r	   r   r1   rB   r   has_fixed_lengthlength_belowoffsetr   rG   )rj   r   r   text_above_extline	directionr   s         ry   r   %LinearDimension.extension_line_points  s     <++D,?,?@I//1I00t';';'H'HHIE(<(<(C(CCCE((88	///I	))zr{   c                f  ^  U 4S jnT 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	                  T R
                  R                  R                  5      T R
                  R                  l        g)zTransforms dimension definition points into WCS or if required into
OCS.

Can not be called in __init__(), because inherited classes may be need
unmodified values.

c                ~   > TR                   R                  U 5      nTR                   R                  X" U5      5        g r}   )r+   r,   set_dxf_attrib)attrfuncpointrj   s      ry   from_ucs6LinearDimension.transform_ucs_to_wcs.<locals>.from_ucs  s/    NN11$7ENN))$U<r{   r:   r6   r8   ri   N)rc   rk   to_wcsto_ocsto_ocs_angle_degr+   r5   r   )rj   r   rk   s   `  ry   transform_ucs_to_wcs$LinearDimension.transform_ucs_to_wcs
  s    	= mmSZZ(cjj)cjj)#**-#&#7#7NN$$$
 r{   )rG   rL   r-   r0   r?   r=   r<   rA   r7   r9   r1   r2   rg   rh   r$   r#   r   rK   )NN)r+   r   rk   Optional[UCS]rl   zOptional[DimStyleOverride])r   intr   floatr   r   )r   r   r   None)r   r	   )r   tuple[Vec2, Vec2])r   r   r   r	   rs   r   r   r   )r   r	   r   r	   r   r   )F)r   r	   r   r	   r   r   )r   r   )__name__
__module____qualname____firstlineno____doc__r(   r   r   r\   r   r   r   r   r   r   r   __static_attributes____classcell__)rx   s   @ry   r   r      s     "/3	bMbM bM -	bM bMH

5
n24lGRB77"&7277	7$N :? $	8
 
r{   r   c                    [         R                  " U5      nU  Vs/ s H  o2R                  [        U5      5      U4PM      nn[        U5       VVs/ s H  u  pSUPM	     snn$ s  snf s  snnf r}   )r	   r   projectsorted)pointsr   r   pprojected_vectors
projections         ry   sort_projected_pointsr   1  sc     ##E*IBHI&Q++DG4a8&I#)*;#<=#<-*A#<== J=s   %A"A'c
                   SS jn
[        X#5      n[        U5      nU=(       d    0 nSUS'   SUS'   SUS'   SnSnSn[        US	S
 USS	 5       H  u  p[        U5      nUUS'   U(       a  U(       d
  SUS'   UUS'   U R	                  [        U5      [        U5      [        U5      UUUUS9nU(       a  U
" U5      n[        [        UR                  XIS95      nUR                  R                  (       a  US:X  a  SnOSnOSnSnM     g	)ar  Creates multiple DIMENSION entities for each point pair in `points`.
Measurement points will be sorted by appearance on the dimension line
vector.

Args:
    layout: target layout (model space, paper space or block)
    base: base point, any point on the dimension line vector will do
    points: iterable of measurement points
    angle: dimension line rotation in degrees (0=horizontal, 90=vertical)
    ucs: user defined coordinate system
    avoid_double_rendering: removes first extension line and arrow of
        following DIMENSION entity
    dimstyle: dimension style name
    override: dictionary of overridden dimension style attributes
    dxfattribs: DXF attributes for DIMENSION entities
    discard: discard rendering result for friendly CAD applications like
        BricsCAD to get a native and likely better rendering result.
        (does not work with AutoCAD)

c                D    U R                  5       u  pUb
  U[        ;   a  gg)NTF)get_arrow_namesCAN_SUPPRESS_ARROW1)dimstyle_overridearrow_name1arrow_name2s      ry   suppress_arrow15multi_point_linear_dimension.<locals>.suppress_arrow1Z  s'    #4#D#D#F [4G%Gr{   r   dimtixr   dimtvpTr#   FNr&   r$   dimse1r  )r   dimstylerl   r   )discardr   )r   r   )r   r	   zipr   add_linear_dimr   r   r   r   r)   rV   )layoutbaser   r   rk   avoid_double_renderingr  rl   r   r  r  r$   _suppress_arrow1	first_runru   rv   	_overridestylerenderers                      ry   multi_point_linear_dimensionr  9  s,   B #61F:D~2HHXHX#'H  NIfSbk6!":.N	&4	"#!)"#Ih+;I'(%%JHH! & 
 .u5c)KL,,"!"!"N	9 /r{   )r   )r   Iterable[UVec]r   r   r   z
list[Vec2])r   NTEZDXFNNF)r  r   r  r
   r   r  r   r   rk   r   r  r   r  r   rl   zOptional[dict]r   r   )-
__future__r   typingr   r   r   r   r.   
ezdxf.mathr   r	   r
   r   r   ezdxf.render.arrowsr   r   ezdxf.entities.dimstyleoverrider   dim_baser   r   r   r   r   ezdxf.entitiesr   ezdxf.eztypesr   r   dot	dot_small	dot_blankorigin_indicatororigin_indicator_2dot_smallblanknoner   
box_filledboxintegralarchitectural_tickr  r   r   r{   ry   <module>r.     sN   # : :  = = 8 <  (/G
+ G
V JJ





KK
NN

JJ
OO
 " ,->>#(>> #'#PP
P P 	P
 
P !P P P 
Pr{   