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