
    'j'                       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j)        e           edej)        e           edej)        e           edej)        e           edd d           edd d           edej)        edej*        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j)        e           edej)        e           edej)        e           edej)        e           ed#d d          d$          Z1 ee1          Z2 ee!e2          Z3e# G d% d&e.                      Z4d'S )(    )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dS )_Basec                L    | j                             t          |                   S N)dxfgetr   selfnums     N/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/entities/solid.py__getitem__z_Base.__getitem__J   s    x||K,---    c                N    | j                             t          |         |          S r9   )r:   setr   )r=   r>   values      r?   __setitem__z_Base.__setitem__M   s    x||K,e444rA   N)__name__
__module____qualname__r@   rE    rA   r?   r7   r7   I   s2        . . .5 5 5 5 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SOLIDN	processorOptional[SubclassProcessor]returnr   c                    t          t          |                               |          }|r7|                    |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=   rL   r:   	__class__s      r?   rR   zSolid.load_dxf_attribsX   s`    
 J%%66yAA 	6..s4LMMM} 6#C555
rA   	tagwriterr   Nonec                N   t                                          |           |j        t          k    r%|                    t
          t          j                   | j        	                    d          s| j        j
        | j        _        | j                            |g d           dS )z7Export entity specific data as DXF tags. (internal API)r2   )r/   r0   r1   r2   r4   r5   N)rQ   export_entity
dxfversionr   
write_tag2r   
acdb_tracenamer:   hasattrr1   r2   export_dxf_attribsr=   rX   rW   s     r?   r[   zSolid.export_entitye   s    i(((%''  */BBBx'' 	* HMDHM##  
	
 
	
 
	
 
	
 
	
rA   mr   c           	        | j         }t          | j         j        |          }t          D ]S}|                    |          r<|                    ||                    |                    |                               T|                    d          r|                    |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=   rc   r:   ocsr_   s        r?   	transformzSolid.transformx   s     h48-q11 	C 	CD{{4   Cc223774==AABBB;;{## 	C33CMBBCM)ArA   Fclosebool
list[Vec3]c                    |                                  }t          |                    |                     |                              S )zReturns 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.

        )ri   listpoints_to_wcsvertices)r=   rk   ri   s      r?   wcs_verticeszSolid.wcs_vertices   s9     hhjjC%%dmmE&:&:;;<<<rA   c                `   | j         }|j        |j        |j        g}|j        |j        k    r|                    |j                   t          |          dk    r|d         |d         c|d<   |d<   |r<|d                             |d                   s|                    |d                    |S )zReturns 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=   rk   r:   rq   s       r?   rq   zSolid.vertices   s     h ##(CH=8sxOOCH%%% x==1'/{HQK$HQK! 	)!,,Xb\:: 	)OOHQK(((rA   r9   rL   rM   rN   r   rX   r   rN   rY   )rc   r   rN   r    Frk   rl   rN   rm   )rF   rG   rH   __doc__DXFTYPEr   r   r   r^   
DXFATTRIBSrR   r[   rj   rr   rq   __classcell__rW   s   @r?   r    r    Q   s        Gz;
CCJ 8<      
 
 
 
 
 
&   = = = = =        rA   r    c                      e Zd ZdZdZdS )r!   zDXF TRACE entityTRACEN)rF   rG   rH   r~   r   rI   rA   r?   r!   r!      s        GGGrA   r!   AcDbFaceF   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3DFACEr>   intrN   rl   c                |    |dk     s|dk    rt          d|           t          | j        j        d|z  z            S )z0Returns True if edge `num` is an invisible edge.r      invalid edge: r   )
ValueErrorrl   r:   r   r<   s     r?   is_invisible_edgezFace3d.is_invisible_edge   sF    77cAgg3c33444DH,S9:::rA   FvisiblerY   c                    |dk     s|dk    rt          d|           |s| j        j        d|z  z  | j        _        dS | j        j        d|z   z  | j        _        dS )zgSet visibility of edge `num`, status `True` for visible, status
        `False` for invisible.
        r   r   r   r   N)r   r:   r   )r=   r>   r   s      r?   set_edge_visibilityzFace3d.set_edge_visibility   ss     77cQhh3c33444 	N'+x'?18'LDH$$$'+x'?AH+'MDH$$$rA   
list[bool]c                :      fdt          d          D             S )Nc                <    g | ]}                     |           S rI   )r   ).0ir=   s     r?   
<listcomp>z/Face3d.get_edges_visibility.<locals>.<listcomp>   s*    @@@!D**1---@@@rA   r   )range)r=   s   `r?   get_edges_visibilityzFace3d.get_edges_visibility   s&     A@@@uQxx@@@@rA   NrL   rM   r   c                    t          t          |                               |          }|r|                    |t                     |S rP   )rQ   r   rR   rS   merged_face_group_codesrV   s      r?   rR   zFace3d.load_dxf_attribs   sG    
 J%%66yAA 	M..s4KLLL
rA   rX   r   c                N   t                                          |           |j        t          k    r%|                    t
          t          j                   | j        	                    d          s| j        j
        | j        _        | j                            |g d           d S )Nr2   r   )rQ   r[   r\   r   r]   r   	acdb_facer_   r:   r`   r1   r2   ra   rb   s     r?   r[   zFace3d.export_entity   s    i(((%''  ).AAAx'' 	* HMDHM##JJJ	
 	
 	
 	
 	
rA   rc   r   c                    | j         }|                    |j        |j        |j        |j        f          \  |_        |_        |_        |_        |                     |           | S )zBTransform the 3DFACE  entity by transformation matrix `m` inplace.)r:   transform_verticesr/   r0   r1   r2   rh   )r=   rc   r:   s      r?   rj   zFace3d.transform   s^    h121E1EXsx3842
 2
.#(CHch 	ArA   rk   rm   c                
   | j         }|j        |j        |j        g}|                    d          }t          |t                    r ||j        k    r|                    |           |r|                    |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   rw   )r=   rk   r:   rq   r2   s        r?   rr   zFace3d.wcs_vertices  s     h ##(CH=wwvtT""	"'+sx'7'7OOD!!! 	)OOHQK(((rA   )r>   r   rN   rl   r|   )r>   r   r   rl   rN   rY   )rN   r   r9   rz   r{   )rc   r   rN   r"   r}   )rF   rG   rH   r~   r   r   r   r   r   r   r   r   r   rR   r[   rj   rr   r   r   s   @r?   r"   r"      s        
 Gz;	BBJ; ; ; ;	N 	N 	N 	N 	NA A A A 8<      
 
 
 
 
 
           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_vectorr^   acdb_trace_group_codesrT   r7   r    r!   r   acdb_face_group_codesr   r"   rI   rA   r?   <module>r      s6   # " " " " " * * * * * * * * ! ! ! ! ! !                  B A A A A A A A A A 6 6 6 6 6 6 6 6 6 6 6 6 2 2 2 2 2 2 4 4 4 4 4 4 4 4            % $ $ $ $ $ ,777777++++++
&
&
&[ %-AAA%-AAA%-AAA %-AAA WRT:::WRT:::W-2 
 
 
- ! !
D ,+J77 443  
5 5 5 5 5J 5 5 5 Q Q Q Q QE Q Q Qh     E    K %-AAA%-AAA%-AAA %-AAA #72q4@@@!  	* +*955 332  
 N N N N NU N N N N NrA   