Ë
    :vžj>:  ã                   óf  — d dl Z d dlZd dlZd dlZddlmZmZ ddlm	Z	 ddlm
Z
  ej                  d«      Zdej                  _        dd„Zd	„ Zd
„ Zd„ Zd„ Zd„ Zdd„Zi Zi Z ej0                  d«      reed<   eed<   eed<   yddlmZ  e ed«      «      Zej;                  eedœ«       eed<   y)é    Né   )ÚutilÚvisual)Úlog)Úunique_nameé   Fc                 óš  — ddl }|r�|j                  j                  |j                  j                  |j                  j                  |j                  j
                  |j                  j                  |j                  j                  g}nd}|j                  | |¬«      }i }|j                  D ]'  }|j                  }	t        |	|«      ||j                  <   Œ) |j                  j                  }
|
�t        j                  |
d«      rddi}nd|
› d�i}i }i }g }|j                   j"                  D ]  }t%        |t&        ||||||¬«       Œ d	||d
œS )a5  
    Load a COLLADA (.dae) file into a list of trimesh kwargs.

    Parameters
    ----------
    file_obj : file object
      Containing a COLLADA file
    resolver : trimesh.visual.Resolver or None
      For loading referenced files, like texture images
    ignore_broken: bool
      Ignores broken references during loading:
        [collada.common.DaeUnsupportedError,
         collada.common.DaeBrokenRefError]
    kwargs : **
      Passed to trimesh.Trimesh.__init__

    Returns
    -------
    loaded : list of dict
      kwargs for Trimesh constructor
    r   N)Úignoreç      ð?ÚunitsÚmetersz	 * meters©ÚnodeÚparent_matrixÚmaterial_mapÚmeshesÚmeshes_countÚgraphÚresolverÚmetadataÚScene)Úclassr   Úgeometry)ÚcolladaÚcommonÚDaeErrorÚDaeIncompleteErrorÚDaeMalformedErrorÚDaeBrokenRefErrorÚDaeUnsupportedErrorÚColladaÚ	materialsÚeffectÚ_parse_materialÚidÚ	assetInfoÚ	unitmeterÚnpÚiscloseÚsceneÚnodesÚ_parse_nodeÚ_EYE)Úfile_objr   Úignore_brokenÚkwargsr   ÚignoresÚcr   Úmr#   Úunitr   r   r   r   r   s                   úe/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/trimesh/exchange/dae.pyÚload_colladar6      s=  € ó, áà�N‰N×#Ñ#Ø�N‰N×-Ñ-Ø�N‰N×,Ñ,Ø�N‰N×,Ñ,Ø�N‰N×.Ñ.Ø�N‰N×-Ñ-ð
‰ð ˆð 	�‰˜¨ˆÓ1€Að €LØ�[Œ[ˆØ—‘ˆÜ,¨V°XÓ>ˆ�Q—T‘TÒð ð �;‰;× Ñ €DØ€|”r—z‘z $¨Ô,Ø˜XÐ&‰à ˜v YÐ/Ð0ˆð €Fà€Là€Eà—‘—”ˆÜØÜØ%ØØ%ØØØö		
ð ð  u¸&ÑAÐAó    c                 ó
  — ddl }| }t        | t        t        t        t
        j                  f«      s| g}|j                  «       }g }t        |«      D �]2  \  }}d}d}	t        d«      }
|j                  j                  �r|j                  j                  dk(  r6t        |j                  j                  «      }
|j                  j                  }nË|j                  j                  dk(  r^|j                  j                  dz  dd…dd…f   }	t        j                   |j                  j"                  «      dz  |
j$                  _        nT|j                  j                  dk(  r;t        j                   |j                  j"                  «      dz  |
j$                  _        |j(                  j+                  |
j$                  «       |j,                  j+                  |
«       |j.                  j1                  d|j2                  j5                  «       d	«      }|j.                  j1                  d
|j6                  j5                  «       d	«      }|j.                  j9                  «       }|j;                  ddd«       |j;                  ddd«       ||g}|�]t=        |«      dkD  rO|j.                  j1                  d|j5                  «       d«      }|j;                  ddd«       |j+                  |«       |	�Ud}|rd}|j.                  j1                  d|	j5                  «       d«      }	|j;                  |dd«       |j+                  |	«       |j>                  jA                  |tC        jD                  «       jF                  tC        jD                  «       jF                  |«      }t        jH                  |jJ                  j5                  «       t=        |«      «      }d|› �}|jM                  |||«      }|jN                  j+                  |«       |jP                  j+                  |«       |jR                  jU                  ||
g ¬«      }|jR                  jW                  ||g«      }|jR                  jY                  d|› �|g¬«      }|j+                  |«       �Œ5 |jR                  j[                  d|«      }|j\                  j+                  |«       ||_)        t_        j`                  «       }|jc                  |«       |je                  d«       |jg                  «       S )a  
    Export a mesh or a list of meshes as a COLLADA .dae file.

    Parameters
    -----------
    mesh: Trimesh object or list of Trimesh objects
        The mesh(es) to export.

    Returns
    -----------
    export: str, string of COLLADA format output
    r   NÚtextureÚvertexç     ào@é   Úfacezverts-array)ÚXÚYÚZznormals-arrayÚVERTEXz#verts-arrayé   ÚNORMALz#normals-arrayztexcoords-array)ÚUÚVr   ÚTEXCOORDz#texcoords-arrayzcolors-array)ÚRÚGÚBÚCOLORz#colors-arrayÚmaterial)Úinputsr   )Úchildrenr*   )4r   Ú
isinstanceÚlistÚtupleÚsetr(   Úndarrayr!   Ú	enumerateÚ_unparse_materialr   ÚdefinedÚkindrK   ÚuvÚvertex_colorsÚarrayÚ
main_colorr#   ÚdiffuseÚeffectsÚappendr"   ÚsourceÚFloatSourceÚverticesÚflattenÚvertex_normalsÚ	InputListÚaddInputÚlenr   ÚGeometryÚuuidÚuuid4ÚhexÚrepeatÚfacesÚcreateTriangleSetÚ
primitivesÚ
geometriesr*   ÚMaterialNodeÚGeometryNodeÚNoder   ÚscenesÚioÚBytesIOÚwriteÚseekÚread)Úmeshr0   r   r   r2   r+   Úir3   rW   ÚcolorsÚmatr`   ÚnormalsÚ
input_listÚarraysÚ	texcoordsÚidxÚgeomÚindicesÚmatrefÚtrisetÚmatnodeÚgeomnoder   r*   Úbs                             r5   Úexport_colladarˆ   X   sä  € ó à€FÜ�dœT¤5¬#¬r¯z©zÐ:Ô;Ø�ˆà�‰Ó€AØ€EÜ˜&×!‰ˆˆ1àˆØˆÜ Ó%ˆØ�8‰8×ÓØ�x‰x�}‰} 	Ò)Ü'¨¯©×(9Ñ(9Ó:�Ø—X‘X—[‘[‘Ø—‘—‘ (Ò*ØŸ(™(×0Ñ0°5Ñ8º!¸R¸a¸R¸%Ñ@�Ü%'§X¡X¨a¯h©h×.AÑ.AÓ%BÀUÑ%J�—
‘
Õ"Ø—‘—‘ &Ò(Ü%'§X¡X¨a¯h©h×.AÑ.AÓ%BÀUÑ%J�—
‘
Ô"Ø	�	‰	×Ñ˜Ÿ™Ô$Ø	�‰×Ñ˜3Ôð —>‘>×-Ñ-Ø˜1Ÿ:™:×-Ñ-Ó/°ó
ˆð —.‘.×,Ñ,Ø˜Q×-Ñ-×5Ñ5Ó7¸ó
ˆð —^‘^×-Ñ-Ó/ˆ
Ø×Ñ˜A˜x¨Ô8Ø×Ñ˜A˜xÐ)9Ô:Ø˜GÐ$ˆØˆN¤ R£¨1¢ØŸ™×2Ñ2Ø! 2§:¡:£<°óˆIð ×Ñ  :Ð/AÔBØ�M‰M˜)Ô$ØÐØˆCÙØ�Ø—^‘^×/Ñ/Ø §¡Ó 0°/óˆFð ×Ñ  W¨oÔ>Ø�M‰M˜&Ô!Ø×Ñ×(Ñ(¨¬D¯J©J«L×,<Ñ,<¼d¿j¹j»l×>NÑ>NÐPVÓWˆÜ—)‘)˜AŸG™GŸO™OÓ-¬s°6«{Ó;ˆà˜A˜3�ˆØ×'Ñ'¨°¸VÓDˆØ�‰×Ñ˜vÔ&Ø	�‰×Ñ˜DÔ!à—-‘-×,Ñ,¨V°SÀÐ,ÓDˆØ—=‘=×-Ñ-¨d°W°IÓ>ˆØ�}‰}×!Ñ! D¨¨ *¸°zÐ!ÓBˆØ�‰�TÖðm "ðn �M‰M×Ñ ¨Ó/€EØ‡H�H‡O�O�EÔØ€A„Gä
�
‰
‹€AØ‡G�GˆA„JØ‡F�Fˆ1„IØ�6‰6‹8€Or7   c                 óÄ  — ddl }t        | |j                  j                  «      �r| j                  }	i }
| j
                  D ]J  }|j                  }|j                  }|j                  |v r||j                     |
|<   Œ<t        ||«      |
|<   ŒL |	j                  D �]�  }t        ||j                  j                  «      r|j                  «       }t        ||j                  j                  «      sŒU|j                  }|€Œd|j                   }||   j#                  t%        |«      dz  d«      }d}|j&                  �9|j&                  }|j(                  }||   j#                  t%        |«      dz  d«      }d}|j*                  }d|v r~t%        |d   «      dkD  rmt%        |j,                  «      dkD  rU|d   d   d   j.                  }|j,                  dd…dd…|d   d   d   f   }||   j#                  t%        |«      dz  d«      }t1        j2                  |j4                  d   «      j#                  |j4                  d   dz  d«      }d}|j6                  |
v r�t9        j8                  |
|j6                     «      }d}t%        |j:                  «      dkD  r@|j:                  d   }|j<                  d   }||   j#                  t%        |«      dz  df«      }t>        j@                  jC                  ||¬«      }tE        |	j                  ||¬	«      }||||||d
œ||<   |jG                  |||dœ«       �Œ’ yt        | |j                  jH                  «      rR| jJ                  �E| jJ                  D ]5  } t1        jL                  || jN                  «      }!tQ        | |!||||||¬«       Œ7 yyt        | |j                  jR                  «      ryt        | |j                  jT                  «      ryy)z0
    Recursively parse COLLADA scene nodes.
    r   Nr<   rJ   r   éÿÿÿÿr   )rW   rK   )ÚcontainsÚcounts)r`   rk   rb   rX   r   r   )Úframe_toÚmatrixr   r   )+r   rN   r*   rp   r   r"   ÚsymbolÚtargetr%   r$   rm   ÚpolylistÚPolylistÚtrianglesetÚTriangleSetr:   Úvertex_indexÚreshapere   ÚnormalÚnormal_indexÚsourcesÚindexÚdatar(   ÚarangeÚshaperK   ÚcopyÚtexcoordsetÚtexcoord_indexsetr   r9   ÚTextureVisualsr   r]   rq   rM   ÚdotrŽ   r,   Ú
CameraNodeÚ	LightNode)"r   r   r   r   r   r   r   r   r   r   Úlocal_material_mapÚmnr�   r3   Ú	primitiver:   r•   r`   r|   r—   r˜   rz   ÚsÚcolorÚcolor_indexrk   ÚvisrK   rW   ÚtexcoordÚtexcoord_indexÚ	geom_nameÚchildrŽ   s"                                     r5   r,   r,   ®   s²  € ó ô �$˜Ÿ™×2Ñ2Õ3Ø—=‘=ˆð  ÐØ—.”.ˆBØ—Y‘YˆFØ—	‘	ˆAØ�t‰t�|Ñ#Ø-9¸!¿$¹$Ñ-?Ð" 6Ò*ä-<¸QÀÓ-IÐ" 6Ò*ð !ð "×,Õ,ˆIÜ˜) W×%5Ñ%5×%>Ñ%>Ô?Ø%×1Ñ1Ó3�	Ü˜) W×%8Ñ%8×%DÑ%DÕEØ"×)Ñ)�Ø�>ØØ(×5Ñ5�Ø! ,Ñ/×7Ñ7¼¸LÓ8IÈAÑ8MÈqÓQ�ð �Ø×#Ñ#Ð/Ø&×-Ñ-�FØ#,×#9Ñ#9�LØ$ \Ñ2×:Ñ:¼3¸|Ó;LÈqÑ;PÐRSÓT�Gð �Ø×%Ñ%�Ø˜a‘<¤C¨¨'©
£O°aÒ$7¼CÀ	ÇÁÓ<PÐSTÒ<TØ˜g™J q™M¨!Ñ,×1Ñ1�EØ"+§/¡/²!²Q¸¸'¹
À1¹ÀaÑ8HÐ2HÑ"I�KØ" ;Ñ/×7Ñ7¼¸KÓ8HÈ1Ñ8LÈbÓQ�FäŸ	™	 (§.¡.°Ñ"3Ó4×<Ñ<¸X¿^¹^ÈAÑ=NÐRSÑ=SÐUVÓW�ð �Ø×%Ñ%Ð);Ñ;Ü#Ÿy™yÐ);¸I×<NÑ<NÑ)OÓP�HØ�BÜ˜9×0Ñ0Ó1°AÒ5Ø#,×#8Ñ#8¸Ñ#;˜Ø)2×)DÑ)DÀQÑ)G˜Ø% nÑ5×=Ñ=Ü  Ó0°1Ñ4°aÐ8ó˜ô !Ÿ.™.×7Ñ7¸2ÈÐ7ÓQ�Cä'¨¯©¸fÈ\ÔZ�	à (Ø"Ø&-Ø%+Ø!Ø (ñ%��yÑ!ð —‘à$-Ø"/Ø$-ñöñe -ôv 
�D˜'Ÿ-™-×,Ñ,Ô	-Ø�=‰=Ð$ØŸœ�äŸ™ ¨t¯{©{Ó;�äØØ"(Ø!-Ø!Ø!-ØØ%Ø%ö	ñ	 'ð %ô  
�D˜'Ÿ-™-×2Ñ2Ô	3àÜ	�D˜'Ÿ-™-×1Ñ1Ô	2àð 
3r7   c                 ó|   — ddl m} |j                  | «      }|j                  t	        j
                  |«      «      }|S )z6
    Load a texture from a file into a PIL image.
    r   )ÚImage)ÚPILr±   ÚgetÚopenr   Úwrap_as_stream)Ú	file_namer   r±   Ú	file_dataÚimages        r5   Ú_load_texturer¹     s3   € õ à—‘˜YÓ'€IØ�J‰J”t×*Ñ*¨9Ó5Ó6€EØ€Lr7   c           	      óh  — ddl }t        j                  d«      }d}t        | j                  |j
                  j                  «      r@	 t        | j                  j                  j                  j                  j                  |«      }n| j                  �| j                  }t        j                  d«      }d}t        | j                   |j
                  j                  «      r@	 t        | j                  j                  j                  j                  j                  |«      }n| j                   �| j                   dd }d	}t        | j$                  |j
                  j                  «      s=| j$                  �1	 t'        | j$                  «      }t        j(                  d
d
|z   z  «      }d}	d}
| j.                  �?	 t        | j.                  j                  j                  j                  j                  |«      }
| j0                  �bt        | j0                  |j
                  j                  «      s8t3        t        j4                  |dd t'        | j0                  d   «      «      «      }t6        j
                  j9                  |||
|||	|¬«      S # t        $ r t        j                  dd¬«       Y �Œw xY w# t        $ r t        j"                  dd¬«       Y �Œ–w xY w# t*        t,        f$ r' t        j"                  d| j$                  › d�«       Y �Œfw xY w# t        $ r t        j"                  dd¬«       Y �Œ>w xY w)z8
    Turn a COLLADA effect into a trimesh material.
    r   Nr   zunable to load base textureT)Úexc_infor<   zunable to load emissive texturer   ç       @zInvalid shininess value: z, using default roughnessg        zunable to load bumpmap)ÚemissiveFactorÚemissiveTextureÚnormalTextureÚbaseColorTextureÚbaseColorFactorÚmetallicFactorÚroughnessFactor)r   r(   ÚonesrN   r[   rK   ÚMapr¹   ÚsamplerÚsurfacer¸   ÚpathÚBaseExceptionr   ÚdebugÚzerosÚemissionÚwarningÚ	shininessÚfloatÚsqrtÚ	TypeErrorÚ
ValueErrorÚbumpmapÚtransparentrP   r]   r   ÚPBRMaterial)r#   r   r   rÁ   rÀ   r½   r¾   rÃ   Úshininess_valuerÂ   r¿   s              r5   r$   r$   $  sÐ  € ó ô —g‘g˜a“j€OØÐÜ�&—.‘. '×"2Ñ"2×"6Ñ"6Ô7ð	DÜ,Ø—‘×&Ñ&×.Ñ.×4Ñ4×9Ñ9¸8ó Ñð
 
�‰Ð	#Ø Ÿ.™.ˆô —X‘X˜a“[€NØ€OÜ�&—/‘/ 7×#3Ñ#3×#7Ñ#7Ô8ð	JÜ+Ø—‘×&Ñ&×.Ñ.×4Ñ4×9Ñ9¸8ó‰Oð
 
�‰Ð	$ØŸ™¨¨!Ð,ˆð €Oä�v×'Ñ'¨×)9Ñ)9×)=Ñ)=Ô>Ø×ÑÐ(ð	Ü# F×$4Ñ$4Ó5ˆOÜ Ÿg™g c¨S°?Ñ-BÑ&CÓDˆOð €Nð €MØ‡~�~Ð!ð	AÜ)Ø—‘×&Ñ&×.Ñ.×4Ñ4×9Ñ9¸8óˆMð ×ÑÐ%¬jØ×Ñ˜G×,Ñ,×0Ñ0ô/ô  Ü�I‰I�o b qÐ)¬5°×1CÑ1CÀAÑ1FÓ+GÓHó
ˆô �?‰?×&Ñ&Ø%Ø'Ø#Ø)Ø'Ø%Ø'ð 'ó ð øôk ò 	DÜ�I‰IÐ3¸d×CÐCð	Dûô ò 	JÜ�K‰KÐ9ÀD×IÐIð	Jûô œ:Ð&ò 	Ü�K‰KØ+¨F×,<Ñ,<Ð+=Ð=VÐW÷ð	ûô ò 	AÜ�K‰KÐ0¸4×@Ð@ð	AúsH   Á>J Ã >J- Å30K Æ4>L Ê J*Ê)J*Ê- KËKË2L
Ì	L
Ì L1Ì0L1c                 ó^  — ddl }t        | t        j                  j                  «      �r| j
                  }|€t        j                  g d¢«      }|dz  }|�t        |«      }| j                  }|�*t        |d   «      t        |d   «      t        |d   «      dg}| j                  }|€d}|�d|dz  z  dz
  }|j                  j                  t        j                  «       j                  g d	||g d
¢t        |«      ¬«      }|j                  j!                  t        j                  «       j                  d|«      } | S |j                  j                  t        j                  «       j                  g d	¬«      }|j                  j!                  t        j                  «       j                  d|«      } | S )z:
    Turn a trimesh material into a COLLADA material.
    r   N)r;   r;   r;   r;   r;   rB   r   r   r¼   Úphong)r   r   r   r   )ÚparamsÚshadingtyper[   rÌ   ÚspecularrÎ   Úpbrmaterial)rÙ   rÚ   Údefaultmaterial)r   rN   r   rK   rÕ   rÁ   r(   rY   rO   r½   rÏ   rÃ   ÚEffectrg   rh   ri   ÚMaterial)rK   r   r[   rÌ   rÎ   r#   s         r5   rT   rT   r  s‡  € ó ô �(œFŸO™O×7Ñ7Õ8Ø×*Ñ*ˆØˆ?Ü—h‘hÒ;Ó<ˆGØ˜E‘/ˆØÐÜ˜7“mˆGà×*Ñ*ˆØÐÜ˜h q™kÓ*¬E°(¸1±+Ó,>ÄÀhÈqÁkÓ@RÐTWÐXˆHà×,Ñ,ˆ	ØÐØˆIØÐ Ø˜i¨™lÑ*¨SÑ0ˆIà×!Ñ!×(Ñ(Ü�J‰J‹L×ÑØØØØÚ)Ü˜IÓ&ð )ó 
ˆð ×#Ñ#×,Ñ,¬T¯Z©Z«\×-=Ñ-=¸}ÈfÓUˆð €Oð ×!Ñ!×(Ñ(¬¯©«×)9Ñ)9À"ÐRYÐ(ÓZˆØ×#Ñ#×,Ñ,¬T¯Z©Z«\×-=Ñ-=Ð?PÐRXÓYˆØ€Or7   c                 óÔ   — t        j                  | d¬«      }t        d„ |j                  «       D «       «      }t        j
                  j                  |«      }t        ||   fd|i|¤Ž}|S )aX  
    Load a ZAE file, which is just a zipped DAE file.

    Parameters
    -------------
    file_obj : file object
      Contains ZAE data
    resolver : trimesh.visual.Resolver
      Resolver to load additional assets
    kwargs : dict
      Passed to load_collada

    Returns
    ------------
    loaded : dict
      Results of loading
    Úzip)Ú	file_typec              3   ó`   K  — | ]&  }|j                  «       j                  d «      sŒ#|–— Œ( y­w)z.daeN)ÚlowerÚendswith)Ú.0ry   s     r5   Ú	<genexpr>zload_zae.<locals>.<genexpr>²  s$   è ø€ ÐM¡˜1°!·'±'³)×2DÑ2DÀVÕ2L”Q¡ùs   ‚$.§.r   )r   Ú
decompressÚnextÚkeysr   Ú	resolversÚZipResolverr6   )r.   r   r0   Úarchiver¶   Úloadeds         r5   Úload_zaerï   ›  sd   € ô( �o‰o˜h°%Ô8€Gô ÑM §¡¤ÓMÓM€Iô ×Ñ×+Ñ+¨GÓ4€Hô ˜' )Ñ,ÑJ°xÐJÀ6ÑJ€FØ€Mr7   r   ÚdaeÚzae)ÚExceptionWrapperzmissing `pip install pycollada`)rð   rñ   )NT)N)rž   rs   rg   Únumpyr(   Ú r   r   Ú	constantsr   r   Úeyer-   ÚflagsÚ	writeabler6   rˆ   r,   r¹   r$   rT   rï   Ú_collada_loadersÚ_collada_exportersÚ
has_moduleÚ
exceptionsrò   ÚImportErrorÚ_excÚupdate© r7   r5   Ú<module>r     sÓ   ðÛ Û 	Û ã ç Ý Ý à€r‡v�vˆaƒy€Ø€‡
�
Ô óFBòRSòlhòVòKò\&óRðD Ð ØÐ Ø€4‡?�?�9ÔØ*Ð�UÑØ&Ð�UÑØ .Ð�uÒõ .á™KÐ(IÓJÓK€DØ×Ñ D°Ñ6Ô7Ø $Ð�uÒr7   