@loaders.gl/tiles 3.3.0-alpha.1 → 3.3.0-alpha.11
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 +1031 -1433
- 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 +45 -50
- 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 +111 -98
- package/dist/es5/tileset/tile-3d.js.map +1 -1
- package/dist/es5/tileset/tileset-3d.js +130 -196
- 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-frame-counter.js → i3s-pending-tiles-register.js} +21 -16
- package/dist/es5/tileset/traversers/i3s-pending-tiles-register.js.map +1 -0
- package/dist/es5/tileset/traversers/i3s-tile-manager.js +33 -27
- package/dist/es5/tileset/traversers/i3s-tile-manager.js.map +1 -1
- package/dist/es5/tileset/traversers/i3s-tileset-traverser.js +10 -52
- 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 +55 -78
- 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 +36 -20
- 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 +47 -108
- package/dist/esm/tileset/tile-3d.js.map +1 -1
- package/dist/esm/tileset/tileset-3d.js +70 -163
- 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 +28 -0
- package/dist/esm/tileset/traversers/i3s-pending-tiles-register.js.map +1 -0
- package/dist/esm/tileset/traversers/i3s-tile-manager.js +34 -15
- package/dist/esm/tileset/traversers/i3s-tile-manager.js.map +1 -1
- package/dist/esm/tileset/traversers/i3s-tileset-traverser.js +8 -22
- 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 +20 -59
- 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 +5 -8
- package/dist/tileset/helpers/frame-state.d.ts.map +1 -1
- package/dist/tileset/helpers/frame-state.js +27 -12
- package/dist/tileset/helpers/i3s-lod.d.ts.map +1 -1
- package/dist/tileset/tile-3d.d.ts +15 -4
- package/dist/tileset/tile-3d.d.ts.map +1 -1
- package/dist/tileset/tile-3d.js +15 -2
- package/dist/tileset/tileset-3d.d.ts +17 -4
- package/dist/tileset/tileset-3d.d.ts.map +1 -1
- package/dist/tileset/tileset-3d.js +47 -10
- package/dist/tileset/traversers/{i3s-frame-counter.d.ts → i3s-pending-tiles-register.d.ts} +7 -4
- package/dist/tileset/traversers/i3s-pending-tiles-register.d.ts.map +1 -0
- package/dist/tileset/traversers/{i3s-frame-counter.js → i3s-pending-tiles-register.js} +17 -8
- package/dist/tileset/traversers/i3s-tile-manager.d.ts +19 -1
- package/dist/tileset/traversers/i3s-tile-manager.d.ts.map +1 -1
- package/dist/tileset/traversers/i3s-tile-manager.js +32 -12
- package/dist/tileset/traversers/i3s-tileset-traverser.d.ts +1 -1
- package/dist/tileset/traversers/i3s-tileset-traverser.d.ts.map +1 -1
- package/dist/tileset/traversers/i3s-tileset-traverser.js +9 -9
- package/dist/tileset/traversers/tileset-traverser.d.ts +3 -3
- package/dist/tileset/traversers/tileset-traverser.d.ts.map +1 -1
- package/dist/tileset/traversers/tileset-traverser.js +4 -4
- package/dist/types.d.ts +30 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/tileset/helpers/frame-state.ts +47 -19
- package/src/tileset/helpers/i3s-lod.ts +3 -1
- package/src/tileset/tile-3d.ts +16 -2
- package/src/tileset/tileset-3d.ts +55 -16
- package/src/tileset/traversers/i3s-pending-tiles-register.ts +44 -0
- package/src/tileset/traversers/i3s-tile-manager.ts +47 -11
- package/src/tileset/traversers/i3s-tileset-traverser.ts +5 -5
- package/src/tileset/traversers/tileset-traverser.ts +2 -2
- package/src/types.ts +32 -0
- package/dist/es5/tileset/traversers/i3s-frame-counter.js.map +0 -1
- package/dist/esm/tileset/traversers/i3s-frame-counter.js +0 -23
- package/dist/esm/tileset/traversers/i3s-frame-counter.js.map +0 -1
- package/dist/tileset/traversers/i3s-frame-counter.d.ts.map +0 -1
- package/src/tileset/traversers/i3s-frame-counter.ts +0 -35
|
@@ -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,60 +212,54 @@ 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) {
|
|
224
|
+
this.doUpdate(viewports);
|
|
225
|
+
}
|
|
260
226
|
});
|
|
261
227
|
}
|
|
262
228
|
|
|
263
|
-
async selectTiles(
|
|
229
|
+
async selectTiles() {
|
|
230
|
+
let viewports = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
|
264
231
|
await this.tilesetInitializationPromise;
|
|
265
|
-
|
|
266
232
|
if (viewports) {
|
|
267
233
|
this.lastUpdatedVieports = viewports;
|
|
268
234
|
}
|
|
269
|
-
|
|
270
235
|
if (!this.updatePromise) {
|
|
271
236
|
this.updatePromise = new Promise(resolve => {
|
|
272
237
|
setTimeout(() => {
|
|
273
|
-
|
|
238
|
+
if (this.lastUpdatedVieports) {
|
|
239
|
+
this.doUpdate(this.lastUpdatedVieports);
|
|
240
|
+
}
|
|
274
241
|
resolve(this._frameNumber);
|
|
275
242
|
this.updatePromise = null;
|
|
276
243
|
}, this.options.debounceTime);
|
|
277
244
|
});
|
|
278
245
|
}
|
|
279
|
-
|
|
280
246
|
return this.updatePromise;
|
|
281
247
|
}
|
|
282
248
|
|
|
283
|
-
doUpdate(viewports
|
|
249
|
+
doUpdate(viewports) {
|
|
284
250
|
if ('loadTiles' in this.options && !this.options.loadTiles) {
|
|
285
251
|
return;
|
|
286
252
|
}
|
|
287
|
-
|
|
288
253
|
if (this.traverseCounter > 0) {
|
|
289
254
|
return;
|
|
290
255
|
}
|
|
291
|
-
|
|
292
|
-
if (!(viewports instanceof Array)) {
|
|
293
|
-
viewports = [viewports];
|
|
294
|
-
}
|
|
295
|
-
|
|
256
|
+
const preparedViewports = viewports instanceof Array ? viewports : [viewports];
|
|
296
257
|
this._cache.reset();
|
|
297
|
-
|
|
298
258
|
this._frameNumber++;
|
|
299
|
-
this.traverseCounter =
|
|
259
|
+
this.traverseCounter = preparedViewports.length;
|
|
300
260
|
const viewportsToTraverse = [];
|
|
301
|
-
|
|
302
|
-
for (const viewport of viewports) {
|
|
261
|
+
for (const viewport of preparedViewports) {
|
|
303
262
|
const id = viewport.id;
|
|
304
|
-
|
|
305
263
|
if (this._needTraverse(id)) {
|
|
306
264
|
viewportsToTraverse.push(id);
|
|
307
265
|
} else {
|
|
@@ -309,40 +267,33 @@ export default class Tileset3D {
|
|
|
309
267
|
}
|
|
310
268
|
}
|
|
311
269
|
|
|
312
|
-
for (const viewport of
|
|
270
|
+
for (const viewport of preparedViewports) {
|
|
313
271
|
const id = viewport.id;
|
|
314
|
-
|
|
315
272
|
if (!this.roots[id]) {
|
|
316
273
|
this.roots[id] = this._initializeTileHeaders(this.tileset, null);
|
|
317
274
|
}
|
|
318
|
-
|
|
319
275
|
if (!viewportsToTraverse.includes(id)) {
|
|
320
276
|
continue;
|
|
321
277
|
}
|
|
322
278
|
|
|
323
279
|
const frameState = getFrameState(viewport, this._frameNumber);
|
|
324
|
-
|
|
325
280
|
this._traverser.traverse(this.roots[id], frameState, this.options);
|
|
326
281
|
}
|
|
327
282
|
}
|
|
328
283
|
|
|
329
284
|
_needTraverse(viewportId) {
|
|
330
285
|
let traverserId = viewportId;
|
|
331
|
-
|
|
332
286
|
if (this.options.viewportTraversersMap) {
|
|
333
287
|
traverserId = this.options.viewportTraversersMap[viewportId];
|
|
334
288
|
}
|
|
335
|
-
|
|
336
289
|
if (traverserId !== viewportId) {
|
|
337
290
|
return false;
|
|
338
291
|
}
|
|
339
|
-
|
|
340
292
|
return true;
|
|
341
293
|
}
|
|
342
294
|
|
|
343
295
|
_onTraversalEnd(frameState) {
|
|
344
296
|
const id = frameState.viewport.id;
|
|
345
|
-
|
|
346
297
|
if (!this.frameStateData[id]) {
|
|
347
298
|
this.frameStateData[id] = {
|
|
348
299
|
selectedTiles: [],
|
|
@@ -350,24 +301,19 @@ export default class Tileset3D {
|
|
|
350
301
|
_emptyTiles: []
|
|
351
302
|
};
|
|
352
303
|
}
|
|
353
|
-
|
|
354
304
|
const currentFrameStateData = this.frameStateData[id];
|
|
355
305
|
const selectedTiles = Object.values(this._traverser.selectedTiles);
|
|
356
306
|
const [filteredSelectedTiles, unselectedTiles] = limitSelectedTiles(selectedTiles, frameState, this.options.maximumTilesSelected);
|
|
357
307
|
currentFrameStateData.selectedTiles = filteredSelectedTiles;
|
|
358
|
-
|
|
359
308
|
for (const tile of unselectedTiles) {
|
|
360
309
|
tile.unselect();
|
|
361
310
|
}
|
|
362
|
-
|
|
363
311
|
currentFrameStateData._requestedTiles = Object.values(this._traverser.requestedTiles);
|
|
364
312
|
currentFrameStateData._emptyTiles = Object.values(this._traverser.emptyTiles);
|
|
365
313
|
this.traverseCounter--;
|
|
366
|
-
|
|
367
314
|
if (this.traverseCounter > 0) {
|
|
368
315
|
return;
|
|
369
316
|
}
|
|
370
|
-
|
|
371
317
|
this._updateTiles();
|
|
372
318
|
}
|
|
373
319
|
|
|
@@ -375,39 +321,30 @@ export default class Tileset3D {
|
|
|
375
321
|
this.selectedTiles = [];
|
|
376
322
|
this._requestedTiles = [];
|
|
377
323
|
this._emptyTiles = [];
|
|
378
|
-
|
|
379
324
|
for (const frameStateKey in this.frameStateData) {
|
|
380
325
|
const frameStateDataValue = this.frameStateData[frameStateKey];
|
|
381
326
|
this.selectedTiles = this.selectedTiles.concat(frameStateDataValue.selectedTiles);
|
|
382
327
|
this._requestedTiles = this._requestedTiles.concat(frameStateDataValue._requestedTiles);
|
|
383
328
|
this._emptyTiles = this._emptyTiles.concat(frameStateDataValue._emptyTiles);
|
|
384
329
|
}
|
|
385
|
-
|
|
386
330
|
this.selectedTiles = this.options.onTraversalComplete(this.selectedTiles);
|
|
387
|
-
|
|
388
331
|
for (const tile of this.selectedTiles) {
|
|
389
332
|
this._tiles[tile.id] = tile;
|
|
390
333
|
}
|
|
391
|
-
|
|
392
334
|
this._loadTiles();
|
|
393
|
-
|
|
394
335
|
this._unloadTiles();
|
|
395
|
-
|
|
396
336
|
this._updateStats();
|
|
397
337
|
}
|
|
398
|
-
|
|
399
338
|
_tilesChanged(oldSelectedTiles, selectedTiles) {
|
|
400
339
|
if (oldSelectedTiles.length !== selectedTiles.length) {
|
|
401
340
|
return true;
|
|
402
341
|
}
|
|
403
|
-
|
|
404
342
|
const set1 = new Set(oldSelectedTiles.map(t => t.id));
|
|
405
343
|
const set2 = new Set(selectedTiles.map(t => t.id));
|
|
406
344
|
let changed = oldSelectedTiles.filter(x => !set2.has(x.id)).length > 0;
|
|
407
345
|
changed = changed || selectedTiles.filter(x => !set1.has(x.id)).length > 0;
|
|
408
346
|
return changed;
|
|
409
347
|
}
|
|
410
|
-
|
|
411
348
|
_loadTiles() {
|
|
412
349
|
for (const tile of this._requestedTiles) {
|
|
413
350
|
if (tile.contentUnloaded) {
|
|
@@ -415,19 +352,15 @@ export default class Tileset3D {
|
|
|
415
352
|
}
|
|
416
353
|
}
|
|
417
354
|
}
|
|
418
|
-
|
|
419
355
|
_unloadTiles() {
|
|
420
356
|
this._cache.unloadTiles(this, (tileset, tile) => tileset._unloadTile(tile));
|
|
421
357
|
}
|
|
422
|
-
|
|
423
358
|
_updateStats() {
|
|
424
359
|
let tilesRenderable = 0;
|
|
425
360
|
let pointsRenderable = 0;
|
|
426
|
-
|
|
427
361
|
for (const tile of this.selectedTiles) {
|
|
428
362
|
if (tile.contentAvailable && tile.content) {
|
|
429
363
|
tilesRenderable++;
|
|
430
|
-
|
|
431
364
|
if (tile.content.pointCount) {
|
|
432
365
|
pointsRenderable += tile.content.pointCount;
|
|
433
366
|
} else {
|
|
@@ -435,26 +368,20 @@ export default class Tileset3D {
|
|
|
435
368
|
}
|
|
436
369
|
}
|
|
437
370
|
}
|
|
438
|
-
|
|
439
371
|
this.stats.get(TILES_IN_VIEW).count = this.selectedTiles.length;
|
|
440
372
|
this.stats.get(TILES_RENDERABLE).count = tilesRenderable;
|
|
441
373
|
this.stats.get(POINTS_COUNT).count = pointsRenderable;
|
|
442
374
|
}
|
|
443
|
-
|
|
444
375
|
async _initializeTileSet(tilesetJson) {
|
|
445
376
|
if (this.type === TILESET_TYPE.I3S) {
|
|
446
377
|
this.calculateViewPropsI3S();
|
|
447
378
|
tilesetJson.root = await tilesetJson.root;
|
|
448
379
|
}
|
|
449
|
-
|
|
450
380
|
this.root = this._initializeTileHeaders(tilesetJson, null);
|
|
451
|
-
|
|
452
381
|
if (this.type === TILESET_TYPE.TILES3D) {
|
|
453
382
|
this._initializeTiles3DTileset(tilesetJson);
|
|
454
|
-
|
|
455
383
|
this.calculateViewPropsTiles3D();
|
|
456
384
|
}
|
|
457
|
-
|
|
458
385
|
if (this.type === TILESET_TYPE.I3S) {
|
|
459
386
|
this._initializeI3STileset();
|
|
460
387
|
}
|
|
@@ -462,9 +389,7 @@ export default class Tileset3D {
|
|
|
462
389
|
|
|
463
390
|
calculateViewPropsI3S() {
|
|
464
391
|
var _this$tileset$store;
|
|
465
|
-
|
|
466
392
|
const fullExtent = this.tileset.fullExtent;
|
|
467
|
-
|
|
468
393
|
if (fullExtent) {
|
|
469
394
|
const {
|
|
470
395
|
xmin,
|
|
@@ -479,9 +404,7 @@ export default class Tileset3D {
|
|
|
479
404
|
this.zoom = getZoomFromFullExtent(fullExtent, this.cartographicCenter, this.cartesianCenter);
|
|
480
405
|
return;
|
|
481
406
|
}
|
|
482
|
-
|
|
483
407
|
const extent = (_this$tileset$store = this.tileset.store) === null || _this$tileset$store === void 0 ? void 0 : _this$tileset$store.extent;
|
|
484
|
-
|
|
485
408
|
if (extent) {
|
|
486
409
|
const [xmin, ymin, xmax, ymax] = extent;
|
|
487
410
|
this.cartographicCenter = new Vector3(xmin + (xmax - xmin) / 2, ymin + (ymax - ymin) / 2, 0);
|
|
@@ -489,7 +412,6 @@ export default class Tileset3D {
|
|
|
489
412
|
this.zoom = getZoomFromExtent(extent, this.cartographicCenter, this.cartesianCenter);
|
|
490
413
|
return;
|
|
491
414
|
}
|
|
492
|
-
|
|
493
415
|
console.warn('Extent is not defined in the tileset header');
|
|
494
416
|
this.cartographicCenter = new Vector3();
|
|
495
417
|
this.zoom = 1;
|
|
@@ -502,7 +424,6 @@ export default class Tileset3D {
|
|
|
502
424
|
const {
|
|
503
425
|
center
|
|
504
426
|
} = root.boundingVolume;
|
|
505
|
-
|
|
506
427
|
if (!center) {
|
|
507
428
|
console.warn('center was not pre-calculated for the root tile');
|
|
508
429
|
this.cartographicCenter = new Vector3();
|
|
@@ -515,11 +436,9 @@ export default class Tileset3D {
|
|
|
515
436
|
} else {
|
|
516
437
|
this.cartographicCenter = new Vector3(0, 0, -Ellipsoid.WGS84.radii[0]);
|
|
517
438
|
}
|
|
518
|
-
|
|
519
439
|
this.cartesianCenter = center;
|
|
520
440
|
this.zoom = getZoomFromBoundingVolume(root.boundingVolume, this.cartographicCenter);
|
|
521
441
|
}
|
|
522
|
-
|
|
523
442
|
_initializeStats() {
|
|
524
443
|
this.stats.get(TILES_TOTAL);
|
|
525
444
|
this.stats.get(TILES_LOADING);
|
|
@@ -529,7 +448,7 @@ export default class Tileset3D {
|
|
|
529
448
|
this.stats.get(TILES_LOADED);
|
|
530
449
|
this.stats.get(TILES_UNLOADED);
|
|
531
450
|
this.stats.get(TILES_LOAD_FAILED);
|
|
532
|
-
this.stats.get(POINTS_COUNT
|
|
451
|
+
this.stats.get(POINTS_COUNT);
|
|
533
452
|
this.stats.get(TILES_GPU_MEMORY, 'memory');
|
|
534
453
|
}
|
|
535
454
|
|
|
@@ -544,12 +463,10 @@ export default class Tileset3D {
|
|
|
544
463
|
if (this.type === TILESET_TYPE.TILES3D) {
|
|
545
464
|
const stack = [];
|
|
546
465
|
stack.push(rootTile);
|
|
547
|
-
|
|
548
466
|
while (stack.length > 0) {
|
|
549
467
|
const tile = stack.pop();
|
|
550
468
|
this.stats.get(TILES_TOTAL).incrementCount();
|
|
551
469
|
const children = tile.header.children || [];
|
|
552
|
-
|
|
553
470
|
for (const childHeader of children) {
|
|
554
471
|
const childTile = new Tile3D(this, childHeader, tile);
|
|
555
472
|
tile.children.push(childTile);
|
|
@@ -558,53 +475,41 @@ export default class Tileset3D {
|
|
|
558
475
|
}
|
|
559
476
|
}
|
|
560
477
|
}
|
|
561
|
-
|
|
562
478
|
return rootTile;
|
|
563
479
|
}
|
|
564
|
-
|
|
565
480
|
_initializeTraverser() {
|
|
566
481
|
let TraverserClass;
|
|
567
482
|
const type = this.type;
|
|
568
|
-
|
|
569
483
|
switch (type) {
|
|
570
484
|
case TILESET_TYPE.TILES3D:
|
|
571
485
|
TraverserClass = Tileset3DTraverser;
|
|
572
486
|
break;
|
|
573
|
-
|
|
574
487
|
case TILESET_TYPE.I3S:
|
|
575
488
|
TraverserClass = I3SetTraverser;
|
|
576
489
|
break;
|
|
577
|
-
|
|
578
490
|
default:
|
|
579
491
|
TraverserClass = TilesetTraverser;
|
|
580
492
|
}
|
|
581
|
-
|
|
582
493
|
return new TraverserClass({
|
|
583
494
|
basePath: this.basePath,
|
|
584
495
|
onTraversalEnd: this._onTraversalEnd.bind(this)
|
|
585
496
|
});
|
|
586
497
|
}
|
|
587
|
-
|
|
588
498
|
_destroyTileHeaders(parentTile) {
|
|
589
499
|
this._destroySubtree(parentTile);
|
|
590
500
|
}
|
|
591
|
-
|
|
592
501
|
async _loadTile(tile) {
|
|
593
502
|
let loaded;
|
|
594
|
-
|
|
595
503
|
try {
|
|
596
504
|
this._onStartTileLoading();
|
|
597
|
-
|
|
598
505
|
loaded = await tile.loadContent();
|
|
599
506
|
} catch (error) {
|
|
600
507
|
this._onTileLoadError(tile, error);
|
|
601
508
|
} finally {
|
|
602
509
|
this._onEndTileLoading();
|
|
603
|
-
|
|
604
510
|
this._onTileLoad(tile, loaded);
|
|
605
511
|
}
|
|
606
512
|
}
|
|
607
|
-
|
|
608
513
|
_onTileLoadError(tile, error) {
|
|
609
514
|
this.stats.get(TILES_LOAD_FAILED).incrementCount();
|
|
610
515
|
const message = error.message || error.toString();
|
|
@@ -612,15 +517,12 @@ export default class Tileset3D {
|
|
|
612
517
|
console.error("A 3D tile failed to load: ".concat(tile.url, " ").concat(message));
|
|
613
518
|
this.options.onTileError(tile, message, url);
|
|
614
519
|
}
|
|
615
|
-
|
|
616
520
|
_onTileLoad(tile, loaded) {
|
|
617
521
|
if (!loaded) {
|
|
618
522
|
return;
|
|
619
523
|
}
|
|
620
|
-
|
|
621
524
|
if (this.type === TILESET_TYPE.I3S) {
|
|
622
525
|
var _this$tileset, _this$tileset$nodePag;
|
|
623
|
-
|
|
624
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;
|
|
625
527
|
this.stats.get(TILES_TOTAL).reset();
|
|
626
528
|
this.stats.get(TILES_TOTAL).addCount(nodesInNodePages);
|
|
@@ -629,33 +531,59 @@ export default class Tileset3D {
|
|
|
629
531
|
if (tile && tile.content) {
|
|
630
532
|
calculateTransformProps(tile, tile.content);
|
|
631
533
|
}
|
|
632
|
-
|
|
534
|
+
this.updateContentTypes(tile);
|
|
633
535
|
this._addTileToCache(tile);
|
|
634
|
-
|
|
635
536
|
this.options.onTileLoad(tile);
|
|
636
537
|
}
|
|
637
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
|
+
}
|
|
638
569
|
_onStartTileLoading() {
|
|
639
570
|
this._pendingCount++;
|
|
640
571
|
this.stats.get(TILES_LOADING).incrementCount();
|
|
641
572
|
}
|
|
642
|
-
|
|
643
573
|
_onEndTileLoading() {
|
|
644
574
|
this._pendingCount--;
|
|
645
575
|
this.stats.get(TILES_LOADING).decrementCount();
|
|
646
576
|
}
|
|
647
|
-
|
|
648
577
|
_addTileToCache(tile) {
|
|
649
578
|
this._cache.add(this, tile, tileset => tileset._updateCacheStats(tile));
|
|
650
579
|
}
|
|
651
|
-
|
|
652
580
|
_updateCacheStats(tile) {
|
|
653
581
|
this.stats.get(TILES_LOADED).incrementCount();
|
|
654
582
|
this.stats.get(TILES_IN_MEMORY).incrementCount();
|
|
583
|
+
|
|
655
584
|
this.gpuMemoryUsageInBytes += tile.content.byteLength || 0;
|
|
656
585
|
this.stats.get(TILES_GPU_MEMORY).count = this.gpuMemoryUsageInBytes;
|
|
657
586
|
}
|
|
658
|
-
|
|
659
587
|
_unloadTile(tile) {
|
|
660
588
|
this.gpuMemoryUsageInBytes -= tile.content && tile.content.byteLength || 0;
|
|
661
589
|
this.stats.get(TILES_IN_MEMORY).decrementCount();
|
|
@@ -667,21 +595,16 @@ export default class Tileset3D {
|
|
|
667
595
|
|
|
668
596
|
_destroy() {
|
|
669
597
|
const stack = [];
|
|
670
|
-
|
|
671
598
|
if (this.root) {
|
|
672
599
|
stack.push(this.root);
|
|
673
600
|
}
|
|
674
|
-
|
|
675
601
|
while (stack.length > 0) {
|
|
676
602
|
const tile = stack.pop();
|
|
677
|
-
|
|
678
603
|
for (const child of tile.children) {
|
|
679
604
|
stack.push(child);
|
|
680
605
|
}
|
|
681
|
-
|
|
682
606
|
this._destroyTile(tile);
|
|
683
607
|
}
|
|
684
|
-
|
|
685
608
|
this.root = null;
|
|
686
609
|
}
|
|
687
610
|
|
|
@@ -689,37 +612,27 @@ export default class Tileset3D {
|
|
|
689
612
|
const root = tile;
|
|
690
613
|
const stack = [];
|
|
691
614
|
stack.push(root);
|
|
692
|
-
|
|
693
615
|
while (stack.length > 0) {
|
|
694
616
|
tile = stack.pop();
|
|
695
|
-
|
|
696
617
|
for (const child of tile.children) {
|
|
697
618
|
stack.push(child);
|
|
698
619
|
}
|
|
699
|
-
|
|
700
620
|
if (tile !== root) {
|
|
701
621
|
this._destroyTile(tile);
|
|
702
622
|
}
|
|
703
623
|
}
|
|
704
|
-
|
|
705
624
|
root.children = [];
|
|
706
625
|
}
|
|
707
|
-
|
|
708
626
|
_destroyTile(tile) {
|
|
709
627
|
this._cache.unloadTile(this, tile);
|
|
710
|
-
|
|
711
628
|
this._unloadTile(tile);
|
|
712
|
-
|
|
713
629
|
tile.destroy();
|
|
714
630
|
}
|
|
715
|
-
|
|
716
631
|
_initializeTiles3DTileset(tilesetJson) {
|
|
717
632
|
this.asset = tilesetJson.asset;
|
|
718
|
-
|
|
719
633
|
if (!this.asset) {
|
|
720
634
|
throw new Error('Tileset must have an asset property.');
|
|
721
635
|
}
|
|
722
|
-
|
|
723
636
|
if (this.asset.version !== '0.0' && this.asset.version !== '1.0') {
|
|
724
637
|
throw new Error('The tileset must be 3D Tiles version 0.0 or 1.0.');
|
|
725
638
|
}
|
|
@@ -732,34 +645,28 @@ export default class Tileset3D {
|
|
|
732
645
|
attributions: this.options.attributions || []
|
|
733
646
|
};
|
|
734
647
|
this.description = this.options.description || '';
|
|
648
|
+
|
|
735
649
|
this.properties = tilesetJson.properties;
|
|
736
650
|
this.geometricError = tilesetJson.geometricError;
|
|
737
651
|
this._extensionsUsed = tilesetJson.extensionsUsed;
|
|
738
652
|
this.extras = tilesetJson.extras;
|
|
739
653
|
}
|
|
740
|
-
|
|
741
654
|
_initializeI3STileset() {
|
|
742
655
|
if (this.loadOptions.i3s && 'token' in this.loadOptions.i3s) {
|
|
743
656
|
this._queryParams.token = this.loadOptions.i3s.token;
|
|
744
657
|
}
|
|
745
658
|
}
|
|
746
|
-
|
|
747
659
|
}
|
|
748
|
-
|
|
749
660
|
function getQueryParamString(queryParams) {
|
|
750
661
|
const queryParamStrings = [];
|
|
751
|
-
|
|
752
662
|
for (const key of Object.keys(queryParams)) {
|
|
753
663
|
queryParamStrings.push("".concat(key, "=").concat(queryParams[key]));
|
|
754
664
|
}
|
|
755
|
-
|
|
756
665
|
switch (queryParamStrings.length) {
|
|
757
666
|
case 0:
|
|
758
667
|
return '';
|
|
759
|
-
|
|
760
668
|
case 1:
|
|
761
669
|
return "?".concat(queryParamStrings[0]);
|
|
762
|
-
|
|
763
670
|
default:
|
|
764
671
|
return "?".concat(queryParamStrings.join('&'));
|
|
765
672
|
}
|