
    j=                         d Z ddlZ	 ddlmZ ddl	Z	ddl
Z
ddlmZ ddlmZ d Zd	 Z	 ddlZdd
lmZ deiZy# e$ rZddlmZ  ee      ZY dZ[BdZ[ww xY w# e$ rZddlmZ d ee      iZY dZ[ydZ[ww xY w)zt
threedxml.py
-------------

Load 3DXML files, a scene format from Dassault products like Solidworks, Abaqus, Catia
    N)Image   )ExceptionWrapper)util)TextureVisualsc                 "   t        j                  | d      }i }|j                         D ],  \  }}	 t        j                  |j                               ||<   . |d   j                  d      j                  }||   }|j                  d      j                  d   }	i }
i }d}||v r||   }|j                  d	      D ]V  }|j                  d
   }|j                  d   j                  d      d   }||   j                  d      }|j                  d      }|Zt        j                  t        j                   |j                  d               dz  j#                  t        j$                        }||
|<   |j                  d      }||j                  d   j                  d      d   j                  d      \  }}||   j                  d| d      }||j'                  dd      j                  d      d   }t)        j*                  ||         ||<   Y |j                  d      D ]y  }|j                  d      }|j-                  d      D ]R  }|
j'                  |j                        |
|j                  <   |j'                  |j                        ||j                  <   T { t/        j0                  t2              }d }|j                  d      }|n|j                  d      D ]Z  }|j                  d      } |  ||       }!|j-                  d       D ](  }"|"j                  j                  d      d   }#|!||#   d!<   * \ i }$|j                  d"#      D ]q  }%|%j                  d
   }&|%j                  d   j                  d      d   }'|%j                  d$   }(|(d%vr&t         j4                  j7                  d&|'d'|(       mg })g }*g }+g },g }-d}.|'|vr'|'|v r#t         j4                  j7                  d(|'       ||'   j                  d)      D ]$  }/g }0|/j                  d*      }1|1|,j9                  t        j:                  |1j                  j=                  d+d,      d,t        j>                  -      jA                  d.             |/j                  d/      }2|+j9                  t        j:                  |2j                  j=                  d+d,      d,t        j>                  -      jA                  d.             |/j                  d0      }3|3t        j:                  |3j                  j=                  d+d,      d,t        j>                  -      }4d1|3j'                  d2      k(  rE|-j9                  t        jB                  |4t        jD                  tG        |4            gd34             n!|-j9                  |4jA                  dd5             |/j                  d6      }5|5d}nD|5j                  d
   j                  d      d   j                  d      \  }}|j'                  |      }.|/j                  d7      D ]  }6g }7|6j                  d8      D ]  }8d9|8j                  v rs|8j                  d9   j                  d+      D 9cg c](  }9t        j:                  |9d,t        jH                  -      * }:}9|7jK                  t        jL                  |:             d:|8j                  v rQ|7jK                  t        j:                  |8j                  d:   d,t        jH                  -      jA                  d.             d;|8j                  v rs|8j                  d;   j                  d+      D 9cg c](  }9t        j:                  |9d,t        jH                  -      * };}9|7jK                  t        jN                  |;             |0jK                  |7       |
j'                  |g d<      }<|8j                  d=      }=|= ||=      dd> }<|*j9                  t        jP                  |<tG        |7      d3f               |)j9                  |0       ' i }>t        jR                  |,|)      \  |>d?<   |>d@<   t        jT                  |+      |>dA<   |-r&|.r$tW        t        jT                  |-      |.B      |>dC<   nt        jT                  |*      |>dD<   dEdFi|>dG<   dH|>dI<   |>|$|&<   |&||&   dJ<   t |j                  dK      D ]$  }?|?j                  dL   dMdN||?j                  d
   <   & |j                  dO      D ]_  }@|@j                  d
   }A|@j                  d      j                  }|@j                  d      j                  }||A   jY                  ||dPdQ       a |j                  dR      D ]	  }Bt        jZ                  dS      }C|Bj                  dT      }D|Dpt        j                  Dj                  j                         t        j>                  U      }D|DddV jA                  dW      j\                  Cdd>dd>f<   |DdVd |Cdd>d>f<   Bj                  d
   }A|Bj                  dL   }E|Bj                  d      j                  }|Bj                  d      j                  }||A   jY                  ||C|EdXdY        t_        j`                         }F|j                         D ]8  \  }}dZ|v rFjc                  |dZ   |       d[|v s$Fjc                  ||d[          : g }G|$je                         D ])  }HGjK                  t_        jf                  F|	|H\             + ||	   dL   }I|It        jZ                  dS      d]g}Ji }KGD ]  }Ld}EdL||Ld^      v r|Ld^      dL   }E|EK|Ld   <   Edz   dji                  L      z   }M|LD 9cg c]  }9d_||9   v s||9   d_    }N}9tG        |N      dk(  rt        jZ                  dS      }Cn)tG        N      d3k(  rNd   }Cnt        jj                  N      }CJj9                  CIMLd   d`        i }O|$j                         D ]  \  }P}Q|PKv sQOKP   <    JD ]  }RdJ|RvrKRdJ      |RdJ<    daOJdb}S|SS # t        j                  $ r |j                  d       Y Tw xY wc c}9w c c}9w c c}9w )ca1  
    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           	         d| j                   j                         v sJ t        j                  dD cg c]  }| j	                  |d       c}t        j
                        }|dz  j                  t        j                        S c c}w )a'  
        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      G/DATA/.local/lib/python3.12/site-packages/trimesh/exchange/threedxml.pyget_rgbazload_3DXML.<locals>.get_rgbaj   st     %,,"5"5"7777xx4UV4UUYYw$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)   r7   r7   z{*}SurfaceAttributes/{*}Colorr/   verticesfacesvertex_normals)uvimagevisualface_colorsunitsmmmetadataTrimeshclassgeometryz{*}Reference3DnameReference3D)rE   typez{*}InstanceRepInstanceRep)	aggregateinstancerG   z{*}Instance3D   z{*}RelativeMatrixr   	   )r/   r/   
Instance3D)rI   rJ   matrixrE   rG   rI   rJ   )sourcetarget)frame_torN   rN   )rN   
frame_fromrQ   rD   Scene)rC   rD   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MaterialDomainInstancerJ   rI   
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_facesr8   normalsr;   rep_uvmaterialr9   r5   faceir4   r6   	faceColorcolorElementmeshrF   rH   currentrM   rN   relativerE   rU   pathsgeometry_id	root_namegraph_kwargs
geom_namespath	node_namematrices
geom_finalkeyvaluekwargresultsT                                                                                       r'   
load_3DXMLr      s7    ooh%8G H1	))AFFH-HQK	   (--i8==IIDii-.55f=G FF)Lx .+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  "1!NN1[>1-?NN1a
m, # E!(R((w{ST ) 7#F+I "+bffQi@AL J ZR))d2h'/D#'JtBx  3J$/	 6:WTXTU=VJqM(+TWx=AVVAYF]aa[F^^H-F '% H		
' < J &&(
U**/Jz#' ) U"&uZ'89j  JNFMk
 ## 	FF1I	^" n Xs)   &q3-r-rr
r$q?>q?c                 R    t        j                  | d      j                  d      }|S )zj
    Pretty-print an lxml.etree element.

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