
    Mi=                         S r SSKr SSKJr  SSK	r	SSK
r
SSKJr  SSKJr  S rS	 r SSKrSS
KJr  S\0rg! \ a  rSSKJr  \" \5      r SrCNCSrCff = f! \ a  rSSKJr  S\" \5      0r SrCgSrCff = f)zt
threedxml.py
-------------

Load 3DXML files, a scene format from Dassault products like Solidworks, Abaqus, Catia
    N)Image   )ExceptionWrapper)util)TextureVisualsc                    [         R                  " U SS9n0 nUR                  5        H,  u  pV [        R                  " UR                  5       5      XE'   M.     US   R                  S5      R                  nXG   nUR                  S5      R                  S   n	0 n
0 nSnX;   Ga  XL   nUR                  S	5       GH]  nUR                  S
   nUR                  S   R                  S5      S   nUU   R                  S5      nUR                  S5      nUb[  [        R                  " [        R                   " UR                  S   5      5      S-  R#                  [        R$                  5      nUX'   UR                  S5      nUc  M  UR                  S   R                  S5      S   R                  S5      u  nnUU   R                  SU S35      nUc  GM  UR'                  SS5      R                  S5      S   n[(        R*                  " UU   5      X'   GM`     UR                  S5       H|  nUR                  S5      nUR-                  S5       HS  nU
R'                  UR                  5      U
UR                  '   UR'                  UR                  5      UUR                  '   MU     M~     [.        R0                  " [2        5      nS nUR                  S5      nUbt  UR                  S5       H_  nUR                  S5      n U c  M  U" U 5      n!UR-                  S 5       H)  n"U"R                  R                  S5      S   n#U!UU#   S!'   M+     Ma     0 n$UR                  S"S#9 GH  n%U%R                  S
   n&U%R                  S   R                  S5      S   n'U%R                  S$   n(U(S%;  a)  [         R4                  R7                  S&U'< S'U(< 35        Mr  / n)/ n*/ n+/ n,/ n-Sn.U'U;  a+  U'U;   a%  [         R4                  R7                  S(U'< 35        M  UU'   R                  S)5       GH1  n// n0U/R                  S*5      n1U1c  M  U,R9                  [        R:                  " U1R                  R=                  S+S,5      S,[        R>                  S-9RA                  S.5      5        U/R                  S/5      n2U+R9                  [        R:                  " U2R                  R=                  S+S,5      S,[        R>                  S-9RA                  S.5      5        U/R                  S05      n3U3b  [        R:                  " U3R                  R=                  S+S,5      S,[        R>                  S-9n4S1U3R'                  S25      :X  aD  U-R9                  [        RB                  " U4[        RD                  " [G        U45      5      /S3S495        O!U-R9                  U4RA                  SS55      5        U/R                  S65      n5U5c  SnODU5R                  S
   R                  S5      S   R                  S5      u  nnUR'                  U5      n.U/R                  S75       GH  n6/ n7U6R                  S85       GH  n8S9U8R                  ;   au  U8R                  S9   R                  S+5       V9s/ s H'  n9[        R:                  " U9S,[        RH                  S-9PM)     n:n9U7RK                  [         RL                  " U:5      5        S:U8R                  ;   aO  U7RK                  [        R:                  " U8R                  S:   S,[        RH                  S-9RA                  S.5      5        S;U8R                  ;   au  U8R                  S;   R                  S+5       V9s/ s H'  n9[        R:                  " U9S,[        RH                  S-9PM)     n;n9U7RK                  [         RN                  " U;5      5        U0RK                  U75        U
R'                  U/ S<Q5      n<U8R                  S=5      n=U=b  U" U=5      SS> n<U*R9                  [        RP                  " U<[G        U75      S345      5        GM     GM     U)R9                  U05        GM4     0 n>[         RR                  " U,U)5      u  U>S?'   U>S@'   [        RT                  " U+5      U>SA'   U-(       a)  U.(       a"  [W        [        RT                  " U-5      U.SB9U>SC'   O[        RT                  " U*5      U>SD'   SESF0U>SG'   SHU>SI'   U>U$U&'   U&UU&   SJ'   GM     UR                  SK5       H%  n?U?R                  SL   SMSN.UU?R                  S
   '   M'     UR                  SO5       H`  n@U@R                  S
   nAU@R                  S5      R                  nU@R                  S5      R                  nUUA   RY                  UUSPSQ.5        Mb     UR                  SR5       GH
  nB[        RZ                  " SS5      nCUBR                  ST5      nDUDbn  [        R                  " WDR                  R                  5       [        R>                  SU9nDUDSSV RA                  SW5      R\                  WCSS>2SS>24'   UDSVS UCSS>2S>4'   WBR                  S
   nAUBR                  SL   nEUBR                  S5      R                  nUBR                  S5      R                  nUUA   RY                  UUWCUESXSY.5        GM     [^        R`                  " 5       nFUR                  5        H<  u  pVSZU;   a  WFRc                  USZ   U5        S[U;   d  M(  WFRc                  XVS[   5        M>     / nGU$Re                  5        H(  nHWGRK                  [^        Rf                  " WFU	UHS\95        M*     UU	   SL   nIUI[        RZ                  " SS5      S]./nJ0 nKWG H  nLSnESLUULS^      ;   a  UWLS^      SL   nEUEWKULS   '   WES-   SRi                  WL5      -   nMUL V9s/ s H  n9S_UU9   ;   d  M  UU9   S_   PM     nNn9[G        UN5      S:X  a  [        RZ                  " SS5      nCO+[G        WN5      S3:X  a  WNS   nCO[         Rj                  " WN5      nCWJR9                  WCWIWMWLS   S`.5        M     0 nOU$R                  5        H  u  nPnQUPWK;   d  M  WQWOWKWP   '   M     WJ H  nRSJUR;  a  M  WKWRSJ      URSJ'   M     SaWOWJSb.nSUS$ ! [        R                   a    UR                  S5         GM  f = fs  sn9f s  sn9f s  sn9f )ca  
Load a 3DXML scene into kwargs. 3DXML is a CAD format
that can be exported from Solidworks

Parameters
------------
file_obj : file object
  Open and containing 3DXML data

Returns
-----------
kwargs : dict
  Can be passed to trimesh.exchange.load.load_kwargs
zip)	file_typer   zManifest.xmlz{*}Rootz{*}ProductStructurerootzCATMaterialRef.3dxmlz{*}MaterialDomainidassociatedFilez
urn:3DXML:z%{*}Feature[@Alias='RenderingFeature']z{*}Attr[@Name='DiffuseColor']NValue   z{*}Attr[@Name='TextureImage']:#z.{*}CATRepImage/{*}CATRepresentationImage[@id='z'] z{*}MaterialDomainInstancez{*}IsInstanceOfz{*}IsAggregatedByc           	         SU R                   R                  5       ;   d   e[        R                  " S Vs/ s H  oR	                  US5      PM     sn[        R
                  S9nUS-  R                  [        R                  5      $ s  snf )z
Return (4,) uint8 color array defined by Color element attributes.

Parameters
-----------
color : lxml.Element
  Element containing RGBA colors.

Returns
-----------
as_int : (4,) np.uint8
  Colors as uint8 RGBA.
RGBAColorType)redgreenbluealphag      ?dtyper   )attribvaluesnparraygetfloat64astypeuint8)colorchannelrgbas      t/var/www/eduai.edurigo.com/storigo/production/storigo_env/lib/python3.13/site-packages/trimesh/exchange/threedxml.pyget_rgbaload_3DXML.<locals>.get_rgbaj   sr     %,,"5"5"7777xx4UV4UYYw$4UV**

 s
""288,,	 Ws   Bz{*}DefaultViewz{*}DefaultViewPropertyz2{*}GraphicProperties/{*}SurfaceAttributes/{*}Colorz{*}OccurenceId/{*}idr$   z{*}ReferenceRep)tagformat)TESSELLATEDzReferenceRep z unsupported format zunable to load Rep z{*}Repz{*}VertexBuffer/{*}Positions, )sepr   )r      z{*}VertexBuffer/{*}Normalsz%{*}VertexBuffer/{*}TextureCoordinates1D	dimension   )axisr   z9{*}SurfaceAttributes/{*}MaterialApplication/{*}MaterialIdz{*}Facesz{*}Facestrips	trianglesfans)   r8   r8   z{*}SurfaceAttributes/{*}Colorr0   verticesfacesvertex_normals)uvimagevisualface_colorsunitsmmmetadataTrimeshclassgeometryz{*}Reference3DnameReference3D)rF   typez{*}InstanceRepInstanceRep)	aggregateinstancerH   z{*}Instance3D   z{*}RelativeMatrixr   	   )r0   r0   
Instance3D)rJ   rK   matrixrF   rH   rJ   rK   )sourcetarget)frame_torO   rO   )rO   
frame_fromrR   rE   Scene)rD   rE   graph)6r   
decompressitemsetreeXMLreadXMLSyntaxErrorseekfindtextr   itersplitr   r   jsonloadsr"   r#   r    r   openfindallcollectionsdefaultdictdictlogwarningappend
fromstringreplacer!   reshapestackzeroslenint64extendtriangle_strips_to_facestriangle_fans_to_facestileappend_facesvstackr   updateeyeTnxDiGraphadd_edgekeysall_simple_pathsjoin	multi_dot)Tfile_objargskwargsarchiveas_etreekv	root_filetreeroot_idcolorsimagesmaterial_keymaterial_treeMaterialDomainmaterial_idmaterial_filerenddiffusergbtexturetex_filetex_id	rep_image
image_fileMaterialDomainInstancerK   rJ   
referencesr(   viewViewPropr$   r&   
occurrencereference_id
geometriesReferenceReppart_id	part_filepart_format
mesh_facesmesh_colorsmesh_normalsmesh_verticesmesh_uv
mesh_imageRep	rep_facesr9   normalsr<   rep_uvmaterialr:   r6   faceir5   r7   	faceColorcolorElementmeshrG   rI   currentrN   rO   relativerF   rV   pathsgeometry_id	root_namegraph_kwargs
geom_namespath	node_namematrices
geom_finalkeyvaluekwargresultsT                                                                                       r'   
load_3DXMLr      s*    ooh%8G H	))AFFH-HK	   (--i8==IDii-.55f=G FF)L .+001DEN(//5K*112BCII,WM M*//0WXDii ?@G "xx

7>>'+B CDsJRRHH '*#ii ?@G"#*>>'#:#@#@#Eb#I#O#OPS#T &$X.33HPRS	 (!*/?!D!J!J3!OPR!SJ*/**WZ5H*IF'- F2 '4&8&89T&U"-223DEH3;;<OP	)/HMM)By~~&)/HMM)By~~& Q 'V ((.J-0 99%&D		":;HMMIE }E?D&../EF
)44S9"=48
<(1 G < J 		&7	8%%d+ ''(89??DRH	"))(3..HH	},@P  

H$g)=HH29-@A I&++H5CIxx >?H
   MM))#s3BJJ''" hh;<GLL((c22::''" ABB~GGOOC-3bjj 266+..NN288VRXXc&k5J,KRS#TUNN6>>"a#89xxUH " OOD)//=bAGGL - $ZZ4
*-	!JJy1D4;;. &*[[%:%@%@%E"%E MM!BHHE%E  "
 "(()F)Fv)NO"dkk1!((MM $K 8c%gg. , &*[[%8%>%>s%C %C MM!BHHE%C   
 "(()D)DT)JK$$Y/ !'

; HI#'99-L#ML#/$,\$:2A$>	&&rwwy3y>1:M'NOI 2 .N i(g 6p ,0,=,=mZ,X)j	4=!#<!8z+ryy/ATDN"$))K"8D $T?Z!W"
7*1
7J'E 9J yy!12&&v.!0

;%%d+, 3 yy!12$$T*##$56;;$$%89>>	7""#=Q	
 3 ii0
??#67xx 3 3 5RZZHH &bq\11&9;;F2A2rr6N$QRLF2A2q5M##D)  (??#45::OO$78==	7""&$ $	
! 16 JJLE  "!NN1[>1-?NN1
m, # E!(R((w{ST ) 7#F+I "+bffQi@AL J ZR))d2h'/D#'JtBx  3J$/	 6:WTXTU=V+JqM(+TWx=AVVAYF]aa[F^^H-F '% H		
' < J &&(
U**/Jz#' ) U"&uZ'89j  JNFMk
 ## 	FF1II	^" n Xs)   &r1.s1.s#s(%s(1%ssc                 N    [         R                  " U SS9R                  S5      nU$ )zV
Pretty-print an lxml.etree element.

Parameters
------------
element : etree element
T)pretty_printzutf-8)rY   tostringdecode)elementprettys     r'   print_elementr     s$     ^^G$7>>wGFM    )rY   3dxml)__doc__numpyr   PILr   BaseExceptionE
exceptionsr   rf   rb   r   r   visual.texturer   r   r   networkxr|   lxmlrY   _threedxml_loaders r   r'   <module>r      s    	      +m`	
8!:._    .QE `  8-!#3A#67	8s+   8 A AAAA9A44A9