Ë
    £èhõ(  ã                  ó€  — d dl mZ d dlmZ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 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&m'Z' g d¢Z( e
d edejR                  e¬«       edejR                  e¬«       edejR                  e¬«       edejR                  e¬«       edd d¬«       edd d¬«       edejR                  edejT                  e¬«      dœ«      Z+ ee+«      Z, ee!e,«      Z- G d„ de«      Z.e# G d„ de.«      «       Z/e# G d „ d!e/«      «       Z0 e
d" edejR                  e¬«       edejR                  e¬«       edejR                  e¬«       edejR                  e¬«       ed#d d¬«      d$œ«      Z1 ee1«      Z2 ee!e2«      Z3e# G d%„ d&e.«      «       Z4y')(é    )Úannotations)ÚTYPE_CHECKINGÚOptional)Ú	validator)ÚDXFAttrÚDXFAttributesÚDefSubclassÚXTypeÚRETURN_DEFAULTÚgroup_code_mappingÚmerge_group_code_mappings)ÚDXF12ÚSUBCLASS_MARKERÚVERTEXNAMES)ÚMatrix44ÚZ_AXISÚNULLVECÚVec3)ÚOCSTransformé   )Ú
base_classÚSubclassProcessor)Ú
DXFGraphicÚacdb_entityÚelevation_to_z_axisÚacdb_entity_group_codes)Úregister_entity)ÚAbstractTagWriter)ÚDXFNamespace)ÚSolidÚTraceÚFace3dÚ	AcDbTraceé
   )ÚxtypeÚdefaulté   é   é   é&   T)r&   Úoptionalé'   éÒ   )r%   r&   r+   r   Úfixer)Úvtx0Úvtx1Úvtx2Úvtx3Ú	elevationÚ	thicknessÚ	extrusionc                  ó   — e Zd Zd„ Zd„ Zy)Ú_Basec                óF   — | j                   j                  t        |   «      S ©N)ÚdxfÚgetr   ©ÚselfÚnums     ú4lib/python3.12/site-packages/ezdxf/entities/solid.pyÚ__getitem__z_Base.__getitem__J   s   € Ø�x‰x�|‰|œK¨Ñ,Ó-Ð-ó    c                óH   — | j                   j                  t        |   |«      S r9   )r:   Úsetr   )r=   r>   Úvalues      r?   Ú__setitem__z_Base.__setitem__M   s   € Ø�x‰x�|‰|œK¨Ñ,¨eÓ4Ð4rA   N)Ú__name__Ú
__module__Ú__qualname__r@   rE   © rA   r?   r7   r7   I   s   „ ò.ó5rA   r7   c                  ón   ‡ — e Zd ZdZdZ eeee«      Z		 d	 	 	 d	ˆ fd„Z
d
ˆ fd„Zdd„Zddd„Zddd„Zˆ xZS )r    zDXF SHAPE entityÚSOLIDc                ó–   •— t         t        | �  |«      }|r2|j                  |t        «       |j
                  rt        |t        «       |S ©z!Loading interface. (internal API))Úsuperr   Úload_dxf_attribsÚsimple_dxfattribs_loaderÚmerged_trace_group_codesÚr12r   r   ©r=   Ú	processorr:   Ú	__class__s      €r?   rO   zSolid.load_dxf_attribsX   s@   ø€ ô
 ”J Ñ6°yÓAˆÙØ×.Ñ.¨sÔ4LÔMØ�}Š}ä# C¬Ô5Øˆ
rA   c                óN  •— t         ‰| �  |«       |j                  t        kD  r$|j	                  t
        t        j                  «       | j                  j                  d«      s%| j                  j                  | j                  _        | j                  j                  |g d¢«       y)z7Export entity specific data as DXF tags. (internal API)r2   )r/   r0   r1   r2   r4   r5   N)rN   Úexport_entityÚ
dxfversionr   Ú
write_tag2r   Ú
acdb_traceÚnamer:   Úhasattrr1   r2   Úexport_dxf_attribs©r=   Ú	tagwriterrU   s     €r?   rW   zSolid.export_entitye   sq   ø€ ä‰Ñ˜iÔ(Ø×Ñ¤%Ò'Ø× Ñ ¤´*·/±/ÔBØ�x‰x×Ñ Ô'Ø ŸH™HŸM™MˆD�H‰HŒMØ�‰×#Ñ#Øòõ
	
rA   c           	     óž  — | j                   }t        | j                   j                  |«      }t        D ]D  }|j	                  |«      sŒ|j                  ||j                  |j                  |«      «      «       ŒF |j	                  d«      r |j                  |j                  «      |_	        |j                  |_        | j                  |«       | S )zFTransform the SOLID/TRACE entity by transformation matrix `m` inplace.r4   )r:   r   r5   r   r\   rC   Útransform_vertexr;   Útransform_thicknessr4   Únew_extrusionÚpost_transform)r=   Úmr:   Úocsr[   s        r?   Ú	transformzSolid.transformx   sž   € ð �h‰hˆÜ˜4Ÿ8™8×-Ñ-¨qÓ1ˆßˆDØ�{‰{˜4Õ Ø—‘˜˜c×2Ñ2°3·7±7¸4³=ÓAÕBð  ð �;‰;�{Ô#Ø×3Ñ3°C·M±MÓBˆCŒMØ×)Ñ)ˆŒØ×Ñ˜AÔØˆrA   c                ót   — | j                  «       }t        |j                  | j                  |«      «      «      S )zÚReturns WCS vertices in correct order,
        if argument `close` is ``True``, last vertex == first vertex.
        Does **not** return the duplicated last vertex if the entity represents
        a triangle.

        )rf   ÚlistÚpoints_to_wcsÚvertices)r=   Úcloserf   s      r?   Úwcs_verticeszSolid.wcs_vertices†   s.   € ð �h‰h‹jˆÜ�C×%Ñ% d§m¡m°EÓ&:Ó;Ó<Ð<rA   c                ód  — | j                   }|j                  |j                  |j                  g}|j                  |j                  k7  r|j                  |j                  «       t        |«      dkD  r|d   |d   c|d<   |d<   |r+|d   j                  |d   «      s|j                  |d   «       |S )zÚReturns OCS vertices in correct order,
        if argument `close` is ``True``, last vertex == first vertex.
        Does **not** return the duplicated last vertex if the entity represents
        a triangle.

        é   é   r   éÿÿÿÿ)r:   r/   r0   r1   r2   ÚappendÚlenÚisclose)r=   rl   r:   rk   s       r?   rk   zSolid.vertices�   sœ   € ð �h‰hˆØ #§¡¨#¯(©(°C·H±HÐ=ˆØ�8‰8�s—x‘xÒØ�O‰O˜CŸH™HÔ%ô ˆx‹=˜1ÒØ'/°¡{°H¸Q±KÐ$ˆH�Q‰K˜ !™á˜ !™×,Ñ,¨X°b©\Ô:Ø�O‰O˜H Q™KÔ(ØˆrA   r9   ©rT   zOptional[SubclassProcessor]Úreturnr   ©r_   r   rv   ÚNone)re   r   rv   r    ©F©rl   Úboolrv   z
list[Vec3])rF   rG   rH   Ú__doc__ÚDXFTYPEr   r   r   rZ   Ú
DXFATTRIBSrO   rW   rg   rm   rk   Ú__classcell__©rU   s   @r?   r    r    Q   sL   ø„ áà€GÙ˜z¨;¸
ÓC€Jð 8<ðØ4ðà	õõ
ó&ô=÷ð rA   r    c                  ó   — e Zd ZdZdZy)r!   zDXF TRACE entityÚTRACEN)rF   rG   rH   r|   r}   rI   rA   r?   r!   r!   ¦   s
   „ áà�GrA   r!   ÚAcDbFaceéF   ©r/   r0   r1   r2   Úinvisible_edgesc                  ó~   ‡ — e Zd ZdZdZ eeee«      Z	d
d„Z
ddd„Zdd„Z	 d	 	 	 dˆ fd„Zdˆ fd„Zdd„Zddd	„Zˆ xZS )r"   zDXF 3DFACE entityÚ3DFACEc                ó|   — |dk  s|dkD  rt        d|› �«      ‚t        | j                  j                  d|z  z  «      S )z0Returns True if edge `num` is an invisible edge.r   é   úinvalid edge: r   )Ú
ValueErrorr{   r:   r†   r<   s     r?   Úis_invisible_edgezFace3d.is_invisible_edgeÒ   s?   € à�Š7�c˜A’gÜ˜~¨c¨UÐ3Ó4Ð4Ü�D—H‘H×,Ñ,°°S±Ñ9Ó:Ð:rA   c                óè   — |dk  s|dk\  rt        d|› �«      ‚|s,| j                  j                  d|z  z  | j                  _        y| j                  j                  d|z   z  | j                  _        y)zgSet visibility of edge `num`, status `True` for visible, status
        `False` for invisible.
        r   rŠ   r‹   r   N)rŒ   r:   r†   )r=   r>   Úvisibles      r?   Úset_edge_visibilityzFace3d.set_edge_visibilityØ   sf   € ð �Š7�c˜Q’hÜ˜~¨c¨UÐ3Ó4Ð4ÙØ'+§x¡x×'?Ñ'?À1ÈÁ8Ñ'LˆD�H‰HÕ$à'+§x¡x×'?Ñ'?ÀAÈÁHÀ+Ñ'MˆD�H‰HÕ$rA   c                ó^   — t        d«      D �cg c]  }| j                  |«       ‘Œ c}S c c}w )NrŠ   )Úranger�   )r=   Úis     r?   Úget_edges_visibilityzFace3d.get_edges_visibilityã   s.   € ô 8=¸Q´xÓ@±x°!�D×*Ñ*¨1Ó-Ò-°xÑ@Ð@ùÒ@s   Ž*c                ó^   •— t         t        | �  |«      }|r|j                  |t        «       |S rM   )rN   r   rO   rP   Úmerged_face_group_codesrS   s      €r?   rO   zFace3d.load_dxf_attribsè   s/   ø€ ô
 ”J Ñ6°yÓAˆÙØ×.Ñ.¨sÔ4KÔLØˆ
rA   c                óN  •— t         ‰| �  |«       |j                  t        kD  r$|j	                  t
        t        j                  «       | j                  j                  d«      s%| j                  j                  | j                  _        | j                  j                  |g d¢«       y )Nr2   r…   )rN   rW   rX   r   rY   r   Ú	acdb_facer[   r:   r\   r1   r2   r]   r^   s     €r?   rW   zFace3d.export_entityò   so   ø€ Ü‰Ñ˜iÔ(Ø×Ñ¤%Ò'Ø× Ñ ¤´)·.±.ÔAØ�x‰x×Ñ Ô'Ø ŸH™HŸM™MˆD�H‰HŒMØ�‰×#Ñ#ØÒJõ	
rA   c                óì   — | j                   }|j                  |j                  |j                  |j                  |j
                  f«      \  |_        |_        |_        |_        | j                  |«       | S )zBTransform the 3DFACE  entity by transformation matrix `m` inplace.)r:   Útransform_verticesr/   r0   r1   r2   rd   )r=   re   r:   s      r?   rg   zFace3d.transformü   s]   € à�h‰hˆà12×1EÑ1EØ�X‰X�s—x‘x §¡¨3¯8©8Ð4ó2
Ñ.ˆŒ�#”(˜CœH c¤hð 	×Ñ˜AÔØˆrA   c                ó  — | j                   }|j                  |j                  |j                  g}|j	                  d«      }t        |t        «      r ||j                  k7  r|j                  |«       |r|j                  |d   «       |S )a  Returns WCS vertices, if argument `close` is ``True``,
        the first vertex is also returned as closing last vertex.

        Returns 4 vertices when `close` is ``False`` and 5 vertices when `close` is
        ``True``.  Some edges may have zero-length.  This is a compatibility interface
        to SOLID and TRACE. The 3DFACE entity is already defined by WCS vertices.
        r2   r   )r:   r/   r0   r1   r;   Ú
isinstancer   rr   )r=   rl   r:   rk   r2   s        r?   rm   zFace3d.wcs_vertices  sk   € ð �h‰hˆØ #§¡¨#¯(©(°C·H±HÐ=ˆØ�w‰w�v‹ˆä�tœTÔ" t¨s¯x©xÒ'7à�O‰O˜DÔ!ÙØ�O‰O˜H Q™KÔ(ØˆrA   )r>   Úintrv   r{   ry   )r>   r�   r�   r{   rv   rx   )rv   z
list[bool]r9   ru   rw   )re   r   rv   r"   rz   )rF   rG   rH   r|   r}   r   r   r   r˜   r~   r�   r�   r”   rO   rW   rg   rm   r   r€   s   @r?   r"   r"   È   sZ   ø„ áð
 €GÙ˜z¨;¸	ÓB€Jó;ô	NóAð 8<ðØ4ðà	õõ
ó÷ð rA   r"   N)5Ú
__future__r   Útypingr   r   Úezdxf.lldxfr   Úezdxf.lldxf.attributesr   r   r	   r
   r   r   r   Úezdxf.lldxf.constr   r   r   Ú
ezdxf.mathr   r   r   r   Úezdxf.math.transformtoolsr   Ú	dxfentityr   r   Údxfgfxr   r   r   r   Úfactoryr   Úezdxf.lldxf.tagwriterr   Úezdxf.entitiesr   Ú__all__Úpoint3dÚis_not_null_vectorrZ   Úacdb_trace_group_codesrQ   r7   r    r!   r˜   Úacdb_face_group_codesr–   r"   rI   rA   r?   Ú<module>r¯      sì  ðõ #ß *Ý !÷÷ ñ ÷ BÑ Aß 6Ó 6Ý 2ß 4÷ó õ %áÝ7Ý+â
&€áØñ ˜ %§-¡-¸ÔAá˜ %§-¡-¸ÔAá˜ %§-¡-¸ÔAñ ˜ %§-¡-¸ÔAñ ˜R¨°TÔ:á˜R¨°TÔ:ÙØØ—-‘-ØØØ×2Ñ2Ø ô
ñ-ó!€
ñD ,¨JÓ7Ð Ù4ØÐ3óÐ ô
5ˆJô 5ð ôQˆEó Qó ðQðh ôˆEó ó ðñ Øñ ˜ %§-¡-¸ÔAá˜ %§-¡-¸ÔAá˜ %§-¡-¸ÔAñ ˜ %§-¡-¸ÔAñ # 2¨q¸4Ô@ñ!ó€	ñ* +¨9Ó5Ð Ù3ØÐ2óÐ ð
 ôNˆUó Nó ñNrA   