Ë
    £èhÆG  ã                  óŽ  — d dl mZ d dlmZmZmZmZmZmZ d dl	m
Z
 d dlZd dlZd dlmZ d dl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m Z  d dl!m"Z"m#Z#m$Z$ d dl%m&Z&m'Z'm(Z( d dl)m*Z* ddl+m,Z,m-Z- ddl.m/Z/m0Z0 ddl1m2Z2 ddlm3Z3 erd dl4m5Z5m6Z6 d dl7m8Z8 d dl9m:Z: d dlm;Z; ddgZ< ed edd¬«       edd ejz                  e¬«       edd ej|                  e¬«      d œ«      Z? ee?«      Z@ G d!„ d"e#«      ZA G d#„ d$e$«      ZBd.d%„ZCd/d&„ZDd0d'„ZEd1d(„ZF	 	 	 	 	 	 	 	 d2d)„ZGd3d*„ZHd+ZIe2 G d,„ de/«      «       ZJ G d-„ d«      ZKy)4é    )Úannotations)ÚTYPE_CHECKINGÚIterableÚSequenceÚUnionÚIteratorÚOptional)ÚSelfN)Úchain)Úcontextmanager)Ú
AuditError)Ú	validator)ÚDXFAttrÚDXFAttributesÚDefSubclassÚRETURN_DEFAULTÚgroup_code_mapping)ÚSUBCLASS_MARKERÚDXF2000ÚDXFValueErrorÚDXFStructureErrorÚDXFIndexError)ÚVertexArrayÚTagArrayÚTagList)ÚMatrix44ÚUVecÚVec3)Útake2é   )Ú
base_classÚSubclassProcessor)Ú
DXFGraphicÚacdb_entity)Úregister_entity)Údefault_copy)ÚDXFNamespaceÚ	DXFEntity)ÚAbstractTagWriter)ÚTags)ÚAuditorÚMeshÚMeshDataÚAcDbSubDMeshéG   é   )ÚdefaultéH   )r1   r   Úfixeré[   ©ÚversionÚblend_creaseÚsubdivision_levelsc                  ó0   — e Zd ZdZdd„Zdd„Zd	d„Zd
d„Zy)Ú	EdgeArrayÚLc                ó2   — t        | j                  «      dz  S )Nr0   ©ÚlenÚvalues©Úselfs    ú3lib/python3.12/site-packages/ezdxf/entities/mesh.pyÚ__len__zEdgeArray.__len__b   s   € Ü�4—;‘;Ó 1Ñ$Ð$ó    c              #  óH   K  — t        | j                  «      D ]  }|–— Œ y ­w©N)r   r?   )rA   Úedges     rB   Ú__iter__zEdgeArray.__iter__e   s   è ø€ Ü˜$Ÿ+™+Ö&ˆDØ‹Jñ 'ùs   ‚ "c                ót   — t        j                   | j                  t        j                  |«      «      | _        y rF   )ÚarrayÚDTYPEr   Úfrom_iterabler?   ©rA   Úedgess     rB   Úset_datazEdgeArray.set_datai   s#   € Ü—k‘k $§*¡*¬e×.AÑ.AÀ%Ó.HÓIˆ�rD   c                óš   — |j                  dt        | j                  «      dz  «       | j                  D ]  }|j                  d|«       Œ y )Né^   r0   éZ   )Ú
write_tag2r>   r?   )rA   Ú	tagwriterÚindexs      rB   Ú
export_dxfzEdgeArray.export_dxfl   s>   € à×Ñ˜R¤ T§[¡[Ó!1°QÑ!6Ô7Ø—[”[ˆEØ× Ñ   UÕ+ñ !rD   N©ÚreturnÚint)rX   zIterator[tuple[int, int]]©rN   zIterable[tuple[int, int]]rX   ÚNone©rT   r)   )Ú__name__Ú
__module__Ú__qualname__rK   rC   rH   rO   rV   © rD   rB   r:   r:   _   s   „ Ø€Eó%óóJô,rD   r:   c                  ó4   — e Zd Zdd„Zdd„Zd	d„Zdd„Zd
d„Zy)ÚFaceListc                ó,   — t        | j                  «      S rF   r=   r@   s    rB   rC   zFaceList.__len__t   s   € Ü�4—;‘;ÓÐrD   c                ó,   — t        | j                  «      S rF   )Úiterr?   r@   s    rB   rH   zFaceList.__iter__w   s   € Ü�D—K‘KÓ Ð rD   c                óÎ   — |j                  d| j                  «       «       | j                  D ]6  }|j                  dt        |«      «       |D ]  }|j                  d|«       Œ Œ8 y )Né]   rR   )rS   Ú	tag_countr?   r>   )rA   rT   ÚfacerU   s       rB   rV   zFaceList.export_dxfz   sU   € à×Ñ˜R §¡Ó!1Ô2Ø—K”KˆDØ× Ñ  ¤S¨£YÔ/Û�Ø×$Ñ$ R¨Õ/ñ ñ  rD   c                óf   — t        | j                  «      t        d„ | j                  D «       «      z   S )Nc              3  ó2   K  — | ]  }t        |«      –— Œ y ­wrF   )r>   )Ú.0Úfs     rB   Ú	<genexpr>z%FaceList.tag_count.<locals>.<genexpr>ƒ   s   è ø€ Ð%B±k°¤c¨!§f±kùs   ‚)r>   r?   Úsumr@   s    rB   rh   zFaceList.tag_count‚   s%   € Ü�4—;‘;Ó¤#Ñ%B°d·k²kÓ%BÓ"BÑBÐBrD   c                óX   — g }|D ]  }|j                  t        |«      «       Œ || _        y rF   )ÚappendÚface_to_arrayr?   )rA   ÚfacesÚ_facesri   s       rB   rO   zFaceList.set_data…   s)   € ØˆÛˆDØ�M‰Mœ-¨Ó-Õ.ð àˆ�rD   NrW   )rX   zIterable[array.array]r\   ©rs   zIterable[Sequence[int]]rX   r[   )r]   r^   r_   rC   rH   rV   rh   rO   r`   rD   rB   rb   rb   s   s   „ ó ó!ó0óCôrD   rb   c                óh   — t        | «      }|dk  rd}n
|dk  rd}nd}t        j                  || «      S )Né   ÚBi   ÚIr;   )ÚmaxrJ   )ri   Ú	max_indexÚdtypes      rB   rr   rr   Œ   s:   € Ü�D“	€IØ�3‚Ø‰Ø	�UÒ	Ø‰àˆÜ�;‰;�u˜dÓ#Ð#rD   c                óz   — | j                  d|¬«      }t        |D �cg c]  }|j                  ‘Œ c}¬«      S c c}w )N)é
   ©ÚcodesÚstart©Údata)Úcollect_consecutive_tagsr   Úvalue)ÚtagsÚstart_indexÚvertex_tagsÚts       rB   Úcreate_vertex_arrayrŠ   —   s8   € Ø×/Ñ/°eÀ;Ð/ÓO€KÜ©kÓ:©k¨˜QŸW›W¨kÑ:Ô;Ð;ùÒ:s   �8c                ó>  — t        «       }|j                  }g }d}| j                  d|¬«      D ]P  }|s,|j                  }|sŒ|j	                  t        |«      «       g }Œ1|dz  }|j	                  |j                  «       ŒR |r|j	                  t        |«      «       |S )Nr   )rR   r   r    )rb   r?   r„   r…   rq   rr   )r†   r‡   rs   Ú
faces_listri   ÚcounterÚtags          rB   Úcreate_face_listr�   œ   s–   € Ü‹J€EØ—‘€JØ€DØ€GØ×,Ñ,°5ÀÐ,ÖLˆÙà—i‘iˆGÚà×!Ñ!¤-°Ó"5Ô6Ø‘ð �q‰LˆGØ�K‰K˜Ÿ	™	Õ"ð Mñ à×Ñœ-¨Ó-Ô.à€LrD   c                ó2   — t        t        | |d¬«      ¬«      S )NrR   ©Úcoder‚   )r:   Úcollect_values©r†   r‡   s     rB   Úcreate_edge_arrayr•   ¶   s   € Üœ.¨¨{ÀÔDÔEÐErD   c                ó<   — | j                  |f|¬«      }d„ |D «       S )Nr   c              3  ó4   K  — | ]  }|j                   –— Œ y ­wrF   )r…   )rl   r‰   s     rB   rn   z!collect_values.<locals>.<genexpr>¾   s   è ø€ Ð$™V˜ˆA�G�G™Vùs   ‚)r„   )r†   r‡   r’   r?   s       rB   r“   r“   º   s&   € ð ×*Ñ*°$°ÀÐ*ÓL€FÙ$™VÓ$Ð$rD   c                óF   — t        j                   dt        | |d¬«      «      S )Nrm   éŒ   r‘   )rJ   r“   r”   s     rB   Úcreate_crease_arrayrš   Á   s   € Ü�;‰;�sœN¨4°À3ÔGÓHÐHrD   z'MESH (#{}) without {} count.'c                  ó¤  ‡ — e Zd ZdZdZ eeee«      Z	e
Zˆ fd„Zefdd„Z	 d	 	 	 dˆ fd„Zdd„Zdd„Zdˆ fd„Zdd	„Zd d
„Zdd„Zed!d„«       Zej0                  d"d„«       Zed„ «       Zej0                  d#d„«       Zed„ «       Zej0                  d$d„«       Zed„ «       Zej0                  d%d„«       Zd&d„Zd'd„Zed(d„«       Zd)d„Z d*ˆ fd„Z!ˆ xZ"S )+r,   zDXF MESH entityÚMESHc                ó°   •— t         ‰| �  «        t        «       | _        t	        «       | _        t        «       | _        t        j                  d«      | _	        y ©Nrm   )
ÚsuperÚ__init__r   Ú	_verticesrb   rt   r:   Ú_edgesrJ   Ú_creases)rA   Ú	__class__s    €rB   r    zMesh.__init__Ð   s9   ø€ Ü‰ÑÔÜ$›ˆŒÜ“jˆŒÜ“kˆŒÜŸ™ CÓ(ˆ�rD   c                óH  — t        |t        «      sJ ‚t        j                  | j                  «      |_        t        j                  | j
                  «      |_        t        j                  | j                  «      |_        t        j                  | j                  «      |_        y)z+Copy data: vertices, faces, edges, creases.N)Ú
isinstancer,   ÚcopyÚdeepcopyr¡   rt   r¢   r£   )rA   ÚentityÚcopy_strategys      rB   Ú	copy_datazMesh.copy_data×   sc   € ä˜&¤$Ô'Ð'Ð'ÜŸ=™=¨¯©Ó8ˆÔÜŸ™ d§k¡kÓ2ˆŒÜŸ™ d§k¡kÓ2ˆŒÜŸ-™-¨¯©Ó6ˆ�rD   c                óð   •— t         ‰| �  |«      }|rc|j                  d«      }|r7| j                  ||j                  «       |j                  |t        dd¬«       |S t        d|j                  › d�«      ‚|S )Nr0   T)Úrecoverz(missing 'AcDbSubMesh' subclass in MESH(#Ú))rŸ   Úload_dxf_attribsÚsubclass_by_indexÚload_mesh_dataÚhandleÚfast_load_dxfattribsÚacdb_mesh_group_codesr   )rA   Ú	processorÚdxfr†   r¤   s       €rB   r¯   zMesh.load_dxf_attribsß   sˆ   ø€ ô ‰gÑ& yÓ1ˆÙØ×.Ñ.¨qÓ1ˆDÙà×#Ñ# D¨#¯*©*Ô5à×.Ñ.ØÔ.°¸4ð /ô ð ˆ
ô (Ø>¸s¿z¹z¸lÈ!ÐLóð ð ˆ
rD   c                ó˜   ‡‡— ˆˆfd„}ˆˆfd„}ˆˆfd„}ˆˆfd„} |«       | _          |«       | _         |«       | _         |«       | _        y )Nc                 óÎ   •— 	 ‰j                  d«      } t        ‰| dz   «      }| dz   t        |«      z   }‰| |…= |S # t        $ r  t        t        j	                  ‰d«      «      ‚w xY w)Né\   Úvertexr    )Ú	tag_indexr   r   ÚCOUNT_ERROR_MSGÚformatrŠ   r>   )Úvertex_count_indexÚverticesÚ	end_indexr²   Ú	mesh_tagss      €€rB   Úprocess_verticesz-Mesh.load_mesh_data.<locals>.process_verticesó   s   ø€ ðRØ%.×%8Ñ%8¸Ó%<Ð"ô +¨9Ð6HÈ1Ñ6LÓMˆHà*¨QÑ.´°X³Ñ>ˆIØÐ,¨YÐ6Ð7ØˆOøô !ò RÜ'¬×(>Ñ(>¸vÀxÓ(PÓQÐQðRúó	   ƒ; »)A$c                 óØ   •— 	 ‰j                  d«      } t        ‰| dz   «      }| dz   |j                  «       z   }‰| |…= |S # t        $ r  t	        t
        j                  ‰d«      «      ‚w xY w)Nrg   r    ri   )r»   r�   rh   r   r   r¼   r½   )Úface_count_indexrs   rÀ   r²   rÁ   s      €€rB   Úprocess_facesz*Mesh.load_mesh_data.<locals>.process_facesþ   s�   ø€ ð	Ø#,×#6Ñ#6°rÓ#:Ð ô
 )¨Ð4DÀqÑ4HÓI�Ø,¨qÑ0°5·?±?Ó3DÑD�	ØÐ.¨yÐ8Ð9Ø�øô !ò PÜ'¬×(>Ñ(>¸vÀvÓ(NÓOÐOðPús   ƒA  Á )A)c                 óâ   •— 	 ‰j                  d«      } t        ‰| dz   «      }| dz   t        |j                  «      z   }‰| |…= |S # t        $ r  t        t        j                  ‰d«      «      ‚w xY w)NrQ   r    rG   )r»   r•   r>   r?   r   r   r¼   r½   )Úedge_count_indexrN   rÀ   r²   rÁ   s      €€rB   Úprocess_edgesz*Mesh.load_mesh_data.<locals>.process_edges
  sƒ   ø€ ð	Ø#,×#6Ñ#6°rÓ#:Ð ô *¨)Ð5EÈÑ5IÓJ�à,¨qÑ0´3°u·|±|Ó3DÑD�	ØÐ.¨yÐ8Ð9Ø�øô !ò PÜ'¬×(>Ñ(>¸vÀvÓ(NÓOÐOðPús   ƒA Á)A.c                 óÎ   •— 	 ‰j                  d«      } t        ‰| dz   «      }| dz   t        |«      z   }‰| |…= |S # t        $ r  t	        t
        j                  ‰d«      «      ‚w xY w)Né_   r    Úcrease)r»   rš   r>   r   r   r¼   r½   )Úcrease_count_indexÚcreasesrÀ   r²   rÁ   s      €€rB   Úprocess_creasesz,Mesh.load_mesh_data.<locals>.process_creases  s~   ø€ ð	Ø%.×%8Ñ%8¸Ó%<Ð"ô .¨iÐ9KÈaÑ9OÓP�à.°Ñ2´S¸³\ÑA�	ØÐ0°Ð:Ð;Ø�øô !ò RÜ'¬×(>Ñ(>¸vÀxÓ(PÓQÐQðRúrÃ   )r¡   rt   r¢   r£   )rA   rÁ   r²   rÂ   rÆ   rÉ   rÏ   s    ``    rB   r±   zMesh.load_mesh_dataò   s?   ù€ õ		õ
	õ
	õ
	ñ *Ó+ˆŒÙ#“oˆŒÙ#“oˆŒÙ'Ó)ˆ�rD   c                óf   — t        | j                  «      dk(  st        | j                  «      dk(  ryy)aL  Pre requirement check and pre-processing for export.

        Returns ``False``  if entity should not be exported at all.

            - MESH without vertices creates an invalid DXF file for AutoCAD and BricsCAD.
            - MESH without faces creates an invalid DXF file for AutoCAD and BricsCAD.

        (internal API)
        r   FT)r>   r¿   rs   ©rA   rT   s     rB   Úpreprocess_exportzMesh.preprocess_export'  s*   € ô ˆt�}‰}Ó Ò"¤c¨$¯*©*£o¸Ò&:ØØrD   c                óì   •— t         ‰| �  |«       |j                  t        t        j
                  «       | j                  j                  |g d¢«       | j                  |«       | j                  |«       y)z(Export entity specific data as DXF tags.r5   N)
rŸ   Úexport_entityrS   r   Ú	acdb_meshÚnamer¶   Úexport_dxf_attribsÚexport_mesh_dataÚexport_override_data)rA   rT   r¤   s     €rB   rÔ   zMesh.export_entity5  sZ   ø€ ä‰Ñ˜iÔ(Ø×Ñœ_¬i¯n©nÔ=Ø�‰×#Ñ#ØÒHô	
ð 	×Ñ˜iÔ(Ø×!Ñ! )Õ,rD   c                ó�  — |j                  dt        | j                  «      «       | j                  j	                  |d¬«       | j
                  j	                  |«       | j                  j	                  |«       | j                  «       }|j                  dt        | j                  «      «       |D ]  }|j                  d|«       Œ y )Nr¹   r~   r‘   rË   r™   )	rS   r>   r¿   r¡   rV   rt   r¢   Ú_fixed_crease_valuesrÎ   )rA   rT   rÎ   Úcrease_values       rB   rØ   zMesh.export_mesh_data?  s—   € Ø×Ñ˜R¤ T§]¡]Ó!3Ô4Ø�‰×!Ñ! )°"Ð!Ô5Ø�‰×Ñ˜yÔ)Ø�‰×Ñ˜yÔ)à×+Ñ+Ó-ˆØ×Ñ˜R¤ T§\¡\Ó!2Ô3Û#ˆLØ× Ñ   lÕ3ñ $rD   c                óà   — t        | j                  «      }t        | j                  «      }t        |«      }||k  r|d | }|t        |«      kD  r |j	                  d«       |t        |«      kD  rŒ |S )Ng        )r>   r¢   ÚlistrÎ   rq   )rA   Ú
edge_countrÎ   Úcrease_counts       rB   rÛ   zMesh._fixed_crease_valuesJ  sh   € ô ˜Ÿ™Ó%ˆ
Ü�t—|‘|Ó$ˆÜ˜7“|ˆØ˜Ò$Ø˜k˜zÐ*ˆGØœ3˜w›<Ò'Ø�N‰N˜3Ôð œ3˜w›<Ó'àˆrD   c                ó(   — |j                  dd«       y )NrR   r   )rS   rÑ   s     rB   rÙ   zMesh.export_override_dataV  s   € Ø×Ñ˜R Õ#rD   c                ó   — | j                   S )z-Creases as :class:`array.array`. (read/write))r£   r@   s    rB   rÎ   zMesh.creasesY  s   € ð �}‰}ÐrD   c                ó:   — t        j                   d|«      | _        y rž   )rJ   r£   )rA   r?   s     rB   rÎ   zMesh.creases^  s   € äŸ™ C¨Ó0ˆ�rD   c                ó   — | j                   S )zaVertices as list like :class:`~ezdxf.lldxf.packedtags.VertexArray`.
        (read/write)
        )r¡   r@   s    rB   r¿   zMesh.verticesb  s   € ð
 �~‰~ÐrD   c                ó$   — t        |«      | _        y rF   )r   r¡   )rA   Úpointss     rB   r¿   zMesh.verticesi  s   € ä$ VÓ,ˆ�rD   c                ó   — | j                   S )z[Edges as list like :class:`~ezdxf.lldxf.packedtags.TagArray`.
        (read/write)
        )r¢   r@   s    rB   rN   z
Mesh.edgesm  ó   € ð
 �{‰{ÐrD   c                ó:   — | j                   j                  |«       y rF   )r¢   rO   rM   s     rB   rN   z
Mesh.edgest  ó   € à�‰×Ñ˜UÕ#rD   c                ó   — | j                   S )zZFaces as list like :class:`~ezdxf.lldxf.packedtags.TagList`.
        (read/write)
        )rt   r@   s    rB   rs   z
Mesh.facesx  rè   rD   c                ó:   — | j                   j                  |«       y rF   )rt   rO   )rA   rs   s     rB   rs   z
Mesh.faces  rê   rD   c                ó   — t        | «      S rF   )r-   r@   s    rB   Úget_datazMesh.get_dataƒ  s   € Ü˜‹~ÐrD   c                óp  — |j                   | _         | j                  j                  |j                  «       | j                  j                  |j
                  «       t        j                  d|j                  «      | _        t        | j
                  «      t        | j                  «      k7  rt        d«      ‚y )Nrm   z*count of edges must match count of creases)r¿   rt   rO   rs   r¢   rN   rJ   Úedge_crease_valuesrÎ   r>   r   ©rA   rƒ   s     rB   rO   zMesh.set_data†  s{   € ØŸ™ˆŒØ�‰×Ñ˜TŸZ™ZÔ(Ø�‰×Ñ˜TŸZ™ZÔ(Ü—{‘{ 3¨×(?Ñ(?Ó@ˆŒÜˆt�z‰z‹?œc $§,¡,Ó/Ò/ÜÐ LÓMÐMð 0rD   c              #  óV   K  — | j                  «       }|–— | j                  |«       y­w)a  Context manager for various mesh data, returns a :class:`MeshData` instance.

        Despite that vertices, edge and faces are accessible as packed data types, the
        usage of :class:`MeshData` by context manager :meth:`edit_data` is still
        recommended.
        N)rî   rO   rñ   s     rB   Ú	edit_datazMesh.edit_dataŽ  s$   è ø€ ð �}‰}‹ˆØŠ
Ø�‰�dÕùs   ‚')c                ó^   — | j                   j                  |«       | j                  |«       | S )z?Transform the MESH entity by transformation matrix `m` inplace.)r¡   Ú	transformÚpost_transform)rA   Úms     rB   rõ   zMesh.transformš  s'   € à�‰× Ñ  Ô#Ø×Ñ˜AÔØˆrD   c                óú  •— | j                   sy t        ‰| �	  |«       t        | j                  «      t        | j
                  «      k7  rC| j                  «       | _        |j                  t        j                  dt        | «      › �| ¬«       t        | j                  «      dk(  st        | j                  «      dk(  r@|j                  t        j                  dt        | «      › d�¬«       |j                  | «       y y )Nz(fixed invalid count of crease values in )r’   ÚmessageÚ
dxf_entityr   zremoved z without vertices or faces)r’   rù   )Úis_aliverŸ   Úauditr>   rN   rÎ   rÛ   Úfixed_errorr   ÚINVALID_CREASE_VALUE_COUNTÚstrr¿   rs   ÚINVALID_VERTEX_COUNTÚtrash)rA   Úauditorr¤   s     €rB   rü   z
Mesh.audit   sÓ   ø€ Ø�}Š}ØÜ‰‰�gÔÜˆt�z‰z‹?œc $§,¡,Ó/Ò/Ø×4Ñ4Ó6ˆDŒLØ×ÑÜ×:Ñ:ØBÄ3ÀtÃ9À+ÐNØð  ô ô
 ˆt�}‰}Ó Ò"¤c¨$¯*©*£o¸Ò&:ð ×ÑÜ×4Ñ4Ø"¤3 t£9 +Ð-GÐHð  ô ð �M‰M˜$Õð ';rD   )r©   r
   rX   r[   rF   )rµ   zOptional[SubclassProcessor]rX   r'   )rÁ   r*   r²   rÿ   rX   r[   )rT   r)   rX   Úbool)rT   r)   rX   r[   r\   )rX   zlist[float])rX   úarray.array)r?   zIterable[float]rX   r[   )ræ   úIterable[UVec]rX   r[   rZ   ru   )rX   r-   )rƒ   r-   rX   r[   )rX   zIterator[MeshData])r÷   r   rX   r,   )r  r+   rX   r[   )#r]   r^   r_   Ú__doc__ÚDXFTYPEr   r!   r$   rÕ   Ú
DXFATTRIBSr   ÚMIN_DXF_VERSION_FOR_EXPORTr    r&   r«   r¯   r±   rÒ   rÔ   rØ   rÛ   rÙ   ÚpropertyrÎ   Úsetterr¿   rN   rs   rî   rO   r   ró   rõ   rü   Ú__classcell__)r¤   s   @rB   r,   r,   È   sF  ø„ áà€GÙ˜z¨;¸	ÓB€JØ!(Ðô)ð 5Aô 7ð 8<ðØ4ðà	õó&3*ójõ-ó	4ó
ó$ð òó ðð ‡^�^ò1ó ð1ð ñó ðð ‡_�_ò-ó ð-ð ñó ðð ‡\�\ò$ó ð$ð ñó ðð ‡\�\ò$ó ð$óóNð ò	ó ð	ó÷ ñ  rD   c                  ó2   — e Zd Zdd„Zdd„Zd	d„Zd
d„Zd„ Zy)r-   c                óè   — t        j                  |j                  «      | _        t        |j                  «      | _        t        |j                  «      | _        t        |j
                  «      | _        y rF   )r   rÞ   r¿   rs   rN   rÎ   rð   )rA   Úmeshs     rB   r    zMeshData.__init__¶  sG   € Ü$(§I¡I¨d¯m©mÓ$<ˆŒÜ*.¨t¯z©zÓ*:ˆŒ
Ü,0°·±Ó,<ˆŒ
Ü/3°D·L±LÓ/AˆÕrD   c                óf   ‡ — t        ˆ fd„|D «       «      }‰ j                  j                  |«       |S )z!Add a face by a list of vertices.c              3  ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrF   )Ú
add_vertex)rl   rº   rA   s     €rB   rn   z$MeshData.add_face.<locals>.<genexpr>¾  s   øè ø€ ÐG¹h°F˜Ÿ™¨×/¹hùs   ƒ)Útuplers   rq   )rA   r¿   Úindicess   `  rB   Úadd_facezMeshData.add_face¼  s*   ø€ äÓG¹hÓGÓGˆØ�
‰
×Ñ˜'Ô"ØˆrD   c                ó  — |dk  s|t        | j                  «      kD  rt        d«      ‚|dk  s|t        | j                  «      kD  rt        d«      ‚| j                  j	                  ||f«       | j
                  j	                  |«       y)aX  Add an edge crease value, the edge is defined by the vertex indices
        `v1` and `v2`.

        The crease value defines the amount of subdivision that will be applied
        to this edge.  A crease value of the subdivision level prevents the edge from
        deformation and a value of 0.0 means no protection from subdividing.

        r   zvertex index `v1` out of rangezvertex index `v2` out of rangeN)r>   r¿   r   rN   rq   rð   )rA   Úv1Úv2rÌ   s       rB   Úadd_edge_creasezMeshData.add_edge_creaseÂ  st   € ð �Š6�Rœ#˜dŸm™mÓ,Ò,ÜÐ @ÓAÐAØ�Š6�Rœ#˜dŸm™mÓ,Ò,ÜÐ @ÓAÐAØ�
‰
×Ñ˜2˜r˜(Ô#Ø×Ñ×&Ñ& vÕ.rD   c                óª   — t        |«      dk7  rt        d«      ‚t        | j                  «      }| j                  j                  t	        |«      «       |S )Né   z/Parameter vertex has to be a 3-tuple (x, y, z).)r>   r   r¿   rq   r   )rA   rº   rU   s      rB   r  zMeshData.add_vertexÒ  sC   € Üˆv‹;˜!ÒÜÐ QÓRÐRÜ�D—M‘MÓ"ˆØ�‰×ÑœT &›\Ô*ØˆrD   c                óh   ‡ ‡‡— dˆ fd„}dˆˆ fd„}dˆˆ fd„}dˆfd„Š |«       Š |«         |«        y)	z3Reduce vertex count by merging coincident vertices.c                 ó„  •— t        ‰	j                  «      D � �cg c]  \  } }|j                  | |f‘Œ }} }|j                  «        g ‰	_        i }t	        «       x}}d} |D ]X  \  }}}||u s|j                  |«      s8t        ‰	j                  «      } ‰	j                  j                  |«       | ||<   |}ŒT| ||<   ŒZ |S c c}} w )Nr   )Ú	enumerater¿   ÚxyzÚsortr   Úiscloser>   rq   )
rU   ÚvÚoriginal_verticesÚ	index_mapÚprev_vertexÚsentinelÚ_Úoriginal_indexrº   rA   s
            €rB   Úmerge_coincident_verticesz4MeshData.optimize.<locals>.merge_coincident_verticesÜ  sÍ   ø€ ä2;¸D¿M¹MÔ2Jô!Ù2J¡h e¨Q�—‘˜˜qÒ!Ð2Jð ñ !ð ×"Ñ"Ô$ØˆDŒMØ(*ˆIÜ%)£VÐ+ˆK˜(ØˆEÛ->Ñ)��> 6Ø (Ñ*°&·.±.ÀÔ2MÜ §¡Ó.�EØ—M‘M×(Ñ(¨Ô0Ø05�I˜nÑ-Ø"(‘Kà05�I˜nÒ-ð .?ð Ðùó!!s   šB<c                 ó4   •—  ‰ ‰j                   «      ‰_         y rF   )rs   ©Úremap_indicesrA   s   €€rB   Úremap_facesz&MeshData.optimize.<locals>.remap_facesï  ó   ø€ Ù& t§z¡zÓ2ˆD�JrD   c                 ó4   •—  ‰ ‰j                   «      ‰_         y rF   )rN   r+  s   €€rB   Úremap_edgesz&MeshData.optimize.<locals>.remap_edgesò  r.  rD   c                ó`   •— g }| D ]%  }|j                  t        ˆfd„|D «       «      «       Œ' |S )Nc              3  ó(   •K  — | ]	  }‰|   –— Œ y ­wrF   r`   )rl   rU   r$  s     €rB   rn   z;MeshData.optimize.<locals>.remap_indices.<locals>.<genexpr>ø  s   øè ø€ Ð+PÉ%À¨I°eÕ,<É%ùs   ƒ)rq   r  )r  Úmapped_indicesÚentryr$  s      €rB   r,  z(MeshData.optimize.<locals>.remap_indicesõ  s1   ø€ Ø24ˆNÛ �Ø×%Ñ%¤eÓ+PÉ%Ó+PÓ&PÕQð !à!Ð!rD   N)rX   zdict[int, int])rX   r[   )r  zSequence[Sequence[int]]rX   zlist[Sequence[int]]r`   )rA   r)  r-  r0  r$  r,  s   `   @@rB   ÚoptimizezMeshData.optimizeÙ  s+   ú€ õ	ö&	3ö	3õ	"ñ .Ó/ˆ	ÙŒÙ�rD   N)r  r,   rX   r[   )r¿   r  rX   úSequence[int])r  rY   r  rY   rÌ   Úfloat)rº   r   rX   rY   )r]   r^   r_   r    r  r  r  r5  r`   rD   rB   r-   r-   µ  s   „ óBóó/ó ó$rD   )ri   r6  rX   r  )r†   r*   r‡   rY   rX   r   )r†   r*   r‡   rY   rX   rb   )r†   r*   r‡   rY   rX   r:   )r†   r*   r‡   rY   r’   rY   rX   zIterable[Union[float, int]])r†   r*   r‡   rY   rX   r  )LÚ
__future__r   Útypingr   r   r   r   r   r	   Útyping_extensionsr
   rJ   r§   Ú	itertoolsr   Ú
contextlibr   Úezdxf.auditr   Úezdxf.lldxfr   Úezdxf.lldxf.attributesr   r   r   r   r   Úezdxf.lldxf.constr   r   r   r   r   Úezdxf.lldxf.packedtagsr   r   r   Ú
ezdxf.mathr   r   r   Úezdxf.toolsr   Ú	dxfentityr!   r"   Údxfgfxr#   r$   Úfactoryr%   r&   Úezdxf.entitiesr'   r(   Úezdxf.lldxf.tagwriterr)   Úezdxf.lldxf.tagsr*   r+   Ú__all__Úis_integer_boolÚis_greater_or_equal_zerorÕ   r´   r:   rb   rr   rŠ   r�   r•   r“   rš   r¼   r,   r-   r`   rD   rB   Ú<module>rM     s`  ðõ #÷÷ õ #Û Û Ý Ý %å "Ý !÷õ ÷õ ÷ BÑ Aß +Ñ +Ý ß 4ß +Ý $Ý áß6Ý7Ý%Ý#à�:Ð
€áØá˜2 qÔ)ÙØØØ×/Ñ/Ø ô	
ñ &ØØØ×8Ñ8Ø ô	
ñ&ó)€	ñT +¨9Ó5Ð ô,�ô ,ô(ˆwô ó2$ó<ó
ó4Fð%Ø
ð%Ø ð%Ø(+ð%à ó%óIð 3€ð ôi ˆ:ó i ó ði ÷XHò HrD   