
    \
jp"                         d dl Z d dlZd dlmZ ddlmZmZmZmZ ddlm	Z	m
Z
  G d d          Zd	 Zdd
Z G d de
          Zd Zd ZdS )    N)GL_TRIANGLES   )ModelMaterialMaterialGroupTexturedMaterialGroup   )ModelDecodeExceptionModelDecoderc                       e Zd Zd ZdS )Meshc                 h    || _         d | _        g | _        g | _        g | _        g | _        g | _        d S N)namematerialindicesverticesnormals
tex_coordscolors)selfr   s     Q/DATA/AppData/hermes/venv/lib/python3.11/site-packages/pyglet/model/codecs/obj.py__init__zMesh.__init__.   s7    	    N)__name__
__module____qualname__r    r   r   r   r   -   s#            r   r   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_libraryrG   9   s   #DDooGooGHHIGLF $W $W??3 	 	!9  $gxB ) )DKK(((('gw(T]_kll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D'7Hh	S_``F4LMs   ?D=G>>
H1$H,,H1c                 N	   i }g }t           j                            |           }|=t          | d          5 }|                                }d d d            n# 1 swxY w Y   n|                                }t          |d          rJ	 |                                }n4# t          $ r'}t          d	                    |                    d }~ww xY wd }d }	g dg}
g dg}ddgg}g d}g d}g d}g d}d}t          d	|||||          }|                                D ]}|                    d
          r|                                }|s0|d         dk    r>|
                    t          t!          t"          |dd                                        z|d         dk    r>|                    t          t!          t"          |dd                                        |d         dk    r?|                    t          t!          t"          |dd                                        |d         dk    r8t           j                            ||d                   }t'          |          }S|d         dv r&|                    |d                   }|	||	_        |d         dk    r-t-          |d                   }	|                    |	           |d         dk    r|	%t-          d          }	|                    |	           ||}|	j        ||	_        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  } |	xj        ||          z  c_        |	xj        ||         z  c_        |	xj        |
|         z  c_        |dk    r9|	xj        ||z   z  c_        |	xj        ||z   z  c_        |	xj        ||z   z  c_        |dk    r||          }||         }|
|         }||          }||         }|
|         }`|S )Nr    decodezUnable to decode obj: {}r"   r#   )r!   r!   r!   r!   )r#   r#   r#   r!   r$   Defaultr%   r   vr	      vnvt   mtllib)r9   )usemtlusemato)r   f c                     g | ]}|pd S )r   r   ).0js     r   
<listcomp>z"parse_obj_file.<locals>.<listcomp>   s    /M/M/M1Q/M/M/Mr   /)ospathdirnamer/   readhasattrrI   UnicodeDecodeErrorr
   r7   r   
splitlinesr0   r1   r2   r3   r4   r5   joinrG   getr   r   	enumerateintlenr   r   r   )!r9   r:   	materials	mesh_listlocationrT   file_contentser   meshr   r   r   r;   r<   r=   r>   r?   default_materialrC   rD   material_abspathn1nlastt1tlastv1vlastirK   v_it_in_is!                                    r   parse_obj_filery   x   s:   IIwx((H|(C   	%AFFHHM	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 		}h'' M	M)0022MM! 	M 	M 	M&'A'H'H'K'KLLL	M HD~H||nGr(J"""G"""G###H###HI	7GXxQZ[[((** F& F&??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 (AY#VAY'''DT""""AY#|}}}  &&&+}$ ( 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,:c?2#.66LLBJ.LLOOrEz1OOMMR%Z/MM66 B#CB!#B"3 s)   AAAB 
C'"C		C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                     |st           j                                        }t          ||          }g }g }|D ]}|j        }|j        r5t           j                            |j                  }	t          ||	          }
nt          |          }
|
                    |
           |
                    |                    t          |j                  dz  t          |
d|j        fd|j        fd|j        f                     t#          |||          S )N)r9   r:   rO   z
v3f/staticz
n3f/staticz
t2f/static)vertex_listsgroupsbatch)pygletgraphicsBatchry   r   rA   resourcetexturer   r   r2   addrf   r   r   r   r   r   )r   r:   r9   r   rh   r   r   rl   r   r   groups              r   rI   zOBJModelDecoder.decode   s#    	,O))++E"H4@@@	 	L 	LD}H$ 0 /11(2GHH-h@@%h//MM%   		#dm*<*<*A*6*/+7*G+7*F+7*I!K !K L L L L ,vUKKKKr   N)r   r   r   r}   rI   r   r   r   r{   r{      s7          L L L L Lr   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   )r[   r   	pyglet.glr   rU   r   r   r   r   r
   r   r   rG   ry   r{   r   r   r   r   r   <module>r      s  F 
			  " " " " " " D D D D D D D D D D D D 0 0 0 0 0 0 0 0	 	 	 	 	 	 	 	< < <~i i i i`L L L L Ll L L L@      r   