
    'jP%                    v   d dl mZ d dlmZmZ d dlmZ d dlZd dlZd dl	m
Z
 d dlmZ d dlmZ d dl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 ddlmZmZmZ ddl m!Z! dgZ"	 d.d/dZ# G d de          Z$ G d dej%                  Z& G d d e&          Z' G d! d"e&          Z(d0d+Z) G d, d-e          Z*dS )1    )annotations)IterableOptional)ProtocolN)colors)MText)const)Matrix44Vec3AnyVec)AbstractMTextRenderer)fonts)text_layout)MTextContext   )
PropertiesRenderContext
rgb_to_hex)Colorcomplex_mtext_rendererleftfloatbottomrighttopmr
   returnIterable[Vec3]c                z    | |f||f||f| |f| |fg}|t          j        |          S |                    |          S N)r   generatetransform_vertices)r   r   r   r   r   cornerss         \/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/addons/drawing/mtext_complex.pycorner_verticesr%      sY     
s			v	sG 	y}W%%%##G,,,    c                  &    e Zd ZddZddZddZdS )DrawInterfacestartr   end
propertiesr   r   Nonec                    d S r     )selfr)   r*   r+   s       r$   	draw_linezDrawInterface.draw_line,   s    r&   pointsIterable[AnyVec]c                    d S r    r.   )r/   r1   r+   s      r$   draw_filled_polygonz!DrawInterface.draw_filled_polygon/   s	     	r&   textstr	transformr
   
cap_heightr   c                    d S r    r.   )r/   r5   r7   r+   r8   s        r$   	draw_textzDrawInterface.draw_text4   s	     	r&   N)r)   r   r*   r   r+   r   r   r,   )r1   r2   r+   r   r   r,   )
r5   r6   r7   r
   r+   r   r8   r   r   r,   )__name__
__module____qualname__r0   r4   r:   r.   r&   r$   r(   r(   +   sP              
     r&   r(   c                  6    e Zd ZddZ	 dddZddZ	 dddZdS )FrameRendererr+   r   backendr(   c                "    || _         || _        d S r    )r+   r@   )r/   r+   r@   s      r$   __init__zFrameRenderer.__init__?   s    $r&   Nr   r   r   r   r   r   r
   r   r,   c                l    |                      t          t          |||||                               d S r    )_render_outlinelistr%   )r/   r   r   r   r   r   s         r$   renderzFrameRenderer.renderC   s6     	T/$sA"N"NOOPPPPPr&   vertices
list[Vec3]c                    | j         }| j        }|                    d          }|D ]}|                    |||           |}d S )Nr   )r@   r+   popr0   )r/   rG   r@   r+   prevvertexs         r$   rD   zFrameRenderer._render_outlineM   sW    ,_
||A 	 	FdFJ777DD	 	r&   x1y1x2y2c                    ||f||fg}||                     |          \  }}nt          j        |          \  }}| j                            ||| j                   d S r    )r"   r   r!   r@   r0   r+   )	r/   rM   rN   rO   rP   r   r1   p1p2s	            r$   linezFrameRenderer.lineU   si     r(RH%=))&11FB]6**FBr2t77777r&   )r+   r   r@   r(   r    r   r   r   r   r   r   r   r   r   r
   r   r,   )rG   rH   r   r,   )rM   r   rN   r   rO   r   rP   r   r   r
   r   r,   )r;   r<   r=   rB   rF   rD   rT   r.   r&   r$   r?   r?   >   s            Q Q Q Q Q    IM8 8 8 8 8 8 8r&   r?   c                  4     e Zd Z	 	 	 dd fdZ	 dddZ xZS )ColumnBackgroundRendererNr   Fr+   r   r@   r(   bg_propertiesOptional[Properties]offsetr   
text_frameboolc                v    t                                          ||           || _        || _        || _        d S r    )superrB   rX   rZ   has_text_frame)r/   r+   r@   rX   rZ   r[   	__class__s         r$   rB   z!ColumnBackgroundRenderer.__init__a   s<     	W---*(r&   r   r   r   r   r   r
   r   r,   c           	         | j         }t          t          ||z
  ||z
  ||z   ||z   |                    }| j         | j                            || j                   | j        r|                     |           d S d S r    )rZ   rE   r%   rX   r@   r4   r_   rD   )r/   r   r   r   r   r   rZ   rG   s           r$   rF   zColumnBackgroundRenderer.rendern   s     vvfa 
 

 )L,,Xt7IJJJ 	+  *****	+ 	+r&   )Nr   F)
r+   r   r@   r(   rX   rY   rZ   r   r[   r\   r    rU   )r;   r<   r=   rB   rF   __classcell__r`   s   @r$   rW   rW   `   sk        
 /3 ) ) ) ) ) ) )& + + + + + + + + +r&   rW   c                  0     e Zd ZdZd fdZ	 dddZ xZS )TextRendererzText content renderer.r5   r6   r8   r   width_factorobliquer+   r   r@   r(   c                    t                                          ||           || _        || _        || _        || _        d S r    )r^   rB   r5   r8   rf   rg   )r/   r5   r8   rf   rg   r+   r@   r`   s          r$   rB   zTextRenderer.__init__   s@     	W---	$(r&   Nr   r   r   r   r   r
   c                ~   d}d}t          j        | j        dd          s| j        }t          | j                  dk    r+t          j        t          j        | j                            }t          |ddd|ddddddd||ddf          }|||z  }| j        	                    | j
        || j        | j                   dS )zCreate/render the text contentg      ?g        gư>)rel_tolgMbP?N)mathiscloserf   absrg   tanradiansr
   r@   r:   r5   r+   r8   )	r/   r   r   r   r   r   sxtxts	            r$   rF   zTextRenderer.render   s     |D-sDAAA 	#"Bt|t##$,t|4455BS#S#c3&#s	
   =FAty!T_doNNNNNr&   )r5   r6   r8   r   rf   r   rg   r   r+   r   r@   r(   r    )
r   r   r   r   r   r   r   r   r   r
   )r;   r<   r=   __doc__rB   rF   rb   rc   s   @r$   re   re      sj               * O O O O O O O O Or&   re   ctxr   r@   mtextr   r+   r   r,   c                   t          | ||          }t          j        |j        j                  }|                    |          }|                    |           |                    |                                j	                   d S )N)align)
ComplexMTextRenderertlLayoutAlignmentdxfattachment_pointlayout_engineplacerF   ucsmatrix)rt   r@   ru   r+   cmrrw   r}   s          r$   r   r      sy     sGZ
8
8Cuy9::E%%e,,Me$$$+,,,,,r&   c                  p     e Zd Zd  fdZd!dZd"dZd#dZd$dZed%d            Z	d&dZ
d'dZd(dZ xZS ))rx   rt   r   r@   r(   r+   r   c                r    t                                                       || _        || _        || _        d S r    )r^   rB   _render_ctx_backend_properties)r/   rt   r@   r+   r`   s       r$   rB   zComplexMTextRenderer.__init__   s8     	%r&   r5   r6   r   r   tl.ContentCellc                \   t          j        |                     |                              |          |j        t          j        |j                  |                     |          t          ||j        |j	        |j
        |                     | j        |          | j                            S )N)widthheightvalignstrokerenderer)ry   Textget_font
text_widthr8   CellAlignmentrw   
get_strokere   rf   rg   new_text_propertiesr   r   )r/   r5   rt   s      r$   wordzComplexMTextRenderer.word   s    w--$$//55>#CI..??3''! (()93?? 
 
 
 	
r&   datatuple[str, str, str]c           	        |\  }}}|rkt          j        |                     ||          |                     ||          |                     |          t	          | j        | j                            S |                     ||          S )N)r   r   stackingr   )ry   Fractionr   get_stackingr?   r   r   )r/   r   rt   uprlwrtype_s         r$   fractionzComplexMTextRenderer.fraction   s    S% 		';IIc3''yyc****511&t'7GG    99S#&&&r&   ru   r   fonts.FontFacec                    | j         j        S r    )r   font)r/   ru   s     r$   get_font_facez"ComplexMTextRenderer.get_font_face   s    $$r&   tl.ContentRendererc                   |j         }|                    dd          }d }d }d }d}d}|r|j        |                    dd          dz
  z  }|t          j        z  rG|                    d          r|j        }|                    d          r	d }|j        }|d	z  d	k    rd }d }|t          j        z  rd
}| 	                    ||          }t          | j        | j        |||          S )Nbg_fillr   Fbox_fill_scaleg      ?r   bg_fill_colorbg_fill_true_color   T)rZ   r[   )r{   getchar_heightr	   MTEXT_BG_COLORhasattrr   r   MTEXT_TEXT_FRAMEnew_bg_propertiesrW   r   r   )	r/   ru   r{   r   bg_acibg_true_colorrX   r_   rZ   s	            r$   make_bg_rendererz%ComplexMTextRenderer.make_bg_renderer   s   i'')Q''.2 	J _0@#(F(F(JKF-- );;// / .F;;344 ;!F$'$:MaKA%% "F$(M// &!% 226=IIM'M%
 
 
 	
r&   c                    | j         S r    )r   )r/   s    r$   r@   zComplexMTextRenderer.backend  s
    }r&   aciintr   c                L    | j                             || j        j                  S r    )r   resolve_aci_colorr   layer)r/   r   s     r$   r   z&ComplexMTextRenderer.resolve_aci_color  s!    11#t7G7MNNNr&   c                    t          j         |          }|j         |                     |j                  |_        nt          |j                  |_        |j        |_        |S r    )copyrgbr   r   colorr   	font_facer   )r/   r+   rt   new_propertiess       r$   r   z(ComplexMTextRenderer.new_text_properties  sW     :..7?#'#9#9#'#B#BN  #-cg#6#6N !mr&   Optional[int]
true_colorc                    t          j         | j                  }| j        j        j        |_        |||                     |          |_        n&t          t          j	        |                    |_        |S r    )
r   r   r   current_layout_propertiesbackground_colorr   r   r   r   int2rgb)r/   r   r   r   s       r$   r   z&ComplexMTextRenderer.new_bg_properties)  sp     4#3446G 	 '+'='=c'B'B$ $.fnZ.H.H#I#IN r&   )rt   r   r@   r(   r+   r   )r5   r6   rt   r   r   r   )r   r   rt   r   r   r   )ru   r   r   r   )ru   r   r   r   )r   r(   )r   r   r   r   )r+   r   rt   r   r   r   )r   r   r   r   r   r   )r;   r<   r=   rB   r   r   r   r   propertyr@   r   r   r   rb   rc   s   @r$   rx   rx      s        	& 	& 	& 	& 	& 	&
 
 
 
 ' ' ' '% % % %&
 &
 &
 &
T    XO O O O	 	 	 	       r&   rx   r    )r   r   r   r   r   r   r   r   r   r
   r   r   )
rt   r   r@   r(   ru   r   r+   r   r   r,   )+
__future__r   typingr   r   typing_extensionsr   r   rk   ezdxfr   ezdxf.entitiesr   ezdxf.lldxfr	   
ezdxf.mathr
   r   r   $ezdxf.render.abstract_mtext_rendererr   ezdxf.fontsr   ezdxf.toolsr   ry   ezdxf.tools.textr   r+   r   r   r   
type_hintsr   __all__r%   r(   ContentRendererr?   rW   re   r   rx   r.   r&   r$   <module>r      sP   # " " " " " % % % % % % % % & & & & & &                           - - - - - - - - - - F F F F F F       ) ) ) ) ) ) ) ) ) ) ) ) = = = = = = = = = =      #
$ - - - - -(    H   &8 8 8 8 8B& 8 8 8D!+ !+ !+ !+ !+} !+ !+ !+H+O +O +O +O +O= +O +O +O\
- 
- 
- 
-w w w w w0 w w w w wr&   