
    Og'                       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     Y/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/entities/solid.py__getitem__z_Base.__getitem__J   s    xx||K,--    c                H    | j                   j                  t        |   |      S r9   )r:   setr   )r=   r>   values      r?   __setitem__z_Base.__setitem__M   s    xx||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6yA..s4L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xx' HHMMDHHM##
	
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     hh488--q1 	CD{{4 c223774=AB	C ;;{#33CMMBCM))ArA   c                t    | j                         }t        |j                  | j                  |                  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.

        )rf   listpoints_to_wcsvertices)r=   closerf   s      r?   wcs_verticeszSolid.wcs_vertices   s.     hhjC%%dmmE&:;<<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 )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=   rl   r:   rk   s       r?   rk   zSolid.vertices   s     hh ##((CHH=88sxxOOCHH% x=1'/{HQK$HQK!!,,Xb\:OOHQK(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;
CJ 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!   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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?    7cAg~cU344DHH,,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     7cQh~cU344'+xx'?'?18'LDHH$'+xx'?'?AH+'MDHH$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=Qx@!D**1--@@@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6yA..s4K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xx' HHMMDHHM##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]    hh121E1EXXsxx38842
.#(CHch 	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     hh ##((CHH=wwvtT"tsxx'7OOD!OOHQK(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;	BJ;	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 
5J 5 QE Q Qh E    %--A%--A%--A %--A #2q4@!	* +95 32 
 NU N NrA   