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

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 (176) hide show
  1. package/bin/converter.js +1 -1
  2. package/dist/3d-tiles-attributes-worker.js +2 -2
  3. package/dist/3d-tiles-attributes-worker.js.map +3 -3
  4. package/dist/3d-tiles-converter/3d-tiles-converter.d.ts.map +1 -1
  5. package/dist/3d-tiles-converter/3d-tiles-converter.js +4 -3
  6. package/dist/3d-tiles-converter/helpers/b3dm-converter.d.ts +0 -8
  7. package/dist/3d-tiles-converter/helpers/b3dm-converter.d.ts.map +1 -1
  8. package/dist/3d-tiles-converter/helpers/b3dm-converter.js +2 -15
  9. package/dist/converter.min.js +75 -76
  10. package/dist/deps-installer/deps-installer.js +4 -4
  11. package/dist/dist.min.js +2529 -1884
  12. package/dist/es5/3d-tiles-attributes-worker.js +1 -1
  13. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js +0 -3
  14. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
  15. package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js +2 -10
  16. package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -1
  17. package/dist/es5/deps-installer/deps-installer.js +5 -5
  18. package/dist/es5/deps-installer/deps-installer.js.map +1 -1
  19. package/dist/es5/i3s-attributes-worker.js +1 -1
  20. package/dist/es5/i3s-attributes-worker.js.map +1 -1
  21. package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js +4 -4
  22. package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js.map +1 -1
  23. package/dist/es5/i3s-converter/helpers/coordinate-converter.js +6 -7
  24. package/dist/es5/i3s-converter/helpers/coordinate-converter.js.map +1 -1
  25. package/dist/es5/i3s-converter/helpers/geometry-converter.js +49 -30
  26. package/dist/es5/i3s-converter/helpers/geometry-converter.js.map +1 -1
  27. package/dist/es5/i3s-converter/helpers/gltf-attributes.js +46 -16
  28. package/dist/es5/i3s-converter/helpers/gltf-attributes.js.map +1 -1
  29. package/dist/es5/i3s-converter/helpers/load-3d-tiles.js +82 -0
  30. package/dist/es5/i3s-converter/helpers/load-3d-tiles.js.map +1 -0
  31. package/dist/es5/i3s-converter/helpers/node-index-document.js +74 -45
  32. package/dist/es5/i3s-converter/helpers/node-index-document.js.map +1 -1
  33. package/dist/es5/i3s-converter/helpers/preprocess-3d-tiles.js +111 -0
  34. package/dist/es5/i3s-converter/helpers/preprocess-3d-tiles.js.map +1 -0
  35. package/dist/es5/i3s-converter/helpers/tileset-traversal.js +82 -0
  36. package/dist/es5/i3s-converter/helpers/tileset-traversal.js.map +1 -0
  37. package/dist/es5/i3s-converter/i3s-converter.js +545 -523
  38. package/dist/es5/i3s-converter/i3s-converter.js.map +1 -1
  39. package/dist/es5/i3s-converter/types.js +16 -0
  40. package/dist/es5/i3s-converter/types.js.map +1 -1
  41. package/dist/es5/i3s-server/README.md +19 -0
  42. package/dist/es5/i3s-server/app.js +10 -1
  43. package/dist/es5/i3s-server/app.js.map +1 -1
  44. package/dist/es5/i3s-server/controllers/slpk-controller.js +84 -0
  45. package/dist/es5/i3s-server/controllers/slpk-controller.js.map +1 -0
  46. package/dist/es5/i3s-server/routes/slpk-router.js +71 -0
  47. package/dist/es5/i3s-server/routes/slpk-router.js.map +1 -0
  48. package/dist/es5/i3s-server/utils/create-scene-server.js +17 -0
  49. package/dist/es5/i3s-server/utils/create-scene-server.js.map +1 -0
  50. package/dist/es5/lib/utils/file-utils.js +1 -1
  51. package/dist/es5/lib/utils/file-utils.js.map +1 -1
  52. package/dist/es5/lib/utils/geometry-utils.js +15 -0
  53. package/dist/es5/lib/utils/geometry-utils.js.map +1 -0
  54. package/dist/es5/lib/utils/lod-conversion-utils.js.map +1 -1
  55. package/dist/es5/pgm-loader.js +1 -1
  56. package/dist/esm/3d-tiles-attributes-worker.js +1 -1
  57. package/dist/esm/3d-tiles-converter/3d-tiles-converter.js +0 -3
  58. package/dist/esm/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
  59. package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js +2 -8
  60. package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -1
  61. package/dist/esm/deps-installer/deps-installer.js +5 -5
  62. package/dist/esm/deps-installer/deps-installer.js.map +1 -1
  63. package/dist/esm/i3s-attributes-worker.js +1 -1
  64. package/dist/esm/i3s-attributes-worker.js.map +1 -1
  65. package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js +4 -4
  66. package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js.map +1 -1
  67. package/dist/esm/i3s-converter/helpers/coordinate-converter.js +6 -7
  68. package/dist/esm/i3s-converter/helpers/coordinate-converter.js.map +1 -1
  69. package/dist/esm/i3s-converter/helpers/geometry-converter.js +37 -18
  70. package/dist/esm/i3s-converter/helpers/geometry-converter.js.map +1 -1
  71. package/dist/esm/i3s-converter/helpers/gltf-attributes.js +50 -16
  72. package/dist/esm/i3s-converter/helpers/gltf-attributes.js.map +1 -1
  73. package/dist/esm/i3s-converter/helpers/load-3d-tiles.js +35 -0
  74. package/dist/esm/i3s-converter/helpers/load-3d-tiles.js.map +1 -0
  75. package/dist/esm/i3s-converter/helpers/node-index-document.js +14 -1
  76. package/dist/esm/i3s-converter/helpers/node-index-document.js.map +1 -1
  77. package/dist/esm/i3s-converter/helpers/preprocess-3d-tiles.js +48 -0
  78. package/dist/esm/i3s-converter/helpers/preprocess-3d-tiles.js.map +1 -0
  79. package/dist/esm/i3s-converter/helpers/tileset-traversal.js +14 -0
  80. package/dist/esm/i3s-converter/helpers/tileset-traversal.js.map +1 -0
  81. package/dist/esm/i3s-converter/i3s-converter.js +134 -127
  82. package/dist/esm/i3s-converter/i3s-converter.js.map +1 -1
  83. package/dist/esm/i3s-converter/types.js +10 -1
  84. package/dist/esm/i3s-converter/types.js.map +1 -1
  85. package/dist/esm/i3s-server/README.md +19 -0
  86. package/dist/esm/i3s-server/app.js +11 -1
  87. package/dist/esm/i3s-server/app.js.map +1 -1
  88. package/dist/esm/i3s-server/controllers/slpk-controller.js +36 -0
  89. package/dist/esm/i3s-server/controllers/slpk-controller.js.map +1 -0
  90. package/dist/esm/i3s-server/routes/slpk-router.js +33 -0
  91. package/dist/esm/i3s-server/routes/slpk-router.js.map +1 -0
  92. package/dist/esm/i3s-server/utils/create-scene-server.js +16 -0
  93. package/dist/esm/i3s-server/utils/create-scene-server.js.map +1 -0
  94. package/dist/esm/lib/utils/file-utils.js +1 -1
  95. package/dist/esm/lib/utils/file-utils.js.map +1 -1
  96. package/dist/esm/lib/utils/geometry-utils.js +8 -0
  97. package/dist/esm/lib/utils/geometry-utils.js.map +1 -0
  98. package/dist/esm/lib/utils/lod-conversion-utils.js.map +1 -1
  99. package/dist/esm/pgm-loader.js +1 -1
  100. package/dist/i3s-attributes-worker.d.ts +10 -2
  101. package/dist/i3s-attributes-worker.d.ts.map +1 -1
  102. package/dist/i3s-attributes-worker.js +2 -2
  103. package/dist/i3s-attributes-worker.js.map +3 -3
  104. package/dist/i3s-converter/helpers/batch-ids-extensions.d.ts +4 -2
  105. package/dist/i3s-converter/helpers/batch-ids-extensions.d.ts.map +1 -1
  106. package/dist/i3s-converter/helpers/batch-ids-extensions.js +4 -7
  107. package/dist/i3s-converter/helpers/coordinate-converter.d.ts +3 -4
  108. package/dist/i3s-converter/helpers/coordinate-converter.d.ts.map +1 -1
  109. package/dist/i3s-converter/helpers/coordinate-converter.js +8 -9
  110. package/dist/i3s-converter/helpers/geometry-converter.d.ts +9 -4
  111. package/dist/i3s-converter/helpers/geometry-converter.d.ts.map +1 -1
  112. package/dist/i3s-converter/helpers/geometry-converter.js +84 -54
  113. package/dist/i3s-converter/helpers/gltf-attributes.d.ts +22 -3
  114. package/dist/i3s-converter/helpers/gltf-attributes.d.ts.map +1 -1
  115. package/dist/i3s-converter/helpers/gltf-attributes.js +62 -22
  116. package/dist/i3s-converter/helpers/load-3d-tiles.d.ts +18 -0
  117. package/dist/i3s-converter/helpers/load-3d-tiles.d.ts.map +1 -0
  118. package/dist/i3s-converter/helpers/load-3d-tiles.js +53 -0
  119. package/dist/i3s-converter/helpers/node-index-document.d.ts +8 -0
  120. package/dist/i3s-converter/helpers/node-index-document.d.ts.map +1 -1
  121. package/dist/i3s-converter/helpers/node-index-document.js +20 -2
  122. package/dist/i3s-converter/helpers/node-pages.js +1 -1
  123. package/dist/i3s-converter/helpers/preprocess-3d-tiles.d.ts +23 -0
  124. package/dist/i3s-converter/helpers/preprocess-3d-tiles.d.ts.map +1 -0
  125. package/dist/i3s-converter/helpers/preprocess-3d-tiles.js +76 -0
  126. package/dist/i3s-converter/helpers/tileset-traversal.d.ts +25 -0
  127. package/dist/i3s-converter/helpers/tileset-traversal.d.ts.map +1 -0
  128. package/dist/i3s-converter/helpers/tileset-traversal.js +29 -0
  129. package/dist/i3s-converter/i3s-converter.d.ts +40 -40
  130. package/dist/i3s-converter/i3s-converter.d.ts.map +1 -1
  131. package/dist/i3s-converter/i3s-converter.js +150 -125
  132. package/dist/i3s-converter/types.d.ts +18 -0
  133. package/dist/i3s-converter/types.d.ts.map +1 -1
  134. package/dist/i3s-converter/types.js +15 -0
  135. package/dist/i3s-server/app.d.ts.map +1 -1
  136. package/dist/i3s-server/app.js +9 -1
  137. package/dist/i3s-server/controllers/slpk-controller.d.ts +3 -0
  138. package/dist/i3s-server/controllers/slpk-controller.d.ts.map +1 -0
  139. package/dist/i3s-server/controllers/slpk-controller.js +32 -0
  140. package/dist/i3s-server/routes/slpk-router.d.ts +3 -0
  141. package/dist/i3s-server/routes/slpk-router.d.ts.map +1 -0
  142. package/dist/i3s-server/routes/slpk-router.js +33 -0
  143. package/dist/i3s-server/utils/create-scene-server.d.ts +11 -0
  144. package/dist/i3s-server/utils/create-scene-server.d.ts.map +1 -0
  145. package/dist/i3s-server/utils/create-scene-server.js +14 -0
  146. package/dist/lib/utils/file-utils.d.ts.map +1 -1
  147. package/dist/lib/utils/file-utils.js +2 -1
  148. package/dist/lib/utils/geometry-utils.d.ts +9 -0
  149. package/dist/lib/utils/geometry-utils.d.ts.map +1 -0
  150. package/dist/lib/utils/geometry-utils.js +18 -0
  151. package/dist/lib/utils/lod-conversion-utils.d.ts +3 -2
  152. package/dist/lib/utils/lod-conversion-utils.d.ts.map +1 -1
  153. package/dist/lib/utils/lod-conversion-utils.js +1 -1
  154. package/package.json +15 -16
  155. package/src/3d-tiles-converter/3d-tiles-converter.ts +9 -8
  156. package/src/3d-tiles-converter/helpers/b3dm-converter.ts +2 -16
  157. package/src/deps-installer/deps-installer.ts +4 -4
  158. package/src/i3s-attributes-worker.ts +11 -2
  159. package/src/i3s-converter/helpers/batch-ids-extensions.ts +15 -19
  160. package/src/i3s-converter/helpers/coordinate-converter.ts +11 -10
  161. package/src/i3s-converter/helpers/geometry-converter.ts +154 -95
  162. package/src/i3s-converter/helpers/gltf-attributes.ts +85 -25
  163. package/src/i3s-converter/helpers/load-3d-tiles.ts +68 -0
  164. package/src/i3s-converter/helpers/node-index-document.ts +22 -2
  165. package/src/i3s-converter/helpers/preprocess-3d-tiles.ts +81 -0
  166. package/src/i3s-converter/helpers/tileset-traversal.ts +51 -0
  167. package/src/i3s-converter/i3s-converter.ts +229 -178
  168. package/src/i3s-converter/types.ts +20 -0
  169. package/src/i3s-server/README.md +19 -0
  170. package/src/i3s-server/app.js +8 -1
  171. package/src/i3s-server/controllers/slpk-controller.js +38 -0
  172. package/src/i3s-server/routes/slpk-router.js +33 -0
  173. package/src/i3s-server/utils/create-scene-server.js +15 -0
  174. package/src/lib/utils/file-utils.ts +2 -1
  175. package/src/lib/utils/geometry-utils.ts +14 -0
  176. package/src/lib/utils/lod-conversion-utils.ts +6 -2
@@ -1,7 +1,6 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
2
  var _process$env;
3
3
  import { load, encode, fetchFile, getLoaderOptions, isBrowser } from '@loaders.gl/core';
4
- import { Tileset3D } from '@loaders.gl/tiles';
5
4
  import { CesiumIonLoader, Tiles3DLoader } from '@loaders.gl/3d-tiles';
6
5
  import { join } from 'path';
7
6
  import { v4 as uuidv4 } from 'uuid';
@@ -23,6 +22,7 @@ import { SHARED_RESOURCES as sharedResourcesTemplate } from './json-templates/sh
23
22
  import { validateNodeBoundingVolumes } from './helpers/node-debug';
24
23
  import { KTX2BasisWriterWorker } from '@loaders.gl/textures';
25
24
  import { ImageWriter } from '@loaders.gl/images';
25
+ import { GltfPrimitiveModeString } from './types';
26
26
  import { getWorkerURL, WorkerFarm } from '@loaders.gl/worker-utils';
27
27
  import { DracoWriterWorker } from '@loaders.gl/draco';
28
28
  import WriteQueue from '../lib/utils/write-queue';
@@ -30,6 +30,11 @@ import { I3SAttributesWorker } from '../i3s-attributes-worker';
30
30
  import { BROWSER_ERROR_MESSAGE } from '../constants';
31
31
  import { createdStorageAttribute, createFieldAttribute, createPopupInfo, getAttributeType, getFieldAttributeType } from './helpers/feature-attributes';
32
32
  import { NodeIndexDocument } from './helpers/node-index-document';
33
+ import { loadNestedTileset, loadTile3DContent } from './helpers/load-3d-tiles';
34
+ import { Matrix4 } from '@math.gl/core';
35
+ import { createBoundingVolume } from '@loaders.gl/tiles';
36
+ import { traverseDatasetWith } from './helpers/tileset-traversal';
37
+ import { analyzeTileContent, mergePreprocessData } from './helpers/preprocess-3d-tiles';
33
38
  const ION_DEFAULT_TOKEN = ((_process$env = process.env) === null || _process$env === void 0 ? void 0 : _process$env.IonToken) || 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJlYWMxMzcyYy0zZjJkLTQwODctODNlNi01MDRkZmMzMjIxOWIiLCJpZCI6OTYyMCwic2NvcGVzIjpbImFzbCIsImFzciIsImdjIl0sImlhdCI6MTU2Mjg2NjI3M30.1FNiClUyk00YH_nWfSGpiQAjR5V2OvREDq1PJ5QMjWQ';
34
39
  const HARDCODED_NODES_PER_PAGE = 64;
35
40
  const _3D_TILES = '3DTILES';
@@ -54,6 +59,18 @@ export default class I3SConverter {
54
59
  _defineProperty(this, "conversionStartTime", [0, 0]);
55
60
  _defineProperty(this, "refreshTokenTime", [0, 0]);
56
61
  _defineProperty(this, "sourceTileset", null);
62
+ _defineProperty(this, "loadOptions", {
63
+ _nodeWorkers: true,
64
+ reuseWorkers: true,
65
+ basis: {
66
+ format: 'rgba32',
67
+ workerUrl: './modules/textures/dist/basis-worker-node.js'
68
+ },
69
+ draco: {
70
+ workerUrl: './modules/draco/dist/draco-worker-node.js'
71
+ },
72
+ fetch: {}
73
+ });
57
74
  _defineProperty(this, "geoidHeightModel", null);
58
75
  _defineProperty(this, "Loader", Tiles3DLoader);
59
76
  _defineProperty(this, "generateTextures", void 0);
@@ -62,6 +79,9 @@ export default class I3SConverter {
62
79
  _defineProperty(this, "workerSource", {});
63
80
  _defineProperty(this, "writeQueue", new WriteQueue());
64
81
  _defineProperty(this, "compressList", null);
82
+ _defineProperty(this, "preprocessData", {
83
+ meshTopologyTypes: new Set()
84
+ });
65
85
  this.nodePages = new NodePages(writeFile, HARDCODED_NODES_PER_PAGE, this);
66
86
  this.options = {};
67
87
  this.layers0Path = '';
@@ -130,57 +150,81 @@ export default class I3SConverter {
130
150
  }
131
151
  await this.loadWorkers();
132
152
  try {
133
- var _sourceTilesetJson$ro, _sourceTilesetJson$ro2;
134
153
  const preloadOptions = await this._fetchPreloadOptions();
135
- const tilesetOptions = {
136
- loadOptions: {
137
- _nodeWorkers: true,
138
- reuseWorkers: true,
139
- basis: {
140
- format: 'rgba32'
141
- },
142
- 'basis-nodejs': {
143
- format: 'rgba32',
144
- workerUrl: './modules/textures/dist/basis-nodejs-worker.js'
145
- },
146
- 'draco-nodejs': {
147
- workerUrl: './modules/draco/dist/draco-nodejs-worker.js'
148
- }
149
- }
150
- };
151
154
  if (preloadOptions.headers) {
152
- tilesetOptions.loadOptions.fetch = {
155
+ this.loadOptions.fetch = {
153
156
  headers: preloadOptions.headers
154
157
  };
155
158
  }
156
- Object.assign(tilesetOptions, preloadOptions);
157
- const sourceTilesetJson = await load(inputUrl, this.Loader, tilesetOptions.loadOptions);
158
- this.sourceTileset = new Tileset3D(sourceTilesetJson, tilesetOptions);
159
- await this._createAndSaveTileset(outputPath, tilesetName, sourceTilesetJson === null || sourceTilesetJson === void 0 ? void 0 : (_sourceTilesetJson$ro = sourceTilesetJson.root) === null || _sourceTilesetJson$ro === void 0 ? void 0 : (_sourceTilesetJson$ro2 = _sourceTilesetJson$ro.boundingVolume) === null || _sourceTilesetJson$ro2 === void 0 ? void 0 : _sourceTilesetJson$ro2.region);
160
- await this._finishConversion({
161
- slpk: Boolean(slpk),
162
- outputPath,
163
- tilesetName
164
- });
165
- return sourceTilesetJson;
159
+ this.sourceTileset = await load(inputUrl, this.Loader, this.loadOptions);
160
+ const preprocessResult = await this.preprocessConversion();
161
+ if (preprocessResult) {
162
+ await this._createAndSaveTileset(outputPath, tilesetName);
163
+ await this._finishConversion({
164
+ slpk: Boolean(slpk),
165
+ outputPath,
166
+ tilesetName
167
+ });
168
+ }
166
169
  } catch (error) {
167
170
  throw error;
168
171
  } finally {
172
+ await this.writeQueue.finalize();
169
173
  const workerFarm = WorkerFarm.getWorkerFarm({});
170
174
  workerFarm.destroy();
171
175
  }
176
+ return 'success';
177
+ }
178
+ async preprocessConversion() {
179
+ console.log("Analyze source tileset");
180
+ const sourceRootTile = this.sourceTileset.root;
181
+ await traverseDatasetWith(sourceRootTile, null, this.analyzeTile.bind(this), undefined, this.options.maxDepth);
182
+ const {
183
+ meshTopologyTypes
184
+ } = this.preprocessData;
185
+ console.log("------------------------------------------------");
186
+ console.log("Preprocess results:");
187
+ console.log("glTF mesh topology types: ".concat(Array.from(meshTopologyTypes).join(', ')));
188
+ console.log("------------------------------------------------");
189
+ if (!meshTopologyTypes.has(GltfPrimitiveModeString.TRIANGLES) && !meshTopologyTypes.has(GltfPrimitiveModeString.TRIANGLE_STRIP)) {
190
+ console.log('The tileset is of unsupported mesh topology types. The conversion will be interrupted.');
191
+ console.log("------------------------------------------------");
192
+ return false;
193
+ }
194
+ return true;
172
195
  }
173
- async _createAndSaveTileset(outputPath, tilesetName, boundingVolumeRegion) {
196
+ async analyzeTile(sourceTile, traversalProps) {
197
+ if (sourceTile.type === 'json') {
198
+ await loadNestedTileset(this.sourceTileset, sourceTile, this.loadOptions);
199
+ return null;
200
+ }
201
+ if (sourceTile.id) {
202
+ console.log("[analyze]: ".concat(sourceTile.id));
203
+ }
204
+ const tileContent = await loadTile3DContent(this.sourceTileset, sourceTile, {
205
+ ...this.loadOptions,
206
+ '3d-tiles': {
207
+ ...this.loadOptions['3d-tiles'],
208
+ loadGLTF: false
209
+ }
210
+ });
211
+ const tilePreprocessData = await analyzeTileContent(sourceTile, tileContent);
212
+ mergePreprocessData(this.preprocessData, tilePreprocessData);
213
+ return null;
214
+ }
215
+ async _createAndSaveTileset(outputPath, tilesetName) {
216
+ var _this$sourceTileset, _this$sourceTileset$r, _this$sourceTileset$r2;
174
217
  const tilesetPath = join("".concat(outputPath), "".concat(tilesetName));
175
218
  try {
176
219
  await removeDir(tilesetPath);
177
220
  } catch (e) {}
178
221
  this.layers0Path = join(tilesetPath, 'SceneServer', 'layers', '0');
179
- this._formLayers0(tilesetName, boundingVolumeRegion);
180
222
  this.materialDefinitions = [];
181
223
  this.materialMap = new Map();
182
224
  const sourceRootTile = this.sourceTileset.root;
183
- const boundingVolumes = createBoundingVolumes(sourceRootTile, this.geoidHeightModel);
225
+ const sourceBoundingVolume = createBoundingVolume(sourceRootTile.boundingVolume, new Matrix4(sourceRootTile.transform), null);
226
+ this._formLayers0(tilesetName, sourceBoundingVolume, (_this$sourceTileset = this.sourceTileset) === null || _this$sourceTileset === void 0 ? void 0 : (_this$sourceTileset$r = _this$sourceTileset.root) === null || _this$sourceTileset$r === void 0 ? void 0 : (_this$sourceTileset$r2 = _this$sourceTileset$r.boundingVolume) === null || _this$sourceTileset$r2 === void 0 ? void 0 : _this$sourceTileset$r2.region);
227
+ const boundingVolumes = createBoundingVolumes(sourceBoundingVolume, this.geoidHeightModel);
184
228
  await this.nodePages.push({
185
229
  index: 0,
186
230
  lodThreshold: 0,
@@ -188,7 +232,10 @@ export default class I3SConverter {
188
232
  children: []
189
233
  });
190
234
  const rootNode = await NodeIndexDocument.createRootNode(boundingVolumes, this);
191
- await this._convertNodesTree(rootNode, sourceRootTile);
235
+ await traverseDatasetWith(sourceRootTile, {
236
+ transform: new Matrix4(sourceRootTile.transform),
237
+ parentNodes: [rootNode]
238
+ }, this.convertTile.bind(this), this.finalizeTile.bind(this), this.options.maxDepth);
192
239
  this.layers0.materialDefinitions = this.materialDefinitions;
193
240
  this.layers0.geometryDefinitions = transform(this.geometryConfigs.map(config => ({
194
241
  geometryConfig: {
@@ -209,9 +256,12 @@ export default class I3SConverter {
209
256
  await this.writeQueue.finalize();
210
257
  await this._createSlpk(tilesetPath);
211
258
  }
212
- _formLayers0(tilesetName, boundingVolumeRegion) {
213
- var _this$sourceTileset, _this$sourceTileset2, _this$sourceTileset2$;
214
- const fullExtent = convertBoundingVolumeToI3SFullExtent(((_this$sourceTileset = this.sourceTileset) === null || _this$sourceTileset === void 0 ? void 0 : _this$sourceTileset.boundingVolume) || ((_this$sourceTileset2 = this.sourceTileset) === null || _this$sourceTileset2 === void 0 ? void 0 : (_this$sourceTileset2$ = _this$sourceTileset2.root) === null || _this$sourceTileset2$ === void 0 ? void 0 : _this$sourceTileset2$.boundingVolume));
259
+ _formLayers0(tilesetName, sourceBoundingVolume, boundingVolumeRegion) {
260
+ var _this$sourceTileset2;
261
+ if (!((_this$sourceTileset2 = this.sourceTileset) !== null && _this$sourceTileset2 !== void 0 && _this$sourceTileset2.root)) {
262
+ return;
263
+ }
264
+ const fullExtent = convertBoundingVolumeToI3SFullExtent(sourceBoundingVolume);
215
265
  if (boundingVolumeRegion) {
216
266
  fullExtent.zmin = boundingVolumeRegion[4];
217
267
  fullExtent.zmax = boundingVolumeRegion[5];
@@ -234,24 +284,6 @@ export default class I3SConverter {
234
284
  };
235
285
  this.layers0 = transform(layers0data, layersTemplate());
236
286
  }
237
- async _convertNodesTree(rootNode, sourceRootTile) {
238
- await this.sourceTileset._loadTile(sourceRootTile);
239
- if (this.isContentSupported(sourceRootTile)) {
240
- const childNodes = await this._createNode(rootNode, sourceRootTile, 0);
241
- for (const childNode of childNodes) {
242
- await childNode.save();
243
- }
244
- await rootNode.addChildren(childNodes);
245
- } else {
246
- await this._addChildrenWithNeighborsAndWriteFile({
247
- parentNode: rootNode,
248
- sourceTiles: sourceRootTile.children,
249
- level: 1
250
- });
251
- }
252
- await sourceRootTile.unloadContent();
253
- await rootNode.save();
254
- }
255
287
  async _writeLayers0() {
256
288
  if (this.options.slpk) {
257
289
  await this.writeQueue.enqueue({
@@ -274,72 +306,58 @@ export default class I3SConverter {
274
306
  } catch (e) {}
275
307
  }
276
308
  }
277
- async _addChildrenWithNeighborsAndWriteFile(data) {
278
- await this._addChildren(data);
279
- await data.parentNode.addNeighbors();
280
- }
281
- async convertNestedTileset(_ref) {
282
- let {
283
- parentNode,
284
- sourceTile,
285
- level
286
- } = _ref;
287
- await this.sourceTileset._loadTile(sourceTile);
288
- await this._addChildren({
289
- parentNode,
290
- sourceTiles: sourceTile.children,
291
- level: level + 1
292
- });
293
- await sourceTile.unloadContent();
294
- }
295
- async convertNode(_ref2) {
296
- let {
297
- parentNode,
298
- sourceTile,
299
- level
300
- } = _ref2;
301
- const childNodes = await this._createNode(parentNode, sourceTile, level);
302
- await parentNode.addChildren(childNodes);
303
- }
304
- async _addChildren(data) {
305
- const {
306
- sourceTiles,
307
- parentNode,
308
- level
309
- } = data;
310
- if (this.options.maxDepth && level > this.options.maxDepth) {
311
- return;
312
- }
313
- for (const sourceTile of sourceTiles) {
309
+ async convertTile(sourceTile, traversalProps) {
310
+ if (sourceTile.type === 'json' || sourceTile.type === 'empty') {
314
311
  if (sourceTile.type === 'json') {
315
- await this.convertNestedTileset({
316
- parentNode,
317
- sourceTile,
318
- level
319
- });
320
- } else {
321
- await this.convertNode({
322
- parentNode,
323
- sourceTile,
324
- level
325
- });
312
+ if (sourceTile.id) {
313
+ console.log("[load]: ".concat(sourceTile.id));
314
+ }
315
+ await loadNestedTileset(this.sourceTileset, sourceTile, this.loadOptions);
326
316
  }
327
- if (sourceTile.id) {
328
- console.log(sourceTile.id);
317
+ return traversalProps;
318
+ }
319
+ if (sourceTile.id) {
320
+ console.log("[convert]: ".concat(sourceTile.id));
321
+ }
322
+ const {
323
+ parentNodes,
324
+ transform
325
+ } = traversalProps;
326
+ let transformationMatrix = transform.clone();
327
+ if (sourceTile.transform) {
328
+ transformationMatrix = transformationMatrix.multiplyRight(sourceTile.transform);
329
+ }
330
+ const parentNode = parentNodes[0];
331
+ const childNodes = await this._createNode(parentNode, sourceTile, transformationMatrix);
332
+ await parentNode.addChildren(childNodes);
333
+ const newTraversalProps = {
334
+ transform: transformationMatrix,
335
+ parentNodes: childNodes
336
+ };
337
+ return newTraversalProps;
338
+ }
339
+ async finalizeTile(conversionResults, currentTraversalProps) {
340
+ for (const result of conversionResults) {
341
+ for (const node of result.parentNodes) {
342
+ await node.addNeighbors();
329
343
  }
330
344
  }
345
+ for (const node of currentTraversalProps.parentNodes) {
346
+ await node.save();
347
+ }
331
348
  }
332
- async _createNode(parentNode, sourceTile, level) {
349
+ async _createNode(parentNode, sourceTile, transformationMatrix) {
333
350
  var _this$layers, _this$layers$attribut;
334
351
  this._checkAddRefinementTypeForTile(sourceTile);
335
352
  await this._updateTilesetOptions();
336
- await this.sourceTileset._loadTile(sourceTile);
337
- let boundingVolumes = createBoundingVolumes(sourceTile, this.geoidHeightModel);
338
- const propertyTable = getPropertyTable(sourceTile.content);
353
+ const tileContent = await loadTile3DContent(this.sourceTileset, sourceTile, this.loadOptions);
354
+ const sourceBoundingVolume = createBoundingVolume(sourceTile.boundingVolume, transformationMatrix, null);
355
+ let boundingVolumes = createBoundingVolumes(sourceBoundingVolume, this.geoidHeightModel);
356
+ const propertyTable = getPropertyTable(tileContent);
339
357
  if (propertyTable && !((_this$layers = this.layers0) !== null && _this$layers !== void 0 && (_this$layers$attribut = _this$layers.attributeStorageInfo) !== null && _this$layers$attribut !== void 0 && _this$layers$attribut.length)) {
340
358
  this._convertPropertyTableToNodeAttributes(propertyTable);
341
359
  }
342
- const resourcesData = await this._convertResources(sourceTile, parentNode.inPageId, propertyTable);
360
+ const resourcesData = await this._convertResources(sourceTile, transformationMatrix, sourceBoundingVolume, tileContent, parentNode.inPageId, propertyTable);
343
361
  const nodes = [];
344
362
  const nodeIds = [];
345
363
  const nodesInPage = [];
@@ -380,17 +398,11 @@ export default class I3SConverter {
380
398
  nodeIds.push(nodeInPage.index);
381
399
  nodesInPage.push(nodeInPage);
382
400
  }
383
- sourceTile.unloadContent();
384
- await this._addChildrenWithNeighborsAndWriteFile({
385
- parentNode: nodes[0],
386
- sourceTiles: sourceTile.children,
387
- level: level + 1
388
- });
389
401
  return nodes;
390
402
  }
391
- async _convertResources(sourceTile, parentId, propertyTable) {
403
+ async _convertResources(sourceTile, transformationMatrix, boundingVolume, tileContent, parentId, propertyTable) {
392
404
  var _this$layers2;
393
- if (!this.isContentSupported(sourceTile)) {
405
+ if (!this.isContentSupported(sourceTile) || !tileContent) {
394
406
  return null;
395
407
  }
396
408
  const draftObb = {
@@ -398,7 +410,7 @@ export default class I3SConverter {
398
410
  halfSize: [],
399
411
  quaternion: []
400
412
  };
401
- const resourcesData = await convertB3dmToI3sGeometry(sourceTile.content, async () => (await this.nodePages.push({
413
+ const resourcesData = await convertB3dmToI3sGeometry(tileContent, transformationMatrix, boundingVolume, async () => (await this.nodePages.push({
402
414
  index: 0,
403
415
  obb: draftObb
404
416
  }, parentId)).index, propertyTable, this.featuresHashArray, (_this$layers2 = this.layers0) === null || _this$layers2 === void 0 ? void 0 : _this$layers2.attributeStorageInfo, this.options.draco, this.generateBoundingVolumes, this.options.mergeMaterials, this.geoidHeightModel, this.workerSource);
@@ -717,13 +729,9 @@ export default class I3SConverter {
717
729
  }
718
730
  this.refreshTokenTime = process.hrtime();
719
731
  const preloadOptions = await this._fetchPreloadOptions();
720
- this.sourceTileset.options = {
721
- ...this.sourceTileset.options,
722
- ...preloadOptions
723
- };
724
732
  if (preloadOptions.headers) {
725
- this.sourceTileset.loadOptions.fetch = {
726
- ...this.sourceTileset.loadOptions.fetch,
733
+ this.loadOptions.fetch = {
734
+ ...this.loadOptions.fetch,
727
735
  headers: preloadOptions.headers
728
736
  };
729
737
  console.log('Authorization Bearer token has been updated');
@@ -737,9 +745,8 @@ export default class I3SConverter {
737
745
  }
738
746
  this.refinementCounter.tilesCount += 1;
739
747
  }
740
- isContentSupported(sourceRootTile) {
741
- var _sourceRootTile$conte;
742
- return ['b3dm', 'glTF'].includes(sourceRootTile === null || sourceRootTile === void 0 ? void 0 : (_sourceRootTile$conte = sourceRootTile.content) === null || _sourceRootTile$conte === void 0 ? void 0 : _sourceRootTile$conte.type);
748
+ isContentSupported(sourceTile) {
749
+ return ['b3dm', 'glTF', 'scenegraph'].includes(sourceTile.type || '');
743
750
  }
744
751
  async loadWorkers() {
745
752
  console.log("Loading workers source...");