@loaders.gl/tile-converter 3.2.0-alpha.1 → 3.2.0-alpha.2

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 (170) hide show
  1. package/dist/3d-tiles-attributes-worker.d.ts +28 -0
  2. package/dist/3d-tiles-attributes-worker.d.ts.map +1 -0
  3. package/dist/3d-tiles-attributes-worker.js +4 -0
  4. package/dist/3d-tiles-attributes-worker.js.map +7 -0
  5. package/dist/3d-tiles-converter/3d-tiles-converter.d.ts +4 -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 +29 -3
  8. package/dist/3d-tiles-converter/helpers/b3dm-converter.d.ts +5 -4
  9. package/dist/3d-tiles-converter/helpers/b3dm-converter.d.ts.map +1 -1
  10. package/dist/3d-tiles-converter/helpers/b3dm-converter.js +10 -10
  11. package/dist/converter.min.js +20 -20
  12. package/dist/dist.min.js +789 -645
  13. package/dist/es5/3d-tiles-attributes-worker.js +29 -0
  14. package/dist/es5/3d-tiles-attributes-worker.js.map +1 -0
  15. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js +102 -43
  16. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
  17. package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js +21 -23
  18. package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -1
  19. package/dist/es5/i3s-attributes-worker.js +29 -0
  20. package/dist/es5/i3s-attributes-worker.js.map +1 -0
  21. package/dist/es5/i3s-converter/helpers/coordinate-converter.js +19 -11
  22. package/dist/es5/i3s-converter/helpers/coordinate-converter.js.map +1 -1
  23. package/dist/es5/i3s-converter/helpers/geometry-attributes.js +2 -2
  24. package/dist/es5/i3s-converter/helpers/geometry-attributes.js.map +1 -1
  25. package/dist/es5/i3s-converter/helpers/geometry-converter.js +267 -178
  26. package/dist/es5/i3s-converter/helpers/geometry-converter.js.map +1 -1
  27. package/dist/es5/i3s-converter/helpers/gltf-attributes.js +71 -0
  28. package/dist/es5/i3s-converter/helpers/gltf-attributes.js.map +1 -0
  29. package/dist/es5/i3s-converter/helpers/node-pages.js +47 -99
  30. package/dist/es5/i3s-converter/helpers/node-pages.js.map +1 -1
  31. package/dist/es5/i3s-converter/i3s-converter.js +230 -195
  32. package/dist/es5/i3s-converter/i3s-converter.js.map +1 -1
  33. package/dist/es5/index.js +8 -0
  34. package/dist/es5/index.js.map +1 -1
  35. package/dist/es5/lib/utils/compress-util.js +14 -17
  36. package/dist/es5/lib/utils/compress-util.js.map +1 -1
  37. package/dist/es5/lib/utils/file-utils.js +39 -14
  38. package/dist/es5/lib/utils/file-utils.js.map +1 -1
  39. package/dist/es5/lib/utils/lod-conversion-utils.js.map +1 -1
  40. package/dist/es5/lib/utils/queue.js +61 -0
  41. package/dist/es5/lib/utils/queue.js.map +1 -0
  42. package/dist/es5/lib/utils/statistic-utills.js.map +1 -1
  43. package/dist/es5/lib/utils/write-queue.js +225 -0
  44. package/dist/es5/lib/utils/write-queue.js.map +1 -0
  45. package/dist/es5/pgm-loader.js +1 -1
  46. package/dist/es5/workers/3d-tiles-attributes-worker.js +37 -0
  47. package/dist/es5/workers/3d-tiles-attributes-worker.js.map +1 -0
  48. package/dist/es5/workers/i3s-attributes-worker.js +40 -0
  49. package/dist/es5/workers/i3s-attributes-worker.js.map +1 -0
  50. package/dist/esm/3d-tiles-attributes-worker.js +16 -0
  51. package/dist/esm/3d-tiles-attributes-worker.js.map +1 -0
  52. package/dist/esm/3d-tiles-converter/3d-tiles-converter.js +30 -4
  53. package/dist/esm/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
  54. package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js +16 -18
  55. package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -1
  56. package/dist/esm/i3s-attributes-worker.js +16 -0
  57. package/dist/esm/i3s-attributes-worker.js.map +1 -0
  58. package/dist/esm/i3s-converter/helpers/coordinate-converter.js +19 -11
  59. package/dist/esm/i3s-converter/helpers/coordinate-converter.js.map +1 -1
  60. package/dist/esm/i3s-converter/helpers/geometry-attributes.js +2 -2
  61. package/dist/esm/i3s-converter/helpers/geometry-attributes.js.map +1 -1
  62. package/dist/esm/i3s-converter/helpers/geometry-converter.js +117 -58
  63. package/dist/esm/i3s-converter/helpers/geometry-converter.js.map +1 -1
  64. package/dist/esm/i3s-converter/helpers/gltf-attributes.js +54 -0
  65. package/dist/esm/i3s-converter/helpers/gltf-attributes.js.map +1 -0
  66. package/dist/esm/i3s-converter/helpers/node-pages.js +12 -4
  67. package/dist/esm/i3s-converter/helpers/node-pages.js.map +1 -1
  68. package/dist/esm/i3s-converter/i3s-converter.js +105 -28
  69. package/dist/esm/i3s-converter/i3s-converter.js.map +1 -1
  70. package/dist/esm/index.js +1 -0
  71. package/dist/esm/index.js.map +1 -1
  72. package/dist/esm/lib/utils/compress-util.js +6 -8
  73. package/dist/esm/lib/utils/compress-util.js.map +1 -1
  74. package/dist/esm/lib/utils/file-utils.js +11 -1
  75. package/dist/esm/lib/utils/file-utils.js.map +1 -1
  76. package/dist/esm/lib/utils/lod-conversion-utils.js.map +1 -1
  77. package/dist/esm/lib/utils/queue.js +19 -0
  78. package/dist/esm/lib/utils/queue.js.map +1 -0
  79. package/dist/esm/lib/utils/statistic-utills.js.map +1 -1
  80. package/dist/esm/lib/utils/write-queue.js +88 -0
  81. package/dist/esm/lib/utils/write-queue.js.map +1 -0
  82. package/dist/esm/pgm-loader.js +1 -1
  83. package/dist/esm/workers/3d-tiles-attributes-worker.js +5 -0
  84. package/dist/esm/workers/3d-tiles-attributes-worker.js.map +1 -0
  85. package/dist/esm/workers/i3s-attributes-worker.js +4 -0
  86. package/dist/esm/workers/i3s-attributes-worker.js.map +1 -0
  87. package/dist/i3s-attributes-worker.d.ts +33 -0
  88. package/dist/i3s-attributes-worker.d.ts.map +1 -0
  89. package/dist/i3s-attributes-worker.js +10 -0
  90. package/dist/i3s-attributes-worker.js.map +7 -0
  91. package/dist/i3s-converter/helpers/coordinate-converter.d.ts +7 -7
  92. package/dist/i3s-converter/helpers/coordinate-converter.d.ts.map +1 -1
  93. package/dist/i3s-converter/helpers/coordinate-converter.js +25 -21
  94. package/dist/i3s-converter/helpers/geometry-attributes.d.ts +2 -2
  95. package/dist/i3s-converter/helpers/geometry-attributes.d.ts.map +1 -1
  96. package/dist/i3s-converter/helpers/geometry-attributes.js +2 -1
  97. package/dist/i3s-converter/helpers/geometry-converter.d.ts +28 -11
  98. package/dist/i3s-converter/helpers/geometry-converter.d.ts.map +1 -1
  99. package/dist/i3s-converter/helpers/geometry-converter.js +220 -110
  100. package/dist/i3s-converter/helpers/gltf-attributes.d.ts +9 -0
  101. package/dist/i3s-converter/helpers/gltf-attributes.d.ts.map +1 -0
  102. package/dist/i3s-converter/helpers/gltf-attributes.js +56 -0
  103. package/dist/i3s-converter/helpers/node-pages.d.ts +6 -5
  104. package/dist/i3s-converter/helpers/node-pages.d.ts.map +1 -1
  105. package/dist/i3s-converter/helpers/node-pages.js +13 -8
  106. package/dist/i3s-converter/i3s-converter.d.ts +7 -3
  107. package/dist/i3s-converter/i3s-converter.d.ts.map +1 -1
  108. package/dist/i3s-converter/i3s-converter.js +88 -26
  109. package/dist/i3s-converter/types.d.ts +83 -8
  110. package/dist/i3s-converter/types.d.ts.map +1 -1
  111. package/dist/index.d.ts +1 -0
  112. package/dist/index.d.ts.map +1 -1
  113. package/dist/index.js +3 -1
  114. package/dist/lib/utils/compress-util.d.ts +44 -5
  115. package/dist/lib/utils/compress-util.d.ts.map +1 -1
  116. package/dist/lib/utils/compress-util.js +73 -6
  117. package/dist/lib/utils/file-utils.d.ts +34 -5
  118. package/dist/lib/utils/file-utils.d.ts.map +1 -1
  119. package/dist/lib/utils/file-utils.js +40 -1
  120. package/dist/lib/utils/lod-conversion-utils.d.ts +25 -4
  121. package/dist/lib/utils/lod-conversion-utils.d.ts.map +1 -1
  122. package/dist/lib/utils/lod-conversion-utils.js +21 -2
  123. package/dist/lib/utils/queue.d.ts +7 -0
  124. package/dist/lib/utils/queue.d.ts.map +1 -0
  125. package/dist/lib/utils/queue.js +18 -0
  126. package/dist/lib/utils/statistic-utills.d.ts +2 -2
  127. package/dist/lib/utils/statistic-utills.d.ts.map +1 -1
  128. package/dist/lib/utils/write-queue.d.ts +22 -0
  129. package/dist/lib/utils/write-queue.d.ts.map +1 -0
  130. package/dist/lib/utils/write-queue.js +62 -0
  131. package/dist/workers/3d-tiles-attributes-worker.d.ts +2 -0
  132. package/dist/workers/3d-tiles-attributes-worker.d.ts.map +1 -0
  133. package/dist/workers/3d-tiles-attributes-worker.js +9 -0
  134. package/dist/workers/i3s-attributes-worker.d.ts +2 -0
  135. package/dist/workers/i3s-attributes-worker.d.ts.map +1 -0
  136. package/dist/workers/i3s-attributes-worker.js +5 -0
  137. package/package.json +20 -17
  138. package/src/3d-tiles-attributes-worker.ts +43 -0
  139. package/src/3d-tiles-converter/3d-tiles-converter.ts +44 -4
  140. package/src/3d-tiles-converter/helpers/b3dm-converter.ts +15 -13
  141. package/src/i3s-attributes-worker.ts +46 -0
  142. package/src/i3s-converter/helpers/coordinate-converter.ts +29 -24
  143. package/src/i3s-converter/helpers/geometry-attributes.ts +4 -3
  144. package/src/i3s-converter/helpers/{geometry-converter.js → geometry-converter.ts} +421 -175
  145. package/src/i3s-converter/helpers/gltf-attributes.ts +68 -0
  146. package/src/i3s-converter/helpers/node-pages.ts +25 -17
  147. package/src/i3s-converter/i3s-converter.ts +112 -69
  148. package/src/i3s-converter/types.ts +90 -8
  149. package/src/index.ts +1 -0
  150. package/src/lib/utils/{compress-util.js → compress-util.ts} +105 -18
  151. package/src/lib/utils/file-utils.ts +84 -0
  152. package/src/lib/utils/{lod-conversion-utils.js → lod-conversion-utils.ts} +27 -5
  153. package/src/lib/utils/queue.ts +17 -0
  154. package/src/lib/utils/{statistic-utills.js → statistic-utills.ts} +0 -0
  155. package/src/lib/utils/write-queue.ts +75 -0
  156. package/src/workers/3d-tiles-attributes-worker.ts +6 -0
  157. package/src/workers/i3s-attributes-worker.ts +6 -0
  158. package/dist/es5/i3s-converter/helpers/geometry-converter.d.ts +0 -44
  159. package/dist/es5/lib/utils/compress-util.d.ts +0 -53
  160. package/dist/es5/lib/utils/file-utils.d.ts +0 -43
  161. package/dist/es5/lib/utils/lod-conversion-utils.d.ts +0 -32
  162. package/dist/esm/i3s-converter/helpers/geometry-converter.d.ts +0 -44
  163. package/dist/esm/lib/utils/compress-util.d.ts +0 -53
  164. package/dist/esm/lib/utils/file-utils.d.ts +0 -43
  165. package/dist/esm/lib/utils/lod-conversion-utils.d.ts +0 -32
  166. package/src/i3s-converter/helpers/geometry-converter.d.ts +0 -44
  167. package/src/lib/utils/compress-util.d.ts +0 -53
  168. package/src/lib/utils/file-utils.d.ts +0 -43
  169. package/src/lib/utils/file-utils.js +0 -38
  170. package/src/lib/utils/lod-conversion-utils.d.ts +0 -32
package/dist/dist.min.js CHANGED
@@ -556,8 +556,8 @@ var require_globals2 = __commonJS({
556
556
  exports.isBrowser = exports.VERSION = void 0;
557
557
  var _isBrowser = _interopRequireDefault(require_is_browser());
558
558
  var _globals = require_globals();
559
- var VERSION15 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "untranspiled source";
560
- exports.VERSION = VERSION15;
559
+ var VERSION18 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "untranspiled source";
560
+ exports.VERSION = VERSION18;
561
561
  var isBrowser3 = (0, _isBrowser.default)();
562
562
  exports.isBrowser = isBrowser3;
563
563
  }
@@ -1027,7 +1027,7 @@ var require_log = __commonJS({
1027
1027
  enabled: true,
1028
1028
  level: 0
1029
1029
  };
1030
- function noop2() {
1030
+ function noop() {
1031
1031
  }
1032
1032
  var cache = {};
1033
1033
  var ONCE = {
@@ -1168,18 +1168,18 @@ var require_log = __commonJS({
1168
1168
  key: "table",
1169
1169
  value: function table(logLevel, _table, columns) {
1170
1170
  if (_table) {
1171
- return this._getLogFunction(logLevel, _table, console.table || noop2, columns && [columns], {
1171
+ return this._getLogFunction(logLevel, _table, console.table || noop, columns && [columns], {
1172
1172
  tag: getTableHeader(_table)
1173
1173
  });
1174
1174
  }
1175
- return noop2;
1175
+ return noop;
1176
1176
  }
1177
1177
  }, {
1178
1178
  key: "image",
1179
1179
  value: function image(_ref2) {
1180
1180
  var logLevel = _ref2.logLevel, priority = _ref2.priority, _image = _ref2.image, _ref2$message = _ref2.message, message = _ref2$message === void 0 ? "" : _ref2$message, _ref2$scale = _ref2.scale, scale = _ref2$scale === void 0 ? 1 : _ref2$scale;
1181
1181
  if (!this._shouldLog(logLevel || priority)) {
1182
- return noop2;
1182
+ return noop;
1183
1183
  }
1184
1184
  return _globals.isBrowser ? logImageInBrowser({
1185
1185
  image: _image,
@@ -1223,7 +1223,7 @@ var require_log = __commonJS({
1223
1223
  }, {
1224
1224
  key: "timeStamp",
1225
1225
  value: function timeStamp(logLevel, message) {
1226
- return this._getLogFunction(logLevel, message, console.timeStamp || noop2);
1226
+ return this._getLogFunction(logLevel, message, console.timeStamp || noop);
1227
1227
  }
1228
1228
  }, {
1229
1229
  key: "group",
@@ -1251,7 +1251,7 @@ var require_log = __commonJS({
1251
1251
  }, {
1252
1252
  key: "groupEnd",
1253
1253
  value: function groupEnd(logLevel) {
1254
- return this._getLogFunction(logLevel, "", console.groupEnd || noop2);
1254
+ return this._getLogFunction(logLevel, "", console.groupEnd || noop);
1255
1255
  }
1256
1256
  }, {
1257
1257
  key: "withGroup",
@@ -1298,13 +1298,13 @@ var require_log = __commonJS({
1298
1298
  if (!cache[tag]) {
1299
1299
  cache[tag] = (0, _hiResTimestamp.default)();
1300
1300
  } else {
1301
- return noop2;
1301
+ return noop;
1302
1302
  }
1303
1303
  }
1304
1304
  message = decorateMessage(this.id, opts.message, opts);
1305
1305
  return (_method = method).bind.apply(_method, [console, message].concat((0, _toConsumableArray2.default)(opts.args)));
1306
1306
  }
1307
- return noop2;
1307
+ return noop;
1308
1308
  }
1309
1309
  }]);
1310
1310
  return Log4;
@@ -1381,7 +1381,7 @@ var require_log = __commonJS({
1381
1381
  });
1382
1382
  };
1383
1383
  }
1384
- return noop2;
1384
+ return noop;
1385
1385
  }
1386
1386
  function logImageInBrowser(_ref4) {
1387
1387
  var image = _ref4.image, _ref4$message = _ref4.message, message = _ref4$message === void 0 ? "" : _ref4$message, _ref4$scale = _ref4.scale, scale = _ref4$scale === void 0 ? 1 : _ref4$scale;
@@ -1393,13 +1393,13 @@ var require_log = __commonJS({
1393
1393
  (_console = console).log.apply(_console, (0, _toConsumableArray2.default)(args));
1394
1394
  };
1395
1395
  img.src = image;
1396
- return noop2;
1396
+ return noop;
1397
1397
  }
1398
1398
  var element = image.nodeName || "";
1399
1399
  if (element.toLowerCase() === "img") {
1400
1400
  var _console2;
1401
1401
  (_console2 = console).log.apply(_console2, (0, _toConsumableArray2.default)((0, _formatters.formatImage)(image, message, scale)));
1402
- return noop2;
1402
+ return noop;
1403
1403
  }
1404
1404
  if (element.toLowerCase() === "canvas") {
1405
1405
  var _img = new Image();
@@ -1408,9 +1408,9 @@ var require_log = __commonJS({
1408
1408
  return (_console3 = console).log.apply(_console3, (0, _toConsumableArray2.default)((0, _formatters.formatImage)(_img, message, scale)));
1409
1409
  };
1410
1410
  _img.src = image.toDataURL();
1411
- return noop2;
1411
+ return noop;
1412
1412
  }
1413
- return noop2;
1413
+ return noop;
1414
1414
  }
1415
1415
  }
1416
1416
  });
@@ -2097,8 +2097,8 @@ var require_globals4 = __commonJS({
2097
2097
  });
2098
2098
  var _isBrowser = _interopRequireDefault(require_is_browser2());
2099
2099
  var _globals = require_globals3();
2100
- var VERSION15 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "untranspiled source";
2101
- exports.VERSION = VERSION15;
2100
+ var VERSION18 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "untranspiled source";
2101
+ exports.VERSION = VERSION18;
2102
2102
  var isBrowser3 = (0, _isBrowser.default)();
2103
2103
  exports.isBrowser = isBrowser3;
2104
2104
  }
@@ -2681,7 +2681,7 @@ var require_log2 = __commonJS({
2681
2681
  enabled: true,
2682
2682
  level: 0
2683
2683
  };
2684
- function noop2() {
2684
+ function noop() {
2685
2685
  }
2686
2686
  var cache = {};
2687
2687
  var ONCE = {
@@ -2839,18 +2839,18 @@ var require_log2 = __commonJS({
2839
2839
  key: "table",
2840
2840
  value: function table(logLevel, _table, columns) {
2841
2841
  if (_table) {
2842
- return this._getLogFunction(logLevel, _table, console.table || noop2, columns && [columns], {
2842
+ return this._getLogFunction(logLevel, _table, console.table || noop, columns && [columns], {
2843
2843
  tag: getTableHeader(_table)
2844
2844
  });
2845
2845
  }
2846
- return noop2;
2846
+ return noop;
2847
2847
  }
2848
2848
  }, {
2849
2849
  key: "image",
2850
2850
  value: function image(_ref2) {
2851
2851
  var logLevel = _ref2.logLevel, priority = _ref2.priority, _image = _ref2.image, _ref2$message = _ref2.message, message = _ref2$message === void 0 ? "" : _ref2$message, _ref2$scale = _ref2.scale, scale = _ref2$scale === void 0 ? 1 : _ref2$scale;
2852
2852
  if (!this._shouldLog(logLevel || priority)) {
2853
- return noop2;
2853
+ return noop;
2854
2854
  }
2855
2855
  return _env.isBrowser ? logImageInBrowser({
2856
2856
  image: _image,
@@ -2875,7 +2875,7 @@ var require_log2 = __commonJS({
2875
2875
  }, {
2876
2876
  key: "timeStamp",
2877
2877
  value: function timeStamp(logLevel, message) {
2878
- return this._getLogFunction(logLevel, message, console.timeStamp || noop2);
2878
+ return this._getLogFunction(logLevel, message, console.timeStamp || noop);
2879
2879
  }
2880
2880
  }, {
2881
2881
  key: "group",
@@ -2903,7 +2903,7 @@ var require_log2 = __commonJS({
2903
2903
  }, {
2904
2904
  key: "groupEnd",
2905
2905
  value: function groupEnd(logLevel) {
2906
- return this._getLogFunction(logLevel, "", console.groupEnd || noop2);
2906
+ return this._getLogFunction(logLevel, "", console.groupEnd || noop);
2907
2907
  }
2908
2908
  }, {
2909
2909
  key: "withGroup",
@@ -2948,13 +2948,13 @@ var require_log2 = __commonJS({
2948
2948
  if (!cache[tag]) {
2949
2949
  cache[tag] = (0, _hiResTimestamp.getHiResTimestamp)();
2950
2950
  } else {
2951
- return noop2;
2951
+ return noop;
2952
2952
  }
2953
2953
  }
2954
2954
  message = decorateMessage(this.id, opts.message, opts);
2955
2955
  return (_method = method).bind.apply(_method, [console, message].concat((0, _toConsumableArray2.default)(opts.args)));
2956
2956
  }
2957
- return noop2;
2957
+ return noop;
2958
2958
  }
2959
2959
  }]);
2960
2960
  return Log4;
@@ -3032,7 +3032,7 @@ var require_log2 = __commonJS({
3032
3032
  });
3033
3033
  };
3034
3034
  }
3035
- return noop2;
3035
+ return noop;
3036
3036
  }
3037
3037
  function logImageInBrowser(_ref4) {
3038
3038
  var image = _ref4.image, _ref4$message = _ref4.message, message = _ref4$message === void 0 ? "" : _ref4$message, _ref4$scale = _ref4.scale, scale = _ref4$scale === void 0 ? 1 : _ref4$scale;
@@ -3044,13 +3044,13 @@ var require_log2 = __commonJS({
3044
3044
  (_console = console).log.apply(_console, (0, _toConsumableArray2.default)(args));
3045
3045
  };
3046
3046
  img.src = image;
3047
- return noop2;
3047
+ return noop;
3048
3048
  }
3049
3049
  var element = image.nodeName || "";
3050
3050
  if (element.toLowerCase() === "img") {
3051
3051
  var _console2;
3052
3052
  (_console2 = console).log.apply(_console2, (0, _toConsumableArray2.default)((0, _formatters.formatImage)(image, message, scale)));
3053
- return noop2;
3053
+ return noop;
3054
3054
  }
3055
3055
  if (element.toLowerCase() === "canvas") {
3056
3056
  var _img = new Image();
@@ -3059,9 +3059,9 @@ var require_log2 = __commonJS({
3059
3059
  return (_console3 = console).log.apply(_console3, (0, _toConsumableArray2.default)((0, _formatters.formatImage)(_img, message, scale)));
3060
3060
  };
3061
3061
  _img.src = image.toDataURL();
3062
- return noop2;
3062
+ return noop;
3063
3063
  }
3064
- return noop2;
3064
+ return noop;
3065
3065
  }
3066
3066
  function getTableHeader(table) {
3067
3067
  for (var _key2 in table) {
@@ -10785,12 +10785,12 @@ var require_type_utils = __commonJS({
10785
10785
  exports.isWGS84 = isWGS84;
10786
10786
  var _core = require_es56();
10787
10787
  var _constants = require_constants();
10788
- var noop2 = function noop3(x) {
10788
+ var noop = function noop2(x) {
10789
10789
  return x;
10790
10790
  };
10791
10791
  var scratchVector7 = new _core.Vector3();
10792
10792
  function fromCartographic(cartographic, result) {
10793
- var map = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : noop2;
10793
+ var map = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : noop;
10794
10794
  if ((0, _core.isArray)(cartographic)) {
10795
10795
  result[0] = map(cartographic[0]);
10796
10796
  result[1] = map(cartographic[1]);
@@ -10808,14 +10808,14 @@ var require_type_utils = __commonJS({
10808
10808
  }
10809
10809
  function fromCartographicToRadians(cartographic) {
10810
10810
  var vector = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : scratchVector7;
10811
- return fromCartographic(cartographic, vector, _core.config._cartographicRadians ? noop2 : _core.toRadians);
10811
+ return fromCartographic(cartographic, vector, _core.config._cartographicRadians ? noop : _core.toRadians);
10812
10812
  }
10813
10813
  function fromCartographicToDegrees(cartographic) {
10814
10814
  var vector = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : scratchVector7;
10815
- return fromCartographic(cartographic, vector, _core.config._cartographicRadians ? _core.toDegrees : noop2);
10815
+ return fromCartographic(cartographic, vector, _core.config._cartographicRadians ? _core.toDegrees : noop);
10816
10816
  }
10817
10817
  function toCartographic(vector, cartographic) {
10818
- var map = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : noop2;
10818
+ var map = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : noop;
10819
10819
  if ((0, _core.isArray)(cartographic)) {
10820
10820
  cartographic[0] = map(vector[0]);
10821
10821
  cartographic[1] = map(vector[1]);
@@ -10832,10 +10832,10 @@ var require_type_utils = __commonJS({
10832
10832
  return cartographic;
10833
10833
  }
10834
10834
  function toCartographicFromRadians(vector, cartographic) {
10835
- return toCartographic(vector, cartographic, _core.config._cartographicRadians ? noop2 : _core.toDegrees);
10835
+ return toCartographic(vector, cartographic, _core.config._cartographicRadians ? noop : _core.toDegrees);
10836
10836
  }
10837
10837
  function toCartographicFromDegrees(vector, cartographic) {
10838
- return toCartographic(vector, cartographic, _core.config._cartographicRadians ? _core.toRadians : noop2);
10838
+ return toCartographic(vector, cartographic, _core.config._cartographicRadians ? _core.toRadians : noop);
10839
10839
  }
10840
10840
  function isWGS84(vector) {
10841
10841
  if (!vector) {
@@ -11146,12 +11146,12 @@ var require_ellipsoid = __commonJS({
11146
11146
  var scratchHeight = new _core.Vector3();
11147
11147
  var scratchCartesian = new _core.Vector3();
11148
11148
  var wgs84;
11149
- var Ellipsoid14 = function() {
11150
- function Ellipsoid15() {
11149
+ var Ellipsoid15 = function() {
11150
+ function Ellipsoid16() {
11151
11151
  var x = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0;
11152
11152
  var y = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0;
11153
11153
  var z = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 0;
11154
- (0, _classCallCheck2.default)(this, Ellipsoid15);
11154
+ (0, _classCallCheck2.default)(this, Ellipsoid16);
11155
11155
  (0, _core.assert)(x >= 0);
11156
11156
  (0, _core.assert)(y >= 0);
11157
11157
  (0, _core.assert)(z >= 0);
@@ -11168,7 +11168,7 @@ var require_ellipsoid = __commonJS({
11168
11168
  }
11169
11169
  Object.freeze(this);
11170
11170
  }
11171
- (0, _createClass2.default)(Ellipsoid15, [{
11171
+ (0, _createClass2.default)(Ellipsoid16, [{
11172
11172
  key: "equals",
11173
11173
  value: function equals(right) {
11174
11174
  return this === right || Boolean(right && this.radii.equals(right.radii));
@@ -11291,13 +11291,13 @@ var require_ellipsoid = __commonJS({
11291
11291
  }], [{
11292
11292
  key: "WGS84",
11293
11293
  get: function get() {
11294
- wgs84 = wgs84 || new Ellipsoid15(_constants.WGS84_RADIUS_X, _constants.WGS84_RADIUS_Y, _constants.WGS84_RADIUS_Z);
11294
+ wgs84 = wgs84 || new Ellipsoid16(_constants.WGS84_RADIUS_X, _constants.WGS84_RADIUS_Y, _constants.WGS84_RADIUS_Z);
11295
11295
  return wgs84;
11296
11296
  }
11297
11297
  }]);
11298
- return Ellipsoid15;
11298
+ return Ellipsoid16;
11299
11299
  }();
11300
- exports.default = Ellipsoid14;
11300
+ exports.default = Ellipsoid15;
11301
11301
  }
11302
11302
  });
11303
11303
 
@@ -11492,16 +11492,16 @@ var require_bounding_sphere = __commonJS({
11492
11492
  }
11493
11493
  var scratchVector7 = new _core.Vector3();
11494
11494
  var scratchVector23 = new _core.Vector3();
11495
- var BoundingSphere4 = function() {
11496
- function BoundingSphere5() {
11495
+ var BoundingSphere5 = function() {
11496
+ function BoundingSphere6() {
11497
11497
  var center = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [0, 0, 0];
11498
11498
  var radius = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0;
11499
- (0, _classCallCheck2.default)(this, BoundingSphere5);
11499
+ (0, _classCallCheck2.default)(this, BoundingSphere6);
11500
11500
  this.radius = -0;
11501
11501
  this.center = new _core.Vector3();
11502
11502
  this.fromCenterRadius(center, radius);
11503
11503
  }
11504
- (0, _createClass2.default)(BoundingSphere5, [{
11504
+ (0, _createClass2.default)(BoundingSphere6, [{
11505
11505
  key: "fromCenterRadius",
11506
11506
  value: function fromCenterRadius(center, radius) {
11507
11507
  this.center.from(center);
@@ -11524,7 +11524,7 @@ var require_bounding_sphere = __commonJS({
11524
11524
  }, {
11525
11525
  key: "clone",
11526
11526
  value: function clone2() {
11527
- return new BoundingSphere5(this.center, this.radius);
11527
+ return new BoundingSphere6(this.center, this.radius);
11528
11528
  }
11529
11529
  }, {
11530
11530
  key: "union",
@@ -11593,9 +11593,9 @@ var require_bounding_sphere = __commonJS({
11593
11593
  return _constants.INTERSECTION.INSIDE;
11594
11594
  }
11595
11595
  }]);
11596
- return BoundingSphere5;
11596
+ return BoundingSphere6;
11597
11597
  }();
11598
- exports.default = BoundingSphere4;
11598
+ exports.default = BoundingSphere5;
11599
11599
  }
11600
11600
  });
11601
11601
 
@@ -17410,7 +17410,7 @@ var require_graceful_fs = __commonJS({
17410
17410
  gracefulQueue = "___graceful-fs.queue";
17411
17411
  previousSymbol = "___graceful-fs.previous";
17412
17412
  }
17413
- function noop2() {
17413
+ function noop() {
17414
17414
  }
17415
17415
  function publishQueue(context, queue2) {
17416
17416
  Object.defineProperty(context, gracefulQueue, {
@@ -17419,7 +17419,7 @@ var require_graceful_fs = __commonJS({
17419
17419
  }
17420
17420
  });
17421
17421
  }
17422
- var debug = noop2;
17422
+ var debug = noop;
17423
17423
  if (util2.debuglog)
17424
17424
  debug = util2.debuglog("gfs4");
17425
17425
  else if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || ""))
@@ -20885,7 +20885,7 @@ var require_lodash4 = __commonJS({
20885
20885
  }
20886
20886
  return result;
20887
20887
  }
20888
- var createSet = !(Set2 && 1 / setToArray(new Set2([, -0]))[1] == INFINITY) ? noop2 : function(values) {
20888
+ var createSet = !(Set2 && 1 / setToArray(new Set2([, -0]))[1] == INFINITY) ? noop : function(values) {
20889
20889
  return new Set2(values);
20890
20890
  };
20891
20891
  function getMapData(map, key) {
@@ -20949,7 +20949,7 @@ var require_lodash4 = __commonJS({
20949
20949
  function isObjectLike(value) {
20950
20950
  return !!value && typeof value == "object";
20951
20951
  }
20952
- function noop2() {
20952
+ function noop() {
20953
20953
  }
20954
20954
  module2.exports = union;
20955
20955
  }
@@ -24196,7 +24196,7 @@ var require_end_of_stream = __commonJS({
24196
24196
  callback.apply(this, args);
24197
24197
  };
24198
24198
  }
24199
- function noop2() {
24199
+ function noop() {
24200
24200
  }
24201
24201
  function isRequest(stream) {
24202
24202
  return stream.setHeader && typeof stream.abort === "function";
@@ -24206,7 +24206,7 @@ var require_end_of_stream = __commonJS({
24206
24206
  return eos(stream, null, opts);
24207
24207
  if (!opts)
24208
24208
  opts = {};
24209
- callback = once(callback || noop2);
24209
+ callback = once(callback || noop);
24210
24210
  var readable = opts.readable || opts.readable !== false && stream.readable;
24211
24211
  var writable = opts.writable || opts.writable !== false && stream.writable;
24212
24212
  var onlegacyfinish = function onlegacyfinish2() {
@@ -25491,7 +25491,7 @@ var require_pipeline = __commonJS({
25491
25491
  var _require$codes = require_errors().codes;
25492
25492
  var ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS;
25493
25493
  var ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;
25494
- function noop2(err) {
25494
+ function noop(err) {
25495
25495
  if (err)
25496
25496
  throw err;
25497
25497
  }
@@ -25537,9 +25537,9 @@ var require_pipeline = __commonJS({
25537
25537
  }
25538
25538
  function popCallback(streams) {
25539
25539
  if (!streams.length)
25540
- return noop2;
25540
+ return noop;
25541
25541
  if (typeof streams[streams.length - 1] !== "function")
25542
- return noop2;
25542
+ return noop;
25543
25543
  return streams.pop();
25544
25544
  }
25545
25545
  function pipeline() {
@@ -27850,7 +27850,7 @@ var require_end_of_stream2 = __commonJS({
27850
27850
  callback.apply(this, args);
27851
27851
  };
27852
27852
  }
27853
- function noop2() {
27853
+ function noop() {
27854
27854
  }
27855
27855
  function isRequest(stream) {
27856
27856
  return stream.setHeader && typeof stream.abort === "function";
@@ -27860,7 +27860,7 @@ var require_end_of_stream2 = __commonJS({
27860
27860
  return eos(stream, null, opts);
27861
27861
  if (!opts)
27862
27862
  opts = {};
27863
- callback = once(callback || noop2);
27863
+ callback = once(callback || noop);
27864
27864
  var readable = opts.readable || opts.readable !== false && stream.readable;
27865
27865
  var writable = opts.writable || opts.writable !== false && stream.writable;
27866
27866
  var onlegacyfinish = function onlegacyfinish2() {
@@ -29145,7 +29145,7 @@ var require_pipeline2 = __commonJS({
29145
29145
  var _require$codes = require_errors2().codes;
29146
29146
  var ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS;
29147
29147
  var ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;
29148
- function noop2(err) {
29148
+ function noop(err) {
29149
29149
  if (err)
29150
29150
  throw err;
29151
29151
  }
@@ -29191,9 +29191,9 @@ var require_pipeline2 = __commonJS({
29191
29191
  }
29192
29192
  function popCallback(streams) {
29193
29193
  if (!streams.length)
29194
- return noop2;
29194
+ return noop;
29195
29195
  if (typeof streams[streams.length - 1] !== "function")
29196
- return noop2;
29196
+ return noop;
29197
29197
  return streams.pop();
29198
29198
  }
29199
29199
  function pipeline() {
@@ -30992,7 +30992,7 @@ var require_end_of_stream3 = __commonJS({
30992
30992
  callback.apply(this, args);
30993
30993
  };
30994
30994
  }
30995
- function noop2() {
30995
+ function noop() {
30996
30996
  }
30997
30997
  function isRequest(stream) {
30998
30998
  return stream.setHeader && typeof stream.abort === "function";
@@ -31002,7 +31002,7 @@ var require_end_of_stream3 = __commonJS({
31002
31002
  return eos(stream, null, opts);
31003
31003
  if (!opts)
31004
31004
  opts = {};
31005
- callback = once(callback || noop2);
31005
+ callback = once(callback || noop);
31006
31006
  var readable = opts.readable || opts.readable !== false && stream.readable;
31007
31007
  var writable = opts.writable || opts.writable !== false && stream.writable;
31008
31008
  var onlegacyfinish = function onlegacyfinish2() {
@@ -32287,7 +32287,7 @@ var require_pipeline3 = __commonJS({
32287
32287
  var _require$codes = require_errors3().codes;
32288
32288
  var ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS;
32289
32289
  var ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;
32290
- function noop2(err) {
32290
+ function noop(err) {
32291
32291
  if (err)
32292
32292
  throw err;
32293
32293
  }
@@ -32333,9 +32333,9 @@ var require_pipeline3 = __commonJS({
32333
32333
  }
32334
32334
  function popCallback(streams) {
32335
32335
  if (!streams.length)
32336
- return noop2;
32336
+ return noop;
32337
32337
  if (typeof streams[streams.length - 1] !== "function")
32338
- return noop2;
32338
+ return noop;
32339
32339
  return streams.pop();
32340
32340
  }
32341
32341
  function pipeline() {
@@ -34364,7 +34364,7 @@ var require_end_of_stream4 = __commonJS({
34364
34364
  callback.apply(this, args);
34365
34365
  };
34366
34366
  }
34367
- function noop2() {
34367
+ function noop() {
34368
34368
  }
34369
34369
  function isRequest(stream) {
34370
34370
  return stream.setHeader && typeof stream.abort === "function";
@@ -34374,7 +34374,7 @@ var require_end_of_stream4 = __commonJS({
34374
34374
  return eos(stream, null, opts);
34375
34375
  if (!opts)
34376
34376
  opts = {};
34377
- callback = once(callback || noop2);
34377
+ callback = once(callback || noop);
34378
34378
  var readable = opts.readable || opts.readable !== false && stream.readable;
34379
34379
  var writable = opts.writable || opts.writable !== false && stream.writable;
34380
34380
  var onlegacyfinish = function onlegacyfinish2() {
@@ -35659,7 +35659,7 @@ var require_pipeline4 = __commonJS({
35659
35659
  var _require$codes = require_errors4().codes;
35660
35660
  var ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS;
35661
35661
  var ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;
35662
- function noop2(err) {
35662
+ function noop(err) {
35663
35663
  if (err)
35664
35664
  throw err;
35665
35665
  }
@@ -35705,9 +35705,9 @@ var require_pipeline4 = __commonJS({
35705
35705
  }
35706
35706
  function popCallback(streams) {
35707
35707
  if (!streams.length)
35708
- return noop2;
35708
+ return noop;
35709
35709
  if (typeof streams[streams.length - 1] !== "function")
35710
- return noop2;
35710
+ return noop;
35711
35711
  return streams.pop();
35712
35712
  }
35713
35713
  function pipeline() {
@@ -37738,7 +37738,7 @@ var require_end_of_stream5 = __commonJS({
37738
37738
  callback.apply(this, args);
37739
37739
  };
37740
37740
  }
37741
- function noop2() {
37741
+ function noop() {
37742
37742
  }
37743
37743
  function isRequest(stream) {
37744
37744
  return stream.setHeader && typeof stream.abort === "function";
@@ -37748,7 +37748,7 @@ var require_end_of_stream5 = __commonJS({
37748
37748
  return eos(stream, null, opts);
37749
37749
  if (!opts)
37750
37750
  opts = {};
37751
- callback = once(callback || noop2);
37751
+ callback = once(callback || noop);
37752
37752
  var readable = opts.readable || opts.readable !== false && stream.readable;
37753
37753
  var writable = opts.writable || opts.writable !== false && stream.writable;
37754
37754
  var onlegacyfinish = function onlegacyfinish2() {
@@ -39033,7 +39033,7 @@ var require_pipeline5 = __commonJS({
39033
39033
  var _require$codes = require_errors5().codes;
39034
39034
  var ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS;
39035
39035
  var ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;
39036
- function noop2(err) {
39036
+ function noop(err) {
39037
39037
  if (err)
39038
39038
  throw err;
39039
39039
  }
@@ -39079,9 +39079,9 @@ var require_pipeline5 = __commonJS({
39079
39079
  }
39080
39080
  function popCallback(streams) {
39081
39081
  if (!streams.length)
39082
- return noop2;
39082
+ return noop;
39083
39083
  if (typeof streams[streams.length - 1] !== "function")
39084
- return noop2;
39084
+ return noop;
39085
39085
  return streams.pop();
39086
39086
  }
39087
39087
  function pipeline() {
@@ -39145,7 +39145,7 @@ var require_extract = __commonJS({
39145
39145
  var headers = require_headers();
39146
39146
  var Writable = require_readable6().Writable;
39147
39147
  var PassThrough = require_readable6().PassThrough;
39148
- var noop2 = function() {
39148
+ var noop = function() {
39149
39149
  };
39150
39150
  var overflow = function(size) {
39151
39151
  size &= 511;
@@ -39184,7 +39184,7 @@ var require_extract = __commonJS({
39184
39184
  this._buffer = bl();
39185
39185
  this._missing = 0;
39186
39186
  this._partial = false;
39187
- this._onparse = noop2;
39187
+ this._onparse = noop;
39188
39188
  this._header = null;
39189
39189
  this._stream = null;
39190
39190
  this._overflow = null;
@@ -39332,7 +39332,7 @@ var require_extract = __commonJS({
39332
39332
  if (this._destroyed)
39333
39333
  return;
39334
39334
  var cb = this._cb;
39335
- this._cb = noop2;
39335
+ this._cb = noop;
39336
39336
  if (this._overflow)
39337
39337
  this._write(this._overflow, void 0, cb);
39338
39338
  else
@@ -39388,7 +39388,7 @@ var require_fs_constants = __commonJS({
39388
39388
  var require_end_of_stream6 = __commonJS({
39389
39389
  "../../node_modules/end-of-stream/index.js"(exports, module2) {
39390
39390
  var once = require_once();
39391
- var noop2 = function() {
39391
+ var noop = function() {
39392
39392
  };
39393
39393
  var isRequest = function(stream) {
39394
39394
  return stream.setHeader && typeof stream.abort === "function";
@@ -39401,7 +39401,7 @@ var require_end_of_stream6 = __commonJS({
39401
39401
  return eos(stream, null, opts);
39402
39402
  if (!opts)
39403
39403
  opts = {};
39404
- callback = once(callback || noop2);
39404
+ callback = once(callback || noop);
39405
39405
  var ws = stream._writableState;
39406
39406
  var rs = stream._readableState;
39407
39407
  var readable = opts.readable || opts.readable !== false && stream.readable;
@@ -39493,7 +39493,7 @@ var require_pack = __commonJS({
39493
39493
  var DMODE = parseInt("755", 8);
39494
39494
  var FMODE = parseInt("644", 8);
39495
39495
  var END_OF_TAR = alloc(1024);
39496
- var noop2 = function() {
39496
+ var noop = function() {
39497
39497
  };
39498
39498
  var overflow = function(self2, size) {
39499
39499
  size &= 511;
@@ -39569,7 +39569,7 @@ var require_pack = __commonJS({
39569
39569
  if (!(this instanceof Pack))
39570
39570
  return new Pack(opts);
39571
39571
  Readable.call(this, opts);
39572
- this._drain = noop2;
39572
+ this._drain = noop;
39573
39573
  this._finalized = false;
39574
39574
  this._finalizing = false;
39575
39575
  this._destroyed = false;
@@ -39586,7 +39586,7 @@ var require_pack = __commonJS({
39586
39586
  buffer = null;
39587
39587
  }
39588
39588
  if (!callback)
39589
- callback = noop2;
39589
+ callback = noop;
39590
39590
  var self2 = this;
39591
39591
  if (!header.size || header.type === "symlink")
39592
39592
  header.size = 0;
@@ -39710,7 +39710,7 @@ var require_pack = __commonJS({
39710
39710
  };
39711
39711
  Pack.prototype._read = function(n) {
39712
39712
  var drain = this._drain;
39713
- this._drain = noop2;
39713
+ this._drain = noop;
39714
39714
  drain();
39715
39715
  };
39716
39716
  module2.exports = Pack;
@@ -49832,7 +49832,7 @@ var require_init3 = __commonJS({
49832
49832
  var _gltools = require_es510();
49833
49833
  var _probe = require_es53();
49834
49834
  var _env = require_env2();
49835
- var VERSION15 = true ? "8.5.4" : "untranspiled source";
49835
+ var VERSION18 = true ? "8.5.4" : "untranspiled source";
49836
49836
  var STARTUP_MESSAGE = "set luma.log.level=1 (or higher) to trace rendering";
49837
49837
  var StatsManager = function() {
49838
49838
  function StatsManager2() {
@@ -49854,16 +49854,16 @@ var require_init3 = __commonJS({
49854
49854
  }();
49855
49855
  var lumaStats = new StatsManager();
49856
49856
  exports.lumaStats = lumaStats;
49857
- if (_env.global.luma && _env.global.luma.VERSION !== VERSION15) {
49858
- throw new Error("luma.gl - multiple VERSIONs detected: ".concat(_env.global.luma.VERSION, " vs ").concat(VERSION15));
49857
+ if (_env.global.luma && _env.global.luma.VERSION !== VERSION18) {
49858
+ throw new Error("luma.gl - multiple VERSIONs detected: ".concat(_env.global.luma.VERSION, " vs ").concat(VERSION18));
49859
49859
  }
49860
49860
  if (!_env.global.luma) {
49861
49861
  if ((0, _env.isBrowser)()) {
49862
- _gltools.log.log(1, "luma.gl ".concat(VERSION15, " - ").concat(STARTUP_MESSAGE))();
49862
+ _gltools.log.log(1, "luma.gl ".concat(VERSION18, " - ").concat(STARTUP_MESSAGE))();
49863
49863
  }
49864
49864
  _env.global.luma = _env.global.luma || {
49865
- VERSION: VERSION15,
49866
- version: VERSION15,
49865
+ VERSION: VERSION18,
49866
+ version: VERSION18,
49867
49867
  log: _gltools.log,
49868
49868
  stats: lumaStats,
49869
49869
  globals: {
@@ -73407,7 +73407,8 @@ __export(exports, {
73407
73407
  DepsInstaller: () => DepsInstaller,
73408
73408
  I3SConverter: () => I3SConverter,
73409
73409
  NodePages: () => NodePages,
73410
- Tiles3DConverter: () => Tiles3DConverter
73410
+ Tiles3DConverter: () => Tiles3DConverter,
73411
+ prepareDataForAttributesConversion: () => prepareDataForAttributesConversion
73411
73412
  });
73412
73413
 
73413
73414
  // ../loader-utils/src/lib/env-utils/assert.ts
@@ -73590,7 +73591,7 @@ var WorkerThread = class {
73590
73591
  this.worker = isBrowser2 ? this._createBrowserWorker() : this._createNodeWorker();
73591
73592
  }
73592
73593
  static isSupported() {
73593
- return typeof Worker !== "undefined" && isBrowser2;
73594
+ return typeof Worker !== "undefined" && isBrowser2 || typeof import_worker_threads.Worker !== void 0;
73594
73595
  }
73595
73596
  destroy() {
73596
73597
  this.onMessage = NOOP;
@@ -73699,9 +73700,9 @@ var WorkerPool = class {
73699
73700
  this.onDebug = props.onDebug;
73700
73701
  }
73701
73702
  }
73702
- async startJob(name8, onMessage2 = (job, type, data) => job.done(data), onError = (job, error) => job.error(error)) {
73703
+ async startJob(name8, onMessage3 = (job, type, data) => job.done(data), onError = (job, error) => job.error(error)) {
73703
73704
  const startPromise = new Promise((onStart) => {
73704
- this.jobQueue.push({ name: name8, onMessage: onMessage2, onError, onStart });
73705
+ this.jobQueue.push({ name: name8, onMessage: onMessage3, onError, onStart });
73705
73706
  return this;
73706
73707
  });
73707
73708
  this._startQueuedJob();
@@ -73821,8 +73822,34 @@ var WorkerFarm = class {
73821
73822
  }
73822
73823
  };
73823
73824
 
73825
+ // ../worker-utils/src/lib/worker-utils/remove-nontransferable-options.ts
73826
+ function removeNontransferableOptions(object) {
73827
+ return JSON.parse(stringifyJSON(object));
73828
+ }
73829
+ function stringifyJSON(v) {
73830
+ const cache = new Set();
73831
+ return JSON.stringify(v, (key, value) => {
73832
+ if (typeof value === "object" && value !== null) {
73833
+ if (cache.has(value)) {
73834
+ try {
73835
+ return JSON.parse(JSON.stringify(value));
73836
+ } catch (err) {
73837
+ return void 0;
73838
+ }
73839
+ }
73840
+ cache.add(value);
73841
+ }
73842
+ return value;
73843
+ });
73844
+ }
73845
+
73824
73846
  // ../worker-utils/src/lib/worker-api/get-worker-url.ts
73825
73847
  var NPM_TAG = "beta";
73848
+ var VERSION2 = typeof VERSION !== "undefined" ? VERSION : NPM_TAG;
73849
+ function getWorkerName(worker) {
73850
+ const warning = worker.version !== VERSION2 ? ` (worker-utils@${VERSION2})` : "";
73851
+ return `${worker.name}@${worker.version}${warning}`;
73852
+ }
73826
73853
  function getWorkerURL(worker, options = {}) {
73827
73854
  const workerOptions = options[worker.id] || {};
73828
73855
  const workerFile = `${worker.id}-worker.js`;
@@ -73845,6 +73872,50 @@ function getWorkerURL(worker, options = {}) {
73845
73872
  return url;
73846
73873
  }
73847
73874
 
73875
+ // ../worker-utils/src/lib/worker-api/process-on-worker.ts
73876
+ async function processOnWorker(worker, data, options = {}, context = {}) {
73877
+ const name8 = getWorkerName(worker);
73878
+ const workerFarm = WorkerFarm.getWorkerFarm(options);
73879
+ const { source } = options;
73880
+ const workerPoolProps = { name: name8, source };
73881
+ if (!source) {
73882
+ workerPoolProps.url = getWorkerURL(worker, options);
73883
+ }
73884
+ const workerPool = workerFarm.getWorkerPool(workerPoolProps);
73885
+ const jobName = options.jobName || worker.name;
73886
+ const job = await workerPool.startJob(jobName, onMessage.bind(null, context));
73887
+ const transferableOptions = removeNontransferableOptions(options);
73888
+ job.postMessage("process", { input: data, options: transferableOptions });
73889
+ const result = await job.result;
73890
+ return result.result;
73891
+ }
73892
+ async function onMessage(context, job, type, payload) {
73893
+ switch (type) {
73894
+ case "done":
73895
+ job.done(payload);
73896
+ break;
73897
+ case "error":
73898
+ job.error(new Error(payload.error));
73899
+ break;
73900
+ case "process":
73901
+ const { id, input, options } = payload;
73902
+ try {
73903
+ if (!context.process) {
73904
+ job.postMessage("error", { id, error: "Worker not set up to process on main thread" });
73905
+ return;
73906
+ }
73907
+ const result = await context.process(input, options);
73908
+ job.postMessage("done", { id, result });
73909
+ } catch (error) {
73910
+ const message = error instanceof Error ? error.message : "unknown error";
73911
+ job.postMessage("error", { id, error: message });
73912
+ }
73913
+ break;
73914
+ default:
73915
+ console.warn(`process-on-worker: unknown message ${type}`);
73916
+ }
73917
+ }
73918
+
73848
73919
  // ../worker-utils/src/lib/worker-api/validate-worker-version.ts
73849
73920
  function validateWorkerVersion(worker, coreVersion = VERSION) {
73850
73921
  assert3(worker, "no worker provided");
@@ -73896,7 +73967,7 @@ function requireFromString(code, filename2 = "", options) {
73896
73967
 
73897
73968
  // ../worker-utils/src/lib/library-utils/library-utils.ts
73898
73969
  var LATEST = "beta";
73899
- var VERSION2 = typeof VERSION !== "undefined" ? VERSION : LATEST;
73970
+ var VERSION3 = typeof VERSION !== "undefined" ? VERSION : LATEST;
73900
73971
  var loadLibraryPromises = {};
73901
73972
  async function loadLibrary(libraryUrl, moduleName = null, options = {}) {
73902
73973
  if (moduleName) {
@@ -73918,7 +73989,7 @@ function getLibraryUrl(library, moduleName, options) {
73918
73989
  }
73919
73990
  if (options.CDN) {
73920
73991
  assert3(options.CDN.startsWith("http"));
73921
- return `${options.CDN}/${moduleName}@${VERSION2}/dist/libs/${library}`;
73992
+ return `${options.CDN}/${moduleName}@${VERSION3}/dist/libs/${library}`;
73922
73993
  }
73923
73994
  if (isWorker) {
73924
73995
  return `../src/libs/${library}`;
@@ -74099,7 +74170,7 @@ async function parseWithWorker(loader, data, options, context, parseOnMainThread
74099
74170
  const workerFarm = WorkerFarm.getWorkerFarm(options);
74100
74171
  const workerPool = workerFarm.getWorkerPool({ name: name8, url });
74101
74172
  options = JSON.parse(JSON.stringify(options));
74102
- const job = await workerPool.startJob("process-on-worker", onMessage.bind(null, parseOnMainThread));
74173
+ const job = await workerPool.startJob("process-on-worker", onMessage2.bind(null, parseOnMainThread));
74103
74174
  job.postMessage("process", {
74104
74175
  input: data,
74105
74176
  options
@@ -74107,7 +74178,7 @@ async function parseWithWorker(loader, data, options, context, parseOnMainThread
74107
74178
  const result = await job.result;
74108
74179
  return await result.result;
74109
74180
  }
74110
- async function onMessage(parseOnMainThread, job, type, payload) {
74181
+ async function onMessage2(parseOnMainThread, job, type, payload) {
74111
74182
  switch (type) {
74112
74183
  case "done":
74113
74184
  job.done(payload);
@@ -74130,6 +74201,17 @@ async function onMessage(parseOnMainThread, job, type, payload) {
74130
74201
  }
74131
74202
  }
74132
74203
 
74204
+ // ../loader-utils/src/lib/worker-loader-utils/encode-with-worker.ts
74205
+ function canEncodeWithWorker(writer, options) {
74206
+ if (!WorkerFarm.isSupported()) {
74207
+ return false;
74208
+ }
74209
+ if (!isBrowser && !options?._nodeWorkers) {
74210
+ return false;
74211
+ }
74212
+ return writer.worker && options?.worker;
74213
+ }
74214
+
74133
74215
  // ../loader-utils/src/lib/binary-utils/get-first-characters.ts
74134
74216
  function getFirstCharacters(data, length = 5) {
74135
74217
  if (typeof data === "string") {
@@ -74670,7 +74752,7 @@ async function getResponseError(response) {
74670
74752
  text += ` ${await response.text()}`;
74671
74753
  }
74672
74754
  message += text;
74673
- message = message.length > 60 ? `${message.slice(60)}...` : message;
74755
+ message = message.length > 60 ? `${message.slice(0, 60)}...` : message;
74674
74756
  } catch (error) {
74675
74757
  }
74676
74758
  return message;
@@ -75374,6 +75456,11 @@ async function load(url, loaders, options, context) {
75374
75456
 
75375
75457
  // ../core/src/lib/api/encode.ts
75376
75458
  async function encode(data, writer, options) {
75459
+ const globalOptions = getGlobalLoaderOptions();
75460
+ options = { ...globalOptions, ...options };
75461
+ if (canEncodeWithWorker(writer, options)) {
75462
+ return await processOnWorker(writer, data, options);
75463
+ }
75377
75464
  if (writer.encode) {
75378
75465
  return await writer.encode(data, options);
75379
75466
  }
@@ -75433,7 +75520,7 @@ function getTemporaryFilename(filename2) {
75433
75520
 
75434
75521
  // ../tiles/src/tileset/tileset-3d.ts
75435
75522
  var import_core10 = __toModule(require_es56());
75436
- var import_geospatial5 = __toModule(require_es57());
75523
+ var import_geospatial6 = __toModule(require_es57());
75437
75524
  var import_stats2 = __toModule(require_es5());
75438
75525
 
75439
75526
  // ../tiles/src/utils/doubly-linked-list-node.ts
@@ -75700,6 +75787,7 @@ function commonSpacePlanesToWGS84(viewport, viewportCenterCartesian) {
75700
75787
  // ../tiles/src/tileset/helpers/zoom.ts
75701
75788
  var import_core3 = __toModule(require_es56());
75702
75789
  var import_culling2 = __toModule(require_es58());
75790
+ var import_geospatial3 = __toModule(require_es57());
75703
75791
  var WGS84_RADIUS_X = 6378137;
75704
75792
  var WGS84_RADIUS_Y = 6378137;
75705
75793
  var WGS84_RADIUS_Z = 6356752314245179e-9;
@@ -75720,6 +75808,15 @@ function getZoomFromBoundingVolume(boundingVolume, cartorgraphicCenter) {
75720
75808
  }
75721
75809
  return 1;
75722
75810
  }
75811
+ function getZoomFromFullExtent(fullExtent, cartorgraphicCenter, cartesianCenter) {
75812
+ const extentVertex = import_geospatial3.Ellipsoid.WGS84.cartographicToCartesian([fullExtent.xmax, fullExtent.ymax, fullExtent.zmax], new import_core3.Vector3());
75813
+ const extentSize = Math.sqrt(Math.pow(extentVertex[0] - cartesianCenter[0], 2) + Math.pow(extentVertex[1] - cartesianCenter[1], 2) + Math.pow(extentVertex[2] - cartesianCenter[2], 2));
75814
+ return Math.log2(WGS84_RADIUS_Z / (extentSize + cartorgraphicCenter[2]));
75815
+ }
75816
+ function getZoomFromExtent(extent, cartorgraphicCenter, cartesianCenter) {
75817
+ const [xmin, ymin, xmax, ymax] = extent;
75818
+ return getZoomFromFullExtent({ xmin, xmax, ymin, ymax, zmin: 0, zmax: 0 }, cartorgraphicCenter, cartesianCenter);
75819
+ }
75723
75820
  function getObbSize(halfAxes) {
75724
75821
  halfAxes.getColumn(0, scratchVector2);
75725
75822
  const axeY = halfAxes.getColumn(1);
@@ -75769,7 +75866,7 @@ var TILE3D_OPTIMIZATION_HINT = {
75769
75866
  // ../tiles/src/tileset/helpers/bounding-volume.ts
75770
75867
  var import_core4 = __toModule(require_es56());
75771
75868
  var import_culling3 = __toModule(require_es58());
75772
- var import_geospatial3 = __toModule(require_es57());
75869
+ var import_geospatial4 = __toModule(require_es57());
75773
75870
  function defined2(x) {
75774
75871
  return x !== void 0 && x !== null;
75775
75872
  }
@@ -75783,8 +75880,8 @@ function createBoundingVolume(boundingVolumeHeader, transform9, result) {
75783
75880
  }
75784
75881
  if (boundingVolumeHeader.region) {
75785
75882
  const [west, south, east, north, minHeight, maxHeight] = boundingVolumeHeader.region;
75786
- const northWest = import_geospatial3.Ellipsoid.WGS84.cartographicToCartesian([(0, import_core4.degrees)(west), (0, import_core4.degrees)(north), minHeight], scratchNorthWest);
75787
- const southEast = import_geospatial3.Ellipsoid.WGS84.cartographicToCartesian([(0, import_core4.degrees)(east), (0, import_core4.degrees)(south), maxHeight], scratchSouthEast);
75883
+ const northWest = import_geospatial4.Ellipsoid.WGS84.cartographicToCartesian([(0, import_core4.degrees)(west), (0, import_core4.degrees)(north), minHeight], scratchNorthWest);
75884
+ const southEast = import_geospatial4.Ellipsoid.WGS84.cartographicToCartesian([(0, import_core4.degrees)(east), (0, import_core4.degrees)(south), maxHeight], scratchSouthEast);
75788
75885
  const centerInCartesian = new import_core4.Vector3().addVectors(northWest, southEast).multiplyScalar(0.5);
75789
75886
  const radius = new import_core4.Vector3().subVectors(northWest, southEast).len() / 2;
75790
75887
  return createSphere([centerInCartesian[0], centerInCartesian[1], centerInCartesian[2], radius], new import_core4.Matrix4());
@@ -75888,7 +75985,7 @@ function getTiles3DScreenSpaceError(tile, frameState, useParentLodMetric) {
75888
75985
 
75889
75986
  // ../tiles/src/tileset/helpers/i3s-lod.ts
75890
75987
  var import_core6 = __toModule(require_es56());
75891
- var import_geospatial4 = __toModule(require_es57());
75988
+ var import_geospatial5 = __toModule(require_es57());
75892
75989
  var cameraPositionCartesian = new import_core6.Vector3();
75893
75990
  var toEye = new import_core6.Vector3();
75894
75991
  var cameraPositionEnu = new import_core6.Vector3();
@@ -75919,9 +76016,9 @@ function getProjectedRadius(tile, frameState) {
75919
76016
  const mbsR = tile.header.mbs[3];
75920
76017
  const mbsCenterCartesian = [...tile.boundingVolume.center];
75921
76018
  const cameraPositionCartographic = viewport.unprojectPosition(viewport.cameraPosition);
75922
- import_geospatial4.Ellipsoid.WGS84.cartographicToCartesian(cameraPositionCartographic, cameraPositionCartesian);
76019
+ import_geospatial5.Ellipsoid.WGS84.cartographicToCartesian(cameraPositionCartographic, cameraPositionCartesian);
75923
76020
  toEye.copy(cameraPositionCartesian).subtract(mbsCenterCartesian).normalize();
75924
- import_geospatial4.Ellipsoid.WGS84.eastNorthUpToFixedFrame(mbsCenterCartesian, enuToCartesianMatrix);
76021
+ import_geospatial5.Ellipsoid.WGS84.eastNorthUpToFixedFrame(mbsCenterCartesian, enuToCartesianMatrix);
75925
76022
  cartesianToEnuMatrix.copy(enuToCartesianMatrix).invert();
75926
76023
  cameraPositionEnu.copy(cameraPositionCartesian).transform(cartesianToEnuMatrix);
75927
76024
  const projection = Math.sqrt(cameraPositionEnu[0] * cameraPositionEnu[0] + cameraPositionEnu[1] * cameraPositionEnu[1]);
@@ -75931,7 +76028,7 @@ function getProjectedRadius(tile, frameState) {
75931
76028
  const extraVectorCartesian = extraVertexCartesian.subtract(mbsCenterCartesian).normalize();
75932
76029
  const radiusVector = toEye.cross(extraVectorCartesian).normalize().scale(mbsR);
75933
76030
  const sphereMbsBorderVertexCartesian = radiusVector.add(mbsCenterCartesian);
75934
- const sphereMbsBorderVertexCartographic = import_geospatial4.Ellipsoid.WGS84.cartesianToCartographic(sphereMbsBorderVertexCartesian);
76031
+ const sphereMbsBorderVertexCartographic = import_geospatial5.Ellipsoid.WGS84.cartesianToCartographic(sphereMbsBorderVertexCartesian);
75935
76032
  const projectedOrigin = viewport.project([mbsLon, mbsLat, mbsZ]);
75936
76033
  const projectedMbsBorderVertex = viewport.project(sphereMbsBorderVertexCartographic);
75937
76034
  const projectedRadius = projectedOriginVector.copy(projectedOrigin).subtract(projectedMbsBorderVertex).magnitude();
@@ -76041,6 +76138,8 @@ var DEFAULT_PROPS4 = {
76041
76138
  };
76042
76139
  var TilesetTraverser = class {
76043
76140
  constructor(options) {
76141
+ this.lastUpdate = new Date().getTime();
76142
+ this.updateDebounceTime = 1e3;
76044
76143
  this.options = { ...DEFAULT_PROPS4, ...options };
76045
76144
  this._traversalStack = new ManagedArray();
76046
76145
  this._emptyTraversalStack = new ManagedArray();
@@ -76050,6 +76149,9 @@ var TilesetTraverser = class {
76050
76149
  this.requestedTiles = {};
76051
76150
  this.emptyTiles = {};
76052
76151
  }
76152
+ get traversalFinished() {
76153
+ return true;
76154
+ }
76053
76155
  traverse(root, frameState, options) {
76054
76156
  this.root = root;
76055
76157
  this.options = { ...this.options, ...options };
@@ -76097,7 +76199,11 @@ var TilesetTraverser = class {
76097
76199
  this.touchTile(tile, frameState);
76098
76200
  tile._shouldRefine = shouldRefine && parentRefines;
76099
76201
  }
76100
- this.options.onTraversalEnd(frameState);
76202
+ const newTime = new Date().getTime();
76203
+ if (this.traversalFinished || newTime - this.lastUpdate > this.updateDebounceTime) {
76204
+ this.lastUpdate = newTime;
76205
+ this.options.onTraversalEnd(frameState);
76206
+ }
76101
76207
  }
76102
76208
  updateChildTiles(tile, frameState) {
76103
76209
  const children = tile.children;
@@ -76631,6 +76737,25 @@ var Tileset3DTraverser = class extends TilesetTraverser {
76631
76737
  }
76632
76738
  };
76633
76739
 
76740
+ // ../tiles/src/tileset/traversers/i3s-frame-counter.ts
76741
+ var I3SPendingTilesRegister = class {
76742
+ constructor() {
76743
+ this.frameNumberMap = new Map();
76744
+ }
76745
+ register(frameNumber) {
76746
+ const oldCount = this.frameNumberMap.get(frameNumber) || 0;
76747
+ this.frameNumberMap.set(frameNumber, (oldCount || 0) + 1);
76748
+ }
76749
+ deregister(frameNumber) {
76750
+ const oldCount = this.frameNumberMap.get(frameNumber) || 1;
76751
+ this.frameNumberMap.set(frameNumber, (oldCount || 0) - 1);
76752
+ }
76753
+ isZero(frameNumber) {
76754
+ const count = this.frameNumberMap.get(frameNumber) || 0;
76755
+ return count === 0;
76756
+ }
76757
+ };
76758
+
76634
76759
  // ../tiles/src/tileset/traversers/i3s-tile-manager.ts
76635
76760
  var STATUS = {
76636
76761
  REQUESTED: "REQUESTED",
@@ -76639,32 +76764,45 @@ var STATUS = {
76639
76764
  };
76640
76765
  var I3STileManager = class {
76641
76766
  constructor() {
76767
+ this.pendingTilesRegister = new I3SPendingTilesRegister();
76642
76768
  this._statusMap = {};
76643
76769
  }
76644
76770
  add(request, key, callback, frameState) {
76645
76771
  if (!this._statusMap[key]) {
76772
+ const { frameNumber } = frameState;
76646
76773
  this._statusMap[key] = { request, callback, key, frameState, status: STATUS.REQUESTED };
76774
+ this.pendingTilesRegister.register(frameNumber);
76647
76775
  request().then((data) => {
76648
76776
  this._statusMap[key].status = STATUS.COMPLETED;
76777
+ this.pendingTilesRegister.deregister(frameNumber);
76649
76778
  this._statusMap[key].callback(data, frameState);
76650
76779
  }).catch((error) => {
76651
76780
  this._statusMap[key].status = STATUS.ERROR;
76781
+ this.pendingTilesRegister.deregister(frameNumber);
76652
76782
  callback(error);
76653
76783
  });
76654
76784
  }
76655
76785
  }
76656
76786
  update(key, frameState) {
76657
76787
  if (this._statusMap[key]) {
76788
+ this.pendingTilesRegister.deregister(this._statusMap[key].frameState.frameNumber);
76789
+ this.pendingTilesRegister.register(frameState.frameNumber);
76658
76790
  this._statusMap[key].frameState = frameState;
76659
76791
  }
76660
76792
  }
76661
76793
  find(key) {
76662
76794
  return this._statusMap[key];
76663
76795
  }
76796
+ hasPendingTiles(frameNumber) {
76797
+ return !this.pendingTilesRegister.isZero(frameNumber);
76798
+ }
76664
76799
  };
76665
76800
 
76666
76801
  // ../tiles/src/tileset/traversers/i3s-tileset-traverser.ts
76667
76802
  var I3STilesetTraverser = class extends TilesetTraverser {
76803
+ get traversalFinished() {
76804
+ return !this._tileManager.hasPendingTiles(this._frameNumber || 0);
76805
+ }
76668
76806
  constructor(options) {
76669
76807
  super(options);
76670
76808
  this._tileManager = new I3STileManager();
@@ -76715,7 +76853,7 @@ var I3STilesetTraverser = class extends TilesetTraverser {
76715
76853
  tile.children.push(childTile);
76716
76854
  const frameState = this._tileManager.find(childTile.id).frameState;
76717
76855
  this.updateTile(childTile, frameState);
76718
- if (this._frameNumber === frameState.frameNumber) {
76856
+ if (this._frameNumber === frameState.frameNumber && (this.traversalFinished || new Date().getTime() - this.lastUpdate > this.updateDebounceTime)) {
76719
76857
  this.executeTraversal(childTile, frameState);
76720
76858
  }
76721
76859
  }
@@ -76724,7 +76862,7 @@ var I3STilesetTraverser = class extends TilesetTraverser {
76724
76862
  // ../tiles/src/tileset/tileset-3d.ts
76725
76863
  var DEFAULT_PROPS5 = {
76726
76864
  description: "",
76727
- ellipsoid: import_geospatial5.Ellipsoid.WGS84,
76865
+ ellipsoid: import_geospatial6.Ellipsoid.WGS84,
76728
76866
  modelMatrix: new import_core10.Matrix4(),
76729
76867
  throttleRequests: true,
76730
76868
  maxRequests: 64,
@@ -76809,7 +76947,7 @@ var Tileset3D = class {
76809
76947
  this.asset = {};
76810
76948
  this.credits = {};
76811
76949
  this.description = this.options.description || "";
76812
- this._initializeTileSet(json);
76950
+ this.tilesetInitializationPromise = this._initializeTileSet(json);
76813
76951
  }
76814
76952
  destroy() {
76815
76953
  this._destroy();
@@ -76846,14 +76984,17 @@ var Tileset3D = class {
76846
76984
  return Boolean(this._extensionsUsed && this._extensionsUsed.indexOf(extensionName) > -1);
76847
76985
  }
76848
76986
  update(viewports = null) {
76849
- if (!viewports && this.lastUpdatedVieports) {
76850
- viewports = this.lastUpdatedVieports;
76851
- } else {
76852
- this.lastUpdatedVieports = viewports;
76853
- }
76854
- this.doUpdate(viewports);
76987
+ this.tilesetInitializationPromise.then(() => {
76988
+ if (!viewports && this.lastUpdatedVieports) {
76989
+ viewports = this.lastUpdatedVieports;
76990
+ } else {
76991
+ this.lastUpdatedVieports = viewports;
76992
+ }
76993
+ this.doUpdate(viewports);
76994
+ });
76855
76995
  }
76856
76996
  async selectTiles(viewports = null) {
76997
+ await this.tilesetInitializationPromise;
76857
76998
  if (viewports) {
76858
76999
  this.lastUpdatedVieports = viewports;
76859
77000
  }
@@ -76985,17 +77126,43 @@ var Tileset3D = class {
76985
77126
  this.stats.get(TILES_RENDERABLE).count = tilesRenderable;
76986
77127
  this.stats.get(POINTS_COUNT).count = pointsRenderable;
76987
77128
  }
76988
- _initializeTileSet(tilesetJson) {
77129
+ async _initializeTileSet(tilesetJson) {
77130
+ if (this.type === TILESET_TYPE.I3S) {
77131
+ this.calculateViewPropsI3S();
77132
+ tilesetJson.root = await tilesetJson.root;
77133
+ }
76989
77134
  this.root = this._initializeTileHeaders(tilesetJson, null);
76990
77135
  if (this.type === TILESET_TYPE.TILES3D) {
76991
- this._initializeCesiumTileset(tilesetJson);
77136
+ this._initializeTiles3DTileset(tilesetJson);
77137
+ this.calculateViewPropsTiles3D();
76992
77138
  }
76993
77139
  if (this.type === TILESET_TYPE.I3S) {
76994
77140
  this._initializeI3STileset();
76995
77141
  }
76996
- this._calculateViewProps();
76997
77142
  }
76998
- _calculateViewProps() {
77143
+ calculateViewPropsI3S() {
77144
+ const fullExtent = this.tileset.fullExtent;
77145
+ if (fullExtent) {
77146
+ const { xmin, xmax, ymin, ymax, zmin, zmax } = fullExtent;
77147
+ this.cartographicCenter = new import_core10.Vector3(xmin + (xmax - xmin) / 2, ymin + (ymax - ymin) / 2, zmin + (zmax - zmin) / 2);
77148
+ this.cartesianCenter = import_geospatial6.Ellipsoid.WGS84.cartographicToCartesian(this.cartographicCenter, new import_core10.Vector3());
77149
+ this.zoom = getZoomFromFullExtent(fullExtent, this.cartographicCenter, this.cartesianCenter);
77150
+ return;
77151
+ }
77152
+ const extent = this.tileset.store?.extent;
77153
+ if (extent) {
77154
+ const [xmin, ymin, xmax, ymax] = extent;
77155
+ this.cartographicCenter = new import_core10.Vector3(xmin + (xmax - xmin) / 2, ymin + (ymax - ymin) / 2, 0);
77156
+ this.cartesianCenter = import_geospatial6.Ellipsoid.WGS84.cartographicToCartesian(this.cartographicCenter, new import_core10.Vector3());
77157
+ this.zoom = getZoomFromExtent(extent, this.cartographicCenter, this.cartesianCenter);
77158
+ return;
77159
+ }
77160
+ console.warn("Extent is not defined in the tileset header");
77161
+ this.cartographicCenter = new import_core10.Vector3();
77162
+ this.zoom = 1;
77163
+ return;
77164
+ }
77165
+ calculateViewPropsTiles3D() {
76999
77166
  const root = this.root;
77000
77167
  assert2(root);
77001
77168
  const { center } = root.boundingVolume;
@@ -77005,7 +77172,7 @@ var Tileset3D = class {
77005
77172
  this.zoom = 1;
77006
77173
  return;
77007
77174
  }
77008
- this.cartographicCenter = import_geospatial5.Ellipsoid.WGS84.cartesianToCartographic(center, new import_core10.Vector3());
77175
+ this.cartographicCenter = import_geospatial6.Ellipsoid.WGS84.cartesianToCartographic(center, new import_core10.Vector3());
77009
77176
  this.cartesianCenter = center;
77010
77177
  this.zoom = getZoomFromBoundingVolume(root.boundingVolume, this.cartographicCenter);
77011
77178
  }
@@ -77153,7 +77320,7 @@ var Tileset3D = class {
77153
77320
  this._unloadTile(tile);
77154
77321
  tile.destroy();
77155
77322
  }
77156
- _initializeCesiumTileset(tilesetJson) {
77323
+ _initializeTiles3DTileset(tilesetJson) {
77157
77324
  this.asset = tilesetJson.asset;
77158
77325
  if (!this.asset) {
77159
77326
  throw new Error("Tileset must have an asset property.");
@@ -77195,7 +77362,7 @@ function getQueryParamString(queryParams) {
77195
77362
  }
77196
77363
 
77197
77364
  // ../3d-tiles/src/lib/utils/version.ts
77198
- var VERSION3 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
77365
+ var VERSION4 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
77199
77366
 
77200
77367
  // ../3d-tiles/src/lib/constants.ts
77201
77368
  var TILE3D_TYPE = {
@@ -77229,7 +77396,7 @@ function getMagicString3(arrayBuffer, byteOffset = 0) {
77229
77396
  }
77230
77397
 
77231
77398
  // ../draco/src/lib/utils/version.ts
77232
- var VERSION4 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
77399
+ var VERSION5 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
77233
77400
 
77234
77401
  // ../draco/src/draco-loader.ts
77235
77402
  var DEFAULT_DRACO_OPTIONS = {
@@ -77245,7 +77412,7 @@ var DracoLoader = {
77245
77412
  id: "draco",
77246
77413
  module: "draco",
77247
77414
  shapes: ["mesh"],
77248
- version: VERSION4,
77415
+ version: VERSION5,
77249
77416
  worker: true,
77250
77417
  extensions: ["drc"],
77251
77418
  mimeTypes: ["application/octet-stream"],
@@ -78156,7 +78323,6 @@ var DRACO_WASM_WRAPPER_URL = `https://www.gstatic.com/draco/versioned/decoders/$
78156
78323
  var DRACO_WASM_DECODER_URL = `https://www.gstatic.com/draco/versioned/decoders/${DRACO_VERSION}/draco_decoder.wasm`;
78157
78324
  var DRACO_ENCODER_URL = `https://raw.githubusercontent.com/google/draco/${DRACO_VERSION}/javascript/draco_encoder.js`;
78158
78325
  var loadDecoderPromise;
78159
- var loadEncoderPromise;
78160
78326
  async function loadDracoDecoderModule(options) {
78161
78327
  const modules = options.modules || {};
78162
78328
  if (modules.draco3d) {
@@ -78168,17 +78334,6 @@ async function loadDracoDecoderModule(options) {
78168
78334
  }
78169
78335
  return await loadDecoderPromise;
78170
78336
  }
78171
- async function loadDracoEncoderModule(options) {
78172
- const modules = options.modules || {};
78173
- if (modules.draco3d) {
78174
- loadEncoderPromise = loadEncoderPromise || modules.draco3d.createEncoderModule({}).then((draco) => {
78175
- return { draco };
78176
- });
78177
- } else {
78178
- loadEncoderPromise = loadEncoderPromise || loadDracoEncoder(options);
78179
- }
78180
- return await loadEncoderPromise;
78181
- }
78182
78337
  async function loadDracoDecoder(options) {
78183
78338
  let DracoDecoderModule;
78184
78339
  let wasmBinary;
@@ -78208,303 +78363,19 @@ function initializeDracoDecoder(DracoDecoderModule, wasmBinary) {
78208
78363
  });
78209
78364
  });
78210
78365
  }
78211
- async function loadDracoEncoder(options) {
78212
- let DracoEncoderModule = await loadLibrary(DRACO_ENCODER_URL, "draco", options);
78213
- DracoEncoderModule = DracoEncoderModule || globalThis.DracoEncoderModule;
78214
- return new Promise((resolve) => {
78215
- DracoEncoderModule({
78216
- onModuleLoaded: (draco) => resolve({ draco })
78217
- });
78218
- });
78219
- }
78220
-
78221
- // ../draco/src/lib/draco-builder.ts
78222
- var GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP = {
78223
- POSITION: "POSITION",
78224
- NORMAL: "NORMAL",
78225
- COLOR_0: "COLOR",
78226
- TEXCOORD_0: "TEX_COORD"
78227
- };
78228
- var noop = () => {
78229
- };
78230
- var DracoBuilder = class {
78231
- constructor(draco) {
78232
- this.draco = draco;
78233
- this.dracoEncoder = new this.draco.Encoder();
78234
- this.dracoMeshBuilder = new this.draco.MeshBuilder();
78235
- this.dracoMetadataBuilder = new this.draco.MetadataBuilder();
78236
- }
78237
- destroy() {
78238
- this.destroyEncodedObject(this.dracoMeshBuilder);
78239
- this.destroyEncodedObject(this.dracoEncoder);
78240
- this.destroyEncodedObject(this.dracoMetadataBuilder);
78241
- this.dracoMeshBuilder = null;
78242
- this.dracoEncoder = null;
78243
- this.draco = null;
78244
- }
78245
- destroyEncodedObject(object) {
78246
- if (object) {
78247
- this.draco.destroy(object);
78248
- }
78249
- }
78250
- encodeSync(mesh, options = {}) {
78251
- this.log = noop;
78252
- this._setOptions(options);
78253
- return options.pointcloud ? this._encodePointCloud(mesh, options) : this._encodeMesh(mesh, options);
78254
- }
78255
- _getAttributesFromMesh(mesh) {
78256
- const attributes = { ...mesh, ...mesh.attributes };
78257
- if (mesh.indices) {
78258
- attributes.indices = mesh.indices;
78259
- }
78260
- return attributes;
78261
- }
78262
- _encodePointCloud(pointcloud, options) {
78263
- const dracoPointCloud = new this.draco.PointCloud();
78264
- if (options.metadata) {
78265
- this._addGeometryMetadata(dracoPointCloud, options.metadata);
78266
- }
78267
- const attributes = this._getAttributesFromMesh(pointcloud);
78268
- this._createDracoPointCloud(dracoPointCloud, attributes, options);
78269
- const dracoData = new this.draco.DracoInt8Array();
78270
- try {
78271
- const encodedLen = this.dracoEncoder.EncodePointCloudToDracoBuffer(dracoPointCloud, false, dracoData);
78272
- if (!(encodedLen > 0)) {
78273
- throw new Error("Draco encoding failed.");
78274
- }
78275
- this.log(`DRACO encoded ${dracoPointCloud.num_points()} points
78276
- with ${dracoPointCloud.num_attributes()} attributes into ${encodedLen} bytes`);
78277
- return dracoInt8ArrayToArrayBuffer(dracoData);
78278
- } finally {
78279
- this.destroyEncodedObject(dracoData);
78280
- this.destroyEncodedObject(dracoPointCloud);
78281
- }
78282
- }
78283
- _encodeMesh(mesh, options) {
78284
- const dracoMesh = new this.draco.Mesh();
78285
- if (options.metadata) {
78286
- this._addGeometryMetadata(dracoMesh, options.metadata);
78287
- }
78288
- const attributes = this._getAttributesFromMesh(mesh);
78289
- this._createDracoMesh(dracoMesh, attributes, options);
78290
- const dracoData = new this.draco.DracoInt8Array();
78291
- try {
78292
- const encodedLen = this.dracoEncoder.EncodeMeshToDracoBuffer(dracoMesh, dracoData);
78293
- if (encodedLen <= 0) {
78294
- throw new Error("Draco encoding failed.");
78295
- }
78296
- this.log(`DRACO encoded ${dracoMesh.num_points()} points
78297
- with ${dracoMesh.num_attributes()} attributes into ${encodedLen} bytes`);
78298
- return dracoInt8ArrayToArrayBuffer(dracoData);
78299
- } finally {
78300
- this.destroyEncodedObject(dracoData);
78301
- this.destroyEncodedObject(dracoMesh);
78302
- }
78303
- }
78304
- _setOptions(options) {
78305
- if ("speed" in options) {
78306
- this.dracoEncoder.SetSpeedOptions(...options.speed);
78307
- }
78308
- if ("method" in options) {
78309
- const dracoMethod = this.draco[options.method || "MESH_SEQUENTIAL_ENCODING"];
78310
- this.dracoEncoder.SetEncodingMethod(dracoMethod);
78311
- }
78312
- if ("quantization" in options) {
78313
- for (const attribute in options.quantization) {
78314
- const bits = options.quantization[attribute];
78315
- const dracoPosition = this.draco[attribute];
78316
- this.dracoEncoder.SetAttributeQuantization(dracoPosition, bits);
78317
- }
78318
- }
78319
- }
78320
- _createDracoMesh(dracoMesh, attributes, options) {
78321
- const optionalMetadata = options.attributesMetadata || {};
78322
- try {
78323
- const positions = this._getPositionAttribute(attributes);
78324
- if (!positions) {
78325
- throw new Error("positions");
78326
- }
78327
- const vertexCount = positions.length / 3;
78328
- for (let attributeName in attributes) {
78329
- const attribute = attributes[attributeName];
78330
- attributeName = GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP[attributeName] || attributeName;
78331
- const uniqueId = this._addAttributeToMesh(dracoMesh, attributeName, attribute, vertexCount);
78332
- if (uniqueId !== -1) {
78333
- this._addAttributeMetadata(dracoMesh, uniqueId, {
78334
- name: attributeName,
78335
- ...optionalMetadata[attributeName] || {}
78336
- });
78337
- }
78338
- }
78339
- } catch (error) {
78340
- this.destroyEncodedObject(dracoMesh);
78341
- throw error;
78342
- }
78343
- return dracoMesh;
78344
- }
78345
- _createDracoPointCloud(dracoPointCloud, attributes, options) {
78346
- const optionalMetadata = options.attributesMetadata || {};
78347
- try {
78348
- const positions = this._getPositionAttribute(attributes);
78349
- if (!positions) {
78350
- throw new Error("positions");
78351
- }
78352
- const vertexCount = positions.length / 3;
78353
- for (let attributeName in attributes) {
78354
- const attribute = attributes[attributeName];
78355
- attributeName = GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP[attributeName] || attributeName;
78356
- const uniqueId = this._addAttributeToMesh(dracoPointCloud, attributeName, attribute, vertexCount);
78357
- if (uniqueId !== -1) {
78358
- this._addAttributeMetadata(dracoPointCloud, uniqueId, {
78359
- name: attributeName,
78360
- ...optionalMetadata[attributeName] || {}
78361
- });
78362
- }
78363
- }
78364
- } catch (error) {
78365
- this.destroyEncodedObject(dracoPointCloud);
78366
- throw error;
78367
- }
78368
- return dracoPointCloud;
78369
- }
78370
- _addAttributeToMesh(mesh, attributeName, attribute, vertexCount) {
78371
- if (!ArrayBuffer.isView(attribute)) {
78372
- return -1;
78373
- }
78374
- const type = this._getDracoAttributeType(attributeName);
78375
- const size = attribute.length / vertexCount;
78376
- if (type === "indices") {
78377
- const numFaces = attribute.length / 3;
78378
- this.log(`Adding attribute ${attributeName}, size ${numFaces}`);
78379
- this.dracoMeshBuilder.AddFacesToMesh(mesh, numFaces, attribute);
78380
- return -1;
78381
- }
78382
- this.log(`Adding attribute ${attributeName}, size ${size}`);
78383
- const builder = this.dracoMeshBuilder;
78384
- const { buffer } = attribute;
78385
- switch (attribute.constructor) {
78386
- case Int8Array:
78387
- return builder.AddInt8Attribute(mesh, type, vertexCount, size, new Int8Array(buffer));
78388
- case Int16Array:
78389
- return builder.AddInt16Attribute(mesh, type, vertexCount, size, new Int16Array(buffer));
78390
- case Int32Array:
78391
- return builder.AddInt32Attribute(mesh, type, vertexCount, size, new Int32Array(buffer));
78392
- case Uint8Array:
78393
- case Uint8ClampedArray:
78394
- return builder.AddUInt8Attribute(mesh, type, vertexCount, size, new Uint8Array(buffer));
78395
- case Uint16Array:
78396
- return builder.AddUInt16Attribute(mesh, type, vertexCount, size, new Uint16Array(buffer));
78397
- case Uint32Array:
78398
- return builder.AddUInt32Attribute(mesh, type, vertexCount, size, new Uint32Array(buffer));
78399
- case Float32Array:
78400
- default:
78401
- return builder.AddFloatAttribute(mesh, type, vertexCount, size, new Float32Array(buffer));
78402
- }
78403
- }
78404
- _getDracoAttributeType(attributeName) {
78405
- switch (attributeName.toLowerCase()) {
78406
- case "indices":
78407
- return "indices";
78408
- case "position":
78409
- case "positions":
78410
- case "vertices":
78411
- return this.draco.POSITION;
78412
- case "normal":
78413
- case "normals":
78414
- return this.draco.NORMAL;
78415
- case "color":
78416
- case "colors":
78417
- return this.draco.COLOR;
78418
- case "texcoord":
78419
- case "texcoords":
78420
- return this.draco.TEX_COORD;
78421
- default:
78422
- return this.draco.GENERIC;
78423
- }
78424
- }
78425
- _getPositionAttribute(attributes) {
78426
- for (const attributeName in attributes) {
78427
- const attribute = attributes[attributeName];
78428
- const dracoType = this._getDracoAttributeType(attributeName);
78429
- if (dracoType === this.draco.POSITION) {
78430
- return attribute;
78431
- }
78432
- }
78433
- return null;
78434
- }
78435
- _addGeometryMetadata(dracoGeometry, metadata) {
78436
- const dracoMetadata = new this.draco.Metadata();
78437
- this._populateDracoMetadata(dracoMetadata, metadata);
78438
- this.dracoMeshBuilder.AddMetadata(dracoGeometry, dracoMetadata);
78439
- }
78440
- _addAttributeMetadata(dracoGeometry, uniqueAttributeId, metadata) {
78441
- const dracoAttributeMetadata = new this.draco.Metadata();
78442
- this._populateDracoMetadata(dracoAttributeMetadata, metadata);
78443
- this.dracoMeshBuilder.SetMetadataForAttribute(dracoGeometry, uniqueAttributeId, dracoAttributeMetadata);
78444
- }
78445
- _populateDracoMetadata(dracoMetadata, metadata) {
78446
- for (const [key, value] of getEntries(metadata)) {
78447
- switch (typeof value) {
78448
- case "number":
78449
- if (Math.trunc(value) === value) {
78450
- this.dracoMetadataBuilder.AddIntEntry(dracoMetadata, key, value);
78451
- } else {
78452
- this.dracoMetadataBuilder.AddDoubleEntry(dracoMetadata, key, value);
78453
- }
78454
- break;
78455
- case "object":
78456
- if (value instanceof Int32Array) {
78457
- this.dracoMetadataBuilder.AddIntEntryArray(dracoMetadata, key, value, value.length);
78458
- }
78459
- break;
78460
- case "string":
78461
- default:
78462
- this.dracoMetadataBuilder.AddStringEntry(dracoMetadata, key, value);
78463
- }
78464
- }
78465
- }
78466
- };
78467
- function dracoInt8ArrayToArrayBuffer(dracoData) {
78468
- const byteLength = dracoData.size();
78469
- const outputBuffer = new ArrayBuffer(byteLength);
78470
- const outputData = new Int8Array(outputBuffer);
78471
- for (let i = 0; i < byteLength; ++i) {
78472
- outputData[i] = dracoData.GetValue(i);
78473
- }
78474
- return outputBuffer;
78475
- }
78476
- function getEntries(container) {
78477
- const hasEntriesFunc = container.entries && !container.hasOwnProperty("entries");
78478
- return hasEntriesFunc ? container.entries() : Object.entries(container);
78479
- }
78480
78366
 
78481
- // ../draco/src/draco-writer.ts
78482
- var DEFAULT_DRACO_OPTIONS2 = {
78483
- pointcloud: false,
78484
- attributeNameEntry: "name"
78485
- };
78486
- var DracoWriter = {
78487
- name: "DRACO",
78488
- id: "draco",
78367
+ // ../draco/src/index.ts
78368
+ var DracoWriterWorker = {
78369
+ id: isBrowser2 ? "draco-writer" : "draco-writer-nodejs",
78370
+ name: "Draco compressed geometry writer",
78489
78371
  module: "draco",
78490
- version: VERSION4,
78491
- extensions: ["drc"],
78492
- encode: encode2,
78372
+ version: VERSION5,
78373
+ worker: true,
78493
78374
  options: {
78494
- draco: DEFAULT_DRACO_OPTIONS2
78375
+ draco: {},
78376
+ source: null
78495
78377
  }
78496
78378
  };
78497
- async function encode2(data, options = {}) {
78498
- const { draco } = await loadDracoEncoderModule(options);
78499
- const dracoBuilder = new DracoBuilder(draco);
78500
- try {
78501
- return dracoBuilder.encodeSync(data, options.draco);
78502
- } finally {
78503
- dracoBuilder.destroy();
78504
- }
78505
- }
78506
-
78507
- // ../draco/src/index.ts
78508
78379
  var DracoLoader2 = {
78509
78380
  ...DracoLoader,
78510
78381
  parse: parse2
@@ -79633,15 +79504,15 @@ async function loadDraco(tile, dracoData, options, context) {
79633
79504
  }
79634
79505
 
79635
79506
  // ../gltf/src/lib/utils/version.ts
79636
- var VERSION5 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
79507
+ var VERSION6 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
79637
79508
 
79638
79509
  // ../textures/src/lib/utils/version.ts
79639
- var VERSION6 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "beta";
79510
+ var VERSION7 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "beta";
79640
79511
 
79641
79512
  // ../textures/src/lib/parsers/basis-module-loader.ts
79642
- var VERSION7 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "beta";
79643
- var BASIS_CDN_ENCODER_WASM = `https://unpkg.com/@loaders.gl/textures@${VERSION7}/dist/libs/basis_encoder.wasm`;
79644
- var BASIS_CDN_ENCODER_JS = `https://unpkg.com/@loaders.gl/textures@${VERSION7}/dist/libs/basis_encoder.js`;
79513
+ var VERSION8 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "beta";
79514
+ var BASIS_CDN_ENCODER_WASM = `https://unpkg.com/@loaders.gl/textures@${VERSION8}/dist/libs/basis_encoder.wasm`;
79515
+ var BASIS_CDN_ENCODER_JS = `https://unpkg.com/@loaders.gl/textures@${VERSION8}/dist/libs/basis_encoder.js`;
79645
79516
  var loadBasisTranscoderPromise;
79646
79517
  async function loadBasisTrascoderModule(options) {
79647
79518
  const modules = options.modules || {};
@@ -80137,7 +80008,7 @@ var BasisWorkerLoader = {
80137
80008
  name: "Basis",
80138
80009
  id: "basis",
80139
80010
  module: "textures",
80140
- version: VERSION6,
80011
+ version: VERSION7,
80141
80012
  worker: true,
80142
80013
  extensions: ["basis", "ktx2"],
80143
80014
  mimeTypes: ["application/octet-stream", "image/ktx2"],
@@ -80450,7 +80321,7 @@ var CompressedTextureWorkerLoader = {
80450
80321
  name: "Texture Containers",
80451
80322
  id: "compressed-texture",
80452
80323
  module: "textures",
80453
- version: VERSION6,
80324
+ version: VERSION7,
80454
80325
  worker: true,
80455
80326
  extensions: [
80456
80327
  "ktx",
@@ -80514,12 +80385,12 @@ async function encodeKTX2BasisTexture(image, options = {}) {
80514
80385
  }
80515
80386
  }
80516
80387
 
80517
- // ../textures/src/ktx2-basis-universal-texture-writer.ts
80518
- var KTX2BasisUniversalTextureWriter = {
80388
+ // ../textures/src/ktx2-basis-writer.ts
80389
+ var KTX2BasisWriter = {
80519
80390
  name: "Basis Universal Supercompressed GPU Texture",
80520
- id: "ktx2-basis-supercompressed-texture",
80391
+ id: "ktx2-basis-writer",
80521
80392
  module: "textures",
80522
- version: VERSION6,
80393
+ version: VERSION7,
80523
80394
  extensions: ["ktx2"],
80524
80395
  options: {
80525
80396
  useSRGB: false,
@@ -80531,7 +80402,7 @@ var KTX2BasisUniversalTextureWriter = {
80531
80402
  };
80532
80403
 
80533
80404
  // ../images/src/lib/utils/version.ts
80534
- var VERSION8 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
80405
+ var VERSION9 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
80535
80406
 
80536
80407
  // ../images/src/lib/category-api/image-type.ts
80537
80408
  var { _parseImageNode } = globalThis;
@@ -80873,7 +80744,7 @@ var ImageLoader = {
80873
80744
  id: "image",
80874
80745
  module: "images",
80875
80746
  name: "Images",
80876
- version: VERSION8,
80747
+ version: VERSION9,
80877
80748
  mimeTypes: MIME_TYPES,
80878
80749
  extensions: EXTENSIONS,
80879
80750
  parse: parseImage,
@@ -80936,7 +80807,7 @@ var ImageWriter = {
80936
80807
  name: "Images",
80937
80808
  id: "image",
80938
80809
  module: "images",
80939
- version: VERSION8,
80810
+ version: VERSION9,
80940
80811
  extensions: ["jpeg"],
80941
80812
  options: {
80942
80813
  image: {
@@ -81017,8 +80888,7 @@ function getTypedArrayForBufferView(json, buffers, bufferViewIndex) {
81017
80888
  var EXT_meshopt_compression_exports = {};
81018
80889
  __export(EXT_meshopt_compression_exports, {
81019
80890
  decode: () => decode2,
81020
- name: () => name,
81021
- preprocess: () => preprocess
80891
+ name: () => name
81022
80892
  });
81023
80893
 
81024
80894
  // ../gltf/src/lib/gltf-utils/gltf-utils.ts
@@ -81467,7 +81337,6 @@ var GLTFScenegraph = class {
81467
81337
  };
81468
81338
 
81469
81339
  // ../gltf/src/meshopt/meshopt-decoder.ts
81470
- var isWebAssemblySupported = typeof WebAssembly !== "object";
81471
81340
  var wasm_base = "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";
81472
81341
  var wasm_simd = "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";
81473
81342
  var detector = new Uint8Array([
@@ -81603,9 +81472,6 @@ var DECODERS = {
81603
81472
  TRIANGLES: "meshopt_decodeIndexBuffer",
81604
81473
  INDICES: "meshopt_decodeIndexSequence"
81605
81474
  };
81606
- function isMeshoptSupported() {
81607
- return isWebAssemblySupported;
81608
- }
81609
81475
  async function meshoptDecodeGltfBuffer(target, count, size, source, mode, filter = "NONE") {
81610
81476
  const instance = await loadWasmInstance();
81611
81477
  decode(instance, instance.exports[DECODERS[mode]], target, count, size, source, instance.exports[FILTERS[filter || "NONE"]]);
@@ -81660,12 +81526,6 @@ function decode(instance, fun, target, count, size, source, filter) {
81660
81526
  // ../gltf/src/lib/extensions/EXT_meshopt_compression.ts
81661
81527
  var EXT_MESHOPT_COMPRESSION = "EXT_meshopt_compression";
81662
81528
  var name = EXT_MESHOPT_COMPRESSION;
81663
- function preprocess(gltfData) {
81664
- const scenegraph = new GLTFScenegraph(gltfData);
81665
- if (scenegraph.getRequiredExtensions().includes(EXT_MESHOPT_COMPRESSION) && !isMeshoptSupported()) {
81666
- throw new Error(`gltf: Required extension ${EXT_MESHOPT_COMPRESSION} not supported by browser`);
81667
- }
81668
- }
81669
81529
  async function decode2(gltfData, options) {
81670
81530
  const scenegraph = new GLTFScenegraph(gltfData);
81671
81531
  if (!options?.gltf?.decompressMeshes) {
@@ -81681,18 +81541,19 @@ async function decode2(gltfData, options) {
81681
81541
  async function decodeMeshoptBufferView(scenegraph, bufferView) {
81682
81542
  const meshoptExtension = scenegraph.getObjectExtension(bufferView, EXT_MESHOPT_COMPRESSION);
81683
81543
  if (meshoptExtension) {
81684
- const buffer = bufferView.buffer;
81685
81544
  const {
81686
81545
  byteOffset = 0,
81687
81546
  byteLength = 0,
81688
81547
  byteStride,
81689
81548
  count,
81690
81549
  mode,
81691
- filter = "NONE"
81550
+ filter = "NONE",
81551
+ buffer: bufferIndex
81692
81552
  } = meshoptExtension;
81693
- const source = new Uint8Array(buffer, byteOffset, byteLength);
81694
- const result = new ArrayBuffer(count * byteStride);
81695
- await meshoptDecodeGltfBuffer(new Uint8Array(result), count, byteStride, source, mode, filter);
81553
+ const buffer = scenegraph.gltf.buffers[bufferIndex];
81554
+ const source = new Uint8Array(buffer.arrayBuffer, buffer.byteOffset + byteOffset, byteLength);
81555
+ const result = new Uint8Array(scenegraph.gltf.buffers[bufferView.buffer].arrayBuffer, bufferView.byteOffset, bufferView.byteLength);
81556
+ await meshoptDecodeGltfBuffer(result, count, byteStride, source, mode, filter);
81696
81557
  return result;
81697
81558
  }
81698
81559
  return null;
@@ -81702,11 +81563,11 @@ async function decodeMeshoptBufferView(scenegraph, bufferView) {
81702
81563
  var EXT_texture_webp_exports = {};
81703
81564
  __export(EXT_texture_webp_exports, {
81704
81565
  name: () => name2,
81705
- preprocess: () => preprocess2
81566
+ preprocess: () => preprocess
81706
81567
  });
81707
81568
  var EXT_TEXTURE_WEBP = "EXT_texture_webp";
81708
81569
  var name2 = EXT_TEXTURE_WEBP;
81709
- function preprocess2(gltfData, options) {
81570
+ function preprocess(gltfData, options) {
81710
81571
  const scenegraph = new GLTFScenegraph(gltfData);
81711
81572
  if (!_isImageFormatSupported("image/webp")) {
81712
81573
  if (scenegraph.getRequiredExtensions().includes(EXT_TEXTURE_WEBP)) {
@@ -81729,11 +81590,11 @@ function preprocess2(gltfData, options) {
81729
81590
  var KHR_texture_basisu_exports = {};
81730
81591
  __export(KHR_texture_basisu_exports, {
81731
81592
  name: () => name3,
81732
- preprocess: () => preprocess3
81593
+ preprocess: () => preprocess2
81733
81594
  });
81734
81595
  var KHR_TEXTURE_BASISU = "KHR_texture_basisu";
81735
81596
  var name3 = KHR_TEXTURE_BASISU;
81736
- function preprocess3(gltfData, options) {
81597
+ function preprocess2(gltfData, options) {
81737
81598
  const scene = new GLTFScenegraph(gltfData);
81738
81599
  const { json } = scene;
81739
81600
  for (const texture of json.textures || []) {
@@ -81750,9 +81611,9 @@ function preprocess3(gltfData, options) {
81750
81611
  var KHR_draco_mesh_compression_exports = {};
81751
81612
  __export(KHR_draco_mesh_compression_exports, {
81752
81613
  decode: () => decode3,
81753
- encode: () => encode3,
81614
+ encode: () => encode2,
81754
81615
  name: () => name4,
81755
- preprocess: () => preprocess4
81616
+ preprocess: () => preprocess3
81756
81617
  });
81757
81618
 
81758
81619
  // ../gltf/src/lib/gltf-utils/gltf-attribute-utils.ts
@@ -81811,7 +81672,7 @@ function toTypedArray(array, ArrayType, convertTypedArrays = false) {
81811
81672
  // ../gltf/src/lib/extensions/KHR_draco_mesh_compression.ts
81812
81673
  var KHR_DRACO_MESH_COMPRESSION = "KHR_draco_mesh_compression";
81813
81674
  var name4 = KHR_DRACO_MESH_COMPRESSION;
81814
- function preprocess4(gltfData, options, context) {
81675
+ function preprocess3(gltfData, options, context) {
81815
81676
  const scenegraph = new GLTFScenegraph(gltfData);
81816
81677
  for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {
81817
81678
  if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {
@@ -81832,7 +81693,7 @@ async function decode3(gltfData, options, context) {
81832
81693
  await Promise.all(promises);
81833
81694
  scenegraph.removeExtension(KHR_DRACO_MESH_COMPRESSION);
81834
81695
  }
81835
- function encode3(gltfData, options = {}) {
81696
+ function encode2(gltfData, options = {}) {
81836
81697
  const scenegraph = new GLTFScenegraph(gltfData);
81837
81698
  for (const mesh of scenegraph.json.meshes || []) {
81838
81699
  compressMesh(mesh, options);
@@ -81908,7 +81769,7 @@ function* makeMeshPrimitiveIterator(scenegraph) {
81908
81769
  var KHR_lights_punctual_exports = {};
81909
81770
  __export(KHR_lights_punctual_exports, {
81910
81771
  decode: () => decode4,
81911
- encode: () => encode4,
81772
+ encode: () => encode3,
81912
81773
  name: () => name5
81913
81774
  });
81914
81775
  var KHR_LIGHTS_PUNCTUAL = "KHR_lights_punctual";
@@ -81929,7 +81790,7 @@ async function decode4(gltfData) {
81929
81790
  gltfScenegraph.removeObjectExtension(node2, KHR_LIGHTS_PUNCTUAL);
81930
81791
  }
81931
81792
  }
81932
- async function encode4(gltfData) {
81793
+ async function encode3(gltfData) {
81933
81794
  const gltfScenegraph = new GLTFScenegraph(gltfData);
81934
81795
  const { json } = gltfScenegraph;
81935
81796
  if (json.lights) {
@@ -81951,7 +81812,7 @@ async function encode4(gltfData) {
81951
81812
  var KHR_materials_unlit_exports = {};
81952
81813
  __export(KHR_materials_unlit_exports, {
81953
81814
  decode: () => decode5,
81954
- encode: () => encode5,
81815
+ encode: () => encode4,
81955
81816
  name: () => name6
81956
81817
  });
81957
81818
  var KHR_MATERIALS_UNLIT = "KHR_materials_unlit";
@@ -81968,7 +81829,7 @@ async function decode5(gltfData) {
81968
81829
  gltfScenegraph.removeObjectExtension(material, KHR_MATERIALS_UNLIT);
81969
81830
  }
81970
81831
  }
81971
- function encode5(gltfData) {
81832
+ function encode4(gltfData) {
81972
81833
  const gltfScenegraph = new GLTFScenegraph(gltfData);
81973
81834
  const { json } = gltfScenegraph;
81974
81835
  if (gltfScenegraph.materials) {
@@ -81986,7 +81847,7 @@ function encode5(gltfData) {
81986
81847
  var KHR_techniques_webgl_exports = {};
81987
81848
  __export(KHR_techniques_webgl_exports, {
81988
81849
  decode: () => decode6,
81989
- encode: () => encode6,
81850
+ encode: () => encode5,
81990
81851
  name: () => name7
81991
81852
  });
81992
81853
  var KHR_TECHNIQUES_WEBGL = "KHR_techniques_webgl";
@@ -82008,7 +81869,7 @@ async function decode6(gltfData) {
82008
81869
  gltfScenegraph.removeExtension(KHR_TECHNIQUES_WEBGL);
82009
81870
  }
82010
81871
  }
82011
- async function encode6(gltfData, options) {
81872
+ async function encode5(gltfData, options) {
82012
81873
  }
82013
81874
  function resolveTechniques(techniquesExtension, gltfScenegraph) {
82014
81875
  const { programs = [], shaders = [], techniques = [] } = techniquesExtension;
@@ -82074,7 +81935,7 @@ function useExtension(extensionName, options) {
82074
81935
 
82075
81936
  // ../gltf/src/lib/extensions/KHR_binary_gltf.ts
82076
81937
  var KHR_BINARY_GLTF = "KHR_binary_glTF";
82077
- function preprocess5(gltfData) {
81938
+ function preprocess4(gltfData) {
82078
81939
  const gltfScenegraph = new GLTFScenegraph(gltfData);
82079
81940
  const { json } = gltfScenegraph;
82080
81941
  for (const image of json.images || []) {
@@ -82155,7 +82016,7 @@ var GLTFV1Normalizer = class {
82155
82016
  console.warn("Converting glTF v1 to glTF v2 format. This is experimental and may fail.");
82156
82017
  this._addAsset(json);
82157
82018
  this._convertTopLevelObjectsToArrays(json);
82158
- preprocess5(gltf);
82019
+ preprocess4(gltf);
82159
82020
  this._convertObjectIdsToArrayIndices(json);
82160
82021
  this._updateObjects(json);
82161
82022
  this._updateMaterial(json);
@@ -82772,6 +82633,12 @@ async function loadBuffers(gltf, options, context) {
82772
82633
  byteLength: arrayBuffer.byteLength
82773
82634
  };
82774
82635
  delete buffer.uri;
82636
+ } else if (gltf.buffers[i] === null) {
82637
+ gltf.buffers[i] = {
82638
+ arrayBuffer: new ArrayBuffer(buffer.byteLength),
82639
+ byteOffset: 0,
82640
+ byteLength: buffer.byteLength
82641
+ };
82775
82642
  }
82776
82643
  }
82777
82644
  }
@@ -82826,7 +82693,7 @@ var GLTFLoader = {
82826
82693
  name: "glTF",
82827
82694
  id: "gltf",
82828
82695
  module: "gltf",
82829
- version: VERSION5,
82696
+ version: VERSION6,
82830
82697
  extensions: ["gltf", "glb"],
82831
82698
  mimeTypes: ["model/gltf+json", "model/gltf-binary"],
82832
82699
  text: true,
@@ -82924,7 +82791,7 @@ var GLTFWriter = {
82924
82791
  name: "glTF",
82925
82792
  id: "gltf",
82926
82793
  module: "gltf",
82927
- version: VERSION5,
82794
+ version: VERSION6,
82928
82795
  extensions: ["glb"],
82929
82796
  mimeTypes: ["model/gltf-binary"],
82930
82797
  binary: true,
@@ -83020,7 +82887,7 @@ function parseBatchedModel(tile, arrayBuffer, byteOffset, options, context) {
83020
82887
 
83021
82888
  // ../3d-tiles/src/lib/parsers/parse-3d-tile-instanced-model.ts
83022
82889
  var import_core15 = __toModule(require_es56());
83023
- var import_geospatial6 = __toModule(require_es57());
82890
+ var import_geospatial7 = __toModule(require_es57());
83024
82891
  async function parseInstancedModel3DTile(tile, arrayBuffer, byteOffset, options, context) {
83025
82892
  byteOffset = parseInstancedModel(tile, arrayBuffer, byteOffset, options, context);
83026
82893
  await extractGLTF(tile, tile.gltfFormat, options, context);
@@ -83118,7 +82985,7 @@ function extractInstancedAttributes(tile, featureTable, batchTable, instancesLen
83118
82985
  }
83119
82986
  throw new Error("i3dm: oct-encoded orientation not implemented");
83120
82987
  } else if (tile.eastNorthUp) {
83121
- import_geospatial6.Ellipsoid.WGS84.eastNorthUpToFixedFrame(instancePosition, instanceTransform);
82988
+ import_geospatial7.Ellipsoid.WGS84.eastNorthUpToFixedFrame(instancePosition, instanceTransform);
83122
82989
  instanceTransform.getRotationMatrix3(instanceRotation);
83123
82990
  } else {
83124
82991
  instanceRotation.identity();
@@ -83259,7 +83126,7 @@ var Tile3DSubtreeLoader = {
83259
83126
  id: "3d-tiles-subtree",
83260
83127
  name: "3D Tiles Subtree",
83261
83128
  module: "3d-tiles",
83262
- version: VERSION3,
83129
+ version: VERSION4,
83263
83130
  extensions: ["subtree"],
83264
83131
  mimeTypes: ["application/octet-stream"],
83265
83132
  tests: ["subtree"],
@@ -83563,7 +83430,7 @@ var Tiles3DLoader = {
83563
83430
  id: "3d-tiles",
83564
83431
  name: "3D Tiles",
83565
83432
  module: "3d-tiles",
83566
- version: VERSION3,
83433
+ version: VERSION4,
83567
83434
  extensions: ["cmpt", "pnts", "b3dm", "i3dm"],
83568
83435
  mimeTypes: ["application/octet-stream"],
83569
83436
  tests: ["cmpt", "pnts", "b3dm", "i3dm"],
@@ -83858,7 +83725,7 @@ var Tile3DWriter = {
83858
83725
  name: "3D Tile",
83859
83726
  id: "3d-tiles",
83860
83727
  module: "3d-tiles",
83861
- version: VERSION3,
83728
+ version: VERSION4,
83862
83729
  extensions: ["cmpt", "pnts", "b3dm", "i3dm"],
83863
83730
  mimeTypes: ["application/octet-stream"],
83864
83731
  encodeSync: encodeSync3,
@@ -83997,31 +83864,37 @@ var NodePages = class {
83997
83864
  this.updateResourceInMesh(node2);
83998
83865
  return node2.index;
83999
83866
  }
84000
- async save(layers0Path, fileMap, slpk = false) {
83867
+ async save(layers0Path, writeQueue, slpk = false) {
84001
83868
  if (slpk) {
84002
83869
  for (const [index, nodePage] of this.nodePages.entries()) {
84003
83870
  const nodePageStr = JSON.stringify(nodePage);
84004
83871
  const slpkPath = (0, import_path2.join)(layers0Path, "nodepages");
84005
- fileMap[`nodePages/${index.toString()}.json.gz`] = await this.writeFile(slpkPath, nodePageStr, `${index.toString()}.json`);
83872
+ writeQueue.enqueue({
83873
+ archiveKey: `nodePages/${index.toString()}.json.gz`,
83874
+ writePromise: this.writeFile(slpkPath, nodePageStr, `${index.toString()}.json`)
83875
+ });
84006
83876
  }
84007
83877
  const metadata = (0, import_json_map_transform.default)({ nodeCount: this.nodesCounter }, METADATA());
84008
83878
  const compress = false;
84009
- fileMap["metadata.json"] = await this.writeFile(layers0Path, JSON.stringify(metadata), "metadata.json", compress);
83879
+ writeQueue.enqueue({
83880
+ archiveKey: "metadata.json",
83881
+ writePromise: this.writeFile(layers0Path, JSON.stringify(metadata), "metadata.json", compress)
83882
+ });
84010
83883
  } else {
84011
83884
  for (const [index, nodePage] of this.nodePages.entries()) {
84012
83885
  const nodePageStr = JSON.stringify(nodePage);
84013
83886
  const nodePagePath = (0, import_path2.join)(layers0Path, "nodepages", index.toString());
84014
- await this.writeFile(nodePagePath, nodePageStr);
83887
+ writeQueue.enqueue({ writePromise: this.writeFile(nodePagePath, nodePageStr) });
84015
83888
  }
84016
83889
  }
84017
83890
  }
84018
83891
  };
84019
83892
 
84020
- // src/lib/utils/file-utils.js
83893
+ // src/lib/utils/file-utils.ts
84021
83894
  var import_fs3 = __toModule(require("fs"));
84022
83895
  var import_path4 = __toModule(require("path"));
84023
83896
 
84024
- // src/lib/utils/compress-util.js
83897
+ // src/lib/utils/compress-util.ts
84025
83898
  var import_zlib = __toModule(require("zlib"));
84026
83899
  var import_path3 = __toModule(require("path"));
84027
83900
  var import_fs2 = __toModule(require("fs"));
@@ -84045,11 +83918,11 @@ function compressFileWithGzip(pathFile) {
84045
83918
  input.pipe(gzip).pipe(output);
84046
83919
  });
84047
83920
  }
84048
- async function compressWithChildProcess() {
83921
+ async function compressWithChildProcess(inputFolder, outputFile, level, inputFiles, sevenZipExe) {
84049
83922
  if (process.platform === "win32") {
84050
- await compressWithChildProcessWindows(...arguments);
83923
+ await compressWithChildProcessWindows(inputFolder, outputFile, level, inputFiles, sevenZipExe);
84051
83924
  } else {
84052
- await compressWithChildProcessUnix(...arguments);
83925
+ await compressWithChildProcessUnix(inputFolder, outputFile, level, inputFiles);
84053
83926
  }
84054
83927
  }
84055
83928
  async function compressWithChildProcessUnix(inputFolder, outputFile, level = 0, inputFiles = ".") {
@@ -84082,12 +83955,20 @@ async function compressWithChildProcessWindows(inputFolder, outputFile, level =
84082
83955
  });
84083
83956
  }
84084
83957
 
84085
- // src/lib/utils/file-utils.js
83958
+ // src/lib/utils/file-utils.ts
84086
83959
  async function writeFile3(path2, data, fileName = "index.json") {
83960
+ let toWriteData;
83961
+ if (data instanceof Promise) {
83962
+ toWriteData = new Uint8Array(await data);
83963
+ } else if (data instanceof ArrayBuffer) {
83964
+ toWriteData = new Uint8Array(data);
83965
+ } else {
83966
+ toWriteData = data;
83967
+ }
84087
83968
  await import_fs3.promises.mkdir(path2, { recursive: true });
84088
83969
  const pathFile = (0, import_path4.join)(path2, fileName);
84089
83970
  try {
84090
- await import_fs3.promises.writeFile(pathFile, data);
83971
+ await import_fs3.promises.writeFile(pathFile, toWriteData);
84091
83972
  } catch (err) {
84092
83973
  throw err;
84093
83974
  }
@@ -84113,7 +83994,7 @@ function getAbsoluteFilePath(filePath) {
84113
83994
  return (0, import_path4.isAbsolute)(filePath) ? filePath : (0, import_path4.join)(process.cwd(), filePath);
84114
83995
  }
84115
83996
 
84116
- // src/lib/utils/statistic-utills.js
83997
+ // src/lib/utils/statistic-utills.ts
84117
83998
  var import_path5 = __toModule(require("path"));
84118
83999
  var import_fs4 = __toModule(require("fs"));
84119
84000
  function timeConverter(time) {
@@ -84171,16 +84052,17 @@ async function getTotalFilesSize(dirPath) {
84171
84052
  return totalFileSize;
84172
84053
  }
84173
84054
 
84174
- // src/i3s-converter/helpers/geometry-converter.js
84055
+ // src/i3s-converter/helpers/geometry-converter.ts
84175
84056
  var import_core21 = __toModule(require_es56());
84176
- var import_geospatial8 = __toModule(require_es57());
84057
+ var import_geospatial9 = __toModule(require_es57());
84177
84058
  var import_md5 = __toModule(require_md52());
84178
84059
 
84179
84060
  // src/i3s-converter/helpers/geometry-attributes.ts
84180
84061
  var VALUES_PER_VERTEX = 3;
84181
84062
  var POSITIONS_AND_NORMALS_PER_TRIANGLE = 9;
84182
84063
  function generateAttributes(attributes) {
84183
- const { positions, normals, texCoords, colors, featureIndices, triangleCount } = attributes;
84064
+ const { positions, normals, texCoords, colors, featureIndices } = attributes;
84065
+ const triangleCount = positions.length / POSITIONS_AND_NORMALS_PER_TRIANGLE;
84184
84066
  if (!featureIndices.length) {
84185
84067
  return {
84186
84068
  faceRange: new Uint32Array([0, triangleCount - 1]),
@@ -84325,14 +84207,14 @@ function groupAttributesAndRangesByFeatureId(unifiedObjects, featureCount) {
84325
84207
 
84326
84208
  // src/i3s-converter/helpers/coordinate-converter.ts
84327
84209
  var import_core20 = __toModule(require_es56());
84328
- var import_geospatial7 = __toModule(require_es57());
84210
+ var import_geospatial8 = __toModule(require_es57());
84329
84211
  var import_culling5 = __toModule(require_es58());
84330
84212
  function createBoundingVolumes(tile, geoidHeightModel) {
84331
84213
  let radius;
84332
84214
  let halfSize;
84333
84215
  let quaternion;
84334
84216
  const boundingVolume = tile.boundingVolume;
84335
- const cartographicCenter = import_geospatial7.Ellipsoid.WGS84.cartesianToCartographic(boundingVolume.center, new import_core20.Vector3());
84217
+ const cartographicCenter = import_geospatial8.Ellipsoid.WGS84.cartesianToCartographic(boundingVolume.center, new import_core20.Vector3());
84336
84218
  cartographicCenter[2] = cartographicCenter[2] - geoidHeightModel.getHeight(cartographicCenter[1], cartographicCenter[0]);
84337
84219
  if (boundingVolume instanceof import_culling5.OrientedBoundingBox) {
84338
84220
  halfSize = boundingVolume.halfSize;
@@ -84356,8 +84238,8 @@ function createBoundingVolumesFromGeometry(cartesianPositions, geoidHeightModel)
84356
84238
  const positionVectors = convertPositionsToVectors(cartesianPositions);
84357
84239
  const geometryObb = (0, import_culling5.makeOrientedBoundingBoxFromPoints)(positionVectors);
84358
84240
  const geometryMbs = (0, import_culling5.makeBoundingSphereFromPoints)(positionVectors);
84359
- let mbsCenter = import_geospatial7.Ellipsoid.WGS84.cartesianToCartographic(geometryMbs.center, new import_core20.Vector3());
84360
- let obbCenter = import_geospatial7.Ellipsoid.WGS84.cartesianToCartographic(geometryObb.center, new import_core20.Vector3());
84241
+ let mbsCenter = import_geospatial8.Ellipsoid.WGS84.cartesianToCartographic(geometryMbs.center, new import_core20.Vector3());
84242
+ let obbCenter = import_geospatial8.Ellipsoid.WGS84.cartesianToCartographic(geometryObb.center, new import_core20.Vector3());
84361
84243
  mbsCenter[2] = mbsCenter[2] - geoidHeightModel.getHeight(mbsCenter[1], mbsCenter[0]);
84362
84244
  obbCenter[2] = obbCenter[2] - geoidHeightModel.getHeight(obbCenter[1], obbCenter[0]);
84363
84245
  return {
@@ -84377,22 +84259,25 @@ function convertPositionsToVectors(positions) {
84377
84259
  }
84378
84260
  return result;
84379
84261
  }
84380
- function convertCommonToI3SExtentCoordinate(tileset) {
84381
- const cartesianCenter = tileset?.cartesianCenter;
84382
- if (!cartesianCenter) {
84383
- return null;
84262
+ function convertBoundingVolumeToI3SFullExtent(boundingVolume) {
84263
+ let sphere;
84264
+ if (boundingVolume instanceof import_culling5.BoundingSphere) {
84265
+ sphere = boundingVolume;
84266
+ } else {
84267
+ sphere = boundingVolume.getBoundingSphere();
84384
84268
  }
84385
- const radius = tileset?.lodMetricValue;
84386
- const rightTop = import_geospatial7.Ellipsoid.WGS84.cartesianToCartographic(new import_core20.Vector3(cartesianCenter[0] + radius, cartesianCenter[1] + radius, cartesianCenter[2]), new import_core20.Vector3());
84387
- const leftBottom = import_geospatial7.Ellipsoid.WGS84.cartesianToCartographic(new import_core20.Vector3(cartesianCenter[0] - radius, cartesianCenter[1] - radius, cartesianCenter[2]), new import_core20.Vector3());
84388
- const isFirstRight = rightTop[0] < leftBottom[0];
84389
- const isFirstTop = rightTop[1] < leftBottom[1];
84390
- return [
84391
- isFirstRight ? rightTop[0] : leftBottom[0],
84392
- isFirstTop ? rightTop[1] : leftBottom[1],
84393
- isFirstRight ? leftBottom[0] : rightTop[0],
84394
- isFirstTop ? leftBottom[1] : rightTop[1]
84395
- ];
84269
+ const center = sphere.center;
84270
+ const radius = sphere.radius;
84271
+ const vertexMax = import_geospatial8.Ellipsoid.WGS84.cartesianToCartographic(new import_core20.Vector3(center[0] + radius, center[1] + radius, center[2] + radius), new import_core20.Vector3());
84272
+ const vertexMin = import_geospatial8.Ellipsoid.WGS84.cartesianToCartographic(new import_core20.Vector3(center[0] - radius, center[1] - radius, center[2] - radius), new import_core20.Vector3());
84273
+ return {
84274
+ xmin: vertexMin[0],
84275
+ xmax: vertexMax[0],
84276
+ ymin: vertexMin[1],
84277
+ ymax: vertexMax[1],
84278
+ zmin: vertexMin[2],
84279
+ zmax: vertexMax[2]
84280
+ };
84396
84281
  }
84397
84282
  function createObbFromMbs(mbs) {
84398
84283
  const radius = mbs[3];
@@ -84401,7 +84286,49 @@ function createObbFromMbs(mbs) {
84401
84286
  return new import_culling5.OrientedBoundingBox(center, halfAxex);
84402
84287
  }
84403
84288
 
84404
- // src/i3s-converter/helpers/geometry-converter.js
84289
+ // src/i3s-converter/helpers/gltf-attributes.ts
84290
+ function getB3DMAttributesWithoutBufferView(attributes) {
84291
+ const attributesWithoutBufferView = {};
84292
+ for (const attributeName in attributes) {
84293
+ attributesWithoutBufferView[attributeName] = {
84294
+ value: attributes[attributeName].value
84295
+ };
84296
+ }
84297
+ return attributesWithoutBufferView;
84298
+ }
84299
+ function prepareDataForAttributesConversion(tileContent) {
84300
+ const gltfMaterials = tileContent.gltf?.materials?.map((material) => ({ id: material.id }));
84301
+ let nodes = tileContent.gltf?.scene?.nodes || tileContent.gltf?.scenes?.[0]?.nodes || tileContent.gltf?.nodes || [];
84302
+ const prepearedNodes = nodes.map((node2) => {
84303
+ if (!node2.mesh) {
84304
+ return node2;
84305
+ }
84306
+ return {
84307
+ ...node2,
84308
+ mesh: {
84309
+ ...node2.mesh,
84310
+ primitives: node2.mesh?.primitives.map((primitive) => ({
84311
+ ...primitive,
84312
+ indices: { value: primitive?.indices?.value },
84313
+ attributes: getB3DMAttributesWithoutBufferView(primitive.attributes),
84314
+ material: {
84315
+ id: primitive?.material?.id
84316
+ }
84317
+ }))
84318
+ }
84319
+ };
84320
+ });
84321
+ const cartographicOrigin = tileContent.cartographicOrigin;
84322
+ const cartesianModelMatrix = tileContent.cartesianModelMatrix;
84323
+ return {
84324
+ gltfMaterials,
84325
+ nodes: prepearedNodes,
84326
+ cartographicOrigin,
84327
+ cartesianModelMatrix
84328
+ };
84329
+ }
84330
+
84331
+ // src/i3s-converter/helpers/geometry-converter.ts
84405
84332
  var DEFAULT_ROUGHNESS_FACTOR = 1;
84406
84333
  var DEFAULT_METALLIC_FACTOR = 1;
84407
84334
  var VALUES_PER_VERTEX2 = 3;
@@ -84413,10 +84340,11 @@ var DOUBLE_TYPE = "Float64";
84413
84340
  var OBJECT_ID_TYPE = "Oid32";
84414
84341
  var BATCHED_ID_POSSIBLE_ATTRIBUTE_NAMES = ["CUSTOM_ATTRIBUTE_2", "_BATCHID", "BATCHID"];
84415
84342
  var scratchVector4 = new import_core21.Vector3();
84416
- async function convertB3dmToI3sGeometry(tileContent, nodeId, featuresHashArray, attributeStorageInfo, draco, generateBoundingVolumes, geoidHeightModel) {
84343
+ async function convertB3dmToI3sGeometry(tileContent, nodeId, featuresHashArray, attributeStorageInfo, draco, generateBoundingVolumes, geoidHeightModel, workerSource) {
84417
84344
  const useCartesianPositions = generateBoundingVolumes;
84418
- const materialAndTextureList = convertMaterials(tileContent);
84419
- const convertedAttributesMap = convertAttributes(tileContent, useCartesianPositions);
84345
+ const materialAndTextureList = convertMaterials(tileContent.gltf?.materials);
84346
+ const dataForAttributesConversion = prepareDataForAttributesConversion(tileContent);
84347
+ const convertedAttributesMap = await convertAttributes(dataForAttributesConversion, useCartesianPositions);
84420
84348
  if (generateBoundingVolumes) {
84421
84349
  _generateBoundingVolumesFromGeometry(convertedAttributesMap, geoidHeightModel);
84422
84350
  }
@@ -84427,7 +84355,7 @@ async function convertB3dmToI3sGeometry(tileContent, nodeId, featuresHashArray,
84427
84355
  }
84428
84356
  const result = [];
84429
84357
  let nodesCounter = nodeId;
84430
- let { materials = [] } = tileContent.gltf;
84358
+ let { materials = [] } = tileContent.gltf || { materials: [] };
84431
84359
  if (!materials?.length) {
84432
84360
  materials.push({ id: "default" });
84433
84361
  }
@@ -84437,6 +84365,9 @@ async function convertB3dmToI3sGeometry(tileContent, nodeId, featuresHashArray,
84437
84365
  continue;
84438
84366
  }
84439
84367
  const convertedAttributes = convertedAttributesMap.get(sourceMaterial.id);
84368
+ if (!convertedAttributes) {
84369
+ continue;
84370
+ }
84440
84371
  const { material, texture } = materialAndTextureList[i];
84441
84372
  result.push(await _makeNodeResources({
84442
84373
  convertedAttributes,
@@ -84446,7 +84377,8 @@ async function convertB3dmToI3sGeometry(tileContent, nodeId, featuresHashArray,
84446
84377
  nodeId: nodesCounter,
84447
84378
  featuresHashArray,
84448
84379
  attributeStorageInfo,
84449
- draco
84380
+ draco,
84381
+ workerSource
84450
84382
  }));
84451
84383
  nodesCounter++;
84452
84384
  }
@@ -84462,7 +84394,7 @@ function _generateBoundingVolumesFromGeometry(convertedAttributesMap, geoidHeigh
84462
84394
  const cartographicOrigin = boundingVolumes.obb.center;
84463
84395
  for (let index = 0; index < attributes.positions.length; index += VALUES_PER_VERTEX2) {
84464
84396
  const vertex = attributes.positions.subarray(index, index + VALUES_PER_VERTEX2);
84465
- import_geospatial8.Ellipsoid.WGS84.cartesianToCartographic(Array.from(vertex), scratchVector4);
84397
+ import_geospatial9.Ellipsoid.WGS84.cartesianToCartographic(Array.from(vertex), scratchVector4);
84466
84398
  scratchVector4[2] = scratchVector4[2] - geoidHeightModel.getHeight(scratchVector4[1], scratchVector4[0]);
84467
84399
  scratchVector4 = scratchVector4.subtract(cartographicOrigin);
84468
84400
  attributes.positions.set(scratchVector4, index);
@@ -84477,12 +84409,12 @@ async function _makeNodeResources({
84477
84409
  nodeId,
84478
84410
  featuresHashArray,
84479
84411
  attributeStorageInfo,
84480
- draco
84412
+ draco,
84413
+ workerSource
84481
84414
  }) {
84482
84415
  const boundingVolumes = convertedAttributes.boundingVolumes;
84483
84416
  const vertexCount = convertedAttributes.positions.length / VALUES_PER_VERTEX2;
84484
- const triangleCount = vertexCount / 3;
84485
- const { faceRange, featureIds, positions, normals, colors, texCoords, featureCount } = generateAttributes({ triangleCount, ...convertedAttributes });
84417
+ const { faceRange, featureIds, positions, normals, colors, texCoords, featureCount } = generateAttributes(convertedAttributes);
84486
84418
  if (tileContent.batchTableJson) {
84487
84419
  makeFeatureIdsUnique(featureIds, convertedAttributes.featureIndices, featuresHashArray, tileContent.batchTableJson);
84488
84420
  }
@@ -84490,20 +84422,20 @@ async function _makeNodeResources({
84490
84422
  const typedFeatureIds = generateBigUint64Array(featureIds);
84491
84423
  header.set([vertexCount, featureCount], 0);
84492
84424
  const fileBuffer = new Uint8Array(concatenateArrayBuffers(header.buffer, positions.buffer, normals.buffer, texture ? texCoords.buffer : new ArrayBuffer(0), colors.buffer, typedFeatureIds.buffer, faceRange.buffer));
84493
- const compressedGeometry = draco ? await generateCompressedGeometry(vertexCount, convertedAttributes, {
84425
+ const compressedGeometry = draco ? generateCompressedGeometry(vertexCount, convertedAttributes, {
84494
84426
  positions,
84495
84427
  normals,
84496
84428
  texCoords: texture ? texCoords : new Float32Array(0),
84497
84429
  colors,
84498
84430
  featureIds,
84499
84431
  faceRange
84500
- }) : null;
84432
+ }, workerSource.draco) : null;
84501
84433
  const attributes = convertBatchTableToAttributeBuffers(tileContent.batchTableJson, featureIds, attributeStorageInfo);
84502
84434
  return {
84503
84435
  geometry: fileBuffer,
84504
84436
  compressedGeometry,
84505
84437
  texture,
84506
- sharedResources: getSharedResources(tileContent, nodeId),
84438
+ sharedResources: getSharedResources(tileContent.gltf?.materials || [], nodeId),
84507
84439
  meshMaterial: material,
84508
84440
  vertexCount,
84509
84441
  attributes,
@@ -84511,34 +84443,41 @@ async function _makeNodeResources({
84511
84443
  boundingVolumes
84512
84444
  };
84513
84445
  }
84514
- function convertAttributes(tileContent, useCartesianPositions) {
84446
+ async function convertAttributes(attributesData, useCartesianPositions) {
84447
+ const { gltfMaterials, nodes, cartographicOrigin, cartesianModelMatrix } = attributesData;
84515
84448
  const attributesMap = new Map();
84516
- for (const material of tileContent.gltf.materials || [{ id: "default" }]) {
84449
+ for (const material of gltfMaterials || [{ id: "default" }]) {
84517
84450
  attributesMap.set(material.id, {
84518
84451
  positions: new Float32Array(0),
84519
84452
  normals: new Float32Array(0),
84520
84453
  texCoords: new Float32Array(0),
84521
84454
  colors: new Uint8Array(0),
84455
+ featureIndicesGroups: [],
84522
84456
  featureIndices: [],
84523
84457
  boundingVolumes: null
84524
84458
  });
84525
84459
  }
84526
- const nodes = (tileContent.gltf.scene || tileContent.gltf.scenes?.[0] || tileContent.gltf).nodes;
84527
- convertNodes(nodes, tileContent, attributesMap, useCartesianPositions);
84460
+ convertNodes(nodes, cartographicOrigin, cartesianModelMatrix, attributesMap, useCartesianPositions);
84528
84461
  for (const attrKey of attributesMap.keys()) {
84529
84462
  const attributes = attributesMap.get(attrKey);
84463
+ if (!attributes) {
84464
+ continue;
84465
+ }
84530
84466
  if (attributes.positions.length === 0) {
84531
84467
  attributesMap.delete(attrKey);
84532
84468
  continue;
84533
84469
  }
84534
- attributes.featureIndices = attributes.featureIndices.reduce((acc, value) => acc.concat(value));
84470
+ if (attributes.featureIndicesGroups) {
84471
+ attributes.featureIndices = attributes.featureIndicesGroups.reduce((acc, value) => acc.concat(value));
84472
+ delete attributes.featureIndicesGroups;
84473
+ }
84535
84474
  }
84536
84475
  return attributesMap;
84537
84476
  }
84538
- function convertNodes(nodes, tileContent, attributesMap, useCartesianPositions, matrix = new import_core21.Matrix4([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1])) {
84477
+ function convertNodes(nodes, cartographicOrigin, cartesianModelMatrix, attributesMap, useCartesianPositions, matrix = new import_core21.Matrix4([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1])) {
84539
84478
  if (nodes) {
84540
84479
  for (const node2 of nodes) {
84541
- convertNode(node2, tileContent, attributesMap, useCartesianPositions, matrix);
84480
+ convertNode(node2, cartographicOrigin, cartesianModelMatrix, attributesMap, useCartesianPositions, matrix);
84542
84481
  }
84543
84482
  }
84544
84483
  }
@@ -84559,15 +84498,15 @@ function getCompositeTransformationMatrix(node2, matrix) {
84559
84498
  }
84560
84499
  return transformationMatrix;
84561
84500
  }
84562
- function convertNode(node2, tileContent, attributesMap, useCartesianPositions, matrix = new import_core21.Matrix4([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1])) {
84501
+ function convertNode(node2, cartographicOrigin, cartesianModelMatrix, attributesMap, useCartesianPositions, matrix = new import_core21.Matrix4([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1])) {
84563
84502
  const transformationMatrix = getCompositeTransformationMatrix(node2, matrix);
84564
84503
  const mesh = node2.mesh;
84565
84504
  if (mesh) {
84566
- convertMesh(mesh, tileContent, attributesMap, useCartesianPositions, transformationMatrix);
84505
+ convertMesh(mesh, cartographicOrigin, cartesianModelMatrix, attributesMap, useCartesianPositions, transformationMatrix);
84567
84506
  }
84568
- convertNodes(node2.children, tileContent, attributesMap, useCartesianPositions, transformationMatrix);
84507
+ convertNodes(node2.children || [], cartographicOrigin, cartesianModelMatrix, attributesMap, useCartesianPositions, transformationMatrix);
84569
84508
  }
84570
- function convertMesh(mesh, content, attributesMap, useCartesianPositions = false, matrix = new import_core21.Matrix4([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1])) {
84509
+ function convertMesh(mesh, cartographicOrigin, cartesianModelMatrix, attributesMap, useCartesianPositions = false, matrix = new import_core21.Matrix4([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1])) {
84571
84510
  for (const primitive of mesh.primitives) {
84572
84511
  let outputAttributes = null;
84573
84512
  if (primitive.material) {
@@ -84577,27 +84516,31 @@ function convertMesh(mesh, content, attributesMap, useCartesianPositions = false
84577
84516
  }
84578
84517
  assert2(outputAttributes !== null, "Primitive - material mapping failed");
84579
84518
  const attributes = primitive.attributes;
84519
+ if (!outputAttributes) {
84520
+ continue;
84521
+ }
84580
84522
  outputAttributes.positions = concatenateTypedArrays(outputAttributes.positions, transformVertexArray({
84581
84523
  vertices: attributes.POSITION.value,
84582
- cartographicOrigin: content.cartographicOrigin,
84583
- cartesianModelMatrix: content.cartesianModelMatrix,
84524
+ cartographicOrigin,
84525
+ cartesianModelMatrix,
84584
84526
  nodeMatrix: matrix,
84585
- indices: primitive.indices.value,
84527
+ indices: primitive.indices?.value,
84586
84528
  attributeSpecificTransformation: transformVertexPositions,
84587
84529
  useCartesianPositions
84588
84530
  }));
84589
84531
  outputAttributes.normals = concatenateTypedArrays(outputAttributes.normals, transformVertexArray({
84590
84532
  vertices: attributes.NORMAL && attributes.NORMAL.value,
84591
- cartographicOrigin: content.cartographicOrigin,
84592
- cartesianModelMatrix: content.cartesianModelMatrix,
84533
+ cartographicOrigin,
84534
+ cartesianModelMatrix,
84593
84535
  nodeMatrix: matrix,
84594
- indices: primitive.indices.value,
84536
+ indices: primitive.indices?.value,
84595
84537
  attributeSpecificTransformation: transformVertexNormals,
84596
84538
  useCartesianPositions: false
84597
84539
  }));
84598
- outputAttributes.texCoords = concatenateTypedArrays(outputAttributes.texCoords, flattenTexCoords(attributes.TEXCOORD_0 && attributes.TEXCOORD_0.value, primitive.indices.value));
84599
- outputAttributes.colors = concatenateTypedArrays(outputAttributes.colors, flattenColors(attributes.COLOR_0, primitive.indices.value));
84600
- outputAttributes.featureIndices.push(flattenBatchIds(getBatchIdsByAttributeName(attributes), primitive.indices.value));
84540
+ outputAttributes.texCoords = concatenateTypedArrays(outputAttributes.texCoords, flattenTexCoords(attributes.TEXCOORD_0 && attributes.TEXCOORD_0.value, primitive.indices?.value));
84541
+ outputAttributes.colors = concatenateTypedArrays(outputAttributes.colors, flattenColors(attributes.COLOR_0, primitive.indices?.value));
84542
+ outputAttributes.featureIndicesGroups = outputAttributes.featureIndicesGroups || [];
84543
+ outputAttributes.featureIndicesGroups.push(flattenBatchIds(getBatchIdsByAttributeName(attributes), primitive.indices?.value));
84601
84544
  }
84602
84545
  }
84603
84546
  function transformVertexArray(args) {
@@ -84626,7 +84569,7 @@ function transformVertexPositions(vertexVector, calleeArgs) {
84626
84569
  if (useCartesianPositions) {
84627
84570
  return vertexVector;
84628
84571
  }
84629
- import_geospatial8.Ellipsoid.WGS84.cartesianToCartographic([vertexVector[0], vertexVector[1], vertexVector[2]], vertexVector);
84572
+ import_geospatial9.Ellipsoid.WGS84.cartesianToCartographic([vertexVector[0], vertexVector[1], vertexVector[2]], vertexVector);
84630
84573
  vertexVector = vertexVector.subtract(cartographicOrigin);
84631
84574
  return vertexVector;
84632
84575
  }
@@ -84693,9 +84636,8 @@ function getBatchIdsByAttributeName(attributes) {
84693
84636
  }
84694
84637
  return batchIds;
84695
84638
  }
84696
- function convertMaterials(tileContent) {
84639
+ function convertMaterials(sourceMaterials = []) {
84697
84640
  const result = [];
84698
- const sourceMaterials = tileContent.gltf.materials || [];
84699
84641
  for (const sourceMaterial of sourceMaterials) {
84700
84642
  result.push(convertMaterial(sourceMaterial));
84701
84643
  }
@@ -84704,8 +84646,8 @@ function convertMaterials(tileContent) {
84704
84646
  function convertMaterial(sourceMaterial) {
84705
84647
  const material = {
84706
84648
  doubleSided: sourceMaterial.doubleSided,
84707
- emissiveFactor: sourceMaterial.emissiveFactor.map((c) => Math.round(c * 255)),
84708
- alphaMode: (sourceMaterial.alphaMode || "OPAQUE").toLowerCase(),
84649
+ emissiveFactor: sourceMaterial.emissiveFactor?.map((c) => Math.round(c * 255)),
84650
+ alphaMode: convertAlphaMode(sourceMaterial.alphaMode),
84709
84651
  pbrMetallicRoughness: {
84710
84652
  roughnessFactor: sourceMaterial?.pbrMetallicRoughness?.roughnessFactor || DEFAULT_ROUGHNESS_FACTOR,
84711
84653
  metallicFactor: sourceMaterial?.pbrMetallicRoughness?.metallicFactor || DEFAULT_METALLIC_FACTOR
@@ -84729,14 +84671,28 @@ function convertMaterial(sourceMaterial) {
84729
84671
  }
84730
84672
  return { material, texture };
84731
84673
  }
84674
+ function convertAlphaMode(gltfAlphaMode) {
84675
+ switch (gltfAlphaMode) {
84676
+ case "OPAQUE":
84677
+ return "opaque";
84678
+ case "MASK":
84679
+ return "mask";
84680
+ case "BLEND":
84681
+ return "blend";
84682
+ default:
84683
+ return "opaque";
84684
+ }
84685
+ }
84732
84686
  function getDefaultMaterial() {
84733
84687
  return {
84734
84688
  alphaMode: "opaque",
84735
- pbrMetallicRoughness: {}
84689
+ pbrMetallicRoughness: {
84690
+ metallicFactor: 1,
84691
+ roughnessFactor: 1
84692
+ }
84736
84693
  };
84737
84694
  }
84738
- function getSharedResources(tileContent, nodeId) {
84739
- const gltfMaterials = tileContent.gltf.materials;
84695
+ function getSharedResources(gltfMaterials, nodeId) {
84740
84696
  const i3sResources = {};
84741
84697
  if (!gltfMaterials || !gltfMaterials.length) {
84742
84698
  return i3sResources;
@@ -84765,7 +84721,7 @@ function convertGLTFMaterialToI3sSharedResources(gltfMaterial, nodeId) {
84765
84721
  colorFactor[3] = colorFactor[3] || 1;
84766
84722
  }
84767
84723
  return {
84768
- materialDefinitionInfo: extractSharedResourcesMaterialInfo(colorFactor, metallicFactor),
84724
+ materialDefinitionInfo: extractSharedResourcesMaterialInfo(colorFactor || [1, 1, 1, 1], metallicFactor),
84769
84725
  textureDefinitionInfo
84770
84726
  };
84771
84727
  }
@@ -84780,24 +84736,27 @@ function extractSharedResourcesMaterialInfo(baseColorFactor, metallicFactor = 1)
84780
84736
  dielectricSpecular[3] = 1;
84781
84737
  const specular = dielectricSpecular.lerp(dielectricSpecular, baseColorVector, metallicFactor);
84782
84738
  return {
84783
- diffuse: diffuse.toArray(),
84784
- specular: specular.toArray()
84739
+ params: {
84740
+ diffuse: diffuse.toArray(),
84741
+ specular: specular.toArray(),
84742
+ renderMode: "solid"
84743
+ }
84785
84744
  };
84786
84745
  }
84787
84746
  function extractSharedResourcesTextureInfo(texture, nodeId) {
84788
84747
  return {
84789
- encoding: [texture.source.mimeType],
84748
+ encoding: texture?.source?.mimeType ? [texture.source.mimeType] : void 0,
84790
84749
  images: [
84791
84750
  {
84792
84751
  id: generateImageId(texture, nodeId),
84793
- size: texture.source.image.width,
84794
- length: [texture.source.image.data.length]
84752
+ size: texture.source?.image.width,
84753
+ length: [texture.source?.image.data.length]
84795
84754
  }
84796
84755
  ]
84797
84756
  };
84798
84757
  }
84799
84758
  function generateImageId(texture, nodeId) {
84800
- const { width, height } = texture.source.image;
84759
+ const { width, height } = texture.source?.image;
84801
84760
  const levelCountOfTexture = 1;
84802
84761
  const indexOfLevel = 0;
84803
84762
  const indexOfTextureInStore = nodeId + 1;
@@ -84869,7 +84828,9 @@ function convertBatchTableToAttributeBuffers(batchTable, featureIds, attributeSt
84869
84828
  default:
84870
84829
  attributeBuffer = generateStringAttributeBuffer(batchTableWithFeatureIds[key]);
84871
84830
  }
84872
- attributeBuffers.push(attributeBuffer);
84831
+ if (attributeBuffer) {
84832
+ attributeBuffers.push(attributeBuffer);
84833
+ }
84873
84834
  }
84874
84835
  }
84875
84836
  return attributeBuffers;
@@ -84912,7 +84873,7 @@ function generateBigUint64Array(featureIds) {
84912
84873
  }
84913
84874
  return typedFeatureIds;
84914
84875
  }
84915
- async function generateCompressedGeometry(vertexCount, convertedAttributes, attributes) {
84876
+ async function generateCompressedGeometry(vertexCount, convertedAttributes, attributes, dracoWorkerSoure) {
84916
84877
  const { positions, normals, texCoords, colors, featureIds, faceRange } = attributes;
84917
84878
  const indices = new Uint32Array(vertexCount);
84918
84879
  for (let index = 0; index < indices.length; index++) {
@@ -84935,12 +84896,16 @@ async function generateCompressedGeometry(vertexCount, convertedAttributes, attr
84935
84896
  "i3s-feature-ids": new Int32Array(featureIds)
84936
84897
  }
84937
84898
  };
84938
- return new Uint8Array(await encode({ attributes: compressedAttributes, indices }, DracoWriter, {
84899
+ return encode({ attributes: compressedAttributes, indices }, DracoWriterWorker, {
84900
+ ...DracoWriterWorker.options,
84901
+ source: dracoWorkerSoure,
84902
+ reuseWorkers: true,
84903
+ _nodeWorkers: true,
84939
84904
  draco: {
84940
84905
  method: "MESH_SEQUENTIAL_ENCODING",
84941
84906
  attributesMetadata
84942
84907
  }
84943
- }));
84908
+ });
84944
84909
  }
84945
84910
  function generateFeatureIndexAttribute(featureIndex, faceRange) {
84946
84911
  const orderedFeatureIndices = new Uint32Array(featureIndex.length);
@@ -85000,7 +84965,7 @@ async function createSceneServerPath(layerName, layers0, rootPath) {
85000
84965
  await writeFile3(nodePagePath, JSON.stringify(sceneServer));
85001
84966
  }
85002
84967
 
85003
- // src/lib/utils/lod-conversion-utils.js
84968
+ // src/lib/utils/lod-conversion-utils.ts
85004
84969
  var DEFAULT_MAXIMUM_SCREEN_SPACE_ERROR = 16;
85005
84970
  function convertGeometricErrorToScreenThreshold(tile, coordinates) {
85006
84971
  const lodSelection = [];
@@ -85040,12 +85005,12 @@ function convertScreenThresholdToGeometricError(node2) {
85040
85005
 
85041
85006
  // src/pgm-loader.ts
85042
85007
  var import_geoid = __toModule(require_es59());
85043
- var VERSION9 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
85008
+ var VERSION10 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
85044
85009
  var PGMLoader = {
85045
85010
  name: "PGM - Netpbm grayscale image format",
85046
85011
  id: "pgm",
85047
85012
  module: "tile-converter",
85048
- version: VERSION9,
85013
+ version: VERSION10,
85049
85014
  mimeTypes: ["image/x-portable-graymap"],
85050
85015
  parse: async (arrayBuffer, options) => (0, import_geoid.parsePGM)(new Uint8Array(arrayBuffer), options),
85051
85016
  extensions: ["pgm"],
@@ -85559,7 +85524,7 @@ function transfromTextureDefinitions(textureDefinitionInfos, thisObject, origina
85559
85524
  var import_culling6 = __toModule(require_es58());
85560
85525
  var import_engine = __toModule(require_es515());
85561
85526
  var import_core23 = __toModule(require_es56());
85562
- var import_geospatial9 = __toModule(require_es57());
85527
+ var import_geospatial10 = __toModule(require_es57());
85563
85528
  function validateNodeBoundingVolumes(node2) {
85564
85529
  if (!node2?.parentNode?.obb || !node2?.parentNode?.mbs) {
85565
85530
  return [];
@@ -85600,7 +85565,7 @@ function getTileObbVertices(node2) {
85600
85565
  const halfSize = node2.obb.halfSize;
85601
85566
  const attributes = geometry.getAttributes();
85602
85567
  const positions = new Float32Array(attributes.POSITION.value);
85603
- const obbCenterCartesian = import_geospatial9.Ellipsoid.WGS84.cartographicToCartesian(node2.obb.center);
85568
+ const obbCenterCartesian = import_geospatial10.Ellipsoid.WGS84.cartographicToCartesian(node2.obb.center);
85604
85569
  let vertices = [];
85605
85570
  for (let i = 0; i < positions.length; i += 3) {
85606
85571
  const positionsVector = new import_core23.Vector3(positions[i] *= halfSize[0], positions[i + 1] *= halfSize[1], positions[i + 2] *= halfSize[2]);
@@ -85613,7 +85578,7 @@ function isAllVerticesInsideBoundingVolume(boundingVolume, positions) {
85613
85578
  let isVerticesInsideObb = true;
85614
85579
  for (let index = 0; index < positions.length / 3; index += 3) {
85615
85580
  const point = [positions[index], positions[index + 1], positions[index + 2]];
85616
- const cartographicPoint = import_geospatial9.Ellipsoid.WGS84.cartesianToCartographic(point);
85581
+ const cartographicPoint = import_geospatial10.Ellipsoid.WGS84.cartesianToCartographic(point);
85617
85582
  const distance = boundingVolume.distanceTo(cartographicPoint);
85618
85583
  if (distance > 0) {
85619
85584
  isVerticesInsideObb = false;
@@ -85623,6 +85588,94 @@ function isAllVerticesInsideBoundingVolume(boundingVolume, positions) {
85623
85588
  return isVerticesInsideObb;
85624
85589
  }
85625
85590
 
85591
+ // src/lib/utils/queue.ts
85592
+ var Queue = class extends Array {
85593
+ enqueue(val) {
85594
+ this.push(val);
85595
+ }
85596
+ dequeue() {
85597
+ return this.shift();
85598
+ }
85599
+ peek() {
85600
+ return this[0];
85601
+ }
85602
+ isEmpty() {
85603
+ return this.length === 0;
85604
+ }
85605
+ };
85606
+
85607
+ // src/lib/utils/write-queue.ts
85608
+ var WriteQueue = class extends Queue {
85609
+ constructor(listeningInterval = 2e3, writeConcurrency = 400) {
85610
+ super();
85611
+ this.writePromise = null;
85612
+ this.fileMap = {};
85613
+ this.listeningInterval = listeningInterval;
85614
+ this.writeConcurrency = writeConcurrency;
85615
+ }
85616
+ startListening() {
85617
+ this.intervalId = setInterval(this.startWrite.bind(this), this.listeningInterval);
85618
+ }
85619
+ stopListening() {
85620
+ if (this.intervalId) {
85621
+ clearInterval(this.intervalId);
85622
+ }
85623
+ }
85624
+ async startWrite() {
85625
+ if (this.writePromise) {
85626
+ await this.writePromise;
85627
+ this.writePromise = null;
85628
+ return;
85629
+ }
85630
+ this.writePromise = this.doWrite();
85631
+ await this.writePromise;
85632
+ this.writePromise = null;
85633
+ }
85634
+ async finalize() {
85635
+ this.stopListening();
85636
+ await this.startWrite();
85637
+ }
85638
+ async doWrite() {
85639
+ while (this.length) {
85640
+ const promises = [];
85641
+ const archiveKeys = [];
85642
+ for (let i = 0; i < this.writeConcurrency; i++) {
85643
+ const item = this.dequeue();
85644
+ if (!item) {
85645
+ break;
85646
+ }
85647
+ const { archiveKey, writePromise } = item;
85648
+ archiveKeys.push(archiveKey);
85649
+ promises.push(writePromise);
85650
+ }
85651
+ const writeResults = await Promise.all(promises);
85652
+ this.updateFileMap(archiveKeys, writeResults);
85653
+ }
85654
+ this.writePromise = null;
85655
+ }
85656
+ updateFileMap(archiveKeys, writeResults) {
85657
+ for (let i = 0; i < archiveKeys.length; i++) {
85658
+ const archiveKey = archiveKeys[i];
85659
+ if (!archiveKey) {
85660
+ continue;
85661
+ }
85662
+ this.fileMap[archiveKey] = writeResults[i];
85663
+ }
85664
+ }
85665
+ };
85666
+
85667
+ // src/i3s-attributes-worker.ts
85668
+ var VERSION11 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
85669
+ var I3SAttributesWorker = {
85670
+ id: "i3s-attributes",
85671
+ name: "I3S Attributes Worker",
85672
+ module: "tile-converter",
85673
+ version: VERSION11,
85674
+ options: {
85675
+ useCartesianPositions: false
85676
+ }
85677
+ };
85678
+
85626
85679
  // src/i3s-converter/i3s-converter.ts
85627
85680
  var ION_DEFAULT_TOKEN = import_process.default.env.IonToken || "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJlYWMxMzcyYy0zZjJkLTQwODctODNlNi01MDRkZmMzMjIxOWIiLCJpZCI6OTYyMCwic2NvcGVzIjpbImFzbCIsImFzciIsImdjIl0sImlhdCI6MTU2Mjg2NjI3M30.1FNiClUyk00YH_nWfSGpiQAjR5V2OvREDq1PJ5QMjWQ";
85628
85681
  var HARDCODED_NODES_PER_PAGE = 64;
@@ -85642,8 +85695,9 @@ var I3SConverter = class {
85642
85695
  this.sourceTileset = null;
85643
85696
  this.geoidHeightModel = null;
85644
85697
  this.Loader = Tiles3DLoader;
85698
+ this.workerSource = {};
85699
+ this.writeQueue = new WriteQueue();
85645
85700
  this.nodePages = new NodePages(writeFile3, HARDCODED_NODES_PER_PAGE);
85646
- this.fileMap = {};
85647
85701
  this.options = {};
85648
85702
  this.layers0Path = "";
85649
85703
  this.materialMap = new Map();
@@ -85681,12 +85735,15 @@ var I3SConverter = class {
85681
85735
  this.Loader = inputUrl.indexOf(CESIUM_DATASET_PREFIX) !== -1 ? CesiumIonLoader : Tiles3DLoader;
85682
85736
  this.generateTextures = Boolean(generateTextures);
85683
85737
  this.generateBoundingVolumes = Boolean(generateBoundingVolumes);
85738
+ this.writeQueue = new WriteQueue();
85739
+ this.writeQueue.startListening();
85684
85740
  console.log("Loading egm file...");
85685
85741
  this.geoidHeightModel = await load(egmFilePath, PGMLoader);
85686
85742
  console.log("Loading egm file completed!");
85687
85743
  if (slpk) {
85688
85744
  this.nodePages.useWriteFunction(writeFileForSlpk);
85689
85745
  }
85746
+ await this.loadWorkers();
85690
85747
  const preloadOptions = await this._fetchPreloadOptions();
85691
85748
  const tilesetOptions = { loadOptions: { basis: { format: "rgba32" } } };
85692
85749
  if (preloadOptions.headers) {
@@ -85697,6 +85754,8 @@ var I3SConverter = class {
85697
85754
  this.sourceTileset = new Tileset3D(sourceTilesetJson, tilesetOptions);
85698
85755
  await this._createAndSaveTileset(outputPath, tilesetName);
85699
85756
  await this._finishConversion({ slpk: Boolean(slpk), outputPath, tilesetName });
85757
+ const workerFarm = WorkerFarm.getWorkerFarm({});
85758
+ workerFarm.destroy();
85700
85759
  return sourceTilesetJson;
85701
85760
  }
85702
85761
  async _createAndSaveTileset(outputPath, tilesetName) {
@@ -85727,11 +85786,13 @@ var I3SConverter = class {
85727
85786
  await this._writeLayers0();
85728
85787
  createSceneServerPath(tilesetName, this.layers0, tilesetPath);
85729
85788
  await this._writeNodeIndexDocument(root0, "root", (0, import_path7.join)(this.layers0Path, "nodes", "root"));
85730
- await this.nodePages.save(this.layers0Path, this.fileMap, isCreateSlpk);
85789
+ await this.nodePages.save(this.layers0Path, this.writeQueue, isCreateSlpk);
85790
+ await this.writeQueue.finalize();
85731
85791
  await this._createSlpk(tilesetPath);
85732
85792
  }
85733
85793
  _formLayers0(tilesetName) {
85734
- const extent = convertCommonToI3SExtentCoordinate(this.sourceTileset);
85794
+ const fullExtent = convertBoundingVolumeToI3SFullExtent(this.sourceTileset?.boundingVolume || this.sourceTileset?.root?.boundingVolume);
85795
+ const extent = [fullExtent.xmin, fullExtent.ymin, fullExtent.xmax, fullExtent.ymax];
85735
85796
  const layers0data = {
85736
85797
  version: `{${v4().toUpperCase()}}`,
85737
85798
  id: 0,
@@ -85780,9 +85841,12 @@ var I3SConverter = class {
85780
85841
  const [child] = await this._createNode(root0, sourceRootTile, parentId, 0);
85781
85842
  const childPath = (0, import_path7.join)(this.layers0Path, "nodes", child.path);
85782
85843
  if (this.options.slpk) {
85783
- this.fileMap["nodes/1/3dNodeIndexDocument.json.gz"] = await writeFileForSlpk(childPath, JSON.stringify(child), "3dNodeIndexDocument.json");
85844
+ this.writeQueue.enqueue({
85845
+ archiveKey: "nodes/1/3dNodeIndexDocument.json.gz",
85846
+ writePromise: writeFileForSlpk(childPath, JSON.stringify(child), "3dNodeIndexDocument.json")
85847
+ });
85784
85848
  } else {
85785
- await writeFile3(childPath, JSON.stringify(child));
85849
+ this.writeQueue.enqueue({ writePromise: writeFile3(childPath, JSON.stringify(child)) });
85786
85850
  }
85787
85851
  } else {
85788
85852
  await this._addChildrenWithNeighborsAndWriteFile({
@@ -85796,16 +85860,24 @@ var I3SConverter = class {
85796
85860
  }
85797
85861
  async _writeLayers0() {
85798
85862
  if (this.options.slpk) {
85799
- this.fileMap["3dSceneLayer.json.gz"] = await writeFileForSlpk(this.layers0Path, JSON.stringify(this.layers0), "3dSceneLayer.json");
85863
+ this.writeQueue.enqueue({
85864
+ archiveKey: "3dSceneLayer.json.gz",
85865
+ writePromise: writeFileForSlpk(this.layers0Path, JSON.stringify(this.layers0), "3dSceneLayer.json")
85866
+ });
85800
85867
  } else {
85801
- await writeFile3(this.layers0Path, JSON.stringify(this.layers0));
85868
+ this.writeQueue.enqueue({
85869
+ writePromise: writeFile3(this.layers0Path, JSON.stringify(this.layers0))
85870
+ });
85802
85871
  }
85803
85872
  }
85804
85873
  async _writeNodeIndexDocument(root0, nodePath, rootPath) {
85805
85874
  if (this.options.slpk) {
85806
- this.fileMap[`nodes/${nodePath}/3dNodeIndexDocument.json.gz`] = await writeFileForSlpk(rootPath, JSON.stringify(root0), "3dNodeIndexDocument.json");
85875
+ this.writeQueue.enqueue({
85876
+ archiveKey: `nodes/${nodePath}/3dNodeIndexDocument.json.gz`,
85877
+ writePromise: writeFileForSlpk(rootPath, JSON.stringify(root0), "3dNodeIndexDocument.json")
85878
+ });
85807
85879
  } else {
85808
- await writeFile3(rootPath, JSON.stringify(root0));
85880
+ this.writeQueue.enqueue({ writePromise: writeFile3(rootPath, JSON.stringify(root0)) });
85809
85881
  }
85810
85882
  }
85811
85883
  async _createSlpk(tilesetPath) {
@@ -85945,7 +86017,7 @@ var I3SConverter = class {
85945
86017
  if (!this.isContentSupported(sourceTile)) {
85946
86018
  return null;
85947
86019
  }
85948
- const resourcesData = await convertB3dmToI3sGeometry(sourceTile.content, Number(this.nodePages.nodesCounter), this.featuresHashArray, this.layers0?.attributeStorageInfo, this.options.draco, this.generateBoundingVolumes, this.geoidHeightModel);
86020
+ const resourcesData = await convertB3dmToI3sGeometry(sourceTile.content, Number(this.nodePages.nodesCounter), this.featuresHashArray, this.layers0?.attributeStorageInfo, this.options.draco, this.generateBoundingVolumes, this.geoidHeightModel, this.workerSource);
85949
86021
  return resourcesData;
85950
86022
  }
85951
86023
  _createNodeInNodePages(maxScreenThresholdSQ, boundingVolumes, sourceTile, parentId, resources) {
@@ -86042,31 +86114,47 @@ var I3SConverter = class {
86042
86114
  async _writeGeometries(geometryBuffer, compressedGeometry, childPath, slpkChildPath) {
86043
86115
  if (this.options.slpk) {
86044
86116
  const slpkGeometryPath = (0, import_path7.join)(childPath, "geometries");
86045
- this.fileMap[`${slpkChildPath}/geometries/0.bin.gz`] = await writeFileForSlpk(slpkGeometryPath, geometryBuffer, "0.bin");
86117
+ this.writeQueue.enqueue({
86118
+ archiveKey: `${slpkChildPath}/geometries/0.bin.gz`,
86119
+ writePromise: writeFileForSlpk(slpkGeometryPath, geometryBuffer, "0.bin")
86120
+ });
86046
86121
  } else {
86047
86122
  const geometryPath = (0, import_path7.join)(childPath, "geometries/0/");
86048
- await writeFile3(geometryPath, geometryBuffer, "index.bin");
86123
+ this.writeQueue.enqueue({
86124
+ writePromise: writeFile3(geometryPath, geometryBuffer, "index.bin")
86125
+ });
86049
86126
  }
86050
86127
  if (this.options.draco) {
86051
86128
  if (this.options.slpk) {
86052
86129
  const slpkCompressedGeometryPath = (0, import_path7.join)(childPath, "geometries");
86053
- this.fileMap[`${slpkChildPath}/geometries/1.bin.gz`] = await writeFileForSlpk(slpkCompressedGeometryPath, compressedGeometry, "1.bin");
86130
+ this.writeQueue.enqueue({
86131
+ archiveKey: `${slpkChildPath}/geometries/1.bin.gz`,
86132
+ writePromise: writeFileForSlpk(slpkCompressedGeometryPath, compressedGeometry, "1.bin")
86133
+ });
86054
86134
  } else {
86055
86135
  const compressedGeometryPath = (0, import_path7.join)(childPath, "geometries/1/");
86056
- await writeFile3(compressedGeometryPath, compressedGeometry, "index.bin");
86136
+ this.writeQueue.enqueue({
86137
+ writePromise: writeFile3(compressedGeometryPath, compressedGeometry, "index.bin")
86138
+ });
86057
86139
  }
86058
86140
  }
86059
86141
  }
86060
86142
  async _writeShared(sharedResources, childPath, slpkChildPath, nodePath) {
86143
+ if (!sharedResources) {
86144
+ return;
86145
+ }
86061
86146
  sharedResources.nodePath = nodePath;
86062
86147
  const sharedData = (0, import_json_map_transform6.default)(sharedResources, SHARED_RESOURCES());
86063
86148
  const sharedDataStr = JSON.stringify(sharedData);
86064
86149
  if (this.options.slpk) {
86065
86150
  const slpkSharedPath = (0, import_path7.join)(childPath, "shared");
86066
- this.fileMap[`${slpkChildPath}/shared/sharedResource.json.gz`] = await writeFileForSlpk(slpkSharedPath, sharedDataStr, "sharedResource.json");
86151
+ this.writeQueue.enqueue({
86152
+ archiveKey: `${slpkChildPath}/shared/sharedResource.json.gz`,
86153
+ writePromise: writeFileForSlpk(slpkSharedPath, sharedDataStr, "sharedResource.json")
86154
+ });
86067
86155
  } else {
86068
86156
  const sharedPath = (0, import_path7.join)(childPath, "shared/");
86069
- await writeFile3(sharedPath, sharedDataStr);
86157
+ this.writeQueue.enqueue({ writePromise: writeFile3(sharedPath, sharedDataStr) });
86070
86158
  }
86071
86159
  }
86072
86160
  async _writeTexture(texture, childPath, slpkChildPath) {
@@ -86081,7 +86169,7 @@ var I3SConverter = class {
86081
86169
  await this.writeTextureFile(textureData, "0", format, childPath, slpkChildPath);
86082
86170
  if (this.generateTextures) {
86083
86171
  formats2.push({ name: "1", format: "ktx2" });
86084
- const ktx2TextureData = new Uint8Array(await encode(texture.image, KTX2BasisUniversalTextureWriter));
86172
+ const ktx2TextureData = new Uint8Array(await encode(texture.image, KTX2BasisWriter));
86085
86173
  await this.writeTextureFile(ktx2TextureData, "1", "ktx2", childPath, slpkChildPath);
86086
86174
  }
86087
86175
  break;
@@ -86105,23 +86193,33 @@ var I3SConverter = class {
86105
86193
  if (this.options.slpk) {
86106
86194
  const slpkTexturePath = (0, import_path7.join)(childPath, "textures");
86107
86195
  const compress = false;
86108
- this.fileMap[`${slpkChildPath}/textures/${name8}.${format}`] = await writeFileForSlpk(slpkTexturePath, textureData, `${name8}.${format}`, compress);
86196
+ this.writeQueue.enqueue({
86197
+ archiveKey: `${slpkChildPath}/textures/${name8}.${format}`,
86198
+ writePromise: writeFileForSlpk(slpkTexturePath, textureData, `${name8}.${format}`, compress)
86199
+ });
86109
86200
  } else {
86110
86201
  const texturePath = (0, import_path7.join)(childPath, `textures/${name8}/`);
86111
- await writeFile3(texturePath, textureData, `index.${format}`);
86202
+ this.writeQueue.enqueue({
86203
+ writePromise: writeFile3(texturePath, textureData, `index.${format}`)
86204
+ });
86112
86205
  }
86113
86206
  }
86114
- async _writeAttributes(attributes, childPath, slpkChildPath) {
86115
- if (attributes.length && this.layers0?.attributeStorageInfo?.length) {
86207
+ async _writeAttributes(attributes = [], childPath, slpkChildPath) {
86208
+ if (attributes?.length && this.layers0?.attributeStorageInfo?.length) {
86116
86209
  for (let index = 0; index < attributes.length; index++) {
86117
86210
  const folderName = this.layers0.attributeStorageInfo[index].key;
86118
86211
  const fileBuffer = new Uint8Array(attributes[index]);
86119
86212
  if (this.options.slpk) {
86120
86213
  const slpkAttributesPath = (0, import_path7.join)(childPath, "attributes", folderName);
86121
- this.fileMap[`${slpkChildPath}/attributes/${folderName}.bin.gz`] = await writeFileForSlpk(slpkAttributesPath, fileBuffer, "0.bin");
86214
+ this.writeQueue.enqueue({
86215
+ archiveKey: `${slpkChildPath}/attributes/${folderName}.bin.gz`,
86216
+ writePromise: writeFileForSlpk(slpkAttributesPath, fileBuffer, "0.bin")
86217
+ });
86122
86218
  } else {
86123
86219
  const attributesPath = (0, import_path7.join)(childPath, `attributes/${folderName}/0`);
86124
- await writeFile3(attributesPath, fileBuffer, "index.bin");
86220
+ this.writeQueue.enqueue({
86221
+ writePromise: writeFile3(attributesPath, fileBuffer, "index.bin")
86222
+ });
86125
86223
  }
86126
86224
  }
86127
86225
  }
@@ -86327,6 +86425,20 @@ var I3SConverter = class {
86327
86425
  isContentSupported(sourceRootTile) {
86328
86426
  return ["b3dm", "glTF"].includes(sourceRootTile?.content?.type);
86329
86427
  }
86428
+ async loadWorkers() {
86429
+ console.log(`Loading workers source...`);
86430
+ if (this.options.draco) {
86431
+ const url = getWorkerURL(DracoWriterWorker, { ...getGlobalLoaderOptions() });
86432
+ const sourceResponse2 = await fetchFile(url);
86433
+ const source2 = await sourceResponse2.text();
86434
+ this.workerSource.draco = source2;
86435
+ }
86436
+ const i3sAttributesWorkerUrl = getWorkerURL(I3SAttributesWorker, { ...getGlobalLoaderOptions() });
86437
+ const sourceResponse = await fetchFile(i3sAttributesWorkerUrl);
86438
+ const source = await sourceResponse.text();
86439
+ this.workerSource.I3SAttributes = source;
86440
+ console.log(`Loading workers source completed!`);
86441
+ }
86330
86442
  };
86331
86443
 
86332
86444
  // src/3d-tiles-converter/3d-tiles-converter.ts
@@ -86336,7 +86448,7 @@ var import_json_map_transform8 = __toModule(require_json_map_transform());
86336
86448
 
86337
86449
  // ../i3s/src/lib/parsers/parse-i3s-tile-content.ts
86338
86450
  var import_core26 = __toModule(require_es56());
86339
- var import_geospatial10 = __toModule(require_es57());
86451
+ var import_geospatial11 = __toModule(require_es57());
86340
86452
 
86341
86453
  // ../i3s/src/types.ts
86342
86454
  var DATA_TYPE;
@@ -86682,8 +86794,8 @@ function parsePositions2(attribute, tile) {
86682
86794
  const enuMatrix = new import_core26.Matrix4();
86683
86795
  const cartographicOrigin = new import_core26.Vector3(mbs[0], mbs[1], mbs[2]);
86684
86796
  const cartesianOrigin = new import_core26.Vector3();
86685
- import_geospatial10.Ellipsoid.WGS84.cartographicToCartesian(cartographicOrigin, cartesianOrigin);
86686
- import_geospatial10.Ellipsoid.WGS84.eastNorthUpToFixedFrame(cartesianOrigin, enuMatrix);
86797
+ import_geospatial11.Ellipsoid.WGS84.cartographicToCartesian(cartographicOrigin, cartesianOrigin);
86798
+ import_geospatial11.Ellipsoid.WGS84.eastNorthUpToFixedFrame(cartesianOrigin, enuMatrix);
86687
86799
  attribute.value = offsetsToCartesians(value, metadata, cartographicOrigin);
86688
86800
  return enuMatrix;
86689
86801
  }
@@ -86697,7 +86809,7 @@ function offsetsToCartesians(vertices, metadata = {}, cartographicOrigin) {
86697
86809
  positions[i + 2] = vertices[i + 2] + cartographicOrigin.z;
86698
86810
  }
86699
86811
  for (let i = 0; i < positions.length; i += 3) {
86700
- import_geospatial10.Ellipsoid.WGS84.cartographicToCartesian(positions.subarray(i, i + 3), scratchVector5);
86812
+ import_geospatial11.Ellipsoid.WGS84.cartographicToCartesian(positions.subarray(i, i + 3), scratchVector5);
86701
86813
  positions[i] = scratchVector5.x;
86702
86814
  positions[i + 1] = scratchVector5.y;
86703
86815
  positions[i + 2] = scratchVector5.z;
@@ -86808,13 +86920,13 @@ function getFeatureIdsFromFeatureIndexMetadata(featureIndex) {
86808
86920
  }
86809
86921
 
86810
86922
  // ../i3s/src/i3s-content-loader.ts
86811
- var VERSION10 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "beta";
86923
+ var VERSION12 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "beta";
86812
86924
  var I3SContentLoader = {
86813
86925
  name: "I3S Content (Indexed Scene Layers)",
86814
86926
  id: "i3s-content",
86815
86927
  module: "i3s",
86816
86928
  worker: true,
86817
- version: VERSION10,
86929
+ version: VERSION12,
86818
86930
  mimeTypes: ["application/octet-stream"],
86819
86931
  parse: parse6,
86820
86932
  extensions: ["bin"],
@@ -86830,10 +86942,10 @@ async function parse6(data, options, context) {
86830
86942
 
86831
86943
  // ../i3s/src/lib/parsers/parse-i3s.ts
86832
86944
  var import_culling7 = __toModule(require_es58());
86833
- var import_geospatial11 = __toModule(require_es57());
86945
+ var import_geospatial12 = __toModule(require_es57());
86834
86946
 
86835
86947
  // ../i3s/src/i3s-node-page-loader.ts
86836
- var VERSION11 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
86948
+ var VERSION13 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
86837
86949
  async function parseNodePage(data) {
86838
86950
  return JSON.parse(new TextDecoder().decode(data));
86839
86951
  }
@@ -86841,7 +86953,7 @@ var I3SNodePageLoader = {
86841
86953
  name: "I3S Node Page",
86842
86954
  id: "i3s-node-page",
86843
86955
  module: "i3s",
86844
- version: VERSION11,
86956
+ version: VERSION13,
86845
86957
  mimeTypes: ["application/json"],
86846
86958
  parse: parse7,
86847
86959
  extensions: ["json"],
@@ -86885,10 +86997,14 @@ var I3SNodePagesTiles = class {
86885
86997
  async formTileFromNodePages(id) {
86886
86998
  const node2 = await this.getNodeById(id);
86887
86999
  const children = [];
87000
+ const childNodesPromises = [];
86888
87001
  for (const child of node2.children || []) {
86889
- const childNode = await this.getNodeById(child);
87002
+ childNodesPromises.push(this.getNodeById(child));
87003
+ }
87004
+ const childNodes = await Promise.all(childNodesPromises);
87005
+ for (const childNode of childNodes) {
86890
87006
  children.push({
86891
- id: child.toString(),
87007
+ id: childNode.index.toString(),
86892
87008
  obb: childNode.obb
86893
87009
  });
86894
87010
  }
@@ -87046,12 +87162,12 @@ function normalizeTileNonUrlData(tile) {
87046
87162
  if (tile.mbs) {
87047
87163
  mbs = tile.mbs;
87048
87164
  boundingVolume.sphere = [
87049
- ...import_geospatial11.Ellipsoid.WGS84.cartographicToCartesian(tile.mbs.slice(0, 3)),
87165
+ ...import_geospatial12.Ellipsoid.WGS84.cartographicToCartesian(tile.mbs.slice(0, 3)),
87050
87166
  tile.mbs[3]
87051
87167
  ];
87052
87168
  } else if (tile.obb) {
87053
87169
  boundingVolume.box = [
87054
- ...import_geospatial11.Ellipsoid.WGS84.cartographicToCartesian(tile.obb.center),
87170
+ ...import_geospatial12.Ellipsoid.WGS84.cartographicToCartesian(tile.obb.center),
87055
87171
  ...tile.obb.halfSize,
87056
87172
  ...tile.obb.quaternion
87057
87173
  ];
@@ -87071,7 +87187,7 @@ async function normalizeTilesetData(tileset, options, context) {
87071
87187
  tileset.url = context.url;
87072
87188
  if (tileset.nodePages) {
87073
87189
  tileset.nodePagesTile = new I3SNodePagesTiles(tileset, options);
87074
- tileset.root = await tileset.nodePagesTile.formTileFromNodePages(0);
87190
+ tileset.root = tileset.nodePagesTile.formTileFromNodePages(0);
87075
87191
  } else {
87076
87192
  const rootNodeUrl = getUrlWithToken(`${tileset.url}/nodes/root`, options.i3s?.token);
87077
87193
  tileset.root = await load(rootNodeUrl, tileset.loader, {
@@ -87091,7 +87207,7 @@ async function normalizeTilesetData(tileset, options, context) {
87091
87207
  }
87092
87208
 
87093
87209
  // ../i3s/src/i3s-loader.ts
87094
- var VERSION12 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
87210
+ var VERSION14 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
87095
87211
  var TILESET_REGEX = /layers\/[0-9]+$/;
87096
87212
  var TILE_HEADER_REGEX = /nodes\/([0-9-]+|root)$/;
87097
87213
  var SLPK_HEX = "504b0304";
@@ -87099,7 +87215,7 @@ var I3SLoader = {
87099
87215
  name: "I3S (Indexed Scene Layers)",
87100
87216
  id: "i3s",
87101
87217
  module: "i3s",
87102
- version: VERSION12,
87218
+ version: VERSION14,
87103
87219
  mimeTypes: ["application/octet-stream"],
87104
87220
  parse: parseI3S,
87105
87221
  extensions: ["bin"],
@@ -87228,12 +87344,12 @@ function parseStringsAttribute(arrayBuffer) {
87228
87344
  }
87229
87345
 
87230
87346
  // ../i3s/src/i3s-attribute-loader.ts
87231
- var VERSION13 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
87347
+ var VERSION15 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
87232
87348
  var I3SAttributeLoader = {
87233
87349
  name: "I3S Attribute",
87234
87350
  id: "i3s-attribute",
87235
87351
  module: "i3s",
87236
- version: VERSION13,
87352
+ version: VERSION15,
87237
87353
  mimeTypes: ["application/binary"],
87238
87354
  parse: parse8,
87239
87355
  extensions: ["bin"],
@@ -87247,7 +87363,7 @@ async function parse8(data, options) {
87247
87363
 
87248
87364
  // src/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.ts
87249
87365
  var import_core30 = __toModule(require_es56());
87250
- var import_geospatial12 = __toModule(require_es57());
87366
+ var import_geospatial13 = __toModule(require_es57());
87251
87367
  var import_culling8 = __toModule(require_es58());
87252
87368
  function i3sObbTo3dTilesObb(i3SObb, geoidHeightModel) {
87253
87369
  const tiles3DCenter = [
@@ -87255,7 +87371,7 @@ function i3sObbTo3dTilesObb(i3SObb, geoidHeightModel) {
87255
87371
  i3SObb.center[1],
87256
87372
  i3SObb.center[2] + geoidHeightModel.getHeight(i3SObb.center[1], i3SObb.center[0])
87257
87373
  ];
87258
- const cartesianCenter = import_geospatial12.Ellipsoid.WGS84.cartographicToCartesian(tiles3DCenter, new import_core30.Vector3());
87374
+ const cartesianCenter = import_geospatial13.Ellipsoid.WGS84.cartographicToCartesian(tiles3DCenter, new import_core30.Vector3());
87259
87375
  const tiles3DObb = new import_culling8.OrientedBoundingBox().fromCenterHalfSizeQuaternion(cartesianCenter, i3SObb.halfSize, i3SObb.quaternion);
87260
87376
  return [...tiles3DObb.center, ...tiles3DObb.halfAxes.toArray()];
87261
87377
  }
@@ -87300,7 +87416,7 @@ var TILESET = () => ({
87300
87416
 
87301
87417
  // src/3d-tiles-converter/helpers/b3dm-converter.ts
87302
87418
  var import_core32 = __toModule(require_es56());
87303
- var import_geospatial13 = __toModule(require_es57());
87419
+ var import_geospatial14 = __toModule(require_es57());
87304
87420
 
87305
87421
  // src/3d-tiles-converter/helpers/texture-atlas.ts
87306
87422
  function convertTextureAtlas(texCoords, uvRegions) {
@@ -87337,18 +87453,18 @@ function normalizeRegions(regions) {
87337
87453
  var Z_UP_TO_Y_UP_MATRIX = new import_core32.Matrix4([1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1]);
87338
87454
  var scratchVector6 = new import_core32.Vector3();
87339
87455
  var B3dmConverter = class {
87340
- async convert(i3sTile, attributes = null) {
87341
- this.i3sTile = i3sTile;
87342
- const gltf = await this.buildGltf(i3sTile);
87456
+ async convert(i3sAttributesData, featureAttributes = null) {
87457
+ const gltf = await this.buildGltf(i3sAttributesData);
87343
87458
  const b3dm = encodeSync({
87344
87459
  gltfEncoded: new Uint8Array(gltf),
87345
87460
  type: "b3dm",
87346
- featuresLength: this._getFeaturesLength(attributes),
87347
- batchTable: attributes
87461
+ featuresLength: this._getFeaturesLength(featureAttributes),
87462
+ batchTable: featureAttributes
87348
87463
  }, Tile3DWriter);
87349
87464
  return b3dm;
87350
87465
  }
87351
- async buildGltf(i3sTile) {
87466
+ async buildGltf(i3sAttributesData) {
87467
+ const { tileContent, textureFormat } = i3sAttributesData;
87352
87468
  const {
87353
87469
  material,
87354
87470
  attributes,
@@ -87356,9 +87472,9 @@ var B3dmConverter = class {
87356
87472
  cartesianOrigin,
87357
87473
  cartographicOrigin,
87358
87474
  modelMatrix
87359
- } = i3sTile.content;
87475
+ } = tileContent;
87360
87476
  const gltfBuilder = new GLTFScenegraph();
87361
- const textureIndex = await this._addI3sTextureToGltf(i3sTile, gltfBuilder);
87477
+ const textureIndex = await this._addI3sTextureToGltf(tileContent, textureFormat, gltfBuilder);
87362
87478
  const pbrMaterialInfo = this._convertI3sMaterialToGltfMaterial(material, textureIndex);
87363
87479
  const materialIndex = gltfBuilder.addMaterial(pbrMaterialInfo);
87364
87480
  const positions = attributes.positions;
@@ -87385,11 +87501,8 @@ var B3dmConverter = class {
87385
87501
  const gltfBuffer = encodeSync(gltfBuilder.gltf, GLTFWriter);
87386
87502
  return gltfBuffer;
87387
87503
  }
87388
- async _addI3sTextureToGltf(i3sTile, gltfBuilder) {
87389
- const {
87390
- content: { texture, material, attributes },
87391
- header: { textureFormat }
87392
- } = i3sTile;
87504
+ async _addI3sTextureToGltf(tileContent, textureFormat, gltfBuilder) {
87505
+ const { texture, material, attributes } = tileContent;
87393
87506
  let textureIndex = null;
87394
87507
  let selectedTexture = texture;
87395
87508
  if (!texture && material) {
@@ -87409,7 +87522,7 @@ var B3dmConverter = class {
87409
87522
  const vertex = positionsValue.subarray(index, index + 3);
87410
87523
  const cartesianOriginVector = new import_core32.Vector3(cartesianOrigin);
87411
87524
  let vertexVector = new import_core32.Vector3(Array.from(vertex)).transform(modelMatrix).add(cartographicOrigin);
87412
- import_geospatial13.Ellipsoid.WGS84.cartographicToCartesian(vertexVector, scratchVector6);
87525
+ import_geospatial14.Ellipsoid.WGS84.cartographicToCartesian(vertexVector, scratchVector6);
87413
87526
  vertexVector = scratchVector6.subtract(cartesianOriginVector);
87414
87527
  newPositionsValue.set(vertexVector, index);
87415
87528
  }
@@ -87525,10 +87638,23 @@ var B3dmConverter = class {
87525
87638
  }
87526
87639
  };
87527
87640
 
87641
+ // src/3d-tiles-attributes-worker.ts
87642
+ var VERSION16 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
87643
+ var Tile3dAttributesWorker = {
87644
+ id: "3d-tiles-attributes",
87645
+ name: "3DTiles Attributes Worker",
87646
+ module: "tile-converter",
87647
+ version: VERSION16,
87648
+ options: {
87649
+ attributes: null
87650
+ }
87651
+ };
87652
+
87528
87653
  // src/3d-tiles-converter/3d-tiles-converter.ts
87529
87654
  var I3S = "I3S";
87530
87655
  var Tiles3DConverter = class {
87531
87656
  constructor() {
87657
+ this.workerSource = {};
87532
87658
  this.options = {};
87533
87659
  this.tilesetPath = "";
87534
87660
  this.vertexCounter = 0;
@@ -87536,6 +87662,7 @@ var Tiles3DConverter = class {
87536
87662
  this.geoidHeightModel = null;
87537
87663
  this.sourceTileset = null;
87538
87664
  this.attributeStorageInfo = null;
87665
+ this.workerSource = {};
87539
87666
  }
87540
87667
  async convert(options) {
87541
87668
  const { inputUrl, outputPath, tilesetName, maxDepth, egmFilePath } = options;
@@ -87544,12 +87671,14 @@ var Tiles3DConverter = class {
87544
87671
  console.log("Loading egm file...");
87545
87672
  this.geoidHeightModel = await load(egmFilePath, PGMLoader);
87546
87673
  console.log("Loading egm file completed!");
87674
+ await this.loadWorkers();
87547
87675
  const sourceTilesetJson = await load(inputUrl, I3SLoader, {});
87548
87676
  this.sourceTileset = new Tileset3D(sourceTilesetJson, {
87549
87677
  loadOptions: {
87550
87678
  i3s: { coordinateSystem: COORDINATE_SYSTEM.LNGLAT_OFFSETS, decodeTextures: false }
87551
87679
  }
87552
87680
  });
87681
+ await this.sourceTileset.tilesetInitializationPromise;
87553
87682
  const rootNode = this.sourceTileset.root;
87554
87683
  if (!rootNode.header.obb) {
87555
87684
  rootNode.header.obb = createObbFromMbs(rootNode.header.mbs);
@@ -87571,6 +87700,8 @@ var Tiles3DConverter = class {
87571
87700
  const tileset = (0, import_json_map_transform8.default)({ root: rootTile }, TILESET());
87572
87701
  await writeFile3(this.tilesetPath, JSON.stringify(tileset), "tileset.json");
87573
87702
  this._finishConversion({ slpk: false, outputPath, tilesetName });
87703
+ const workerFarm = WorkerFarm.getWorkerFarm({});
87704
+ workerFarm.destroy();
87574
87705
  }
87575
87706
  async _addChildren(parentSourceNode, parentNode, level) {
87576
87707
  if (this.options.maxDepth && level > this.options.maxDepth) {
@@ -87582,9 +87713,9 @@ var Tiles3DConverter = class {
87582
87713
  if (sourceChild.contentUrl) {
87583
87714
  await this.sourceTileset._loadTile(sourceChild);
87584
87715
  this.vertexCounter += sourceChild.content.vertexCount;
87585
- let attributes = null;
87716
+ let featureAttributes = null;
87586
87717
  if (this.attributeStorageInfo) {
87587
- attributes = await this._loadChildAttributes(sourceChild, this.attributeStorageInfo);
87718
+ featureAttributes = await this._loadChildAttributes(sourceChild, this.attributeStorageInfo);
87588
87719
  }
87589
87720
  if (!sourceChild.header.obb) {
87590
87721
  sourceChild.header.obb = createObbFromMbs(sourceChild.header.mbs);
@@ -87597,7 +87728,11 @@ var Tiles3DConverter = class {
87597
87728
  geometricError: convertScreenThresholdToGeometricError(sourceChild),
87598
87729
  children: []
87599
87730
  };
87600
- const b3dm = await new B3dmConverter().convert(sourceChild, attributes);
87731
+ const i3sAttributesData = {
87732
+ tileContent: sourceChild.content,
87733
+ textureFormat: sourceChild?.header?.textureFormat
87734
+ };
87735
+ const b3dm = await new B3dmConverter().convert(i3sAttributesData, featureAttributes);
87601
87736
  child.content = {
87602
87737
  uri: `${sourceChild.id}.b3dm`,
87603
87738
  boundingVolume
@@ -87690,16 +87825,24 @@ var Tiles3DConverter = class {
87690
87825
  console.log(`File(s) size: `, filesSize, " bytes");
87691
87826
  console.log(`------------------------------------------------`);
87692
87827
  }
87828
+ async loadWorkers() {
87829
+ console.log(`Loading workers source...`);
87830
+ const tile3dAttributesWorkerUrl = getWorkerURL(Tile3dAttributesWorker, { ...getGlobalLoaderOptions() });
87831
+ const sourceResponse = await fetchFile(tile3dAttributesWorkerUrl);
87832
+ const source = await sourceResponse.text();
87833
+ this.workerSource.tile3dWorkerSource = source;
87834
+ console.log(`Loading workers source completed!`);
87835
+ }
87693
87836
  };
87694
87837
 
87695
87838
  // ../zip/src/zip-loader.ts
87696
87839
  var import_jszip2 = __toModule(require_lib4());
87697
- var VERSION14 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
87840
+ var VERSION17 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
87698
87841
  var ZipLoader = {
87699
87842
  id: "zip",
87700
87843
  module: "zip",
87701
87844
  name: "Zip Archive",
87702
- version: VERSION14,
87845
+ version: VERSION17,
87703
87846
  extensions: ["zip"],
87704
87847
  mimeTypes: ["application/zip"],
87705
87848
  category: "archive",
@@ -87757,7 +87900,8 @@ var DepsInstaller = class {
87757
87900
  DepsInstaller,
87758
87901
  I3SConverter,
87759
87902
  NodePages,
87760
- Tiles3DConverter
87903
+ Tiles3DConverter,
87904
+ prepareDataForAttributesConversion
87761
87905
  });
87762
87906
  /*!
87763
87907
  * Determine if an object is a Buffer