@loaders.gl/tiles 4.0.0-alpha.4 → 4.0.0-alpha.6
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/bundle.d.ts +2 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/bundle.js +2 -2
- package/dist/constants.d.ts +32 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +30 -26
- package/dist/dist.min.js +8921 -0
- package/dist/es5/bundle.js +6 -0
- package/dist/es5/bundle.js.map +1 -0
- package/dist/es5/constants.js +44 -0
- package/dist/es5/constants.js.map +1 -0
- package/dist/es5/index.js +93 -0
- package/dist/es5/index.js.map +1 -0
- package/dist/es5/tileset/format-3d-tiles/tileset-3d-traverser.js +70 -0
- package/dist/es5/tileset/format-3d-tiles/tileset-3d-traverser.js.map +1 -0
- package/dist/es5/tileset/format-i3s/i3s-pending-tiles-register.js +45 -0
- package/dist/es5/tileset/format-i3s/i3s-pending-tiles-register.js.map +1 -0
- package/dist/es5/tileset/format-i3s/i3s-tile-manager.js +84 -0
- package/dist/es5/tileset/format-i3s/i3s-tile-manager.js.map +1 -0
- package/dist/es5/tileset/format-i3s/i3s-tileset-traverser.js +143 -0
- package/dist/es5/tileset/format-i3s/i3s-tileset-traverser.js.map +1 -0
- package/dist/es5/tileset/helpers/3d-tiles-options.js +12 -0
- package/dist/es5/tileset/helpers/3d-tiles-options.js.map +1 -0
- package/dist/es5/tileset/helpers/bounding-volume.js +176 -0
- package/dist/es5/tileset/helpers/bounding-volume.js.map +1 -0
- package/dist/es5/tileset/helpers/frame-state.js +129 -0
- package/dist/es5/tileset/helpers/frame-state.js.map +1 -0
- package/dist/es5/tileset/helpers/i3s-lod.js +60 -0
- package/dist/es5/tileset/helpers/i3s-lod.js.map +1 -0
- package/dist/es5/tileset/helpers/tiles-3d-lod.js +103 -0
- package/dist/es5/tileset/helpers/tiles-3d-lod.js.map +1 -0
- package/dist/es5/tileset/helpers/transform-utils.js +50 -0
- package/dist/es5/tileset/helpers/transform-utils.js.map +1 -0
- package/dist/es5/tileset/helpers/zoom.js +63 -0
- package/dist/es5/tileset/helpers/zoom.js.map +1 -0
- package/dist/es5/tileset/tile-3d.js +565 -0
- package/dist/es5/tileset/tile-3d.js.map +1 -0
- package/dist/es5/tileset/tileset-3d.js +890 -0
- package/dist/es5/tileset/tileset-3d.js.map +1 -0
- package/dist/es5/tileset/tileset-cache.js +85 -0
- package/dist/es5/tileset/tileset-cache.js.map +1 -0
- package/dist/es5/tileset/tileset-traverser.js +328 -0
- package/dist/es5/tileset/tileset-traverser.js.map +1 -0
- package/dist/es5/types.js +2 -0
- package/dist/es5/types.js.map +1 -0
- package/dist/es5/utils/doubly-linked-list-node.js +21 -0
- package/dist/es5/utils/doubly-linked-list-node.js.map +1 -0
- package/dist/es5/utils/doubly-linked-list.js +88 -0
- package/dist/es5/utils/doubly-linked-list.js.map +1 -0
- package/dist/es5/utils/managed-array.js +126 -0
- package/dist/es5/utils/managed-array.js.map +1 -0
- package/dist/esm/bundle.js +4 -0
- package/dist/esm/bundle.js.map +1 -0
- package/dist/esm/constants.js +32 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/{tileset/traversers → esm/tileset/format-3d-tiles}/tileset-3d-traverser.js +2 -13
- package/dist/esm/tileset/format-3d-tiles/tileset-3d-traverser.js.map +1 -0
- package/dist/esm/tileset/format-i3s/i3s-pending-tiles-register.js +26 -0
- package/dist/esm/tileset/format-i3s/i3s-pending-tiles-register.js.map +1 -0
- package/dist/esm/tileset/format-i3s/i3s-tile-manager.js +79 -0
- package/dist/esm/tileset/format-i3s/i3s-tile-manager.js.map +1 -0
- package/dist/{tileset/traversers → esm/tileset/format-i3s}/i3s-tileset-traverser.js +16 -28
- package/dist/esm/tileset/format-i3s/i3s-tileset-traverser.js.map +1 -0
- package/dist/esm/tileset/helpers/3d-tiles-options.js +6 -0
- package/dist/esm/tileset/helpers/3d-tiles-options.js.map +1 -0
- package/dist/esm/tileset/helpers/bounding-volume.js +155 -0
- package/dist/esm/tileset/helpers/bounding-volume.js.map +1 -0
- package/dist/esm/tileset/helpers/frame-state.js +109 -0
- package/dist/esm/tileset/helpers/frame-state.js.map +1 -0
- package/dist/esm/tileset/helpers/i3s-lod.js +53 -0
- package/dist/esm/tileset/helpers/i3s-lod.js.map +1 -0
- package/dist/esm/tileset/helpers/tiles-3d-lod.js +100 -0
- package/dist/{tileset → esm/tileset}/helpers/tiles-3d-lod.js.map +1 -1
- package/dist/esm/tileset/helpers/transform-utils.js +50 -0
- package/dist/esm/tileset/helpers/transform-utils.js.map +1 -0
- package/dist/esm/tileset/helpers/zoom.js +55 -0
- package/dist/esm/tileset/helpers/zoom.js.map +1 -0
- package/dist/esm/tileset/tile-3d.js +445 -0
- package/dist/esm/tileset/tile-3d.js.map +1 -0
- package/dist/esm/tileset/tileset-3d.js +637 -0
- package/dist/esm/tileset/tileset-3d.js.map +1 -0
- package/dist/esm/tileset/tileset-cache.js +60 -0
- package/dist/esm/tileset/tileset-cache.js.map +1 -0
- package/dist/{tileset/traversers → esm/tileset}/tileset-traverser.js +20 -72
- package/dist/esm/tileset/tileset-traverser.js.map +1 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/utils/doubly-linked-list-node.js +12 -0
- package/dist/esm/utils/doubly-linked-list-node.js.map +1 -0
- package/dist/esm/utils/doubly-linked-list.js +65 -0
- package/dist/esm/utils/doubly-linked-list.js.map +1 -0
- package/dist/esm/utils/managed-array.js +87 -0
- package/dist/esm/utils/managed-array.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -9
- package/dist/tileset/format-3d-tiles/tileset-3d-traverser.d.ts +7 -0
- package/dist/tileset/format-3d-tiles/tileset-3d-traverser.d.ts.map +1 -0
- package/dist/tileset/format-3d-tiles/tileset-3d-traverser.js +54 -0
- package/dist/tileset/format-i3s/i3s-pending-tiles-register.d.ts +27 -0
- package/dist/tileset/format-i3s/i3s-pending-tiles-register.d.ts.map +1 -0
- package/dist/tileset/format-i3s/i3s-pending-tiles-register.js +47 -0
- package/dist/tileset/format-i3s/i3s-tile-manager.d.ts +34 -0
- package/dist/tileset/format-i3s/i3s-tile-manager.d.ts.map +1 -0
- package/dist/tileset/format-i3s/i3s-tile-manager.js +80 -0
- package/dist/tileset/format-i3s/i3s-tileset-traverser.d.ts +25 -0
- package/dist/tileset/format-i3s/i3s-tileset-traverser.d.ts.map +1 -0
- package/dist/tileset/format-i3s/i3s-tileset-traverser.js +92 -0
- package/dist/tileset/helpers/3d-tiles-options.d.ts +4 -0
- package/dist/tileset/helpers/3d-tiles-options.d.ts.map +1 -0
- package/dist/tileset/helpers/3d-tiles-options.js +8 -5
- package/dist/tileset/helpers/bounding-volume.d.ts +19 -0
- package/dist/tileset/helpers/bounding-volume.d.ts.map +1 -0
- package/dist/tileset/helpers/bounding-volume.js +274 -69
- package/dist/tileset/helpers/frame-state.d.ts +28 -0
- package/dist/tileset/helpers/frame-state.d.ts.map +1 -0
- package/dist/tileset/helpers/frame-state.js +131 -49
- package/dist/tileset/helpers/i3s-lod.d.ts +20 -0
- package/dist/tileset/helpers/i3s-lod.d.ts.map +1 -0
- package/dist/tileset/helpers/i3s-lod.js +82 -105
- package/dist/tileset/helpers/tiles-3d-lod.d.ts +8 -0
- package/dist/tileset/helpers/tiles-3d-lod.d.ts.map +1 -0
- package/dist/tileset/helpers/tiles-3d-lod.js +112 -100
- package/dist/tileset/helpers/transform-utils.d.ts +2 -0
- package/dist/tileset/helpers/transform-utils.d.ts.map +1 -0
- package/dist/tileset/helpers/transform-utils.js +51 -56
- package/dist/tileset/helpers/zoom.d.ts +46 -0
- package/dist/tileset/helpers/zoom.d.ts.map +1 -0
- package/dist/tileset/helpers/zoom.js +83 -30
- package/dist/tileset/tile-3d.d.ts +206 -0
- package/dist/tileset/tile-3d.d.ts.map +1 -0
- package/dist/tileset/tile-3d.js +593 -531
- package/dist/tileset/tileset-3d.d.ts +217 -0
- package/dist/tileset/tileset-3d.d.ts.map +1 -0
- package/dist/tileset/tileset-3d.js +707 -648
- package/dist/tileset/tileset-cache.d.ts +18 -0
- package/dist/tileset/tileset-cache.d.ts.map +1 -0
- package/dist/tileset/tileset-cache.js +70 -71
- package/dist/tileset/tileset-traverser.d.ts +46 -0
- package/dist/tileset/tileset-traverser.d.ts.map +1 -0
- package/dist/tileset/tileset-traverser.js +309 -0
- package/dist/types.d.ts +34 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/utils/doubly-linked-list-node.d.ts +11 -0
- package/dist/utils/doubly-linked-list-node.d.ts.map +1 -0
- package/dist/utils/doubly-linked-list-node.js +17 -8
- package/dist/utils/doubly-linked-list.d.ts +30 -0
- package/dist/utils/doubly-linked-list.d.ts.map +1 -0
- package/dist/utils/doubly-linked-list.js +91 -72
- package/dist/utils/managed-array.d.ts +85 -0
- package/dist/utils/managed-array.d.ts.map +1 -0
- package/dist/utils/managed-array.js +144 -103
- package/package.json +10 -10
- package/src/constants.ts +2 -0
- package/src/index.ts +7 -4
- package/src/tileset/{traversers → format-3d-tiles}/tileset-3d-traverser.ts +4 -2
- package/src/tileset/format-i3s/i3s-pending-tiles-register.ts +44 -0
- package/src/tileset/format-i3s/i3s-tile-manager.ts +101 -0
- package/src/tileset/{traversers → format-i3s}/i3s-tileset-traverser.ts +27 -15
- package/src/tileset/helpers/bounding-volume.ts +136 -0
- package/src/tileset/helpers/frame-state.ts +102 -18
- package/src/tileset/helpers/i3s-lod.ts +75 -96
- package/src/tileset/helpers/tiles-3d-lod.ts +2 -0
- package/src/tileset/helpers/transform-utils.ts +2 -0
- package/src/tileset/helpers/zoom.ts +84 -9
- package/src/tileset/tile-3d.ts +77 -20
- package/src/tileset/tileset-3d.ts +205 -43
- package/src/tileset/tileset-cache.ts +6 -2
- package/src/tileset/{traversers/tileset-traverser.ts → tileset-traverser.ts} +29 -17
- package/src/types.ts +36 -0
- package/src/utils/{doubly-linked-list-node.js → doubly-linked-list-node.ts} +7 -2
- package/src/utils/{doubly-linked-list.js → doubly-linked-list.ts} +5 -8
- package/src/utils/{managed-array.js → managed-array.ts} +5 -2
- package/dist/bundle.js.map +0 -1
- package/dist/constants.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/tileset/helpers/3d-tiles-options.js.map +0 -1
- package/dist/tileset/helpers/bounding-volume.js.map +0 -1
- package/dist/tileset/helpers/frame-state.js.map +0 -1
- package/dist/tileset/helpers/i3s-lod.js.map +0 -1
- package/dist/tileset/helpers/transform-utils.js.map +0 -1
- package/dist/tileset/helpers/zoom.js.map +0 -1
- package/dist/tileset/tile-3d.js.map +0 -1
- package/dist/tileset/tileset-3d.js.map +0 -1
- package/dist/tileset/tileset-cache.js.map +0 -1
- package/dist/tileset/traversers/i3s-tile-manager.js +0 -45
- package/dist/tileset/traversers/i3s-tile-manager.js.map +0 -1
- package/dist/tileset/traversers/i3s-tileset-traverser.js.map +0 -1
- package/dist/tileset/traversers/tileset-3d-traverser.js.map +0 -1
- package/dist/tileset/traversers/tileset-traverser.js.map +0 -1
- package/dist/utils/doubly-linked-list-node.js.map +0 -1
- package/dist/utils/doubly-linked-list.js.map +0 -1
- package/dist/utils/managed-array.js.map +0 -1
- package/src/tileset/traversers/i3s-tile-manager.ts +0 -39
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// loaders.gl, MIT license
|
|
2
|
+
|
|
1
3
|
// This file is derived from the Cesium code base under Apache 2 license
|
|
2
4
|
// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md
|
|
3
5
|
|
|
@@ -46,15 +48,19 @@ import {
|
|
|
46
48
|
LoaderWithParser,
|
|
47
49
|
LoaderOptions
|
|
48
50
|
} from '@loaders.gl/loader-utils';
|
|
49
|
-
import TilesetCache from './tileset-cache';
|
|
51
|
+
import {TilesetCache} from './tileset-cache';
|
|
50
52
|
import {calculateTransformProps} from './helpers/transform-utils';
|
|
51
|
-
import {FrameState, getFrameState} from './helpers/frame-state';
|
|
52
|
-
import {getZoomFromBoundingVolume} from './helpers/zoom';
|
|
53
|
-
import Tile3D from './tile-3d';
|
|
54
|
-
import Tileset3DTraverser from './traversers/tileset-3d-traverser';
|
|
55
|
-
import TilesetTraverser from './traversers/tileset-traverser';
|
|
56
|
-
import I3SetTraverser from './traversers/i3s-tileset-traverser';
|
|
53
|
+
import {FrameState, getFrameState, limitSelectedTiles} from './helpers/frame-state';
|
|
54
|
+
import {getZoomFromBoundingVolume, getZoomFromExtent, getZoomFromFullExtent} from './helpers/zoom';
|
|
55
|
+
import {Tile3D} from './tile-3d';
|
|
57
56
|
import {TILESET_TYPE} from '../constants';
|
|
57
|
+
import {GeospatialViewport, Viewport} from '../types';
|
|
58
|
+
|
|
59
|
+
import {TilesetTraverser} from './tileset-traverser';
|
|
60
|
+
|
|
61
|
+
// TODO - these should be moved into their respective modules
|
|
62
|
+
import {Tileset3DTraverser} from './format-3d-tiles/tileset-3d-traverser';
|
|
63
|
+
import {I3STilesetTraverser} from './format-i3s/i3s-tileset-traverser';
|
|
58
64
|
|
|
59
65
|
export type Tileset3DProps = {
|
|
60
66
|
// loading
|
|
@@ -64,6 +70,8 @@ export type Tileset3DProps = {
|
|
|
64
70
|
loadTiles?: boolean;
|
|
65
71
|
basePath?: string;
|
|
66
72
|
maximumMemoryUsage?: number;
|
|
73
|
+
maximumTilesSelected?: number;
|
|
74
|
+
debounceTime?: number;
|
|
67
75
|
|
|
68
76
|
// Metadata
|
|
69
77
|
description?: string;
|
|
@@ -93,6 +101,8 @@ type Props = {
|
|
|
93
101
|
modelMatrix: Matrix4;
|
|
94
102
|
throttleRequests: boolean;
|
|
95
103
|
maximumMemoryUsage: number;
|
|
104
|
+
maximumTilesSelected: number;
|
|
105
|
+
debounceTime: number;
|
|
96
106
|
onTileLoad: (tile: Tile3D) => any;
|
|
97
107
|
onTileUnload: (tile: Tile3D) => any;
|
|
98
108
|
onTileError: (tile: Tile3D, message: string, url: string) => any;
|
|
@@ -124,6 +134,10 @@ const DEFAULT_PROPS: Props = {
|
|
|
124
134
|
maxRequests: 64,
|
|
125
135
|
|
|
126
136
|
maximumMemoryUsage: 32,
|
|
137
|
+
/** Maximum number limit of tiles selected for show. 0 means no limit */
|
|
138
|
+
maximumTilesSelected: 0,
|
|
139
|
+
/** Delay time before the tileset traversal. It prevents traversal requests spam.*/
|
|
140
|
+
debounceTime: 0,
|
|
127
141
|
|
|
128
142
|
/**
|
|
129
143
|
* Callback. Indicates this a tile's content was loaded
|
|
@@ -149,7 +163,6 @@ const DEFAULT_PROPS: Props = {
|
|
|
149
163
|
// View distance scale modifier
|
|
150
164
|
viewDistanceScale: 1.0,
|
|
151
165
|
|
|
152
|
-
// TODO CESIUM
|
|
153
166
|
// The maximum screen space error used to drive level of detail refinement.
|
|
154
167
|
maximumScreenSpaceError: 8,
|
|
155
168
|
|
|
@@ -174,10 +187,10 @@ const TILES_LOADED = 'Tiles Loaded';
|
|
|
174
187
|
const TILES_LOADING = 'Tiles Loading';
|
|
175
188
|
const TILES_UNLOADED = 'Tiles Unloaded';
|
|
176
189
|
const TILES_LOAD_FAILED = 'Failed Tile Loads';
|
|
177
|
-
const POINTS_COUNT = 'Points';
|
|
190
|
+
const POINTS_COUNT = 'Points/Vertices';
|
|
178
191
|
const TILES_GPU_MEMORY = 'Tile Memory Use';
|
|
179
192
|
|
|
180
|
-
export
|
|
193
|
+
export class Tileset3D {
|
|
181
194
|
// props: Tileset3DProps;
|
|
182
195
|
options: Props;
|
|
183
196
|
loadOptions: {[key: string]: any};
|
|
@@ -204,9 +217,14 @@ export default class Tileset3D {
|
|
|
204
217
|
|
|
205
218
|
stats: Stats;
|
|
206
219
|
|
|
220
|
+
/** flags that contain information about data types in nested tiles */
|
|
221
|
+
contentFormats = {draco: false, meshopt: false, dds: false, ktx2: false};
|
|
222
|
+
|
|
207
223
|
traverseCounter: number;
|
|
208
224
|
geometricError: number;
|
|
209
225
|
selectedTiles: Tile3D[];
|
|
226
|
+
private updatePromise: Promise<number> | null = null;
|
|
227
|
+
tilesetInitializationPromise: Promise<void>;
|
|
210
228
|
|
|
211
229
|
cartographicCenter: Vector3 | null;
|
|
212
230
|
cartesianCenter: Vector3 | null;
|
|
@@ -235,7 +253,7 @@ export default class Tileset3D {
|
|
|
235
253
|
private _pendingCount: any;
|
|
236
254
|
|
|
237
255
|
// HOLD TRAVERSAL RESULTS
|
|
238
|
-
private lastUpdatedVieports:
|
|
256
|
+
private lastUpdatedVieports: Viewport[] | Viewport | null;
|
|
239
257
|
private _requestedTiles: any;
|
|
240
258
|
private _emptyTiles: any;
|
|
241
259
|
private frameStateData: any;
|
|
@@ -324,7 +342,7 @@ export default class Tileset3D {
|
|
|
324
342
|
this.credits = {};
|
|
325
343
|
this.description = this.options.description || '';
|
|
326
344
|
|
|
327
|
-
this._initializeTileSet(json);
|
|
345
|
+
this.tilesetInitializationPromise = this._initializeTileSet(json);
|
|
328
346
|
}
|
|
329
347
|
|
|
330
348
|
/** Release resources */
|
|
@@ -335,7 +353,7 @@ export default class Tileset3D {
|
|
|
335
353
|
/** Is the tileset loaded (update needs to have been called at least once) */
|
|
336
354
|
isLoaded(): boolean {
|
|
337
355
|
// Check that `_frameNumber !== 0` which means that update was called at least once
|
|
338
|
-
return this._pendingCount === 0 && this._frameNumber !== 0;
|
|
356
|
+
return this._pendingCount === 0 && this._frameNumber !== 0 && this._requestedTiles.length === 0;
|
|
339
357
|
}
|
|
340
358
|
|
|
341
359
|
get tiles(): object[] {
|
|
@@ -382,31 +400,68 @@ export default class Tileset3D {
|
|
|
382
400
|
/**
|
|
383
401
|
* Update visible tiles relying on a list of viewports
|
|
384
402
|
* @param viewports - list of viewports
|
|
403
|
+
* @deprecated
|
|
404
|
+
*/
|
|
405
|
+
update(viewports: Viewport[] | Viewport | null = null) {
|
|
406
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
407
|
+
this.tilesetInitializationPromise.then(() => {
|
|
408
|
+
if (!viewports && this.lastUpdatedVieports) {
|
|
409
|
+
viewports = this.lastUpdatedVieports;
|
|
410
|
+
} else {
|
|
411
|
+
this.lastUpdatedVieports = viewports;
|
|
412
|
+
}
|
|
413
|
+
if (viewports) {
|
|
414
|
+
this.doUpdate(viewports);
|
|
415
|
+
}
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
/**
|
|
420
|
+
* Update visible tiles relying on a list of viewports.
|
|
421
|
+
* Do it with debounce delay to prevent update spam
|
|
422
|
+
* @param viewports viewports
|
|
423
|
+
* @returns Promise of new frameNumber
|
|
424
|
+
*/
|
|
425
|
+
async selectTiles(viewports: Viewport[] | Viewport | null = null): Promise<number> {
|
|
426
|
+
await this.tilesetInitializationPromise;
|
|
427
|
+
if (viewports) {
|
|
428
|
+
this.lastUpdatedVieports = viewports;
|
|
429
|
+
}
|
|
430
|
+
if (!this.updatePromise) {
|
|
431
|
+
this.updatePromise = new Promise<number>((resolve) => {
|
|
432
|
+
setTimeout(() => {
|
|
433
|
+
if (this.lastUpdatedVieports) {
|
|
434
|
+
this.doUpdate(this.lastUpdatedVieports);
|
|
435
|
+
}
|
|
436
|
+
resolve(this._frameNumber);
|
|
437
|
+
this.updatePromise = null;
|
|
438
|
+
}, this.options.debounceTime);
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
return this.updatePromise;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
/**
|
|
445
|
+
* Update visible tiles relying on a list of viewports
|
|
446
|
+
* @param viewports viewports
|
|
385
447
|
*/
|
|
386
448
|
// eslint-disable-next-line max-statements, complexity
|
|
387
|
-
|
|
449
|
+
private doUpdate(viewports: Viewport[] | Viewport): void {
|
|
388
450
|
if ('loadTiles' in this.options && !this.options.loadTiles) {
|
|
389
451
|
return;
|
|
390
452
|
}
|
|
391
453
|
if (this.traverseCounter > 0) {
|
|
392
454
|
return;
|
|
393
455
|
}
|
|
394
|
-
|
|
395
|
-
viewports = this.lastUpdatedVieports;
|
|
396
|
-
} else {
|
|
397
|
-
this.lastUpdatedVieports = viewports;
|
|
398
|
-
}
|
|
399
|
-
if (!(viewports instanceof Array)) {
|
|
400
|
-
viewports = [viewports];
|
|
401
|
-
}
|
|
456
|
+
const preparedViewports = viewports instanceof Array ? viewports : [viewports];
|
|
402
457
|
|
|
403
458
|
this._cache.reset();
|
|
404
459
|
this._frameNumber++;
|
|
405
|
-
this.traverseCounter =
|
|
460
|
+
this.traverseCounter = preparedViewports.length;
|
|
406
461
|
const viewportsToTraverse: string[] = [];
|
|
407
462
|
// First loop to decrement traverseCounter
|
|
408
|
-
for (const viewport of
|
|
409
|
-
const id = viewport.id
|
|
463
|
+
for (const viewport of preparedViewports) {
|
|
464
|
+
const id = viewport.id;
|
|
410
465
|
if (this._needTraverse(id)) {
|
|
411
466
|
viewportsToTraverse.push(id);
|
|
412
467
|
} else {
|
|
@@ -415,8 +470,8 @@ export default class Tileset3D {
|
|
|
415
470
|
}
|
|
416
471
|
|
|
417
472
|
// Second loop to traverse
|
|
418
|
-
for (const viewport of
|
|
419
|
-
const id = viewport.id
|
|
473
|
+
for (const viewport of preparedViewports) {
|
|
474
|
+
const id = viewport.id;
|
|
420
475
|
if (!this.roots[id]) {
|
|
421
476
|
this.roots[id] = this._initializeTileHeaders(this.tileset, null);
|
|
422
477
|
}
|
|
@@ -424,7 +479,7 @@ export default class Tileset3D {
|
|
|
424
479
|
if (!viewportsToTraverse.includes(id)) {
|
|
425
480
|
continue; // eslint-disable-line no-continue
|
|
426
481
|
}
|
|
427
|
-
const frameState = getFrameState(viewport, this._frameNumber);
|
|
482
|
+
const frameState = getFrameState(viewport as GeospatialViewport, this._frameNumber);
|
|
428
483
|
this._traverser.traverse(this.roots[id], frameState, this.options);
|
|
429
484
|
}
|
|
430
485
|
}
|
|
@@ -457,7 +512,16 @@ export default class Tileset3D {
|
|
|
457
512
|
}
|
|
458
513
|
const currentFrameStateData = this.frameStateData[id];
|
|
459
514
|
const selectedTiles = Object.values(this._traverser.selectedTiles);
|
|
460
|
-
|
|
515
|
+
const [filteredSelectedTiles, unselectedTiles] = limitSelectedTiles(
|
|
516
|
+
selectedTiles,
|
|
517
|
+
frameState,
|
|
518
|
+
this.options.maximumTilesSelected
|
|
519
|
+
);
|
|
520
|
+
currentFrameStateData.selectedTiles = filteredSelectedTiles;
|
|
521
|
+
for (const tile of unselectedTiles) {
|
|
522
|
+
tile.unselect();
|
|
523
|
+
}
|
|
524
|
+
|
|
461
525
|
currentFrameStateData._requestedTiles = Object.values(this._traverser.requestedTiles);
|
|
462
526
|
currentFrameStateData._emptyTiles = Object.values(this._traverser.emptyTiles);
|
|
463
527
|
|
|
@@ -531,6 +595,9 @@ export default class Tileset3D {
|
|
|
531
595
|
tilesRenderable++;
|
|
532
596
|
if (tile.content.pointCount) {
|
|
533
597
|
pointsRenderable += tile.content.pointCount;
|
|
598
|
+
} else {
|
|
599
|
+
// Calculate vertices for non point cloud tiles.
|
|
600
|
+
pointsRenderable += tile.content.vertexCount;
|
|
534
601
|
}
|
|
535
602
|
}
|
|
536
603
|
}
|
|
@@ -540,37 +607,92 @@ export default class Tileset3D {
|
|
|
540
607
|
this.stats.get(POINTS_COUNT).count = pointsRenderable;
|
|
541
608
|
}
|
|
542
609
|
|
|
543
|
-
_initializeTileSet(tilesetJson) {
|
|
610
|
+
async _initializeTileSet(tilesetJson) {
|
|
611
|
+
if (this.type === TILESET_TYPE.I3S) {
|
|
612
|
+
this.calculateViewPropsI3S();
|
|
613
|
+
tilesetJson.root = await tilesetJson.root;
|
|
614
|
+
}
|
|
544
615
|
this.root = this._initializeTileHeaders(tilesetJson, null);
|
|
545
616
|
|
|
546
|
-
// TODO CESIUM Specific
|
|
547
617
|
if (this.type === TILESET_TYPE.TILES3D) {
|
|
548
|
-
this.
|
|
618
|
+
this._initializeTiles3DTileset(tilesetJson);
|
|
619
|
+
this.calculateViewPropsTiles3D();
|
|
549
620
|
}
|
|
550
621
|
|
|
551
622
|
if (this.type === TILESET_TYPE.I3S) {
|
|
552
623
|
this._initializeI3STileset();
|
|
553
624
|
}
|
|
554
|
-
// Calculate cartographicCenter & zoom props to help apps center view on tileset
|
|
555
|
-
this._calculateViewProps();
|
|
556
625
|
}
|
|
557
626
|
|
|
558
|
-
|
|
559
|
-
|
|
627
|
+
/**
|
|
628
|
+
* Called during initialize Tileset to initialize the tileset's cartographic center (longitude, latitude) and zoom.
|
|
629
|
+
* These metrics help apps center view on tileset
|
|
630
|
+
* For I3S there is extent (<1.8 version) or fullExtent (>=1.8 version) to calculate view props
|
|
631
|
+
* @returns
|
|
632
|
+
*/
|
|
633
|
+
private calculateViewPropsI3S() {
|
|
634
|
+
// for I3S 1.8 try to calculate with fullExtent
|
|
635
|
+
const fullExtent = this.tileset.fullExtent;
|
|
636
|
+
if (fullExtent) {
|
|
637
|
+
const {xmin, xmax, ymin, ymax, zmin, zmax} = fullExtent;
|
|
638
|
+
this.cartographicCenter = new Vector3(
|
|
639
|
+
xmin + (xmax - xmin) / 2,
|
|
640
|
+
ymin + (ymax - ymin) / 2,
|
|
641
|
+
zmin + (zmax - zmin) / 2
|
|
642
|
+
);
|
|
643
|
+
this.cartesianCenter = Ellipsoid.WGS84.cartographicToCartesian(
|
|
644
|
+
this.cartographicCenter,
|
|
645
|
+
new Vector3()
|
|
646
|
+
);
|
|
647
|
+
this.zoom = getZoomFromFullExtent(fullExtent, this.cartographicCenter, this.cartesianCenter);
|
|
648
|
+
return;
|
|
649
|
+
}
|
|
650
|
+
// for I3S 1.6-1.7 try to calculate with extent
|
|
651
|
+
const extent = this.tileset.store?.extent;
|
|
652
|
+
if (extent) {
|
|
653
|
+
const [xmin, ymin, xmax, ymax] = extent;
|
|
654
|
+
this.cartographicCenter = new Vector3(xmin + (xmax - xmin) / 2, ymin + (ymax - ymin) / 2, 0);
|
|
655
|
+
this.cartesianCenter = Ellipsoid.WGS84.cartographicToCartesian(
|
|
656
|
+
this.cartographicCenter,
|
|
657
|
+
new Vector3()
|
|
658
|
+
);
|
|
659
|
+
this.zoom = getZoomFromExtent(extent, this.cartographicCenter, this.cartesianCenter);
|
|
660
|
+
return;
|
|
661
|
+
}
|
|
662
|
+
// eslint-disable-next-line no-console
|
|
663
|
+
console.warn('Extent is not defined in the tileset header');
|
|
664
|
+
this.cartographicCenter = new Vector3();
|
|
665
|
+
this.zoom = 1;
|
|
666
|
+
return;
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
/**
|
|
670
|
+
* Called during initialize Tileset to initialize the tileset's cartographic center (longitude, latitude) and zoom.
|
|
671
|
+
* These metrics help apps center view on tileset.
|
|
672
|
+
* For 3DTiles the root tile data is used to calculate view props.
|
|
673
|
+
* @returns
|
|
674
|
+
*/
|
|
675
|
+
private calculateViewPropsTiles3D() {
|
|
560
676
|
const root = this.root as Tile3D;
|
|
561
677
|
assert(root);
|
|
562
678
|
const {center} = root.boundingVolume;
|
|
563
679
|
// TODO - handle all cases
|
|
564
680
|
if (!center) {
|
|
565
|
-
// eslint-disable-next-line
|
|
681
|
+
// eslint-disable-next-line no-console
|
|
566
682
|
console.warn('center was not pre-calculated for the root tile');
|
|
567
683
|
this.cartographicCenter = new Vector3();
|
|
568
684
|
this.zoom = 1;
|
|
569
685
|
return;
|
|
570
686
|
}
|
|
571
|
-
|
|
687
|
+
|
|
688
|
+
// cartographic coordinates are undefined at the center of the ellipsoid
|
|
689
|
+
if (center[0] !== 0 || center[1] !== 0 || center[2] !== 0) {
|
|
690
|
+
this.cartographicCenter = Ellipsoid.WGS84.cartesianToCartographic(center, new Vector3());
|
|
691
|
+
} else {
|
|
692
|
+
this.cartographicCenter = new Vector3(0, 0, -Ellipsoid.WGS84.radii[0]);
|
|
693
|
+
}
|
|
572
694
|
this.cartesianCenter = center;
|
|
573
|
-
this.zoom = getZoomFromBoundingVolume(root.boundingVolume);
|
|
695
|
+
this.zoom = getZoomFromBoundingVolume(root.boundingVolume, this.cartographicCenter);
|
|
574
696
|
}
|
|
575
697
|
|
|
576
698
|
_initializeStats() {
|
|
@@ -582,7 +704,7 @@ export default class Tileset3D {
|
|
|
582
704
|
this.stats.get(TILES_LOADED);
|
|
583
705
|
this.stats.get(TILES_UNLOADED);
|
|
584
706
|
this.stats.get(TILES_LOAD_FAILED);
|
|
585
|
-
this.stats.get(POINTS_COUNT
|
|
707
|
+
this.stats.get(POINTS_COUNT);
|
|
586
708
|
this.stats.get(TILES_GPU_MEMORY, 'memory');
|
|
587
709
|
}
|
|
588
710
|
|
|
@@ -600,7 +722,7 @@ export default class Tileset3D {
|
|
|
600
722
|
rootTile.depth = parentTileHeader.depth + 1;
|
|
601
723
|
}
|
|
602
724
|
|
|
603
|
-
//
|
|
725
|
+
// 3DTiles knows the hierarchy beforehand
|
|
604
726
|
if (this.type === TILESET_TYPE.TILES3D) {
|
|
605
727
|
const stack: Tile3D[] = [];
|
|
606
728
|
stack.push(rootTile);
|
|
@@ -629,7 +751,7 @@ export default class Tileset3D {
|
|
|
629
751
|
TraverserClass = Tileset3DTraverser;
|
|
630
752
|
break;
|
|
631
753
|
case TILESET_TYPE.I3S:
|
|
632
|
-
TraverserClass =
|
|
754
|
+
TraverserClass = I3STilesetTraverser;
|
|
633
755
|
break;
|
|
634
756
|
default:
|
|
635
757
|
TraverserClass = TilesetTraverser;
|
|
@@ -673,15 +795,55 @@ export default class Tileset3D {
|
|
|
673
795
|
return;
|
|
674
796
|
}
|
|
675
797
|
|
|
798
|
+
if (this.type === TILESET_TYPE.I3S) {
|
|
799
|
+
// We can't calculate tiles total in I3S in advance so we calculate it dynamically.
|
|
800
|
+
const nodesInNodePages = this.tileset?.nodePagesTile?.nodesInNodePages || 0;
|
|
801
|
+
this.stats.get(TILES_TOTAL).reset();
|
|
802
|
+
this.stats.get(TILES_TOTAL).addCount(nodesInNodePages);
|
|
803
|
+
}
|
|
804
|
+
|
|
676
805
|
// add coordinateOrigin and modelMatrix to tile
|
|
677
806
|
if (tile && tile.content) {
|
|
678
807
|
calculateTransformProps(tile, tile.content);
|
|
679
808
|
}
|
|
680
809
|
|
|
810
|
+
this.updateContentTypes(tile);
|
|
681
811
|
this._addTileToCache(tile);
|
|
682
812
|
this.options.onTileLoad(tile);
|
|
683
813
|
}
|
|
684
814
|
|
|
815
|
+
/**
|
|
816
|
+
* Update information about data types in nested tiles
|
|
817
|
+
* @param tile instance of a nested Tile3D
|
|
818
|
+
*/
|
|
819
|
+
private updateContentTypes(tile: Tile3D) {
|
|
820
|
+
if (this.type === TILESET_TYPE.I3S) {
|
|
821
|
+
if (tile.header.isDracoGeometry) {
|
|
822
|
+
this.contentFormats.draco = true;
|
|
823
|
+
}
|
|
824
|
+
switch (tile.header.textureFormat) {
|
|
825
|
+
case 'dds':
|
|
826
|
+
this.contentFormats.dds = true;
|
|
827
|
+
break;
|
|
828
|
+
case 'ktx2':
|
|
829
|
+
this.contentFormats.ktx2 = true;
|
|
830
|
+
break;
|
|
831
|
+
default:
|
|
832
|
+
}
|
|
833
|
+
} else if (this.type === TILESET_TYPE.TILES3D) {
|
|
834
|
+
const {extensionsRemoved = []} = tile.content?.gltf || {};
|
|
835
|
+
if (extensionsRemoved.includes('KHR_draco_mesh_compression')) {
|
|
836
|
+
this.contentFormats.draco = true;
|
|
837
|
+
}
|
|
838
|
+
if (extensionsRemoved.includes('EXT_meshopt_compression')) {
|
|
839
|
+
this.contentFormats.meshopt = true;
|
|
840
|
+
}
|
|
841
|
+
if (extensionsRemoved.includes('KHR_texture_basisu')) {
|
|
842
|
+
this.contentFormats.ktx2 = true;
|
|
843
|
+
}
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
|
|
685
847
|
_onStartTileLoading() {
|
|
686
848
|
this._pendingCount++;
|
|
687
849
|
this.stats.get(TILES_LOADING).incrementCount();
|
|
@@ -759,7 +921,7 @@ export default class Tileset3D {
|
|
|
759
921
|
tile.destroy();
|
|
760
922
|
}
|
|
761
923
|
|
|
762
|
-
|
|
924
|
+
_initializeTiles3DTileset(tilesetJson) {
|
|
763
925
|
this.asset = tilesetJson.asset;
|
|
764
926
|
if (!this.asset) {
|
|
765
927
|
throw new Error('Tileset must have an asset property.');
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
// loaders.gl, MIT license
|
|
2
|
+
|
|
1
3
|
// This file is derived from the Cesium code base under Apache 2 license
|
|
2
4
|
// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md
|
|
3
5
|
|
|
4
|
-
import DoublyLinkedList from '../utils/doubly-linked-list';
|
|
6
|
+
import {DoublyLinkedList} from '../utils/doubly-linked-list';
|
|
5
7
|
|
|
6
8
|
function defined(x) {
|
|
7
9
|
return x !== undefined && x !== null;
|
|
@@ -12,7 +14,7 @@ function defined(x) {
|
|
|
12
14
|
*
|
|
13
15
|
* @private
|
|
14
16
|
*/
|
|
15
|
-
export
|
|
17
|
+
export class TilesetCache {
|
|
16
18
|
private _list: DoublyLinkedList;
|
|
17
19
|
private _sentinel: any;
|
|
18
20
|
private _trimTiles: boolean;
|
|
@@ -80,7 +82,9 @@ export default class TilesetCache {
|
|
|
80
82
|
node !== sentinel &&
|
|
81
83
|
(tileset.gpuMemoryUsageInBytes > maximumMemoryUsageInBytes || trimTiles)
|
|
82
84
|
) {
|
|
85
|
+
// @ts-expect-error
|
|
83
86
|
const tile = node.item;
|
|
87
|
+
// @ts-expect-error
|
|
84
88
|
node = node.next;
|
|
85
89
|
this.unloadTile(tileset, tile, unloadCallback);
|
|
86
90
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import ManagedArray from '
|
|
2
|
-
import {TILE_REFINEMENT} from '
|
|
1
|
+
import {ManagedArray} from '../utils/managed-array';
|
|
2
|
+
import {TILE_REFINEMENT} from '../constants';
|
|
3
|
+
import {FrameState} from './helpers/frame-state';
|
|
3
4
|
|
|
4
5
|
export type TilesetTraverserProps = {
|
|
5
6
|
loadSiblings?: boolean;
|
|
@@ -8,19 +9,20 @@ export type TilesetTraverserProps = {
|
|
|
8
9
|
onTraversalEnd?: (frameState) => any;
|
|
9
10
|
viewportTraversersMap?: {[key: string]: any};
|
|
10
11
|
basePath?: string;
|
|
12
|
+
updateTransforms?: boolean;
|
|
11
13
|
};
|
|
12
14
|
|
|
13
|
-
export type Props = {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
export const DEFAULT_PROPS:
|
|
15
|
+
// export type Props = {
|
|
16
|
+
// loadSiblings: boolean;
|
|
17
|
+
// skipLevelOfDetail: boolean;
|
|
18
|
+
// updateTransforms: boolean;
|
|
19
|
+
// maximumScreenSpaceError: number;
|
|
20
|
+
// onTraversalEnd: (frameState) => any;
|
|
21
|
+
// viewportTraversersMap: {[key: string]: any};
|
|
22
|
+
// basePath: string;
|
|
23
|
+
// };
|
|
24
|
+
|
|
25
|
+
export const DEFAULT_PROPS: Required<TilesetTraverserProps> = {
|
|
24
26
|
loadSiblings: false,
|
|
25
27
|
skipLevelOfDetail: false,
|
|
26
28
|
maximumScreenSpaceError: 2,
|
|
@@ -30,18 +32,24 @@ export const DEFAULT_PROPS: Props = {
|
|
|
30
32
|
basePath: ''
|
|
31
33
|
};
|
|
32
34
|
|
|
33
|
-
export
|
|
34
|
-
options:
|
|
35
|
+
export class TilesetTraverser {
|
|
36
|
+
options: Required<TilesetTraverserProps>;
|
|
35
37
|
|
|
36
38
|
root: any;
|
|
37
39
|
requestedTiles: object;
|
|
38
40
|
selectedTiles: object;
|
|
39
41
|
emptyTiles: object;
|
|
40
42
|
|
|
43
|
+
protected lastUpdate: number = new Date().getTime();
|
|
44
|
+
protected readonly updateDebounceTime = 1000;
|
|
41
45
|
protected _traversalStack: ManagedArray;
|
|
42
46
|
protected _emptyTraversalStack: ManagedArray;
|
|
43
47
|
protected _frameNumber: number | null;
|
|
44
48
|
|
|
49
|
+
protected traversalFinished(frameState: FrameState): boolean {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
|
|
45
53
|
// TODO nested props
|
|
46
54
|
constructor(options: TilesetTraverserProps) {
|
|
47
55
|
this.options = {...DEFAULT_PROPS, ...options};
|
|
@@ -96,7 +104,7 @@ export default class TilesetTraverser {
|
|
|
96
104
|
// all other tiles are part of the skip traversal. The skip traversal allows for skipping levels of the tree
|
|
97
105
|
// and rendering children and parent tiles simultaneously.
|
|
98
106
|
/* eslint-disable-next-line complexity, max-statements */
|
|
99
|
-
executeTraversal(root, frameState) {
|
|
107
|
+
executeTraversal(root, frameState: FrameState) {
|
|
100
108
|
// stack to store traversed tiles, only visible tiles should be added to stack
|
|
101
109
|
// visible: visible in the current view frustum
|
|
102
110
|
const stack = this._traversalStack;
|
|
@@ -156,7 +164,11 @@ export default class TilesetTraverser {
|
|
|
156
164
|
tile._shouldRefine = shouldRefine && parentRefines;
|
|
157
165
|
}
|
|
158
166
|
|
|
159
|
-
|
|
167
|
+
const newTime = new Date().getTime();
|
|
168
|
+
if (this.traversalFinished(frameState) || newTime - this.lastUpdate > this.updateDebounceTime) {
|
|
169
|
+
this.lastUpdate = newTime;
|
|
170
|
+
this.options.onTraversalEnd(frameState);
|
|
171
|
+
}
|
|
160
172
|
}
|
|
161
173
|
|
|
162
174
|
updateChildTiles(tile, frameState) {
|
package/src/types.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import {Vector3} from '@math.gl/core';
|
|
2
|
+
|
|
3
|
+
export type BoundingRectangle = {
|
|
4
|
+
width: number;
|
|
5
|
+
height: number;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
/** Deck.gl Viewport instance type.
|
|
9
|
+
* We can't import it from Deck.gl to avoid circular reference */
|
|
10
|
+
export type Viewport = {
|
|
11
|
+
id: string;
|
|
12
|
+
cameraPosition: number[] | Vector3;
|
|
13
|
+
height: number;
|
|
14
|
+
width: number;
|
|
15
|
+
zoom: number;
|
|
16
|
+
distanceScales: {
|
|
17
|
+
unitsPerMeter: number[];
|
|
18
|
+
metersPerUnit: number[];
|
|
19
|
+
};
|
|
20
|
+
center: number[] | Vector3;
|
|
21
|
+
unprojectPosition: (position: number[] | Vector3) => [number, number, number];
|
|
22
|
+
project: (coorinates: number[] | Vector3) => number[];
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Contain extra fields from WebMercatorViewport and FirstPersonViewport
|
|
27
|
+
*/
|
|
28
|
+
export type GeospatialViewport = Viewport & {
|
|
29
|
+
/** @todo This field is not represented in Deck.gl viewports. Can be removed in the next version */
|
|
30
|
+
cameraDirection: [number, number, number];
|
|
31
|
+
/** @todo This field is not represented in Deck.gl viewports. Can be removed in the next version */
|
|
32
|
+
cameraUp: [number, number, number];
|
|
33
|
+
longitude: number;
|
|
34
|
+
latitude: number;
|
|
35
|
+
bearing: number;
|
|
36
|
+
};
|
|
@@ -1,12 +1,17 @@
|
|
|
1
|
+
// loaders.gl, MIT license
|
|
2
|
+
|
|
1
3
|
// This file is derived from the Cesium code base under Apache 2 license
|
|
2
4
|
// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md
|
|
3
5
|
|
|
4
6
|
/**
|
|
5
7
|
* Doubly linked list node
|
|
6
|
-
*
|
|
7
8
|
* @private
|
|
8
9
|
*/
|
|
9
|
-
export
|
|
10
|
+
export class DoublyLinkedListNode {
|
|
11
|
+
item;
|
|
12
|
+
previous;
|
|
13
|
+
next;
|
|
14
|
+
|
|
10
15
|
constructor(item, previous, next) {
|
|
11
16
|
this.item = item;
|
|
12
17
|
this.previous = previous;
|
|
@@ -1,19 +1,16 @@
|
|
|
1
1
|
// This file is derived from the Cesium code base under Apache 2 license
|
|
2
2
|
// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md
|
|
3
3
|
|
|
4
|
-
import DoublyLinkedListNode from '
|
|
4
|
+
import {DoublyLinkedListNode} from './doubly-linked-list-node';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Doubly linked list
|
|
8
|
-
*
|
|
9
8
|
* @private
|
|
10
9
|
*/
|
|
11
|
-
export
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
this._length = 0;
|
|
16
|
-
}
|
|
10
|
+
export class DoublyLinkedList {
|
|
11
|
+
head: DoublyLinkedListNode | null = null;
|
|
12
|
+
tail: DoublyLinkedListNode | null = null;
|
|
13
|
+
_length = 0;
|
|
17
14
|
|
|
18
15
|
get length() {
|
|
19
16
|
return this._length;
|
|
@@ -12,10 +12,13 @@ import {assert} from '@loaders.gl/loader-utils';
|
|
|
12
12
|
*
|
|
13
13
|
* @param {Number} [length=0] The initial length of the array.
|
|
14
14
|
*/
|
|
15
|
-
export
|
|
15
|
+
export class ManagedArray {
|
|
16
|
+
_map = new Map();
|
|
17
|
+
_array: any[];
|
|
18
|
+
_length: number;
|
|
19
|
+
|
|
16
20
|
constructor(length = 0) {
|
|
17
21
|
this._array = new Array(length);
|
|
18
|
-
this._map = new Map();
|
|
19
22
|
this._length = length;
|
|
20
23
|
}
|
|
21
24
|
|
package/dist/bundle.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/bundle.ts"],"names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"mappings":"AACA,MAAMA,aAAa,GAAGC,OAAO,CAAC,SAAD,CAA7B;;AACAC,UAAU,CAACC,OAAX,GAAqBD,UAAU,CAACC,OAAX,IAAsB,EAA3C;AACAC,MAAM,CAACC,OAAP,GAAiBC,MAAM,CAACC,MAAP,CAAcL,UAAU,CAACC,OAAzB,EAAkCH,aAAlC,CAAjB","sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"file":"bundle.js"}
|
package/dist/constants.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants.ts"],"names":["TILE_CONTENT_STATE","UNLOADED","LOADING","PROCESSING","READY","EXPIRED","FAILED","TILE_REFINEMENT","ADD","REPLACE","TILE_TYPE","EMPTY","SCENEGRAPH","POINTCLOUD","MESH","TILESET_TYPE","I3S","TILES3D","LOD_METRIC_TYPE","GEOMETRIC_ERROR","MAX_SCREEN_THRESHOLD","TILE3D_OPTIMIZATION_HINT","NOT_COMPUTED","USE_OPTIMIZATION","SKIP_OPTIMIZATION"],"mappings":"AAAA,OAAO,MAAMA,kBAAkB,GAAG;AAChCC,EAAAA,QAAQ,EAAE,CADsB;AAEhCC,EAAAA,OAAO,EAAE,CAFuB;AAGhCC,EAAAA,UAAU,EAAE,CAHoB;AAIhCC,EAAAA,KAAK,EAAE,CAJyB;AAKhCC,EAAAA,OAAO,EAAE,CALuB;AAMhCC,EAAAA,MAAM,EAAE;AANwB,CAA3B;AASP,OAAO,MAAMC,eAAe,GAAG;AAC7BC,EAAAA,GAAG,EAAE,CADwB;AAE7BC,EAAAA,OAAO,EAAE;AAFoB,CAAxB;AAKP,OAAO,MAAMC,SAAS,GAAG;AACvBC,EAAAA,KAAK,EAAE,OADgB;AAEvBC,EAAAA,UAAU,EAAE,YAFW;AAGvBC,EAAAA,UAAU,EAAE,YAHW;AAIvBC,EAAAA,IAAI,EAAE;AAJiB,CAAlB;AAOP,OAAO,MAAMC,YAAY,GAAG;AAC1BC,EAAAA,GAAG,EAAE,KADqB;AAE1BC,EAAAA,OAAO,EAAE;AAFiB,CAArB;AAKP,OAAO,MAAMC,eAAe,GAAG;AAC7BC,EAAAA,eAAe,EAAE,gBADY;AAE7BC,EAAAA,oBAAoB,EAAE;AAFO,CAAxB;AAMP,OAAO,MAAMC,wBAAwB,GAAG;AACtCC,EAAAA,YAAY,EAAE,CAAC,CADuB;AAEtCC,EAAAA,gBAAgB,EAAE,CAFoB;AAGtCC,EAAAA,iBAAiB,EAAE;AAHmB,CAAjC","sourcesContent":["export const TILE_CONTENT_STATE = {\n UNLOADED: 0, // Has never been requested\n LOADING: 1, // Is waiting on a pending request\n PROCESSING: 2, // Request received. Contents are being processed for rendering. Depending on the content, it might make its own requests for external data.\n READY: 3, // Ready to render.\n EXPIRED: 4, // Is expired and will be unloaded once new content is loaded.\n FAILED: 5 // Request failed.\n};\n\nexport const TILE_REFINEMENT = {\n ADD: 1, // Render tile and, if screen space error exceeded, also refine to its children.\n REPLACE: 2 // Render tile or, if screen space error exceeded, refine to its descendants instead.\n};\n\nexport const TILE_TYPE = {\n EMPTY: 'empty',\n SCENEGRAPH: 'scenegraph',\n POINTCLOUD: 'pointcloud',\n MESH: 'mesh'\n};\n\nexport const TILESET_TYPE = {\n I3S: 'I3S',\n TILES3D: 'TILES3D'\n};\n\nexport const LOD_METRIC_TYPE = {\n GEOMETRIC_ERROR: 'geometricError',\n MAX_SCREEN_THRESHOLD: 'maxScreenThreshold'\n};\n\n// Cesium 3D Tiles Specific\nexport const TILE3D_OPTIMIZATION_HINT = {\n NOT_COMPUTED: -1,\n USE_OPTIMIZATION: 1,\n SKIP_OPTIMIZATION: 0\n};\n"],"file":"constants.js"}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":["default","Tileset3D","Tile3D","TilesetTraverser","TilesetCache","createBoundingVolume","calculateTransformProps","getFrameState","TILE_CONTENT_STATE","TILE_REFINEMENT","TILE_TYPE","TILESET_TYPE","LOD_METRIC_TYPE"],"mappings":"AACA,SAAQA,OAAO,IAAIC,SAAnB,QAAmC,sBAAnC;AACA,SAAQD,OAAO,IAAIE,MAAnB,QAAgC,mBAAhC;AAEA,SAAQF,OAAO,IAAIG,gBAAnB,QAA0C,wCAA1C;AACA,SAAQH,OAAO,IAAII,YAAnB,QAAsC,yBAAtC;AAEA,SAAQC,oBAAR,QAAmC,mCAAnC;AACA,SAAQC,uBAAR,QAAsC,mCAAtC;AAEA,SAAQC,aAAR,QAA4B,+BAA5B;AAEA,SACEC,kBADF,EAEEC,eAFF,EAGEC,SAHF,EAIEC,YAJF,EAKEC,eALF,QAMO,aANP","sourcesContent":["export type {Tileset3DProps} from './tileset/tileset-3d';\nexport {default as Tileset3D} from './tileset/tileset-3d';\nexport {default as Tile3D} from './tileset/tile-3d';\n\nexport {default as TilesetTraverser} from './tileset/traversers/tileset-traverser';\nexport {default as TilesetCache} from './tileset/tileset-cache';\n\nexport {createBoundingVolume} from './tileset/helpers/bounding-volume';\nexport {calculateTransformProps} from './tileset/helpers/transform-utils';\n\nexport {getFrameState} from './tileset/helpers/frame-state';\n\nexport {\n TILE_CONTENT_STATE,\n TILE_REFINEMENT,\n TILE_TYPE,\n TILESET_TYPE,\n LOD_METRIC_TYPE\n} from './constants';\n"],"file":"index.js"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/tileset/helpers/3d-tiles-options.ts"],"names":["get3dTilesOptions","tileset","assetGltfUpAxis","asset","gltfUpAxis"],"mappings":"AAAA,OAAO,SAASA,iBAAT,CAA2BC,OAA3B,EAAoC;AACzC,SAAO;AACLC,IAAAA,eAAe,EAAGD,OAAO,CAACE,KAAR,IAAiBF,OAAO,CAACE,KAAR,CAAcC,UAAhC,IAA+C;AAD3D,GAAP;AAGD","sourcesContent":["export function get3dTilesOptions(tileset) {\n return {\n assetGltfUpAxis: (tileset.asset && tileset.asset.gltfUpAxis) || 'Y'\n };\n}\n"],"file":"3d-tiles-options.js"}
|