a `§»eèã@sddlZddlZddlZddlZzddlmZddlmZWn*e yfddlmZddlmZYn0ej dej j de fdd„Ze fd d „Ze fd d „Ze fd d„Zdd„Zde fdd„ZedkrddlZejddZejdddejdddde ¡ZeejejƒdS)éNé)ÚAABB)ÚpackÚignore)Úcategoryc Cstj |¡std|ƒ‚tj tj |¡¡}tj |¡tj tj |¡¡gidœ}g}i}d}t|ƒn}|d|ƒ|D]J}| d¡rÌd  |  ¡dd…¡  ¡} |d  t | ||d ¡|d  | ¡qz| d ¡rø| ttt|  ¡dd …ƒƒ¡qz| d ¡r>d  |  ¡dd…¡  ¡} | |dvr8td| ƒ‚| }qz| d¡rz||vrZg||<|  ¡dd…\} } } t|   d¡dƒ}t|   d¡dƒ}t|   d¡dƒ}|| |d|d|df¡qzWdƒn1sÞ0Ytj|tjd|d<||d<|S)NúCannot open %s)ÚfilenameÚroot_dirÚ mtl_filenamesÚ materialsÚ_z Loading %szmtllib Úrr ©Ú_infor zvt ézusemtl z%s material is missingzf ú/)ÚdtypeÚuvsÚfaces)ÚosÚpathÚisfileÚIOErrorÚdirnameÚabspathÚbasenameÚopenÚ startswithÚjoinÚsplitÚstripÚupdateÚload_mtlÚappendÚlistÚmapÚfloatÚ ExceptionÚintÚnpÚarrayÚfloat32)Zobj_pathrÚ obj_base_pathÚobjrrÚcurrent_materialÚfÚlineÚmtl_fileZmtl_nameÚaÚbÚcÚatÚbtÚct©r8ú#/code/opendm/objpacker/objpacker.pyÚload_objsH   ü     "    Br:c Csàtj ||¡}tj |¡s&td|ƒ‚i}d}t|ƒ–}|D]€}| d¡rfd | ¡dd…¡ ¡}q<| d¡r<|r€óz%write_obj_changes..rÚaspectÚoffsetz vt %s %s z Writing %sÚw)rÚ readlinesÚ enumeraterr#r rÚlenr(rrrrÚ writelines)Úobj_filer1Ú uv_changesÚ single_matÚ output_dirrr/Z obj_linesÚ out_linesZuv_linesr.Zprinted_mtllibZprinted_usemtlZline_idxr0ÚvÚpartsÚuv_idxZ uv_line_idxZuv_liner@ÚchangesÚout_filer8r8r9Úwrite_obj_changes[sT &         $$    rTc CsÂ|j\}}}||d<||d<d|vr,d|d<|d|||fƒtj|dfi|¤Ž>}td|jddƒD]}| ||d|¡qhWdƒn1s–0Y|d } tj | ¡r¾t | ¡dS) NÚwidthÚheightÚtiledFzWriting %s (%sx%s pixels)rErrz.aux.xml) ÚshapeÚrasteriorÚrangeÚwriterrrÚunlink) ÚimgÚprofilerrr rEÚhÚdstr3Zsidecarr8r8r9Úwrite_output_tex‘s 4 rac Csît|dƒ}| ¡}Wdƒn1s(0Yg}d}d}|D]\}| d¡rvd | ¡dd…¡ ¡}| |¡qB| d¡r”| d|¡q qB| |¡qBt|dƒ } |  d |¡¡Wdƒn1sÐ0Y|durêtd ƒ‚|S) NÚrFZnewmtlr rZmap_Kdz map_Kd %s rEz$Could not find material name in file) rrFrrrr r#r[r') Zsrc_mtlÚmat_fileZdst_mtlÚsrcÚlinesÚoutZ found_maprLÚlr`r8r8r9Úwrite_output_mtl¢s$ &     .rhc Cs¸|s"tj tj tj |¡¡d¡}t||d}|ds>tdƒ‚tj |¡tj tj |tj |¡¡¡krttd|ƒ‚t|dƒdkrœt|dƒdkrœtdƒ‚|d ƒi}|dD]R}t ƒ}|d |}|D].}|D]$} |d | } |  | d | d¡qÒqÊ|||<q°|d ƒt ||d\} } } |dd }tj |dt t |dƒƒ¡}tj |¡sbt |¡t| | tj ||¡|dttj |d|¡|tj ||¡ƒ}t||| |||ddS)NÚpackedrr z!No MTL files found, nothing to doz;This will overwrite %s. Choose a different output directoryrr z1File already has a single material, nothing to dozComputing texture boundsrrrzBinary packing...)Úextentsr )rrrrrr:r'rrHrÚaddrÚnextÚiterÚisdirÚmkdirrarhrT)rJrMrr-rjZmaterialÚboundsrr/rQr@Z output_imagerKr^r1rcrLr8r8r9Úobj_pack¼s8 *         $rqÚ__main__z;Packs textured .OBJ Wavefront files into a single materials)Ú descriptionr-zPath to the .OBJ file)Úhelpz-oz --output-dirzOutput directory)rrYÚwarningsÚnumpyr)Zimagepacker.utilsrZ imagepackerrÚ ImportErrorÚfilterwarningsÚerrorsÚNotGeoreferencedWarningÚprintr:r"rTrarhrqÚ__name__ÚargparseÚArgumentParserÚparserÚ add_argumentÚ parse_argsÚargsr-rMr8r8r8r9Ús.    6  6 (