Ë
    :vžjå&  ã                   óö   — d dl ZddlmZ ddlmZ  G d„ de«      Z ej                  g d¢«      Z	 ej                  dej                  d	fd
g«      Zdedefd„Zdedefd„Zdedefd„Zdefd„Zdefd„ZeedœZy)é    Né   )Úutil)ÚStreamc                   ó   — e Zd Zy)ÚHeaderErrorN)Ú__name__Ú
__module__Ú__qualname__© ó    úe/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/trimesh/exchange/stl.pyr   r      s   „ àr   r   ))Únormalsú<f4é   )Úverticesr   )r   r   )Ú
attributesz<u2ÚheaderéP   )Ú
face_countz<u4Úfile_objÚreturnc                 ó�   — | j                  «       }	 t        | «      S # t        $ r | j                  |«       t	        | «      cY S w xY w)a  
    Load a binary or an ASCII STL file from a file object.

    Parameters
    ----------
    file_obj
      Containing STL data

    Returns
    ----------
    loaded
      Keyword arguments for a Trimesh constructor with
      data loaded into properly shaped numpy arrays.
    )ÚtellÚload_stl_binaryr   ÚseekÚload_stl_ascii)r   ÚkwargsÚfile_poss      r   Úload_stlr      sI   € ð  �}‰}‹€Hð(ô
 ˜xÓ(Ð(øÜò (à�‰�hÔô ˜hÓ'Ò'ð(ús   ’
 �%AÁAc                 ó¢  — t         j                  }| j                  |«      }t        |«      |k  rt	        d«      ‚	 t        j                  |t         ¬«      }	 dt        j                  t        |d   d   «      «      j                  «       i}| j                  «       }| j                  dd«       | j                  «       }| j                  |«       ||z
  }t        |d   d   «      t        j                  z  }||k7  rt	        d|› d	|› �«      ‚t        j                  | j                  «       t        ¬«      }	t        |	d
   «      sdi iS t        j                   |d   d   dz  «      j#                  d«      }
|	d
   j#                  d«      |	d   j#                  d«      |
d|	d   i|dœ}|S # t        $ r t	        d«      ‚w xY w# t        $ r i }Y �ŒAw xY w)a&  
    Load a binary STL file from a file object.

    Parameters
    ----------
    file_obj : open file- like object
      Containing STL data

    Returns
    ----------
    loaded
      Keyword arguments for a Trimesh constructor with data
      loaded into properly shaped numpy arrays.
    z'Binary STL shorter than a fixed header!©ÚdtypezBinary header incorrect typer   r   r   r   z+Binary STL has incorrect length in header: z vs r   Úgeometryr   ©éÿÿÿÿr   r   Ústlr   )r   Úface_normalsÚfacesÚface_attributesÚmetadata)Ú_stl_dtype_headerÚitemsizeÚreadÚlenr   ÚnpÚ
frombufferÚBaseExceptionr   Údecode_textÚbytesÚstripr   r   ÚintÚ
_stl_dtypeÚarangeÚreshape)r   Úheader_lengthÚheader_datar   r*   Ú
data_startÚdata_endÚlen_dataÚlen_expectedÚblobr(   Úresults               r   r   r   7   sß  € ô" &×.Ñ.€MØ—-‘- Ó.€KÜ
ˆ;Ó˜-Ò'ÜÐCÓDÐDð:Ü—‘˜{Ô2CÔDˆðð œd×.Ñ.¬u°V¸HÑ5EÀaÑ5HÓ/IÓJ×PÑPÓRÐSˆð —‘“€Jð ‡M�M�!�QÔð �}‰}‹€HØ‡M�M�*Ôð
 ˜*Ñ$€Hä�v˜lÑ+¨AÑ.Ó/´*×2EÑ2EÑE€Lð �<ÒÜØ9¸(¸À4ÈÀ~ÐVó
ð 	
ô �=‰=˜Ÿ™›´
Ô;€Dô ˆt�JÑÔ Ø˜BÐÐô �I‰I�f˜\Ñ*¨1Ñ-°Ñ1Ó2×:Ñ:¸7ÓC€Eð
 ˜Ñ$×,Ñ,¨WÓ5Ø˜Y™×/Ñ/°Ó8ØØ! 4¨Ñ#5Ð6Øñ€Fð €Møôq ò :ÜÐ8Ó9Ð9ð:ûô ò Ø‹ðús   ¼F' Á4F? Æ'F<Æ?GÇGc           	      óp  — t        j                  | j                  «       «      j                  «       }|j	                  «       }i }d}t        t        |«      «      D �]å  }|j                  d|«      }|j                  d|«      }|t        d«      z   }|dk  s|dk  r �n¦||kD  rt        d«      ‚||| }|j                  d«      }	t        j                  dj                  d„ |	dd	 D «       «      dt        j                  ¬
«      }
t        |
«      dk  rŒ·t        |
«      dz  dk7  rt        d«      ‚|
j                  d«      }
t        j                  t        |
«      «      j                  d«      }d	}	 |j                  d«      }t        j                  dj                  d„ |dd	 D «       «      dt        j                  ¬
«      }t        |«      t        |
«      k(  r|j                  d«      }	 ||||j                  d«      z    dd	 j                  «       }t        j&                  ||«      }|
j                  d«      ||d|idœ||<   �Œè t        |«      dk(  r"t)        t+        |j-                  «       «      «      S d|iS # t         $ r$ t         j"                  j%                  dd¬«       Y Œ½w xY w# t         $ r d	}Y Œ¥w xY w)a(  
    Load an ASCII STL file from a file object.

    Parameters
    ----------
    file_obj : open file- like object
      Containing input data

    Returns
    ----------
    loaded
      Keyword arguments for a Trimesh constructor with
      data loaded into properly shaped numpy arrays.
    r   ÚsolidÚendsolidz`endsolid` precedes `solid`!ÚvertexÚ c              3   óD   K  — | ]  }|d |j                  d«       –— Œ y ­w©NÚ
©Úfind©Ú.0Úlines     r   Ú	<genexpr>z!load_stl_ascii.<locals>.<genexpr>½   s!   è ø€ ÐI¹°�TÐ+˜DŸI™I d›OÔ,¹ùó   ‚ é   N)Úsepr"   r   zincorrect number of verticesr$   Únormalc              3   óD   K  — | ]  }|d |j                  d«       –— Œ y ­wrG   rI   rK   s     r   rN   z!load_stl_ascii.<locals>.<genexpr>Ï   s!   è ø€ ÐM¹_°T˜Ð/ §	¡	¨$£Ô0¹_ùrO   zfailed to extract face_normalsT)Úexc_inforH   é   Úname)r   r'   r(   r*   r#   )r   r2   r-   r4   ÚlowerÚranger.   rJ   Ú
ValueErrorÚsplitr/   Ú
fromstringÚjoinÚfloat64r8   r7   r1   ÚlogÚwarningÚunique_nameÚnextÚiterÚvalues)r   Ú	raw_mixedÚ	raw_lowerr   ÚpositionÚ_Úsolid_startÚ	solid_endrB   Úvertex_textr   r(   r'   Únormal_textr   rV   s                   r   r   r   Š   sž  € ô" × Ñ  §¡£Ó1×7Ñ7Ó9€Ià—‘Ó!€Ið €Fð €Hô ”3�y“>×"ˆà—n‘n W¨hÓ7ˆà—N‘N :¨xÓ8ˆ	ð œs :›Ñ.ˆð �qŠ=˜K¨!šOÚð ˜Ò"ÜÐ;Ó<Ð<ð ˜+ iÐ0ˆð —k‘k (Ó+ˆÜ—=‘=Ø�H‰HÑI¸ÀQÀR¹ÓIÓIØÜ—*‘*ô
ˆô
 ˆx‹=˜1ÒØÜˆx‹=˜1Ñ Ò!ÜÐ;Ó<Ð<ð ×#Ñ# GÓ,ˆÜ—	‘	œ#˜h›-Ó(×0Ñ0°Ó9ˆð ˆð
	NØŸ+™+ hÓ/ˆKÜ—m‘mØ—‘ÑM¸[ÈÈ¹_ÓMÓMØÜ—j‘jôˆGô
 �7‹|œs 8›}Ò,Ø&Ÿ™¨wÓ7�ð	ð ˜[¨;¸¿¹ÀDÓ9IÑ+IÐJÈ1È2ÐN×TÑTÓVˆDô ×Ñ  fÓ-ˆð !×(Ñ(¨Ó1Ø(ØØ ˜ñ	
ˆˆt‹ð{ #ôH ˆ6ƒ{�aÒÜ”D˜Ÿ™›Ó)Ó*Ð*à˜ÐÐøô1 ò 	NÜ�H‰H×ÑÐ=ÈÐÖMð	Nûô ò 	àŠDð	ús%   Å.A8I7Ç'(J'É7*J$Ê#J$Ê'J5Ê4J5c                 óz  — t        j                  dt        ¬«      }t        | d«      rt	        | j
                  «      |d<   |j                  «       }t        | d«      r_t        j                  t	        | j
                  «      t        ¬«      }| j                  |d<   | j                  |d<   ||j                  «       z  }|S )zÐ
    Convert a Trimesh object into a binary STL file.

    Parameters
    ---------
    mesh
      Trimesh object to export.

    Returns
    ---------
    export
      Represents mesh in binary STL form
    rP   r!   r(   r   r   r   )
r/   Úzerosr+   Úhasattrr.   r(   Útobytesr6   r'   Ú	triangles)Úmeshr   ÚexportÚpackeds       r   Ú
export_stlrt   ð   s“   € ô �X‰X�aÔ0Ô1€FÜˆt�WÔÜ" 4§:¡:›ˆˆ|ÑØ�^‰^Ó€Fäˆt�WÔÜ—‘œ#˜dŸj™j›/´Ô<ˆØ ×-Ñ-ˆˆyÑØ!Ÿ^™^ˆˆzÑØ�&—.‘.Ó"Ñ"ˆà€Mr   c                 óð  — t        j                  t        | j                  «      ddf«      }| j                  |dd…ddd…f<   | j
                  |dd…dd…dd…f<   dj                  g d¢«      t        | j                  «      z  }| j                  j                  dd	«      }t        |t        «      sd	}t        |«      d
kD  sd|v rd	}dj                  d|› � |j                  |j                  d«      Ž dg«      S )zÅ
    Convert a Trimesh object into an ASCII STL file.

    Parameters
    ---------
    mesh : trimesh.Trimesh

    Returns
    ---------
    export
      Mesh represented as an ASCII STL file
    é   r   Nr   rP   rH   )zfacet normal {} {} {}z
outer loopz/vertex {} {} {}
vertex {} {} {}
vertex {} {} {}ÚendloopÚendfacetÚ rV   ry   r   zsolid r%   z	endsolid
)r/   rm   r.   r(   r'   rp   r\   r*   ÚgetÚ
isinstanceÚstrÚformatr8   )rq   r?   Ú	formatterrV   s       r   Úexport_stl_asciir     sä   € ô �8‰8”S˜Ÿ™“_ a¨Ð+Ó,€DØ×%Ñ%€DŠˆAŠqˆ�MØ—^‘^€DŠˆA‰B’ˆ�Nð 	�	‰	òó		
ô 	ˆD�J‰J‹ñ€Ið �=‰=×Ñ˜V RÓ(€DÜ�dœCÔ ØˆÜ
ˆ4ƒy�2‚~˜ ™Øˆð �9‰9˜˜t˜f�oÐ'7 y×'7Ñ'7¸¿¹ÀbÓ9IÐ'JÈLÐYÓZÐZr   )r&   Ú	stl_ascii)Únumpyr/   ry   r   Útypedr   Ú	Exceptionr   r"   r6   Úvoidr+   Údictr   r   r   r3   rt   r|   r   Ú_stl_loadersr   r   r   Ú<module>r‡      s¼   ðÛ å Ý ô	�)ô 	ð ˆR�X‰XÚQó€
ð �B—H‘H˜x¨¯©°"Ð5Ð7LÐMÓNÐ ð(�vð (¨Dó (ð@P˜fð P¨ó Pðfc ˜Vð c ¨ó c ðL˜ó ð8)[˜có )[ðX  ¨hÑ7�r   