a `e)@sddlZddlZddlmZddlZddlZddlZddlm Z ddlm Z ej dej j defddZd d Zefd d Zd dZddefddZdS)N) MemoryFile)system)ioignore)categorycCsXtj|std|tjtj|}dii}g}g}g}i}d}t|} |d|| D]x} | drd| dd } |d t | ||dqd| d r| ttt| dd qd| d r| ttt| dd qd| d r0| ttt| dd qd| drvd| dd } | |dvrptd| | }qd| drd||vrg||<| dd\} }}| ddkrXtt| ddd \}}}tt| ddd \}}}tt| ddd \}}}|| |d|d|d|d|d|d|d|d|df qdtt| ddd\}}tt| ddd\}}tt| ddd\}}|| |d|d|d|d|d|dfqdWdn1s0Ytj|tjd|d<tj|tjd|d<tj|tjd|d<||d<t|d|d<|S)NCannot open %s materials_ Loading %szmtllib _infozv zvt zvn zusemtl z%s material is missingzf /rdtypeverticesuvsnormalsfaces)ospathisfileIOErrordirnameabspathopen startswithjoinsplitstripupdateload_mtlappendlistmapfloat Exceptioncountintnparrayfloat32convert_materials_to_jpeg)obj_pathr obj_base_pathobjrrrrcurrent_materialflinemtl_filemtl_nameabcavatanbvbtbncvctcnrE/code/opendm/gltf.pyload_obj s\       " " "    FTrGc Csd}d}d}|D]}||}|jtjkr0d}qz4t|j}t|d}t|t|jt|j}Wqtyt|t|}t|t||}Yq0q|dkrd}|D]$}||}|s|tj }||8}|d|9}tj ||dd||dk<d||dk<|tj}t }|j \}} } td|}|j dd || | tjjd @} td td|d D]} | || d | qfWdn1s0Y|d|||<Wdq1s0Yq|S) NrFTgo@)outrJPEGZ)driverZ jpeg_qualityr+widthheightrr )rr-uint8iinfominmaxr) ValueErrorastyper/aroundrshaperrasteriodtypesrangewriteseekread) r min_value value_rangeZskip_conversionmatimage data_rangememfilebandshwdstr:rErErFr0MsH            8 .r0c Cstj||}tj|s&td|i}d}t|}|D]}|drfd|dd}q<|dr<|r %sr rrrr rcs4tjdt||dg7t|7tdS)Nr)bufferZ byteOffset byteLengthtargetr ) pygltflibZ BufferViewrn)rorwZ bufOffset bufferViewsrErF addBufferViews  zobj2glb..addBufferViewrrr )axis) bufferViewZ componentTyper+typerRrQ)ZPOSITIONZ TEXCOORD_0NORMAL) attributesmaterialrrz image/jpeg)rZmimeType)sourcesampler)index)ZbaseColorTextureZmetallicFactorZroughnessFactor)ZpbrMetallicRoughnessZ alphaModeZKHR_materials_unlit)nodes)mesh) primitives)Z magFilterZ minFilter)rv) ZsceneZscenesrmeshesrtexturesZsamplersimages accessorsrzbuffersrsrZ CESIUM_RTCcentergz Writing...zWrote %szCompressing with draco _compressed)postfixz.draco_transcoder -i "{}" -o "{}" -qt 16 -qp 16z"Cannot compress GLB with draco: %s)N)8rGrTr-r/keysr.uint32flattenrVtobytesrxZ ARRAY_BUFFERZAccessorFLOATrnZVEC3rRtolistrQZVEC2Z Primitive AttributesrrImageZTextureZMaterialZPbrMetallicRoughnessZ TextureInfoZOPAQUE extensionsZGLTF2ZSceneNodeMeshZSamplerLINEARBufferZextensionsRequiredZextensionsUsedr)Zset_binary_blobsaverrelated_file_pathrrunformatrrrremoverenamer*log ODM_WARNINGstr)!Z input_objZ output_glbrtcZdraco_compressionrr3rrrbinaryrrrrrr{rrZ prim_verticesZprim_uvsZ prim_normalsZ normals_blobZ vertices_blobZuvs_blobZverticesBufferViewZ uvsBufferViewZnormalsBufferViewZ texture_blobZtextureBufferViewr_gltfZcompressed_glberEryrFobj2glbs (            "      r)rrW rasterio.iorwarningsnumpyr-rxopendmrrfilterwarningserrorsNotGeoreferencedWarningprintrGr0r%rrrrErErErFs    @2