@loaders.gl/tile-converter 4.0.0-alpha.5 → 4.0.0-alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. package/bin/converter.js +1 -1
  2. package/dist/3d-tiles-attributes-worker.d.ts +28 -0
  3. package/dist/3d-tiles-attributes-worker.d.ts.map +1 -0
  4. package/dist/3d-tiles-attributes-worker.js +3 -0
  5. package/dist/3d-tiles-attributes-worker.js.map +7 -0
  6. package/dist/3d-tiles-converter/3d-tiles-converter.d.ts +13 -1
  7. package/dist/3d-tiles-converter/3d-tiles-converter.d.ts.map +1 -1
  8. package/dist/3d-tiles-converter/3d-tiles-converter.js +274 -233
  9. package/dist/3d-tiles-converter/helpers/b3dm-converter.d.ts +9 -16
  10. package/dist/3d-tiles-converter/helpers/b3dm-converter.d.ts.map +1 -1
  11. package/dist/3d-tiles-converter/helpers/b3dm-converter.js +256 -246
  12. package/dist/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js +22 -9
  13. package/dist/3d-tiles-converter/helpers/texture-atlas.js +47 -28
  14. package/dist/3d-tiles-converter/json-templates/tileset.js +38 -35
  15. package/dist/bundle.js +2 -2
  16. package/dist/constants.d.ts +2 -0
  17. package/dist/constants.d.ts.map +1 -0
  18. package/dist/constants.js +4 -0
  19. package/dist/converter-cli.d.ts +2 -0
  20. package/dist/converter-cli.d.ts.map +1 -0
  21. package/dist/converter-cli.js +280 -0
  22. package/dist/converter.min.js +185 -190
  23. package/dist/deps-installer/deps-installer.d.ts +11 -3
  24. package/dist/deps-installer/deps-installer.d.ts.map +1 -1
  25. package/dist/deps-installer/deps-installer.js +59 -18
  26. package/dist/dist.min.js +15153 -37895
  27. package/dist/es5/3d-tiles-attributes-worker.js +25 -0
  28. package/dist/es5/3d-tiles-attributes-worker.js.map +1 -0
  29. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js +467 -0
  30. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js.map +1 -0
  31. package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js +293 -0
  32. package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -0
  33. package/dist/es5/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js +18 -0
  34. package/dist/es5/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +1 -0
  35. package/dist/es5/3d-tiles-converter/helpers/texture-atlas.js +33 -0
  36. package/dist/es5/3d-tiles-converter/helpers/texture-atlas.js.map +1 -0
  37. package/dist/es5/3d-tiles-converter/json-templates/tileset.js +61 -0
  38. package/dist/es5/3d-tiles-converter/json-templates/tileset.js.map +1 -0
  39. package/dist/es5/bundle.js +6 -0
  40. package/dist/es5/bundle.js.map +1 -0
  41. package/dist/es5/constants.js +9 -0
  42. package/dist/es5/constants.js.map +1 -0
  43. package/dist/es5/converter-cli.js +289 -0
  44. package/dist/es5/converter-cli.js.map +1 -0
  45. package/dist/es5/deps-installer/deps-installer.js +123 -0
  46. package/dist/es5/deps-installer/deps-installer.js.map +1 -0
  47. package/dist/es5/i3s-attributes-worker.js +25 -0
  48. package/dist/es5/i3s-attributes-worker.js.map +1 -0
  49. package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js +116 -0
  50. package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js.map +1 -0
  51. package/dist/es5/i3s-converter/helpers/coordinate-converter.js +90 -0
  52. package/dist/es5/i3s-converter/helpers/coordinate-converter.js.map +1 -0
  53. package/dist/es5/i3s-converter/helpers/create-scene-server-path.js +41 -0
  54. package/dist/es5/i3s-converter/helpers/create-scene-server-path.js.map +1 -0
  55. package/dist/es5/i3s-converter/helpers/feature-attributes.js +174 -0
  56. package/dist/es5/i3s-converter/helpers/feature-attributes.js.map +1 -0
  57. package/dist/es5/i3s-converter/helpers/geometry-attributes.js +213 -0
  58. package/dist/es5/i3s-converter/helpers/geometry-attributes.js.map +1 -0
  59. package/dist/es5/i3s-converter/helpers/geometry-converter.js +1181 -0
  60. package/dist/es5/i3s-converter/helpers/geometry-converter.js.map +1 -0
  61. package/dist/es5/i3s-converter/helpers/gltf-attributes.js +80 -0
  62. package/dist/es5/i3s-converter/helpers/gltf-attributes.js.map +1 -0
  63. package/dist/es5/i3s-converter/helpers/node-debug.js +76 -0
  64. package/dist/es5/i3s-converter/helpers/node-debug.js.map +1 -0
  65. package/dist/es5/i3s-converter/helpers/node-index-document.js +492 -0
  66. package/dist/es5/i3s-converter/helpers/node-index-document.js.map +1 -0
  67. package/dist/es5/i3s-converter/helpers/node-pages.js +519 -0
  68. package/dist/es5/i3s-converter/helpers/node-pages.js.map +1 -0
  69. package/dist/es5/i3s-converter/i3s-converter.js +1512 -0
  70. package/dist/es5/i3s-converter/i3s-converter.js.map +1 -0
  71. package/dist/es5/i3s-converter/json-templates/geometry-definitions.js +107 -0
  72. package/dist/es5/i3s-converter/json-templates/geometry-definitions.js.map +1 -0
  73. package/dist/es5/i3s-converter/json-templates/layers.js +163 -0
  74. package/dist/es5/i3s-converter/json-templates/layers.js.map +1 -0
  75. package/dist/es5/i3s-converter/json-templates/metadata.js +31 -0
  76. package/dist/es5/i3s-converter/json-templates/metadata.js.map +1 -0
  77. package/dist/es5/i3s-converter/json-templates/node.js +99 -0
  78. package/dist/es5/i3s-converter/json-templates/node.js.map +1 -0
  79. package/dist/es5/i3s-converter/json-templates/scene-server.js +39 -0
  80. package/dist/es5/i3s-converter/json-templates/scene-server.js.map +1 -0
  81. package/dist/es5/i3s-converter/json-templates/shared-resources.js +173 -0
  82. package/dist/es5/i3s-converter/json-templates/shared-resources.js.map +1 -0
  83. package/dist/es5/i3s-converter/json-templates/store.js +107 -0
  84. package/dist/es5/i3s-converter/json-templates/store.js.map +1 -0
  85. package/dist/es5/i3s-converter/types.js +2 -0
  86. package/dist/es5/i3s-converter/types.js.map +1 -0
  87. package/dist/es5/i3s-server/app.js +18 -0
  88. package/dist/es5/i3s-server/app.js.map +1 -0
  89. package/dist/es5/i3s-server/controllers/index-controller.js +55 -0
  90. package/dist/es5/i3s-server/controllers/index-controller.js.map +1 -0
  91. package/dist/es5/i3s-server/routes/index.js +37 -0
  92. package/dist/es5/i3s-server/routes/index.js.map +1 -0
  93. package/dist/es5/index.js +21 -0
  94. package/dist/es5/index.js.map +1 -0
  95. package/dist/es5/lib/utils/compress-util.js +346 -0
  96. package/dist/es5/lib/utils/compress-util.js.map +1 -0
  97. package/dist/es5/lib/utils/file-utils.js +208 -0
  98. package/dist/es5/lib/utils/file-utils.js.map +1 -0
  99. package/dist/es5/lib/utils/geometry-utils.js +15 -0
  100. package/dist/es5/lib/utils/geometry-utils.js.map +1 -0
  101. package/dist/es5/lib/utils/lod-conversion-utils.js +44 -0
  102. package/dist/es5/lib/utils/lod-conversion-utils.js.map +1 -0
  103. package/dist/es5/lib/utils/queue.js +47 -0
  104. package/dist/es5/lib/utils/queue.js.map +1 -0
  105. package/dist/es5/lib/utils/statistic-utills.d.ts +25 -0
  106. package/dist/es5/lib/utils/statistic-utills.js +147 -0
  107. package/dist/es5/lib/utils/statistic-utills.js.map +1 -0
  108. package/dist/es5/lib/utils/write-queue.js +214 -0
  109. package/dist/es5/lib/utils/write-queue.js.map +1 -0
  110. package/dist/es5/pgm-loader.js +41 -0
  111. package/dist/es5/pgm-loader.js.map +1 -0
  112. package/dist/es5/workers/3d-tiles-attributes-worker.js +28 -0
  113. package/dist/es5/workers/3d-tiles-attributes-worker.js.map +1 -0
  114. package/dist/es5/workers/i3s-attributes-worker.js +30 -0
  115. package/dist/es5/workers/i3s-attributes-worker.js.map +1 -0
  116. package/dist/esm/3d-tiles-attributes-worker.js +16 -0
  117. package/dist/esm/3d-tiles-attributes-worker.js.map +1 -0
  118. package/dist/esm/3d-tiles-converter/3d-tiles-converter.js +245 -0
  119. package/dist/esm/3d-tiles-converter/3d-tiles-converter.js.map +1 -0
  120. package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js +218 -0
  121. package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -0
  122. package/dist/esm/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js +10 -0
  123. package/dist/esm/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +1 -0
  124. package/dist/esm/3d-tiles-converter/helpers/texture-atlas.js +27 -0
  125. package/dist/esm/3d-tiles-converter/helpers/texture-atlas.js.map +1 -0
  126. package/dist/esm/3d-tiles-converter/json-templates/tileset.js +37 -0
  127. package/dist/esm/3d-tiles-converter/json-templates/tileset.js.map +1 -0
  128. package/dist/esm/bundle.js +4 -0
  129. package/dist/esm/bundle.js.map +1 -0
  130. package/dist/esm/constants.js +2 -0
  131. package/dist/esm/constants.js.map +1 -0
  132. package/dist/esm/converter-cli.js +232 -0
  133. package/dist/esm/converter-cli.js.map +1 -0
  134. package/dist/esm/deps-installer/deps-installer.js +44 -0
  135. package/dist/esm/deps-installer/deps-installer.js.map +1 -0
  136. package/dist/esm/i3s-attributes-worker.js +16 -0
  137. package/dist/esm/i3s-attributes-worker.js.map +1 -0
  138. package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js +105 -0
  139. package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js.map +1 -0
  140. package/dist/esm/i3s-converter/helpers/coordinate-converter.js +80 -0
  141. package/dist/esm/i3s-converter/helpers/coordinate-converter.js.map +1 -0
  142. package/dist/esm/i3s-converter/helpers/create-scene-server-path.js +16 -0
  143. package/dist/esm/i3s-converter/helpers/create-scene-server-path.js.map +1 -0
  144. package/dist/esm/i3s-converter/helpers/feature-attributes.js +147 -0
  145. package/dist/esm/i3s-converter/helpers/feature-attributes.js.map +1 -0
  146. package/dist/esm/i3s-converter/helpers/geometry-attributes.js +190 -0
  147. package/dist/esm/i3s-converter/helpers/geometry-attributes.js.map +1 -0
  148. package/dist/esm/i3s-converter/helpers/geometry-converter.js +895 -0
  149. package/dist/esm/i3s-converter/helpers/geometry-converter.js.map +1 -0
  150. package/dist/esm/i3s-converter/helpers/gltf-attributes.js +73 -0
  151. package/dist/esm/i3s-converter/helpers/gltf-attributes.js.map +1 -0
  152. package/dist/esm/i3s-converter/helpers/node-debug.js +72 -0
  153. package/dist/esm/i3s-converter/helpers/node-debug.js.map +1 -0
  154. package/dist/esm/i3s-converter/helpers/node-index-document.js +188 -0
  155. package/dist/esm/i3s-converter/helpers/node-index-document.js.map +1 -0
  156. package/dist/esm/i3s-converter/helpers/node-pages.js +206 -0
  157. package/dist/esm/i3s-converter/helpers/node-pages.js.map +1 -0
  158. package/dist/esm/i3s-converter/i3s-converter.js +764 -0
  159. package/dist/esm/i3s-converter/i3s-converter.js.map +1 -0
  160. package/dist/esm/i3s-converter/json-templates/geometry-definitions.js +89 -0
  161. package/dist/esm/i3s-converter/json-templates/geometry-definitions.js.map +1 -0
  162. package/dist/esm/i3s-converter/json-templates/layers.js +133 -0
  163. package/dist/esm/i3s-converter/json-templates/layers.js.map +1 -0
  164. package/dist/esm/i3s-converter/json-templates/metadata.js +22 -0
  165. package/dist/esm/i3s-converter/json-templates/metadata.js.map +1 -0
  166. package/dist/esm/i3s-converter/json-templates/node.js +80 -0
  167. package/dist/esm/i3s-converter/json-templates/node.js.map +1 -0
  168. package/dist/esm/i3s-converter/json-templates/scene-server.js +28 -0
  169. package/dist/esm/i3s-converter/json-templates/scene-server.js.map +1 -0
  170. package/dist/esm/i3s-converter/json-templates/shared-resources.js +123 -0
  171. package/dist/esm/i3s-converter/json-templates/shared-resources.js.map +1 -0
  172. package/dist/esm/i3s-converter/json-templates/store.js +98 -0
  173. package/dist/esm/i3s-converter/json-templates/store.js.map +1 -0
  174. package/dist/esm/i3s-converter/types.js +2 -0
  175. package/dist/esm/i3s-converter/types.js.map +1 -0
  176. package/dist/esm/i3s-server/app.js +16 -0
  177. package/dist/esm/i3s-server/app.js.map +1 -0
  178. package/dist/esm/i3s-server/bin/www +102 -0
  179. package/dist/esm/i3s-server/certs/cert.pem +19 -0
  180. package/dist/esm/i3s-server/certs/key.pem +27 -0
  181. package/dist/esm/i3s-server/controllers/index-controller.js +24 -0
  182. package/dist/esm/i3s-server/controllers/index-controller.js.map +1 -0
  183. package/dist/esm/i3s-server/routes/index.js +16 -0
  184. package/dist/esm/i3s-server/routes/index.js.map +1 -0
  185. package/dist/esm/index.js +3 -0
  186. package/dist/esm/index.js.map +1 -0
  187. package/dist/esm/lib/utils/compress-util.js +168 -0
  188. package/dist/esm/lib/utils/compress-util.js.map +1 -0
  189. package/dist/esm/lib/utils/file-utils.js +87 -0
  190. package/dist/esm/lib/utils/file-utils.js.map +1 -0
  191. package/dist/esm/lib/utils/geometry-utils.js +8 -0
  192. package/dist/esm/lib/utils/geometry-utils.js.map +1 -0
  193. package/dist/esm/lib/utils/lod-conversion-utils.js +37 -0
  194. package/dist/esm/lib/utils/lod-conversion-utils.js.map +1 -0
  195. package/dist/esm/lib/utils/queue.js +15 -0
  196. package/dist/esm/lib/utils/queue.js.map +1 -0
  197. package/dist/esm/lib/utils/statistic-utills.d.ts +25 -0
  198. package/dist/esm/lib/utils/statistic-utills.js +62 -0
  199. package/dist/esm/lib/utils/statistic-utills.js.map +1 -0
  200. package/dist/esm/lib/utils/write-queue.js +85 -0
  201. package/dist/esm/lib/utils/write-queue.js.map +1 -0
  202. package/dist/esm/pgm-loader.js +15 -0
  203. package/dist/esm/pgm-loader.js.map +1 -0
  204. package/dist/esm/workers/3d-tiles-attributes-worker.js +8 -0
  205. package/dist/esm/workers/3d-tiles-attributes-worker.js.map +1 -0
  206. package/dist/esm/workers/i3s-attributes-worker.js +7 -0
  207. package/dist/esm/workers/i3s-attributes-worker.js.map +1 -0
  208. package/dist/i3s-attributes-worker.d.ts +45 -0
  209. package/dist/i3s-attributes-worker.d.ts.map +1 -0
  210. package/dist/i3s-attributes-worker.js +9 -0
  211. package/dist/i3s-attributes-worker.js.map +7 -0
  212. package/dist/i3s-converter/helpers/batch-ids-extensions.d.ts +13 -0
  213. package/dist/i3s-converter/helpers/batch-ids-extensions.d.ts.map +1 -0
  214. package/dist/i3s-converter/helpers/batch-ids-extensions.js +141 -0
  215. package/dist/i3s-converter/helpers/coordinate-converter.d.ts +9 -9
  216. package/dist/i3s-converter/helpers/coordinate-converter.d.ts.map +1 -1
  217. package/dist/i3s-converter/helpers/coordinate-converter.js +118 -72
  218. package/dist/i3s-converter/helpers/create-scene-server-path.d.ts +5 -5
  219. package/dist/i3s-converter/helpers/create-scene-server-path.d.ts.map +1 -1
  220. package/dist/i3s-converter/helpers/create-scene-server-path.js +27 -15
  221. package/dist/i3s-converter/helpers/feature-attributes.d.ts +56 -0
  222. package/dist/i3s-converter/helpers/feature-attributes.d.ts.map +1 -0
  223. package/dist/i3s-converter/helpers/feature-attributes.js +216 -0
  224. package/dist/i3s-converter/helpers/geometry-attributes.d.ts +4 -19
  225. package/dist/i3s-converter/helpers/geometry-attributes.d.ts.map +1 -1
  226. package/dist/i3s-converter/helpers/geometry-attributes.js +188 -185
  227. package/dist/i3s-converter/helpers/geometry-converter.d.ts +36 -39
  228. package/dist/i3s-converter/helpers/geometry-converter.d.ts.map +1 -1
  229. package/dist/i3s-converter/helpers/geometry-converter.js +1150 -689
  230. package/dist/i3s-converter/helpers/gltf-attributes.d.ts +9 -0
  231. package/dist/i3s-converter/helpers/gltf-attributes.d.ts.map +1 -0
  232. package/dist/i3s-converter/helpers/gltf-attributes.js +85 -0
  233. package/dist/i3s-converter/helpers/node-debug.d.ts +7 -1
  234. package/dist/i3s-converter/helpers/node-debug.d.ts.map +1 -1
  235. package/dist/i3s-converter/helpers/node-debug.js +106 -72
  236. package/dist/i3s-converter/helpers/node-index-document.d.ts +95 -0
  237. package/dist/i3s-converter/helpers/node-index-document.d.ts.map +1 -0
  238. package/dist/i3s-converter/helpers/node-index-document.js +250 -0
  239. package/dist/i3s-converter/helpers/node-pages.d.ts +81 -41
  240. package/dist/i3s-converter/helpers/node-pages.d.ts.map +1 -1
  241. package/dist/i3s-converter/helpers/node-pages.js +313 -144
  242. package/dist/i3s-converter/i3s-converter.d.ts +60 -113
  243. package/dist/i3s-converter/i3s-converter.d.ts.map +1 -1
  244. package/dist/i3s-converter/i3s-converter.js +858 -951
  245. package/dist/i3s-converter/json-templates/geometry-definitions.d.ts +7 -0
  246. package/dist/i3s-converter/json-templates/geometry-definitions.d.ts.map +1 -0
  247. package/dist/i3s-converter/json-templates/geometry-definitions.js +87 -0
  248. package/dist/i3s-converter/json-templates/layers.d.ts +5 -30
  249. package/dist/i3s-converter/json-templates/layers.d.ts.map +1 -1
  250. package/dist/i3s-converter/json-templates/layers.js +132 -194
  251. package/dist/i3s-converter/json-templates/metadata.js +24 -21
  252. package/dist/i3s-converter/json-templates/node.js +82 -77
  253. package/dist/i3s-converter/json-templates/scene-server.js +30 -27
  254. package/dist/i3s-converter/json-templates/shared-resources.js +116 -122
  255. package/dist/i3s-converter/json-templates/store.js +100 -95
  256. package/dist/i3s-converter/types.d.ts +137 -6
  257. package/dist/i3s-converter/types.d.ts.map +1 -1
  258. package/dist/i3s-converter/types.js +2 -2
  259. package/dist/i3s-server/app.js +2 -9
  260. package/dist/i3s-server/controllers/index-controller.js +16 -24
  261. package/dist/i3s-server/routes/index.js +11 -15
  262. package/dist/index.d.ts +0 -2
  263. package/dist/index.d.ts.map +1 -1
  264. package/dist/index.js +10 -5
  265. package/dist/lib/utils/compress-util.d.ts +12 -20
  266. package/dist/lib/utils/compress-util.d.ts.map +1 -1
  267. package/dist/lib/utils/compress-util.js +238 -160
  268. package/dist/lib/utils/file-utils.d.ts +22 -14
  269. package/dist/lib/utils/file-utils.d.ts.map +1 -1
  270. package/dist/lib/utils/file-utils.js +133 -36
  271. package/dist/lib/utils/geometry-utils.d.ts +9 -0
  272. package/dist/lib/utils/geometry-utils.d.ts.map +1 -0
  273. package/dist/lib/utils/geometry-utils.js +18 -0
  274. package/dist/lib/utils/lod-conversion-utils.d.ts +21 -12
  275. package/dist/lib/utils/lod-conversion-utils.d.ts.map +1 -1
  276. package/dist/lib/utils/lod-conversion-utils.js +72 -39
  277. package/dist/lib/utils/queue.d.ts +7 -0
  278. package/dist/lib/utils/queue.d.ts.map +1 -0
  279. package/dist/lib/utils/queue.js +18 -0
  280. package/dist/lib/utils/statistic-utills.d.ts +3 -25
  281. package/dist/lib/utils/statistic-utills.d.ts.map +1 -1
  282. package/dist/lib/utils/statistic-utills.js +58 -67
  283. package/dist/lib/utils/write-queue.d.ts +39 -0
  284. package/dist/lib/utils/write-queue.d.ts.map +1 -0
  285. package/dist/lib/utils/write-queue.js +80 -0
  286. package/dist/pgm-loader.d.ts.map +1 -1
  287. package/dist/pgm-loader.js +23 -14
  288. package/dist/workers/3d-tiles-attributes-worker.d.ts +2 -0
  289. package/dist/workers/3d-tiles-attributes-worker.d.ts.map +1 -0
  290. package/dist/workers/3d-tiles-attributes-worker.js +9 -0
  291. package/dist/workers/i3s-attributes-worker.d.ts +2 -0
  292. package/dist/workers/i3s-attributes-worker.d.ts.map +1 -0
  293. package/dist/workers/i3s-attributes-worker.js +5 -0
  294. package/package.json +32 -24
  295. package/src/3d-tiles-attributes-worker.ts +43 -0
  296. package/src/3d-tiles-converter/3d-tiles-converter.ts +102 -40
  297. package/src/3d-tiles-converter/helpers/b3dm-converter.ts +39 -44
  298. package/src/constants.ts +2 -0
  299. package/src/converter-cli.ts +370 -0
  300. package/src/deps-installer/deps-installer.ts +71 -0
  301. package/src/i3s-attributes-worker.ts +59 -0
  302. package/src/i3s-converter/helpers/batch-ids-extensions.ts +205 -0
  303. package/src/i3s-converter/helpers/coordinate-converter.ts +33 -26
  304. package/src/i3s-converter/helpers/create-scene-server-path.ts +9 -5
  305. package/src/i3s-converter/helpers/feature-attributes.ts +247 -0
  306. package/src/i3s-converter/helpers/geometry-attributes.ts +98 -47
  307. package/src/i3s-converter/helpers/geometry-converter.ts +1635 -0
  308. package/src/i3s-converter/helpers/gltf-attributes.ts +100 -0
  309. package/src/i3s-converter/helpers/node-debug.ts +68 -16
  310. package/src/i3s-converter/helpers/node-index-document.ts +315 -0
  311. package/src/i3s-converter/helpers/node-pages.ts +222 -101
  312. package/src/i3s-converter/i3s-converter.ts +408 -555
  313. package/src/i3s-converter/json-templates/geometry-definitions.ts +83 -0
  314. package/src/i3s-converter/json-templates/layers.ts +27 -91
  315. package/src/i3s-converter/json-templates/shared-resources.ts +3 -3
  316. package/src/i3s-converter/types.ts +156 -5
  317. package/src/index.ts +0 -4
  318. package/src/lib/utils/{compress-util.js → compress-util.ts} +105 -18
  319. package/src/lib/utils/file-utils.ts +139 -0
  320. package/src/lib/utils/geometry-utils.ts +14 -0
  321. package/src/lib/utils/{lod-conversion-utils.js → lod-conversion-utils.ts} +27 -5
  322. package/src/lib/utils/queue.ts +17 -0
  323. package/src/lib/utils/write-queue.ts +110 -0
  324. package/src/pgm-loader.ts +2 -2
  325. package/src/workers/3d-tiles-attributes-worker.ts +6 -0
  326. package/src/workers/i3s-attributes-worker.ts +7 -0
  327. package/dist/3d-tiles-converter/3d-tiles-converter.js.map +0 -1
  328. package/dist/3d-tiles-converter/helpers/b3dm-converter.js.map +0 -1
  329. package/dist/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +0 -1
  330. package/dist/3d-tiles-converter/helpers/texture-atlas.js.map +0 -1
  331. package/dist/3d-tiles-converter/json-templates/tileset.js.map +0 -1
  332. package/dist/bundle.js.map +0 -1
  333. package/dist/deps-installer/deps-installer.js.map +0 -1
  334. package/dist/i3s-converter/helpers/coordinate-converter.js.map +0 -1
  335. package/dist/i3s-converter/helpers/create-scene-server-path.js.map +0 -1
  336. package/dist/i3s-converter/helpers/geometry-attributes.js.map +0 -1
  337. package/dist/i3s-converter/helpers/geometry-converter.js.map +0 -1
  338. package/dist/i3s-converter/helpers/node-debug.js.map +0 -1
  339. package/dist/i3s-converter/helpers/node-pages.js.map +0 -1
  340. package/dist/i3s-converter/i3s-converter.js.map +0 -1
  341. package/dist/i3s-converter/json-templates/layers.js.map +0 -1
  342. package/dist/i3s-converter/json-templates/metadata.js.map +0 -1
  343. package/dist/i3s-converter/json-templates/node.js.map +0 -1
  344. package/dist/i3s-converter/json-templates/scene-server.js.map +0 -1
  345. package/dist/i3s-converter/json-templates/shared-resources.js.map +0 -1
  346. package/dist/i3s-converter/json-templates/store.js.map +0 -1
  347. package/dist/i3s-converter/types.js.map +0 -1
  348. package/dist/i3s-server/app.js.map +0 -1
  349. package/dist/i3s-server/controllers/index-controller.js.map +0 -1
  350. package/dist/i3s-server/routes/index.js.map +0 -1
  351. package/dist/index.js.map +0 -1
  352. package/dist/lib/utils/compress-util.js.map +0 -1
  353. package/dist/lib/utils/file-utils.js.map +0 -1
  354. package/dist/lib/utils/lod-conversion-utils.js.map +0 -1
  355. package/dist/lib/utils/statistic-utills.js.map +0 -1
  356. package/dist/pgm-loader.js.map +0 -1
  357. package/src/deps-installer/deps-installer.d.ts +0 -10
  358. package/src/deps-installer/deps-installer.js +0 -22
  359. package/src/i3s-converter/helpers/geometry-converter.d.ts +0 -44
  360. package/src/i3s-converter/helpers/geometry-converter.js +0 -992
  361. package/src/lib/utils/compress-util.d.ts +0 -53
  362. package/src/lib/utils/file-utils.d.ts +0 -43
  363. package/src/lib/utils/file-utils.js +0 -38
  364. package/src/lib/utils/lod-conversion-utils.d.ts +0 -32
  365. /package/dist/{i3s-server → es5/i3s-server}/bin/www +0 -0
  366. /package/dist/{i3s-server → es5/i3s-server}/certs/cert.pem +0 -0
  367. /package/dist/{i3s-server → es5/i3s-server}/certs/key.pem +0 -0
  368. /package/src/lib/utils/{statistic-utills.js → statistic-utills.ts} +0 -0
@@ -0,0 +1,764 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+ var _process$env;
3
+ import { load, encode, fetchFile, getLoaderOptions, isBrowser } from '@loaders.gl/core';
4
+ import { Tileset3D } from '@loaders.gl/tiles';
5
+ import { CesiumIonLoader, Tiles3DLoader } from '@loaders.gl/3d-tiles';
6
+ import { join } from 'path';
7
+ import { v4 as uuidv4 } from 'uuid';
8
+ import process from 'process';
9
+ import transform from 'json-map-transform';
10
+ import md5 from 'md5';
11
+ import NodePages from './helpers/node-pages';
12
+ import { writeFile, removeDir, writeFileForSlpk, removeFile } from '../lib/utils/file-utils';
13
+ import { compressFileWithGzip, compressWithChildProcess } from '../lib/utils/compress-util';
14
+ import { calculateFilesSize, timeConverter } from '../lib/utils/statistic-utills';
15
+ import convertB3dmToI3sGeometry, { getPropertyTable } from './helpers/geometry-converter';
16
+ import { createBoundingVolumes, convertBoundingVolumeToI3SFullExtent } from './helpers/coordinate-converter';
17
+ import { createSceneServerPath } from './helpers/create-scene-server-path';
18
+ import { convertGeometricErrorToScreenThreshold } from '../lib/utils/lod-conversion-utils';
19
+ import { PGMLoader } from '../pgm-loader';
20
+ import { LAYERS as layersTemplate } from './json-templates/layers';
21
+ import { GEOMETRY_DEFINITION as geometryDefinitionTemlate } from './json-templates/geometry-definitions';
22
+ import { SHARED_RESOURCES as sharedResourcesTemplate } from './json-templates/shared-resources';
23
+ import { validateNodeBoundingVolumes } from './helpers/node-debug';
24
+ import { KTX2BasisWriterWorker } from '@loaders.gl/textures';
25
+ import { ImageWriter } from '@loaders.gl/images';
26
+ import { getWorkerURL, WorkerFarm } from '@loaders.gl/worker-utils';
27
+ import { DracoWriterWorker } from '@loaders.gl/draco';
28
+ import WriteQueue from '../lib/utils/write-queue';
29
+ import { I3SAttributesWorker } from '../i3s-attributes-worker';
30
+ import { BROWSER_ERROR_MESSAGE } from '../constants';
31
+ import { createdStorageAttribute, createFieldAttribute, createPopupInfo, getAttributeType, getFieldAttributeType } from './helpers/feature-attributes';
32
+ import { NodeIndexDocument } from './helpers/node-index-document';
33
+ const ION_DEFAULT_TOKEN = ((_process$env = process.env) === null || _process$env === void 0 ? void 0 : _process$env.IonToken) || 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJlYWMxMzcyYy0zZjJkLTQwODctODNlNi01MDRkZmMzMjIxOWIiLCJpZCI6OTYyMCwic2NvcGVzIjpbImFzbCIsImFzciIsImdjIl0sImlhdCI6MTU2Mjg2NjI3M30.1FNiClUyk00YH_nWfSGpiQAjR5V2OvREDq1PJ5QMjWQ';
34
+ const HARDCODED_NODES_PER_PAGE = 64;
35
+ const _3D_TILES = '3DTILES';
36
+ const _3D_OBJECT_LAYER_TYPE = '3DObject';
37
+ const REFRESH_TOKEN_TIMEOUT = 1800;
38
+ const CESIUM_DATASET_PREFIX = 'https://';
39
+ export default class I3SConverter {
40
+ constructor() {
41
+ _defineProperty(this, "nodePages", void 0);
42
+ _defineProperty(this, "options", void 0);
43
+ _defineProperty(this, "layers0Path", void 0);
44
+ _defineProperty(this, "materialMap", void 0);
45
+ _defineProperty(this, "materialDefinitions", void 0);
46
+ _defineProperty(this, "geometryMap", void 0);
47
+ _defineProperty(this, "geometryConfigs", void 0);
48
+ _defineProperty(this, "vertexCounter", void 0);
49
+ _defineProperty(this, "layers0", void 0);
50
+ _defineProperty(this, "featuresHashArray", void 0);
51
+ _defineProperty(this, "refinementCounter", void 0);
52
+ _defineProperty(this, "validate", void 0);
53
+ _defineProperty(this, "boundingVolumeWarnings", []);
54
+ _defineProperty(this, "conversionStartTime", [0, 0]);
55
+ _defineProperty(this, "refreshTokenTime", [0, 0]);
56
+ _defineProperty(this, "sourceTileset", null);
57
+ _defineProperty(this, "geoidHeightModel", null);
58
+ _defineProperty(this, "Loader", Tiles3DLoader);
59
+ _defineProperty(this, "generateTextures", void 0);
60
+ _defineProperty(this, "generateBoundingVolumes", void 0);
61
+ _defineProperty(this, "layersHasTexture", void 0);
62
+ _defineProperty(this, "workerSource", {});
63
+ _defineProperty(this, "writeQueue", new WriteQueue());
64
+ _defineProperty(this, "compressList", null);
65
+ this.nodePages = new NodePages(writeFile, HARDCODED_NODES_PER_PAGE, this);
66
+ this.options = {};
67
+ this.layers0Path = '';
68
+ this.materialMap = new Map();
69
+ this.materialDefinitions = [];
70
+ this.geometryMap = new Map();
71
+ this.geometryConfigs = [];
72
+ this.vertexCounter = 0;
73
+ this.layers0 = null;
74
+ this.featuresHashArray = [];
75
+ this.refinementCounter = {
76
+ tilesCount: 0,
77
+ tilesWithAddRefineCount: 0
78
+ };
79
+ this.validate = false;
80
+ this.generateTextures = false;
81
+ this.generateBoundingVolumes = false;
82
+ this.layersHasTexture = false;
83
+ this.compressList = null;
84
+ }
85
+ async convert(options) {
86
+ if (isBrowser) {
87
+ console.log(BROWSER_ERROR_MESSAGE);
88
+ return BROWSER_ERROR_MESSAGE;
89
+ }
90
+ this.conversionStartTime = process.hrtime();
91
+ const {
92
+ tilesetName,
93
+ slpk,
94
+ egmFilePath,
95
+ inputUrl,
96
+ validate,
97
+ outputPath,
98
+ draco = true,
99
+ sevenZipExe,
100
+ maxDepth,
101
+ token,
102
+ generateTextures,
103
+ generateBoundingVolumes,
104
+ instantNodeWriting = false,
105
+ mergeMaterials = true
106
+ } = options;
107
+ this.options = {
108
+ maxDepth,
109
+ slpk,
110
+ sevenZipExe,
111
+ egmFilePath,
112
+ draco,
113
+ token,
114
+ inputUrl,
115
+ instantNodeWriting,
116
+ mergeMaterials
117
+ };
118
+ this.compressList = this.options.instantNodeWriting && [] || null;
119
+ this.validate = Boolean(validate);
120
+ this.Loader = inputUrl.indexOf(CESIUM_DATASET_PREFIX) !== -1 ? CesiumIonLoader : Tiles3DLoader;
121
+ this.generateTextures = Boolean(generateTextures);
122
+ this.generateBoundingVolumes = Boolean(generateBoundingVolumes);
123
+ this.writeQueue = new WriteQueue();
124
+ this.writeQueue.startListening();
125
+ console.log('Loading egm file...');
126
+ this.geoidHeightModel = await load(egmFilePath, PGMLoader);
127
+ console.log('Loading egm file completed!');
128
+ if (slpk) {
129
+ this.nodePages.useWriteFunction(writeFileForSlpk);
130
+ }
131
+ await this.loadWorkers();
132
+ try {
133
+ var _sourceTilesetJson$ro, _sourceTilesetJson$ro2;
134
+ const preloadOptions = await this._fetchPreloadOptions();
135
+ const tilesetOptions = {
136
+ loadOptions: {
137
+ _nodeWorkers: true,
138
+ reuseWorkers: true,
139
+ basis: {
140
+ format: 'rgba32'
141
+ }
142
+ }
143
+ };
144
+ if (preloadOptions.headers) {
145
+ tilesetOptions.loadOptions.fetch = {
146
+ headers: preloadOptions.headers
147
+ };
148
+ }
149
+ Object.assign(tilesetOptions, preloadOptions);
150
+ const sourceTilesetJson = await load(inputUrl, this.Loader, tilesetOptions.loadOptions);
151
+ this.sourceTileset = new Tileset3D(sourceTilesetJson, tilesetOptions);
152
+ await this._createAndSaveTileset(outputPath, tilesetName, sourceTilesetJson === null || sourceTilesetJson === void 0 ? void 0 : (_sourceTilesetJson$ro = sourceTilesetJson.root) === null || _sourceTilesetJson$ro === void 0 ? void 0 : (_sourceTilesetJson$ro2 = _sourceTilesetJson$ro.boundingVolume) === null || _sourceTilesetJson$ro2 === void 0 ? void 0 : _sourceTilesetJson$ro2.region);
153
+ await this._finishConversion({
154
+ slpk: Boolean(slpk),
155
+ outputPath,
156
+ tilesetName
157
+ });
158
+ return sourceTilesetJson;
159
+ } catch (error) {
160
+ throw error;
161
+ } finally {
162
+ const workerFarm = WorkerFarm.getWorkerFarm({});
163
+ workerFarm.destroy();
164
+ }
165
+ }
166
+ async _createAndSaveTileset(outputPath, tilesetName, boundingVolumeRegion) {
167
+ const tilesetPath = join("".concat(outputPath), "".concat(tilesetName));
168
+ try {
169
+ await removeDir(tilesetPath);
170
+ } catch (e) {}
171
+ this.layers0Path = join(tilesetPath, 'SceneServer', 'layers', '0');
172
+ this._formLayers0(tilesetName, boundingVolumeRegion);
173
+ this.materialDefinitions = [];
174
+ this.materialMap = new Map();
175
+ const sourceRootTile = this.sourceTileset.root;
176
+ const boundingVolumes = createBoundingVolumes(sourceRootTile, this.geoidHeightModel);
177
+ await this.nodePages.push({
178
+ index: 0,
179
+ lodThreshold: 0,
180
+ obb: boundingVolumes.obb,
181
+ children: []
182
+ });
183
+ const rootNode = await NodeIndexDocument.createRootNode(boundingVolumes, this);
184
+ await this._convertNodesTree(rootNode, sourceRootTile);
185
+ this.layers0.materialDefinitions = this.materialDefinitions;
186
+ this.layers0.geometryDefinitions = transform(this.geometryConfigs.map(config => ({
187
+ geometryConfig: {
188
+ ...config,
189
+ draco: this.options.draco
190
+ }
191
+ })), geometryDefinitionTemlate());
192
+ if (this.layersHasTexture === false) {
193
+ this.layers0.store.defaultGeometrySchema.ordering = this.layers0.store.defaultGeometrySchema.ordering.filter(attribute => attribute !== 'uv0');
194
+ }
195
+ await this._writeLayers0();
196
+ createSceneServerPath(tilesetName, this.layers0, tilesetPath);
197
+ for (const filePath of this.compressList || []) {
198
+ await compressFileWithGzip(filePath);
199
+ await removeFile(filePath);
200
+ }
201
+ await this.nodePages.save();
202
+ await this.writeQueue.finalize();
203
+ await this._createSlpk(tilesetPath);
204
+ }
205
+ _formLayers0(tilesetName, boundingVolumeRegion) {
206
+ var _this$sourceTileset, _this$sourceTileset2, _this$sourceTileset2$;
207
+ const fullExtent = convertBoundingVolumeToI3SFullExtent(((_this$sourceTileset = this.sourceTileset) === null || _this$sourceTileset === void 0 ? void 0 : _this$sourceTileset.boundingVolume) || ((_this$sourceTileset2 = this.sourceTileset) === null || _this$sourceTileset2 === void 0 ? void 0 : (_this$sourceTileset2$ = _this$sourceTileset2.root) === null || _this$sourceTileset2$ === void 0 ? void 0 : _this$sourceTileset2$.boundingVolume));
208
+ if (boundingVolumeRegion) {
209
+ fullExtent.zmin = boundingVolumeRegion[4];
210
+ fullExtent.zmax = boundingVolumeRegion[5];
211
+ }
212
+ const extent = [fullExtent.xmin, fullExtent.ymin, fullExtent.xmax, fullExtent.ymax];
213
+ const layers0data = {
214
+ version: "{".concat(uuidv4().toUpperCase(), "}"),
215
+ id: 0,
216
+ name: tilesetName,
217
+ href: './layers/0',
218
+ store: {
219
+ id: "{".concat(uuidv4().toUpperCase(), "}"),
220
+ extent
221
+ },
222
+ nodePages: {
223
+ nodesPerPage: HARDCODED_NODES_PER_PAGE
224
+ },
225
+ compressGeometry: this.options.draco,
226
+ fullExtent
227
+ };
228
+ this.layers0 = transform(layers0data, layersTemplate());
229
+ }
230
+ async _convertNodesTree(rootNode, sourceRootTile) {
231
+ await this.sourceTileset._loadTile(sourceRootTile);
232
+ if (this.isContentSupported(sourceRootTile)) {
233
+ const childNodes = await this._createNode(rootNode, sourceRootTile, 0);
234
+ for (const childNode of childNodes) {
235
+ await childNode.save();
236
+ }
237
+ await rootNode.addChildren(childNodes);
238
+ } else {
239
+ await this._addChildrenWithNeighborsAndWriteFile({
240
+ parentNode: rootNode,
241
+ sourceTiles: sourceRootTile.children,
242
+ level: 1
243
+ });
244
+ }
245
+ await sourceRootTile.unloadContent();
246
+ await rootNode.save();
247
+ }
248
+ async _writeLayers0() {
249
+ if (this.options.slpk) {
250
+ await this.writeQueue.enqueue({
251
+ archiveKey: '3dSceneLayer.json.gz',
252
+ writePromise: () => writeFileForSlpk(this.layers0Path, JSON.stringify(this.layers0), '3dSceneLayer.json')
253
+ });
254
+ } else {
255
+ await this.writeQueue.enqueue({
256
+ writePromise: () => writeFile(this.layers0Path, JSON.stringify(this.layers0))
257
+ });
258
+ }
259
+ }
260
+ async _createSlpk(tilesetPath) {
261
+ if (this.options.slpk) {
262
+ const slpkTilesetPath = join(tilesetPath, 'SceneServer', 'layers', '0');
263
+ const slpkFileName = "".concat(tilesetPath, ".slpk");
264
+ await compressWithChildProcess(slpkTilesetPath, slpkFileName, 0, '.', this.options.sevenZipExe);
265
+ try {
266
+ await removeDir(tilesetPath);
267
+ } catch (e) {}
268
+ }
269
+ }
270
+ async _addChildrenWithNeighborsAndWriteFile(data) {
271
+ await this._addChildren(data);
272
+ await data.parentNode.addNeighbors();
273
+ }
274
+ async convertNestedTileset(_ref) {
275
+ let {
276
+ parentNode,
277
+ sourceTile,
278
+ level
279
+ } = _ref;
280
+ await this.sourceTileset._loadTile(sourceTile);
281
+ await this._addChildren({
282
+ parentNode,
283
+ sourceTiles: sourceTile.children,
284
+ level: level + 1
285
+ });
286
+ await sourceTile.unloadContent();
287
+ }
288
+ async convertNode(_ref2) {
289
+ let {
290
+ parentNode,
291
+ sourceTile,
292
+ level
293
+ } = _ref2;
294
+ const childNodes = await this._createNode(parentNode, sourceTile, level);
295
+ await parentNode.addChildren(childNodes);
296
+ }
297
+ async _addChildren(data) {
298
+ const {
299
+ sourceTiles,
300
+ parentNode,
301
+ level
302
+ } = data;
303
+ if (this.options.maxDepth && level > this.options.maxDepth) {
304
+ return;
305
+ }
306
+ for (const sourceTile of sourceTiles) {
307
+ if (sourceTile.type === 'json') {
308
+ await this.convertNestedTileset({
309
+ parentNode,
310
+ sourceTile,
311
+ level
312
+ });
313
+ } else {
314
+ await this.convertNode({
315
+ parentNode,
316
+ sourceTile,
317
+ level
318
+ });
319
+ }
320
+ if (sourceTile.id) {
321
+ console.log(sourceTile.id);
322
+ }
323
+ }
324
+ }
325
+ async _createNode(parentNode, sourceTile, level) {
326
+ var _this$layers, _this$layers$attribut;
327
+ this._checkAddRefinementTypeForTile(sourceTile);
328
+ await this._updateTilesetOptions();
329
+ await this.sourceTileset._loadTile(sourceTile);
330
+ let boundingVolumes = createBoundingVolumes(sourceTile, this.geoidHeightModel);
331
+ const propertyTable = getPropertyTable(sourceTile.content);
332
+ if (propertyTable && !((_this$layers = this.layers0) !== null && _this$layers !== void 0 && (_this$layers$attribut = _this$layers.attributeStorageInfo) !== null && _this$layers$attribut !== void 0 && _this$layers$attribut.length)) {
333
+ this._convertPropertyTableToNodeAttributes(propertyTable);
334
+ }
335
+ const resourcesData = await this._convertResources(sourceTile, parentNode.inPageId, propertyTable);
336
+ const nodes = [];
337
+ const nodeIds = [];
338
+ const nodesInPage = [];
339
+ const emptyResources = {
340
+ geometry: null,
341
+ compressedGeometry: null,
342
+ texture: null,
343
+ hasUvRegions: false,
344
+ sharedResources: null,
345
+ meshMaterial: null,
346
+ vertexCount: null,
347
+ attributes: null,
348
+ featureCount: null,
349
+ boundingVolumes: null
350
+ };
351
+ for (const resources of resourcesData || [emptyResources]) {
352
+ this.layersHasTexture = this.layersHasTexture || Boolean(resources.texture);
353
+ if (this.generateBoundingVolumes && resources.boundingVolumes) {
354
+ boundingVolumes = resources.boundingVolumes;
355
+ }
356
+ const lodSelection = convertGeometricErrorToScreenThreshold(sourceTile, boundingVolumes);
357
+ const maxScreenThresholdSQ = lodSelection.find(val => val.metricType === 'maxScreenThresholdSQ') || {
358
+ maxError: 0
359
+ };
360
+ const nodeInPage = await this._updateNodeInNodePages(maxScreenThresholdSQ, boundingVolumes, sourceTile, parentNode.inPageId, resources);
361
+ const nodeData = await NodeIndexDocument.createNodeIndexDocument(parentNode, boundingVolumes, lodSelection, nodeInPage, resources);
362
+ const node = await new NodeIndexDocument(nodeInPage.index, this).addData(nodeData);
363
+ nodes.push(node);
364
+ if (nodeInPage.mesh) {
365
+ await this._writeResources(resources, node.id);
366
+ }
367
+ if (this.validate) {
368
+ this.boundingVolumeWarnings = validateNodeBoundingVolumes(nodeData);
369
+ if (this.boundingVolumeWarnings && this.boundingVolumeWarnings.length) {
370
+ console.warn('Bounding Volume Warnings: ', ...this.boundingVolumeWarnings);
371
+ }
372
+ }
373
+ nodeIds.push(nodeInPage.index);
374
+ nodesInPage.push(nodeInPage);
375
+ }
376
+ sourceTile.unloadContent();
377
+ await this._addChildrenWithNeighborsAndWriteFile({
378
+ parentNode: nodes[0],
379
+ sourceTiles: sourceTile.children,
380
+ level: level + 1
381
+ });
382
+ return nodes;
383
+ }
384
+ async _convertResources(sourceTile, parentId, propertyTable) {
385
+ var _this$layers2;
386
+ if (!this.isContentSupported(sourceTile)) {
387
+ return null;
388
+ }
389
+ const draftObb = {
390
+ center: [],
391
+ halfSize: [],
392
+ quaternion: []
393
+ };
394
+ const resourcesData = await convertB3dmToI3sGeometry(sourceTile.content, async () => (await this.nodePages.push({
395
+ index: 0,
396
+ obb: draftObb
397
+ }, parentId)).index, propertyTable, this.featuresHashArray, (_this$layers2 = this.layers0) === null || _this$layers2 === void 0 ? void 0 : _this$layers2.attributeStorageInfo, this.options.draco, this.generateBoundingVolumes, this.options.mergeMaterials, this.geoidHeightModel, this.workerSource);
398
+ return resourcesData;
399
+ }
400
+ async _updateNodeInNodePages(maxScreenThresholdSQ, boundingVolumes, sourceTile, parentId, resources) {
401
+ const {
402
+ meshMaterial,
403
+ texture,
404
+ vertexCount,
405
+ featureCount,
406
+ geometry,
407
+ hasUvRegions
408
+ } = resources;
409
+ const nodeInPage = {
410
+ index: 0,
411
+ lodThreshold: maxScreenThresholdSQ.maxError,
412
+ obb: boundingVolumes.obb,
413
+ children: []
414
+ };
415
+ if (geometry && this.isContentSupported(sourceTile)) {
416
+ nodeInPage.mesh = {
417
+ geometry: {
418
+ definition: this.findOrCreateGeometryDefinition(Boolean(texture), hasUvRegions),
419
+ resource: 0
420
+ },
421
+ attribute: {
422
+ resource: 0
423
+ },
424
+ material: {
425
+ definition: 0
426
+ }
427
+ };
428
+ }
429
+ let nodeId = resources.nodeId;
430
+ let node;
431
+ if (!nodeId) {
432
+ node = await this.nodePages.push(nodeInPage, parentId);
433
+ } else {
434
+ node = await this.nodePages.getNodeById(nodeId);
435
+ }
436
+ NodePages.updateAll(node, nodeInPage);
437
+ if (meshMaterial) {
438
+ NodePages.updateMaterialByNodeId(node, this._findOrCreateMaterial(meshMaterial));
439
+ }
440
+ if (texture) {
441
+ const texelCountHint = texture.image.height * texture.image.width;
442
+ NodePages.updateTexelCountHintByNodeId(node, texelCountHint);
443
+ }
444
+ if (vertexCount) {
445
+ this.vertexCounter += vertexCount;
446
+ NodePages.updateVertexCountByNodeId(node, vertexCount);
447
+ }
448
+ NodePages.updateNodeAttributeByNodeId(node);
449
+ if (featureCount) {
450
+ NodePages.updateFeatureCountByNodeId(node, featureCount);
451
+ }
452
+ this.nodePages.saveNode(node);
453
+ return node;
454
+ }
455
+ async _writeResources(resources, nodePath) {
456
+ const {
457
+ geometry: geometryBuffer,
458
+ compressedGeometry,
459
+ texture,
460
+ sharedResources,
461
+ attributes
462
+ } = resources;
463
+ const childPath = join(this.layers0Path, 'nodes', nodePath);
464
+ const slpkChildPath = join('nodes', nodePath);
465
+ await this._writeGeometries(geometryBuffer, compressedGeometry, childPath, slpkChildPath);
466
+ await this._writeShared(sharedResources, childPath, slpkChildPath, nodePath);
467
+ await this._writeTexture(texture, childPath, slpkChildPath);
468
+ await this._writeAttributes(attributes, childPath, slpkChildPath);
469
+ }
470
+ async _writeGeometries(geometryBuffer, compressedGeometry, childPath, slpkChildPath) {
471
+ if (this.options.slpk) {
472
+ const slpkGeometryPath = join(childPath, 'geometries');
473
+ await this.writeQueue.enqueue({
474
+ archiveKey: "".concat(slpkChildPath, "/geometries/0.bin.gz"),
475
+ writePromise: () => writeFileForSlpk(slpkGeometryPath, geometryBuffer, '0.bin')
476
+ });
477
+ } else {
478
+ const geometryPath = join(childPath, 'geometries/0/');
479
+ await this.writeQueue.enqueue({
480
+ writePromise: () => writeFile(geometryPath, geometryBuffer, 'index.bin')
481
+ });
482
+ }
483
+ if (this.options.draco) {
484
+ if (this.options.slpk) {
485
+ const slpkCompressedGeometryPath = join(childPath, 'geometries');
486
+ await this.writeQueue.enqueue({
487
+ archiveKey: "".concat(slpkChildPath, "/geometries/1.bin.gz"),
488
+ writePromise: () => writeFileForSlpk(slpkCompressedGeometryPath, compressedGeometry, '1.bin')
489
+ });
490
+ } else {
491
+ const compressedGeometryPath = join(childPath, 'geometries/1/');
492
+ await this.writeQueue.enqueue({
493
+ writePromise: () => writeFile(compressedGeometryPath, compressedGeometry, 'index.bin')
494
+ });
495
+ }
496
+ }
497
+ }
498
+ async _writeShared(sharedResources, childPath, slpkChildPath, nodePath) {
499
+ if (!sharedResources) {
500
+ return;
501
+ }
502
+ sharedResources.nodePath = nodePath;
503
+ const sharedData = transform(sharedResources, sharedResourcesTemplate());
504
+ const sharedDataStr = JSON.stringify(sharedData);
505
+ if (this.options.slpk) {
506
+ const slpkSharedPath = join(childPath, 'shared');
507
+ await this.writeQueue.enqueue({
508
+ archiveKey: "".concat(slpkChildPath, "/shared/sharedResource.json.gz"),
509
+ writePromise: () => writeFileForSlpk(slpkSharedPath, sharedDataStr, 'sharedResource.json')
510
+ });
511
+ } else {
512
+ const sharedPath = join(childPath, 'shared/');
513
+ await this.writeQueue.enqueue({
514
+ writePromise: () => writeFile(sharedPath, sharedDataStr)
515
+ });
516
+ }
517
+ }
518
+ async _writeTexture(texture, childPath, slpkChildPath) {
519
+ if (texture) {
520
+ const format = this._getFormatByMimeType(texture === null || texture === void 0 ? void 0 : texture.mimeType);
521
+ const formats = [];
522
+ const textureData = texture.bufferView.data;
523
+ switch (format) {
524
+ case 'jpg':
525
+ case 'png':
526
+ {
527
+ formats.push({
528
+ name: '0',
529
+ format
530
+ });
531
+ await this.writeTextureFile(textureData, '0', format, childPath, slpkChildPath);
532
+ if (this.generateTextures) {
533
+ formats.push({
534
+ name: '1',
535
+ format: 'ktx2'
536
+ });
537
+ const copyArrayBuffer = texture.image.data.subarray();
538
+ const arrayToEncode = new Uint8Array(copyArrayBuffer);
539
+ const ktx2TextureData = encode({
540
+ ...texture.image,
541
+ data: arrayToEncode
542
+ }, KTX2BasisWriterWorker, {
543
+ ...KTX2BasisWriterWorker.options,
544
+ source: this.workerSource.ktx2,
545
+ reuseWorkers: true,
546
+ _nodeWorkers: true
547
+ });
548
+ await this.writeTextureFile(ktx2TextureData, '1', 'ktx2', childPath, slpkChildPath);
549
+ }
550
+ break;
551
+ }
552
+ case 'ktx2':
553
+ {
554
+ formats.push({
555
+ name: '1',
556
+ format
557
+ });
558
+ await this.writeTextureFile(textureData, '1', format, childPath, slpkChildPath);
559
+ if (this.generateTextures) {
560
+ formats.push({
561
+ name: '0',
562
+ format: 'jpg'
563
+ });
564
+ const decodedFromKTX2TextureData = encode(texture.image.data[0], ImageWriter);
565
+ await this.writeTextureFile(decodedFromKTX2TextureData, '0', 'jpg', childPath, slpkChildPath);
566
+ }
567
+ }
568
+ }
569
+ if (!this.layers0.textureSetDefinitions.length) {
570
+ this.layers0.textureSetDefinitions.push({
571
+ formats
572
+ });
573
+ this.layers0.textureSetDefinitions.push({
574
+ formats,
575
+ atlas: true
576
+ });
577
+ }
578
+ }
579
+ }
580
+ async writeTextureFile(textureData, name, format, childPath, slpkChildPath) {
581
+ if (this.options.slpk) {
582
+ const slpkTexturePath = join(childPath, 'textures');
583
+ const compress = false;
584
+ await this.writeQueue.enqueue({
585
+ archiveKey: "".concat(slpkChildPath, "/textures/").concat(name, ".").concat(format),
586
+ writePromise: () => writeFileForSlpk(slpkTexturePath, textureData, "".concat(name, ".").concat(format), compress)
587
+ });
588
+ } else {
589
+ const texturePath = join(childPath, "textures/".concat(name, "/"));
590
+ await this.writeQueue.enqueue({
591
+ writePromise: () => writeFile(texturePath, textureData, "index.".concat(format))
592
+ });
593
+ }
594
+ }
595
+ async _writeAttributes() {
596
+ var _this$layers3, _this$layers3$attribu;
597
+ let attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
598
+ let childPath = arguments.length > 1 ? arguments[1] : undefined;
599
+ let slpkChildPath = arguments.length > 2 ? arguments[2] : undefined;
600
+ if (attributes !== null && attributes !== void 0 && attributes.length && (_this$layers3 = this.layers0) !== null && _this$layers3 !== void 0 && (_this$layers3$attribu = _this$layers3.attributeStorageInfo) !== null && _this$layers3$attribu !== void 0 && _this$layers3$attribu.length) {
601
+ for (let index = 0; index < attributes.length; index++) {
602
+ const folderName = this.layers0.attributeStorageInfo[index].key;
603
+ const fileBuffer = new Uint8Array(attributes[index]);
604
+ if (this.options.slpk) {
605
+ const slpkAttributesPath = join(childPath, 'attributes', folderName);
606
+ await this.writeQueue.enqueue({
607
+ archiveKey: "".concat(slpkChildPath, "/attributes/").concat(folderName, ".bin.gz"),
608
+ writePromise: () => writeFileForSlpk(slpkAttributesPath, fileBuffer, '0.bin')
609
+ });
610
+ } else {
611
+ const attributesPath = join(childPath, "attributes/".concat(folderName, "/0"));
612
+ await this.writeQueue.enqueue({
613
+ writePromise: () => writeFile(attributesPath, fileBuffer, 'index.bin')
614
+ });
615
+ }
616
+ }
617
+ }
618
+ }
619
+ _getFormatByMimeType(mimeType) {
620
+ switch (mimeType) {
621
+ case 'image/jpeg':
622
+ return 'jpg';
623
+ case 'image/png':
624
+ return 'png';
625
+ case 'image/ktx2':
626
+ return 'ktx2';
627
+ default:
628
+ return 'jpg';
629
+ }
630
+ }
631
+ _findOrCreateMaterial(material) {
632
+ const hash = md5(JSON.stringify(material));
633
+ if (this.materialMap.has(hash)) {
634
+ return this.materialMap.get(hash) || 0;
635
+ }
636
+ const newMaterialId = this.materialDefinitions.push(material) - 1;
637
+ this.materialMap.set(hash, newMaterialId);
638
+ return newMaterialId;
639
+ }
640
+ findOrCreateGeometryDefinition(hasTexture, hasUvRegions) {
641
+ const geometryConfig = {
642
+ hasTexture,
643
+ hasUvRegions
644
+ };
645
+ const hash = md5(JSON.stringify(geometryConfig));
646
+ if (this.geometryMap.has(hash)) {
647
+ return this.geometryMap.get(hash) || 0;
648
+ }
649
+ const newGeometryId = this.geometryConfigs.push(geometryConfig) - 1;
650
+ this.geometryMap.set(hash, newGeometryId);
651
+ return newGeometryId;
652
+ }
653
+ _convertPropertyTableToNodeAttributes(propertyTable) {
654
+ let attributeIndex = 0;
655
+ const propertyTableWithObjectId = {
656
+ OBJECTID: [0],
657
+ ...propertyTable
658
+ };
659
+ for (const key in propertyTableWithObjectId) {
660
+ const firstAttribute = propertyTableWithObjectId[key][0];
661
+ const attributeType = getAttributeType(key, firstAttribute);
662
+ const storageAttribute = createdStorageAttribute(attributeIndex, key, attributeType);
663
+ const fieldAttributeType = getFieldAttributeType(attributeType);
664
+ const fieldAttribute = createFieldAttribute(key, fieldAttributeType);
665
+ const popupInfo = createPopupInfo(propertyTableWithObjectId);
666
+ this.layers0.attributeStorageInfo.push(storageAttribute);
667
+ this.layers0.fields.push(fieldAttribute);
668
+ this.layers0.popupInfo = popupInfo;
669
+ this.layers0.layerType = _3D_OBJECT_LAYER_TYPE;
670
+ attributeIndex += 1;
671
+ }
672
+ }
673
+ async _finishConversion(params) {
674
+ const {
675
+ tilesCount,
676
+ tilesWithAddRefineCount
677
+ } = this.refinementCounter;
678
+ const addRefinementPercentage = tilesWithAddRefineCount ? tilesWithAddRefineCount / tilesCount * 100 : 0;
679
+ const filesSize = await calculateFilesSize(params);
680
+ const diff = process.hrtime(this.conversionStartTime);
681
+ const conversionTime = timeConverter(diff);
682
+ console.log("------------------------------------------------");
683
+ console.log("Finishing conversion of ".concat(_3D_TILES));
684
+ console.log("Total conversion time: ".concat(conversionTime));
685
+ console.log("Vertex count: ", this.vertexCounter);
686
+ console.log("File(s) size: ", filesSize, ' bytes');
687
+ console.log("Percentage of tiles with \"ADD\" refinement type:", addRefinementPercentage, '%');
688
+ console.log("------------------------------------------------");
689
+ }
690
+ async _fetchPreloadOptions() {
691
+ if (!this.Loader.preload) {
692
+ return {};
693
+ }
694
+ const options = {
695
+ 'cesium-ion': {
696
+ accessToken: this.options.token || ION_DEFAULT_TOKEN
697
+ }
698
+ };
699
+ const preloadOptions = await this.Loader.preload(this.options.inputUrl, options);
700
+ this.refreshTokenTime = process.hrtime();
701
+ return {
702
+ ...options,
703
+ ...preloadOptions
704
+ };
705
+ }
706
+ async _updateTilesetOptions() {
707
+ const diff = process.hrtime(this.refreshTokenTime);
708
+ if (diff[0] < REFRESH_TOKEN_TIMEOUT) {
709
+ return;
710
+ }
711
+ this.refreshTokenTime = process.hrtime();
712
+ const preloadOptions = await this._fetchPreloadOptions();
713
+ this.sourceTileset.options = {
714
+ ...this.sourceTileset.options,
715
+ ...preloadOptions
716
+ };
717
+ if (preloadOptions.headers) {
718
+ this.sourceTileset.loadOptions.fetch = {
719
+ ...this.sourceTileset.loadOptions.fetch,
720
+ headers: preloadOptions.headers
721
+ };
722
+ console.log('Authorization Bearer token has been updated');
723
+ }
724
+ }
725
+ _checkAddRefinementTypeForTile(tile) {
726
+ const ADD_TILE_REFINEMENT = 1;
727
+ if (tile.refine === ADD_TILE_REFINEMENT) {
728
+ this.refinementCounter.tilesWithAddRefineCount += 1;
729
+ console.warn('This tile uses "ADD" type of refinement');
730
+ }
731
+ this.refinementCounter.tilesCount += 1;
732
+ }
733
+ isContentSupported(sourceRootTile) {
734
+ var _sourceRootTile$conte;
735
+ return ['b3dm', 'glTF'].includes(sourceRootTile === null || sourceRootTile === void 0 ? void 0 : (_sourceRootTile$conte = sourceRootTile.content) === null || _sourceRootTile$conte === void 0 ? void 0 : _sourceRootTile$conte.type);
736
+ }
737
+ async loadWorkers() {
738
+ console.log("Loading workers source...");
739
+ if (this.options.draco) {
740
+ const url = getWorkerURL(DracoWriterWorker, {
741
+ ...getLoaderOptions()
742
+ });
743
+ const sourceResponse = await fetchFile(url);
744
+ const source = await sourceResponse.text();
745
+ this.workerSource.draco = source;
746
+ }
747
+ if (this.generateTextures) {
748
+ const url = getWorkerURL(KTX2BasisWriterWorker, {
749
+ ...getLoaderOptions()
750
+ });
751
+ const sourceResponse = await fetchFile(url);
752
+ const source = await sourceResponse.text();
753
+ this.workerSource.ktx2 = source;
754
+ }
755
+ const i3sAttributesWorkerUrl = getWorkerURL(I3SAttributesWorker, {
756
+ ...getLoaderOptions()
757
+ });
758
+ const sourceResponse = await fetchFile(i3sAttributesWorkerUrl);
759
+ const source = await sourceResponse.text();
760
+ this.workerSource.I3SAttributes = source;
761
+ console.log("Loading workers source completed!");
762
+ }
763
+ }
764
+ //# sourceMappingURL=i3s-converter.js.map