
    'jB                       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j7        e           edde	j8        e           edde	j9        e	j:                   edd d           ed d d           ed!d"d           ed#dde	j8        e$           ed%d d e	j;        h d&          e$           ed'd d e	j<        d d(          e$           ed)ej7        d*           ed+d d           ed,d d           ed-ej7        ede	j=        e.          d/          Z> ee>          Z? edd0 ed1d d e	j<        d d2          e$          i          Z@ ee@          ZA ee*e?eA          ZBe, G d3 d4e'                      ZCd9d8ZDdS ):    )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@dA fdZdB fdZdBdZdBdZ	 	 dCdDdZdEdZej        fdFdZdGdZdHd"ZdId'Z d@dJ fd*Z!dK fd-Z"dL fd2Z#dMd4Z$dN fd7Z%e&dOd9            Z'e'j(        dPd:            Z'e&dOd;            Z)e)j(        dPd<            Z)dQd=Z*dMd>Z+dRd?Z, xZ-S )Sr(   zDXF TEXT entityTEXTr   r   r9      r:   N	processorOptional[SubclassProcessor]returnr$   c                    t          t          |                               |          }|r2|                    |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    )selfrS   dxf	__class__s      M/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/entities/text.pyrX   zText.load_dxf_attribs   sc     J%%66yAA 	D..s4KLLL} D#C)BCCC
    	tagwriterr&   Nonec                    t                                          |           |                     |           |                     |           dS )z7Export entity specific data as DXF tags. (internal API)N)rW   export_entityexport_acdb_textexport_acdb_text2)r\   ra   r^   s     r_   rd   zText.export_entity   sI    i(((i(((y)))))r`   c                    |j         t          j        k    r*|                    t          j        t
          j                   | j                            |g d           dS ),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r\   ra   s     r_   re   zText.export_acdb_text   sc    %+--  !6	GGG##  	
 	
 	
 	
 	
r`   c                    |j         t          j        k    r*|                    t          j        t
          j                   | j                            |d           dS )rh   rN   N)	ri   r   rj   rk   rl   
acdb_text2rm   r]   rn   ro   s     r_   rf   zText.export_acdb_text2   sK    %+--  !6
HHH##Ix88888r`   p1r   p2Optional[UVec]alignOptional[TextEntityAlignment]c                D   ||                                  }n,t          |t                    sJ |                     |           || j        _        |t          j        t          j        fv r(|%t          j	        dt          |           d          n|}|| 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.

        NzAlignment 'z$' requires a second alignment point.)get_align_enum
isinstancer   set_align_enumr]   rA   ALIGNEDFITr   DXFValueErrorstrrJ   r\   rr   rs   ru   s       r_   set_placementzText.set_placement   s    > =''))EEe%899999&&&(02E2IJJJz)R#e**RRR   
 B!r`   0tuple[TextEntityAlignment, Vec3, Optional[Vec3]]c                   t          | j        j                  }t          | j                            d|                    }|                                 }|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   getrx   r   LEFTr|   r{   r   s       r_   get_placementzText.get_placement  s     $(/"" $(,,}b1122##%%',,,"d?"(,.A.IJJJ"b= b$r`   c                V    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   )r\   ru   rI   rN   s       r_   rz   zText.set_align_enum"  s)     6e<  r`   r   c                    | j                             dd          }| j                             dd          }|dk    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   )r\   rI   rN   s      r_   rx   zText.get_align_enum0  s_     h**h**A::F+/V16
 
 	
r`   mr   c                   | j         }|                    d          s|j        |_        t	          | j         j        |          }|                    |j                  |_        |                    |j                  |_        |j        }|                    |          }|	                    t          j        |                    }|	                    t          j        |dz                       }|j        sot          j        |dz   |j        z
            }|dz   |                    |          j        z
  }	|	|_        |t!          j        t!          j        |	                    z  }|xj        ||z  z  c_        |xj        |z  c_        ||_        |                    d          r|                    |j                  |_        |j        |_        |                     |           | 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)
r\   r   r]   ocsold_rotationnew_rotationx_scaley_scaleoblique_vecnew_oblique_degs
             r_   	transformzText.transform<  s   h{{=)) 	)!jCO48-q11))#*55
..s??|..|<<&&t':<'H'HII&&t':<$;N'O'OPP  	?-lT.ACK.OPPK))+66@A 
 *CKtx_ = =>>>G		Ww&&		

g

#;;{## 	C33CMBBCM)Ar`   dxfloatdydzc                   |                                  }| j        }t          |||          }|                    ||                    |j                  z             |_        |                    d          r5|                    ||                    |j                  z             |_        | j        r)| 	                    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)r\   r   r   r   r   r]   vecs          r_   r   zText.translate]  s    
 hhjjh2r2\\#

3:(>(>">??
;;}%% 	N!ll3CO1L1L+LMMCO* 	@ 22r2 > >???r`   otherOptional[Drawing]c                    | j         sdS t                                                       |duo| j        j        |j        v }|sd| j        _        dS dS )zNRemove all dependencies from actual document.

        (internal API)
        Nr6   )is_aliverW   remove_dependenciesr]   rF   styles)r\   r   	has_styler^   s      r_   r   zText.remove_dependenciesn  sc    
 } 	F##%%%%J48>U\+I	 	('DHNNN	( 	(r`   registryxref.Registryc                    t                                          |           | j                            d          r!|                    | j        j                   dS dS )z5Register required resources to the resource registry.rF   N)rW   register_resourcesr]   r   add_text_stylerF   )r\   r   r^   s     r_   r   zText.register_resources{  s[    ""8,,,8G$$ 	4##DHN33333	4 	4r`   cloner   mappingxref.ResourceMapperc                    t                                          ||           |j                            d          r+|                    |j        j                  |j        _        dS dS )z3Translate resources from self to the copied entity.rF   N)rW   map_resourcesr]   r   get_text_stylerF   )r\   r   r   r^   s      r_   r   zText.map_resources  sa    eW---9W%% 	F%44UY_EEEIOOO	F 	Fr`   r~   c                4    t          | j        j                  S )z.Returns text content without formatting codes.)r   r]   rC   r\   s    r_   r   zText.plain_text  s    $(-(((r`   auditorr   c                t    t                                          |           |                    |            dS )zValidity check.N)rW   auditcheck_text_style)r\   r   r^   s     r_   r   z
Text.audit  s3    g  &&&&&r`   boolc                N    t          | j        j        t          j        z            S )z\Get/set text generation flag BACKWARDS, for mirrored text along the
        x-axis.
        )r   r]   rH   r   BACKWARDr   s    r_   is_backwardzText.is_backward  s    
 DH1ENBCCCr`   c                H    |                      t          j        |d           d S NrH   )set_flag_stater   r   r\   states     r_   r   zText.is_backward  s#    ENE3IJJJJJr`   c                N    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     DH1E4EEFFFr`   c                H    |                      t          j        |d           d S r   )r   r   r   r   s     r_   r   zText.is_upside_down  s$    E-u6LMMMM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        }n# t          $ r Y nw xY w|S )z;Returns the font name of the associated :class:`Textstyle`.z	arial.ttf)r]   rF   docr   r   font
ValueError)r\   	font_name
style_namerF   s       r_   r   zText.font_name  sg    	X^
8 	++J77!IN		   s   +A 
AAc                    d}|                                  \  }}}|t          j        t          j        fv r|                    |          }|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   r|   r{   distance)r\   lengthru   rr   rs   s        r_   
fit_lengthzText.fit_length  sL     **,,r2(,.A.IJJJ[[__Fr`   r   )rS   rT   rU   r$   )ra   r&   rU   rb   )NN)rr   r   rs   rt   ru   rv   rU   r(   )rU   r   )rU   r(   )rU   r   )r   r   rU   r(   )r   r   r   r   r   r   rU   r(   )r   r   rU   rb   )r   r   rU   rb   )r   r   r   r   rU   rb   )rU   r~   )r   r   )rU   r   )rU   rb   )rU   r   )rU   r   ).__name__
__module____qualname____doc__DXFTYPEr
   r   r   r)   rq   
DXFATTRIBSr   CENTERRIGHTBASELINEBOTTOMMIDDLETOPMIRROR_XMIRROR_Yr   r   rX   rd   re   rf   r   r   r   rz   rx   r   r   r   r   r   r   r   propertyr   setterr   r   r   r   __classcell__)r^   s   @r_   r(   r(      s       Gz;	:NNJDFEHFF
CHHHK 8<
 
 
 
 
 
 
* * * * * *
 
 
 
,9 9 9 9 "/3	- - - - -^   $ $7#;     

 

 

 

   B   "( ( ( ( ( ( (4 4 4 4 4 4F F F F F F) ) ) )' ' ' ' ' '
 D D D XD K K K K G G G XG N N N N0 0 0 0
 
 
 
       r`   r(   entityrU   r   c                   t          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}|                    |d          }	||z
  j        }t                      }
|r|
t          j        |          z  }
||z  }|}|dk    s|dk    r|
t          j        ||d          z  }
|r|
t          j        |          z  }
|	r(|
t          j        |	j        |	j        |	j                  z  }
|                                 }|j        r
|
|j        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   r{   r|   lerpangler   shear_xyscalez_rotater   xyzr   r   matrix)r   r   width_factorru   rr   rs   mirror_xmirror_yrE   locationr   sxsyr   s                 r_   r   r     s~    L,--E:#L((**ME2r'.rrQH*1rrHl6:-..GH$,.A.EFFF772c7**b

A 0	Xw////		 B	B	Qww"''	X^BA&&& &	Xu%%% D	X
HJ
CCC
**,,C
} 	SZHr`   )r   r(   rU   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*   rq   acdb_text2_group_codesrZ   r(   r    r`   r_   <module>r     s   # " " " " " * * * * * * * * " " " " " "  ! ! ! ! ! !                                
 = < < < < < < < < < < < < < 2 2 2 2 2 2       ' ' ' ' ' ' 4 4 4 4 4 4 4 4            % $ $ $ $ $ &&&&&&66666666777777
8
8
8K '"EM7CCC'/ 	
 
 
 6-	
 
 
 GBD99972q4888 J>>> / 
 
 
 !()i),,,77 !
 !
 !
  '3i3Aq99 
 
 
 wrFFF WRT::: WRT:::W-2 
 
 
KM MP P	b +*955 [ 	''3i3Aq99 
 
 
 
" ,+J77 33   b b b b b: b b bJ	     r`   