@loaders.gl/tiles 3.1.0-alpha.2 → 3.1.0-beta.1

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