a `§»e¸ã@sšddlZddlZddlZddlZddlZddlmZddlmZddlm Z ddlm Z ddl m Z ddl Z ddlmZdd d „Zdd d „Zdd d„ZdS)éN)Ú double_quote)Úio)Úlog)Úsystem)Ú build_entwine)ÚshapeFc Cs`tj |¡st d¡dS|r@t |¡r@t d|¡t |¡t  d¡d}}}|durøtj |¡røzRt |ƒ6}t   |  ¡¡}|d}|d}|d}Wdƒn1s°0YWn:työ} z"t d|t| ƒf¡WYd} ~ n d} ~ 00d } d } |durötj |¡röz t  |d ¡~}t|ƒd krˆt|d d ƒ} | j} t  d t| dƒ¡| | krpd} nt t | | d¡¡} nt d|¡Wdƒn1s¬0YWn<tyô} z"t d|t| ƒf¡WYd} ~ n d} ~ 00z,||| |||dœ}t djfi|¤Ž¡Wn8tyZ} zt dt| ƒ¡WYd} ~ n d} ~ 00dS)NzNo input OBJ file to processú(Removing previous 3D tiles directory: %sz&Generating OGC 3D Tiles textured modelrÚlatitudeÚ longitudeÚaltitudezCannot read %s: %séi'ÚrÚgeometryzApproximate area: %s m^2éézInvalid boundary file: %s)ÚinputÚoutputÚ divisionsÚlatÚlonÚaltz[Obj2Tiles "{input}" "{output}" --divisions {divisions} --lat {lat} --lon {lon} --alt {alt} z(Cannot build 3D tiles textured model: %s)ÚosÚpathÚisfilerÚ ODM_WARNINGrÚ dir_existsÚshutilÚrmtreeÚODM_INFOÚopenÚjsonÚloadsÚreadÚ ExceptionÚstrÚfionaÚlenrÚareaÚroundÚmathÚceilrÚrunÚformat)Ú input_objÚ output_pathÚ reference_llaÚmodel_bounds_fileÚrerunrrrÚfÚerZ DIV_THRESHOLDÚpolyr'Úkwargs©r6ú/code/opendm/ogctiles.pyÚbuild_textured_modelsV      *, 2,úr8c Cstj |¡st d¡dS|r@t |¡r@t d|¡t |¡t  d¡zŒtj  |¡sbt  |¡tj  |d¡}tj  |d¡}t |g|||dƒ||dœ}t djfi|¤Ž¡||fD]}tj  |¡r¸t |¡q¸Wn8ty}zt d t|ƒ¡WYd}~n d}~00dS) Nz$No input point cloud file to processrz#Generating OGC 3D Tiles point cloudÚtmpÚentwinez EPSG:4978)rrz*entwine convert -i "{input}" -o "{output}"z%Cannot build 3D tiles point cloud: %s)rrrrrrrrrrÚisdirÚmkdirÚjoinrrr+r,r#r$) Zinput_pointcloudr.Úmax_concurrencyr1ÚtmpdirZentwine_outputr5Údr3r6r6r7Úbuild_pointcloudHs,      þ  rAc Cs|j}tj |d¡}tj |d¡}|r) ÚargsÚtreeÚreconstructionr1Ztiles_output_pathZmodel_output_pathZpointcloud_output_pathr/r0r-r6r6r7Ú build_3dtilesis$    rO)NNF)F)F)rÚsysrr r)Ú opendm.utilsrÚopendmrrrZopendm.entwinerr%Úshapely.geometryrr8rArOr6r6r6r7Ús       : !