
    ^j0                        d dl mZ d dlZd dlZd dlmZ d dlmZ ddlm	Z	m
Z
 ddlmZmZmZmZmZmZ dd	lmZmZmZ d
dlmZmZ d Zd ZdddZ G d de          Z G d de
          Zd Zd ZdS )    )annotationsN)GL_TRIANGLES)asstr   )ModelDecodeExceptionModelDecoder)SimpleMaterialMesh	Primitive	AttributeNodeScene   )ModelMaterialGroupTexturedMaterialGroup   )BatchGroupc           	         t          ddddg           t          ddddg           t          ddddg           g}t          |d |t                    }t          |g|           }|S )	NPOSITIONfVEC3r   NORMAL
TEXCOORD_0)
attributesindicesmaterialmode)
primitivesname)r   r   r   r
   )r!   r   r   	primitivemeshs        R/home/agentuser/manim-venv/lib/python3.11/site-packages/pyglet/model/codecs/obj.py	_new_meshr%      st    JVQ;;Hc61b99L#vq"==?J ZWcdddII;T222DK    c           
         t          | d          }d }g d}g d}g d}g d}d}d}d }	i }
|D ]}|                    d          r|                                }|s0|d         dk    rA|6||||fD ]}|                    |           t	          |||||||	          |
|<   |d	         }n|t          d
|            	 |d         dk    r,t          t          t          |d	d                              }n|d         dk    r+t          t          t          |d	d                              }n|d         dk    r+t          t          t          |d	d                              }n|d         dk    r+t          t          t          |d	d                              }n`|d         dk    rt          |d	                   }|dz  dz  }n6|d         dk    rt          |d	                   }n|d         dk    r|d	         }	# t          $ r)}t          d
                    | |f                    d }~ww xY w|                                 ||||fD ]}|                    |           t	          |||||||	          |
|<   |
S )Nr)      ?r)   r)           r+   r+         Y@r)   #r   newmtlr   zExpected "newmtl" in KdKaKsKeNs   i  dmap_KdzParsing error in {0}.)open
startswithsplitappendr	   r   listmapfloatBaseExceptionformatclose)filenamefiler!   diffuseambientspecularemission	shininessopacitytexture_namematliblinevaluesitemexs                  r$   load_material_libraryrO      s   #DDooGooGHHIGLF $W $W??3 	 	!9  $gxB ) )DKK((((-dGWhPXZceqrrt!9DD\&'Ix'I'IJJJ	WayD  s5&*5566d""s5&*5566d""E6!"": 6 677d""E6!"": 6 677d""!&),,	&_4		c!!q	**h&&%ay 	W 	W 	W&'>'E'ExQSn'U'UVVV	W 	JJLLL'8X6  G!$(HiYeffF4LMs   ?D=G>>
H1$H,,H1return
list[Mesh]c                |
   i }g }t           j                            |           }	 |=t          | d          5 }|                                }d d d            n# 1 swxY w Y   n!t          |                                          }n# t          t          f$ r t          w xY wd }d }g dg}	ddgg}
g dg}g d}g d}g d}g d}d}t          d|||||          }|
                                D ]K}|                    d          r|                                }|s0|d	         d
k    r?|                    t          t          t           |dd                                        n|d	         dk    r?|	                    t          t          t           |dd                                        nP|d	         dk    r?|
                    t          t          t           |dd                                        n|d	         dk    r8t           j                            ||d                   }t%          |          }n|d	         dv r1|                    |d                   }|||j        d	         _        n|d	         dk    r.t-          |d         |          }|                    |           nL|d	         dk    r?|t                      }|&t-          d|          }|                    |           d }d }d }d }d }d }t/          |dd                    D ]\  }}t          t          t0          d |                    d          D                                 d	d	gz   d d         \  }}}|d	k     r|t3          |          dz
  z  }|d	k     r|t3          |
          dz
  z  }|d	k     r|t3          |	          dz
  z  }|j        d	         j        d	         xj        ||         z  c_        |j        d	         j        d         xj        |	|         z  c_        |j        d	         j        d         xj        |
|         z  c_        |dk    r{|j        d	         j        d	         xj        ||z   z  c_        |j        d	         j        d         xj        ||z   z  c_        |j        d	         j        d         xj        ||z   z  c_        |d	k    r|	|         }|
|         }||         }|	|         }|
|         }||         }|D ]2}|j        D ](} | j        D ]}!t3          |!j                  dz  |!_        )3M|S )Nr(   r*   r+   )r)   r)   r)   r)   )r+   r+   r+   r)   r,   Defaultr-   r   vr      vnvtr   mtllib)rA   )usemtlusemato)r!   r   r   unknownc                    g | ]}|pd S )r    ).0js     r$   
<listcomp>z"parse_obj_file.<locals>.<listcomp>   s    /M/M/M1Q/M/M/Mr&   /r   )ospathdirnamer7   readr   UnicodeDecodeErrorOSErrorr   r	   
splitlinesr8   r9   r:   r;   r<   r=   joinrO   getr    r   r%   	enumerateintlenr   arraycount)"rA   rB   	materialsmesheslocationr   file_contentsr   r#   normals
tex_coordsverticesrC   rD   rE   rF   rG   default_materialrK   rL   material_abspathn1nlastt1tlastv1vlastirT   v_it_in_ir"   	attributes"                                     r$   parse_obj_filer   X   s   IFwx((H#<h$$ ) !) ) ) ) ) ) ) ) ) ) ) ) ) ) ) "$))++..M( # # #""# HD||nGr(J~H"""G"""G###H###HI%i'8XW`aa((** H@ H@??3 	 	!9OODUF1Q3K!8!899::::AY$NN4E6!A#; 7 7889999AY$d3ufQqSk#:#:;;<<<<AY(""!w||HfQi@@-7GHHHIIAY... }}VAY//H.6"+AY#&)6FGGGDMM$AY#)++| i(CCCd### BEBEBE!&*-- & &1!%c#/M/M/M/M/M&N&N!O!OSTVWRX!XZ\[\Z\ ]S#773x==1,,C773z??Q..C773w<<!++C"-a066(3-G66"-a066'#,F66"-a066*S/I6666OA&1!4::b5jH::OA&1!4::b5jH::OA&1!4::b5jH::66 B#CB!#B"3  	@ 	@D!_ @ @	!*!5 @ @I&))/&:&:a&?IOO@@	@
 Ms.   B AB AB A %B Bc                      e Zd Zd	d
dZdS )OBJSceneNbatchr   groupGroup | NonerP   list[Model]c           
        g }g }| j         D ]4}|j        D ](}|j        d         j        }|j        d         j        d         j        }|j        rVt          j        	                                }	t          j
                            |j                  }
t          ||	|
|          }n0t          j                                        }	t          ||	|          }d |j        d         j        D             }d|j        |z  f|d<   |                     |	j        |t$          ||fi |           |                    |           *6t'          |||          gS )Nr   )parentc                6    i | ]}|j         |j        |j        fS r^   )r!   fmtro   )r_   as     r$   
<dictcomp>z*OBJScene.create_models.<locals>.<dictcomp>   s%    XXXQ 0XXXr&   r   COLOR_0)vertex_listsgroupsr   )nodesrr   r    r   r   rp   rI   pygletmodelget_default_textured_shaderresourcetexturer   get_default_shaderr   rC   r:   vertex_listr   r   )selfr   r   r   r   noder#   r   rp   programr   matgroupdatas                r$   create_modelszOBJScene.create_models   sd   J 	( 	(D ( (?1-6*5a8>( N$lFFHHG$o55h6KLLG4XwX]^^^HH$l==??G,XwuMMMHXX$/!:L:WXXX"%x'7%'?"?Y##$7G$7|UT\$e$e`d$e$efffh''''#(& <eLLLMMr&   N)r   r   r   r   rP   r   )__name__
__module____qualname__r   r^   r&   r$   r   r      s4        N N N N N N Nr&   r   c                      e Zd Zd Zd ZdS )OBJModelDecoderc                    dgS )Nz.objr^   )r   s    r$   get_file_extensionsz#OBJModelDecoder.get_file_extensions   s	    xr&   c                b    t          ||          }t          t          |          g          S )N)rA   rB   )rr   )r   )r   r   r   )r   rA   rB   	mesh_lists       r$   decodezOBJModelDecoder.decode   s3    "H4@@@	t955567777r&   N)r   r   r   r   r   r^   r&   r$   r   r      s2          8 8 8 8 8r&   r   c                      t                      gS r   )r   r^   r&   r$   get_decodersr      s    r&   c                     g S r   r^   r^   r&   r$   get_encodersr      s    Ir&   r   )rP   rQ   )
__future__r   rc   r   	pyglet.glr   pyglet.utilr    r   r   baser	   r
   r   r   r   r   r   r   r   graphicsr   r   r%   rO   r   r   r   r   r   r^   r&   r$   <module>r      s   " " " " " " 				  " " " " " "       0 0 0 0 0 0 0 0 I I I I I I I I I I I I I I I I : : : : : : : : : : $ $ $ $ $ $ $ $  ; ; ;|h h h h hVN N N N Nu N N N@8 8 8 8 8l 8 8 8      r&   