Ë
    :vž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dlmZ deiZy# e$ rZddlmZ  ee«      ZY dZ[ŒHd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  — t        j                  | d¬«      }i }|j                  «       D ]E  \  }}	 t        j                  |j                  «       t        j                  ddi t        ¤Ž¬«      ||<   ŒG |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«      }|j1                  d«      D ]R  }|
j+                  |j                  «      |
|j                  <   |j+                  |j                  «      ||j                  <   ŒT Œ{ t3        j4                  t6        «      }d„ }|j                  d«      }|�n|j                  d«      D ]Z  }|j                  d «      } | €Œ || «      }!|j1                  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         j8                  j;                  d'|'›d(|(›�«       Œmg })g }*g }+g },g }-d}.|'|vr'|'|v r#t         j8                  j;                  d)|'›�«       Œ¤||'   j                  d*«      D �]$  }/g }0|/j                  d+«      }1|1€Œ|,j=                  t        j                  |1j                  j?                  d,d-«      d-t        j@                  ¬.«      jC                  d/«      «       |/j                  d0«      }2|+j=                  t        j                  |2j                  j?                  d,d-«      d-t        j@                  ¬.«      jC                  d/«      «       |/j                  d1«      }3|3�ºt        j                  |3j                  j?                  d,d-«      d-t        j@                  ¬.«      }4d2|3j+                  d3«      k(  rE|-j=                  t        jD                  |4t        jF                  tI        |4«      «      gd4¬5«      «       n!|-j=                  |4jC                  dd6«      «       |/j                  d7«      }5|5€d}nD|5j                  d   j                  d«      d   j                  d«      \  }}|j+                  |«      }.|/j                  d8«      D �]ñ  }6g }7|6j                  d9«      D �]×  }8d:|8j                  v rs|8j                  d:   j                  d,«      D �9cg c](  }9t        j                  |9d-t        jJ                  ¬.«      ‘Œ* }:}9|7jM                  t        jN                  |:«      «       d;|8j                  v rQ|7jM                  t        j                  |8j                  d;   d-t        jJ                  ¬.«      jC                  d/«      «       d<|8j                  v rs|8j                  d<   j                  d,«      D �9cg c](  }9t        j                  |9d-t        jJ                  ¬.«      ‘Œ* };}9|7jM                  t        jP                  |;«      «       |0jM                  |7«       |
j+                  |g d=¢«      }<|8j                  d>«      }=|=� ||=«      dd? }<|*j=                  t        jR                  |<tI        |7«      d4f«      «       �ŒÚ �Œô |)j=                  |0«       �Œ' i }>t        jT                  |,|)«      \  |>d@<   |>dA<   t        jV                  |+«      |>dB<   |-r&|.r$tY        t        jV                  |-«      |.¬C«      |>dD<   nt        jV                  |*«      |>dE<   dFdGi|>dH<   dI|>dJ<   |>|$|&<   |&||&   dK<   �Œt |j                  dL«      D ]$  }?|?j                  dM   dNdOœ||?j                  d   <   Œ& |j                  dP«      D ]_  }@|@j                  d   }A|@j                  d«      j                  }|@j                  d«      j                  }||A   j[                  ||dQdRœ«       Œa |j                  dS«      D �]	  }Bt        j\                  dT«      }C|Bj                  dU«      }D|D�pt        j                   Dj                  j                  «       t        j@                  ¬V«      }D|DddW jC                  dX«      j^                  Cdd?…dd?…f<   |DdWd |Cdd?…d?f<   Bj                  d   }A|Bj                  dM   }E|Bj                  d«      j                  }|Bj                  d«      j                  }||A   j[                  ||C|EdYdZœ«       �Œ ta        jb                  «       }F|j                  «       D ]8  \  }}d[|v rFje                  |d[   |«       d\|v sŒ$Fje                  ||d\   «       Œ: g }G|$jg                  «       D ])  }HGjM                  ta        jh                  F|	|H¬]«      «       Œ+ ||	   dM   }I|It        j\                  dT«      d^œg}Ji }KGD ]»  }Ld}EdM||Ld_      v r|Ld_      dM   }E|EK|Ld   <   Edz   djk                  L«      z   }M|LD �9cg c]  }9d`||9   v sŒ||9   d`   ‘Œ }N}9tI        |N«      dk(  rt        j\                  dT«      }Cn)tI        N«      d4k(  rNd   }Cnt        jl                  N«      }CJj=                  CIMLd   daœ«       Œ½ i }O|$j                  «       D ]  \  }P}Q|PKv sŒQOKP   <   Œ JD ]  }RdK|RvrŒKRdK      |RdK<   Œ dbOJdcœ}S|SS # t        j                  $ r |j                  d«       Y �Œmw xY wc c}9w c c}9w c c}9w )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_type)Úparserr   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      úk/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/trimesh/exchange/threedxml.pyÚget_rgbazload_3DXML.<locals>.get_rgbal   st   € ð  %§,¡,×"5Ñ"5Ó"7Ñ7Ð7Ð7ä�x‰xÙ4UÓVÑ4U¨ˆU�Y‰Y�w Õ$Ð4UÑVÜ—*‘*ô
ˆð
 �s‘
×"Ñ"¤2§8¡8Ó,Ð,ùò	 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© )7r   Ú
decompressÚitemsÚetreeÚ
fromstringÚreadÚ	XMLParserÚXML_PARSER_OPTIONSÚXMLSyntaxErrorÚseekÚfindÚtextr   ÚiterÚsplitr   r    ÚjsonÚloadsr#   r$   r!   r   ÚopenÚfindallÚcollectionsÚdefaultdictÚdictÚlogÚwarningÚappendÚ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È      sK  € ô �o‰o˜h°%Ô8€Gð €HØ—‘–‰ˆˆ1ð	Ü×*Ñ*Ø—‘“¤§¡Ñ!FÔ3EÑ!FôˆH�QŠKð	  ð ˜Ñ(×-Ñ-¨iÓ8×=Ñ=€Ià�IÑ€Dà�i‰iÐ-Ó.×5Ñ5°fÑ=€Gð €FØ€Fà)€LØ�xÒØ  Ñ.ˆØ+×0Ñ0Ð1D×EˆNØ(×/Ñ/°Ñ5ˆKØ*×1Ñ1Ð2BÑC×IÑIÈ,ÓWØñˆMð ˜MÑ*×/Ñ/Ð0WÓXˆDØ—i‘iÐ ?Ó@ˆGð Ð"Ü—x‘x¤§
¡
¨7¯>©>¸'Ñ+BÓ CÓDÀsÑJ×RÑRÜ—H‘Hó�ð '*��{Ñ#Ø—i‘iÐ ?Ó@ˆGØÑ"Ø#*§>¡>°'Ñ#:×#@Ñ#@ÀÓ#EÀbÑ#I×#OÑ#OÐPSÓ#TÑ �˜&Ø$ XÑ.×3Ñ3ØHÈÈÐPRÐSó�	ð Ò(Ø!*§¡Ð/?ÀÓ!D×!JÑ!JÈ3Ó!OÐPRÑ!S�JÜ*/¯*©*°W¸ZÑ5HÓ*I�F˜;Ó'ð- Fð2 '4×&8Ñ&8Ð9TÖ&UÐ"Ø-×2Ñ2Ð3DÓEˆHà3×;Ñ;Ð<OÖP�	Ø)/¯©°H·M±MÓ)B��y—~‘~Ñ&Ø)/¯©°H·M±MÓ)B��y—~‘~Ò&ñ Qð 'Vô ×(Ñ(¬Ó.€Jò-ð0 �9‰9Ð%Ó&€DØÐØŸ	™	Ð":Ö;ˆHØ—M‘MØIóˆEð ˆ}ØÙ˜E“?ˆDØ&×.Ñ.Ð/EÖF�
Ø)Ÿ™×4Ñ4°SÓ9¸"Ñ=�Ø48�
˜<Ñ(¨Ò1ñ Gð <ð €Jð Ÿ	™	Ð&7˜	×8ˆà×%Ñ% dÑ+ˆà ×'Ñ'Ð(8Ñ9×?Ñ?ÀÓDÀRÑHˆ	à"×)Ñ)¨(Ñ3ˆØÐ.Ñ.Ü�H‰H×ÑØ 	˜}Ð,@ÀÀÐPôð ð ˆ
ØˆØˆØˆØˆØˆ
à˜HÑ$¨°gÑ)=ä�H‰H×ÑÐ2°9°-Ð@ÔAàð ˜IÑ&×+Ñ+¨H×5ˆCØˆIØ—x‘xÐ >Ó?ˆHØÐØð
 × Ñ Ü—‘Ø—M‘M×)Ñ)¨#¨sÓ3¸ÄBÇJÁJôç‘'˜'Ó"ôð —h‘hÐ;Ó<ˆGØ×ÑÜ—‘Ø—L‘L×(Ñ(¨¨cÓ2¸Ä2Ç:Á:ôç‘'˜'Ó"ôð —‘ÐAÓBˆBØˆ~ÜŸ™Ø—G‘G—O‘O C¨Ó-°3¼b¿j¹jô�ð ˜2Ÿ6™6 +Ó.Ò.Ø—N‘N¤2§8¡8¨V´R·X±X¼cÀ&»kÓ5JÐ,KÐRSÔ#TÕUà—N‘N 6§>¡>°"°aÓ#8Ô9à—x‘xØUóˆHð ÐØ"‘ð —O‘O DÑ)×/Ñ/°Ó=¸bÑA×GÑGÈÓLñ -� ð $ŸZ™Z¨Ó4�
àŸ™ *×-�Ø�	Ø!ŸJ™J y×1�Dà 4§;¡;Ñ.ð &*§[¡[°Ñ%:×%@Ñ%@ÀÔ%Eó"á%E ô ŸM™M¨!°¼B¿H¹HÖEØ%Eð ð "ð
 "×(Ñ(¬×)FÑ)FÀvÓ)NÔOà" d§k¡kÑ1Ø!×(Ñ(ÜŸM™MØ $§¡¨KÑ 8¸cÌÏÉôç%™g gÓ.ôð  §¡Ñ,ð &*§[¡[°Ñ%8×%>Ñ%>¸sÔ%Có á%C ô ŸM™M¨!°¼B¿H¹HÖEØ%Cð ð  ð
 "×(Ñ(¬×)DÑ)DÀTÓ)JÔKà×$Ñ$ YÔ/ð !'§
¡
¨;ºÓ H�Ià#'§9¡9Ð-LÓ#M�LØ#Ð/Ù$,¨\Ó$:¸2¸AÐ$>˜	Ø×&Ñ&¤r§w¡w¨y¼3¸y»>È1Ð:MÓ'NÖOòI 2ð .ðN ×Ñ˜iÖ(ðg 6ðp ˆÜ,0×,=Ñ,=¸mÈZÓ,XÑ)ˆˆjÑ	˜4 ™=Ü!#§¡¨<Ó!8ˆÐÑÙ‘zÜ+¬r¯y©y¸Ó/AÈÔTˆD�ŠNä"$§)¡)¨KÓ"8ˆD�Ñð $ T˜?ˆˆZÑØ!ˆˆW‰à"ˆ
�7ÑØ*1ˆ
�7Ñ˜JÓ'ðE 9ðJ —y‘yÐ!1Ö2ˆà×&Ñ& vÑ.Ø!ñ0
ˆ
�;×%Ñ% dÑ+Ò,ð 3ð —y‘yÐ!1Ö2ˆØ×$Ñ$ TÑ*ˆØ×#Ñ#Ð$5Ó6×;Ñ;ˆØ×$Ñ$Ð%8Ó9×>Ñ>ˆ	à�7Ñ×"Ñ"Ø#°À=ÑQõ	
ð 3ð —i‘i ×0ˆ
Ü—‘˜“ˆØ—?‘?Ð#6Ó7ˆØÐÜ—x‘x §¡× 3Ñ 3Ó 5¼R¿Z¹ZÔHˆHð & b q˜\×1Ñ1°&Ó9×;Ñ;ˆF�2�A�2�r˜�r�6‰Nà$ Q R˜LˆF�2�A�2�q�5‰Mà×#Ñ# DÑ)ˆØ× Ñ  Ñ(ˆØ—?‘?Ð#4Ó5×:Ñ:ˆØ—O‘OÐ$7Ó8×=Ñ=ˆ	à�7Ñ×"Ñ"à&Ø$Ø ØØ$ñö	
ð! 1ô6 �J‰J‹L€EØ× Ñ Ö"‰ˆˆ1à˜!ÑØ�N‰N˜1˜[™>¨1Ô-à˜Š?Ø�N‰N˜1˜a 
™mÕ,ð #ð €EØ!—‘Ö(ˆØ�‰”R×(Ñ(¨°wÀ{ÔSÕTð )ð ˜7Ñ# FÑ+€Ið "+´b·f±f¸Q³iÑ@ÐA€Lð €Jó ˆØˆØ�Z  R¡Ñ)Ñ)Ø˜d 2™hÑ'¨Ñ/ˆDØ#'ˆJ�t˜B‘xÑ ð ˜3‘J §¡¨$£Ñ/ˆ	ñ 6:ÓW±T°¸XÈÐTUÉÒ=V�J˜q‘M (Ó+°TˆÐWÜˆx‹=˜AÒÜ—V‘V˜A“Y‰FÜ�‹]˜aÒØ˜a‘[‰Fä—^‘^ HÓ-ˆFà×Ñà Ø'Ø%Ø  ™Hñ	õ	
ð' ð< €JØ ×&Ñ&Ö(‰
ˆˆUØ�*ÒØ*/ˆJ�z #‘Ò'ð )ó ˆØ˜UÑ"ØØ& u¨ZÑ'8Ñ9ˆˆjÒð ð ¨JÀÑN€Fà€Møôk
 ×#Ñ#ò 	à�F‰F�1�Ið	üò^"ùò ùòn Xs)   ±?q0Ú-rÝ,-r î)r%î6
r%ñ0$ròrc                 óR   — t        j                  | d¬«      j                  d«      }|S )zj
    Pretty-print an lxml.etree element.

    Parameters
    ------------
    element : etree element
    T)Úpretty_printzutf-8)rZ   ÚtostringÚdecode)ÚelementÚprettys     r(   Úprint_elementrÏ   Ž  s$   € ô �^‰^˜G°$Ô7×>Ñ>¸wÓG€FØ€Mó    )rZ   r3   )r^   Ú3dxml)Ú__doc__Únumpyr   ÚPILr   ÚBaseExceptionÚEÚ
exceptionsr   ri   re   r   r   Úvisual.texturer   rÈ   rÏ   Únetworkxr~   ÚlxmlrZ   Úcommonr^   Ú_threedxml_loadersrW   rÐ   r(   Ú<module>rÝ      s”   ðñó ð	 õ ó Û å Ý +òoòd	ð8ãÝå*à! :Ð.Ñøðg ò  õ .á˜QÓ…Eûð ûðh ò 8å-à!Ñ#3°AÓ#6Ð7Õûð	8ús,   ˆ> ©A ¾AÁAÁAÁA=Á#A8Á8A=