@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
@@ -0,0 +1,83 @@
1
+ import transform from 'json-map-transform';
2
+
3
+ const PLAIN_GEOMETRY_DEFINITION = () => ({
4
+ offset: {
5
+ default: 8
6
+ },
7
+ position: {
8
+ default: {
9
+ type: 'Float32',
10
+ component: 3
11
+ }
12
+ },
13
+ normal: {
14
+ default: {
15
+ type: 'Float32',
16
+ component: 3
17
+ }
18
+ },
19
+ uv0: {
20
+ path: 'hasTexture',
21
+ transform: (val) => (val && {type: 'Float32', component: 2}) || false,
22
+ omitValues: [false]
23
+ },
24
+ color: {
25
+ default: {
26
+ type: 'UInt8',
27
+ component: 4
28
+ }
29
+ },
30
+ uvRegion: {
31
+ path: 'hasUvRegions',
32
+ transform: (val) => (val && {type: 'UInt16', component: 4}) || false,
33
+ omitValues: [false]
34
+ },
35
+ featureId: {
36
+ default: {
37
+ binding: 'per-feature',
38
+ type: 'UInt64',
39
+ component: 1
40
+ }
41
+ },
42
+ faceRange: {
43
+ default: {
44
+ binding: 'per-feature',
45
+ type: 'UInt32',
46
+ component: 2
47
+ }
48
+ }
49
+ });
50
+
51
+ const COMPRESSED_GEOMETRY_DEFINITION = () => ({
52
+ 'compressedAttributes.encoding': {
53
+ default: 'draco'
54
+ },
55
+ 'compressedAttributes.attributes': {
56
+ path: 'geometryConfig',
57
+ transform: (val) => {
58
+ const result = ['position', 'normal'];
59
+ if (val.hasTexture) {
60
+ result.push('uv0');
61
+ }
62
+ result.push('color');
63
+ if (val.hasUvRegions) {
64
+ result.push('uv-region');
65
+ }
66
+ result.push('feature-index');
67
+ return result;
68
+ }
69
+ }
70
+ });
71
+
72
+ export const GEOMETRY_DEFINITION = () => ({
73
+ geometryBuffers: {
74
+ path: 'geometryConfig',
75
+ transform: (val) => {
76
+ const result = [transform(val, PLAIN_GEOMETRY_DEFINITION())];
77
+ if (val.draco) {
78
+ result.push(transform({geometryConfig: val}, COMPRESSED_GEOMETRY_DEFINITION()));
79
+ }
80
+ return result;
81
+ }
82
+ }
83
+ });
@@ -1,76 +1,6 @@
1
1
  import transform from 'json-map-transform';
2
2
  import {STORE} from './store';
3
3
 
4
- const PLAIN_GEOMETRY_DEFINITION = () => ({
5
- offset: 8,
6
- position: {
7
- type: 'Float32',
8
- component: 3
9
- },
10
- normal: {
11
- type: 'Float32',
12
- component: 3
13
- },
14
- uv0: {
15
- type: 'Float32',
16
- component: 2
17
- },
18
- color: {
19
- type: 'UInt8',
20
- component: 4
21
- },
22
- featureId: {
23
- binding: 'per-feature',
24
- type: 'UInt64',
25
- component: 1
26
- },
27
- faceRange: {
28
- binding: 'per-feature',
29
- type: 'UInt32',
30
- component: 2
31
- }
32
- });
33
-
34
- const PLAIN_GEOMETRY_DEFINITION_WITHOUT_UV0 = () => ({
35
- offset: 8,
36
- position: {
37
- type: 'Float32',
38
- component: 3
39
- },
40
- normal: {
41
- type: 'Float32',
42
- component: 3
43
- },
44
- color: {
45
- type: 'UInt8',
46
- component: 4
47
- },
48
- featureId: {
49
- binding: 'per-feature',
50
- type: 'UInt64',
51
- component: 1
52
- },
53
- faceRange: {
54
- binding: 'per-feature',
55
- type: 'UInt32',
56
- component: 2
57
- }
58
- });
59
-
60
- const COMPRESSED_GEOMETRY_DEFINITION = () => ({
61
- compressedAttributes: {
62
- encoding: 'draco',
63
- attributes: ['position', 'normal', 'uv0', 'color', 'feature-index']
64
- }
65
- });
66
-
67
- const COMPRESSED_GEOMETRY_DEFINITION_WITHOUT_UV0 = () => ({
68
- compressedAttributes: {
69
- encoding: 'draco',
70
- attributes: ['position', 'normal', 'color', 'feature-index']
71
- }
72
- });
73
-
74
4
  const SPATIAL_REFERENCE = () => ({
75
5
  wkid: {
76
6
  path: 'wkid',
@@ -189,27 +119,8 @@ export const LAYERS = () => ({
189
119
  default: []
190
120
  },
191
121
  geometryDefinitions: {
192
- path: 'compressGeometry',
193
- transform: (val) => {
194
- const result = [{geometryBuffers: []}, {geometryBuffers: []}];
195
-
196
- // @ts-expect-error
197
- result[0].geometryBuffers.push(PLAIN_GEOMETRY_DEFINITION());
198
- // @ts-expect-error
199
- result[1].geometryBuffers.push(PLAIN_GEOMETRY_DEFINITION_WITHOUT_UV0());
200
- if (val) {
201
- // @ts-expect-error
202
- result[0].geometryBuffers.push(COMPRESSED_GEOMETRY_DEFINITION());
203
- // @ts-expect-error
204
- result[1].geometryBuffers.push(COMPRESSED_GEOMETRY_DEFINITION_WITHOUT_UV0());
205
- }
206
- return result;
207
- },
208
- default: [
209
- {
210
- geometryBuffers: [PLAIN_GEOMETRY_DEFINITION(), PLAIN_GEOMETRY_DEFINITION_WITHOUT_UV0()]
211
- }
212
- ]
122
+ path: 'geometryDefinitions',
123
+ default: []
213
124
  },
214
125
  attributeStorageInfo: {
215
126
  path: 'attributeStorageInfo',
@@ -15,15 +15,15 @@ const MATERIAL_DEFINITION_INFO_PARAMS = () => ({
15
15
  },
16
16
  ambient: {
17
17
  path: 'ambient',
18
- default: [1, 1, 1, 1]
18
+ default: [1, 1, 1]
19
19
  },
20
20
  diffuse: {
21
21
  path: 'diffuse',
22
- default: [1, 1, 1, 1]
22
+ default: [1, 1, 1]
23
23
  },
24
24
  specular: {
25
25
  path: 'specular',
26
- default: [0, 0, 0, 0]
26
+ default: [0, 0, 0]
27
27
  },
28
28
  useVertexColorAlpha: {
29
29
  path: 'useVertexColorAlpha',
@@ -1,13 +1,17 @@
1
+ import {GLTFImagePostprocessed} from '@loaders.gl/gltf';
1
2
  import {
2
3
  BoundingVolumes,
3
4
  I3SMaterialDefinition,
4
5
  MaterialDefinitionInfo,
5
6
  TextureDefinitionInfo
6
7
  } from '@loaders.gl/i3s';
7
- import {ImageDataType} from '@loaders.gl/images';
8
8
 
9
9
  /** Converted resources for specific node */
10
10
  export type I3SConvertedResources = {
11
+ /**
12
+ * Node id
13
+ */
14
+ nodeId?: number;
11
15
  /** Non-compressed geometry buffer that have structure met
12
16
  * https://github.com/Esri/i3s-spec/blob/master/docs/1.8/defaultGeometrySchema.cmn.md
13
17
  * (Geometry buffer)
@@ -21,6 +25,10 @@ export type I3SConvertedResources = {
21
25
  * Texture image content
22
26
  */
23
27
  texture: any | null;
28
+ /**
29
+ * If the resource has uvRegions geometry attribute
30
+ */
31
+ hasUvRegions: boolean;
24
32
  /**
25
33
  * Shared resources built from GLTF material
26
34
  */
@@ -59,6 +67,8 @@ export type ConvertedAttributes = {
59
67
  texCoords: Float32Array;
60
68
  /** COLOR_0 attribute value */
61
69
  colors: Uint8Array;
70
+ /** uvRegion attribute for a texture atlas */
71
+ uvRegions: Uint16Array;
62
72
  /** Feature indices grouped by ...
63
73
  * converted from "batch ids" of GLTF
64
74
  */
@@ -69,6 +79,8 @@ export type ConvertedAttributes = {
69
79
  * MBS and/or OBB bounding volumes of the node
70
80
  */
71
81
  boundingVolumes: null | BoundingVolumes;
82
+ /** merged materials data */
83
+ mergedMaterials: MergedMaterial[];
72
84
  };
73
85
 
74
86
  /** Postprocessed geometry and feature attributes
@@ -83,6 +95,8 @@ export type GeometryAttributes = {
83
95
  texCoords: Float32Array;
84
96
  /** COLOR_0 attribute value */
85
97
  colors: Uint8Array;
98
+ /** uvRegion attribute for a texture atlas */
99
+ uvRegions: Uint16Array;
86
100
  /** faceRanges attribute value */
87
101
  faceRange: Uint32Array;
88
102
  /** feature Ids attribute value */
@@ -101,6 +115,8 @@ export type GroupedByFeatureIdAttributes = {
101
115
  normals: Float32Array;
102
116
  /** COLOR_0 attribute value */
103
117
  colors: Uint8Array;
118
+ /** uvRegion attribute for a texture atlas */
119
+ uvRegions: Uint16Array;
104
120
  /** TEXCOORD_0 attribute value */
105
121
  texCoords: Float32Array;
106
122
  };
@@ -120,5 +136,20 @@ export type I3SMaterialWithTexture = {
120
136
  /** Material definition https://github.com/Esri/i3s-spec/blob/master/docs/1.8/materialDefinitions.cmn.md */
121
137
  material: I3SMaterialDefinition;
122
138
  /** Texture content (image) */
123
- texture?: ImageDataType;
139
+ texture?: GLTFImagePostprocessed;
140
+ /** Metadata of all merged materials */
141
+ mergedMaterials: MergedMaterial[];
142
+ };
143
+
144
+ /** Metadata of some original texture */
145
+ export type MergedMaterial = {
146
+ /** Gltf material Id */
147
+ originalMaterialId: string;
148
+ /** Original texture size */
149
+ textureSize?: {
150
+ width: number;
151
+ height: number;
152
+ };
153
+ /** Uint16Array of 4 elements https://github.com/Esri/i3s-spec/blob/master/docs/1.7/geometryUVRegion.cmn.md */
154
+ uvRegion?: Uint16Array;
124
155
  };
@@ -1,3 +1,5 @@
1
+ import {load} from '@loaders.gl/core';
2
+ import {JSONLoader} from '@loaders.gl/loader-utils';
1
3
  import {promises as fs} from 'fs';
2
4
  import {isAbsolute, join} from 'path';
3
5
  import {compressFileWithGzip} from './compress-util';
@@ -40,23 +42,76 @@ export async function writeFile(
40
42
  * @param data - file content
41
43
  * @param fileName - name of output file (default: index.json)
42
44
  * @param compress - if need to compress file with gzip (default: true)
45
+ * @param compressList - if set - the file should be added to this list and compressed in the end of conversion
43
46
  */
44
47
  export async function writeFileForSlpk(
45
48
  path: string,
46
49
  data: string | Uint8Array | ArrayBuffer | Promise<ArrayBuffer>,
47
50
  fileName: string = 'index.json',
48
- compress: boolean = true
49
- ): Promise<string> {
51
+ compress: boolean = true,
52
+ compressList?: string[] | null
53
+ ): Promise<string | null> {
50
54
  const pathFile = await writeFile(path, data, fileName);
51
55
  if (compress) {
52
- const pathGzFile = await compressFileWithGzip(pathFile);
53
- // After compression, we don't need an uncompressed file
54
- await removeFile(pathFile);
55
- return pathGzFile;
56
+ if (compressList) {
57
+ if (!compressList.includes(pathFile)) {
58
+ compressList.push(pathFile);
59
+ return `${pathFile}.gz`;
60
+ } else {
61
+ return null;
62
+ }
63
+ } else {
64
+ const pathGzFile = await compressFileWithGzip(pathFile);
65
+ // After compression, we don't need an uncompressed file
66
+ await removeFile(pathFile);
67
+ return pathGzFile;
68
+ }
56
69
  }
57
70
  return pathFile;
58
71
  }
59
72
 
73
+ /**
74
+ * Open json file
75
+ * @param path - path to the file
76
+ * @param fileName - file name
77
+ * @returns object
78
+ */
79
+ export async function openJson(path: string, fileName: string): Promise<{[key: string]: any}> {
80
+ return new Promise((resolve, reject) => {
81
+ let count = 0;
82
+ console.log(`load ${path}/${fileName}.`); // eslint-disable-line
83
+ const intervalId = setInterval(() => {
84
+ const pathFile = join(path, fileName);
85
+ load(pathFile, JSONLoader)
86
+ .then((result) => {
87
+ clearInterval(intervalId);
88
+ resolve(result);
89
+ })
90
+ .catch(() => {
91
+ count++;
92
+ if (count > 100) {
93
+ clearInterval(intervalId);
94
+ reject(new Error(`Cannon load ${path}/${fileName}.`));
95
+ }
96
+ });
97
+ }, 200);
98
+ });
99
+ }
100
+
101
+ /**
102
+ * Check if the file exists
103
+ * @param fileName - full name of file
104
+ * @returns true if file exists, otherwise - false
105
+ */
106
+ export async function isFileExists(fileName: string): Promise<boolean> {
107
+ try {
108
+ await fs.stat(fileName);
109
+ return true;
110
+ } catch {
111
+ return false;
112
+ }
113
+ }
114
+
60
115
  /**
61
116
  * Remove dir with path
62
117
  *
@@ -80,5 +135,5 @@ export function removeFile(path: string) {
80
135
  * @param filePath
81
136
  */
82
137
  export function getAbsoluteFilePath(filePath: string) {
83
- return isAbsolute(filePath) ? filePath : join(process.cwd(), filePath); // eslint-disable-line no-undef
138
+ return isAbsolute(filePath) ? filePath : join(process.cwd(), filePath);
84
139
  }
@@ -6,7 +6,23 @@ const MEMORY_LIMIT = 4 * 1024 * 1024 * 1024; // 4GB
6
6
 
7
7
  export type WriteQueueItem = {
8
8
  archiveKey?: string;
9
- writePromise: Promise<string>;
9
+ /**
10
+ * writePromise() returns a Promise that will be awaited in Promise.allSettled(promises);
11
+ * Arguments for this call are specified in writeQueue.enqueue call like this:
12
+ * await writeQueue.enqueue({
13
+ * archiveKey: `nodePages/xxx.json.gz`,
14
+ * writePromise: () => writeFileForSlpk(slpkPath, data, `xxx.json`)
15
+ * });
16
+ * Note, a function like writeFileForSlpk should NOT be called when initializing the object for enqueue().
17
+ * If he function is called, the promise will be created
18
+ * and the function will allocate resources (file descriptors) for file writing.
19
+ * It will be done for ALL items in the queue, which is not supposed to happen.
20
+ * That's why the function should be passed as
21
+ * writePromise: () => writeFileForSlpk(slpkPath, content, `xxx.json`)
22
+ * instead of
23
+ * writePromise: writeFileForSlpk(slpkPath, content, `xxx.json`) // INCORRECT !
24
+ */
25
+ writePromise: () => Promise<string | null>;
10
26
  };
11
27
 
12
28
  export default class WriteQueue<T extends WriteQueueItem> extends Queue<T> {
@@ -22,11 +38,19 @@ export default class WriteQueue<T extends WriteQueueItem> extends Queue<T> {
22
38
  this.writeConcurrency = writeConcurrency;
23
39
  }
24
40
 
25
- async enqueue(val: T) {
26
- super.enqueue(val);
27
- /** https://nodejs.org/docs/latest-v14.x/api/process.html#process_process_memoryusage */
28
- if (process.memoryUsage().rss > MEMORY_LIMIT) {
29
- await this.startWrite();
41
+ async enqueue(val: T, writeImmediately: boolean = false) {
42
+ if (writeImmediately) {
43
+ const {archiveKey, writePromise} = val as WriteQueueItem;
44
+ const result = await writePromise();
45
+ if (archiveKey && result) {
46
+ this.fileMap[archiveKey] = result;
47
+ }
48
+ } else {
49
+ super.enqueue(val);
50
+ /** https://nodejs.org/docs/latest-v14.x/api/process.html#process_process_memoryusage */
51
+ if (process.memoryUsage().rss > MEMORY_LIMIT) {
52
+ await this.startWrite();
53
+ }
30
54
  }
31
55
  }
32
56
 
@@ -41,12 +65,9 @@ export default class WriteQueue<T extends WriteQueueItem> extends Queue<T> {
41
65
  }
42
66
 
43
67
  async startWrite(): Promise<void> {
44
- if (this.writePromise) {
45
- await this.writePromise;
46
- this.writePromise = null;
47
- return;
68
+ if (!this.writePromise) {
69
+ this.writePromise = this.doWrite();
48
70
  }
49
- this.writePromise = this.doWrite();
50
71
  await this.writePromise;
51
72
  this.writePromise = null;
52
73
  }
@@ -58,7 +79,7 @@ export default class WriteQueue<T extends WriteQueueItem> extends Queue<T> {
58
79
 
59
80
  private async doWrite(): Promise<void> {
60
81
  while (this.length) {
61
- const promises: Promise<string>[] = [];
82
+ const promises: Promise<string | null>[] = [];
62
83
  const archiveKeys: (string | undefined)[] = [];
63
84
  for (let i = 0; i < this.writeConcurrency; i++) {
64
85
  const item = this.dequeue();
@@ -67,21 +88,23 @@ export default class WriteQueue<T extends WriteQueueItem> extends Queue<T> {
67
88
  }
68
89
  const {archiveKey, writePromise} = item as WriteQueueItem;
69
90
  archiveKeys.push(archiveKey);
70
- promises.push(writePromise);
91
+ const promise = writePromise();
92
+ promises.push(promise);
71
93
  }
72
- const writeResults = await Promise.all(promises);
94
+ const writeResults = await Promise.allSettled(promises);
73
95
  this.updateFileMap(archiveKeys, writeResults);
74
96
  }
75
- this.writePromise = null;
76
97
  }
77
98
 
78
- private updateFileMap(archiveKeys: (string | undefined)[], writeResults: string[]) {
99
+ private updateFileMap(
100
+ archiveKeys: (string | undefined)[],
101
+ writeResults: PromiseSettledResult<string | null>[]
102
+ ) {
79
103
  for (let i = 0; i < archiveKeys.length; i++) {
80
104
  const archiveKey = archiveKeys[i];
81
- if (!archiveKey) {
82
- continue;
105
+ if (archiveKey && 'value' in writeResults[i]) {
106
+ this.fileMap[archiveKey] = (writeResults[i] as PromiseFulfilledResult<string>).value;
83
107
  }
84
- this.fileMap[archiveKey] = writeResults[i];
85
108
  }
86
109
  }
87
110
  }
package/src/pgm-loader.ts CHANGED
@@ -1,11 +1,10 @@
1
1
  import type {LoaderWithParser} from '@loaders.gl/loader-utils';
2
+ import {parsePGM} from '@math.gl/geoid';
2
3
 
3
4
  // __VERSION__ is injected by babel-plugin-version-inline
4
5
  // @ts-ignore TS2304: Cannot find name '__VERSION__'.
5
6
  const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
6
7
 
7
- import {parsePGM} from '@math.gl/geoid';
8
-
9
8
  /**
10
9
  * Loader for PGM - Netpbm grayscale image format
11
10
  */
@@ -15,6 +14,7 @@ export const PGMLoader: LoaderWithParser = {
15
14
  module: 'tile-converter',
16
15
  version: VERSION,
17
16
  mimeTypes: ['image/x-portable-graymap'],
17
+ // @ts-expect-error LoaderOptions does not have cubic parameter
18
18
  parse: async (arrayBuffer, options) => parsePGM(new Uint8Array(arrayBuffer), options),
19
19
  extensions: ['pgm'],
20
20
  options: {
@@ -3,4 +3,4 @@ import B3dmConverter from '../3d-tiles-converter/helpers/b3dm-converter';
3
3
 
4
4
  const b3dmConverter = new B3dmConverter();
5
5
 
6
- createWorker(async (data, options = {}) => b3dmConverter.convert(data, options.attributes));
6
+ createWorker(async (data, options = {}) => b3dmConverter.convert(data, options.featureAttributes));
@@ -2,5 +2,6 @@ import {createWorker} from '@loaders.gl/worker-utils';
2
2
  import {convertAttributes} from '../i3s-converter/helpers/geometry-converter';
3
3
 
4
4
  createWorker(
5
- async (data, options = {}) => await convertAttributes(data, options.useCartesianPositions)
5
+ async (data, options = {}) =>
6
+ await convertAttributes(data, options.materialAndTextureList, options.useCartesianPositions)
6
7
  );