
    'j                       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	 d dl
mZ d dlmZmZ ddlmZ erd d	lmZ ej        ej        ej        hZej        ej        ej        hZ G d
 dej                  Z G d de          ZdS )    )annotations)TYPE_CHECKINGAnyN)MTextEntityAlignmentMAP_MTEXT_ALIGN_TO_FLAGS)const)UVecVec3   )SubscriptAttributes)GenericLayoutTypec                      e Zd ZdZdZdZdS )Mirrorr         N)__name__
__module____qualname__NONEMIRROR_XMIRROR_Y     U/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/addons/mtextsurrogate.pyr   r       s        DHHHHr   r   c            
          e Zd ZdZej        Zej        Zej        Zde	j
        dddddej        dej        f
d#dZed$d            Zd%dZd&dZd'dZd(d!Zd"S ))MTextSurrogatea\  MTEXT surrogate for DXF R12 build up by TEXT Entities. This add-on was
    added to simplify the transition from :mod:`dxfwrite` to :mod:`ezdxf`.

    The rich-text formatting capabilities for the regular MTEXT entity are not
    supported, if these features are required use the regular MTEXT entity and
    the :class:`~ezdxf.addons.MTextExplode` add-on to explode the MTEXT entity
    into DXF primitives.

    .. important::

        The align-point is always the insert-point, there is no need for
        a second align-point because the horizontal alignments FIT, ALIGN,
        BASELINE_MIDDLE are not supported.

    Args:
        text: content as string
        insert: insert location in drawing units
        line_spacing: line spacing in percent of height, 1.5 = 150% = 1+1/2 lines
        align: text alignment as :class:`~ezdxf.enums.MTextEntityAlignment` enum
        char_height: text height in drawing units
        style: :class:`~ezdxf.entities.Textstyle` name as string
        oblique: oblique angle in degrees, where 0 is vertical
        rotation: text rotation angle in degrees
        width_factor: text width factor as float
        mirror: :attr:`MTextSurrogate.MIRROR_X` to mirror the text horizontal
            or :attr:`MTextSurrogate.MIRROR_Y` to mirror the text vertical
        layer: layer name as string
        color: :ref:`ACI`

    g      ?g      ?STANDARD        0textstrinsertr	   line_spacingfloatchar_heightobliquerotationwidth_factorcolorintc                   |                     d          | _        t          |          | _        t	          |          | _        t          |t                    sJ || _        t	          |          | _	        t          |          | _        t	          |          | _        t	          |          | _        t	          |	          | _        t          |
          | _        t          |          | _        t          |          | _        d S )N
)splitcontentr
   r"   r$   r#   
isinstancer   alignr%   r!   styler&   r'   r(   r*   mirrorlayerr)   )selfr    r"   r#   r0   r%   r1   r&   r'   r(   r2   r3   r)   s                r   __init__zMTextSurrogate.__init__J   s     #'**T"2"26ll!,//%!566666
 --ZZ
W~~h!,//&kkZZ
ZZ


r   returnc                     | j         | j        z  S )z'Absolute line spacing in drawing units.)r%   r#   )r4   s    r   line_heightzMTextSurrogate.line_heighth   s     $"333r   layoutr   Nonec                   | j         }t          |          dk    r~| j        t          j        z  r|                                 t          |          D ]D\  }}|                     |          }|                    || 	                    |                     EdS t          |          dk    r7|                    |d         | 	                    | j
                             dS dS )zkRender the multi-line content as separated TEXT entities into the
        given `layout` instance.
        r   )
dxfattribsr   N)r.   lenr2   r   r   reverse	enumerate_get_align_pointadd_text_dxfattribsr"   )r4   r9   
text_linesline_numberr    align_points         r   renderzMTextSurrogate.renderm   s    \
z??Q{U^+ %""$$$%.z%:%:  !T"33K@@#//<<        __!!OO1++DK88       "!r   rD   r
   c                   | j         j        }| j         j        }	 | j         j        }n# t          $ r d}Y nw xY w| j        t          v r||| j        z  z  }nh| j        t          v r5|| j        z  }t          | j
                  dz
  | j        z  }||dz  |z
  z  }n%|t          | j
                  dz
  |z
  | j        z  z  }|                     t          |||                    S )z7Calculate the align-point depending on the line number.r   r   r   )r"   xyz
IndexErrorr0   	TOP_ALIGNr8   MIDDLE_ALIGNr=   r.   _rotater
   )r4   rD   rH   rI   rJ   y0full_heights          r   r@   zMTextSurrogate._get_align_point   s    KMKM	AA 	 	 	AAA	 :""t///AAZ<''t//Bt|,,q0D4DDK+/R''AA#dl##a'+59IIIA||DAqMM***s   ' 66
alignpointc                   |j         | j        j         z
  }|j        | j        j        z
  }t          j        | j                  }| j        j         |t          j        |          z  z   |t          j        |          z  z
  }| j        j        |t          j        |          z  z   |t          j        |          z  z   }t          t          |d          t          |d          |j
                  S )z?Rotate `alignpoint` around insert-point about rotation degrees.   )rH   r"   rI   mathradiansr'   cossinr
   roundrJ   )r4   rQ   dxdybetarH   rI   s          r   rN   zMTextSurrogate._rotate   s    \DKM)\DKM)|DM**KMB$//"tx~~2EEKMB$//"tx~~2EEE!QKKq!jl;;;r   rE   dict[str, Any]c                    t           | j                 \  }}||| j        | j        | j        | j        | j        | j        | j        | j	        ||dS )z1Build keyword arguments for TEXT entity creation.)r"   rE   r3   r)   r1   heightwidthtext_generation_flagr'   r&   halignvalign)
r   r0   r3   r)   r1   r%   r(   r2   r'   r&   )r4   rE   ra   rb   s       r   rB   zMTextSurrogate._dxfattribs   sW    1$*=!&ZZZ&&$(K|
 
 	
r   N)r    r!   r"   r	   r#   r$   r%   r$   r&   r$   r'   r$   r(   r$   r)   r*   )r6   r$   )r9   r   r6   r:   )rD   r*   r6   r
   )rQ   r
   r6   r
   )rE   r
   r6   r\   )r   r   r   __doc__r   r   MIRROR_NONEr   r   r   TOP_LEFTr   BYLAYERr5   propertyr8   rF   r@   rN   rB   r   r   r   r   r   &   s         > +KHH ""+ !{]         < 4 4 4 X4   (+ + + +(< < < <
 
 
 
 
 
r   r   )
__future__r   typingr   r   rT   enumezdxf.enumsr   r   ezdxf.lldxfr   
ezdxf.mathr	   r
   mixinsr   ezdxf.eztypesr   re   	TOP_RIGHT
TOP_CENTERrL   MIDDLE_LEFTMIDDLE_CENTERMIDDLE_RIGHTrM   IntEnumr   r   r   r   r   <module>rv      sd   # " " " " " % % % % % % % %                ! ! ! ! ! ! ! ! ' ' ' ' ' ' 0////// !"#	 $&%    T\   H
 H
 H
 H
 H
( H
 H
 H
 H
 H
r   