
    kj                        d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlZd dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZ d dlmZ d dlmZmZmZmZmZ  ej         e!          Z"de#dede$e#e%e#         e%e$e#e#e&f                  f         fdZ' G d dej(                  Z)e)e
_*         G d de          Z+dS )    N)Path)cache)	ObjParser)	resources)ImproperlyConfigured)AttributeNames)
BaseLoader)SceneDescriptionTextureDescription)VAO)texture_dirs)MaterialMaterialTextureMeshNodeScenevertex_format
attr_namesreturnc                    g }g }g }d| v rL|                     d           |                     |j                   |                     d|j        df           d| v rL|                     d           |                     |j                   |                     d|j        df           d	| v rL|                     d           |                     |j                   |                     d
|j        df           |                     d           |                     |j                   |                     d|j        df           d                    |          ||fS )zTranslate the buffer formatT2F2f
TEXCOORD_0   C3F3fCOLOR_0   N3FNORMALPOSITION )appendr   r   r    r!   join)r   r   buffer_format
attributesmesh_attributess        b/home/agentuser/manim-venv/lib/python3.11/site-packages/moderngl_window/loaders/scene/wavefront.pytranslate_buffer_formatr)      sq    MJOT"""*/000j.CQGHHHT"""*,---	:+=qABBBT"""*+,,,**;Q?@@@j)***J
(;Q?@@@88M""J??    c                   T    e Zd ZU dZeed<   dej        dej	        j
        deddfdZdS )	VAOCacheLoaderz%Load geometry data directly into vaosr   fdmateriallengthr   Nc                 ^   t          |j        | j                  \  }}}t          |j        t
          j                  }|                    |                    |          ||           t          |d|           t          |d|           t          |d|           t          |d|           d S )Nmodevaor%   r&   r'   )
r)   r   r   r   namemoderngl	TRIANGLESbufferreadsetattr)selfr-   r.   r/   r%   r&   r'   r3   s           r(   load_vertex_bufferz!VAOCacheLoader.load_vertex_buffer;   s     6M"DO6
 6
2z? (-h&8999

2776??M:>>>%%%%/=999,
333+_=====r*   )__name__
__module____qualname____doc__r   __annotations__ioTextIOWrapperpywavefrontr.   r   intr;    r*   r(   r,   r,   6   se         //>">.9.B.K>UX>	> > > > > >r*   r,   c                   V     e Zd ZU dZdZdgddgdggZeed<   def fdZde	fd	Z
 xZS )
LoaderzLoad wavefront/obj files	wavefrontz.objz.gz.binmetac                 J    t                                          |           d S )N)super__init__)r:   rJ   	__class__s     r(   rM   zLoader.__init__Z   s!    r*   r   c           
         |                      t          | j        j        | j        j        nd                    }t                              d|           |s,t          d                    | j        j                            |j        dk    r|j	        |j
        z  }| j        j        t          _        t          j        t          |          d| j        j                  }t#          | j        j        | j        j                                        nd          }i }|j                                        D ]\  }}t-          |j                  }|j        rt3          |j        | j        j                  \  }}	}
t7          j        |j        d	          }t;          |j        t<          j        
          }|                     |||	           ||_!        |
D ]} |j"        |  nFtG          |d          r5t-          |j                  }|j!        |_!        |j$        D ]} |j"        |  n|j%        &                    |           tO          |j                  |_(        |j        &                    |j(                   |j)        |j(        _*        |j+        r|,                    |j+        j                  }|stZ          j        .                    |j+        /                                t          |j	                            }t                              d|           ta          |j	        g          5  tb          j2        3                    ti          ||dd                    }ddd           n# 1 swxY w Y   |||<   tk          |d          |j(        _6        to          |          }|j8        &                    |           |9                                 |S )z|Loads a wavefront/obj file including materials and textures

        Returns:
            Scene: The Scene instance
        N z
loading %szScene '{}' not foundrI   T)create_materialsr   f4)dtyper1   r3   zLoading: %sg      0@)labelpathmipmap
anisotropy)texturesampler)mesh):
find_scener   rJ   rU   loggerinfor   formatsuffixparentstemr   r,   rC   	Wavefrontstrr   r   resolved_pathas_posix	materialsitemsr   r4   verticesr)   r   numpyarrayr   r5   r6   r7   r3   add_attributehasattrr'   meshesr#   r   r.   diffusecolorrX   getosrelpathfindr   r   texturesloadr   r   mat_texturer   
root_nodesprepare)r:   rU   datascenetexture_cache_matrZ   r%   r&   r'   vbor3   attrsrX   rel_pathnodes                    r(   ru   zLoader.load]   s    tdin6PDINNVXYYZZL$''' 	V&'='D'DTY^'T'TUUU;&  ;*D$(I$8!$SYYTY_]]]26)2I2UDI#,,...[]
 
 CEn**,, 9	* 9	*FAs>>D | =T%ty';> >:z? k#,d;;;#();<<<

3z:::, / /E&D&.../ e$$ CH~~7 0 / /E&D&.../ L%%%$SX..DMO""4=111"%+DM{ '++CK,<== 6!ws{/?/?/A/A3t{CSCSTTHKKx888%t{m44  "+"4"9"9.&.%-'++/	  # #               /6M(+,;# - - -)
 T???D##D)))) 	s   .1M++M/	2M/	)r<   r=   r>   r?   kindfile_extensionsr
   r@   rM   r   ru   __classcell__)rN   s   @r(   rG   rG   O   s         ""D			O
 -      Ve V V V V V V V Vr*   rG   ),rA   loggingrq   pathlibr   r5   ri   rC   r   pywavefront.objr   moderngl_windowr   moderngl_window.exceptionsr   #moderngl_window.geometry.attributesr   moderngl_window.loaders.baser	   moderngl_window.metar
   r   moderngl_window.opengl.vaor   $moderngl_window.resources.decoratorsr   moderngl_window.scener   r   r   r   r   	getLoggerr<   r\   rc   tuplelistrD   r)   CacheLoaderr,   cache_loader_clsrG   rE   r*   r(   <module>r      s   				  				                   % % % % % % % % % % % % ; ; ; ; ; ; > > > > > > 3 3 3 3 3 3 E E E E E E E E * * * * * * = = = = = = N N N N N N N N N N N N N N		8	$	$@@$2@
3S	4c3m 4556@ @ @ @<> > > > >U& > > >, ,	 d d d d dZ d d d d dr*   