@loaders.gl/tile-converter 4.0.0-alpha.4 → 4.0.0-alpha.6

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