
    hB                       S SK Jr  S SKJrJr  S SKJr  S SKrS SKJ	r	  S SKJ
r
  S SKJrJrJrJrJrJrJr  S SKJrJrJr  S S	KJrJrJrJrJr  S S
KJr  S SKJ r   S SK!J"r"  SSK#J$r$J%r%  SSK&J'r'J(r(J)r)J*r*  SSK+J,r,  \(       a  S SK-J.r.  S SK/J0r0J1r1  S SK2J3r3  S SK4J5r5  / SQr6\" S\" S\Rn                  \S9\" SS\	Rp                  \S9\" SS\	Rr                  \	Rt                  S9\" SS SS9\" S S SS9\" S!S"SS9\" S#SS\	Rp                  \S$9\" S%S S\	Rv                  " 1 S&k5      \S$9\" S'S S\	Rx                  " S S(5      \S$9\" S)\Rn                  SS*9\" S+S SS9\" S,S SS9\" S-\Rn                  \S\	Rz                  \S.9S/.5      r>\" \>5      r?\" SS0\" S1S S\	Rx                  " S S25      \S$905      r@\" \@5      rA\" \*\?\A5      rB\, " S3 S4\'5      5       rCS6S5 jrDg)7    )annotations)TYPE_CHECKINGOptional)SelfN)	validator)const)DXFAttrDXFAttributesDefSubclassXTypeRETURN_DEFAULTgroup_code_mappingmerge_group_code_mappings)TextEntityAlignmentMAP_TEXT_ENUM_TO_ALIGN_FLAGSMAP_TEXT_ALIGN_FLAGS_TO_ENUM)Vec3UVecMatrix44NULLVECZ_AXIS)OCSTransform)Auditor)
plain_text   )
base_classSubclassProcessor)
DXFGraphicacdb_entityelevation_to_z_axisacdb_entity_group_codes)register_entity)Drawing)DXFNamespace	DXFEntity)AbstractTagWriter)xref)Text	acdb_textacdb_text_group_codesAcDbText
   )xtypedefault(   g      @)r.   r   fixer 2   T)r.   optional3      Standard)   )r.   r3   r   r0   G   >   r            H   r;      )r-   r3   &   '      )r-   r.   r3   r   r0   )insertheighttextrotationobliquestylewidthtext_generation_flaghalignalign_point	elevation	thickness	extrusionvalignI   r:   c                    ^  \ rS rSrSrSr\" \\\	\
5      rSrSrSrSrSrSrSrSrSr\r\r S    S!U 4S	 jjjrS"U 4S
 jjrS"S jrS"S jr  S#       S$S jjrS%S jr\R                  4S&S jjrS'S jrS(S jr S)S jr!S S*U 4S jjjr"S+U 4S jjr#S,U 4S jjr$S-S jr%S.U 4S jjr&\'S/S j5       r(\(RR                  S0S j5       r(\'S/S j5       r*\*RR                  S0S j5       r*S1S jr+S-S jr,S2S jr-Sr.U =r/$ )3r(      zDXF TEXT entityTEXTr   r   r9      r:   c                   > [         [        U ]  U5      nU(       a3  UR                  U[        5        UR
                  (       a  [        US5        U$ )z!Loading interface. (internal API))rA   rJ   )superr   load_dxf_attribssimple_dxfattribs_loadermerged_text_group_codesr12r    )self	processordxf	__class__s      E/var/www/html/env/lib/python3.13/site-packages/ezdxf/entities/text.pyrV   Text.load_dxf_attribs   sA     J6yA..s4KL}}#C)BC
    c                h   > [         TU ]  U5        U R                  U5        U R                  U5        g)z7Export entity specific data as DXF tags. (internal API)N)rU   export_entityexport_acdb_textexport_acdb_text2)rZ   	tagwriterr]   s     r^   rb   Text.export_entity   s,    i(i(y)r`   c                    UR                   [        R                  :  a.  UR                  [        R                  [
        R                  5        U R                  R                  U/ SQ5        g),Export TEXT data as DXF tags. (internal API))rA   rB   rC   rL   rD   rE   rF   rG   rH   rI   rJ   rM   N)	
dxfversionr   DXF12
write_tag2SUBCLASS_MARKERr)   namer\   export_dxf_attribsrZ   re   s     r^   rc   Text.export_acdb_text   sH    %++-  !6!6	G##	
r`   c                    UR                   [        R                  :  a.  UR                  [        R                  [
        R                  5        U R                  R                  US5        g)rh   rN   N)	ri   r   rj   rk   rl   
acdb_text2rm   r\   rn   ro   s     r^   rd   Text.export_acdb_text2   sB    %++-  !6!6
H##Ix8r`   c                X   Uc  U R                  5       nO([        U[        5      (       d   eU R                  U5        XR                  l        U[        R                  [        R                  4;   a'  Uc#  [        R                  " S[        U5       S35      eOUnX R                  l        U $ )a  Set text alignment and location.

The alignments :attr:`ALIGNED` and :attr:`FIT`
are special, they require a second alignment point, the text is aligned
on the virtual line between these two points and sits vertically at the
baseline.

- :attr:`ALIGNED`: Text is stretched or compressed
  to fit exactly between `p1` and `p2` and the text height is also
  adjusted to preserve height/width ratio.
- :attr:`FIT`: Text is stretched or compressed to fit
  exactly between `p1` and `p2` but only the text width is adjusted,
  the text height is fixed by the :attr:`dxf.height` attribute.
- :attr:`MIDDLE`: also a special adjustment, centered
  text like :attr:`MIDDLE_CENTER`, but vertically
  centred at the total height of the text.

Args:
    p1: first alignment point as (x, y[, z])
    p2: second alignment point as (x, y[, z]), required for :attr:`ALIGNED`
        and :attr:`FIT` else ignored
    align: new alignment as enum :class:`~ezdxf.enums.TextEntityAlignment`,
        ``None`` to preserve the existing alignment.

zAlignment 'z$' requires a second alignment point.)get_align_enum
isinstancer   set_align_enumr\   rA   ALIGNEDFITr   DXFValueErrorstrrJ   rZ   p1p2aligns       r^   set_placementText.set_placement   s    > ='')Ee%89999&(002E2I2IJJz))!#e*-QR  
 B!r`   c                0   [        U R                  R                  5      n[        U R                  R                  SU5      5      nU R	                  5       nU[
        R                  L a  X1S4$ U[
        R                  [
        R                  4;   a  X1U4$ X2S4$ )zReturns a tuple (`align`, `p1`, `p2`), `align` is the alignment
enum :class:`~ezdxf.enum.TextEntityAlignment`, `p1` is the
alignment point, `p2` is only relevant if `align` is :attr:`ALIGNED` or
:attr:`FIT`, otherwise it is ``None``.

rJ   N)	r   r\   rA   getru   r   LEFTry   rx   r|   s       r^   get_placementText.get_placement  s     $((//" $((,,}b12##%',,,d?"(,,.A.I.IJJb= $r`   c                \    [         U   u  p#X R                  l        X0R                  l        U $ )zJust for experts: Sets the text alignment without setting the
alignment points, set adjustment points attr:`dxf.insert` and
:attr:`dxf.align_point` manually.

Args:
    align: :class:`~ezdxf.enums.TextEntityAlignment`

)r   r\   rI   rN   )rZ   r   rI   rN   s       r^   rw   Text.set_align_enum"  s'     6e<  r`   c                    U R                   R                  SS5      nU R                   R                  SS5      nUS:  a  Sn[        R                  " X4[        R                  5      $ )zqReturns the current text alignment as :class:`~ezdxf.enums.TextEntityAlignment`,
see also :meth:`set_placement`.
rI   r   rN   r9   )r\   r   r   r   r   )rZ   rI   rN   s      r^   ru   Text.get_align_enum0  sZ     h*h*A:F+//166
 	
r`   c                *   U R                   nUR                  S5      (       d  UR                  Ul        [	        U R                   R
                  U5      nUR                  UR                  5      Ul        UR                  UR                  5      Ul        UR                  nUR                  U5      nUR                  [        R                  " U5      5      nUR                  [        R                  " US-   5      5      nUR                  (       dz  [        R                  " US-   UR                  -
  5      nUS-   UR                  U5      R                  -
  n	Xl        U[         R"                  " [         R$                  " U	5      5      -  nU=R&                  Xg-  -  sl        U=R(                  U-  sl        XRl        UR                  S5      (       a   UR+                  UR,                  5      Ul        UR.                  Ul        U R1                  U5        U $ )z?Transform the TEXT entity by transformation matrix `m` inplace.rJ   g     V@rL   )r\   hasattrrA   rJ   r   rM   transform_vertexrD   transform_deg_angletransform_lengthr   from_deg_anglescale_uniformrE   transform_direction	angle_degmathcosradiansrG   rB   transform_thicknessrL   new_extrusionpost_transform)
rZ   mr\   ocsold_rotationnew_rotationx_scaley_scaleoblique_vecnew_oblique_degs
             r^   	transformText.transform<  s   hh{{=))!jjCO488--q1))#**5
..s?||..|<&&t':':<'HI&&t':':<$;N'OP  --lT.ACKK.OPK))+6@@A 
 *Ktxx_ =>>G		W&&	

g
#;;{##33CMMBCM))Ar`   c                   U R                  5       nU R                  n[        XU5      nUR                  XdR	                  UR
                  5      -   5      Ul        UR                  S5      (       a1  UR                  XdR	                  UR                  5      -   5      Ul        U R                  (       a&  U R                  [        R                  " XU5      5        U $ )zsOptimized TEXT/ATTRIB/ATTDEF translation about `dx` in x-axis, `dy`
in y-axis and `dz` in z-axis, returns `self`.

rJ   )r   r\   r   from_wcsto_wcsrA   r   rJ   is_post_transform_requiredr   r   	translate)rZ   dxdydzr   r\   vecs          r^   r   Text.translate]  s    
 hhjhh22\\#

3::(>">?
;;}%%!ll3COO1L+LMCO** 2 222 >?r`   c                   > U R                   (       d  g[        TU ]	  5         USL=(       a#    U R                  R                  UR
                  ;   nU(       d  SU R                  l        gg)z>Remove all dependencies from actual document.

(internal API)
Nr6   )is_aliverU   remove_dependenciesr\   rF   styles)rZ   other	has_styler]   s      r^   r   Text.remove_dependenciesn  sM    
 }}#%%J488>>U\\+I	'DHHN r`   c                   > [         TU ]  U5        U R                  R                  S5      (       a&  UR	                  U R                  R
                  5        gg)z5Register required resources to the resource registry.rF   N)rU   register_resourcesr\   r   add_text_stylerF   )rZ   registryr]   s     r^   r   Text.register_resources{  s@    "8,88G$$##DHHNN3 %r`   c                   > [         TU ]  X5        UR                  R                  S5      (       a5  UR	                  UR                  R
                  5      UR                  l        gg)z3Translate resources from self to the copied entity.rF   N)rU   map_resourcesr\   r   get_text_stylerF   )rZ   clonemappingr]   s      r^   r   Text.map_resources  sH    e-99W%%%44UYY__EEIIO &r`   c                @    [        U R                  R                  5      $ )z.Returns text content without formatting codes.)r   r\   rC   rZ   s    r^   r   Text.plain_text  s    $((--((r`   c                F   > [         TU ]  U5        UR                  U 5        g)zValidity check.N)rU   auditcheck_text_style)rZ   auditorr]   s     r^   r   
Text.audit  s    g  &r`   c                b    [        U R                  R                  [        R                  -  5      $ )zLGet/set text generation flag BACKWARDS, for mirrored text along the
x-axis.
)boolr\   rH   r   BACKWARDr   s    r^   is_backwardText.is_backward  s"    
 DHH11ENNBCCr`   c                F    U R                  [        R                  US5        g NrH   )set_flag_stater   r   rZ   states     r^   r   r     s    ENNE3IJr`   c                b    [        U R                  R                  [        R                  -  5      $ )zOGet/set text generation flag UPSIDE_DOWN, for mirrored text along
the y-axis.

)r   r\   rH   r   UPSIDE_DOWNr   s    r^   is_upside_downText.is_upside_down  s$     DHH11E4E4EEFFr`   c                F    U R                  [        R                  US5        g r   )r   r   r   r   s     r^   r   r     s    E--u6LMr`   c                    [        U 5      $ N)text_transformation_matrixr   s    r^   wcs_transformation_matrixText.wcs_transformation_matrix  s    )$//r`   c                    SnU R                   R                  nU R                  (       a>   U R                  R                  R	                  U5      nUR                   R
                  nU$ U$ ! [         a     U$ f = f)z;Returns the font name of the associated :class:`Textstyle`.z	arial.ttf)r\   rF   docr   r   font
ValueError)rZ   	font_name
style_namerF   s       r^   r   Text.font_name  sl    	XX^^
88++J7!IINN	 y  s   ;A* *
A87A8c                    SnU R                  5       u  p#nU[        R                  [        R                  4;   a  UR	                  U5      nU$ )zReturns the text length for alignments :attr:`TextEntityAlignment.FIT`
and :attr:`TextEntityAlignment.ALIGNED`, defined by the distance from
the insertion point to the align point or 0 for all other alignments.

g        )r   r   ry   rx   distance)rZ   lengthr   r}   r~   s        r^   
fit_lengthText.fit_length  sH     **,2(,,.A.I.IJJ[[_Fr`    r   )r[   zOptional[SubclassProcessor]returnr$   )re   r&   r   None)NN)r}   r   r~   zOptional[UVec]r   zOptional[TextEntityAlignment]r   r(   )r   z0tuple[TextEntityAlignment, Vec3, Optional[Vec3]])r   r(   )r   r   )r   r   r   r(   )r   floatr   r   r   r   r   r(   )r   zOptional[Drawing]r   r   )r   zxref.Registryr   r   )r   r   r   zxref.ResourceMapperr   r   )r   r{   )r   r   )r   r   )r   r   )r   r   )r   r   )0__name__
__module____qualname____firstlineno____doc__DXFTYPEr
   r   r   r)   rr   
DXFATTRIBSr   CENTERRIGHTBASELINEBOTTOMMIDDLETOPMIRROR_XMIRROR_Yr   r   rV   rb   rc   rd   r   r   r   rw   ru   r   r   r   r   r   r   r   propertyr   setterr   r   r   r   __static_attributes____classcell__)r]   s   @r^   r(   r(      sp   Gz;	:NJDFEHFF
CHHHK 8<
4
	
 
*
,9 "/3	-- - -	-
 
-^$ $7#;#; 

B"( (4F)'
 D D K K G G N N0
 r`   r(   c                   [         R                  " U R                  R                  5      nU R                  R                  nU R                  5       u  p4nU R                  (       a  SOSnU R                  (       a  SOSn[         R                  " U R                  R                  5      nUn	U[        R                  [        R                  4;   a   SnUR                  USS9n	XT-
  R                  n[        5       n
U(       a  U
[        R                  " US9-  n
X&-  nUnUS:w  d  US:w  a  U
[        R                   " XS5      -  n
U(       a  U
[        R"                  " U5      -  n
U	(       a9  U
[        R$                  " U	R&                  U	R(                  U	R*                  5      -  n
U R-                  5       nUR.                  (       a  XR0                  -  n
U
$ )zrApply rotation, width factor, translation to the insertion point
and if necessary transformation from OCS to WCS.
r   g      ?g      ?)factor)angle_x)r   r   r\   rD   rG   r   r   r   rE   r   rx   ry   lerpangler   shear_xyscalez_rotater   xyzr   r   matrix)entityr  width_factorr   r}   r~   mirror_xmirror_yrE   locationr   sxsyr   s                 r^   r   r     se    LL,,-E::##L((*MEr''rQH**rHll6::--.GH$,,.A.E.EFF772c7*
A	Xw//		 B	B	Qw"'	X^^BA&&	Xu%%	X

HJJ

CC
**,C
}}	ZZHr`   )r  r(   r   r   )E
__future__r   typingr   r   typing_extensionsr   r   ezdxf.lldxfr   r   ezdxf.lldxf.attributesr	   r
   r   r   r   r   r   ezdxf.enumsr   r   r   
ezdxf.mathr   r   r   r   r   ezdxf.math.transformtoolsr   ezdxf.auditr   ezdxf.tools.textr   	dxfentityr   r   dxfgfxr   r   r    r!   factoryr"   ezdxf.documentr#   ezdxf.entitiesr$   r%   ezdxf.lldxf.tagwriterr&   ezdxfr'   __all__point3dis_greater_zerois_valid_one_line_textfix_one_line_text	is_one_ofis_in_integer_rangeis_not_null_vectorr)   r*   rr   acdb_text2_group_codesrX   r(   r   r   r`   r^   <module>r-     s<   # * "  !    
 = < 2  ' 4  %&67
8 "EMM7C// 	
 66--	
 BD92q48 J> // 
 !()),7 !
  33Aq9 
 rF RT: RT:--22 
KMP	b +95  	'33Aq9 

" ,J7 3  b: b bJ	r`   