
    Ti                         d Z ddlZddlZddlmZ ddlmZmZ d 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)
zJ
xaml.py
---------

Load 3D XAMl files, an export option from Solidworks.
    N   )transformations)utilvisualc           
         d }fd}|                                  }t          j        |          }|j                            d          d         dz   g }g }g }	g }
|                    dz             D ]}d}|                    |                    d	                    }|                    |                    d
	                    } ||          } ||          }|}t          j	                    }|N|                    dz             }||
                     ||                     |                                }|Nt          |          dk    rt          j        d          }n<t          |          dk    r|                                }nt!          j        |          }|                    dz             D ]}t          j        |j        d                             dd                                          t          j                                      d          }t          j        |j        d                             dd                                          t          j                                      d          }t/          j        ||          }t          j        |j        d                             dd                                          t          j                                      d          }|                    |           |                    |           |	                    t          j        |t          |          df                     |
                    |           ddi}t!          j        ||          \  |d<   |d<   t          j        |	          |d<   t          j        |
          |d<   |S )z
    Load a 3D XAML file.

    Parameters
    ----------
    file_obj : file object
      Open XAML file.

    Returns
    ----------
    result : dict
      Kwargs for a Trimesh constructor.
    c                 $   | t           j        S t          | j        d                             dd          d          }t          | j        d                   }|dz	  dz  |dz	  dz  |dz  |dz  g}t          j        |t          j        	          }|S )
zE
        Turn an XML element into a (4,) np.uint8 RGBA color
        NColor#    Opacity      dtype)	r   DEFAULT_COLORintattribreplacefloatnparrayuint8)elementhexcoloropacityrgbas       O/DATA/AppData/hermes/venv/lib/python3.11/site-packages/trimesh/exchange/xaml.pyelement_to_colorz#load_XAML.<locals>.element_to_color   s     ?''w~g.66sB??DDy122^t#]d"_dN	
 xBH---    c                 H   	 t          |                     dz                       j        d         }t          j        |                                t          j                                      d          j        }|S # t          $ r t          j
        d          cY S w xY w)z\
        Turn an XML element into a (4,4) np.float64
        transformation matrix.
        MatrixTransform3DtagMatrixr   )   r&   r&   )nextiterr   r   r   splitfloat64reshapeTStopIterationeye)r   matrixnss     r   element_to_transformz'load_XAML.<locals>.element_to_transform0   s    
	',,20C+C,DDEELXVFXfllnnBJ???GGOOQFM 	 	 	 6!99	s   A<B   B! B!}r   GeometryModel3Dr#   z,.//{ns}{color}Material/*/{ns}SolidColorBrushDiffuse)r0   colorSpecularNzModelVisual3D.Transformr&      MeshGeometry3DNormals, r   )   	PositionsTriangleIndicesunitsmetersverticesfacesface_colorsvertex_normals)readetreeXMLr$   r)   r(   findformatcollectionsdeque
appendleft	getparentlenr   r.   popr   	multi_dotr   r   r   r*   r+   tftransform_pointsint64appendtileappend_facesvstack)file_objargskwargsr   r1   	file_datarootrB   rC   colorsnormalsgeometrycolor_searchdiffusespecularcurrent
transformstransform_element	transformg	c_normals
c_verticesc_facesresultr0   s                           @r   	load_XAMLrm      s     "     I9YD 
		Q	#	%B HEFG II"'8"8I99 ;& ;&E-- 3 3r 3 K KLL==!4!4*!4!M!MNN #"7++##H--  &((
! !(R2K-K L L , %%&:&:;L&M&MNNN ''))G ! z??aq		II__!!"((II z22I 2(8#899 	& 	&A#++C55;;==RZ  gg  %--c377==??rz  gg  ,ZCCJh*+33C==CCEERX  gg 
 OOJ'''LL!!!MM"''CLL!+<==>>>NN9%%%%'	&, x F*.*;He*L*L'F:wIf--F=!y11FMr    )rG   xaml)ExceptionWrapper)__doc__rK   numpyr   r   r   rR   r   r   rm   lxmlrG   _xaml_loadersBaseExceptionE
exceptionsro    r    r   <module>rx      s             $ $ $ $ $ $        @ @ @F	2Y'MMM 2 2 2 .-------a001MMMMMMM2s   
) AAA