@loaders.gl/tiles 4.0.0-alpha.5 → 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.js +2 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +30 -26
- package/dist/dist.min.js +1572 -855
- 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 +14 -26
- 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 +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -10
- package/dist/tileset/{traversers → format-3d-tiles}/tileset-3d-traverser.d.ts +2 -2
- 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.js +8 -5
- package/dist/tileset/helpers/bounding-volume.d.ts +10 -0
- package/dist/tileset/helpers/bounding-volume.d.ts.map +1 -1
- package/dist/tileset/helpers/bounding-volume.js +274 -69
- package/dist/tileset/helpers/frame-state.d.ts +16 -5
- package/dist/tileset/helpers/frame-state.d.ts.map +1 -1
- package/dist/tileset/helpers/frame-state.js +131 -49
- package/dist/tileset/helpers/i3s-lod.d.ts +1 -1
- package/dist/tileset/helpers/i3s-lod.d.ts.map +1 -1
- package/dist/tileset/helpers/i3s-lod.js +82 -64
- package/dist/tileset/helpers/tiles-3d-lod.d.ts.map +1 -1
- package/dist/tileset/helpers/tiles-3d-lod.js +112 -100
- package/dist/tileset/helpers/transform-utils.d.ts.map +1 -1
- package/dist/tileset/helpers/transform-utils.js +51 -56
- package/dist/tileset/helpers/zoom.d.ts +41 -2
- package/dist/tileset/helpers/zoom.d.ts.map +1 -1
- package/dist/tileset/helpers/zoom.js +83 -30
- package/dist/tileset/tile-3d.d.ts +45 -14
- package/dist/tileset/tile-3d.d.ts.map +1 -1
- package/dist/tileset/tile-3d.js +593 -534
- package/dist/tileset/tileset-3d.d.ts +54 -9
- package/dist/tileset/tileset-3d.d.ts.map +1 -1
- package/dist/tileset/tileset-3d.js +707 -648
- package/dist/tileset/tileset-cache.d.ts +1 -1
- package/dist/tileset/tileset-cache.d.ts.map +1 -1
- package/dist/tileset/tileset-cache.js +70 -71
- package/dist/tileset/{traversers/tileset-traverser.d.ts → tileset-traverser.d.ts} +11 -17
- 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 +1 -2
- package/dist/utils/doubly-linked-list-node.d.ts.map +1 -1
- package/dist/utils/doubly-linked-list-node.js +17 -15
- package/dist/utils/doubly-linked-list.d.ts +2 -3
- package/dist/utils/doubly-linked-list.d.ts.map +1 -1
- package/dist/utils/doubly-linked-list.js +91 -75
- package/dist/utils/managed-array.d.ts +1 -1
- package/dist/utils/managed-array.d.ts.map +1 -1
- package/dist/utils/managed-array.js +144 -109
- package/package.json +8 -8
- package/src/constants.ts +2 -0
- package/src/index.ts +6 -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 +25 -12
- 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 +24 -21
- 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 +73 -18
- package/src/tileset/tileset-3d.ts +205 -43
- package/src/tileset/tileset-cache.ts +4 -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.ts +3 -2
- package/src/utils/doubly-linked-list.ts +2 -3
- package/src/utils/managed-array.ts +1 -1
- 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.d.ts +0 -8
- package/dist/tileset/traversers/i3s-tile-manager.d.ts.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.d.ts +0 -18
- package/dist/tileset/traversers/i3s-tileset-traverser.d.ts.map +0 -1
- package/dist/tileset/traversers/i3s-tileset-traverser.js.map +0 -1
- package/dist/tileset/traversers/tileset-3d-traverser.d.ts.map +0 -1
- package/dist/tileset/traversers/tileset-3d-traverser.js.map +0 -1
- package/dist/tileset/traversers/tileset-traverser.d.ts.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
package/src/tileset/tile-3d.ts
CHANGED
|
@@ -1,20 +1,27 @@
|
|
|
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
|
|
5
|
+
|
|
3
6
|
import {Vector3, Matrix4} from '@math.gl/core';
|
|
4
7
|
import {CullingVolume} from '@math.gl/culling';
|
|
5
8
|
|
|
6
9
|
import {load} from '@loaders.gl/core';
|
|
10
|
+
|
|
11
|
+
// Note: circular dependency
|
|
12
|
+
import type {Tileset3D} from './tileset-3d';
|
|
7
13
|
import {TILE_REFINEMENT, TILE_CONTENT_STATE, TILESET_TYPE} from '../constants';
|
|
8
14
|
|
|
9
15
|
import {FrameState} from './helpers/frame-state';
|
|
10
|
-
import {
|
|
16
|
+
import {
|
|
17
|
+
createBoundingVolume,
|
|
18
|
+
getCartographicBounds,
|
|
19
|
+
CartographicBounds
|
|
20
|
+
} from './helpers/bounding-volume';
|
|
11
21
|
import {getTiles3DScreenSpaceError} from './helpers/tiles-3d-lod';
|
|
12
22
|
import {getProjectedRadius} from './helpers/i3s-lod';
|
|
13
23
|
import {get3dTilesOptions} from './helpers/3d-tiles-options';
|
|
14
|
-
import TilesetTraverser from './
|
|
15
|
-
|
|
16
|
-
// Note: circular dependency
|
|
17
|
-
import type Tileset3D from './tileset-3d';
|
|
24
|
+
import {TilesetTraverser} from './tileset-traverser';
|
|
18
25
|
|
|
19
26
|
const scratchVector = new Vector3();
|
|
20
27
|
|
|
@@ -25,14 +32,14 @@ function defined(x) {
|
|
|
25
32
|
/**
|
|
26
33
|
* @param tileset - Tileset3D instance
|
|
27
34
|
* @param header - tile header - JSON loaded from a dataset
|
|
28
|
-
* @param parentHeader - parent
|
|
35
|
+
* @param parentHeader - parent Tile3D instance
|
|
29
36
|
* @param extendedId - optional ID to separate copies of a tile for different viewports.
|
|
30
37
|
* const extendedId = `${tile.id}-${frameState.viewport.id}`;
|
|
31
38
|
*/
|
|
32
|
-
export type
|
|
39
|
+
export type Tile3DProps = {
|
|
33
40
|
tileset: Tileset3D;
|
|
34
41
|
header: Object;
|
|
35
|
-
parentHeader:
|
|
42
|
+
parentHeader: Tile3D;
|
|
36
43
|
extendedId: string;
|
|
37
44
|
};
|
|
38
45
|
|
|
@@ -41,12 +48,12 @@ export type TileHeaderProps = {
|
|
|
41
48
|
* the content is loaded on-demand when needed based on the view.
|
|
42
49
|
* Do not construct this directly, instead access tiles through {@link Tileset3D#tileVisible}.
|
|
43
50
|
*/
|
|
44
|
-
export
|
|
51
|
+
export class Tile3D {
|
|
45
52
|
tileset: Tileset3D;
|
|
46
53
|
header: any;
|
|
47
54
|
id: string;
|
|
48
55
|
url: string;
|
|
49
|
-
parent:
|
|
56
|
+
parent: Tile3D;
|
|
50
57
|
refine: number;
|
|
51
58
|
type: string;
|
|
52
59
|
contentUrl: string;
|
|
@@ -56,11 +63,12 @@ export default class TileHeader {
|
|
|
56
63
|
content: any;
|
|
57
64
|
contentState: any;
|
|
58
65
|
gpuMemoryUsageInBytes: number;
|
|
59
|
-
children:
|
|
66
|
+
children: Tile3D[];
|
|
60
67
|
depth: number;
|
|
61
68
|
viewportIds: any[];
|
|
62
69
|
transform: Matrix4;
|
|
63
70
|
extensions: any;
|
|
71
|
+
implicitTiling?: any;
|
|
64
72
|
|
|
65
73
|
// Container to store application specific data
|
|
66
74
|
userData: {[key: string]: any};
|
|
@@ -82,9 +90,10 @@ export default class TileHeader {
|
|
|
82
90
|
// @ts-ignore
|
|
83
91
|
private _shouldRefine: boolean;
|
|
84
92
|
|
|
93
|
+
private _boundingBox?: CartographicBounds;
|
|
94
|
+
|
|
85
95
|
// Members this are updated every frame for tree traversal and rendering optimizations:
|
|
86
|
-
|
|
87
|
-
private _distanceToCamera: number;
|
|
96
|
+
public _distanceToCamera: number;
|
|
88
97
|
// @ts-ignore
|
|
89
98
|
private _centerZDepth: number;
|
|
90
99
|
private _screenSpaceError: number;
|
|
@@ -115,10 +124,10 @@ export default class TileHeader {
|
|
|
115
124
|
|
|
116
125
|
/**
|
|
117
126
|
* @constructs
|
|
118
|
-
* Create a
|
|
127
|
+
* Create a Tile3D instance
|
|
119
128
|
* @param tileset - Tileset3D instance
|
|
120
129
|
* @param header - tile header - JSON loaded from a dataset
|
|
121
|
-
* @param parentHeader - parent
|
|
130
|
+
* @param parentHeader - parent Tile3D instance
|
|
122
131
|
* @param extendedId - optional ID to separate copies of a tile for different viewports.
|
|
123
132
|
* const extendedId = `${tile.id}-${frameState.viewport.id}`;
|
|
124
133
|
*/
|
|
@@ -126,7 +135,7 @@ export default class TileHeader {
|
|
|
126
135
|
constructor(
|
|
127
136
|
tileset: Tileset3D,
|
|
128
137
|
header: {[key: string]: any},
|
|
129
|
-
parentHeader?:
|
|
138
|
+
parentHeader?: Tile3D,
|
|
130
139
|
extendedId = ''
|
|
131
140
|
) {
|
|
132
141
|
// PUBLIC MEMBERS
|
|
@@ -206,6 +215,7 @@ export default class TileHeader {
|
|
|
206
215
|
// TODO Cesium 3d tiles specific
|
|
207
216
|
this._expireDate = null;
|
|
208
217
|
this._expiredContent = null;
|
|
218
|
+
this.implicitTiling = null;
|
|
209
219
|
|
|
210
220
|
Object.seal(this);
|
|
211
221
|
}
|
|
@@ -285,6 +295,31 @@ export default class TileHeader {
|
|
|
285
295
|
return this.contentState === TILE_CONTENT_STATE.FAILED;
|
|
286
296
|
}
|
|
287
297
|
|
|
298
|
+
/**
|
|
299
|
+
* Distance from the tile's bounding volume center to the camera
|
|
300
|
+
*/
|
|
301
|
+
get distanceToCamera(): number {
|
|
302
|
+
return this._distanceToCamera;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* Screen space error for LOD selection
|
|
307
|
+
*/
|
|
308
|
+
get screenSpaceError(): number {
|
|
309
|
+
return this._screenSpaceError;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* Get bounding box in cartographic coordinates
|
|
314
|
+
* @returns [min, max] each in [longitude, latitude, altitude]
|
|
315
|
+
*/
|
|
316
|
+
get boundingBox(): CartographicBounds {
|
|
317
|
+
if (!this._boundingBox) {
|
|
318
|
+
this._boundingBox = getCartographicBounds(this.header.boundingVolume, this.boundingVolume);
|
|
319
|
+
}
|
|
320
|
+
return this._boundingBox;
|
|
321
|
+
}
|
|
322
|
+
|
|
288
323
|
/** Get the tile's screen space error. */
|
|
289
324
|
getScreenSpaceError(frameState, useParentLodMetric) {
|
|
290
325
|
switch (this.tileset.type) {
|
|
@@ -298,6 +333,14 @@ export default class TileHeader {
|
|
|
298
333
|
}
|
|
299
334
|
}
|
|
300
335
|
|
|
336
|
+
/**
|
|
337
|
+
* Make tile unselected than means it won't be shown
|
|
338
|
+
* but it can be still loaded in memory
|
|
339
|
+
*/
|
|
340
|
+
unselect(): void {
|
|
341
|
+
this._selectedFrame = 0;
|
|
342
|
+
}
|
|
343
|
+
|
|
301
344
|
/*
|
|
302
345
|
* If skipLevelOfDetail is off try to load child tiles as soon as possible so that their parent can refine sooner.
|
|
303
346
|
* Tiles are prioritized by screen space error.
|
|
@@ -749,8 +792,20 @@ export default class TileHeader {
|
|
|
749
792
|
case 'i3s':
|
|
750
793
|
return {
|
|
751
794
|
...this.tileset.options.i3s,
|
|
752
|
-
|
|
753
|
-
|
|
795
|
+
_tileOptions: {
|
|
796
|
+
attributeUrls: this.header.attributeUrls,
|
|
797
|
+
textureUrl: this.header.textureUrl,
|
|
798
|
+
textureFormat: this.header.textureFormat,
|
|
799
|
+
textureLoaderOptions: this.header.textureLoaderOptions,
|
|
800
|
+
materialDefinition: this.header.materialDefinition,
|
|
801
|
+
isDracoGeometry: this.header.isDracoGeometry,
|
|
802
|
+
mbs: this.header.mbs
|
|
803
|
+
},
|
|
804
|
+
_tilesetOptions: {
|
|
805
|
+
store: this.tileset.tileset.store,
|
|
806
|
+
attributeStorageInfo: this.tileset.tileset.attributeStorageInfo,
|
|
807
|
+
fields: this.tileset.tileset.fields
|
|
808
|
+
},
|
|
754
809
|
isTileHeader: false
|
|
755
810
|
};
|
|
756
811
|
case '3d-tiles':
|
|
@@ -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;
|