
    h'                    B   S SK Jr  S SKJrJr  S SKJr  S SKJrJ	r	J
r
JrJrJrJr  S SKJrJrJr  S SKJrJrJrJr  S SKJr  SS	KJrJr  SS
KJrJrJ r J!r!  SSK"J#r#  \(       a  S SK$J%r%  S SK&J'r'  / SQr(\
" S\" S\RR                  \S9\" S\RR                  \S9\" S\RR                  \S9\" S\RR                  \S9\" SS SS9\" SS SS9\" S\RR                  \S\RT                  \S9S.5      r+\" \+5      r,\" \!\,5      r- " S S\5      r.\# " S S\.5      5       r/\# " S  S!\/5      5       r0\
" S"\" S\RR                  \S9\" S\RR                  \S9\" S\RR                  \S9\" S\RR                  \S9\" S#S SS9S$.5      r1\" \15      r2\" \!\25      r3\# " S% S&\.5      5       r4g')(    )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                       \ rS rSrS rS rSrg)_BaseI   c                F    U R                   R                  [        U   5      $ N)dxfgetr   selfnums     F/var/www/html/env/lib/python3.13/site-packages/ezdxf/entities/solid.py__getitem___Base.__getitem__J   s    xx||K,--    c                H    U R                   R                  [        U   U5      $ r:   )r;   setr   )r>   r?   values      r@   __setitem___Base.__setitem__M   s    xx||K,e44rC    N)__name__
__module____qualname____firstlineno__rA   rG   __static_attributes__rI   rC   r@   r7   r7   I   s    .5rC   r7   c                     ^  \ rS rSrSrSr\" \\\	5      r
 S
   SU 4S jjjrSU 4S jjrSS jrSSS jjrSSS jjrS	rU =r$ )r    Q   zDXF SHAPE entitySOLIDc                   > [         [        U ]  U5      nU(       a7  UR                  U[        5        UR
                  (       a  [        U[        5        U$ z!Loading interface. (internal API))superr   load_dxf_attribssimple_dxfattribs_loadermerged_trace_group_codesr12r   r   r>   	processorr;   	__class__s      r@   rU   Solid.load_dxf_attribsX   s@    
 J6yA..s4LM}}#C5
rC   c                Z  > [         TU ]  U5        UR                  [        :  a$  UR	                  [
        [        R                  5        U R                  R                  S5      (       d%  U R                  R                  U R                  l        U R                  R                  U/ SQ5        g)z7Export entity specific data as DXF tags. (internal API)r2   )r/   r0   r1   r2   r4   r5   N)rT   export_entity
dxfversionr   
write_tag2r   
acdb_tracenamer;   hasattrr1   r2   export_dxf_attribsr>   	tagwriterr[   s     r@   r^   Solid.export_entitye   st    i(%'  *//Bxx'' HHMMDHHM##
	
rC   c           	        U R                   n[        U R                   R                  U5      n[         HJ  nUR	                  U5      (       d  M  UR                  XCR                  UR                  U5      5      5        ML     UR	                  S5      (       a   UR                  UR                  5      Ul	        UR                  Ul        U R                  U5        U $ )zFTransform the SOLID/TRACE entity by transformation matrix `m` inplace.r4   )r;   r   r5   r   rc   rE   transform_vertexr<   transform_thicknessr4   new_extrusionpost_transform)r>   mr;   ocsrb   s        r@   	transformSolid.transformx   s     hh488--q1D{{4  223774=AB   ;;{##33CMMBCM))ArC   c                t    U R                  5       n[        UR                  U R                  U5      5      5      $ )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.

)rn   listpoints_to_wcsvertices)r>   closern   s      r@   wcs_verticesSolid.wcs_vertices   s.     hhjC%%dmmE&:;<<rC   c                |   U R                   nUR                  UR                  UR                  /nUR                  UR                  :w  a  UR                  UR                  5        [        U5      S:  a  US   US   sUS'   US'   U(       a0  US   R                  US   5      (       d  UR                  US   5        U$ )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>   ru   r;   rt   s       r@   rt   Solid.vertices   s     hh ##((CHH=88sxxOOCHH% x=1'/{HQK$HQK!!,,Xb\::OOHQK(rC   rI   r:   rZ   zOptional[SubclassProcessor]returnr   rf   r   r   None)rm   r   r   r    Fru   boolr   z
list[Vec3])rJ   rK   rL   rM   __doc__DXFTYPEr   r   r   ra   
DXFATTRIBSrU   r^   ro   rv   rt   rN   __classcell__r[   s   @r@   r    r    Q   sQ    Gz;
CJ 8<4	 
&= rC   r    c                      \ rS rSrSrSrSrg)r!      zDXF TRACE entityTRACErI   N)rJ   rK   rL   rM   r   r   rN   rI   rC   r@   r!   r!      s
    GrC   r!   AcDbFaceF   r/   r0   r1   r2   invisible_edgesc                     ^  \ rS rSrSrSr\" \\\	5      r
SS jrSSS jjrSS jr S   SU 4S jjjrSU 4S jjrSS	 jrSSS
 jjrSrU =r$ )r"      zDXF 3DFACE entity3DFACEc                    US:  d  US:  a  [        SU 35      e[        U R                  R                  SU-  -  5      $ )z0Returns True if edge `num` is an invisible edge.r      invalid edge: r   )
ValueErrorr   r;   r   r=   s     r@   is_invisible_edgeFace3d.is_invisible_edge   s?    7cAg~cU344DHH,,S9::rC   c                    US:  d  US:  a  [        SU 35      eU(       d,  U R                  R                  SU-  -  U R                  l        gU R                  R                  SU-  ) -  U R                  l        g)zWSet 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_visibilityFace3d.set_edge_visibility   sf     7cQh~cU344'+xx'?'?18'LDHH$'+xx'?'?AH+'MDHH$rC   c                j    [        S5       Vs/ s H  oR                  U5      (       + PM     sn$ s  snf )Nr   )ranger   )r>   is     r@   get_edges_visibilityFace3d.get_edges_visibility   s,     8=Qx@x!**1--x@@@s   0c                h   > [         [        U ]  U5      nU(       a  UR                  U[        5        U$ rS   )rT   r   rU   rV   merged_face_group_codesrY   s      r@   rU   Face3d.load_dxf_attribs   s/    
 J6yA..s4KL
rC   c                Z  > [         TU ]  U5        UR                  [        :  a$  UR	                  [
        [        R                  5        U R                  R                  S5      (       d%  U R                  R                  U R                  l        U R                  R                  U/ SQ5        g )Nr2   r   )rT   r^   r_   r   r`   r   	acdb_facerb   r;   rc   r1   r2   rd   re   s     r@   r^   Face3d.export_entity   sr    i(%'  )..Axx'' HHMMDHHM##J	
rC   c                    U R                   nUR                  UR                  UR                  UR                  UR
                  45      u  Ul        Ul        Ul        Ul        U R                  U5        U $ )zBTransform the 3DFACE  entity by transformation matrix `m` inplace.)r;   transform_verticesr/   r0   r1   r2   rl   )r>   rm   r;   s      r@   ro   Face3d.transform   s]    hh121E1EXXsxx38842
.#(CHch 	ArC   c                &   U R                   nUR                  UR                  UR                  /nUR	                  S5      n[        U[        5      (       a   XBR                  :w  a  UR                  U5        U(       a  UR                  US   5        U$ )aW  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   r|   )r>   ru   r;   rt   r2   s        r@   rv   Face3d.wcs_vertices  sl     hh ##((CHH=wwvtT""txx'7OOD!OOHQK(rC   rI   )r?   intr   r   r   )r?   r   r   r   r   r   )r   z
list[bool]r:   r   r   )rm   r   r   r"   r   )rJ   rK   rL   rM   r   r   r   r   r   r   r   r   r   r   rU   r^   ro   rv   rN   r   r   s   @r@   r"   r"      s_    
 Gz;	BJ;	NA 8<4	 
 rC   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_vectorra   acdb_trace_group_codesrW   r7   r    r!   r   acdb_face_group_codesr   r"   rI   rC   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rC   