
    OgB                       d dl mZ d dlmZmZ d dlmZ d dlZd dlm	Z	 d dlm
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 d d
lmZ d dlm Z  d dl!m"Z" ddl#m$Z$m%Z% ddl&m'Z'm(Z(m)Z)m*Z* ddl+m,Z, erd dl-m.Z. d dl/m0Z0m1Z1 d dl2m3Z3 d dl4m5Z5 g dZ6 ed edejn                  e       edde	jp                  e       edde	jr                  e	jt                         edd d       ed d d       ed!d"d       ed#dde	jp                  e$       ed%d d e	jv                  h d&      e$       ed'd d e	jx                  d d(      e$       ed)ejn                  d*       ed+d d       ed,d d       ed-ejn                  ede	jz                  e.      d/      Z> ee>      Z? edd0 ed1d d e	jx                  d d2      e$      i      Z@ ee@      ZA ee*e?eA      ZBe, G d3 d4e'             ZCd6d5ZDy)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                      e Zd ZdZdZ eeeee	      Z
dZdZdZdZdZdZdZdZdZeZeZ	 d	 	 	 d fdZd  fd	Zd d
Zd dZ	 	 d!	 	 	 	 	 	 	 d"dZd#dZej                  fd$dZd%dZd&dZd'dZ dd( fdZ!d) fdZ"d* fdZ#d+dZ$d, fdZ%e&d-d       Z'e'jP                  d.d       Z'e&d-d       Z)e)jP                  d.d       Z)d/dZ*d+dZ+d0dZ, xZ-S )1r(   zDXF TEXT entityTEXTr   r   r9      r:   c                    t         t        |   |      }|r.|j                  |t               |j
                  rt        |d       |S )z!Loading interface. (internal API))rA   rJ   )superr   load_dxf_attribssimple_dxfattribs_loadermerged_text_group_codesr12r    )self	processordxf	__class__s      X/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/entities/text.pyrU   zText.load_dxf_attribs   sA     J6yA..s4KL}}#C)BC
    c                h    t         |   |       | j                  |       | j                  |       y)z7Export entity specific data as DXF tags. (internal API)N)rT   export_entityexport_acdb_textexport_acdb_text2)rY   	tagwriterr\   s     r]   r`   zText.export_entity   s,    i(i(y)r^   c                    |j                   t        j                  kD  r.|j                  t        j                  t
        j                         | j                  j                  |g d       y),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rY   rc   s     r]   ra   zText.export_acdb_text   sH    %++-  !6!6	G##	
r^   c                    |j                   t        j                  kD  r.|j                  t        j                  t
        j                         | j                  j                  |d       y)re   rN   N)	rf   r   rg   rh   ri   
acdb_text2rj   r[   rk   rl   s     r]   rb   zText.export_acdb_text2   sB    %++-  !6!6
H##Ix8r^   c                F   || j                         }n#t        |t              sJ | j                  |       || j                  _        |t        j                  t        j                  fv r$|$t        j                  dt        |       d      |}|| j                  _        | S )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   rY   p1p2aligns       r]   set_placementzText.set_placement   s    > ='')Ee%8999&(002E2I2IJJz))!#e*-QR  B!r^   c                0   t        | j                  j                        }t        | j                  j                  d|            }| j	                         }|t
        j                  u r||dfS |t
        j                  t
        j                  fv r|||fS ||dfS )a  Returns 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   getrp   r   LEFTrt   rs   rw   s       r]   get_placementzText.get_placement  s     $((//" $((,,}b12##%',,,"d?"(,,.A.I.IJJ"b= b$r^   c                b    t         |   \  }}|| j                  _        || j                  _        | S )a  Just 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   )rY   rz   rI   rN   s       r]   rr   zText.set_align_enum"  s-     6e<  r^   c                    | j                   j                  dd      }| j                   j                  dd      }|dkD  rd}t        j                  ||ft        j                        S )zReturns the current text alignment as :class:`~ezdxf.enums.TextEntityAlignment`,
        see also :meth:`set_placement`.
        rI   r   rN   r9   )r[   r}   r   r   r~   )rY   rI   rN   s      r]   rp   zText.get_align_enum0  s\     h*h*A:F+//V166
 	
r^   c                   | j                   }|j                  d      s|j                  |_        t	        | j                   j
                  |      }|j                  |j                        |_        |j                  |j                        |_        |j                  }|j                  |      }|j                  t        j                  |            }|j                  t        j                  |dz               }|j                  sxt        j                  |dz   |j                  z
        }|dz   |j                  |      j                  z
  }	|	|_        |t!        j"                  t!        j$                  |	            z  }|xj&                  ||z  z  c_        |xj(                  |z  c_        ||_        |j                  d      r |j+                  |j,                        |_        |j.                  |_        | j1                  |       | S )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)
rY   mr[   ocsold_rotationnew_rotationx_scaley_scaleoblique_vecnew_oblique_degs
             r]   	transformzText.transform<  s   hh{{=)!jjCO488--q1))#**5
..s?||..|<&&t':':<'HI&&t':':<$;N'OP  --lT.ACKK.OPK))+6@@A 
 *CKtxx_ =>>G		Ww&&	

g
#;;{#33CMMBCM))Ar^   c                   | j                         }| j                  }t        |||      }|j                  ||j	                  |j
                        z         |_        |j                  d      r2|j                  ||j	                  |j                        z         |_        | j                  r&| j                  t        j                  |||             | S )zOptimized 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)rY   dxdydzr   r[   vecs          r]   r   zText.translate]  s    
 hhjhh2r2\\#

3::(>">?
;;}%!ll3COO1L+LMCO** 2 22r2 >?r^   c                    | j                   syt        | 	          |duxr" | j                  j                  |j
                  v }|sd| j                  _        yy)zNRemove all dependencies from actual document.

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

        )r   r[   rH   r   UPSIDE_DOWNr   s    r]   is_upside_downzText.is_upside_down  s$     DHH11E4E4EEFFr^   c                F    | j                  t        j                  |d       y r   )r   r   r   r   s     r]   r   zText.is_upside_down  s    E--u6LMr^   c                    t        |       S N)text_transformation_matrixr   s    r]   wcs_transformation_matrixzText.wcs_transformation_matrix  s    )$//r^   c                    d}| j                   j                  }| j                  r>	 | j                  j                  j	                  |      }|j                   j
                  }|S |S # t        $ r Y |S w xY w)z;Returns the font name of the associated :class:`Textstyle`.z	arial.ttf)r[   rF   docr   r}   font
ValueError)rY   	font_name
style_namerF   s       r]   r   zText.font_name  sl    	XX^^
88++J7!IINN	 y  s   ;A% %	A21A2c                    d}| j                         \  }}}|t        j                  t        j                  fv r|j	                  |      }|S )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   rt   rs   distance)rY   lengthrz   rx   ry   s        r]   
fit_lengthzText.fit_length  sJ     **,r2(,,.A.I.IJJ[[_Fr^   r   )rZ   zOptional[SubclassProcessor]returnr$   )rc   r&   r   None)NN)rx   r   ry   zOptional[UVec]rz   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   rv   )r   r   )r   r   )r   r   )r   r   )r   r   ).__name__
__module____qualname____doc__DXFTYPEr
   r   r   r)   rn   
DXFATTRIBSr~   CENTERRIGHTBASELINEBOTTOMMIDDLETOPMIRROR_XMIRROR_Yr   r   rU   r`   ra   rb   r{   r   r   rr   rp   r   r   r   r   r   r   r   propertyr   setterr   r   r   r   __classcell__)r\   s   @r]   r(   r(      sa   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                l   t        j                  | j                  j                        }| j                  j                  }| j                         \  }}}| j                  rdnd}| j                  rdnd}t        j                  | j                  j                        }|}	|t        j                  t        j                  fv r$d}|j                  |d      }	||z
  j                  }t               }
|r|
t        j                  |      z  }
||z  }|}|dk7  s|dk7  r|
t        j                   ||d      z  }
|r|
t        j"                  |      z  }
|	r8|
t        j$                  |	j&                  |	j(                  |	j*                        z  }
| j-                         }|j.                  r|
|j0                  z  }
|
S )zzApply 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   rs   rt   lerpangler   shear_xyscalez_rotater   xyzr   r   matrix)entityr   width_factorrz   rx   ry   mirror_xmirror_yrE   locationr   sxsyr   s                 r]   r   r     so    LL,,-E::##L((*ME2r''rQH**rHll6::--.GH$,,.A.E.EFF772c7*b
A	Xw//		 B	B	Qw"'	X^^BA&&	Xu%%	X

HJJ

CC
**,C
}}	SZZ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*   rn   acdb_text2_group_codesrW   r(   r    r^   r]   <module>r     sB   # * "  !    
 = < 2  ' 4  %&67
8 "EMM7C// 	
 66--	
 BD92q48 J> // 
 !()i)),7 !
  3i33Aq9 
 rF RT: RT:--22 
KMP	b +95  	'3i33Aq9 

" ,J7 3  b: b bJ	r^   