ó
œ<Ìac           @   s$  d  Z  d Z d 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	 Z	 d d l
 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 d „  Z d e j f d „  ƒ  YZ d S(   s÷  
**Project Name:**      MakeHuman

**Product Home Page:** http://www.makeinfo.human.org/

**Code Home Page:**    https://bitbucket.org/MakeHuman/makehuman/

**Authors:**           Thomas Larsson

**Copyright(c):**      MakeHuman Team 2001-2014

**Licensing:**         AGPL3 (see also http://www.makeinfo.human.org/node/318)

**Coding Standards:**  See http://www.makeinfo.human.org/node/165

Abstract
--------

MakeHuman to MHX (MakeHuman eXchange format) exporter. MHX files can be loaded into Blender
i   i   iÿÿÿÿN(   t   G(   t
   mhx_writer(   t   posebone(   t   mhx_materials(   t   mhx_mesh(   t	   mhx_proxy(   t   mhx_armature(   t   mhx_posec         C   sÙ  d d l  m } t j j d d d ƒt j d |  j d ƒ ƒ t j	 ƒ  } | j
 } | j |  ƒ t j j |  ƒ } t j j | ƒ d } | j d d	 ƒ j d
 d	 ƒ } | | | | ƒ } t j |  d d d ƒ} | j d d d t t f ƒ xF | j D]; \ }	 }
 | j d |	 j d d	 ƒ |
 j d d ƒ f ƒ qû W| j d d d ƒ | j d k rq| j | j ƒ n  | j ƒ  } t | | | | | ƒ } | j | ƒ | j ƒ  t j d |  j d ƒ ƒ t j j d ƒ d  S(   Ni   (   t   setupArmaturei    t   texts   Exporting MHXs   Exporting %ss   utf-8t    t   _t   :t   wt   encodings   # MakeHuman exported MHX
s   # www.makeinfo.human.org
s	   MHX %d %ds    %s:_%st   "t    s    ;
s   #if Blender24
s8     error 'This file can only be read with Blender 2.5' ;
s   #endif
g      ð?s   %s exporteds    ;
#if Blender24
(   R   R   R    t   appt   progresst   logt   messaget   encodet   timet   clockt   humant   setupTexFoldert   ost   patht   basenamet   splitextt   replacet   codecst   opent   writet   MAJOR_VERSIONt   MINOR_VERSIONt   objectPropst   scalet   rescalet
   getProxiest   Writert	   writeFilet   close(   t   filepatht   configR   t   time1R   t   filenamet   namet   amtt   fpt   keyt   valuet   proxiest   writer(    (    s    plugins/9_export_mhx\mhx_main.pyt	   exportMhx7   s6    	3
R(   c           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   sË   t  j j |  ƒ | |  _ d |  _ | |  _ | |  _ | |  _ | |  _ t	 j
 j | ƒ |  _ t j ƒ  j |  ƒ |  _ t j ƒ  j |  ƒ |  _ t j |  j |  j ƒ j |  ƒ |  _ t j ƒ  j |  ƒ |  _ d  S(   Nt   mhx_main(   R   R(   t   __init__R/   t   typeR   t   armatureR,   R4   t   exportutilst   customt   listCustomFilest   customTargetFilesR   t   fromOtherWritert	   matWriterR   t
   meshWriterR   t   proxyWriterR   t
   poseWriter(   t   selfR/   R   R0   R,   R4   (    (    s    plugins/9_export_mhx\mhx_main.pyR8   _   s    						$c         C   s¥  |  j  } |  j } | j s3 | j d d d ƒ n  | j d ƒ | j | ƒ t j j d d d ƒ| j | t	 |  ƒ t j j d d d	 ƒ| j d
 ƒ |  j
 j | ƒ | j rÔ |  j j d d d | d d ƒ n  t j j d d d ƒ|  j j | |  j j ƒ  ƒ |  j j d d d | d d ƒ |  j j d d d | d d ƒ x0 t j D]% } |  j j | d d | d d ƒ qNW|  j j | ƒ |  j | ƒ | j | ƒ d  S(   Ns   #if toggle&T_Cage
sT     error 'This MHX file does not contain a cage. Unselect the Cage import option.' ;
s   #endif
s   NoScale True ;
gš™™™™™¹?R	   s   Exporting armatureg333333Ã?s   Exporting materialss   
NoScale False ;

t   Caget   T_Cagei   gš™™™™™É?g      Ð?s   Exporting main mesht   Proxymeshest   T_Proxyi   gffffffÖ?gš™™™™™Ù?t   Clothest	   T_Clothesi   gš™™™™™á?i    g333333ã?(   R:   R,   t   cageR!   t   writeGizmosR    R   R   t   writeArmatureR#   R@   t   writeMaterialsRB   t   writeProxyTypeRA   t	   writeMeshR   t   getSeedMesht   proxyt   SimpleProxyTypesRC   t	   writePoset   writeGroupst
   writeFinal(   RD   R1   R0   R,   t   ptype(    (    s    plugins/9_export_mhx\mhx_main.pyR)   p   s0    				"#c         C   sê   |  j  } | j d d |  j ƒ  | j | j f d | j d d | j d |  j ƒ  ƒ |  j d d | ƒ |  j d d	 | ƒ |  j d
 d | ƒ |  j d d | ƒ |  j d d | ƒ |  j d d | ƒ | j d d d d ƒ d  S(   Ns>   # ---------------- Groups -------------------------------- #

s2   PostProcess %s %s 0000003f 00080000 %s 0000c000 ;
s	   Group %s
s
     Objects
s       ob %s ;
RE   RF   RG   RH   RI   RJ   t   Hairt   Eyest   Genitalss       ob CustomShapes ;
s     end Objects
s:     layers Array 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1  ;
s
   end Group
(   R:   R!   t   meshNameR/   t   visibleLayerst
   groupProxy(   RD   R1   R0   (    (    s    plugins/9_export_mhx\mhx_main.pyRU   •   s    	:c         C   sJ   xC |  j  j ƒ  D]2 } | j | k r | j d |  j | ƒ ƒ q q Wd  S(   Ns       ob %s ;
(   R4   t   valuesR9   R!   R[   (   RD   R9   t   testR1   t   pxy(    (    s    plugins/9_export_mhx\mhx_main.pyR]   ®   s    (   t   __name__t
   __module__R8   R)   RU   R]   (    (    (    s    plugins/9_export_mhx\mhx_main.pyR(   ]   s   		%	(   t   __doc__R"   R#   t   module3dt   coreR    R   R   R   t   numpyt   mathR   RR   R;   R   R   R   R   R   R   R   R   R6   R(   (    (    (    s    plugins/9_export_mhx\mhx_main.pyt   <module>   s*   	&