
    Ti>:                     l   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j        d          reed<   eed<   eed<   dS ddlmZ  e ed                    Ze                    eed           eed<   dS )    N   )utilvisual)log)unique_name   FTc                    ddl }|rE|j        j        |j        j        |j        j        |j        j        |j        j        |j        j        g}nd}|                    | |          }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                   N/DATA/AppData/hermes/venv/lib/python3.11/site-packages/trimesh/exchange/dae.pyload_colladar6      sL   , NNN 
N#N-N,N,N.N-
  	11A L[ ? ?,VX>>QT; D|rz$,,|X&///0 FLE 

 

%%		
 		
 		
 		
 		
 u&AAA    c                 	   ddl }| }t          | t          t          t          t
          j        f          s| g}|                                }g }t          |          D ]\  }}d}d}	t          d          }
|j
        j        r|j
        j        dk    r&t          |j
        j                  }
|j
        j        }n|j
        j        dk    rG|j
        j        dz  ddddf         }	t          j        |j
        j                  dz  |
j        _        n;|j
        j        dk    r+t          j        |j
        j                  dz  |
j        _        |j                            |
j                   |j                            |
           |j                            d|j                                        d	          }|j                            d
|j                                        d	          }|j                                        }|                    ddd           |                    ddd           ||g}|mt=          |          dk    rZ|j                            d|                                d          }|                    ddd           |                    |           |	`d}|rd}|j                            d|	                                d          }	|                    |dd           |                    |	           |j                             |tC          j"                    j#        tC          j"                    j#        |          }t          j$        |j%                                        t=          |                    }d| }|&                    |||          }|j'                            |           |j(                            |           |j)        *                    ||
g           }|j)        +                    ||g          }|j)        ,                    d| |g          }|                    |           |j)        -                    d|          }|j.                            |           ||_)        t_          j0                    }|1                    |           |2                    d           |3                                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   sT    NNNFdT5#rz:;; AE&!! 6 61%%8 	Kx}	))'(9::X[(**(058!!!RaR%@%'Xah.A%B%BU%J
""&((%'Xah.A%B%BU%J
"		$$$	3 >--1:--//
 
 .,,Q-5577
 
 ^--//
Ax888Ax)9:::G$NR122!2::<< I :/ABBBMM)$$$C ^// 0 0/ F Wo>>>MM&!!!((DJLL,<djll>NPVWW)AGOO--s6{{;;A''VDDv&&&	D!!!-,,VS,DD=--dWI>>}!!***z!BBTM//EHOOEAG

AGGAJJJFF1III6688Or7   c                 b   ddl }t          | |j        j                  r| j        }	i }
| j        D ]=}|j        }|j        }|j        |v r||j                 |
|<   *t          ||          |
|<   >|	j
        D ]}t          ||j        j                  r|                                }t          ||j        j                  rR|j        }|V|j        }||                             t%          |          dz  d          }d}|j        :|j        }|j        }||                             t%          |          dz  d          }d}|j        }d|v rt%          |d                   dk    rt%          |j                  dk    rk|d         d         d         j        }|j        dddd|d         d         d         f         }||                             t%          |          dz  d          }t1          j        |j        d                                       |j        d         dz  d          }d}|j        |
v rt9          j        |
|j                           }d}t%          |j                  dk    rG|j        d         }|j        d         }||                             t%          |          dz  df          }t>          j         !                    ||          }tE          |	j        ||	          }||||||d
||<   |#                    |||d           dS t          | |j        j$                  rF| j%        ;| j%        D ]5} t1          j&        || j'                  }!tQ          | |!||||||           4dS dS t          | |j        j)                  rdS t          | |j        j*                  rdS dS )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,      s4    NNN $233 _=  . 	J 	JBYF	At|##-9!$-?"6**-<Q-I-I"6** ", 8	 8	I)W%5%>?? 4%1133	)W%8%DEE 5")>(5!,/77L8I8IA8MqQQ #/&-F#,#9L$\2::3|;L;Lq;PRSTTG %a<<C'
OOa$7$7C	<P<PST<T<TgJqM!,1E"+/!!!QQQ'
1a8H2H"IK";/77K8H8H18LbQQF	(."344<<X^A=NRS=SUVWW %);;;#y);I<N)OPPHB9011A55#,#8#;)2)DQ)G%n5== 0014a8  !.7727QQC'f\ZZZ	 ("&-%+! (% %y! $-"/$-   e8	 8	v 
D'-,	-	- =$  t{;;"(!-!!-%%	 	 	 	 	 %$  
D'-2	3	3 	D'-1	2	2  r7   c                     ddl m} |                    |           }|                    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     sH     Y''IJJt*95566ELr7   c           	      V   ddl }t          j        d          }d}t          | j        |j        j                  rQ	 t          | j        j        j	        j
        j        |          }n4# t          $ r t          j        dd           Y nw xY w| j        | j        }t          j        d          }d}t          | j        |j        j                  rQ	 t          | j        j        j	        j
        j        |          }n<# t          $ r t          j        dd           Y nw xY w| j        | j        dd         }d	}t          | j        |j        j                  sk| j        d	 t'          | j                  }t          j        d
d
|z   z            }n4# t*          t,          f$ r  t          j        d| j         d           Y nw xY wd}	d}
| j        Q	 t          | j        j        j	        j
        j        |          }
n&# t          $ r t          j        dd           Y nw xY w| j        at          | j        |j        j                  sBt3          t          j        |dd         t'          | j        d                                       }t6          j                            |||
|||	|          S )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    NNN gajjO&.'"2"677 )	D,&.498     	D 	D 	DI3dCCCCCC	D		# . Xa[[NO&/7#3#788 -	J+&.498 OO  	J 	J 	JK9DIIIIII	J		$!, Ov')9)=>>
(	#F$455O gcS?-B&CDDOO:& 	 	 	KWF,<WWW    	 N M~!	A)&.498 MM  	A 	A 	AK04@@@@@@	A %jG,0/ /%  Iobqb)51CA1F+G+GHH
 
 ?&&%'#)'%' '   sG   )A% % BB)C9 9 DD.F .F>=F>)G7 7 HHc                 4   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                            t          j                    j        g d	||g d
t          |                    }|j                            t          j                    j        d|          } ne|j                            t          j                    j        g d	          }|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    NNN (FO788 Z*?h;;;<<GE/7mmG*hqk**E(1+,>,>hqk@R@RTWXH,	I il*S0I!((JLL)))I&& ) 
 
 #,,TZ\\-=}fUU!(()9"RY(ZZ#,,TZ\\-=?PRXYYOr7   c                     t          j        | d          }t          d |                                D                       }t          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   h   K   | ]-}|                                                     d           )|V  .dS )z.daeN)lowerendswith).0ry   s     r5   	<genexpr>zload_zae.<locals>.<genexpr>  s=      MM1!''))2D2DV2L2LMQMMMMMMr7   r   )r   
decompressnextkeysr   	resolversZipResolverr6   )r.   r   r0   archiver   loadeds         r5   load_zaer     s|    ( oh%888G MMMMMMMI ++G44H '),JJxJ6JJF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    				                         rvayy
 FB FB FB FBRS S Slh h hV  K K K\& & &R   D   4?9 
%*U&U .u .-----KK(IJJKKDD66777 $ur7   