Ë
    £èh>W  ã                  ó@  — d dl mZ d dlmZmZmZmZ d dlZd dl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mZmZmZmZ d dlmZmZmZmZ d d	lmZmZmZ d d
l m!Z!m"Z" d dl#m$Z$m%Z%m&Z&m'Z'm(Z( d dl)m*Z* erd dl	m+Z+m,Z,m-Z-m.Z. g d¢Z/ G d„ dej`                  «      Z1 G d„ de1«      Z2 G d„ de1«      Z3 G d„ de1«      Z4 G d„ de1«      Z5 G d„ de3«      Z6 G d„ de1«      Z7 G d„ de3«      Z8 G d„ d e3«      Z9 G d!„ d"e3«      Z: G d#„ d$e3«      Z;d%Z<d&Z= G d'„ d(e3«      Z> G d)„ d*e3«      Z?dId+„Z@ G d,„ d-e3«      ZA G d.„ d/e3«      ZBi d0e9“d1e4“d2e>“d3e>“d4e4“d5e4“d6e;“d7e;“d8e4“d9eA“d:e5“d;e6“d<e8“d=e?“d>e7“d?e:“d@e4“e9e>e9eBeAdAœ¥ZC	 dJ	 	 	 dKdB„ZDdLdC„ZE	 dJ	 	 	 	 	 dMdD„ZFdNdE„ZGdOdF„ZHdPdG„ZIdNdH„ZJy)Qé    )Úannotations)ÚIterableÚOptionalÚcastÚTYPE_CHECKINGN)Ú	DXFEntityÚInsertÚget_font_name)Úconst)ÚTextEntityAlignment)ÚVec3ÚUCSÚZ_AXISÚX_AXISÚBoundingBox)ÚPathÚ	make_pathÚfrom_verticesÚprecise_bbox)ÚMeshBuilderÚMeshVertexMergerÚTraceBuilder)ÚSupportsVirtualEntitiesÚvirtual_entities)ÚTextLineÚunified_alignmentÚ
plain_textÚ	text_wrapÚestimate_mtext_content_extents)Úfonts)Ú
LWPolylineÚPolylineÚMTextÚText)Úmake_primitiveÚrecursive_decomposeÚto_primitivesÚto_verticesÚto_control_verticesÚto_pathsÚ	to_meshesc                  ó˜   — e Zd ZU dZdZded<   	 d	 	 	 dd„Zedd„«       Zedd„«       Z	edd	„«       Z
ej                  dd
„«       Zddd„Zy)Ú	Primitivea  It is not efficient to create the Path() or MeshBuilder() representation
    by default. For some entities it's just not needed (LINE, POINT) and for
    others the builtin flattening() method is more efficient or accurate than
    using a Path() proxy object. (ARC, CIRCLE, ELLIPSE, SPLINE).

    The `max_flattening_distance` defines the max distance between the
    approximation line and the original curve. Use argument
    `max_flattening_distance` to override the default value, or set the value
    by direct attribute access.

    g{®Gáz„?ÚfloatÚmax_flattening_distanceNc                óB   — || _         d | _        d | _        |�|| _        y y ©N)ÚentityÚ_pathÚ_meshr/   )Úselfr2   r/   s      ú1lib/python3.12/site-packages/ezdxf/disassemble.pyÚ__init__zPrimitive.__init__6   s.   € ð "(ˆŒà%)ˆŒ
ð -1ˆŒ
Ø"Ð.Ø+BˆDÕ(ð /ó    c                óz   — | j                   r"t        | j                   j                  «      dk(  S | j                  du S )zbReturns `True` if represents an empty primitive which do not
        yield any vertices.

        r   N)r4   ÚlenÚverticesÚpath©r5   s    r6   Úis_emptyzPrimitive.is_emptyB   s4   € ð �:Š:Ü�t—z‘z×*Ñ*Ó+¨qÑ0Ð0Ø�y‰y˜DÐ Ð r8   c                 ó   — y)zÙ:class:`~ezdxf.path.Path` representation or ``None``,
        idiom to check if is a path representation (could be empty)::

            if primitive.path is not None:
                process(primitive.path)

        N© r=   s    r6   r<   zPrimitive.pathL   ó   € ð r8   c                 ó   — y)zç:class:`~ezdxf.render.mesh.MeshBuilder` representation or ``None``,
        idiom to check if is a mesh representation (could be empty)::

            if primitive.mesh is not None:
                process(primitive.mesh)

        Nr@   r=   s    r6   ÚmeshzPrimitive.meshW   rA   r8   c                 ó   — y)zkYields all vertices of the path/mesh representation as
        :class:`~ezdxf.math.Vec3` objects.

        Nr@   r=   s    r6   r;   zPrimitive.verticesb   s   € ð 	r8   c                óÈ   — | j                   rt        | j                  «       «      S | j                  }|r&|rt        |j	                  «       «      S t        |«      S t        «       S )u  Returns the :class:`~ezdxf.math.BoundingBox` of the path/mesh
        representation. Returns the precise bounding box for the path
        representation if `fast` is ``False``, otherwise the bounding box for
        BÃ©zier curves is based on their control points.

        )rC   r   r;   r<   Úcontrol_verticesr   )r5   Úfastr<   s      r6   ÚbboxzPrimitive.bboxj   sR   € ð �9Š9Ü˜tŸ}™}›Ó/Ð/Ø�y‰yˆÙÙÜ" 4×#8Ñ#8Ó#:Ó;Ð;Ü Ó%Ð%Ü‹}Ðr8   r1   )r2   r   r/   úOptional[float]©ÚreturnÚbool©rK   zOptional[Path]©rK   zOptional[MeshBuilder]©rK   úIterable[Vec3]©F©rK   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r/   Ú__annotations__r7   Úpropertyr>   r<   rC   ÚabcÚabstractmethodr;   rH   r@   r8   r6   r-   r-   '   sŽ   … ñ
ð &*Ð˜UÓ)ð MQð
CØð
CØ:Ió
Cð ò!ó ð!ð òó ðð òó ðð 	×Ñòó ðõr8   r-   c                  ó&   — e Zd Zedd„«       Zdd„Zy)ÚEmptyPrimitivec                 ó   — y)NTr@   r=   s    r6   r>   zEmptyPrimitive.is_empty|   s   € àr8   c                ó   — g S r1   r@   r=   s    r6   r;   zEmptyPrimitive.vertices€   s   € Øˆ	r8   NrJ   rO   )rS   rT   rU   rX   r>   r;   r@   r8   r6   r\   r\   {   s   „ Øòó ðôr8   r\   c                  ót   ‡ — e Zd ZdZdˆ fd„Zej                  d„ «       Zedd„«       Z	ed	d„«       Z
d
d„Zˆ xZS )ÚConvertedPrimitivezdBase class for all DXF entities which store the path/mesh representation
    at instantiation.

    c                óD   •— t         ‰| �  |«       | j                  «        y r1   )Úsuperr7   Ú_convert_entity)r5   r2   Ú	__class__s     €r6   r7   zConvertedPrimitive.__init__Š   s   ø€ Ü‰Ñ˜Ô Ø×ÑÕr8   c                 ó   — y)z1This method creates the path/mesh representation.Nr@   r=   s    r6   rc   z"ConvertedPrimitive._convert_entityŽ   s   € ð 	r8   c                ó   — | j                   S r1   )r3   r=   s    r6   r<   zConvertedPrimitive.path“   ó   € à�z‰zÐr8   c                ó   — | j                   S r1   )r4   r=   s    r6   rC   zConvertedPrimitive.mesh—   rg   r8   c              #  óÞ   K  — | j                   r.| j                  j                  | j                  «      E d {  –—†  y | j                  r| j
                  j                  E d {  –—†  y y 7 Œ17 Œ­wr1   )r<   r3   Ú
flatteningr/   rC   r4   r;   r=   s    r6   r;   zConvertedPrimitive.vertices›   sT   è ø€ Ø�9Š9Ø—z‘z×,Ñ,¨T×-IÑ-IÓJ×JÑJØ�YŠYØ—z‘z×*Ñ*×*Ñ*ð ð Køà*ús!   ‚5A-·A)¸*A-Á"A+Á#A-Á+A-)r2   r   rM   rN   rO   )rS   rT   rU   rV   r7   rY   rZ   rc   rX   r<   rC   r;   Ú__classcell__)rd   s   @r6   r`   r`   „   sT   ø„ ñõ
ð 	×Ññó ðð òó ðð òó ð÷+r8   r`   c                  ó&   — e Zd Zedd„«       Zdd„Zy)ÚCurvePrimitivec                óf   — | j                   €t        | j                  «      | _         | j                   S ©z%Create path representation on demand.©r3   r   r2   r=   s    r6   r<   zCurvePrimitive.path£   ó(   € ð �:‰:ÐÜ" 4§;¡;Ó/ˆDŒJØ�z‰zÐr8   c              #  ój   K  — | j                   j                  | j                  «      E d {  –—†  y 7 Œ­wr1   )r2   rj   r/   r=   s    r6   r;   zCurvePrimitive.verticesª   s&   è ø€ ð
 —;‘;×)Ñ)¨$×*FÑ*FÓG×GÒGús   ‚)3«1¬3NrM   rO   )rS   rT   rU   rX   r<   r;   r@   r8   r6   rm   rm   ¢   s   „ Øòó ðôHr8   rm   c                  ó0   — e Zd Zedd„«       Zdd„Zddd„Zy)	ÚLinePrimitivec                óf   — | j                   €t        | j                  «      | _         | j                   S ro   rp   r=   s    r6   r<   zLinePrimitive.path´   rq   r8   c              #  ó„   K  — | j                   }|j                  j                  –— |j                  j                  –— y ­wr1   )r2   ÚdxfÚstartÚend)r5   Úes     r6   r;   zLinePrimitive.vertices»   s*   è ø€ Ø�K‰KˆØ�e‰e�k‰kÒØ�e‰e�i‰i‹ùs   ‚>A c                ó„   — | j                   }t        |j                  j                  |j                  j                  f«      S r1   )r2   r   rw   rx   ry   )r5   rG   rz   s      r6   rH   zLinePrimitive.bboxÀ   s+   € Ø�K‰KˆÜ˜AŸE™EŸK™K¨¯©¯©Ð3Ó4Ð4r8   NrM   rO   rQ   rR   ©rS   rT   rU   rX   r<   r;   rH   r@   r8   r6   rt   rt   ²   s   „ àòó ðóõ
5r8   rt   c                  ó   — e Zd Zdd„Zy)ÚLwPolylinePrimitivec                óx  — t        d| j                  «      }|j                  rˆ|j                  «       }|j                  j
                  }t        j                  |«      }t        «       }|j                  ||«      D ]  }|j                  |«       Œ t        j                  |«      | _        y t        |«      | _        y )Nr!   )r   r2   Ú	has_widthÚocsrw   Ú	elevationr   Úfrom_polyliner   Ú	faces_wcsÚadd_facer   Úfrom_builderr4   r   r3   )r5   rz   r�   r‚   ÚtbÚmbÚfaces          r6   rc   z#LwPolylinePrimitive._convert_entityÇ   s‡   € Ü˜\¨4¯;©;Ó7ˆØ�;Š;à—%‘%“'ˆCØŸ™Ÿ™ˆIÜ×+Ñ+¨AÓ.ˆBÜ!Ó#ˆBØŸ™ S¨)Ö4�Ø—‘˜DÕ!ð 5ä$×1Ñ1°"Ó5ˆD�Jä" 1›ˆD�Jr8   N©rK   ÚNone©rS   rT   rU   rc   r@   r8   r6   r~   r~   Å   s   „ ô&r8   r~   c                  ó0   — e Zd Zedd„«       Zdd„Zddd„Zy)	ÚPointPrimitivec                óŽ   — | j                   €.t        | j                  j                  j                  «      | _         | j                   S )z¦Create path representation on demand.

        :class:`Path` can not represent a point, a :class:`Path` with only a
        start point yields not vertices!

        )r3   r   r2   rw   Úlocationr=   s    r6   r<   zPointPrimitive.path×   s2   € ð �:‰:ÐÜ˜dŸk™kŸo™o×6Ñ6Ó7ˆDŒJØ�z‰zÐr8   c              #  óP   K  — | j                   j                  j                  –— y ­wr1   )r2   rw   r�   r=   s    r6   r;   zPointPrimitive.verticesã   s   è ø€ Ø�k‰k�o‰o×&Ñ&Ó&ùs   ‚$&c                óV   — t        | j                  j                  j                  f«      S r1   )r   r2   rw   r�   )r5   rG   s     r6   rH   zPointPrimitive.bboxæ   s   € Ü˜DŸK™KŸO™O×4Ñ4Ð6Ó7Ð7r8   NrM   rO   rQ   rR   r|   r@   r8   r6   rŽ   rŽ   Ö   s   „ Øò	ó ð	ó'õ8r8   rŽ   c                  ó   — e Zd Zd„ Zy)ÚMeshPrimitivec                óL   — t        j                  | j                  «      | _        y r1   )r   Ú	from_meshr2   r4   r=   s    r6   rc   zMeshPrimitive._convert_entityë   s   € Ü ×*Ñ*¨4¯;©;Ó7ˆ�
r8   NrŒ   r@   r8   r6   r”   r”   ê   s   „ ó8r8   r”   c                  ó   — e Zd Zd„ Zy)ÚQuadrilateralPrimitivec                ó8   — t        | j                  «      | _        y r1   ©r   r2   r3   r=   s    r6   rc   z&QuadrilateralPrimitive._convert_entityñ   ó   € Ü˜tŸ{™{Ó+ˆ�
r8   NrŒ   r@   r8   r6   r˜   r˜   ï   s   „ ó,r8   r˜   c                  ó   — e Zd Zdd„Zy)ÚPolylinePrimitivec                ó4  — t        d| j                  «      }|j                  rž|j                  r’|j	                  «       }|j
                  j                  j                  }t        j                  |«      }t        «       }|j                  ||«      D ]  }|j                  |«       Œ t        j                  |«      | _        y |j                  s|j                   rt#        |«      | _        y t        j&                  |«      }t        j                  |«      | _        y )Nr"   )r   r2   Úis_2d_polyliner€   r�   rw   r‚   Úzr   rƒ   r   r„   r…   r   r†   r4   Úis_3d_polyliner   r3   Úfrom_polyface)r5   rz   r�   r‚   r‡   rˆ   r‰   Úms           r6   rc   z!PolylinePrimitive._convert_entity÷   sÈ   € Ü˜: t§{¡{Ó3ˆØ×Ò §¢à—%‘%“'ˆCØŸ™Ÿ™×)Ñ)ˆIÜ×+Ñ+¨AÓ.ˆBÜ!Ó#ˆBØŸ™ S¨)Ö4�Ø—‘˜DÕ!ð 5ä$×1Ñ1°"Ó5ˆD�JØ×Ò ×!1Ò!1Ü" 1›ˆD�Jä ×.Ñ.¨qÓ1ˆAÜ$×1Ñ1°!Ó4ˆD�Jr8   NrŠ   rŒ   r@   r8   r6   r�   r�   õ   s   „ ô5r8   r�   c                  ó   — e Zd Zd„ Zy)ÚHatchPrimitivec                ó8   — t        | j                  «      | _        y r1   rš   r=   s    r6   rc   zHatchPrimitive._convert_entity
  r›   r8   NrŒ   r@   r8   r6   r¥   r¥   	  ó   „ ó,r8   r¥   gZd;ßOÕ?gZd;ßOå?c                  ó   — e Zd Zdd„Zy)ÚTextLinePrimitivec                óþ  ‡‡‡‡— ˆˆˆˆfd„}ˆˆˆfd„}t        d| j                  «      Š‰j                  «       dk(  r‰j                  j                  }n‰j                  j
                  }t        |«      }t        |«      dk(  rt        «       | _	        yt        j                  t        ‰«      ‰j                  j                  ‰j                  j                  «      }t        ||«      }‰j!                  «       \  }ŠŠ‰€‰Š|t"        j$                  k(  xs |t"        j&                  k(  Š‰j                  j(                  dkD  r|j+                  |‰‰«       t-        ‰«      \  }}‰j.                  rdnd	}	‰j0                  rdnd	}
t3        j4                  ‰j                  j6                  «      }|j9                   |«       || |«       |	|
f|¬
«      }‰j;                  «       }t=        |j?                  |«      d¬«      | _	        y)zöCalculates the rough border path for a single line text.

        Calculation is based on a monospaced font and therefore the border
        path is just an educated guess.

        Vertical text generation and oblique angle is ignored.

        c                 óš   •— ‰ r ‰j                  ‰«      s‰‰z
  j                  S t        j                  ‰j                  j
                  «      S r1   )ÚiscloseÚangleÚmathÚradiansrw   Úrotation)Úfit_or_alignedÚp1Úp2Útexts   €€€€r6   Útext_rotationz8TextLinePrimitive._convert_entity.<locals>.text_rotation  s7   ø€ Ù b§j¡j°¤nØ˜R™—‘Ð&ä—|‘| D§H¡H×$5Ñ$5Ó6Ð6r8   c                 ó2   •— ‰ r‰j                  ‰d¬«      S ‰S )Nç      à?)Úfactor)Úlerp)r±   r²   r³   s   €€€r6   r�   z3TextLinePrimitive._convert_entity.<locals>.location#  s   ø€ ÙØ—w‘w˜r¨#�wÓ.Ð.ØˆIr8   r$   ÚATTDEFr   Né   éÿÿÿÿé   )r­   ÚscaleÚobliqueT©Úclose) r   r2   Údxftyperw   Útagr´   r   r:   r   r3   r    Ú	make_fontr
   ÚheightÚwidthr   Úget_placementr   ÚFITÚALIGNEDÚhalignÚstretchr   Úis_backwardÚis_upside_downr®   r¯   r¿   Úcorner_verticesr�   r   Úpoints_to_wcs)r5   rµ   r�   ÚcontentÚfontÚ	text_lineÚ	alignmentrÊ   ÚvalignÚmirror_xÚmirror_yr¿   rÎ   r�   r±   r²   r³   r´   s                 @@@@r6   rc   z!TextLinePrimitive._convert_entity  sª  û€ ÷	7ö	ô
 �F˜DŸK™KÓ(ˆØ�<‰<‹>˜XÒ%à—h‘h—l‘l‰Gà—h‘h—m‘mˆGä˜WÓ%ˆÜˆw‹<˜1Òä›ˆDŒJØä�‰Ü˜$Ó §¡§¡°$·(±(·.±.ó
ˆô ˜W dÓ+ˆ	Ø ×.Ñ.Ó0Ñˆ	�2�rØˆ:ØˆBàÔ,×0Ñ0Ñ0ò 8ØÔ/×7Ñ7Ñ7ð 	ð �8‰8�?‰?˜QÒØ×Ñ˜i¨¨RÔ0Ü*¨4Ó0‰ˆ�Ø×)Ò)‘2¨qˆØ×,Ò,‘2°!ˆÜŸ™ d§h¡h×&6Ñ&6Ó7ˆØ#×3Ñ3Ù‹JØØÙ“/Ø˜XÐ&Øð 4ó 
ˆð �h‰h‹jˆÜ"Ø×Ñ˜oÓ.Øô
ˆ�
r8   NrŠ   rŒ   r@   r8   r6   r©   r©     s   „ ô@
r8   r©   c                  ó   — e Zd Zdd„Zy)ÚMTextPrimitivec                ó  ‡‡‡‡	‡
‡‡‡‡— dˆˆ	ˆfd„}dˆfd„Š
dˆˆ	ˆ
fd„Šdˆˆ	ˆfd„Šdˆfd„}ˆfd„Šdˆˆˆˆˆfd„}t        d| j                  «      Š‰j                  Š‰€u‰j                  j	                  d
d«      Št        j                  t        ‰«      ‰j                  j                  d«      Š	 |«       Št        ‰«      dk(  rt        «       | _        y	 |«       } |«       }t        |j                  |«      d¬«      | _        y	)zíCalculates the rough border path for a MTEXT entity.

        Calculation is based on a mono-spaced font and therefore the border
        path is just an educated guess.

        Most special features of MTEXT is not supported.

        c                 óV   •— ‰j                  d¬«      } t        | ‰‰j                  «      S )NF)Úsplit)r   r   Ú
text_width)r´   Ú	box_widthrÑ   Úmtexts    €€€r6   Úget_contentz3MTextPrimitive._convert_entity.<locals>.get_contenta  s)   ø€ Ø×#Ñ#¨%Ð#Ó0ˆDÜ˜T 9¨d¯o©oÓ>Ð>r8   c                 ó    •— t        ‰ d„ ¬«      S )Nc                ó   — t        | «      S r1   ©r:   )Úss    r6   Ú<lambda>zEMTextPrimitive._convert_entity.<locals>.get_max_str.<locals>.<lambda>f  s   € ¬c°!¬fr8   ©Úkey)Úmax)rÐ   s   €r6   Úget_max_strz3MTextPrimitive._convert_entity.<locals>.get_max_stre  s   ø€ Ü�wÑ$4Ô5Ð5r8   c                 ó\   •— ‰r‰S  ‰«       } t        | «      dk(  rd} ‰j                  | «      S )Nr   Ú )r:   rÜ   )rã   rÝ   rÑ   rè   s    €€€r6   Úget_rect_widthz6MTextPrimitive._convert_entity.<locals>.get_rect_widthh  s2   ø€ ÙØ Ð Ù“ˆAÜ�1‹v˜Š{Ø�Ø—?‘? 1Ó%Ð%r8   c                 óÐ   •— ‰j                   j                  } ‰j                   j                  }|‰j                  j                  z  dz  }|| z
  }t        ‰«      }| |z  ||dz
  z  z   S )Ng¸…ëQ¸ú?r½   )ÚmeasurementsÚtotal_heightÚ
cap_heightrw   Úline_spacing_factorr:   )Úline_heightrï   Úline_spacingÚspacingÚ
line_countrÐ   rÑ   rÞ   s        €€€r6   Úget_rect_heightz7MTextPrimitive._convert_entity.<locals>.get_rect_heightp  sl   ø€ Ø×+Ñ+×8Ñ8ˆKØ×*Ñ*×5Ñ5ˆJð &¨¯	©	×(EÑ(EÑEÈÑLˆLØ" [Ñ0ˆGÜ˜W›ˆJØ Ñ+¨g¸Àa¹Ñ.HÑHÐHr8   c                 ó|  •— ‰j                   j                  } ‰j                   j                  }t        }‰j                   j	                  d«      r‰j                   j
                  }nJ‰j                   j	                  d«      r/t        j                  ‰j                   j                  «      }t        }t        | ||¬«      S )a  Create local coordinate system:
            origin = insertion point
            z-axis = extrusion vector
            x-axis = text_direction or text rotation, text rotation requires
                extrusion vector == (0, 0, 1) or treatment like an OCS?

            Útext_directionr°   )ÚoriginÚuxÚuz)rw   ÚinsertÚ	extrusionr   Úhasattrr÷   r   Úfrom_deg_angler°   r   r   )rø   Úz_axisÚx_axisrÞ   s      €r6   Úget_ucsz/MTextPrimitive._convert_entity.<locals>.get_ucs~  sŠ   ø€ ð —Y‘Y×%Ñ%ˆFØ—Y‘Y×(Ñ(ˆFÜˆFØ�y‰y× Ñ Ð!1Ô2ØŸ™×1Ñ1‘Ø—‘×"Ñ" :Ô.ä×,Ñ,¨U¯Y©Y×-?Ñ-?Ó@�Ü�Ü˜f¨°FÔ;Ð;r8   c                 óâ   •— t        ‰«      \  } }d}d}| t        j                  k(  rd}n| t        j                  k(  rd}|t        j                  k(  rd}||fS |t        j
                  k(  rd}||fS )Nr   g      à¿g      ð¿r·   ç      ð?)r   r   ÚCENTERÚRIGHTÚMIDDLEÚBOTTOM)rÊ   rÔ   Úshift_xÚshift_yrÞ   s       €r6   Úget_shift_factorsz9MTextPrimitive._convert_entity.<locals>.get_shift_factors‘  sy   ø€ Ü.¨uÓ5‰NˆF�FØˆGØˆGØœŸ™Ò%Ø‘Øœ5Ÿ;™;Ò&Ø�ØœŸ™Ò%Ø�ð ˜GÐ#Ð#ð œ5Ÿ<™<Ò'Ø�Ø˜GÐ#Ð#r8   c                 óº  •‡— ‰r?‰j                   } ‰j                  }| dk(  s|dk(  r_t        ‰«      \  }}| dk(  r|} |dk(  rE|}nB‰j                  j	                  d ‰
«       «      } ‰j                  j	                  d ‰	«       «      }t        dd«      t        | d«      t        | | «      t        d| «      g} ‰«       \  }}t        || z  ||z  «      Šˆfd„|D «       S )zsCreate corner vertices in the local working plan, where
            the insertion point is the origin.
            g        Ú
rect_widthÚrect_heightr   c              3  ó(   •K  — | ]	  }|‰z   –— Œ y ­wr1   r@   )Ú.0ÚvÚshifts     €r6   Ú	<genexpr>zNMTextPrimitive._convert_entity.<locals>.get_corner_vertices.<locals>.<genexpr>º  s   øè ø€ Ð0¡x !�A˜•I¡xùs   ƒ)Útotal_widthrî   Ú_estimate_column_extentsrw   Úgetr   )r  r  ÚwÚhr;   ÚsxÚsyr  Úcolumnsrõ   rë   r
  rÞ   s          @€€€€€r6   Úget_corner_verticesz;MTextPrimitive._convert_entity.<locals>.get_corner_verticesŸ  sç   ù€ ñ Ø$×0Ñ0�
Ø%×2Ñ2�Ø Ò$¨°sÒ(:ô 4°EÓ:‘D�A�qØ! SÒ(Ø%&˜
Ø" cÒ)Ø&'™à"ŸY™YŸ]™]¨<¹Ó9IÓJ�
Ø#Ÿi™iŸm™m¨M¹?Ó;LÓM�ô �Q˜“
Ü�Z Ó#Ü�Z + Ó.Ü�Q˜˜Ó%ð	ˆHñ 'Ó(‰FˆB�Ü˜˜j™¨"¨{Ñ*:Ó;ˆEÛ0¡xÓ0Ð0r8   r#   NrÆ   r   r  TrÀ   )rK   z	list[str])rK   Ústr)rK   r.   )rK   r   rO   )r   r2   r  rw   r  r    rÄ   r
   Úchar_heightr:   r   r3   r   rÏ   )r5   rß   r  r  ÚucsrÎ   rÝ   r  rÐ   rÑ   rè   rõ   rë   r
  rÞ   s         @@@@@@@@@r6   rc   zMTextPrimitive._convert_entityW  sÒ   ÿø€ ÷	?õ	6÷	&÷	Iõ	<ô&	$÷	1ñ 	1ô: ˜G T§[¡[Ó1ˆØ—-‘-ˆØˆ?ØŸ	™	Ÿ™ g¨qÓ1ˆIÜ—?‘?Ü˜eÓ$ e§i¡i×&;Ñ&;¸SóˆDñ "-£ˆGÜ�7‹|˜qÒ ä!›V�”
ØÙ‹iˆÙ-Ó/ˆÜ"Ø×Ñ˜oÓ.Øô
ˆ�
r8   NrŠ   rŒ   r@   r8   r6   rØ   rØ   V  s   „ ôv
r8   rØ   c                óf  — | j                   }|€J ‚| j                  }|j                  dkD  r-|j                  d«      }t	        |«      dkD  rt        |d„ ¬«      }t        |t        j                  | j                  j                  d«      |j                  | j                  j                  d«      ¬«      S )Nr½   z\Nc                ó   — t        | «      S r1   râ   )Úts    r6   rä   z*_estimate_column_extents.<locals>.<lambda>×  s   € ¼3¸q¼6r8   rå   r  rð   )rÐ   rÑ   Úcolumn_widthrð   )r  r´   ÚcountrÛ   r:   rç   r   r    ÚMonospaceFontrw   r  rÆ   Úget_default)rÞ   r  Ú_contentÚ_columns_contents       r6   r  r  Ð  s›   € Ø�m‰m€GØÐÐÐØ�z‰z€HØ‡}�}�qÒØ#Ÿ>™>¨%Ó0ÐÜÐÓ  1Ò$ÜÐ+Ñ1AÔBˆHÜ)ØÜ× Ñ  §¡×!6Ñ!6¸Ó<Ø—]‘]Ø!ŸI™I×1Ñ1Ð2GÓHô	ð r8   c                  ó   — e Zd Zd„ Zy)ÚImagePrimitivec                ó8   — t        | j                  «      | _        y r1   rš   r=   s    r6   rc   zImagePrimitive._convert_entityá  r›   r8   NrŒ   r@   r8   r6   r)  r)  à  r§   r8   r)  c                  ó   — e Zd Zd„ Zy)ÚViewportPrimitivec                óp   — | j                   }|j                  j                  dk(  ry t        |«      | _        y )Nr   )r2   rw   Ústatusr   r3   )r5   Úvps     r6   rc   z!ViewportPrimitive._convert_entityæ  s)   € Ø�[‰[ˆØ�6‰6�=‰=˜AÒØÜ˜r“]ˆ�
r8   NrŒ   r@   r8   r6   r,  r,  å  s   „ ó#r8   r,  Ú3DFACEÚARCÚATTRIBrº   ÚCIRCLEÚELLIPSEÚHATCHÚMPOLYGONÚHELIXÚIMAGEÚLINEÚ
LWPOLYLINEÚMESHÚMTEXTÚPOINTÚPOLYLINEÚSPLINE)ÚSOLIDÚTEXTÚTRACEÚVIEWPORTÚWIPEOUTc                óx   — t         j                  | j                  «       t        «      } || «      }|r||_        |S )a  Factory to create path/mesh primitives. The `max_flattening_distance`
    defines the max distance between the approximation line and the original
    curve. Use `max_flattening_distance` to override the default value.

    Returns an **empty primitive** for unsupported entities. The `empty` state
    of a primitive can be checked by the property :attr:`is_empty`.
    The :attr:`path` and the :attr:`mesh` attributes of an empty primitive
    are ``None`` and the :meth:`vertices` method  yields no vertices.

    )Ú_PRIMITIVE_CLASSESr  rÂ   r\   r/   )r2   r/   ÚclsÚ	primitives       r6   r%   r%   
  s7   € ô ×
 Ñ
  §¡Ó!1´>Ó
B€CÙ�F“€IÙØ,Cˆ	Ô)ØÐr8   c              #  óp  K  — | D ]¥  }t        |t        «      rb|j                  dkD  r"t        |j	                  «       «      E d{  –—†  ŒD|j
                  E d{  –—†  t        t        |«      «      E d{  –—†  Œut        |t        «      rt        t        |«      «      E d{  –—†  Œ¢|–— Œ§ y7 Œj7 ŒW7 Œ=7 Œ­w)aŽ  Recursive decomposition of the given DXF entity collection into a flat
    stream of DXF entities. All block references (INSERT) and entities which provide
    a :meth:`virtual_entities` method will be disassembled into simple DXF
    sub-entities, therefore the returned entity stream does not contain any
    INSERT entity.

    Point entities will **not** be disassembled into DXF sub-entities,
    as defined by the current point style $PDMODE.

    These entity types include sub-entities and will be decomposed into
    simple DXF entities:

        - INSERT
        - DIMENSION
        - LEADER
        - MLEADER
        - MLINE

    Decomposition of XREF, UNDERLAY and ACAD_TABLE entities is not supported.

    This function does not apply the clipping path created by the XCLIP command. 
    The function returns all entities and ignores the clipping path polygon and no 
    entity is clipped.

    r½   N)Ú
isinstancer	   Úmcountr&   Úmulti_insertÚattribsr   r   )Úentitiesr2   s     r6   r&   r&     s™   è ø€ ó4 ˆÜ�fœfÔ%à�}‰}˜qÒ Ü.¨v×/BÑ/BÓ/DÓE×EÑEà!Ÿ>™>×)Ð)Ü.Ô/?ÀÓ/GÓH×HÑHä˜Ô 7Ô8ä*Ô+;¸FÓ+CÓD×DÑDà‹Lñ ð Føà)øØHøð EúsH   ‚AB6ÁB.ÁB6ÁB0ÁB6Á4B2Á5,B6Â!B4Â"B6Â0B6Â2B6Â4B6c              #  ó6   K  — | D ]  }t        ||«      –— Œ y­w)züYields all DXF entities as path or mesh primitives. Yields
    unsupported entities as empty primitives, see :func:`make_primitive`.

    Args:
        entities: iterable of DXF entities
        max_flattening_distance: override the default value

    N)r%   )rN  r/   rz   s      r6   r'   r'   H  s    è ø€ ó ˆÜ˜QÐ 7Ó8Ó8ñ ùs   ‚c              #  óN   K  — | D ]  }|j                  «       E d{  –—†  Œ y7 Œ­w)zæYields all vertices from the given `primitives`. Paths will be flattened
    to create the associated vertices. See also :func:`to_control_vertices` to
    collect only the control vertices from the paths without flattening.

    N)r;   )Ú
primitivesÚps     r6   r(   r(   X  s$   è ø€ ó ˆØ—:‘:“<×Ññ Øús   ‚%›#œ%c              #  óP   K  — | D ]  }|j                   €Œ|j                   –— Œ y­w)z~Yields all :class:`~ezdxf.path.Path` objects from the given
    `primitives`. Ignores primitives without a defined path.

    N)r<   ©rQ  Úprims     r6   r*   r*   b  ó%   è ø€ ó
 ˆØ�9‰9Ñ Ø—)‘)‹Oñ ùó   ‚&•&c              #  óP   K  — | D ]  }|j                   €Œ|j                   –— Œ y­w)z‡Yields all :class:`~ezdxf.render.MeshBuilder` objects from the given
    `primitives`. Ignores primitives without a defined mesh.

    N)rC   rT  s     r6   r+   r+   l  rV  rW  c              #  ó°   K  — | D ]I  }|j                   r#|j                   j                  «       E d{  –—†  Œ2|j                  «       E d{  –—†  ŒK y7 Œ 7 Œ	­w)z�Yields all path control vertices and all mesh vertices from the given
    `primitives`. Like :func:`to_vertices`, but without flattening.

    N)r<   rF   r;   rT  s     r6   r)   r)   v  sG   è ø€ ó
 ˆà�9Š9Ø—y‘y×1Ñ1Ó3×3Ñ3à—}‘}“×&Ñ&ñ ð 4øà&ús!   ‚/A±A²AÁ
AÁAÁA)rÞ   r#   r1   )r2   r   rK   r-   )rN  úIterable[DXFEntity]rK   rZ  )rN  rZ  r/   rI   rK   úIterable[Primitive])rQ  r[  rK   rP   )rQ  r[  rK   zIterable[Path])rQ  r[  rK   zIterable[MeshBuilder])KÚ
__future__r   Útypingr   r   r   r   rY   r®   Úezdxf.entitiesr   r	   r
   Úezdxf.lldxfr   Úezdxf.enumsr   Ú
ezdxf.mathr   r   r   r   r   Ú
ezdxf.pathr   r   r   r   Úezdxf.renderr   r   r   Úezdxf.protocolsr   r   Úezdxf.tools.textr   r   r   r   r   Úezdxf.fontsr    r!   r"   r#   r$   Ú__all__ÚABCr-   r\   r`   rm   rt   r~   rŽ   r”   r˜   r�   r¥   ÚDESCENDER_FACTORÚX_HEIGHT_FACTORr©   rØ   r  r)  r,  rF  r%   r&   r'   r(   r*   r+   r)   r@   r8   r6   Ú<module>rk     sw  ðõ #ß :Ó :Û 
Û ß ;Ñ ;å Ý +ß =Õ =ß CÓ Cß DÑ Dß E÷õ õ áß@Ó@ò€ôQ�—‘ô Qôh�Yô ô+˜ô +ô<H�Yô Hô 5�Iô 5ô&&Ð,ô &ô"8�Yô 8ô(8Ð&ô 8ô
,Ð/ô ,ô5Ð*ô 5ô(,Ð'ô ,ð
 Ð Ø€ôA
Ð*ô A
ôHw
Ð'ô w
ótô ,Ð'ô ,ô
#Ð*ô #ðØÐ$ðà	ˆ>ðð
 Ððð Ððð ˆnðð ˆ~ðð ˆ^ðð �ðð ˆ^ðð ˆ^ðð ˆMðð Ð%ðð ˆMðð  ˆ^ð!ð" ˆ^ð#ð$ Ð!ð%ð& ˆnð'ð( $ØØ#Ø!Øò1Ð ð: 04ðØðàóó('ðX 04ð9Ø!ð9à,ð9ð ó9ó  óóô
'r8   