@loaders.gl/tiles 3.1.0-alpha.1 → 3.1.0-alpha.5

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 (131) hide show
  1. package/dist/bundle.d.ts +1 -0
  2. package/dist/constants.d.ts +31 -0
  3. package/dist/dist.min.js +1 -1
  4. package/dist/dist.min.js.map +1 -1
  5. package/dist/es5/bundle.js +7 -0
  6. package/dist/es5/bundle.js.map +1 -0
  7. package/dist/es5/constants.js +44 -0
  8. package/dist/es5/constants.js.map +1 -0
  9. package/dist/es5/index.js +104 -0
  10. package/dist/es5/index.js.map +1 -0
  11. package/dist/es5/tileset/helpers/3d-tiles-options.js +13 -0
  12. package/dist/es5/tileset/helpers/3d-tiles-options.js.map +1 -0
  13. package/dist/es5/tileset/helpers/bounding-volume.js +102 -0
  14. package/dist/es5/tileset/helpers/bounding-volume.js.map +1 -0
  15. package/dist/es5/tileset/helpers/frame-state.js +69 -0
  16. package/dist/es5/tileset/helpers/frame-state.js.map +1 -0
  17. package/dist/es5/tileset/helpers/i3s-lod.js +84 -0
  18. package/dist/es5/tileset/helpers/i3s-lod.js.map +1 -0
  19. package/dist/es5/tileset/helpers/tiles-3d-lod.js +123 -0
  20. package/dist/es5/tileset/helpers/tiles-3d-lod.js.map +1 -0
  21. package/dist/es5/tileset/helpers/transform-utils.js +71 -0
  22. package/dist/es5/tileset/helpers/transform-utils.js.map +1 -0
  23. package/dist/es5/tileset/helpers/zoom.js +45 -0
  24. package/dist/es5/tileset/helpers/zoom.js.map +1 -0
  25. package/dist/es5/tileset/tile-3d.js +510 -0
  26. package/dist/es5/tileset/tile-3d.js.map +1 -0
  27. package/dist/es5/tileset/tileset-3d.js +656 -0
  28. package/dist/es5/tileset/tileset-3d.js.map +1 -0
  29. package/dist/es5/tileset/tileset-cache.js +88 -0
  30. package/dist/es5/tileset/tileset-cache.js.map +1 -0
  31. package/dist/es5/tileset/traversers/i3s-tile-manager.js +57 -0
  32. package/dist/es5/tileset/traversers/i3s-tile-manager.js.map +1 -0
  33. package/dist/es5/tileset/traversers/i3s-tileset-traverser.js +95 -0
  34. package/dist/es5/tileset/traversers/i3s-tileset-traverser.js.map +1 -0
  35. package/dist/es5/tileset/traversers/tileset-3d-traverser.js +66 -0
  36. package/dist/es5/tileset/traversers/tileset-3d-traverser.js.map +1 -0
  37. package/dist/es5/tileset/traversers/tileset-traverser.js +304 -0
  38. package/dist/es5/tileset/traversers/tileset-traverser.js.map +1 -0
  39. package/dist/es5/utils/doubly-linked-list-node.js +18 -0
  40. package/dist/es5/utils/doubly-linked-list-node.js.map +1 -0
  41. package/dist/es5/utils/doubly-linked-list.js +90 -0
  42. package/dist/es5/utils/doubly-linked-list.js.map +1 -0
  43. package/dist/es5/utils/managed-array.js +121 -0
  44. package/dist/es5/utils/managed-array.js.map +1 -0
  45. package/dist/esm/bundle.js +5 -0
  46. package/dist/esm/bundle.js.map +1 -0
  47. package/dist/{constants.js → esm/constants.js} +0 -0
  48. package/dist/esm/constants.js.map +1 -0
  49. package/dist/{index.js → esm/index.js} +1 -0
  50. package/dist/esm/index.js.map +1 -0
  51. package/dist/{tileset → esm/tileset}/helpers/3d-tiles-options.js +0 -0
  52. package/dist/esm/tileset/helpers/3d-tiles-options.js.map +1 -0
  53. package/dist/{tileset → esm/tileset}/helpers/bounding-volume.js +0 -0
  54. package/dist/esm/tileset/helpers/bounding-volume.js.map +1 -0
  55. package/dist/{tileset → esm/tileset}/helpers/frame-state.js +0 -0
  56. package/dist/esm/tileset/helpers/frame-state.js.map +1 -0
  57. package/dist/esm/tileset/helpers/i3s-lod.js +67 -0
  58. package/dist/esm/tileset/helpers/i3s-lod.js.map +1 -0
  59. package/dist/{tileset → esm/tileset}/helpers/tiles-3d-lod.js +0 -0
  60. package/dist/esm/tileset/helpers/tiles-3d-lod.js.map +1 -0
  61. package/dist/{tileset → esm/tileset}/helpers/transform-utils.js +4 -1
  62. package/dist/esm/tileset/helpers/transform-utils.js.map +1 -0
  63. package/dist/{tileset → esm/tileset}/helpers/zoom.js +0 -0
  64. package/dist/esm/tileset/helpers/zoom.js.map +1 -0
  65. package/dist/{tileset → esm/tileset}/tile-3d.js +3 -3
  66. package/dist/esm/tileset/tile-3d.js.map +1 -0
  67. package/dist/{tileset → esm/tileset}/tileset-3d.js +5 -5
  68. package/dist/esm/tileset/tileset-3d.js.map +1 -0
  69. package/dist/{tileset → esm/tileset}/tileset-cache.js +0 -0
  70. package/dist/esm/tileset/tileset-cache.js.map +1 -0
  71. package/dist/{tileset → esm/tileset}/traversers/i3s-tile-manager.js +0 -0
  72. package/dist/esm/tileset/traversers/i3s-tile-manager.js.map +1 -0
  73. package/dist/{tileset → esm/tileset}/traversers/i3s-tileset-traverser.js +4 -4
  74. package/dist/esm/tileset/traversers/i3s-tileset-traverser.js.map +1 -0
  75. package/dist/{tileset → esm/tileset}/traversers/tileset-3d-traverser.js +0 -0
  76. package/dist/esm/tileset/traversers/tileset-3d-traverser.js.map +1 -0
  77. package/dist/{tileset → esm/tileset}/traversers/tileset-traverser.js +0 -0
  78. package/dist/esm/tileset/traversers/tileset-traverser.js.map +1 -0
  79. package/dist/{utils → esm/utils}/doubly-linked-list-node.js +0 -0
  80. package/dist/esm/utils/doubly-linked-list-node.js.map +1 -0
  81. package/dist/{utils → esm/utils}/doubly-linked-list.js +0 -0
  82. package/dist/esm/utils/doubly-linked-list.js.map +1 -0
  83. package/dist/{utils → esm/utils}/managed-array.js +0 -0
  84. package/dist/esm/utils/managed-array.js.map +1 -0
  85. package/dist/index.d.ts +10 -0
  86. package/dist/tileset/helpers/3d-tiles-options.d.ts +3 -0
  87. package/dist/tileset/helpers/bounding-volume.d.ts +8 -0
  88. package/dist/tileset/helpers/frame-state.d.ts +16 -0
  89. package/dist/tileset/helpers/i3s-lod.d.ts +19 -0
  90. package/dist/tileset/helpers/tiles-3d-lod.d.ts +7 -0
  91. package/dist/tileset/helpers/transform-utils.d.ts +1 -0
  92. package/dist/tileset/helpers/zoom.d.ts +6 -0
  93. package/dist/tileset/tile-3d.d.ts +173 -0
  94. package/dist/tileset/tileset-3d.d.ts +171 -0
  95. package/dist/tileset/tileset-cache.d.ts +17 -0
  96. package/dist/tileset/traversers/i3s-tile-manager.d.ts +7 -0
  97. package/dist/tileset/traversers/i3s-tileset-traverser.d.ts +17 -0
  98. package/dist/tileset/traversers/tileset-3d-traverser.d.ts +6 -0
  99. package/dist/tileset/traversers/tileset-traverser.d.ts +51 -0
  100. package/dist/utils/doubly-linked-list-node.d.ts +11 -0
  101. package/dist/utils/doubly-linked-list.d.ts +30 -0
  102. package/dist/utils/managed-array.d.ts +84 -0
  103. package/package.json +11 -8
  104. package/src/bundle.ts +2 -3
  105. package/src/index.ts +1 -0
  106. package/src/tileset/helpers/i3s-lod.ts +72 -96
  107. package/src/tileset/helpers/transform-utils.ts +3 -1
  108. package/src/tileset/tile-3d.ts +2 -2
  109. package/src/tileset/traversers/i3s-tileset-traverser.ts +2 -3
  110. package/dist/bundle.js +0 -7
  111. package/dist/bundle.js.map +0 -1
  112. package/dist/constants.js.map +0 -1
  113. package/dist/index.js.map +0 -1
  114. package/dist/tileset/helpers/3d-tiles-options.js.map +0 -1
  115. package/dist/tileset/helpers/bounding-volume.js.map +0 -1
  116. package/dist/tileset/helpers/frame-state.js.map +0 -1
  117. package/dist/tileset/helpers/i3s-lod.js +0 -108
  118. package/dist/tileset/helpers/i3s-lod.js.map +0 -1
  119. package/dist/tileset/helpers/tiles-3d-lod.js.map +0 -1
  120. package/dist/tileset/helpers/transform-utils.js.map +0 -1
  121. package/dist/tileset/helpers/zoom.js.map +0 -1
  122. package/dist/tileset/tile-3d.js.map +0 -1
  123. package/dist/tileset/tileset-3d.js.map +0 -1
  124. package/dist/tileset/tileset-cache.js.map +0 -1
  125. package/dist/tileset/traversers/i3s-tile-manager.js.map +0 -1
  126. package/dist/tileset/traversers/i3s-tileset-traverser.js.map +0 -1
  127. package/dist/tileset/traversers/tileset-3d-traverser.js.map +0 -1
  128. package/dist/tileset/traversers/tileset-traverser.js.map +0 -1
  129. package/dist/utils/doubly-linked-list-node.js.map +0 -1
  130. package/dist/utils/doubly-linked-list.js.map +0 -1
  131. package/dist/utils/managed-array.js.map +0 -1
@@ -0,0 +1,656 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var _core = require("@math.gl/core");
13
+
14
+ var _geospatial = require("@math.gl/geospatial");
15
+
16
+ var _stats = require("@probe.gl/stats");
17
+
18
+ var _loaderUtils = require("@loaders.gl/loader-utils");
19
+
20
+ var _tilesetCache = _interopRequireDefault(require("./tileset-cache"));
21
+
22
+ var _transformUtils = require("./helpers/transform-utils");
23
+
24
+ var _frameState = require("./helpers/frame-state");
25
+
26
+ var _zoom = require("./helpers/zoom");
27
+
28
+ var _tile3d = _interopRequireDefault(require("./tile-3d"));
29
+
30
+ var _tileset3dTraverser = _interopRequireDefault(require("./traversers/tileset-3d-traverser"));
31
+
32
+ var _tilesetTraverser = _interopRequireDefault(require("./traversers/tileset-traverser"));
33
+
34
+ var _i3sTilesetTraverser = _interopRequireDefault(require("./traversers/i3s-tileset-traverser"));
35
+
36
+ var _constants = require("../constants");
37
+
38
+ const DEFAULT_PROPS = {
39
+ description: '',
40
+ ellipsoid: _geospatial.Ellipsoid.WGS84,
41
+ modelMatrix: new _core.Matrix4(),
42
+ throttleRequests: true,
43
+ maxRequests: 64,
44
+ maximumMemoryUsage: 32,
45
+ onTileLoad: () => {},
46
+ onTileUnload: () => {},
47
+ onTileError: () => {},
48
+ onTraversalComplete: selectedTiles => selectedTiles,
49
+ contentLoader: undefined,
50
+ viewDistanceScale: 1.0,
51
+ maximumScreenSpaceError: 8,
52
+ loadTiles: true,
53
+ updateTransforms: true,
54
+ viewportTraversersMap: null,
55
+ loadOptions: {
56
+ fetch: {}
57
+ },
58
+ attributions: [],
59
+ basePath: '',
60
+ i3s: {}
61
+ };
62
+ const TILES_TOTAL = 'Tiles In Tileset(s)';
63
+ const TILES_IN_MEMORY = 'Tiles In Memory';
64
+ const TILES_IN_VIEW = 'Tiles In View';
65
+ const TILES_RENDERABLE = 'Tiles To Render';
66
+ const TILES_LOADED = 'Tiles Loaded';
67
+ const TILES_LOADING = 'Tiles Loading';
68
+ const TILES_UNLOADED = 'Tiles Unloaded';
69
+ const TILES_LOAD_FAILED = 'Failed Tile Loads';
70
+ const POINTS_COUNT = 'Points';
71
+ const TILES_GPU_MEMORY = 'Tile Memory Use';
72
+
73
+ class Tileset3D {
74
+ constructor(json, options) {
75
+ (0, _defineProperty2.default)(this, "options", void 0);
76
+ (0, _defineProperty2.default)(this, "loadOptions", void 0);
77
+ (0, _defineProperty2.default)(this, "type", void 0);
78
+ (0, _defineProperty2.default)(this, "tileset", void 0);
79
+ (0, _defineProperty2.default)(this, "loader", void 0);
80
+ (0, _defineProperty2.default)(this, "url", void 0);
81
+ (0, _defineProperty2.default)(this, "basePath", void 0);
82
+ (0, _defineProperty2.default)(this, "modelMatrix", void 0);
83
+ (0, _defineProperty2.default)(this, "ellipsoid", void 0);
84
+ (0, _defineProperty2.default)(this, "lodMetricType", void 0);
85
+ (0, _defineProperty2.default)(this, "lodMetricValue", void 0);
86
+ (0, _defineProperty2.default)(this, "refine", void 0);
87
+ (0, _defineProperty2.default)(this, "root", void 0);
88
+ (0, _defineProperty2.default)(this, "roots", void 0);
89
+ (0, _defineProperty2.default)(this, "asset", void 0);
90
+ (0, _defineProperty2.default)(this, "description", void 0);
91
+ (0, _defineProperty2.default)(this, "properties", void 0);
92
+ (0, _defineProperty2.default)(this, "extras", void 0);
93
+ (0, _defineProperty2.default)(this, "attributions", void 0);
94
+ (0, _defineProperty2.default)(this, "credits", void 0);
95
+ (0, _defineProperty2.default)(this, "stats", void 0);
96
+ (0, _defineProperty2.default)(this, "traverseCounter", void 0);
97
+ (0, _defineProperty2.default)(this, "geometricError", void 0);
98
+ (0, _defineProperty2.default)(this, "selectedTiles", void 0);
99
+ (0, _defineProperty2.default)(this, "cartographicCenter", void 0);
100
+ (0, _defineProperty2.default)(this, "cartesianCenter", void 0);
101
+ (0, _defineProperty2.default)(this, "zoom", void 0);
102
+ (0, _defineProperty2.default)(this, "boundingVolume", void 0);
103
+ (0, _defineProperty2.default)(this, "gpuMemoryUsageInBytes", void 0);
104
+ (0, _defineProperty2.default)(this, "dynamicScreenSpaceErrorComputedDensity", void 0);
105
+ (0, _defineProperty2.default)(this, "_traverser", void 0);
106
+ (0, _defineProperty2.default)(this, "_cache", void 0);
107
+ (0, _defineProperty2.default)(this, "_requestScheduler", void 0);
108
+ (0, _defineProperty2.default)(this, "_frameNumber", void 0);
109
+ (0, _defineProperty2.default)(this, "_queryParamsString", void 0);
110
+ (0, _defineProperty2.default)(this, "_queryParams", void 0);
111
+ (0, _defineProperty2.default)(this, "_extensionsUsed", void 0);
112
+ (0, _defineProperty2.default)(this, "_tiles", void 0);
113
+ (0, _defineProperty2.default)(this, "_pendingCount", void 0);
114
+ (0, _defineProperty2.default)(this, "lastUpdatedVieports", void 0);
115
+ (0, _defineProperty2.default)(this, "_requestedTiles", void 0);
116
+ (0, _defineProperty2.default)(this, "_emptyTiles", void 0);
117
+ (0, _defineProperty2.default)(this, "frameStateData", void 0);
118
+ (0, _defineProperty2.default)(this, "maximumMemoryUsage", void 0);
119
+ (0, _loaderUtils.assert)(json);
120
+ this.options = { ...DEFAULT_PROPS,
121
+ ...options
122
+ };
123
+ this.tileset = json;
124
+ this.loader = json.loader;
125
+ this.type = json.type;
126
+ this.url = json.url;
127
+ this.basePath = json.basePath || _loaderUtils.path.dirname(this.url);
128
+ this.modelMatrix = this.options.modelMatrix;
129
+ this.ellipsoid = this.options.ellipsoid;
130
+ this.lodMetricType = json.lodMetricType;
131
+ this.lodMetricValue = json.lodMetricValue;
132
+ this.refine = json.root.refine;
133
+ this.loadOptions = this.options.loadOptions || {};
134
+ this.root = null;
135
+ this.roots = {};
136
+ this.cartographicCenter = null;
137
+ this.cartesianCenter = null;
138
+ this.zoom = 1;
139
+ this.boundingVolume = null;
140
+ this.traverseCounter = 0;
141
+ this.geometricError = 0;
142
+ this._traverser = this._initializeTraverser();
143
+ this._cache = new _tilesetCache.default();
144
+ this._requestScheduler = new _loaderUtils.RequestScheduler({
145
+ throttleRequests: this.options.throttleRequests,
146
+ maxRequests: this.options.maxRequests
147
+ });
148
+ this._frameNumber = 0;
149
+ this._pendingCount = 0;
150
+ this._tiles = {};
151
+ this.selectedTiles = [];
152
+ this._emptyTiles = [];
153
+ this._requestedTiles = [];
154
+ this.frameStateData = {};
155
+ this.lastUpdatedVieports = null;
156
+ this._queryParams = {};
157
+ this._queryParamsString = '';
158
+ this.maximumMemoryUsage = this.options.maximumMemoryUsage || 32;
159
+ this.gpuMemoryUsageInBytes = 0;
160
+ this.stats = new _stats.Stats({
161
+ id: this.url
162
+ });
163
+
164
+ this._initializeStats();
165
+
166
+ this._extensionsUsed = undefined;
167
+ this.dynamicScreenSpaceErrorComputedDensity = 0.0;
168
+ this.extras = null;
169
+ this.asset = {};
170
+ this.credits = {};
171
+ this.description = this.options.description || '';
172
+
173
+ this._initializeTileSet(json);
174
+ }
175
+
176
+ destroy() {
177
+ this._destroy();
178
+ }
179
+
180
+ isLoaded() {
181
+ return this._pendingCount === 0 && this._frameNumber !== 0;
182
+ }
183
+
184
+ get tiles() {
185
+ return Object.values(this._tiles);
186
+ }
187
+
188
+ get frameNumber() {
189
+ return this._frameNumber;
190
+ }
191
+
192
+ get queryParams() {
193
+ if (!this._queryParamsString) {
194
+ this._queryParamsString = getQueryParamString(this._queryParams);
195
+ }
196
+
197
+ return this._queryParamsString;
198
+ }
199
+
200
+ setProps(props) {
201
+ this.options = { ...this.options,
202
+ ...props
203
+ };
204
+ }
205
+
206
+ setOptions(options) {
207
+ this.options = { ...this.options,
208
+ ...options
209
+ };
210
+ }
211
+
212
+ getTileUrl(tilePath) {
213
+ const isDataUrl = tilePath.startsWith('data:');
214
+
215
+ if (isDataUrl) {
216
+ return tilePath;
217
+ }
218
+
219
+ return "".concat(tilePath).concat(this.queryParams);
220
+ }
221
+
222
+ hasExtension(extensionName) {
223
+ return Boolean(this._extensionsUsed && this._extensionsUsed.indexOf(extensionName) > -1);
224
+ }
225
+
226
+ update(viewports) {
227
+ if ('loadTiles' in this.options && !this.options.loadTiles) {
228
+ return;
229
+ }
230
+
231
+ if (this.traverseCounter > 0) {
232
+ return;
233
+ }
234
+
235
+ if (!viewports && this.lastUpdatedVieports) {
236
+ viewports = this.lastUpdatedVieports;
237
+ } else {
238
+ this.lastUpdatedVieports = viewports;
239
+ }
240
+
241
+ if (!(viewports instanceof Array)) {
242
+ viewports = [viewports];
243
+ }
244
+
245
+ this._cache.reset();
246
+
247
+ this._frameNumber++;
248
+ this.traverseCounter = viewports.length;
249
+ const viewportsToTraverse = [];
250
+
251
+ for (const viewport of viewports) {
252
+ const id = viewport.id;
253
+
254
+ if (this._needTraverse(id)) {
255
+ viewportsToTraverse.push(id);
256
+ } else {
257
+ this.traverseCounter--;
258
+ }
259
+ }
260
+
261
+ for (const viewport of viewports) {
262
+ const id = viewport.id;
263
+
264
+ if (!this.roots[id]) {
265
+ this.roots[id] = this._initializeTileHeaders(this.tileset, null);
266
+ }
267
+
268
+ if (!viewportsToTraverse.includes(id)) {
269
+ continue;
270
+ }
271
+
272
+ const frameState = (0, _frameState.getFrameState)(viewport, this._frameNumber);
273
+
274
+ this._traverser.traverse(this.roots[id], frameState, this.options);
275
+ }
276
+ }
277
+
278
+ _needTraverse(viewportId) {
279
+ let traverserId = viewportId;
280
+
281
+ if (this.options.viewportTraversersMap) {
282
+ traverserId = this.options.viewportTraversersMap[viewportId];
283
+ }
284
+
285
+ if (traverserId !== viewportId) {
286
+ return false;
287
+ }
288
+
289
+ return true;
290
+ }
291
+
292
+ _onTraversalEnd(frameState) {
293
+ const id = frameState.viewport.id;
294
+
295
+ if (!this.frameStateData[id]) {
296
+ this.frameStateData[id] = {
297
+ selectedTiles: [],
298
+ _requestedTiles: [],
299
+ _emptyTiles: []
300
+ };
301
+ }
302
+
303
+ const currentFrameStateData = this.frameStateData[id];
304
+ const selectedTiles = Object.values(this._traverser.selectedTiles);
305
+ currentFrameStateData.selectedTiles = selectedTiles;
306
+ currentFrameStateData._requestedTiles = Object.values(this._traverser.requestedTiles);
307
+ currentFrameStateData._emptyTiles = Object.values(this._traverser.emptyTiles);
308
+ this.traverseCounter--;
309
+
310
+ if (this.traverseCounter > 0) {
311
+ return;
312
+ }
313
+
314
+ this._updateTiles();
315
+ }
316
+
317
+ _updateTiles() {
318
+ this.selectedTiles = [];
319
+ this._requestedTiles = [];
320
+ this._emptyTiles = [];
321
+
322
+ for (const frameStateKey in this.frameStateData) {
323
+ const frameStateDataValue = this.frameStateData[frameStateKey];
324
+ this.selectedTiles = this.selectedTiles.concat(frameStateDataValue.selectedTiles);
325
+ this._requestedTiles = this._requestedTiles.concat(frameStateDataValue._requestedTiles);
326
+ this._emptyTiles = this._emptyTiles.concat(frameStateDataValue._emptyTiles);
327
+ }
328
+
329
+ this.selectedTiles = this.options.onTraversalComplete(this.selectedTiles);
330
+
331
+ for (const tile of this.selectedTiles) {
332
+ this._tiles[tile.id] = tile;
333
+ }
334
+
335
+ this._loadTiles();
336
+
337
+ this._unloadTiles();
338
+
339
+ this._updateStats();
340
+ }
341
+
342
+ _tilesChanged(oldSelectedTiles, selectedTiles) {
343
+ if (oldSelectedTiles.length !== selectedTiles.length) {
344
+ return true;
345
+ }
346
+
347
+ const set1 = new Set(oldSelectedTiles.map(t => t.id));
348
+ const set2 = new Set(selectedTiles.map(t => t.id));
349
+ let changed = oldSelectedTiles.filter(x => !set2.has(x.id)).length > 0;
350
+ changed = changed || selectedTiles.filter(x => !set1.has(x.id)).length > 0;
351
+ return changed;
352
+ }
353
+
354
+ _loadTiles() {
355
+ for (const tile of this._requestedTiles) {
356
+ if (tile.contentUnloaded) {
357
+ this._loadTile(tile);
358
+ }
359
+ }
360
+ }
361
+
362
+ _unloadTiles() {
363
+ this._cache.unloadTiles(this, (tileset, tile) => tileset._unloadTile(tile));
364
+ }
365
+
366
+ _updateStats() {
367
+ let tilesRenderable = 0;
368
+ let pointsRenderable = 0;
369
+
370
+ for (const tile of this.selectedTiles) {
371
+ if (tile.contentAvailable && tile.content) {
372
+ tilesRenderable++;
373
+
374
+ if (tile.content.pointCount) {
375
+ pointsRenderable += tile.content.pointCount;
376
+ }
377
+ }
378
+ }
379
+
380
+ this.stats.get(TILES_IN_VIEW).count = this.selectedTiles.length;
381
+ this.stats.get(TILES_RENDERABLE).count = tilesRenderable;
382
+ this.stats.get(POINTS_COUNT).count = pointsRenderable;
383
+ }
384
+
385
+ _initializeTileSet(tilesetJson) {
386
+ this.root = this._initializeTileHeaders(tilesetJson, null);
387
+
388
+ if (this.type === _constants.TILESET_TYPE.TILES3D) {
389
+ this._initializeCesiumTileset(tilesetJson);
390
+ }
391
+
392
+ if (this.type === _constants.TILESET_TYPE.I3S) {
393
+ this._initializeI3STileset();
394
+ }
395
+
396
+ this._calculateViewProps();
397
+ }
398
+
399
+ _calculateViewProps() {
400
+ const root = this.root;
401
+ (0, _loaderUtils.assert)(root);
402
+ const {
403
+ center
404
+ } = root.boundingVolume;
405
+
406
+ if (!center) {
407
+ console.warn('center was not pre-calculated for the root tile');
408
+ this.cartographicCenter = new _core.Vector3();
409
+ this.zoom = 1;
410
+ return;
411
+ }
412
+
413
+ this.cartographicCenter = _geospatial.Ellipsoid.WGS84.cartesianToCartographic(center, new _core.Vector3());
414
+ this.cartesianCenter = center;
415
+ this.zoom = (0, _zoom.getZoomFromBoundingVolume)(root.boundingVolume);
416
+ }
417
+
418
+ _initializeStats() {
419
+ this.stats.get(TILES_TOTAL);
420
+ this.stats.get(TILES_LOADING);
421
+ this.stats.get(TILES_IN_MEMORY);
422
+ this.stats.get(TILES_IN_VIEW);
423
+ this.stats.get(TILES_RENDERABLE);
424
+ this.stats.get(TILES_LOADED);
425
+ this.stats.get(TILES_UNLOADED);
426
+ this.stats.get(TILES_LOAD_FAILED);
427
+ this.stats.get(POINTS_COUNT, 'memory');
428
+ this.stats.get(TILES_GPU_MEMORY, 'memory');
429
+ }
430
+
431
+ _initializeTileHeaders(tilesetJson, parentTileHeader) {
432
+ const rootTile = new _tile3d.default(this, tilesetJson.root, parentTileHeader);
433
+
434
+ if (parentTileHeader) {
435
+ parentTileHeader.children.push(rootTile);
436
+ rootTile.depth = parentTileHeader.depth + 1;
437
+ }
438
+
439
+ if (this.type === _constants.TILESET_TYPE.TILES3D) {
440
+ const stack = [];
441
+ stack.push(rootTile);
442
+
443
+ while (stack.length > 0) {
444
+ const tile = stack.pop();
445
+ this.stats.get(TILES_TOTAL).incrementCount();
446
+ const children = tile.header.children || [];
447
+
448
+ for (const childHeader of children) {
449
+ const childTile = new _tile3d.default(this, childHeader, tile);
450
+ tile.children.push(childTile);
451
+ childTile.depth = tile.depth + 1;
452
+ stack.push(childTile);
453
+ }
454
+ }
455
+ }
456
+
457
+ return rootTile;
458
+ }
459
+
460
+ _initializeTraverser() {
461
+ let TraverserClass;
462
+ const type = this.type;
463
+
464
+ switch (type) {
465
+ case _constants.TILESET_TYPE.TILES3D:
466
+ TraverserClass = _tileset3dTraverser.default;
467
+ break;
468
+
469
+ case _constants.TILESET_TYPE.I3S:
470
+ TraverserClass = _i3sTilesetTraverser.default;
471
+ break;
472
+
473
+ default:
474
+ TraverserClass = _tilesetTraverser.default;
475
+ }
476
+
477
+ return new TraverserClass({
478
+ basePath: this.basePath,
479
+ onTraversalEnd: this._onTraversalEnd.bind(this)
480
+ });
481
+ }
482
+
483
+ _destroyTileHeaders(parentTile) {
484
+ this._destroySubtree(parentTile);
485
+ }
486
+
487
+ async _loadTile(tile) {
488
+ let loaded;
489
+
490
+ try {
491
+ this._onStartTileLoading();
492
+
493
+ loaded = await tile.loadContent();
494
+ } catch (error) {
495
+ this._onTileLoadError(tile, error);
496
+ } finally {
497
+ this._onEndTileLoading();
498
+
499
+ this._onTileLoad(tile, loaded);
500
+ }
501
+ }
502
+
503
+ _onTileLoadError(tile, error) {
504
+ this.stats.get(TILES_LOAD_FAILED).incrementCount();
505
+ const message = error.message || error.toString();
506
+ const url = tile.url;
507
+ console.error("A 3D tile failed to load: ".concat(tile.url, " ").concat(message));
508
+ this.options.onTileError(tile, message, url);
509
+ }
510
+
511
+ _onTileLoad(tile, loaded) {
512
+ if (!loaded) {
513
+ return;
514
+ }
515
+
516
+ if (tile && tile.content) {
517
+ (0, _transformUtils.calculateTransformProps)(tile, tile.content);
518
+ }
519
+
520
+ this._addTileToCache(tile);
521
+
522
+ this.options.onTileLoad(tile);
523
+ }
524
+
525
+ _onStartTileLoading() {
526
+ this._pendingCount++;
527
+ this.stats.get(TILES_LOADING).incrementCount();
528
+ }
529
+
530
+ _onEndTileLoading() {
531
+ this._pendingCount--;
532
+ this.stats.get(TILES_LOADING).decrementCount();
533
+ }
534
+
535
+ _addTileToCache(tile) {
536
+ this._cache.add(this, tile, tileset => tileset._updateCacheStats(tile));
537
+ }
538
+
539
+ _updateCacheStats(tile) {
540
+ this.stats.get(TILES_LOADED).incrementCount();
541
+ this.stats.get(TILES_IN_MEMORY).incrementCount();
542
+ this.gpuMemoryUsageInBytes += tile.content.byteLength || 0;
543
+ this.stats.get(TILES_GPU_MEMORY).count = this.gpuMemoryUsageInBytes;
544
+ }
545
+
546
+ _unloadTile(tile) {
547
+ this.gpuMemoryUsageInBytes -= tile.content && tile.content.byteLength || 0;
548
+ this.stats.get(TILES_IN_MEMORY).decrementCount();
549
+ this.stats.get(TILES_UNLOADED).incrementCount();
550
+ this.stats.get(TILES_GPU_MEMORY).count = this.gpuMemoryUsageInBytes;
551
+ this.options.onTileUnload(tile);
552
+ tile.unloadContent();
553
+ }
554
+
555
+ _destroy() {
556
+ const stack = [];
557
+
558
+ if (this.root) {
559
+ stack.push(this.root);
560
+ }
561
+
562
+ while (stack.length > 0) {
563
+ const tile = stack.pop();
564
+
565
+ for (const child of tile.children) {
566
+ stack.push(child);
567
+ }
568
+
569
+ this._destroyTile(tile);
570
+ }
571
+
572
+ this.root = null;
573
+ }
574
+
575
+ _destroySubtree(tile) {
576
+ const root = tile;
577
+ const stack = [];
578
+ stack.push(root);
579
+
580
+ while (stack.length > 0) {
581
+ tile = stack.pop();
582
+
583
+ for (const child of tile.children) {
584
+ stack.push(child);
585
+ }
586
+
587
+ if (tile !== root) {
588
+ this._destroyTile(tile);
589
+ }
590
+ }
591
+
592
+ root.children = [];
593
+ }
594
+
595
+ _destroyTile(tile) {
596
+ this._cache.unloadTile(this, tile);
597
+
598
+ this._unloadTile(tile);
599
+
600
+ tile.destroy();
601
+ }
602
+
603
+ _initializeCesiumTileset(tilesetJson) {
604
+ this.asset = tilesetJson.asset;
605
+
606
+ if (!this.asset) {
607
+ throw new Error('Tileset must have an asset property.');
608
+ }
609
+
610
+ if (this.asset.version !== '0.0' && this.asset.version !== '1.0') {
611
+ throw new Error('The tileset must be 3D Tiles version 0.0 or 1.0.');
612
+ }
613
+
614
+ if ('tilesetVersion' in this.asset) {
615
+ this._queryParams.v = this.asset.tilesetVersion;
616
+ }
617
+
618
+ this.credits = {
619
+ attributions: this.options.attributions || []
620
+ };
621
+ this.description = this.options.description || '';
622
+ this.properties = tilesetJson.properties;
623
+ this.geometricError = tilesetJson.geometricError;
624
+ this._extensionsUsed = tilesetJson.extensionsUsed;
625
+ this.extras = tilesetJson.extras;
626
+ }
627
+
628
+ _initializeI3STileset() {
629
+ if (this.loadOptions.i3s && 'token' in this.loadOptions.i3s) {
630
+ this._queryParams.token = this.loadOptions.i3s.token;
631
+ }
632
+ }
633
+
634
+ }
635
+
636
+ exports.default = Tileset3D;
637
+
638
+ function getQueryParamString(queryParams) {
639
+ const queryParamStrings = [];
640
+
641
+ for (const key of Object.keys(queryParams)) {
642
+ queryParamStrings.push("".concat(key, "=").concat(queryParams[key]));
643
+ }
644
+
645
+ switch (queryParamStrings.length) {
646
+ case 0:
647
+ return '';
648
+
649
+ case 1:
650
+ return "?".concat(queryParamStrings[0]);
651
+
652
+ default:
653
+ return "?".concat(queryParamStrings.join('&'));
654
+ }
655
+ }
656
+ //# sourceMappingURL=tileset-3d.js.map