
    Ti=                        d Z ddlZ	 ddlmZ n## e$ rZddlmZ  ee          ZY dZ[ndZ[ww xY w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dS # e$ rZddlmZ d ee          iZY dZ[dS 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                 .  R t          j        | d          }i }|                                D ]Y\  }}	 t          j        |                                          ||<   0# t          j        $ r |                    d           Y Vw xY w|d                             d          j	        }||         }|                    d          j
        d         }	i }
i }d}||v r&||         }|                    d	          D ]~}|j
        d
         }|j
        d                             d          d         }||                             d          }|                    d          }|Vt          j        t          j        |j
        d                             dz                      t          j                  }||
|<   |                    d          }||j
        d                             d          d                             d          \  }}||                             d| d          }|L|                    dd                              d          d         }t)          j        ||                   ||<   |                    d          D ]s}|                    d          }|                    d          D ]F}|
                    |j	                  |
|j	        <   |                    |j	                  ||j	        <   Gtt/          j        t2                    Rd }|                    d          }|~|                    d          D ]h}|                    d          }| ||          } |                    d           D ]-}!|!j	                            d          d         }"| R|"         d!<   .ii }#|                    d"#          D ]y}$|$j
        d
         }%|$j
        d                             d          d         }&|$j
        d$         }'|'d%vr&t           j                            d&|&d'|'           mg }(g })g }*g }+g },d}-|&|vr'|&|v r#t           j                            d(|&           ||&                             d)          D ]#}.g }/|.                    d*          }0|0|+                    t          j        |0j	                            d+d,          d,t          j        -                               d.                     |.                    d/          }1|*                    t          j        |1j	                            d+d,          d,t          j        -                               d.                     |.                    d0          }2|2t          j        |2j	                            d+d,          d,t          j        -          }3d1|2                    d2          k    rK|,                    t          j!        |3t          j"        tG          |3                    gd34                     n)|,                    |3                     dd5                     |.                    d6          }4|4d}nQ|4j
        d
                             d          d                             d          \  }}|                    |          }-|.                    d7          D ]}5g }6|5                    d8          D ]}7d9|7j
        v rQd: |7j
        d9                             d+          D             }8|6$                    t          j%        |8                     d;|7j
        v rR|6$                    t          j        |7j
        d;         d,t          j&        -                               d.                     d<|7j
        v rQd= |7j
        d<                             d+          D             }9|6$                    t          j'        |9                     |/$                    |6           |
                    |g d>          }:|7                    d?          };|; ||;          dd@         }:|)                    t          j(        |:tG          |6          d3f                     |(                    |/           %i }<t          j)        |+|(          \  |<dA<   |<dB<   t          j*        |*          |<dC<   |,r)|-r'tW          t          j*        |,          |-D          |<dE<   nt          j*        |)          |<dF<   dGdHi|<dI<   dJ|<dK<   |<|#|%<   |%R|%         dL<   {|                    dM          D ] }=|=j
        dN         dOdPR|=j
        d
         <   !|                    dQ          D ]b}>|>j
        d
         }?|>                    d          j	        }|>                    d          j	        }R|?         ,                    ||dRdS           c|                    dT          D ]}@t          j-        dU          }A|@                    dV          }B|Bst          j        |Bj	                                        t          j        W          }B|BddX                              dY          j.        |Add@dd@f<   |BdXd         |Add@d@f<   |@j
        d
         }?|@j
        dN         }C|@                    d          j	        }|@                    d          j	        }R|?         ,                    |||A|CdZd[           t_          j0                    }DR                                D ]E\  }}d\|v r|D1                    |d\         |           d]|v r|D1                    ||d]                    Fg }E|#2                                D ],}F|E$                    t_          j3        |D|	|F^                     -R|	         dN         }G|Gt          j-        dU          d_g}Hi }I|ED ]}Jd}CdNR|Jd`                  v rR|Jd`                  dN         }C|C|I|Jd         <   |Cdz   d4                    |J          z   }KRfda|JD             }LtG          |L          dk    rt          j-        dU          }An0tG          |L          d3k    r	|Ld         }Ant          j5        |L          }A|H                    |A|G|K|Jd         db           i }M|#                                D ]\  }N}O|N|Iv r|O|M|I|N         <   |HD ]}PdL|Pvr|I|PdL                  |PdL<   dc|M|Hdd}Q|QS )ea1  
    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                                         v sJ t          j         fddD             t          j                  }|dz                      t          j                  S )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.
        RGBAColorTypec                 <    g | ]}                     |d           S )g      ?)get).0channelcolors     T/DATA/AppData/hermes/venv/lib/python3.11/site-packages/trimesh/exchange/threedxml.py
<listcomp>z0load_3DXML.<locals>.get_rgba.<locals>.<listcomp>{   s'    VVVUYYw$$VVV    )redgreenbluealphadtyper   )attribvaluesnparrayfloat64astypeuint8)r   rgbas   ` r   get_rgbazload_3DXML.<locals>.get_rgbaj   ss     %,"5"5"7"77777xVVVV4UVVV*
 
 

 s
""28,,,r   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stripsc                 P    g | ]#}t          j        |d t           j                  $S r1   r2   r&   
fromstringint64r   is     r   r   zload_3DXML.<locals>.<listcomp>   s;     " " " ! M!BHEEE" " "r   	trianglesfansc                 P    g | ]#}t          j        |d t           j                  $S r;   r<   r?   s     r   r   zload_3DXML.<locals>.<listcomp>   s;           ! M!BHEEE     r   )   rD   rD   z{*}SurfaceAttributes/{*}Colorr4   verticesfacesvertex_normals)uvimagevisualface_colorsunitsmmmetadataTrimeshclassgeometryz{*}Reference3DnameReference3D)rR   typez{*}InstanceRepInstanceRep)	aggregateinstancerT   z{*}Instance3D   z{*}RelativeMatrixr"   	   )r4   r4   
Instance3D)rV   rW   matrixrR   rT   rV   rW   )sourcetarget)frame_tor[   c                 @    g | ]}d |         v |         d          S )r[    )r   r@   
referencess     r   r   zload_3DXML.<locals>.<listcomp>i  s1    WWWXTU=V=VJqM(+=V=V=Vr   )r[   
frame_fromr^   rQ   Scene)rP   rQ   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appendr=   replacer(   reshapestackzeroslenextendtriangle_strips_to_facesr>   triangle_fans_to_facestileappend_facesvstackr   updateeyeTnxDiGraphadd_edgekeysall_simple_pathsjoin	multi_dot)S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MaterialDomainInstancerW   rV   r,   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_facesrE   normalsrH   rep_uvmaterialrF   rA   facer9   rB   	faceColorcolorElementmeshrS   rU   currentrZ   r[   relativerR   re   pathsgeometry_id	root_namegraph_kwargs
geom_namespath	node_namematrices
geom_finalkeyvaluekwargresultrb   sS                                                                                     @r   
load_3DXMLr      s=    oh%888G H  1	)AFFHH--HQKK# 	 	 	FF1IIIII	
 (--i88=IIDii-..5f=G FF)Lx .+001DEE 	J 	JN(/5K*12BCII,WWM M*//0WXXDii ?@@G "x
7>'+B C CDDsJRRH  '*{#ii ?@@G"#*>'#:#@#@#E#Eb#I#O#OPS#T#T &$X.33SSSS 	 (!*/?!D!D!J!J3!O!OPR!SJ*/*WZ5H*I*IF;' '4&8&89T&U&U 	C 	C"-223DEEH3;;<OPP C C	)/HM)B)By~&)/HM)B)By~&&C (..J- - -0 99%&&D		":;; 		9 		9HMMI E }8E??D&../EFF 9 9
)44S99"=48
<(119
 J 		&7	88 B2 B2%d+ '(89??DDRH	")(3...HP	PPPP    

H$$g)=)=H@9@@AAA I&++H55 S	) S	)CIxx >??H
   M))#s33BJ  ''""   hh;<<GL((c222:  ''""   ABBB~GOOC--3bj   266+....NN28VRXc&kk5J5J,KRS#T#T#TUUUUNN6>>"a#8#8999xxU H " OD)//==bAGGLL - $ZZ44
*-- &P &P	!JJy11 $P $PD4;.." "%)[%:%@%@%E%E" " "
 "(()Fv)N)NOOO"dk11!((M $K 8c  %gg..   ,,   %)[%8%>%>s%C%C     
 "(()DT)J)JKKK$$Y/// !'

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

;%d+,, yy!122 
 
$T*##$566;$$%899>	7""#=QQ	
 	
 	
 	

 ii00 
 

??#677x 3 3 5 5RZHHHH &bqb\11&99;F2A2rr6N$QRRLF2A2q5M#D) (??#455:OO$788=	7""&$ $ 	
 	
 	
 	
 JLLE  "" - -1!NN1[>1---??NN1a
m,,, E!(( U UR(w{SSSTTTT 7#F+I "+bfQii@@AL J  
 
ZR)))d2h'/D#'JtBx  3J$/	 XWWWTWWWx==AVAYYFF]]aa[FF^H--F '% H	 	
 	
 	
 	
 J &&(( 0 0
U**/Jz#' : :U""&uZ'89j JNNFMs   )A$BBc                 X    t          j        | d                              d          }|S )zj
    Pretty-print an lxml.etree element.

    Parameters
    ------------
    element : etree element
    T)pretty_printzutf-8)rh   tostringdecode)elementprettys     r   print_elementr     s+     ^G$777>>wGGFMr   )rh   3dxml)__doc__numpyr&   PILr   BaseExceptionE
exceptionsr   ru   rq   r   r   visual.texturer   r   r   networkxr   lxmlrh   _threedxml_loadersra   r   r   <module>r      sq       	         .-----QEEEEEE             + + + + + +m m m`	 	 	
8!:. 8 8 8------!#3#3A#6#67	8s(    /*/A B "A;;B 