
    j(                        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
 ddlmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZ ddlmZ ddlmZ ddZd ZddZddZ ddZ!eeeeeeedZ"e"jG                  e       e"jG                  e       e"jG                  e
       e"jG                  e       e"jG                  e       y)    N   )	resolversutil)log   )_collada_exporters)
export_glbexport_gltf)
export_obj)_off_exporters)_ply_exporters)
export_stlexport_stl_ascii)_3mf_exporters)export_urdf)_xyz_exportersc                    d}d}t        j                  |      rt        |j                               }t	        |t              r|+t        |      j                  d      d   j                         }|t        v rcd}|}t        j                  j                  t        j                  j                  |            }t        |d      }|t        j                  |      }t        |      j                         }|t        vrt        d|      t	        | t         t"        t$        t&        j(                  f      rQd}| D ]  }	|t+        |	j,                        z  } t/        j0                  d	t+        |       ||j3                                nDt5        | d
      r8t/        j0                  dt+        | j,                        |j3                                |dk(  r||d<   t        |   | fi |}
t	        |
t6              rf|5d|
v r1|
j9                  d      |
t        j                  j;                  |      <   |+|
j=                         D ]  \  }}|j?                  ||        |
S t5        |d      rt        j@                  ||
      }n|
}|r|jC                          |S )a  
    Export a Trimesh object to a file- like object, or to a filename

    Parameters
    -----------
    file_obj : str, file-like
      Where should mesh be exported to
    file_type : str or None
      Represents file type (eg: 'stl')
    resolver : None or trimesh.resolvers.Resolver
      Resolver to write referenced assets to

    Returns
    ----------
    exported : bytes or str
      Result of exporter
    FN.Twbz%s exporter not available!r   z2Exporting %d meshes with a total of %d faces as %sfaceszExporting %d faces as %sobjresolver
model.gltf)namedatawrite)"r   
is_pathlibstrabsolute
isinstancesplitlower_mesh_exportersospathabspath
expanduseropenr   FilePathResolver
ValueErrorlisttuplesetnpndarraylenr   r   debugupperhasattrdictpopbasenameitemsr   write_encodedclose)meshfile_obj	file_typer   kwargs
was_opened	file_name	file_pathr   mexportr   r   results                 D/DATA/.local/lib/python3.12/site-packages/trimesh/exchange/export.pyexport_meshrF      s2   ( JIx x((*+(C X,,S1"5<<>I'J I(:(:8(DEIIt,H$55i@ I$$&I'5yAA$uc2::67AS\!E 		@IOO		
 
w			,c$**oy?PQ E%z Y'77F &$ \V%;28**\2JF277##I./ $lln
dDt4 - x!##Hf5 M    c                     t        | d      S )zI
    Export a mesh as a dictionary, with data encoded
    to base64.
    base64)encoding)export_dict)r;   s    rE   export_dict64rL   p   s    
 th//rG   c                    dfd	}g d}| j                   j                         D ci c]  \  }}||v s|| }}}| || j                         || j                         || j                        d}| j
                  j                  dk(  r! || j
                  j                        |d<   |S | j
                  j                  dk(  r || j
                  j                        |d<   |S c c}}w )	z
    Export a mesh to a dict

    Parameters
    ------------
    mesh : trimesh.Trimesh
      Mesh to be exported
    encoding : str or None
      Such as 'base64'

    Returns
    -------------
    export : dict
      Data stored in dict
    c                 t    | j                         S || j                  }t        j                  | |      S )N)dtyperJ   )tolistrO   r   array_to_encoded)itemrO   rJ   s     rE   encodezexport_dict.<locals>.encode   s8    ;;= }

((UXNNrG   )unitsr@   rA   )metadatar   face_normalsverticesfaceface_colorsvertexvertex_colorsN)	rU   r8   r   rV   rW   visualkindrY   r[   )r;   rJ   rS   	meta_keyskvrU   rC   s    `      rE   rK   rK   x   s    "O 4I!%!4!4!6I!6A!y.1!6HI 

#t0014==)	F {{6! &t{{'>'> ?} M 
		X	%"()B)B"CM Js
   C)C)c                 b   | j                   j                         i | j                  j                         | j                  j                         | j
                  j                         | j                  dd}|r6	 t        j                  t        j                  | j                              |d<   |rd}nd}| j                  j!                         D ]7  \  }}t#        |d	      r|j%                  |
      |d}||d   |<   0||d   |<   9 |S # t        $ r t        j                  dd       Y w xY w)z
    Export a Scene object as a dict.

    Parameters
    -------------
    scene : trimesh.Scene
      Scene object to be exported

    Returns
    -------------
    as_dict : dict
      Scene as a dict
    )boundsextentscentroidscale)graphgeometryscene_cacherU   zfailed to serialize metadataT)exc_infodict64r5   rC   )r=   )r   r=   rh   )rg   to_edgelistrc   rP   rd   re   rf   jsonloadsr   jsonifyrU   BaseExceptionr   warningrh   r8   r4   rC   )scene
use_base64include_metadatarC   r=   geometry_namerh   exporteds           rE   scene_to_dictrw      s#   " ((*ll))+}}++---/[[	
	F 	G "&DLL,H!IF:
 		 $)>>#7#7#9x8X& !)<&H 19F:}- 19F:}- $: M/  	GKK6F	Gs   95D  D.-D.c                    t        | j                        dk(  rt        d      t        j                  |      rt        |j                               }|9t        |t
              rt        |      j                  d      d   }nt        d      |j                         j                         j                  d      }|dk(  rt        | fi |}n|dk(  rt        | fi |}n|d	k(  rt        | g| }n|d
k(  r6|%t        |t
              rt        j                   |      }t#        | fd|i|}n|dk(  rt        | d      }n|dk(  rddlm}  |j(                  | fi |}nf|dk(  rt+        d   | j-                         fi |}nC|dk(  rt/        | j-                         fi |}n#|dk(  rt+        d   | fi |}nt        d|       t        |t0              r|t        |t
              ryt        j                   |      }t2        j4                  j                  |      d   }|j7                         D ]/  \  }}	|dk(  r|j9                  ||	       |j9                  ||	       1 |S t;        |d      rt        j<                  ||      S t        |t
              rit2        j4                  j?                  t2        j4                  jA                  |            }
tC        |
d      5 }t        j<                  ||       ddd       |S |S # 1 sw Y   |S xY w)aK  
    Export a snapshot of the current scene.

    Parameters
    ----------
    file_obj : str, file-like, or None
      File object to export to
    file_type : str or None
      What encoding to use for meshes
      IE: dict, dict64, stl

    Returns
    ----------
    export : bytes
      Only returned if file_obj is None
    r   zCan't export empty scenes!Nr   r   zfile_type not specified!gltfglbr5   r   r   rk   T)rs   svg)svg_ioplystl3mfzunsupported export format: r   r   r   )"r1   rh   r+   r   r   r   r    r!   r"   stripr#   lstripr
   r	   rw   r   r*   r   trimesh.path.exchanger|   
export_svgr$   to_meshr   r5   r%   r&   r8   r   r4   r9   r'   r(   r)   )rr   r<   r=   r   r>   r   r|   	bare_pathr   blobrA   fs               rE   export_scener      s   " 5>>a566x x((*+ h$H++C04I788 !'')005I F5+F+	e	%*6*	f	U,V,	e	 
8S 9 11(;H%=(=f=	h	Ut4	e	0 v  1&1	e	u%emmo@@	e	%--/4V4	e	u%e6v66ykBCC $
 
8S 9 11(;Hh/3I"jjl
d<'NN9d3 NN4. + x!!!(D11	Hc	"GGOOBGG$6$6x$@A	)T"aq$' # K4K	 # Ks   K==L)r~   r5   rz   r   ry   rk   	stl_ascii)NNr\   )FT)$rm   r%   numpyr/    r   r   	constantsr   daer   ry   r	   r
   r   r   offr   r}   r   r~   r   r   threemfr   urdfr   xyzr   rF   rL   rK   rw   r   r$   update rG   rE   <module>r      s     	    # )    - #  Zz0+\7t\@ !   ~ &   ~ &   ) *   ~ &   ~ &rG   