
    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                   A/DATA/.local/lib/python3.12/site-packages/trimesh/exchange/dae.pyload_colladar6      s=   , NN##NN--NN,,NN,,NN..NN--
  	1A L[[,VX>QTT  ;;  D|rzz$,X&vY/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dT5#rzz:;AE&!1%88xx}}	)'(9(9:XX[[(*((0058!RaR%@%'XXahh.A.A%BU%J

"&(%'XXahh.A.A%BU%J

"			$	3 >>--1::--/
 ..,,Q--557
 ^^--/
Ax8Ax)9:G$NR122!2::<I :/ABMM)$C^^// 0/F Wo>MM&!((DJJL,<,<djjl>N>NPVW))AGGOO-s6{;A3''VDv&	D!--,,VS,D==--dWI>}}!!D*z!BTm "n MM/EHHOOEAG


AGGAJFF1I668Or7   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 rt9        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YYF		Att|#-9!$$-?"6*-<Q-I"6* ! ",,I)W%5%5%>%>?%113	)W%8%8%D%DE"))>(55!,/77L8IA8MqQ ##/&--F#,#9#9L$\2::3|;Lq;PRSTG %%a<C'
Oa$7C	<PST<TgJqM!,11E"+//!Q'
1a8H2H"IK";/77K8H18LbQF		(.."34<<X^^A=NRS=SUVW %%);;#yy);I<N<N)OPHB9001A5#,#8#8#;)2)D)DQ)G%n5== 014a8 !..7727QC'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JJt**956E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     ggajO&..'"2"2"6"67	D,&&..44998 
 
	# .. XXa[NO&//7#3#3#7#78	J+&&..44998O
 
	$!, Ov'')9)9)=)=>(	#F$4$45O ggcS?-B&CDO N M~~!	A)&&..44998M %jG,,00/  IIobq)51C1CA1F+GH
 ??&&%'#)'%' '  k  	DII3dCC	D  	JKK9DII	J :& 	KK+F,<,<+==VW	  	AKK04@@	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     (FOO778**?hh;<GE/7mG**hqk*E(1+,>hqk@RTWXH,,	I il*S0I!!((JJL)I& ) 
 ##,,TZZ\-=-=}fU O !!(()9)9"RY(Z##,,TZZ\-=-=?PRX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!'')2D2DV2LQs   $..r   )r   
decompressnextkeysr   	resolversZipResolverr6   )r.   r   r0   archiver   loadeds         r5   load_zaer     sd    ( ooh%8G MMMI ++G4H '),JxJ6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     	     rvvay

 FBRSlhVK\&RD   4??9*U&U .u .K(IJKDD67 $ur7   