
    h#                        d dl mZ d dlZd dlmZ d dlZd dlmZmZm	Z	 ddl
mZ ddlmZ dd	lmZ  ed
           G d de                      Z ed
           G d de                      Ze G d de                      ZdS )    )	dataclassN)ndarray)UnionListTuple   )Exporter   )DetokenzeOutput)OrderT)frozenc                      e Zd ZU dZeedf         ed<   eedf         ed<   eedf         ed<   eedf         ed<   eedf         ed<   eedf         ed<   eedf         ed	<   eedf         ed
<   eeeedf                  df         ed<   eee	         df         ed<   eedf         ed<   dZ
ee	df         ed<   dZee	df         ed<   ede	dd fd            Zde	fdZed             Zed             Zed             Zd Zd.de	defdZde	fdZde	fdZde	fdZ	 	 	 	 	 	 	 	 	 d/de	d!ed"ed#ed$ed%ed&ed'ed(ed)eedf         fd*Zd+d+gfde	d,eeef         fd-ZdS )0RawDataz>
    Dataclass to handle data from processed model files.
    Nverticesvertex_normalsfacesface_normalsjointstailsskinno_skinparentsnamesmatrix_localpathclsreturnc                 n    t          j        | d          fdD             }| |d<   t          di |S )NTallow_picklec                 .    i | ]}||         d          S  r#   .0namedatas     3/data/cameron/tmprepos/2unirig/src/data/raw_data.py
<dictcomp>z RawData.load.<locals>.<dictcomp>>   s#    333dT4:b>333    r   r#   )nploadr   )r   dr'   s     @r(   r,   zRawData.load;   sI    wt$///3333d333&	||||r*   c                     t          j        t           j                            |          d           t	          j        dd|i| j         d S NT)exist_okfiler#   osmakedirsr   dirnamer+   savez__dict__selfr   s     r(   savezRawData.saveB   H    
BGOOD))D9999
,,d,dm,,,,,r*   c                 &    | j         j        d         S )z$
        number of vertices
        r   )r   shaper9   s    r(   Nz	RawData.NF   s    
 }"1%%r*   c                 &    | j         j        d         S )z!
        number of faces
        r   )r   r=   r>   s    r(   Fz	RawData.FM   s    
 z""r*   c                 &    | j         j        d         S )z"
        number of joints
        r   )r   r=   r>   s    r(   Jz	RawData.JT   s    
 { ##r*   c                 H   | j         &| j        t          | j                   | j        k    sJ | j         3| j        ,t          | j                   t          | j                  k    sJ | j        1t          | j                  D ]\  }}|dk    r|J |J ||k     sJ d S d S )Nr   )r   r   lenrC   r   	enumerate)r9   ipids      r(   checkzRawData.check[   s    :!dk&=tz??df,,,,:!dl&>tz??c$,&7&77777<#%dl33 # #Ca44;;;;???77777 $## #r*   T{Gz?with_normalc                     |r%|                      | j        || j        |           dS |                      | j        |d|           dS )z$
        export point cloud
        )r   r   r   normal_sizeN)
_export_pcr   r   )r9   r   rK   rM   s       r(   	export_pczRawData.export_pch   sV      	mOOT]dNaozO{{{{{OOT]d`kOlllllr*   c                 J    |                      | j        | j        |           dS )z
        export mesh
        )r   r   r   N)_export_meshr   r   r8   s     r(   export_meshzRawData.export_meshq   s)     	4=
NNNNNr*   c                 J    |                      | j        | j        |           dS z
        export spring
        )r   r   r   N_export_skeletonr   r   r8   s     r(   export_skeletonzRawData.export_skeletonw   )     	T[$,TRRRRRr*   c                 J    |                      | j        | j        |           dS rT   _export_skeleton_sequencer   r   r8   s     r(   export_skeleton_sequencez RawData.export_skeleton_sequence}   *     	&&dk4<VZ&[[[[[r*   Q?Fextrude_sizegroup_per_vertexadd_rootdo_not_normalizeuse_extrude_boneuse_connect_unique_childextrude_from_parentuse_tailcustom_vertex_groupc                     |                      || j        | j        |
| j        n|
| j        | j        | j        ||||||||	r| j        nd           dS z5
        export the whole model with skining
        N)r   r   r   r   r   r   r   r`   ra   rb   rc   rd   re   rf   r   )_export_fbxr   r   r   r   r   r   r   )r9   r   r`   ra   rb   rc   rd   re   rf   rg   rh   s              r(   
export_fbxzRawData.export_fbx   sy      	];19?RL**%---%= 3 (2$**d 	 	
 	
 	
 	
 	
r*      
resolutionc           	          |                      || j        | j        t          j        | j        | j        gd          |           d S Nr_   )axis)r   r   r   bonesrn   )_export_renderr   r   r+   concatenater   r   r9   r   rn   s      r(   export_renderzRawData.export_render   sT    ]*.$+tz!:DDD! 	 	
 	
 	
 	
 	
r*   )TrJ   )	r^   r_   FFTTTFN)__name__
__module____qualname____doc__r   r   __annotations__r   intstrr   r   staticmethodr,   r:   propertyr?   rA   rC   rI   boolrO   rR   rW   r\   floatrl   r   rv   r#   r*   r(   r   r      sw         
 GTM"""" '4-(((( $ &&&& '4-     $ 
 7D=!!!! 4c4i()4/0000 cD!!!! &&&&  D%T	
 CsDy	3 9    \- - - - - & & X& # # X# $ $ X$# # #m mc m m m m mO O O O OSC S S S S\S \ \ \ \ ! $#'+"&26 
  
 
  
 	 

  
  
  
 #' 
 " 
  
 #7D=1 
  
  
  
D EH: 
 
# 
5c? 
 
 
 
 
 
r*   r   c                      e Zd ZU dZeedf         ed<   eedf         ed<   eedf         ed<   eeeedf                  df         ed<   eee	         df         ed<   e
de	d	d fd
            Zde	fdZe
dedeedf         d	d fd            Zde	fdZde	fdZ	 	 	 	 	 	 	 	 d!de	dedededededededefdZddgfde	deeef         fd ZdS )"RawSkeleton/
    Dataclass to handle skeleton from AR.
    Nr   r   r   r   r   r   r   c                 `    t          j        | d          t          di fdD             S )NTr   c                 .    i | ]}||         d          S r"   r#   r$   s     r(   r)   z$RawSkeleton.load.<locals>.<dictcomp>   s#    DDDtdDJrNDDDr*   r#   )r+   r,   r   r   r'   s    @r(   r,   zRawSkeleton.load   s@    wt$///EEDDDDtDDDEEEr*   c                     t          j        t           j                            |          d           t	          j        dd|i| j         d S r/   r2   r8   s     r(   r:   zRawSkeleton.save   r;   r*   resorderc                     t          | j                  }|                    | j        | j        |          }| j        }| j        }g }t          |          D ]\  }}|dk    r|                    d            !||         }	d}
d }t          t          |                    D ],}||         |	z
  dz                                  }||
k     r|}|}
-|                    |           t          || j        | j        ||          S )N)r   parts	num_bonesr   i?B r
   )r   r   r   r   r   )rE   rr   
make_namesr   r   r   p_jointsrF   appendreversedrangesumr   r   r   )r   r   rC   r   r   r   r   rG   jointp_jointdisrH   jn_diss                 r(   from_detokenize_outputz"RawSkeleton.from_detokenize_output   s   	NN  SWCI KK<#F++ 	  	 JQAvvt$$$qkGCCeAhh''     )g-166883;;CCNN3)K
 
 
 	
r*   c                 J    |                      | j        | j        |           dS rT   rU   r8   s     r(   rW   zRawSkeleton.export_skeleton   rX   r*   c                 J    |                      | j        | j        |           dS rT   rZ   r8   s     r(   r\   z$RawSkeleton.export_skeleton_sequence   r]   r*   r^   r_   FTr`   ra   rb   rc   rd   re   rf   rg   c
                 ~    |                      |d| j        d| j        | j        d||||||||	r| j        nd           dS rj   )rk   r   r   r   r   )
r9   r   r`   ra   rb   rc   rd   re   rf   rg   s
             r(   rl   zRawSkeleton.export_fbx   si     	;L*%---%= 3 (2$**d 	 	
 	
 	
 	
 	
r*   rm   rn   c           	      z    |                      |d d t          j        | j        | j        gd          |           d S rp   )rs   r+   rt   r   r   ru   s      r(   rv   zRawSkeleton.export_render  sP    .$+tz!:DDD! 	 	
 	
 	
 	
 	
r*   )r^   r_   FFTTTF)rw   rx   ry   rz   r   r   r{   r   r|   r}   r~   r,   r:   r   r   r   rW   r\   r   r   rl   r   rv   r#   r*   r(   r   r      s8          '4-     $ 7D=!!!! 4c4i()4/0000 cD!!!!F3 F= F F F \F- - - - - 
O 
E%+<N 
S` 
 
 
 \
6SC S S S S\S \ \ \ \ ! $#'+"&
 

 
 	

 
 
 
 #'
 "
 
 
 
 
B EH: 
 
# 
5c? 
 
 
 
 
 
r*   r   c                       e Zd ZU dZeed<   dZeedf         ed<   dZeedf         ed<   e	de
dd fd            Zde
fd	ZdS )
RawSkinr   r   Nr   r   r   r   c                 `    t          j        | d          t          di fdD             S )NTr   c                 .    i | ]}||         d          S r"   r#   r$   s     r(   r)   z RawSkin.load.<locals>.<dictcomp>/  s#    @@@4$T
2@@@r*   r#   )r+   r,   r   r   s    @r(   r,   zRawSkin.load,  s@    wt$///AA@@@@4@@@AAAr*   c                     t          j        t           j                            |          d           t	          j        dd|i| j         d S r/   r2   r8   s     r(   r:   zRawSkin.save1  r;   r*   )rw   rx   ry   rz   r   r{   r   r   r   r~   r}   r,   r:   r#   r*   r(   r   r     s           MMM $(HeGTM"''' "&FE'4- %%%B3 B9 B B B \B- - - - - - -r*   r   )dataclassesr   numpyr+   r   r3   typingr   r   r   exporterr	   tokenizer.specr   r   r   r   r   r   r#   r*   r(   <module>r      sj   ! ! ! ! ! !           				 % % % % % % % % % %       , , , , , ,      
$^
 ^
 ^
 ^
 ^
h ^
 ^
 ^
@ $m
 m
 m
 m
 m
( m
 m
 m
^ - - - - -h - - - - -r*   