
    TiL                        d dl Z d dlZd dlZd dlmZ d dlZddlmZm	Z	 ddl
mZ ddl	mZ d Zdd	Zd
ej        dfdZd Z	 d dlZd dlmZ deiZdeiZdS # e$ r+ZddlmZ d ee          iZd ee          iZY dZ[dS dZ[ww xY w)    N)defaultdict   )graphutil)log)unique_namec                    |                      d          }|                      d          }d                    d |                    d          D                       }t          j        |t          j        d                              d          }d                    d |                    d	          D                       }t          j        |t          j        d                              d          }||fS )
a  
    Read a `<mesh ` XML element into Numpy vertices and faces.

    This is generally the most expensive operation in the load as it
    has to operate in Python-space on every single vertex and face.

    Parameters
    ----------
    mesh : lxml.etree.Element
      Input mesh element with `vertex` and `triangle` children.

    Returns
    ----------
    vertex_array : (n, 3) float64
      Vertices
    face_array : (n, 3) int64
      Indexes of vertices forming triangles.
    z{*}verticesz{*}triangles c                 d    g | ]-}|j         d           d|j         d          d|j         d          .S )xr
   yzattrib.0is     R/DATA/AppData/hermes/venv/lib/python3.11/site-packages/trimesh/exchange/threemf.py
<listcomp>z_read_mesh.<locals>.<listcomp>)   sP     	
 	
 	
 x}>>qx}>>qx}>>	
 	
 	
    z	{*}vertex)dtypesep)   c                 d    g | ]-}|j         d           d|j         d          d|j         d          .S )v1r
   v2v3r   r   s     r   r   z_read_mesh.<locals>.<listcomp>3   sP     	
 	
 	
 x~AAAA$AA	
 	
 	
r   z{*}triangle)findjoiniternp
fromstringfloat64reshapeint64)meshverticesfacesvsv_arrayfsf_arrays          r   
_read_meshr.      s    ( yy''HIIn%%E 
	
 	
]];//	
 	
 	

 
B mBbjc:::BB7KKG 
	
 	
ZZ..	
 	
 	

 
B mBbhC888@@IIGGr   Tc           
        , t          j        | d          }t          t          d |                                D                                 }t          t          j        |dd                    \  }}d|j        v rd|j        d         i}ndd	i}i }t          t                    }	t          t                    }
t          t                    }g }i }t                      }|                    d
           t          j        |dd          D ]\  }}d|j        v r$|j        d         }t          |j                            dt          |                    ||          }|                    |           |||<   |                    d          D ]J}t#          |          \  }}|	|                             |           |
|                             |           K|                    d          D ]O}|j        d         }t'          |j                  }||                             ||f           t          d |j                                        D             d          }|||v r||                             d
           t          |j                            dt          |                    ||          }|                    |           |||<   t          j        ||         dd          D ]M\  }}t#          |          \  }}|	|                             |           |
|                             |           NQd|j        v rj|                    d          D ]T}t'          |j                  }|j                            dd          }|                    |j        d         ||f           Ui }|	                                D ]}t          j        |	|         |
|                   \  }}||         }|||                                d||<   ||                             d |                                D                        t1          j                    }|D ]\  }} }|                    d|||             |                                D ]%\  }!}"|"D ]\  }} |                    |!||            &g }#t          t                    }$t                      }%t7          j        |d          D ]I}t7          j        ||d          }&t=          |&          d k    r	|&d
         }nt          j        |&          }|d!         d
         }'|'|vrtA          j!        d"|' d#           ut=          |d!                   d k    r0tE          |d!         d          t                    r|d!         d          }n||'         }t          ||%          }|%                    |           ||'         }(t=          |          d$k    r)|d%         d
         })|$|)                             |'           |#                    d|||(d&           K|rtG          d' |                                D                       rd( |                                D             ,|$                                D ]]\  })}*t=          |*          d k    r||)         $                    d)          d
         ,|t          t          |*                             <   ^,fd*|                                D             }|#D ]}+d+|+v r,|+d+                  |+d+<   d|#||d,}|S )-z
    Load a 3MF formatted file into a Trimesh scene.

    Parameters
    ------------
    file_obj : file-like
      Contains 3MF formatted data

    Returns
    ------------
    kwargs : dict
      Constructor arguments for `trimesh.Scene`
    zip)	file_typec              3   L   K   | ]\  }}d |                                 v |V   dS )z3d/3dmodel.modelNlowerr   kvs      r   	<genexpr>zload_3MF.<locals>.<genexpr>O   s9      WWDAq7IQWWYY7V7Va7V7V7V7VWWr   z{*}model)start)tageventsunitunitsmillimetersr   )z	{*}objectz{*}build)endobjectidnamez{*}meshz{*}componentobjectidc              3   p   K   | ]1\  }}|                     d           |                    d          V  2dS )path/N)endswithstripr5   s      r   r8   zload_3MF.<locals>.<genexpr>   sA      UUda!**VBTBTUQWWS\\UUUUUUr   Nbuildz{*}item
partnumber)r(   r)   metadatac                     i | ]
\  }}|||S N r5   s      r   
<dictcomp>zload_3MF.<locals>.<dictcomp>   s    NNNdaQr   world)keymatrix)rR   )GsourcerR   )rS   	traversalr      r   zid z included but not defined!r   )
frame_fromframe_torR   geometryc              3   B   K   | ]}d |                                 v V  dS )bodyNr3   r   s     r   r8   zload_3MF.<locals>.<genexpr>   s/      FF16QWWYY.FFFFFFr   c                     i | ]}||S rN   rN   )r   r6   s     r   rO   zload_3MF.<locals>.<dictcomp>   s    ...1!Q...r   (c                 (    i | ]\  }}|         |S rN   rN   )r   r6   mrenames      r   rO   zload_3MF.<locals>.<dictcomp>  s#    :::41a&)Q:::r   rZ   )
base_framer   rZ   rK   )%r   
decompressnextr!   itemsetree	iterparser   r   listsetseekr:   r   getstraddr.   append_attrib_to_transformkeysappend_facescopyupdatenxMultiDiGraphadd_edger   multigraph_pathsmultigraph_collectlen	multi_dotr   warning
isinstanceallsplit)-file_objpostprocesskwargsarchivemodel_eventrootrK   id_namev_seqf_seq
componentsbuild_itemsconsumed_countsconsumed_names_objindexrB   r'   r7   fc
mesh_index	transformrE   r`   itemrJ   meshesgidgtfr9   group
graph_argsparents
used_names
transformslastgeomparent	mesh_nameargra   s-                                               @r   load_3MFr   =   s     oh%888GWWGMMOOWWWWWXXE J
SSSTTLFDT[01 ]+ GEE T""J K OUUN 
JJqMMM/%-FxXXX ;U ;U3swJt$E
 
vs5zz22NO D t$$$!GEN ++ ' '!$''1e##A&&&e##A&&&& XXn-- 4 4Xj1
0::	5!((*i)@AAA UUahnn.>.>UUU  #DM&&q)))&
vs:??&' D
 #&&t,,,*.GJ' %Ix! ! ! 4 41  *!}}1j)00333j)003333 cg++ U U0==	![__\4@@
""DK
$;Y
#STTTT Fzz|| 	P 	P sU3Z881s| 
 
t 	tNNfllnnNNNOOOO 	A  + < <R	

7CZ
;;;; #((** . .u 	. 	.GCJJuc"J----	. J#GJ&7;;; *
 *
-T(SSS
z??a"1IIz22I Bx{wK>d>>>???tBx==1DHQK!=!=8A;DD 4=D 4,,t t} t99q=="Xa[FFO%%%% # 	 	
 	
 	
 	
  :sFFFFFFF :.....!( 	S 	SFI 9~~""5<V_5J5J35O5OPQ5RF74Y00122 ;:::6<<>>::: 	: 	:CS  "(Z"9J 	 F Mr   i      c                     ddl m} t          | |          s ||           } | j        }| j                                        }| j        j        }ddddddd	}d
di}	g   fd}
t          j                    }d|i}||d<   t          j
        |fddi|5 }|                    dd          5 }t          j        |d          5 }|                                 |                    dddi|          5  |                    d          5  t!          |                                          D ]%\  }\  }} |
|          |dt%          t'          j                              d} |j        dBi |5  |                    d          5  |                    d          5  |                                 t-          dt/          |j                  |          D ]h}|j        |||z            }dt/          |          z  }|                     |j        |                                                     d                     i	 d
d
d
           n# 1 swxY w Y   |                    d           5  |                                 t-          dt/          |j                  |          D ]h}|j        |||z            }d!t/          |          z  }|                     |j        |                                                     d                     i	 d
d
d
           n# 1 swxY w Y   d
d
d
           n# 1 swxY w Y   d
d
d
           n# 1 swxY w Y   '|j        D ]}}||k    s|                    d"          rt/          ||                   dk    r9 |
|          |dt%          t'          j                              d} |j        dBi |5  |                    d#          5  ||                                         D ]\  }}d$                     d% tC          j"        |d&                   d
d'd
d(f         j#                                        D                       }|                    t          j$        d)d*|v r |
|d*                   n
 |
|          |d+                     	 d
d
d
           n# 1 swxY w Y   d
d
d
           n# 1 swxY w Y   	 d
d
d
           n# 1 swxY w Y   |                    d,d-t%          t'          j                              i          5  ||                                         D ]\  }}|                    d"          rd$                     d. tC          j"        |d&                   d
d'd
d(f         j#                                        D                       }d/                    |d0                   }|                    t          j$        d1d2 |
|%                    d*|                    d3||t%          t'          j                              d4|i|                     	 d
d
d
           n# 1 swxY w Y   d
d
d
           n# 1 swxY w Y   d
d
d
           n# 1 swxY w Y   d
d
d
           n# 1 swxY w Y   |                    d5d          5 }t          j        |d          5 }|                                 |                    d6|	          5  d7}|                    t          j$        d8|d9d:;                     d
d
d
           n# 1 swxY w Y   d
d
d
           n# 1 swxY w Y   d
d
d
           n# 1 swxY w Y   |                    d<d          5 }t          j        |d          5 }|                                 d
d=i}g d>}|                    d?|          5  |D ]/\  }}|                    t          j$        d@||A                     0	 d
d
d
           n# 1 swxY w Y   d
d
d
           n# 1 swxY w Y   d
d
d
           n# 1 swxY w Y   d
d
d
           n# 1 swxY w Y   |&                                S )Ca  
    Converts a Trimesh object into a 3MF file.

    Parameters
    ---------
    mesh trimesh.trimesh
      Mesh or Scene to export.
    batch_size : int
      Number of nodes to write per batch.
    compression : zipfile.ZIP_*
      Type of zip compression to use in this export.
    compresslevel : int
      For Python > 3.7 specify the 0-9 compression level.

    Returns
    ---------
    export : bytes
      Represents geometry as a 3MF file.
    r   )Scenez9http://schemas.microsoft.com/3dmanufacturing/core/2015/02z=http://schemas.microsoft.com/3dmanufacturing/material/2015/02z?http://schemas.microsoft.com/3dmanufacturing/production/2015/06z@http://schemas.microsoft.com/3dmanufacturing/beamlattice/2017/02z:http://schemas.microsoft.com/3dmanufacturing/slice/2015/07zBhttp://schemas.microsoft.com/3dmanufacturing/securecontent/2019/04)Nr`   pbsscNz<http://schemas.openxmlformats.org/package/2006/relationshipsc                     | vr                     |            t                              |           dz             S )NrV   )rn   rl   r   )r   modelss    r   model_idzexport_3MF.<locals>.model_idE  s;    F??MM!6<<??Q&'''r   compressioncompresslevelmodewz3D/3dmodel.model)r   zutf-8)encodingr   r<   
millimeter)nsmap	resources)rA   rB   typep:UUIDr@   r'   r(   r   z<vertex x="{}" y="{}" z="{}" />	trianglesz$<triangle v1="{}" v2="{}" v3="{}" />camerar   r
   c              3   4   K   | ]}t          |          V  d S rM   rl   r   s     r   r8   zexport_3MF.<locals>.<genexpr>  s<       9& 9&,- ),A9& 9& 9& 9& 9& 9&r   rR   r      	componentrZ   )rC   r   rI   r   c              3   4   K   | ]}t          |          V  d S rM   r   r   s     r   r8   zexport_3MF.<locals>.<genexpr>  s9       - -'(CFF- - - - - -r   z
{{{}}}UUIDr   r   rC   r   rJ   z_rels/.relsRelationshipsz<http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodelRelationshipz/3D/3dmodel.modelrel0)TypeTargetIdz[Content_Types].xmlz<http://schemas.openxmlformats.org/package/2006/content-types))jpeg
image/jpeg)jpgr   )r   z6application/vnd.ms-package.3dmanufacturing-3dmodel+xml)pngz	image/png)relsz8application/vnd.openxmlformats-package.relationships+xml)texturez9application/vnd.ms-package.3dmanufacturing-3dmodeltextureTypesDefault)	ExtensionContentType)r@   )'scene.scener   r|   rZ   r   to_networkxrb   ioBytesIOzipfileZipFileopenrf   xmlfilewrite_declarationelement	enumeratere   rl   uuiduuid4flushrangery   r(   writeformatflattenencoder)   nodes
startswithr    r"   arrayTElementrk   getvalue)!r'   
batch_sizer   r   r   rZ   r   rb   model_nsmap
rels_nsmapr   r   
zip_kwargsr   r   xfr   rB   r`   attribsbatchfragmentnoderd   datar   uuid_tagrtr   typesextctyper   s!                                   @r   
export_3MFr     s$   * $#####dE"" uT{{}HJ""$$E&J JLNOIR K VWJ F( ( ( ( ( z||H  -J"/J		:	:	:z	:	: OYaVV&SV11 f	Q9
 9
 9
 f	  """ Gfl%;;OO ` `ZZ,, H& H&(1(..2B2B(C(C $* $*9D! #+(4..$($+&)$*,,&7&7	# # (RZ<<G<< * *!#F!3!3 * *%'ZZ
%;%; !* !* %'HHJJJ-21c!*ooz-R-R 	%* 	%*01
1q:~;M0N,MPSTYPZPZ,Z )1 )*,;HOU]]__,M,T,T07-. -.)* )* )* )*	%*	!* !* !* !* !* !* !* !* !* !* !* !* !* !* !* &(ZZ%<%< !* !*$&HHJJJ-21c!'llJ-O-O 
%* 
%*01A
N8J0K,R.1%jj-9 )1 )*,;HOU]]__,M,T,T07-. -.)* )* )* )*
%*!* !* !* !* !* !* !* !* !* !* !* !* !* !* !** * * * * * * * * * * * * * ** * * * * * * * * * * * * * *> !& & &:--1J1J-$uT{++q00$ #+(4..$($+&)$*,,&7&7	# # (RZ<<G<< & &!#L!9!9 & &27+2C2C2E2E !& !&JD$03 9& 9&13$x.1I1I,.QBF2**+GGII	9& 9& 9& 1& 1&I %'HH(-,7 4>3E3E =EHT*EU<V<V<V5=Xd^^=F	-. -.)* )*
%& 
%& 
%& 
%&!&& & & & & & & & & & & & & & && & & & & & & & & & & & & & &&SH& H& H& H& H& H& H& H& H& H& H& H& H& H& H&V ZZ(C
4E4E)FGG  &+J&7&=&=&?&?  
d??844 %$$'HH - -,.HT(^,D,DRaR!V,L,N,V,V,X,X- - - % %	 $0#6#6{37G#H#H!M &$.*d9S9S0T0T$/$,c$*,,.?.?$0$	!" '2	 	 	                 [` ` ` ` ` ` ` ` ` ` ` ` ` ` `f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	R VVM3'' 	1emA.P.P.P 	TV  """O:>> 	 	SM&2!	    	 	 	 	 	 	 	 	 	 	 	 	 	 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 VV)3// 	Y1em7
 7
 7
 	Y  """YZE
 
 
E G511 Y Y"' Y YJCHHU]9QVWWWXXXXYY Y Y Y Y Y Y Y Y Y Y Y Y Y Y'	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	YuOY OY OY OY OY OY OY OY OY OY OY OY OY OY OYb s|  a+Z/Y81Y!	A&S#-ML,B!I;L,IL,IL,'B!L	L,LL,LL, M,L00M3L04M7S#MS#
MB S#S	!CR2&S	2R66S	9R6:S	=S#	SS#SS#Y!	#S''Y!	*S'+9Y!	$DY
>Y!	
YY!	YY!	Y8!Y%%Y8(Y%)Y8,Z8Y<<Z?Y< ZaZ	aZ	a0],]3.\-	!]-\11]4\15]8]]]]]a]	a"]	#a<`54`3`	;``````5`""`5%`"&`5)a5`9	9a<`9	=aaac                    t          j        dt           j                  }d| v r[t          j        | d                                         t           j                                      d          j        }||ddddf<   |S )z
    Extract a homogeneous transform from a dictionary.

    Parameters
    ------------
    attrib: dict, optionally containing 'transform'

    Returns
    ------------
    transform: (4, 4) float, homogeonous transformation
    r   )r   r   )r   r   Nr   )r"   eyer$   r   r~   r%   r   )r   r   valuess      r   ro   ro     sz     q
+++If&-3355RZHHHPPQWXXZ"	"1"bqb&r   )rf   3mf)ExceptionWrapper)T)r   r   r   collectionsr   numpyr"    r   r   	constantsr   r   r.   r   ZIP_DEFLATEDr   ro   networkxrt   lxmlrf   _three_loaders_3mf_exportersBaseExceptionE
exceptionsr   rN   r   r   <module>r	     s|   				   # # # # # #                        - - -`X X X Xv !%'2FVW K K K K\  ,
2X&NZ(NNN 2 2 2--------a001N--a001NNNNNNN	2s   A B BB