@loaders.gl/tile-converter 3.3.0-alpha.1 → 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 (252) 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 +29 -4
  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 +61034 -64112
  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 +25 -58
  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 +18 -29
  39. package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js.map +1 -1
  40. package/dist/es5/i3s-converter/helpers/coordinate-converter.js +8 -25
  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 +504 -350
  49. package/dist/es5/i3s-converter/helpers/geometry-converter.js.map +1 -1
  50. package/dist/es5/i3s-converter/helpers/gltf-attributes.js +57 -57
  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 +478 -168
  57. package/dist/es5/i3s-converter/helpers/node-pages.js.map +1 -1
  58. package/dist/es5/i3s-converter/i3s-converter.js +794 -1125
  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 +86 -87
  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 +26 -43
  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 +20 -24
  122. package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js.map +1 -1
  123. package/dist/esm/i3s-converter/helpers/coordinate-converter.js +11 -12
  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 +286 -192
  132. package/dist/esm/i3s-converter/helpers/geometry-converter.js.map +1 -1
  133. package/dist/esm/i3s-converter/helpers/gltf-attributes.js +59 -48
  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 +235 -508
  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 +29 -28
  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 +5 -6
  185. package/dist/i3s-converter/helpers/batch-ids-extensions.d.ts.map +1 -1
  186. package/dist/i3s-converter/helpers/batch-ids-extensions.js +18 -4
  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/coordinate-converter.js +8 -6
  190. package/dist/i3s-converter/helpers/feature-attributes.d.ts +56 -0
  191. package/dist/i3s-converter/helpers/feature-attributes.d.ts.map +1 -0
  192. package/dist/i3s-converter/helpers/feature-attributes.js +216 -0
  193. package/dist/i3s-converter/helpers/geometry-attributes.d.ts.map +1 -1
  194. package/dist/i3s-converter/helpers/geometry-attributes.js +42 -17
  195. package/dist/i3s-converter/helpers/geometry-converter.d.ts +18 -6
  196. package/dist/i3s-converter/helpers/geometry-converter.d.ts.map +1 -1
  197. package/dist/i3s-converter/helpers/geometry-converter.js +337 -92
  198. package/dist/i3s-converter/helpers/gltf-attributes.d.ts.map +1 -1
  199. package/dist/i3s-converter/helpers/gltf-attributes.js +51 -32
  200. package/dist/i3s-converter/helpers/node-index-document.d.ts +91 -0
  201. package/dist/i3s-converter/helpers/node-index-document.d.ts.map +1 -0
  202. package/dist/i3s-converter/helpers/node-index-document.js +242 -0
  203. package/dist/i3s-converter/helpers/node-pages.d.ts +81 -42
  204. package/dist/i3s-converter/helpers/node-pages.d.ts.map +1 -1
  205. package/dist/i3s-converter/helpers/node-pages.js +200 -92
  206. package/dist/i3s-converter/i3s-converter.d.ts +52 -108
  207. package/dist/i3s-converter/i3s-converter.d.ts.map +1 -1
  208. package/dist/i3s-converter/i3s-converter.js +234 -420
  209. package/dist/i3s-converter/json-templates/geometry-definitions.d.ts +7 -0
  210. package/dist/i3s-converter/json-templates/geometry-definitions.d.ts.map +1 -0
  211. package/dist/i3s-converter/json-templates/geometry-definitions.js +87 -0
  212. package/dist/i3s-converter/json-templates/layers.d.ts +1 -30
  213. package/dist/i3s-converter/json-templates/layers.d.ts.map +1 -1
  214. package/dist/i3s-converter/json-templates/layers.js +2 -86
  215. package/dist/i3s-converter/json-templates/shared-resources.js +3 -3
  216. package/dist/i3s-converter/types.d.ts +37 -55
  217. package/dist/i3s-converter/types.d.ts.map +1 -1
  218. package/dist/lib/utils/file-utils.d.ts +17 -1
  219. package/dist/lib/utils/file-utils.d.ts.map +1 -1
  220. package/dist/lib/utils/file-utils.js +64 -7
  221. package/dist/lib/utils/write-queue.d.ts +19 -2
  222. package/dist/lib/utils/write-queue.d.ts.map +1 -1
  223. package/dist/lib/utils/write-queue.js +26 -7
  224. package/dist/pgm-loader.d.ts.map +1 -1
  225. package/dist/pgm-loader.js +2 -1
  226. package/dist/workers/3d-tiles-attributes-worker.js +1 -1
  227. package/dist/workers/i3s-attributes-worker.js +1 -1
  228. package/package.json +18 -16
  229. package/src/3d-tiles-attributes-worker.ts +1 -1
  230. package/src/3d-tiles-converter/3d-tiles-converter.ts +71 -55
  231. package/src/3d-tiles-converter/helpers/b3dm-converter.ts +25 -18
  232. package/src/converter-cli.ts +38 -4
  233. package/src/deps-installer/deps-installer.ts +38 -2
  234. package/src/i3s-attributes-worker.ts +5 -1
  235. package/src/i3s-converter/helpers/batch-ids-extensions.ts +38 -14
  236. package/src/i3s-converter/helpers/coordinate-converter.ts +10 -8
  237. package/src/i3s-converter/helpers/feature-attributes.ts +247 -0
  238. package/src/i3s-converter/helpers/geometry-attributes.ts +46 -18
  239. package/src/i3s-converter/helpers/geometry-converter.ts +405 -108
  240. package/src/i3s-converter/helpers/gltf-attributes.ts +55 -35
  241. package/src/i3s-converter/helpers/node-index-document.ts +306 -0
  242. package/src/i3s-converter/helpers/node-pages.ts +222 -109
  243. package/src/i3s-converter/i3s-converter.ts +279 -499
  244. package/src/i3s-converter/json-templates/geometry-definitions.ts +83 -0
  245. package/src/i3s-converter/json-templates/layers.ts +2 -91
  246. package/src/i3s-converter/json-templates/shared-resources.ts +3 -3
  247. package/src/i3s-converter/types.ts +31 -51
  248. package/src/lib/utils/file-utils.ts +62 -7
  249. package/src/lib/utils/write-queue.ts +43 -10
  250. package/src/pgm-loader.ts +2 -2
  251. package/src/workers/3d-tiles-attributes-worker.ts +1 -1
  252. 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,56 +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;
124
- };
125
-
126
- /**
127
- * 3DTilesNext EXT_feature_metadata extension
128
- * Spec - https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_feature_metadata
129
- */
130
- export type ExtFeatureMetadata = {
131
- /** Feature ids definition in attributes */
132
- featureIdAttributes?: ExtFeatureMetadataAttribute[];
133
- /** Feature ids definition in textures */
134
- featureIdTextures?: ExtFeatureMetadataAttribute[];
139
+ texture?: GLTFImagePostprocessed;
140
+ /** Metadata of all merged materials */
141
+ mergedMaterials: MergedMaterial[];
135
142
  };
136
143
 
137
- /**
138
- * Attribute which described featureIds definition.
139
- */
140
- export type ExtFeatureMetadataAttribute = {
141
- /** Name of feature table */
142
- featureTable: string;
143
- /** Described how feature ids are defined */
144
- featureIds: ExtFeatureMetadataFeatureIds;
145
- };
146
-
147
- /**
148
- * Defining featureIds by attributes or implicitly.
149
- */
150
- type ExtFeatureMetadataFeatureIds = {
151
- /** Name of attribute where featureIds are defined */
152
- attribute?: string;
153
- /** Sets a constant feature ID for each vertex. The default is 0. */
154
- constant?: number;
155
- /** Sets the rate at which feature IDs increment.
156
- * If divisor is zero then constant is used.
157
- * If divisor is greater than zero the feature ID increments once per divisor sets of vertices, starting at constant.
158
- * The default is 0
159
- */
160
- divisor?: number;
161
- /** gLTF textureInfo object - https://github.com/CesiumGS/glTF/blob/3d-tiles-next/specification/2.0/schema/textureInfo.schema.json */
162
- texture?: ExtFeatureMetadataTexture;
163
- /** Must be a single channel ("r", "g", "b", or "a") */
164
- channels?: 'r' | 'g' | 'b' | 'a';
165
- };
166
-
167
- /**
168
- * Reference to a texture.
169
- */
170
- type ExtFeatureMetadataTexture = {
171
- /** The set index of texture's TEXCOORD attribute used for texture coordinate mapping.*/
172
- texCoord: number;
173
- /** The index of the texture. */
174
- index: number;
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;
175
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
  }
@@ -1,8 +1,28 @@
1
1
  import {Queue} from './queue';
2
+ import process from 'process';
3
+
4
+ /** Memory limit size is based on testing */
5
+ const MEMORY_LIMIT = 4 * 1024 * 1024 * 1024; // 4GB
2
6
 
3
7
  export type WriteQueueItem = {
4
8
  archiveKey?: string;
5
- 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>;
6
26
  };
7
27
 
8
28
  export default class WriteQueue<T extends WriteQueueItem> extends Queue<T> {
@@ -18,6 +38,22 @@ export default class WriteQueue<T extends WriteQueueItem> extends Queue<T> {
18
38
  this.writeConcurrency = writeConcurrency;
19
39
  }
20
40
 
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
+ }
54
+ }
55
+ }
56
+
21
57
  startListening() {
22
58
  this.intervalId = setInterval(this.startWrite.bind(this), this.listeningInterval);
23
59
  }
@@ -29,12 +65,9 @@ export default class WriteQueue<T extends WriteQueueItem> extends Queue<T> {
29
65
  }
30
66
 
31
67
  async startWrite(): Promise<void> {
32
- if (this.writePromise) {
33
- await this.writePromise;
34
- this.writePromise = null;
35
- return;
68
+ if (!this.writePromise) {
69
+ this.writePromise = this.doWrite();
36
70
  }
37
- this.writePromise = this.doWrite();
38
71
  await this.writePromise;
39
72
  this.writePromise = null;
40
73
  }
@@ -46,7 +79,7 @@ export default class WriteQueue<T extends WriteQueueItem> extends Queue<T> {
46
79
 
47
80
  private async doWrite(): Promise<void> {
48
81
  while (this.length) {
49
- const promises: Promise<string>[] = [];
82
+ const promises: Promise<string | null>[] = [];
50
83
  const archiveKeys: (string | undefined)[] = [];
51
84
  for (let i = 0; i < this.writeConcurrency; i++) {
52
85
  const item = this.dequeue();
@@ -55,17 +88,17 @@ export default class WriteQueue<T extends WriteQueueItem> extends Queue<T> {
55
88
  }
56
89
  const {archiveKey, writePromise} = item as WriteQueueItem;
57
90
  archiveKeys.push(archiveKey);
58
- promises.push(writePromise);
91
+ const promise = writePromise();
92
+ promises.push(promise);
59
93
  }
60
94
  const writeResults = await Promise.allSettled(promises);
61
95
  this.updateFileMap(archiveKeys, writeResults);
62
96
  }
63
- this.writePromise = null;
64
97
  }
65
98
 
66
99
  private updateFileMap(
67
100
  archiveKeys: (string | undefined)[],
68
- writeResults: PromiseSettledResult<string>[]
101
+ writeResults: PromiseSettledResult<string | null>[]
69
102
  ) {
70
103
  for (let i = 0; i < archiveKeys.length; i++) {
71
104
  const archiveKey = archiveKeys[i];
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
  );