@loaders.gl/tile-converter 3.2.12 → 3.3.0-alpha.10

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 (251) hide show
  1. package/dist/3d-tiles-attributes-worker.d.ts +3 -3
  2. package/dist/3d-tiles-attributes-worker.d.ts.map +1 -1
  3. package/dist/3d-tiles-attributes-worker.js +2 -3
  4. package/dist/3d-tiles-attributes-worker.js.map +3 -3
  5. package/dist/3d-tiles-converter/3d-tiles-converter.d.ts +8 -0
  6. package/dist/3d-tiles-converter/3d-tiles-converter.d.ts.map +1 -1
  7. package/dist/3d-tiles-converter/3d-tiles-converter.js +57 -43
  8. package/dist/3d-tiles-converter/helpers/b3dm-converter.d.ts +5 -5
  9. package/dist/3d-tiles-converter/helpers/b3dm-converter.d.ts.map +1 -1
  10. package/dist/3d-tiles-converter/helpers/b3dm-converter.js +21 -17
  11. package/dist/converter-cli.js +43 -8
  12. package/dist/converter.min.js +24 -21
  13. package/dist/deps-installer/deps-installer.d.ts +5 -1
  14. package/dist/deps-installer/deps-installer.d.ts.map +1 -1
  15. package/dist/deps-installer/deps-installer.js +29 -1
  16. package/dist/dist.min.js +58405 -61237
  17. package/dist/es5/3d-tiles-attributes-worker.js +4 -7
  18. package/dist/es5/3d-tiles-attributes-worker.js.map +1 -1
  19. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js +125 -210
  20. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
  21. package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js +53 -85
  22. package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -1
  23. package/dist/es5/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js +0 -8
  24. package/dist/es5/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +1 -1
  25. package/dist/es5/3d-tiles-converter/helpers/texture-atlas.js +0 -5
  26. package/dist/es5/3d-tiles-converter/helpers/texture-atlas.js.map +1 -1
  27. package/dist/es5/3d-tiles-converter/json-templates/tileset.js +0 -6
  28. package/dist/es5/3d-tiles-converter/json-templates/tileset.js.map +1 -1
  29. package/dist/es5/bundle.js +0 -1
  30. package/dist/es5/bundle.js.map +1 -1
  31. package/dist/es5/constants.js.map +1 -1
  32. package/dist/es5/converter-cli.js +50 -60
  33. package/dist/es5/converter-cli.js.map +1 -1
  34. package/dist/es5/deps-installer/deps-installer.js +73 -28
  35. package/dist/es5/deps-installer/deps-installer.js.map +1 -1
  36. package/dist/es5/i3s-attributes-worker.js +3 -6
  37. package/dist/es5/i3s-attributes-worker.js.map +1 -1
  38. package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js +124 -0
  39. package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js.map +1 -0
  40. package/dist/es5/i3s-converter/helpers/coordinate-converter.js +2 -19
  41. package/dist/es5/i3s-converter/helpers/coordinate-converter.js.map +1 -1
  42. package/dist/es5/i3s-converter/helpers/create-scene-server-path.js +0 -11
  43. package/dist/es5/i3s-converter/helpers/create-scene-server-path.js.map +1 -1
  44. package/dist/es5/i3s-converter/helpers/feature-attributes.js +184 -0
  45. package/dist/es5/i3s-converter/helpers/feature-attributes.js.map +1 -0
  46. package/dist/es5/i3s-converter/helpers/geometry-attributes.js +60 -51
  47. package/dist/es5/i3s-converter/helpers/geometry-attributes.js.map +1 -1
  48. package/dist/es5/i3s-converter/helpers/geometry-converter.js +516 -356
  49. package/dist/es5/i3s-converter/helpers/geometry-converter.js.map +1 -1
  50. package/dist/es5/i3s-converter/helpers/gltf-attributes.js +57 -43
  51. package/dist/es5/i3s-converter/helpers/gltf-attributes.js.map +1 -1
  52. package/dist/es5/i3s-converter/helpers/node-debug.js +4 -23
  53. package/dist/es5/i3s-converter/helpers/node-debug.js.map +1 -1
  54. package/dist/es5/i3s-converter/helpers/node-index-document.js +507 -0
  55. package/dist/es5/i3s-converter/helpers/node-index-document.js.map +1 -0
  56. package/dist/es5/i3s-converter/helpers/node-pages.js +462 -208
  57. package/dist/es5/i3s-converter/helpers/node-pages.js.map +1 -1
  58. package/dist/es5/i3s-converter/i3s-converter.js +722 -1153
  59. package/dist/es5/i3s-converter/i3s-converter.js.map +1 -1
  60. package/dist/es5/i3s-converter/json-templates/geometry-definitions.js +107 -0
  61. package/dist/es5/i3s-converter/json-templates/geometry-definitions.js.map +1 -0
  62. package/dist/es5/i3s-converter/json-templates/layers.js +2 -107
  63. package/dist/es5/i3s-converter/json-templates/layers.js.map +1 -1
  64. package/dist/es5/i3s-converter/json-templates/metadata.js +0 -2
  65. package/dist/es5/i3s-converter/json-templates/metadata.js.map +1 -1
  66. package/dist/es5/i3s-converter/json-templates/node.js +2 -12
  67. package/dist/es5/i3s-converter/json-templates/node.js.map +1 -1
  68. package/dist/es5/i3s-converter/json-templates/scene-server.js +0 -2
  69. package/dist/es5/i3s-converter/json-templates/scene-server.js.map +1 -1
  70. package/dist/es5/i3s-converter/json-templates/shared-resources.js +9 -32
  71. package/dist/es5/i3s-converter/json-templates/shared-resources.js.map +1 -1
  72. package/dist/es5/i3s-converter/json-templates/store.js.map +1 -1
  73. package/dist/es5/i3s-converter/types.js.map +1 -1
  74. package/dist/es5/i3s-server/app.js +0 -5
  75. package/dist/es5/i3s-server/app.js.map +1 -1
  76. package/dist/es5/i3s-server/controllers/index-controller.js +0 -16
  77. package/dist/es5/i3s-server/controllers/index-controller.js.map +1 -1
  78. package/dist/es5/i3s-server/routes/index.js +1 -10
  79. package/dist/es5/i3s-server/routes/index.js.map +1 -1
  80. package/dist/es5/index.js +0 -3
  81. package/dist/es5/index.js.map +1 -1
  82. package/dist/es5/lib/utils/compress-util.js +19 -74
  83. package/dist/es5/lib/utils/compress-util.js.map +1 -1
  84. package/dist/es5/lib/utils/file-utils.js +103 -47
  85. package/dist/es5/lib/utils/file-utils.js.map +1 -1
  86. package/dist/es5/lib/utils/lod-conversion-utils.js +0 -7
  87. package/dist/es5/lib/utils/lod-conversion-utils.js.map +1 -1
  88. package/dist/es5/lib/utils/queue.js +0 -14
  89. package/dist/es5/lib/utils/queue.js.map +1 -1
  90. package/dist/es5/lib/utils/statistic-utills.js +1 -46
  91. package/dist/es5/lib/utils/statistic-utills.js.map +1 -1
  92. package/dist/es5/lib/utils/write-queue.js +41 -82
  93. package/dist/es5/lib/utils/write-queue.js.map +1 -1
  94. package/dist/es5/pgm-loader.js +1 -8
  95. package/dist/es5/pgm-loader.js.map +1 -1
  96. package/dist/es5/workers/3d-tiles-attributes-worker.js +2 -9
  97. package/dist/es5/workers/3d-tiles-attributes-worker.js.map +1 -1
  98. package/dist/es5/workers/i3s-attributes-worker.js +2 -10
  99. package/dist/es5/workers/i3s-attributes-worker.js.map +1 -1
  100. package/dist/esm/3d-tiles-attributes-worker.js +4 -2
  101. package/dist/esm/3d-tiles-attributes-worker.js.map +1 -1
  102. package/dist/esm/3d-tiles-converter/3d-tiles-converter.js +60 -77
  103. package/dist/esm/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
  104. package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js +29 -50
  105. package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -1
  106. package/dist/esm/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js +1 -0
  107. package/dist/esm/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +1 -1
  108. package/dist/esm/3d-tiles-converter/helpers/texture-atlas.js +1 -4
  109. package/dist/esm/3d-tiles-converter/helpers/texture-atlas.js.map +1 -1
  110. package/dist/esm/3d-tiles-converter/json-templates/tileset.js +0 -3
  111. package/dist/esm/3d-tiles-converter/json-templates/tileset.js.map +1 -1
  112. package/dist/esm/bundle.js +1 -1
  113. package/dist/esm/bundle.js.map +1 -1
  114. package/dist/esm/constants.js.map +1 -1
  115. package/dist/esm/converter-cli.js +46 -40
  116. package/dist/esm/converter-cli.js.map +1 -1
  117. package/dist/esm/deps-installer/deps-installer.js +30 -4
  118. package/dist/esm/deps-installer/deps-installer.js.map +1 -1
  119. package/dist/esm/i3s-attributes-worker.js +3 -1
  120. package/dist/esm/i3s-attributes-worker.js.map +1 -1
  121. package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js +113 -0
  122. package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js.map +1 -0
  123. package/dist/esm/i3s-converter/helpers/coordinate-converter.js +5 -6
  124. package/dist/esm/i3s-converter/helpers/coordinate-converter.js.map +1 -1
  125. package/dist/esm/i3s-converter/helpers/create-scene-server-path.js +1 -0
  126. package/dist/esm/i3s-converter/helpers/create-scene-server-path.js.map +1 -1
  127. package/dist/esm/i3s-converter/helpers/feature-attributes.js +158 -0
  128. package/dist/esm/i3s-converter/helpers/feature-attributes.js.map +1 -0
  129. package/dist/esm/i3s-converter/helpers/geometry-attributes.js +39 -33
  130. package/dist/esm/i3s-converter/helpers/geometry-attributes.js.map +1 -1
  131. package/dist/esm/i3s-converter/helpers/geometry-converter.js +295 -196
  132. package/dist/esm/i3s-converter/helpers/geometry-converter.js.map +1 -1
  133. package/dist/esm/i3s-converter/helpers/gltf-attributes.js +59 -34
  134. package/dist/esm/i3s-converter/helpers/gltf-attributes.js.map +1 -1
  135. package/dist/esm/i3s-converter/helpers/node-debug.js +3 -13
  136. package/dist/esm/i3s-converter/helpers/node-debug.js.map +1 -1
  137. package/dist/esm/i3s-converter/helpers/node-index-document.js +197 -0
  138. package/dist/esm/i3s-converter/helpers/node-index-document.js.map +1 -0
  139. package/dist/esm/i3s-converter/helpers/node-pages.js +161 -87
  140. package/dist/esm/i3s-converter/helpers/node-pages.js.map +1 -1
  141. package/dist/esm/i3s-converter/i3s-converter.js +216 -491
  142. package/dist/esm/i3s-converter/i3s-converter.js.map +1 -1
  143. package/dist/esm/i3s-converter/json-templates/geometry-definitions.js +89 -0
  144. package/dist/esm/i3s-converter/json-templates/geometry-definitions.js.map +1 -0
  145. package/dist/esm/i3s-converter/json-templates/layers.js +2 -95
  146. package/dist/esm/i3s-converter/json-templates/layers.js.map +1 -1
  147. package/dist/esm/i3s-converter/json-templates/metadata.js.map +1 -1
  148. package/dist/esm/i3s-converter/json-templates/node.js +0 -4
  149. package/dist/esm/i3s-converter/json-templates/node.js.map +1 -1
  150. package/dist/esm/i3s-converter/json-templates/scene-server.js.map +1 -1
  151. package/dist/esm/i3s-converter/json-templates/shared-resources.js +3 -15
  152. package/dist/esm/i3s-converter/json-templates/shared-resources.js.map +1 -1
  153. package/dist/esm/i3s-converter/json-templates/store.js.map +1 -1
  154. package/dist/esm/i3s-converter/types.js.map +1 -1
  155. package/dist/esm/i3s-server/app.js +0 -5
  156. package/dist/esm/i3s-server/app.js.map +1 -1
  157. package/dist/esm/i3s-server/controllers/index-controller.js +0 -5
  158. package/dist/esm/i3s-server/controllers/index-controller.js.map +1 -1
  159. package/dist/esm/i3s-server/routes/index.js +0 -3
  160. package/dist/esm/i3s-server/routes/index.js.map +1 -1
  161. package/dist/esm/index.js.map +1 -1
  162. package/dist/esm/lib/utils/compress-util.js +19 -12
  163. package/dist/esm/lib/utils/compress-util.js.map +1 -1
  164. package/dist/esm/lib/utils/file-utils.js +54 -11
  165. package/dist/esm/lib/utils/file-utils.js.map +1 -1
  166. package/dist/esm/lib/utils/lod-conversion-utils.js +2 -6
  167. package/dist/esm/lib/utils/lod-conversion-utils.js.map +1 -1
  168. package/dist/esm/lib/utils/queue.js +0 -4
  169. package/dist/esm/lib/utils/queue.js.map +1 -1
  170. package/dist/esm/lib/utils/statistic-utills.js +0 -11
  171. package/dist/esm/lib/utils/statistic-utills.js.map +1 -1
  172. package/dist/esm/lib/utils/write-queue.js +27 -38
  173. package/dist/esm/lib/utils/write-queue.js.map +1 -1
  174. package/dist/esm/pgm-loader.js +3 -1
  175. package/dist/esm/pgm-loader.js.map +1 -1
  176. package/dist/esm/workers/3d-tiles-attributes-worker.js +4 -1
  177. package/dist/esm/workers/3d-tiles-attributes-worker.js.map +1 -1
  178. package/dist/esm/workers/i3s-attributes-worker.js +4 -1
  179. package/dist/esm/workers/i3s-attributes-worker.js.map +1 -1
  180. package/dist/i3s-attributes-worker.d.ts +7 -3
  181. package/dist/i3s-attributes-worker.d.ts.map +1 -1
  182. package/dist/i3s-attributes-worker.js +2 -3
  183. package/dist/i3s-attributes-worker.js.map +3 -3
  184. package/dist/i3s-converter/helpers/batch-ids-extensions.d.ts +11 -0
  185. package/dist/i3s-converter/helpers/batch-ids-extensions.d.ts.map +1 -0
  186. package/dist/i3s-converter/helpers/batch-ids-extensions.js +141 -0
  187. package/dist/i3s-converter/helpers/coordinate-converter.d.ts +2 -2
  188. package/dist/i3s-converter/helpers/coordinate-converter.d.ts.map +1 -1
  189. package/dist/i3s-converter/helpers/feature-attributes.d.ts +56 -0
  190. package/dist/i3s-converter/helpers/feature-attributes.d.ts.map +1 -0
  191. package/dist/i3s-converter/helpers/feature-attributes.js +216 -0
  192. package/dist/i3s-converter/helpers/geometry-attributes.d.ts.map +1 -1
  193. package/dist/i3s-converter/helpers/geometry-attributes.js +42 -17
  194. package/dist/i3s-converter/helpers/geometry-converter.d.ts +18 -6
  195. package/dist/i3s-converter/helpers/geometry-converter.d.ts.map +1 -1
  196. package/dist/i3s-converter/helpers/geometry-converter.js +349 -99
  197. package/dist/i3s-converter/helpers/gltf-attributes.d.ts.map +1 -1
  198. package/dist/i3s-converter/helpers/gltf-attributes.js +53 -21
  199. package/dist/i3s-converter/helpers/node-index-document.d.ts +91 -0
  200. package/dist/i3s-converter/helpers/node-index-document.d.ts.map +1 -0
  201. package/dist/i3s-converter/helpers/node-index-document.js +242 -0
  202. package/dist/i3s-converter/helpers/node-pages.d.ts +81 -42
  203. package/dist/i3s-converter/helpers/node-pages.d.ts.map +1 -1
  204. package/dist/i3s-converter/helpers/node-pages.js +200 -92
  205. package/dist/i3s-converter/i3s-converter.d.ts +52 -108
  206. package/dist/i3s-converter/i3s-converter.d.ts.map +1 -1
  207. package/dist/i3s-converter/i3s-converter.js +218 -403
  208. package/dist/i3s-converter/json-templates/geometry-definitions.d.ts +7 -0
  209. package/dist/i3s-converter/json-templates/geometry-definitions.d.ts.map +1 -0
  210. package/dist/i3s-converter/json-templates/geometry-definitions.js +87 -0
  211. package/dist/i3s-converter/json-templates/layers.d.ts +1 -30
  212. package/dist/i3s-converter/json-templates/layers.d.ts.map +1 -1
  213. package/dist/i3s-converter/json-templates/layers.js +2 -86
  214. package/dist/i3s-converter/json-templates/shared-resources.js +3 -3
  215. package/dist/i3s-converter/types.d.ts +38 -8
  216. package/dist/i3s-converter/types.d.ts.map +1 -1
  217. package/dist/lib/utils/file-utils.d.ts +17 -1
  218. package/dist/lib/utils/file-utils.d.ts.map +1 -1
  219. package/dist/lib/utils/file-utils.js +64 -7
  220. package/dist/lib/utils/write-queue.d.ts +19 -3
  221. package/dist/lib/utils/write-queue.d.ts.map +1 -1
  222. package/dist/lib/utils/write-queue.js +21 -16
  223. package/dist/pgm-loader.d.ts.map +1 -1
  224. package/dist/pgm-loader.js +2 -1
  225. package/dist/workers/3d-tiles-attributes-worker.js +1 -1
  226. package/dist/workers/i3s-attributes-worker.js +1 -1
  227. package/package.json +18 -16
  228. package/src/3d-tiles-attributes-worker.ts +1 -1
  229. package/src/3d-tiles-converter/3d-tiles-converter.ts +71 -55
  230. package/src/3d-tiles-converter/helpers/b3dm-converter.ts +25 -18
  231. package/src/converter-cli.ts +54 -8
  232. package/src/deps-installer/deps-installer.ts +38 -2
  233. package/src/i3s-attributes-worker.ts +5 -1
  234. package/src/i3s-converter/helpers/batch-ids-extensions.ts +206 -0
  235. package/src/i3s-converter/helpers/coordinate-converter.ts +2 -2
  236. package/src/i3s-converter/helpers/feature-attributes.ts +247 -0
  237. package/src/i3s-converter/helpers/geometry-attributes.ts +46 -18
  238. package/src/i3s-converter/helpers/geometry-converter.ts +423 -111
  239. package/src/i3s-converter/helpers/gltf-attributes.ts +59 -24
  240. package/src/i3s-converter/helpers/node-index-document.ts +306 -0
  241. package/src/i3s-converter/helpers/node-pages.ts +222 -109
  242. package/src/i3s-converter/i3s-converter.ts +264 -487
  243. package/src/i3s-converter/json-templates/geometry-definitions.ts +83 -0
  244. package/src/i3s-converter/json-templates/layers.ts +2 -91
  245. package/src/i3s-converter/json-templates/shared-resources.ts +3 -3
  246. package/src/i3s-converter/types.ts +33 -2
  247. package/src/lib/utils/file-utils.ts +62 -7
  248. package/src/lib/utils/write-queue.ts +42 -19
  249. package/src/pgm-loader.ts +2 -2
  250. package/src/workers/3d-tiles-attributes-worker.ts +1 -1
  251. package/src/workers/i3s-attributes-worker.ts +2 -1
@@ -2,4 +2,4 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const worker_utils_1 = require("@loaders.gl/worker-utils");
4
4
  const geometry_converter_1 = require("../i3s-converter/helpers/geometry-converter");
5
- (0, worker_utils_1.createWorker)(async (data, options = {}) => await (0, geometry_converter_1.convertAttributes)(data, options.useCartesianPositions));
5
+ (0, worker_utils_1.createWorker)(async (data, options = {}) => await (0, geometry_converter_1.convertAttributes)(data, options.materialAndTextureList, options.useCartesianPositions));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loaders.gl/tile-converter",
3
- "version": "3.2.12",
3
+ "version": "3.3.0-alpha.10",
4
4
  "description": "Converter",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -43,19 +43,19 @@
43
43
  "build-3d-tiles-attributes-worker": "esbuild src/workers/3d-tiles-attributes-worker.ts --outfile=dist/3d-tiles-attributes-worker.js --platform=node --target=esnext,node12 --minify --bundle --sourcemap --define:__VERSION__=\\\"$npm_package_version\\\""
44
44
  },
45
45
  "dependencies": {
46
- "@loaders.gl/3d-tiles": "3.2.12",
47
- "@loaders.gl/crypto": "3.2.12",
48
- "@loaders.gl/draco": "3.2.12",
49
- "@loaders.gl/gltf": "3.2.12",
50
- "@loaders.gl/i3s": "3.2.12",
51
- "@loaders.gl/images": "3.2.12",
52
- "@loaders.gl/loader-utils": "3.2.12",
53
- "@loaders.gl/polyfills": "3.2.12",
54
- "@loaders.gl/schema": "3.2.12",
55
- "@loaders.gl/textures": "3.2.12",
56
- "@loaders.gl/tiles": "3.2.12",
57
- "@loaders.gl/worker-utils": "3.2.12",
58
- "@loaders.gl/zip": "3.2.12",
46
+ "@loaders.gl/3d-tiles": "3.3.0-alpha.10",
47
+ "@loaders.gl/crypto": "3.3.0-alpha.10",
48
+ "@loaders.gl/draco": "3.3.0-alpha.10",
49
+ "@loaders.gl/gltf": "3.3.0-alpha.10",
50
+ "@loaders.gl/i3s": "3.3.0-alpha.10",
51
+ "@loaders.gl/images": "3.3.0-alpha.10",
52
+ "@loaders.gl/loader-utils": "3.3.0-alpha.10",
53
+ "@loaders.gl/polyfills": "3.3.0-alpha.10",
54
+ "@loaders.gl/schema": "3.3.0-alpha.10",
55
+ "@loaders.gl/textures": "3.3.0-alpha.10",
56
+ "@loaders.gl/tiles": "3.3.0-alpha.10",
57
+ "@loaders.gl/worker-utils": "3.3.0-alpha.10",
58
+ "@loaders.gl/zip": "3.3.0-alpha.10",
59
59
  "@luma.gl/engine": "^8.5.4",
60
60
  "@math.gl/core": "^3.5.1",
61
61
  "@math.gl/culling": "^3.5.1",
@@ -65,15 +65,17 @@
65
65
  "cors": "^2.8.5",
66
66
  "crypt": "^0.0.2",
67
67
  "debug": "~2.6.9",
68
- "express": "~4.16.1",
68
+ "express": "~4.17.3",
69
+ "join-images": "^1.1.3",
69
70
  "json-map-transform": "^1.2.6",
70
71
  "jszip": "^3.5.0",
71
72
  "md5": "^2.3.0",
72
73
  "morgan": "~1.9.1",
74
+ "sharp": "^0.31.3",
73
75
  "uuid": "^8.1.0"
74
76
  },
75
77
  "peerDependencies": {
76
78
  "@loaders.gl/core": "^3.2.0"
77
79
  },
78
- "gitHead": "7d46e4ff10047e479374e9b3411f5142a79df15f"
80
+ "gitHead": "53bc8d3f18fbc3445a00f8509038479119895c78"
79
81
  }
@@ -26,7 +26,7 @@ export const Tile3dAttributesWorker = {
26
26
  module: 'tile-converter',
27
27
  version: VERSION,
28
28
  options: {
29
- attributes: null
29
+ featureAttributes: null
30
30
  }
31
31
  };
32
32
 
@@ -15,12 +15,11 @@ import {convertScreenThresholdToGeometricError} from '../lib/utils/lod-conversio
15
15
  import {writeFile, removeDir} from '../lib/utils/file-utils';
16
16
  import {calculateFilesSize, timeConverter} from '../lib/utils/statistic-utills';
17
17
  import {TILESET as tilesetTemplate} from './json-templates/tileset';
18
- import B3dmConverter from './helpers/b3dm-converter';
19
18
  import {createObbFromMbs} from '../i3s-converter/helpers/coordinate-converter';
20
19
  import {
21
20
  I3SAttributesData,
22
- Tile3dAttributesWorker
23
- /*transform3DTilesAttributesOnWorker*/
21
+ Tile3dAttributesWorker,
22
+ transform3DTilesAttributesOnWorker
24
23
  } from '../3d-tiles-attributes-worker';
25
24
  import {getWorkerURL, WorkerFarm} from '@loaders.gl/worker-utils';
26
25
  import {BROWSER_ERROR_MESSAGE} from '../constants';
@@ -85,6 +84,11 @@ export default class Tiles3DConverter {
85
84
 
86
85
  this.sourceTileset = new Tileset3D(sourceTilesetJson, {
87
86
  loadOptions: {
87
+ _nodeWorkers: true,
88
+ reuseWorkers: true,
89
+ 'i3s-content-nodejs': {
90
+ workerUrl: './modules/i3s/dist/i3s-content-nodejs-worker.js'
91
+ },
88
92
  i3s: {coordinateSystem: COORDINATE_SYSTEM.LNGLAT_OFFSETS, decodeTextures: false}
89
93
  }
90
94
  });
@@ -124,6 +128,67 @@ export default class Tiles3DConverter {
124
128
  workerFarm.destroy();
125
129
  }
126
130
 
131
+ /**
132
+ * Convert particular I3S Node
133
+ * @param parentSourceNode the parent node tile object (@loaders.gl/tiles/Tile3D)
134
+ * @param parentNode object in resulting tileset
135
+ * @param level a current level of a tree depth
136
+ * @param childNodeInfo child node to convert
137
+ */
138
+ private async convertChildNode(
139
+ parentSourceNode: Tile3D,
140
+ parentNode: Node3D,
141
+ level: number,
142
+ childNodeInfo: NodeReference
143
+ ): Promise<void> {
144
+ const sourceChild = await this._loadChildNode(parentSourceNode, childNodeInfo);
145
+ parentSourceNode.children.push(sourceChild);
146
+ if (sourceChild.contentUrl) {
147
+ await this.sourceTileset!._loadTile(sourceChild);
148
+ this.vertexCounter += sourceChild.content.vertexCount;
149
+
150
+ let featureAttributes: FeatureAttribute | null = null;
151
+ if (this.attributeStorageInfo) {
152
+ featureAttributes = await this._loadChildAttributes(sourceChild, this.attributeStorageInfo);
153
+ }
154
+
155
+ if (!sourceChild.header.obb) {
156
+ sourceChild.header.obb = createObbFromMbs(sourceChild.header.mbs);
157
+ }
158
+
159
+ const boundingVolume = {
160
+ box: i3sObbTo3dTilesObb(sourceChild.header.obb, this.geoidHeightModel)
161
+ };
162
+ const child: Node3D = {
163
+ boundingVolume,
164
+ geometricError: convertScreenThresholdToGeometricError(sourceChild),
165
+ children: []
166
+ };
167
+
168
+ const i3sAttributesData: I3SAttributesData = {
169
+ tileContent: sourceChild.content,
170
+ textureFormat: sourceChild?.header?.textureFormat
171
+ };
172
+
173
+ const b3dm = await transform3DTilesAttributesOnWorker(i3sAttributesData, {
174
+ source: this.workerSource.tile3dWorkerSource,
175
+ featureAttributes
176
+ });
177
+
178
+ child.content = {
179
+ uri: `${sourceChild.id}.b3dm`,
180
+ boundingVolume
181
+ };
182
+ await writeFile(this.tilesetPath, new Uint8Array(b3dm), `${sourceChild.id}.b3dm`);
183
+ parentNode.children.push(child);
184
+
185
+ sourceChild.unloadContent();
186
+ await this._addChildren(sourceChild, child, level + 1);
187
+ } else {
188
+ await this._addChildren(sourceChild, parentNode, level + 1);
189
+ }
190
+ }
191
+
127
192
  /**
128
193
  * The recursive function of traversal of a nodes tree
129
194
  * @param parentSourceNode the parent node tile object (@loaders.gl/tiles/Tile3D)
@@ -138,60 +203,11 @@ export default class Tiles3DConverter {
138
203
  if (this.options.maxDepth && level > this.options.maxDepth) {
139
204
  return;
140
205
  }
206
+ const promises: Promise<void>[] = [];
141
207
  for (const childNodeInfo of parentSourceNode.header.children || []) {
142
- const sourceChild = await this._loadChildNode(parentSourceNode, childNodeInfo);
143
- parentSourceNode.children.push(sourceChild);
144
- if (sourceChild.contentUrl) {
145
- await this.sourceTileset!._loadTile(sourceChild);
146
- this.vertexCounter += sourceChild.content.vertexCount;
147
-
148
- let featureAttributes: FeatureAttribute | null = null;
149
- if (this.attributeStorageInfo) {
150
- featureAttributes = await this._loadChildAttributes(
151
- sourceChild,
152
- this.attributeStorageInfo
153
- );
154
- }
155
-
156
- if (!sourceChild.header.obb) {
157
- sourceChild.header.obb = createObbFromMbs(sourceChild.header.mbs);
158
- }
159
-
160
- const boundingVolume = {
161
- box: i3sObbTo3dTilesObb(sourceChild.header.obb, this.geoidHeightModel)
162
- };
163
- const child: Node3D = {
164
- boundingVolume,
165
- geometricError: convertScreenThresholdToGeometricError(sourceChild),
166
- children: []
167
- };
168
-
169
- const i3sAttributesData: I3SAttributesData = {
170
- tileContent: sourceChild.content,
171
- textureFormat: sourceChild?.header?.textureFormat
172
- };
173
-
174
- // TODO Uncomment when 3d-tiles-attributes-worker will be published on CDN.
175
- // const b3dm = await transform3DTilesAttributesOnWorker(i3sAttributesData, {
176
- // source: this.workerSource.tile3dWorkerSource,
177
- // featureAttributes
178
- // });
179
-
180
- const b3dm = await new B3dmConverter().convert(i3sAttributesData, featureAttributes);
181
-
182
- child.content = {
183
- uri: `${sourceChild.id}.b3dm`,
184
- boundingVolume
185
- };
186
- await writeFile(this.tilesetPath, new Uint8Array(b3dm), `${sourceChild.id}.b3dm`);
187
- parentNode.children.push(child);
188
-
189
- sourceChild.unloadContent();
190
- await this._addChildren(sourceChild, child, level + 1);
191
- } else {
192
- await this._addChildren(sourceChild, parentNode, level + 1);
193
- }
208
+ promises.push(this.convertChildNode(parentSourceNode, parentNode, level, childNodeInfo));
194
209
  }
210
+ await Promise.all(promises);
195
211
  }
196
212
 
197
213
  /**
@@ -27,7 +27,7 @@ export default class B3dmConverter {
27
27
  i3sAttributesData: I3SAttributesData,
28
28
  featureAttributes: any = null
29
29
  ): Promise<ArrayBuffer> {
30
- const gltf = await this.buildGltf(i3sAttributesData);
30
+ const gltf = await this.buildGltf(i3sAttributesData, featureAttributes);
31
31
  const b3dm = encodeSync(
32
32
  {
33
33
  gltfEncoded: new Uint8Array(gltf),
@@ -45,7 +45,10 @@ export default class B3dmConverter {
45
45
  * @param i3sTile - Tile3D instance for I3S node
46
46
  * @returns - encoded glb content
47
47
  */
48
- async buildGltf(i3sAttributesData: I3SAttributesData): Promise<ArrayBuffer> {
48
+ async buildGltf(
49
+ i3sAttributesData: I3SAttributesData,
50
+ featureAttributes: any
51
+ ): Promise<ArrayBuffer> {
49
52
  const {tileContent, textureFormat} = i3sAttributesData;
50
53
  const {
51
54
  material,
@@ -77,6 +80,7 @@ export default class B3dmConverter {
77
80
  cartographicOrigin,
78
81
  modelMatrix
79
82
  );
83
+ this._createBatchIds(tileContent, featureAttributes);
80
84
  if (attributes.normals && !this._checkNormals(attributes.normals.value)) {
81
85
  delete attributes.normals;
82
86
  }
@@ -163,25 +167,28 @@ export default class B3dmConverter {
163
167
  }
164
168
 
165
169
  /**
166
- * Generate batchId attribute from faceRanges.
167
- * @param {Uint32Array} faceRanges - the source array
168
- * @returns {Float32Array} batchId list.
170
+ * Create _BATCHID attribute
171
+ * @param {Object} i3sContent - the source object
172
+ * @returns {void}
169
173
  */
170
- _generateBatchId(faceRanges) {
171
- const batchIdArraySize = (faceRanges[faceRanges.length - 1] + 1) * 3;
172
- const batchId = new Float32Array(batchIdArraySize);
173
- let rangeIndex = 0;
174
- let currentBatchId = 0;
175
-
176
- for (let index = 0; index < faceRanges.length / 2; index++) {
177
- const fromIndex = faceRanges[rangeIndex] * 3;
178
- const untilPosition = (faceRanges[rangeIndex + 1] + 1) * 3;
174
+ _createBatchIds(i3sContent, featureAttributes) {
175
+ const {featureIds} = i3sContent;
176
+ const {OBJECTID: objectIds} = featureAttributes || {};
177
+ if (!featureIds || !objectIds) {
178
+ return;
179
+ }
179
180
 
180
- batchId.fill(currentBatchId, fromIndex, untilPosition);
181
- rangeIndex += 2;
182
- currentBatchId += 1;
181
+ for (let i = 0; i < featureIds.length; i++) {
182
+ const featureId = featureIds[i];
183
+ const batchId = objectIds.indexOf(featureId);
184
+ featureIds[i] = batchId;
183
185
  }
184
- return batchId;
186
+
187
+ i3sContent.attributes._BATCHID = {
188
+ size: 1,
189
+ byteOffset: 0,
190
+ value: featureIds
191
+ };
185
192
  }
186
193
 
187
194
  /**
@@ -14,6 +14,10 @@ type TileConversionOptions = {
14
14
  /** Output folder. This folder will be created by converter if doesn't exist. It is relative to the converter path.
15
15
  * Default: "data" folder */
16
16
  output: string;
17
+ /** Keep created 3DNodeIndexDocument files on disk instead of memory. This option reduce memory usage but decelerates conversion speed */
18
+ instantNodeWriting: boolean;
19
+ /** Try to merge similar materials to be able to merge meshes into one node (I3S to 3DTiles conversion only) */
20
+ mergeMaterials: boolean;
17
21
  /** 3DTiles->I3S only. location of 7z.exe archiver to create slpk on Windows OS, default: "C:\Program Files\7-Zip\7z.exe" */
18
22
  sevenZipExe: string;
19
23
  /** location of the Earth Gravity Model (*.pgm) file to convert heights from ellipsoidal to gravity-related format,
@@ -66,7 +70,9 @@ async function main() {
66
70
  printHelp();
67
71
  }
68
72
 
69
- const options: TileConversionOptions = parseOptions(args);
73
+ const validatedOptionsArr = validateOptionsWithEqual(args);
74
+
75
+ const options: TileConversionOptions = parseOptions(validatedOptionsArr);
70
76
 
71
77
  if (options.installDependencies) {
72
78
  const depthInstaller = new DepsInstaller();
@@ -97,6 +103,12 @@ function printHelp(): void {
97
103
  );
98
104
  console.log('--name [Tileset name]');
99
105
  console.log('--output [Output folder, default: "data" folder]');
106
+ console.log(
107
+ '--instant-node-writing [Keep created 3DNodeIndexDocument files on disk instead of memory. This option reduce memory usage but decelerates conversion speed]'
108
+ );
109
+ console.log(
110
+ '--split-nodes [Prevent to merge similar materials that could lead to incorrect visualization (I3S to 3DTiles conversion only)]'
111
+ );
100
112
  console.log('--slpk [Generate slpk (Scene Layer Packages) I3S output file]');
101
113
  console.log(
102
114
  '--tileset [tileset.json file (3DTiles) / http://..../SceneServer/layers/0 resource (I3S)]'
@@ -152,9 +164,11 @@ async function convert(options: ValidatedTileConversionOptions) {
152
164
  egmFilePath: options.egm,
153
165
  token: options.token,
154
166
  draco: options.draco,
167
+ mergeMaterials: options.mergeMaterials,
155
168
  generateTextures: options.generateTextures,
156
169
  generateBoundingVolumes: options.generateBoundingVolumes,
157
- validate: options.validate
170
+ validate: options.validate,
171
+ instantNodeWriting: options.instantNodeWriting
158
172
  });
159
173
  break;
160
174
  default:
@@ -199,6 +213,19 @@ function validateOptions(options: TileConversionOptions): ValidatedTileConversio
199
213
  return <ValidatedTileConversionOptions>options;
200
214
  }
201
215
 
216
+ function validateOptionsWithEqual(args: string[]): string[] {
217
+ return args.reduce((acc: string[], curr) => {
218
+ const equalSignIndex = curr.indexOf('=');
219
+ const beforeEqual = curr.slice(0, equalSignIndex);
220
+ const afterEqual = curr.slice(equalSignIndex + 1, curr.length);
221
+ const condition = curr.includes('=') && curr.startsWith('--') && afterEqual;
222
+ if (condition) {
223
+ return acc.concat(beforeEqual, afterEqual);
224
+ }
225
+ return acc.concat(curr);
226
+ }, []);
227
+ }
228
+
202
229
  /**
203
230
  * Parse option from the cli arguments array
204
231
  * @param args
@@ -207,6 +234,8 @@ function validateOptions(options: TileConversionOptions): ValidatedTileConversio
207
234
  function parseOptions(args: string[]): TileConversionOptions {
208
235
  const opts: TileConversionOptions = {
209
236
  output: 'data',
237
+ instantNodeWriting: false,
238
+ mergeMaterials: true,
210
239
  sevenZipExe: 'C:\\Program Files\\7-Zip\\7z.exe',
211
240
  egm: join(process.cwd(), 'deps', 'egm2008-5.pgm'),
212
241
  draco: true,
@@ -233,11 +262,17 @@ function parseOptions(args: string[]): TileConversionOptions {
233
262
  case '--output':
234
263
  opts.output = getStringValue(index, args);
235
264
  break;
265
+ case '--instant-node-writing':
266
+ opts.instantNodeWriting = getBooleanValue(index, args);
267
+ break;
268
+ case '--split-nodes':
269
+ opts.mergeMaterials = getBooleanValue(index, args);
270
+ break;
236
271
  case '--max-depth':
237
272
  opts.maxDepth = getIntegerValue(index, args);
238
273
  break;
239
274
  case '--slpk':
240
- opts.slpk = true;
275
+ opts.slpk = getBooleanValue(index, args);
241
276
  break;
242
277
  case '--7zExe':
243
278
  opts.sevenZipExe = getStringValue(index, args);
@@ -249,19 +284,19 @@ function parseOptions(args: string[]): TileConversionOptions {
249
284
  opts.token = getStringValue(index, args);
250
285
  break;
251
286
  case '--no-draco':
252
- opts.draco = false;
287
+ opts.draco = getBooleanValue(index, args);
253
288
  break;
254
289
  case '--validate':
255
- opts.validate = true;
290
+ opts.validate = getBooleanValue(index, args);
256
291
  break;
257
292
  case '--install-dependencies':
258
- opts.installDependencies = true;
293
+ opts.installDependencies = getBooleanValue(index, args);
259
294
  break;
260
295
  case '--generate-textures':
261
- opts.generateTextures = true;
296
+ opts.generateTextures = getBooleanValue(index, args);
262
297
  break;
263
298
  case '--generate-bounding-volumes':
264
- opts.generateBoundingVolumes = true;
299
+ opts.generateBoundingVolumes = getBooleanValue(index, args);
265
300
  break;
266
301
  case '--help':
267
302
  printHelp();
@@ -322,3 +357,14 @@ function getIntegerValue(index: number, args: string[]): number {
322
357
  }
323
358
  return NaN;
324
359
  }
360
+
361
+ function getBooleanValue(index: number, args: string[]): boolean {
362
+ const stringValue: string = getStringValue(index, args).toLowerCase().trim();
363
+ if (['--no-draco', '--split-nodes'].includes(args[index]) && !stringValue) {
364
+ return false;
365
+ }
366
+ if (!stringValue || stringValue === 'true') {
367
+ return true;
368
+ }
369
+ return false;
370
+ }
@@ -1,7 +1,11 @@
1
- import {load} from '@loaders.gl/core';
1
+ import {load, fetchFile} from '@loaders.gl/core';
2
2
  import {ZipLoader} from '@loaders.gl/zip';
3
3
  import {writeFile} from '../lib/utils/file-utils';
4
4
  import {join} from 'path';
5
+ import {ChildProcessProxy} from '@loaders.gl/worker-utils';
6
+
7
+ // @ts-ignore TS2304: Cannot find name '__VERSION__'.
8
+ const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'beta';
5
9
 
6
10
  const PGM_LINK = 'https://raw.githubusercontent.com/visgl/deck.gl-data/master/egm/egm2008-5.zip';
7
11
 
@@ -15,8 +19,11 @@ export class DepsInstaller {
15
19
  /**
16
20
  * Run instalation
17
21
  * @param path destination folder
22
+ * @param workersPath destination folder for workers.
23
+ * This path is '' by default and is not used by tile-converter.
24
+ * It is used in tests to prevent rewriting actual workers during tests running
18
25
  */
19
- async install(path: string = ''): Promise<void> {
26
+ async install(path: string = '', workersPath: string = ''): Promise<void> {
20
27
  console.log('Installing "EGM2008-5" model...'); // eslint-disable-line no-console
21
28
  const fileMap = await load(PGM_LINK, ZipLoader, {});
22
29
 
@@ -27,6 +34,35 @@ export class DepsInstaller {
27
34
 
28
35
  await writeFile(depsPath, new Uint8Array(fileMap['geoids/egm2008-5.pgm']), 'egm2008-5.pgm');
29
36
 
37
+ console.log('Installing "I3S Content Loader worker"'); // eslint-disable-line no-console
38
+ await this.installWorker('i3s', 'i3s-content-nodejs-worker.js', workersPath);
39
+
40
+ console.log('Installing "Draco Loader worker"'); // eslint-disable-line no-console
41
+ await this.installWorker('draco', 'draco-nodejs-worker.js', workersPath);
42
+
43
+ console.log('Installing "Basis Loader worker"'); // eslint-disable-line no-console
44
+ await this.installWorker('textures', 'basis-nodejs-worker.js', workersPath);
45
+
46
+ console.log('Installing "join-images" npm package');
47
+ const childProcess = new ChildProcessProxy();
48
+ await childProcess.start({
49
+ command: 'npm',
50
+ arguments: ['install', 'sharp', 'join-images'],
51
+ wait: 0
52
+ });
53
+
30
54
  console.log('All dependencies were installed succesfully.'); // eslint-disable-line no-console
31
55
  }
56
+
57
+ private async installWorker(module: string, name: string, extraPath: string) {
58
+ const fileResponse = await fetchFile(
59
+ `https://unpkg.com/@loaders.gl/${module}@${VERSION}/dist/${name}`
60
+ );
61
+ const fileData = await fileResponse.arrayBuffer();
62
+ if (!fileData) {
63
+ return;
64
+ }
65
+ const path = join(process.cwd(), extraPath, 'modules', module, 'dist');
66
+ await writeFile(path, fileData, name);
67
+ }
32
68
  }
@@ -1,6 +1,7 @@
1
1
  import type {WorkerObject} from '@loaders.gl/worker-utils';
2
2
  import type {ConvertedAttributes} from './i3s-converter/types';
3
3
  import type {Matrix4, Vector3} from '@math.gl/core';
4
+ import type {GLTFImagePostprocessed, GLTFNodePostprocessed} from '@loaders.gl/gltf';
4
5
 
5
6
  import {processOnWorker} from '@loaders.gl/worker-utils';
6
7
 
@@ -9,13 +10,16 @@ import {processOnWorker} from '@loaders.gl/worker-utils';
9
10
  const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
10
11
 
11
12
  export type I3SAttributesWorkerOptions = {
13
+ _nodeWorkers: boolean;
14
+ reuseWorkers: boolean;
12
15
  useCartesianPositions: boolean;
13
16
  source: string;
14
17
  };
15
18
 
16
19
  export type B3DMAttributesData = {
17
20
  gltfMaterials?: {id: string}[];
18
- nodes: any;
21
+ nodes: GLTFNodePostprocessed[];
22
+ images: GLTFImagePostprocessed[];
19
23
  cartographicOrigin: Vector3;
20
24
  cartesianModelMatrix: Matrix4;
21
25
  };