@loaders.gl/tile-converter 3.3.0-alpha.3 → 3.3.0-alpha.4

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 (88) hide show
  1. package/dist/3d-tiles-attributes-worker.js +1 -1
  2. package/dist/3d-tiles-converter/3d-tiles-converter.d.ts +8 -0
  3. package/dist/3d-tiles-converter/3d-tiles-converter.d.ts.map +1 -1
  4. package/dist/3d-tiles-converter/3d-tiles-converter.js +57 -43
  5. package/dist/converter.min.js +21 -21
  6. package/dist/deps-installer/deps-installer.d.ts +5 -1
  7. package/dist/deps-installer/deps-installer.d.ts.map +1 -1
  8. package/dist/deps-installer/deps-installer.js +21 -1
  9. package/dist/dist.min.js +660 -1016
  10. package/dist/es5/3d-tiles-attributes-worker.js +1 -1
  11. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js +115 -101
  12. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
  13. package/dist/es5/deps-installer/deps-installer.js +70 -6
  14. package/dist/es5/deps-installer/deps-installer.js.map +1 -1
  15. package/dist/es5/i3s-attributes-worker.js +1 -1
  16. package/dist/es5/i3s-attributes-worker.js.map +1 -1
  17. package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js +4 -0
  18. package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js.map +1 -1
  19. package/dist/es5/i3s-converter/helpers/coordinate-converter.js.map +1 -1
  20. package/dist/es5/i3s-converter/helpers/feature-attributes.js +153 -0
  21. package/dist/es5/i3s-converter/helpers/feature-attributes.js.map +1 -1
  22. package/dist/es5/i3s-converter/helpers/geometry-converter.js +40 -44
  23. package/dist/es5/i3s-converter/helpers/geometry-converter.js.map +1 -1
  24. package/dist/es5/i3s-converter/helpers/gltf-attributes.js +55 -36
  25. package/dist/es5/i3s-converter/helpers/gltf-attributes.js.map +1 -1
  26. package/dist/es5/i3s-converter/helpers/node-pages.js +10 -2
  27. package/dist/es5/i3s-converter/helpers/node-pages.js.map +1 -1
  28. package/dist/es5/i3s-converter/i3s-converter.js +364 -435
  29. package/dist/es5/i3s-converter/i3s-converter.js.map +1 -1
  30. package/dist/es5/pgm-loader.js +1 -1
  31. package/dist/esm/3d-tiles-attributes-worker.js +1 -1
  32. package/dist/esm/3d-tiles-converter/3d-tiles-converter.js +59 -44
  33. package/dist/esm/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
  34. package/dist/esm/deps-installer/deps-installer.js +21 -2
  35. package/dist/esm/deps-installer/deps-installer.js.map +1 -1
  36. package/dist/esm/i3s-attributes-worker.js +1 -1
  37. package/dist/esm/i3s-attributes-worker.js.map +1 -1
  38. package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js +4 -0
  39. package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js.map +1 -1
  40. package/dist/esm/i3s-converter/helpers/coordinate-converter.js.map +1 -1
  41. package/dist/esm/i3s-converter/helpers/feature-attributes.js +138 -0
  42. package/dist/esm/i3s-converter/helpers/feature-attributes.js.map +1 -1
  43. package/dist/esm/i3s-converter/helpers/geometry-converter.js +19 -21
  44. package/dist/esm/i3s-converter/helpers/geometry-converter.js.map +1 -1
  45. package/dist/esm/i3s-converter/helpers/gltf-attributes.js +55 -36
  46. package/dist/esm/i3s-converter/helpers/gltf-attributes.js.map +1 -1
  47. package/dist/esm/i3s-converter/helpers/node-pages.js +9 -2
  48. package/dist/esm/i3s-converter/helpers/node-pages.js.map +1 -1
  49. package/dist/esm/i3s-converter/i3s-converter.js +93 -183
  50. package/dist/esm/i3s-converter/i3s-converter.js.map +1 -1
  51. package/dist/esm/pgm-loader.js +1 -1
  52. package/dist/i3s-attributes-worker.d.ts +5 -1
  53. package/dist/i3s-attributes-worker.d.ts.map +1 -1
  54. package/dist/i3s-attributes-worker.js +3 -3
  55. package/dist/i3s-attributes-worker.js.map +2 -2
  56. package/dist/i3s-converter/helpers/batch-ids-extensions.d.ts +2 -3
  57. package/dist/i3s-converter/helpers/batch-ids-extensions.d.ts.map +1 -1
  58. package/dist/i3s-converter/helpers/batch-ids-extensions.js +3 -0
  59. package/dist/i3s-converter/helpers/coordinate-converter.d.ts +2 -2
  60. package/dist/i3s-converter/helpers/coordinate-converter.d.ts.map +1 -1
  61. package/dist/i3s-converter/helpers/feature-attributes.d.ts +32 -0
  62. package/dist/i3s-converter/helpers/feature-attributes.d.ts.map +1 -1
  63. package/dist/i3s-converter/helpers/feature-attributes.js +162 -1
  64. package/dist/i3s-converter/helpers/geometry-converter.d.ts +5 -4
  65. package/dist/i3s-converter/helpers/geometry-converter.d.ts.map +1 -1
  66. package/dist/i3s-converter/helpers/geometry-converter.js +29 -27
  67. package/dist/i3s-converter/helpers/gltf-attributes.d.ts.map +1 -1
  68. package/dist/i3s-converter/helpers/gltf-attributes.js +50 -30
  69. package/dist/i3s-converter/helpers/node-pages.d.ts +4 -0
  70. package/dist/i3s-converter/helpers/node-pages.d.ts.map +1 -1
  71. package/dist/i3s-converter/helpers/node-pages.js +9 -2
  72. package/dist/i3s-converter/i3s-converter.d.ts +24 -48
  73. package/dist/i3s-converter/i3s-converter.d.ts.map +1 -1
  74. package/dist/i3s-converter/i3s-converter.js +88 -186
  75. package/dist/i3s-converter/types.d.ts +4 -0
  76. package/dist/i3s-converter/types.d.ts.map +1 -1
  77. package/package.json +15 -15
  78. package/src/3d-tiles-converter/3d-tiles-converter.ts +71 -55
  79. package/src/deps-installer/deps-installer.ts +29 -2
  80. package/src/i3s-attributes-worker.ts +5 -1
  81. package/src/i3s-converter/helpers/batch-ids-extensions.ts +13 -6
  82. package/src/i3s-converter/helpers/coordinate-converter.ts +2 -2
  83. package/src/i3s-converter/helpers/feature-attributes.ts +182 -0
  84. package/src/i3s-converter/helpers/geometry-converter.ts +45 -36
  85. package/src/i3s-converter/helpers/gltf-attributes.ts +54 -33
  86. package/src/i3s-converter/helpers/node-pages.ts +10 -2
  87. package/src/i3s-converter/i3s-converter.ts +125 -210
  88. package/src/i3s-converter/types.ts +4 -0
@@ -8,7 +8,7 @@ exports._typecheckI3SAttributesWorker = exports.Tile3dAttributesWorker = void 0;
8
8
 
9
9
  var _workerUtils = require("@loaders.gl/worker-utils");
10
10
 
11
- var VERSION = typeof "3.3.0-alpha.3" !== 'undefined' ? "3.3.0-alpha.3" : 'latest';
11
+ var VERSION = typeof "3.3.0-alpha.4" !== 'undefined' ? "3.3.0-alpha.4" : 'latest';
12
12
  var Tile3dAttributesWorker = {
13
13
  id: '3d-tiles-attributes',
14
14
  name: '3DTiles Attributes Worker',
@@ -43,8 +43,6 @@ var _statisticUtills = require("../lib/utils/statistic-utills");
43
43
 
44
44
  var _tileset = require("./json-templates/tileset");
45
45
 
46
- var _b3dmConverter = _interopRequireDefault(require("./helpers/b3dm-converter"));
47
-
48
46
  var _coordinateConverter = require("../i3s-converter/helpers/coordinate-converter");
49
47
 
50
48
  var _dTilesAttributesWorker = require("../3d-tiles-attributes-worker");
@@ -127,6 +125,11 @@ var Tiles3DConverter = function () {
127
125
  sourceTilesetJson = _context.sent;
128
126
  this.sourceTileset = new _tiles.Tileset3D(sourceTilesetJson, {
129
127
  loadOptions: {
128
+ _nodeWorkers: true,
129
+ reuseWorkers: true,
130
+ 'i3s-content-nodejs': {
131
+ workerUrl: './modules/i3s/dist/i3s-content-nodejs-worker.js'
132
+ },
130
133
  i3s: {
131
134
  coordinateSystem: _i3s.COORDINATE_SYSTEM.LNGLAT_OFFSETS,
132
135
  decodeTextures: false
@@ -200,66 +203,46 @@ var Tiles3DConverter = function () {
200
203
  return convert;
201
204
  }()
202
205
  }, {
203
- key: "_addChildren",
206
+ key: "convertChildNode",
204
207
  value: function () {
205
- var _addChildren2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(parentSourceNode, parentNode, level) {
206
- var _iterator, _step, childNodeInfo, sourceChild, _sourceChild$header, featureAttributes, boundingVolume, child, i3sAttributesData, b3dm;
208
+ var _convertChildNode = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(parentSourceNode, parentNode, level, childNodeInfo) {
209
+ var sourceChild, _sourceChild$header, featureAttributes, boundingVolume, child, i3sAttributesData, b3dm;
207
210
 
208
211
  return _regenerator.default.wrap(function _callee2$(_context2) {
209
212
  while (1) {
210
213
  switch (_context2.prev = _context2.next) {
211
214
  case 0:
212
- if (!(this.options.maxDepth && level > this.options.maxDepth)) {
213
- _context2.next = 2;
214
- break;
215
- }
216
-
217
- return _context2.abrupt("return");
218
-
219
- case 2:
220
- _iterator = _createForOfIteratorHelper(parentSourceNode.header.children || []);
221
- _context2.prev = 3;
222
-
223
- _iterator.s();
224
-
225
- case 5:
226
- if ((_step = _iterator.n()).done) {
227
- _context2.next = 40;
228
- break;
229
- }
230
-
231
- childNodeInfo = _step.value;
232
- _context2.next = 9;
215
+ _context2.next = 2;
233
216
  return this._loadChildNode(parentSourceNode, childNodeInfo);
234
217
 
235
- case 9:
218
+ case 2:
236
219
  sourceChild = _context2.sent;
237
220
  parentSourceNode.children.push(sourceChild);
238
221
 
239
222
  if (!sourceChild.contentUrl) {
240
- _context2.next = 36;
223
+ _context2.next = 29;
241
224
  break;
242
225
  }
243
226
 
244
- _context2.next = 14;
227
+ _context2.next = 7;
245
228
  return this.sourceTileset._loadTile(sourceChild);
246
229
 
247
- case 14:
230
+ case 7:
248
231
  this.vertexCounter += sourceChild.content.vertexCount;
249
232
  featureAttributes = null;
250
233
 
251
234
  if (!this.attributeStorageInfo) {
252
- _context2.next = 20;
235
+ _context2.next = 13;
253
236
  break;
254
237
  }
255
238
 
256
- _context2.next = 19;
239
+ _context2.next = 12;
257
240
  return this._loadChildAttributes(sourceChild, this.attributeStorageInfo);
258
241
 
259
- case 19:
242
+ case 12:
260
243
  featureAttributes = _context2.sent;
261
244
 
262
- case 20:
245
+ case 13:
263
246
  if (!sourceChild.header.obb) {
264
247
  sourceChild.header.obb = (0, _coordinateConverter.createObbFromMbs)(sourceChild.header.mbs);
265
248
  }
@@ -276,62 +259,93 @@ var Tiles3DConverter = function () {
276
259
  tileContent: sourceChild.content,
277
260
  textureFormat: sourceChild === null || sourceChild === void 0 ? void 0 : (_sourceChild$header = sourceChild.header) === null || _sourceChild$header === void 0 ? void 0 : _sourceChild$header.textureFormat
278
261
  };
279
- _context2.next = 26;
280
- return new _b3dmConverter.default().convert(i3sAttributesData, featureAttributes);
262
+ _context2.next = 19;
263
+ return (0, _dTilesAttributesWorker.transform3DTilesAttributesOnWorker)(i3sAttributesData, {
264
+ source: this.workerSource.tile3dWorkerSource,
265
+ featureAttributes: featureAttributes
266
+ });
281
267
 
282
- case 26:
268
+ case 19:
283
269
  b3dm = _context2.sent;
284
270
  child.content = {
285
271
  uri: "".concat(sourceChild.id, ".b3dm"),
286
272
  boundingVolume: boundingVolume
287
273
  };
288
- _context2.next = 30;
274
+ _context2.next = 23;
289
275
  return (0, _fileUtils.writeFile)(this.tilesetPath, new Uint8Array(b3dm), "".concat(sourceChild.id, ".b3dm"));
290
276
 
291
- case 30:
277
+ case 23:
292
278
  parentNode.children.push(child);
293
279
  sourceChild.unloadContent();
294
- _context2.next = 34;
280
+ _context2.next = 27;
295
281
  return this._addChildren(sourceChild, child, level + 1);
296
282
 
297
- case 34:
298
- _context2.next = 38;
283
+ case 27:
284
+ _context2.next = 31;
299
285
  break;
300
286
 
301
- case 36:
302
- _context2.next = 38;
287
+ case 29:
288
+ _context2.next = 31;
303
289
  return this._addChildren(sourceChild, parentNode, level + 1);
304
290
 
305
- case 38:
306
- _context2.next = 5;
307
- break;
291
+ case 31:
292
+ case "end":
293
+ return _context2.stop();
294
+ }
295
+ }
296
+ }, _callee2, this);
297
+ }));
308
298
 
309
- case 40:
310
- _context2.next = 45;
311
- break;
299
+ function convertChildNode(_x2, _x3, _x4, _x5) {
300
+ return _convertChildNode.apply(this, arguments);
301
+ }
302
+
303
+ return convertChildNode;
304
+ }()
305
+ }, {
306
+ key: "_addChildren",
307
+ value: function () {
308
+ var _addChildren2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee3(parentSourceNode, parentNode, level) {
309
+ var promises, _iterator, _step, childNodeInfo;
312
310
 
313
- case 42:
314
- _context2.prev = 42;
315
- _context2.t0 = _context2["catch"](3);
311
+ return _regenerator.default.wrap(function _callee3$(_context3) {
312
+ while (1) {
313
+ switch (_context3.prev = _context3.next) {
314
+ case 0:
315
+ if (!(this.options.maxDepth && level > this.options.maxDepth)) {
316
+ _context3.next = 2;
317
+ break;
318
+ }
316
319
 
317
- _iterator.e(_context2.t0);
320
+ return _context3.abrupt("return");
318
321
 
319
- case 45:
320
- _context2.prev = 45;
322
+ case 2:
323
+ promises = [];
324
+ _iterator = _createForOfIteratorHelper(parentSourceNode.header.children || []);
321
325
 
322
- _iterator.f();
326
+ try {
327
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
328
+ childNodeInfo = _step.value;
329
+ promises.push(this.convertChildNode(parentSourceNode, parentNode, level, childNodeInfo));
330
+ }
331
+ } catch (err) {
332
+ _iterator.e(err);
333
+ } finally {
334
+ _iterator.f();
335
+ }
323
336
 
324
- return _context2.finish(45);
337
+ _context3.next = 7;
338
+ return Promise.all(promises);
325
339
 
326
- case 48:
340
+ case 7:
327
341
  case "end":
328
- return _context2.stop();
342
+ return _context3.stop();
329
343
  }
330
344
  }
331
- }, _callee2, this, [[3, 42, 45, 48]]);
345
+ }, _callee3, this);
332
346
  }));
333
347
 
334
- function _addChildren(_x2, _x3, _x4) {
348
+ function _addChildren(_x6, _x7, _x8) {
335
349
  return _addChildren2.apply(this, arguments);
336
350
  }
337
351
 
@@ -340,25 +354,25 @@ var Tiles3DConverter = function () {
340
354
  }, {
341
355
  key: "_loadChildNode",
342
356
  value: function () {
343
- var _loadChildNode2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee3(parentNode, childNodeInfo) {
357
+ var _loadChildNode2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee4(parentNode, childNodeInfo) {
344
358
  var header, _ref, loader, nodeUrl, options;
345
359
 
346
- return _regenerator.default.wrap(function _callee3$(_context3) {
360
+ return _regenerator.default.wrap(function _callee4$(_context4) {
347
361
  while (1) {
348
- switch (_context3.prev = _context3.next) {
362
+ switch (_context4.prev = _context4.next) {
349
363
  case 0:
350
364
  if (!this.sourceTileset.tileset.nodePages) {
351
- _context3.next = 7;
365
+ _context4.next = 7;
352
366
  break;
353
367
  }
354
368
 
355
369
  console.log("Node conversion: ".concat(childNodeInfo.id));
356
- _context3.next = 4;
370
+ _context4.next = 4;
357
371
  return this.sourceTileset.tileset.nodePagesTile.formTileFromNodePages(childNodeInfo.id);
358
372
 
359
373
  case 4:
360
- header = _context3.sent;
361
- _context3.next = 14;
374
+ header = _context4.sent;
375
+ _context4.next = 14;
362
376
  break;
363
377
 
364
378
  case 7:
@@ -371,24 +385,24 @@ var Tiles3DConverter = function () {
371
385
  })
372
386
  };
373
387
  console.log("Node conversion: ".concat(nodeUrl));
374
- _context3.next = 13;
388
+ _context4.next = 13;
375
389
  return (0, _core.load)(nodeUrl, loader, options);
376
390
 
377
391
  case 13:
378
- header = _context3.sent;
392
+ header = _context4.sent;
379
393
 
380
394
  case 14:
381
- return _context3.abrupt("return", new _tiles.Tile3D(this.sourceTileset, header, parentNode));
395
+ return _context4.abrupt("return", new _tiles.Tile3D(this.sourceTileset, header, parentNode));
382
396
 
383
397
  case 15:
384
398
  case "end":
385
- return _context3.stop();
399
+ return _context4.stop();
386
400
  }
387
401
  }
388
- }, _callee3, this);
402
+ }, _callee4, this);
389
403
  }));
390
404
 
391
- function _loadChildNode(_x5, _x6) {
405
+ function _loadChildNode(_x9, _x10) {
392
406
  return _loadChildNode2.apply(this, arguments);
393
407
  }
394
408
 
@@ -430,11 +444,11 @@ var Tiles3DConverter = function () {
430
444
  }, {
431
445
  key: "_loadChildAttributes",
432
446
  value: function () {
433
- var _loadChildAttributes2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee4(sourceChild, attributeStorageInfo) {
447
+ var _loadChildAttributes2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee5(sourceChild, attributeStorageInfo) {
434
448
  var promises, attributeUrls, index, inputUrl, attribute, options, attributesList;
435
- return _regenerator.default.wrap(function _callee4$(_context4) {
449
+ return _regenerator.default.wrap(function _callee5$(_context5) {
436
450
  while (1) {
437
- switch (_context4.prev = _context4.next) {
451
+ switch (_context5.prev = _context5.next) {
438
452
  case 0:
439
453
  promises = [];
440
454
  attributeUrls = sourceChild.header.attributeUrls;
@@ -449,25 +463,25 @@ var Tiles3DConverter = function () {
449
463
  promises.push((0, _core.load)(inputUrl, _i3s.I3SAttributeLoader, options));
450
464
  }
451
465
 
452
- _context4.next = 5;
466
+ _context5.next = 5;
453
467
  return Promise.all(promises);
454
468
 
455
469
  case 5:
456
- attributesList = _context4.sent;
470
+ attributesList = _context5.sent;
457
471
 
458
472
  this._replaceNestedArrays(attributesList);
459
473
 
460
- return _context4.abrupt("return", Object.assign.apply(Object, [{}].concat((0, _toConsumableArray2.default)(attributesList))));
474
+ return _context5.abrupt("return", Object.assign.apply(Object, [{}].concat((0, _toConsumableArray2.default)(attributesList))));
461
475
 
462
476
  case 8:
463
477
  case "end":
464
- return _context4.stop();
478
+ return _context5.stop();
465
479
  }
466
480
  }
467
- }, _callee4, this);
481
+ }, _callee5, this);
468
482
  }));
469
483
 
470
- function _loadChildAttributes(_x7, _x8) {
484
+ function _loadChildAttributes(_x11, _x12) {
471
485
  return _loadChildAttributes2.apply(this, arguments);
472
486
  }
473
487
 
@@ -498,17 +512,17 @@ var Tiles3DConverter = function () {
498
512
  }, {
499
513
  key: "_finishConversion",
500
514
  value: function () {
501
- var _finishConversion2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee5(params) {
515
+ var _finishConversion2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee6(params) {
502
516
  var filesSize, diff, conversionTime;
503
- return _regenerator.default.wrap(function _callee5$(_context5) {
517
+ return _regenerator.default.wrap(function _callee6$(_context6) {
504
518
  while (1) {
505
- switch (_context5.prev = _context5.next) {
519
+ switch (_context6.prev = _context6.next) {
506
520
  case 0:
507
- _context5.next = 2;
521
+ _context6.next = 2;
508
522
  return (0, _statisticUtills.calculateFilesSize)(params);
509
523
 
510
524
  case 2:
511
- filesSize = _context5.sent;
525
+ filesSize = _context6.sent;
512
526
  diff = _process.default.hrtime(this.conversionStartTime);
513
527
  conversionTime = (0, _statisticUtills.timeConverter)(diff);
514
528
  console.log("------------------------------------------------");
@@ -520,13 +534,13 @@ var Tiles3DConverter = function () {
520
534
 
521
535
  case 11:
522
536
  case "end":
523
- return _context5.stop();
537
+ return _context6.stop();
524
538
  }
525
539
  }
526
- }, _callee5, this);
540
+ }, _callee6, this);
527
541
  }));
528
542
 
529
- function _finishConversion(_x9) {
543
+ function _finishConversion(_x13) {
530
544
  return _finishConversion2.apply(this, arguments);
531
545
  }
532
546
 
@@ -535,33 +549,33 @@ var Tiles3DConverter = function () {
535
549
  }, {
536
550
  key: "loadWorkers",
537
551
  value: function () {
538
- var _loadWorkers = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee6() {
552
+ var _loadWorkers = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee7() {
539
553
  var tile3dAttributesWorkerUrl, sourceResponse, source;
540
- return _regenerator.default.wrap(function _callee6$(_context6) {
554
+ return _regenerator.default.wrap(function _callee7$(_context7) {
541
555
  while (1) {
542
- switch (_context6.prev = _context6.next) {
556
+ switch (_context7.prev = _context7.next) {
543
557
  case 0:
544
558
  console.log("Loading workers source...");
545
559
  tile3dAttributesWorkerUrl = (0, _workerUtils.getWorkerURL)(_dTilesAttributesWorker.Tile3dAttributesWorker, _objectSpread({}, (0, _core.getLoaderOptions)()));
546
- _context6.next = 4;
560
+ _context7.next = 4;
547
561
  return (0, _core.fetchFile)(tile3dAttributesWorkerUrl);
548
562
 
549
563
  case 4:
550
- sourceResponse = _context6.sent;
551
- _context6.next = 7;
564
+ sourceResponse = _context7.sent;
565
+ _context7.next = 7;
552
566
  return sourceResponse.text();
553
567
 
554
568
  case 7:
555
- source = _context6.sent;
569
+ source = _context7.sent;
556
570
  this.workerSource.tile3dWorkerSource = source;
557
571
  console.log("Loading workers source completed!");
558
572
 
559
573
  case 10:
560
574
  case "end":
561
- return _context6.stop();
575
+ return _context7.stop();
562
576
  }
563
577
  }
564
- }, _callee6, this);
578
+ }, _callee7, this);
565
579
  }));
566
580
 
567
581
  function loadWorkers() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/3d-tiles-converter/3d-tiles-converter.ts"],"names":["I3S","Tiles3DConverter","options","tilesetPath","vertexCounter","conversionStartTime","geoidHeightModel","sourceTileset","attributeStorageInfo","workerSource","isBrowser","console","log","BROWSER_ERROR_MESSAGE","inputUrl","outputPath","tilesetName","maxDepth","egmFilePath","process","hrtime","PGMLoader","loadWorkers","I3SLoader","sourceTilesetJson","Tileset3D","loadOptions","i3s","coordinateSystem","COORDINATE_SYSTEM","LNGLAT_OFFSETS","decodeTextures","tilesetInitializationPromise","rootNode","root","header","obb","mbs","rootTile","boundingVolume","box","geometricError","children","_addChildren","tileset","JSON","stringify","_finishConversion","slpk","workerFarm","WorkerFarm","getWorkerFarm","destroy","parentSourceNode","parentNode","level","childNodeInfo","_loadChildNode","sourceChild","push","contentUrl","_loadTile","content","vertexCount","featureAttributes","_loadChildAttributes","child","i3sAttributesData","tileContent","textureFormat","B3dmConverter","convert","b3dm","uri","id","Uint8Array","unloadContent","nodePages","nodePagesTile","formTileFromNodePages","loader","nodeUrl","_relativeUrlToFullUrl","url","href","isTileHeader","loadContent","Tile3D","baseUrl","relativeUrl","resultArray","split","relativeUrlArray","folder","slice","join","promises","attributeUrls","index","length","attribute","attributeName","name","attributeType","_getAttributeType","I3SAttributeLoader","Promise","all","attributesList","_replaceNestedArrays","Object","assign","attributeValues","valueType","objectIds","attributeObject","key","Array","from","params","filesSize","diff","conversionTime","tile3dAttributesWorkerUrl","Tile3dAttributesWorker","sourceResponse","text","source","tile3dWorkerSource"],"mappings":"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","sourcesContent":["import type {AttributeStorageInfo, FeatureAttribute, NodeReference} from '@loaders.gl/i3s';\nimport type {Node3D} from '@loaders.gl/3d-tiles';\n\nimport {join} from 'path';\nimport process from 'process';\nimport transform from 'json-map-transform';\nimport {fetchFile, getLoaderOptions, load, isBrowser} from '@loaders.gl/core';\nimport {I3SLoader, I3SAttributeLoader, COORDINATE_SYSTEM} from '@loaders.gl/i3s';\nimport {Tileset3D, Tile3D} from '@loaders.gl/tiles';\nimport {Geoid} from '@math.gl/geoid';\n\nimport {PGMLoader} from '../pgm-loader';\nimport {i3sObbTo3dTilesObb} from './helpers/i3s-obb-to-3d-tiles-obb';\nimport {convertScreenThresholdToGeometricError} from '../lib/utils/lod-conversion-utils';\nimport {writeFile, removeDir} from '../lib/utils/file-utils';\nimport {calculateFilesSize, timeConverter} from '../lib/utils/statistic-utills';\nimport {TILESET as tilesetTemplate} from './json-templates/tileset';\nimport B3dmConverter from './helpers/b3dm-converter';\nimport {createObbFromMbs} from '../i3s-converter/helpers/coordinate-converter';\nimport {\n I3SAttributesData,\n Tile3dAttributesWorker\n /*transform3DTilesAttributesOnWorker*/\n} from '../3d-tiles-attributes-worker';\nimport {getWorkerURL, WorkerFarm} from '@loaders.gl/worker-utils';\nimport {BROWSER_ERROR_MESSAGE} from '../constants';\n\nconst I3S = 'I3S';\n\n/**\n * Converter from i3s to 3d-tiles\n */\nexport default class Tiles3DConverter {\n options: any;\n tilesetPath: string;\n vertexCounter: number;\n conversionStartTime: [number, number];\n geoidHeightModel: Geoid | null;\n sourceTileset: Tileset3D | null;\n attributeStorageInfo: AttributeStorageInfo | null;\n workerSource: {[key: string]: string} = {};\n\n constructor() {\n this.options = {};\n this.tilesetPath = '';\n this.vertexCounter = 0;\n this.conversionStartTime = [0, 0];\n this.geoidHeightModel = null;\n this.sourceTileset = null;\n this.attributeStorageInfo = null;\n this.workerSource = {};\n }\n\n /**\n * Convert i3s format data to 3dTiles\n * @param options\n * @param options.inputUrl the url to read the tileset from\n * @param options.outputPath the output filename\n * @param options.tilesetName the output name of the tileset\n * @param options.egmFilePath location of *.pgm file to convert heights from ellipsoidal to gravity-related format\n * @param options.maxDepth The max tree depth of conversion\n */\n public async convert(options: {\n inputUrl: string;\n outputPath: string;\n tilesetName: string;\n maxDepth?: number;\n egmFilePath: string;\n }): Promise<any> {\n if (isBrowser) {\n console.log(BROWSER_ERROR_MESSAGE);\n return BROWSER_ERROR_MESSAGE;\n }\n const {inputUrl, outputPath, tilesetName, maxDepth, egmFilePath} = options;\n this.conversionStartTime = process.hrtime();\n this.options = {maxDepth};\n\n console.log('Loading egm file...'); // eslint-disable-line\n this.geoidHeightModel = await load(egmFilePath, PGMLoader);\n console.log('Loading egm file completed!'); // eslint-disable-line\n\n await this.loadWorkers();\n\n const sourceTilesetJson = await load(inputUrl, I3SLoader, {});\n\n this.sourceTileset = new Tileset3D(sourceTilesetJson, {\n loadOptions: {\n i3s: {coordinateSystem: COORDINATE_SYSTEM.LNGLAT_OFFSETS, decodeTextures: false}\n }\n });\n\n await this.sourceTileset.tilesetInitializationPromise;\n const rootNode = this.sourceTileset.root!;\n if (!rootNode.header.obb) {\n rootNode.header.obb = createObbFromMbs(rootNode.header.mbs);\n }\n\n this.tilesetPath = join(`${outputPath}`, `${tilesetName}`);\n this.attributeStorageInfo = sourceTilesetJson.attributeStorageInfo;\n // Removing the tilesetPath needed to exclude erroneous files after conversion\n try {\n await removeDir(this.tilesetPath);\n } catch (e) {\n // do nothing\n }\n\n const rootTile: Node3D = {\n boundingVolume: {\n box: i3sObbTo3dTilesObb(rootNode.header.obb, this.geoidHeightModel)\n },\n geometricError: convertScreenThresholdToGeometricError(rootNode),\n children: []\n };\n\n await this._addChildren(rootNode, rootTile, 1);\n\n const tileset = transform({root: rootTile}, tilesetTemplate());\n await writeFile(this.tilesetPath, JSON.stringify(tileset), 'tileset.json');\n\n this._finishConversion({slpk: false, outputPath, tilesetName});\n\n // Clean up worker pools\n const workerFarm = WorkerFarm.getWorkerFarm({});\n workerFarm.destroy();\n }\n\n /**\n * The recursive function of traversal of a nodes tree\n * @param parentSourceNode the parent node tile object (@loaders.gl/tiles/Tile3D)\n * @param parentNode object in resulting tileset\n * @param level a current level of a tree depth\n */\n private async _addChildren(\n parentSourceNode: Tile3D,\n parentNode: Node3D,\n level: number\n ): Promise<void> {\n if (this.options.maxDepth && level > this.options.maxDepth) {\n return;\n }\n for (const childNodeInfo of parentSourceNode.header.children || []) {\n const sourceChild = await this._loadChildNode(parentSourceNode, childNodeInfo);\n parentSourceNode.children.push(sourceChild);\n if (sourceChild.contentUrl) {\n await this.sourceTileset!._loadTile(sourceChild);\n this.vertexCounter += sourceChild.content.vertexCount;\n\n let featureAttributes: FeatureAttribute | null = null;\n if (this.attributeStorageInfo) {\n featureAttributes = await this._loadChildAttributes(\n sourceChild,\n this.attributeStorageInfo\n );\n }\n\n if (!sourceChild.header.obb) {\n sourceChild.header.obb = createObbFromMbs(sourceChild.header.mbs);\n }\n\n const boundingVolume = {\n box: i3sObbTo3dTilesObb(sourceChild.header.obb, this.geoidHeightModel)\n };\n const child: Node3D = {\n boundingVolume,\n geometricError: convertScreenThresholdToGeometricError(sourceChild),\n children: []\n };\n\n const i3sAttributesData: I3SAttributesData = {\n tileContent: sourceChild.content,\n textureFormat: sourceChild?.header?.textureFormat\n };\n\n // TODO Uncomment when 3d-tiles-attributes-worker will be published on CDN.\n // const b3dm = await transform3DTilesAttributesOnWorker(i3sAttributesData, {\n // source: this.workerSource.tile3dWorkerSource,\n // featureAttributes\n // });\n\n const b3dm = await new B3dmConverter().convert(i3sAttributesData, featureAttributes);\n\n child.content = {\n uri: `${sourceChild.id}.b3dm`,\n boundingVolume\n };\n await writeFile(this.tilesetPath, new Uint8Array(b3dm), `${sourceChild.id}.b3dm`);\n parentNode.children.push(child);\n\n sourceChild.unloadContent();\n await this._addChildren(sourceChild, child, level + 1);\n } else {\n await this._addChildren(sourceChild, parentNode, level + 1);\n }\n }\n }\n\n /**\n * Load a child node having information from the node header\n * @param parentNode a parent node tile object (@loaders.gl/tiles/Tile3D)\n * @param childNodeInfo child information from 3DNodeIndexDocument\n * (https://github.com/Esri/i3s-spec/blob/master/docs/1.7/nodeReference.cmn.md)\n */\n private async _loadChildNode(parentNode: Tile3D, childNodeInfo: NodeReference): Promise<Tile3D> {\n let header;\n if (this.sourceTileset!.tileset.nodePages) {\n console.log(`Node conversion: ${childNodeInfo.id}`); // eslint-disable-line no-console,no-undef\n header = await this.sourceTileset!.tileset.nodePagesTile.formTileFromNodePages(\n childNodeInfo.id\n );\n } else {\n const {loader} = this.sourceTileset!;\n const nodeUrl = this._relativeUrlToFullUrl(parentNode.url, childNodeInfo.href!);\n // load metadata\n const options = {\n i3s: {\n ...this.sourceTileset!.loadOptions,\n isTileHeader: true,\n loadContent: false\n }\n };\n\n console.log(`Node conversion: ${nodeUrl}`); // eslint-disable-line no-console,no-undef\n header = await load(nodeUrl, loader, options);\n }\n return new Tile3D(this.sourceTileset!, header, parentNode);\n }\n\n /**\n * Make an url of a resource from its relative url having the base url\n * @param baseUrl the base url. A resulting url will be related from this url\n * @param relativeUrl a realtive url of a resource\n */\n private _relativeUrlToFullUrl(baseUrl: string, relativeUrl: string): string {\n let resultArray = baseUrl.split('/');\n const relativeUrlArray = relativeUrl.split('/');\n for (const folder of relativeUrlArray) {\n switch (folder) {\n case '.':\n continue; // eslint-disable-line no-continue\n case '..':\n resultArray = resultArray.slice(0, -1);\n break;\n default:\n resultArray.push(folder);\n }\n }\n return resultArray.join('/');\n }\n\n /**\n * Do loading all attributes related to particular node.\n * @param sourceChild\n * @param attributeStorageInfo\n * @returns Promise of attributes object.\n */\n private async _loadChildAttributes(\n sourceChild: Tile3D,\n attributeStorageInfo: AttributeStorageInfo\n ): Promise<FeatureAttribute> {\n const promises: any[] = [];\n const {attributeUrls} = sourceChild.header;\n\n for (let index = 0; index < attributeUrls.length; index++) {\n const inputUrl = attributeUrls[index];\n const attribute = attributeStorageInfo[index];\n const options = {\n attributeName: attribute.name,\n attributeType: this._getAttributeType(attribute)\n };\n\n promises.push(load(inputUrl, I3SAttributeLoader, options));\n }\n const attributesList = await Promise.all(promises);\n this._replaceNestedArrays(attributesList);\n return Object.assign({}, ...attributesList);\n }\n\n /**\n * Returns attribute type for loading attributes\n * @param attribute\n * Workaround for I3S v1.6. There is no attribute.attributeValues.valueType field in attribute.\n * There is an 'Oid32' type if attribute has objectIds property.\n * Doc: https://github.com/Esri/i3s-spec/blob/master/docs/1.6/attributeStorageInfo.cmn.md\n */\n private _getAttributeType(attribute: AttributeStorageInfo): string {\n if (attribute.attributeValues) {\n return attribute.attributeValues.valueType;\n } else if (attribute.objectIds) {\n return 'Oid32';\n }\n return '';\n }\n\n /**\n * Make simple arrays from attribute typed arrays.\n * @param attributesList\n */\n private _replaceNestedArrays(attributesList: FeatureAttribute[]): void {\n for (let index = 0; index < attributesList.length; index++) {\n const attributeObject = attributesList[index];\n\n for (const key in attributeObject) {\n attributeObject[key] = Array.from(attributeObject[key]);\n }\n }\n }\n\n /**\n * Print statistics in the end of conversion\n * @param params - output files data\n */\n private async _finishConversion(params: {\n slpk: boolean;\n outputPath: string;\n tilesetName: string;\n }): Promise<void> {\n const filesSize = await calculateFilesSize(params);\n const diff = process.hrtime(this.conversionStartTime);\n const conversionTime = timeConverter(diff);\n\n console.log(`------------------------------------------------`); // eslint-disable-line\n console.log(`Finish conversion of ${I3S}`); // eslint-disable-line\n console.log(`Total conversion time: ${conversionTime}`); // eslint-disable-line\n console.log(`Vertex count: `, this.vertexCounter); // eslint-disable-line\n console.log(`File(s) size: `, filesSize, ' bytes'); // eslint-disable-line\n console.log(`------------------------------------------------`); // eslint-disable-line\n }\n\n private async loadWorkers(): Promise<void> {\n console.log(`Loading workers source...`); // eslint-disable-line no-undef, no-console\n const tile3dAttributesWorkerUrl = getWorkerURL(Tile3dAttributesWorker, {...getLoaderOptions()});\n const sourceResponse = await fetchFile(tile3dAttributesWorkerUrl);\n const source = await sourceResponse.text();\n\n this.workerSource.tile3dWorkerSource = source;\n console.log(`Loading workers source completed!`); // eslint-disable-line no-undef, no-console\n }\n}\n"],"file":"3d-tiles-converter.js"}
1
+ {"version":3,"sources":["../../../src/3d-tiles-converter/3d-tiles-converter.ts"],"names":["I3S","Tiles3DConverter","options","tilesetPath","vertexCounter","conversionStartTime","geoidHeightModel","sourceTileset","attributeStorageInfo","workerSource","isBrowser","console","log","BROWSER_ERROR_MESSAGE","inputUrl","outputPath","tilesetName","maxDepth","egmFilePath","process","hrtime","PGMLoader","loadWorkers","I3SLoader","sourceTilesetJson","Tileset3D","loadOptions","_nodeWorkers","reuseWorkers","workerUrl","i3s","coordinateSystem","COORDINATE_SYSTEM","LNGLAT_OFFSETS","decodeTextures","tilesetInitializationPromise","rootNode","root","header","obb","mbs","rootTile","boundingVolume","box","geometricError","children","_addChildren","tileset","JSON","stringify","_finishConversion","slpk","workerFarm","WorkerFarm","getWorkerFarm","destroy","parentSourceNode","parentNode","level","childNodeInfo","_loadChildNode","sourceChild","push","contentUrl","_loadTile","content","vertexCount","featureAttributes","_loadChildAttributes","child","i3sAttributesData","tileContent","textureFormat","source","tile3dWorkerSource","b3dm","uri","id","Uint8Array","unloadContent","promises","convertChildNode","Promise","all","nodePages","nodePagesTile","formTileFromNodePages","loader","nodeUrl","_relativeUrlToFullUrl","url","href","isTileHeader","loadContent","Tile3D","baseUrl","relativeUrl","resultArray","split","relativeUrlArray","folder","slice","join","attributeUrls","index","length","attribute","attributeName","name","attributeType","_getAttributeType","I3SAttributeLoader","attributesList","_replaceNestedArrays","Object","assign","attributeValues","valueType","objectIds","attributeObject","key","Array","from","params","filesSize","diff","conversionTime","tile3dAttributesWorkerUrl","Tile3dAttributesWorker","sourceResponse","text"],"mappings":"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","sourcesContent":["import type {AttributeStorageInfo, FeatureAttribute, NodeReference} from '@loaders.gl/i3s';\nimport type {Node3D} from '@loaders.gl/3d-tiles';\n\nimport {join} from 'path';\nimport process from 'process';\nimport transform from 'json-map-transform';\nimport {fetchFile, getLoaderOptions, load, isBrowser} from '@loaders.gl/core';\nimport {I3SLoader, I3SAttributeLoader, COORDINATE_SYSTEM} from '@loaders.gl/i3s';\nimport {Tileset3D, Tile3D} from '@loaders.gl/tiles';\nimport {Geoid} from '@math.gl/geoid';\n\nimport {PGMLoader} from '../pgm-loader';\nimport {i3sObbTo3dTilesObb} from './helpers/i3s-obb-to-3d-tiles-obb';\nimport {convertScreenThresholdToGeometricError} from '../lib/utils/lod-conversion-utils';\nimport {writeFile, removeDir} from '../lib/utils/file-utils';\nimport {calculateFilesSize, timeConverter} from '../lib/utils/statistic-utills';\nimport {TILESET as tilesetTemplate} from './json-templates/tileset';\nimport {createObbFromMbs} from '../i3s-converter/helpers/coordinate-converter';\nimport {\n I3SAttributesData,\n Tile3dAttributesWorker,\n transform3DTilesAttributesOnWorker\n} from '../3d-tiles-attributes-worker';\nimport {getWorkerURL, WorkerFarm} from '@loaders.gl/worker-utils';\nimport {BROWSER_ERROR_MESSAGE} from '../constants';\n\nconst I3S = 'I3S';\n\n/**\n * Converter from i3s to 3d-tiles\n */\nexport default class Tiles3DConverter {\n options: any;\n tilesetPath: string;\n vertexCounter: number;\n conversionStartTime: [number, number];\n geoidHeightModel: Geoid | null;\n sourceTileset: Tileset3D | null;\n attributeStorageInfo: AttributeStorageInfo | null;\n workerSource: {[key: string]: string} = {};\n\n constructor() {\n this.options = {};\n this.tilesetPath = '';\n this.vertexCounter = 0;\n this.conversionStartTime = [0, 0];\n this.geoidHeightModel = null;\n this.sourceTileset = null;\n this.attributeStorageInfo = null;\n this.workerSource = {};\n }\n\n /**\n * Convert i3s format data to 3dTiles\n * @param options\n * @param options.inputUrl the url to read the tileset from\n * @param options.outputPath the output filename\n * @param options.tilesetName the output name of the tileset\n * @param options.egmFilePath location of *.pgm file to convert heights from ellipsoidal to gravity-related format\n * @param options.maxDepth The max tree depth of conversion\n */\n public async convert(options: {\n inputUrl: string;\n outputPath: string;\n tilesetName: string;\n maxDepth?: number;\n egmFilePath: string;\n }): Promise<any> {\n if (isBrowser) {\n console.log(BROWSER_ERROR_MESSAGE);\n return BROWSER_ERROR_MESSAGE;\n }\n const {inputUrl, outputPath, tilesetName, maxDepth, egmFilePath} = options;\n this.conversionStartTime = process.hrtime();\n this.options = {maxDepth};\n\n console.log('Loading egm file...'); // eslint-disable-line\n this.geoidHeightModel = await load(egmFilePath, PGMLoader);\n console.log('Loading egm file completed!'); // eslint-disable-line\n\n await this.loadWorkers();\n\n const sourceTilesetJson = await load(inputUrl, I3SLoader, {});\n\n this.sourceTileset = new Tileset3D(sourceTilesetJson, {\n loadOptions: {\n _nodeWorkers: true,\n reuseWorkers: true,\n 'i3s-content-nodejs': {\n workerUrl: './modules/i3s/dist/i3s-content-nodejs-worker.js'\n },\n i3s: {coordinateSystem: COORDINATE_SYSTEM.LNGLAT_OFFSETS, decodeTextures: false}\n }\n });\n\n await this.sourceTileset.tilesetInitializationPromise;\n const rootNode = this.sourceTileset.root!;\n if (!rootNode.header.obb) {\n rootNode.header.obb = createObbFromMbs(rootNode.header.mbs);\n }\n\n this.tilesetPath = join(`${outputPath}`, `${tilesetName}`);\n this.attributeStorageInfo = sourceTilesetJson.attributeStorageInfo;\n // Removing the tilesetPath needed to exclude erroneous files after conversion\n try {\n await removeDir(this.tilesetPath);\n } catch (e) {\n // do nothing\n }\n\n const rootTile: Node3D = {\n boundingVolume: {\n box: i3sObbTo3dTilesObb(rootNode.header.obb, this.geoidHeightModel)\n },\n geometricError: convertScreenThresholdToGeometricError(rootNode),\n children: []\n };\n\n await this._addChildren(rootNode, rootTile, 1);\n\n const tileset = transform({root: rootTile}, tilesetTemplate());\n await writeFile(this.tilesetPath, JSON.stringify(tileset), 'tileset.json');\n\n this._finishConversion({slpk: false, outputPath, tilesetName});\n\n // Clean up worker pools\n const workerFarm = WorkerFarm.getWorkerFarm({});\n workerFarm.destroy();\n }\n\n /**\n * Convert particular I3S Node\n * @param parentSourceNode the parent node tile object (@loaders.gl/tiles/Tile3D)\n * @param parentNode object in resulting tileset\n * @param level a current level of a tree depth\n * @param childNodeInfo child node to convert\n */\n private async convertChildNode(\n parentSourceNode: Tile3D,\n parentNode: Node3D,\n level: number,\n childNodeInfo: NodeReference\n ): Promise<void> {\n const sourceChild = await this._loadChildNode(parentSourceNode, childNodeInfo);\n parentSourceNode.children.push(sourceChild);\n if (sourceChild.contentUrl) {\n await this.sourceTileset!._loadTile(sourceChild);\n this.vertexCounter += sourceChild.content.vertexCount;\n\n let featureAttributes: FeatureAttribute | null = null;\n if (this.attributeStorageInfo) {\n featureAttributes = await this._loadChildAttributes(sourceChild, this.attributeStorageInfo);\n }\n\n if (!sourceChild.header.obb) {\n sourceChild.header.obb = createObbFromMbs(sourceChild.header.mbs);\n }\n\n const boundingVolume = {\n box: i3sObbTo3dTilesObb(sourceChild.header.obb, this.geoidHeightModel)\n };\n const child: Node3D = {\n boundingVolume,\n geometricError: convertScreenThresholdToGeometricError(sourceChild),\n children: []\n };\n\n const i3sAttributesData: I3SAttributesData = {\n tileContent: sourceChild.content,\n textureFormat: sourceChild?.header?.textureFormat\n };\n\n const b3dm = await transform3DTilesAttributesOnWorker(i3sAttributesData, {\n source: this.workerSource.tile3dWorkerSource,\n featureAttributes\n });\n\n child.content = {\n uri: `${sourceChild.id}.b3dm`,\n boundingVolume\n };\n await writeFile(this.tilesetPath, new Uint8Array(b3dm), `${sourceChild.id}.b3dm`);\n parentNode.children.push(child);\n\n sourceChild.unloadContent();\n await this._addChildren(sourceChild, child, level + 1);\n } else {\n await this._addChildren(sourceChild, parentNode, level + 1);\n }\n }\n\n /**\n * The recursive function of traversal of a nodes tree\n * @param parentSourceNode the parent node tile object (@loaders.gl/tiles/Tile3D)\n * @param parentNode object in resulting tileset\n * @param level a current level of a tree depth\n */\n private async _addChildren(\n parentSourceNode: Tile3D,\n parentNode: Node3D,\n level: number\n ): Promise<void> {\n if (this.options.maxDepth && level > this.options.maxDepth) {\n return;\n }\n const promises: Promise<void>[] = [];\n for (const childNodeInfo of parentSourceNode.header.children || []) {\n promises.push(this.convertChildNode(parentSourceNode, parentNode, level, childNodeInfo));\n }\n await Promise.all(promises);\n }\n\n /**\n * Load a child node having information from the node header\n * @param parentNode a parent node tile object (@loaders.gl/tiles/Tile3D)\n * @param childNodeInfo child information from 3DNodeIndexDocument\n * (https://github.com/Esri/i3s-spec/blob/master/docs/1.7/nodeReference.cmn.md)\n */\n private async _loadChildNode(parentNode: Tile3D, childNodeInfo: NodeReference): Promise<Tile3D> {\n let header;\n if (this.sourceTileset!.tileset.nodePages) {\n console.log(`Node conversion: ${childNodeInfo.id}`); // eslint-disable-line no-console,no-undef\n header = await this.sourceTileset!.tileset.nodePagesTile.formTileFromNodePages(\n childNodeInfo.id\n );\n } else {\n const {loader} = this.sourceTileset!;\n const nodeUrl = this._relativeUrlToFullUrl(parentNode.url, childNodeInfo.href!);\n // load metadata\n const options = {\n i3s: {\n ...this.sourceTileset!.loadOptions,\n isTileHeader: true,\n loadContent: false\n }\n };\n\n console.log(`Node conversion: ${nodeUrl}`); // eslint-disable-line no-console,no-undef\n header = await load(nodeUrl, loader, options);\n }\n return new Tile3D(this.sourceTileset!, header, parentNode);\n }\n\n /**\n * Make an url of a resource from its relative url having the base url\n * @param baseUrl the base url. A resulting url will be related from this url\n * @param relativeUrl a realtive url of a resource\n */\n private _relativeUrlToFullUrl(baseUrl: string, relativeUrl: string): string {\n let resultArray = baseUrl.split('/');\n const relativeUrlArray = relativeUrl.split('/');\n for (const folder of relativeUrlArray) {\n switch (folder) {\n case '.':\n continue; // eslint-disable-line no-continue\n case '..':\n resultArray = resultArray.slice(0, -1);\n break;\n default:\n resultArray.push(folder);\n }\n }\n return resultArray.join('/');\n }\n\n /**\n * Do loading all attributes related to particular node.\n * @param sourceChild\n * @param attributeStorageInfo\n * @returns Promise of attributes object.\n */\n private async _loadChildAttributes(\n sourceChild: Tile3D,\n attributeStorageInfo: AttributeStorageInfo\n ): Promise<FeatureAttribute> {\n const promises: any[] = [];\n const {attributeUrls} = sourceChild.header;\n\n for (let index = 0; index < attributeUrls.length; index++) {\n const inputUrl = attributeUrls[index];\n const attribute = attributeStorageInfo[index];\n const options = {\n attributeName: attribute.name,\n attributeType: this._getAttributeType(attribute)\n };\n\n promises.push(load(inputUrl, I3SAttributeLoader, options));\n }\n const attributesList = await Promise.all(promises);\n this._replaceNestedArrays(attributesList);\n return Object.assign({}, ...attributesList);\n }\n\n /**\n * Returns attribute type for loading attributes\n * @param attribute\n * Workaround for I3S v1.6. There is no attribute.attributeValues.valueType field in attribute.\n * There is an 'Oid32' type if attribute has objectIds property.\n * Doc: https://github.com/Esri/i3s-spec/blob/master/docs/1.6/attributeStorageInfo.cmn.md\n */\n private _getAttributeType(attribute: AttributeStorageInfo): string {\n if (attribute.attributeValues) {\n return attribute.attributeValues.valueType;\n } else if (attribute.objectIds) {\n return 'Oid32';\n }\n return '';\n }\n\n /**\n * Make simple arrays from attribute typed arrays.\n * @param attributesList\n */\n private _replaceNestedArrays(attributesList: FeatureAttribute[]): void {\n for (let index = 0; index < attributesList.length; index++) {\n const attributeObject = attributesList[index];\n\n for (const key in attributeObject) {\n attributeObject[key] = Array.from(attributeObject[key]);\n }\n }\n }\n\n /**\n * Print statistics in the end of conversion\n * @param params - output files data\n */\n private async _finishConversion(params: {\n slpk: boolean;\n outputPath: string;\n tilesetName: string;\n }): Promise<void> {\n const filesSize = await calculateFilesSize(params);\n const diff = process.hrtime(this.conversionStartTime);\n const conversionTime = timeConverter(diff);\n\n console.log(`------------------------------------------------`); // eslint-disable-line\n console.log(`Finish conversion of ${I3S}`); // eslint-disable-line\n console.log(`Total conversion time: ${conversionTime}`); // eslint-disable-line\n console.log(`Vertex count: `, this.vertexCounter); // eslint-disable-line\n console.log(`File(s) size: `, filesSize, ' bytes'); // eslint-disable-line\n console.log(`------------------------------------------------`); // eslint-disable-line\n }\n\n private async loadWorkers(): Promise<void> {\n console.log(`Loading workers source...`); // eslint-disable-line no-undef, no-console\n const tile3dAttributesWorkerUrl = getWorkerURL(Tile3dAttributesWorker, {...getLoaderOptions()});\n const sourceResponse = await fetchFile(tile3dAttributesWorkerUrl);\n const source = await sourceResponse.text();\n\n this.workerSource.tile3dWorkerSource = source;\n console.log(`Loading workers source completed!`); // eslint-disable-line no-undef, no-console\n }\n}\n"],"file":"3d-tiles-converter.js"}