@loaders.gl/tiles 4.0.0-alpha.1 → 4.0.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.
Files changed (198) hide show
  1. package/dist/bundle.d.ts +2 -0
  2. package/dist/bundle.d.ts.map +1 -0
  3. package/dist/bundle.js +2 -2
  4. package/dist/constants.d.ts +38 -0
  5. package/dist/constants.d.ts.map +1 -0
  6. package/dist/constants.js +37 -30
  7. package/dist/dist.min.js +9163 -0
  8. package/dist/es5/bundle.js +6 -0
  9. package/dist/es5/bundle.js.map +1 -0
  10. package/dist/es5/constants.js +48 -0
  11. package/dist/es5/constants.js.map +1 -0
  12. package/dist/es5/index.js +93 -0
  13. package/dist/es5/index.js.map +1 -0
  14. package/dist/es5/tileset/format-3d-tiles/tileset-3d-traverser.js +70 -0
  15. package/dist/es5/tileset/format-3d-tiles/tileset-3d-traverser.js.map +1 -0
  16. package/dist/es5/tileset/format-i3s/i3s-pending-tiles-register.js +45 -0
  17. package/dist/es5/tileset/format-i3s/i3s-pending-tiles-register.js.map +1 -0
  18. package/dist/es5/tileset/format-i3s/i3s-tile-manager.js +84 -0
  19. package/dist/es5/tileset/format-i3s/i3s-tile-manager.js.map +1 -0
  20. package/dist/es5/tileset/format-i3s/i3s-tileset-traverser.js +143 -0
  21. package/dist/es5/tileset/format-i3s/i3s-tileset-traverser.js.map +1 -0
  22. package/dist/es5/tileset/helpers/3d-tiles-options.js +12 -0
  23. package/dist/es5/tileset/helpers/3d-tiles-options.js.map +1 -0
  24. package/dist/es5/tileset/helpers/bounding-volume.js +176 -0
  25. package/dist/es5/tileset/helpers/bounding-volume.js.map +1 -0
  26. package/dist/es5/tileset/helpers/frame-state.js +129 -0
  27. package/dist/es5/tileset/helpers/frame-state.js.map +1 -0
  28. package/dist/es5/tileset/helpers/i3s-lod.js +60 -0
  29. package/dist/es5/tileset/helpers/i3s-lod.js.map +1 -0
  30. package/dist/es5/tileset/helpers/tiles-3d-lod.js +103 -0
  31. package/dist/es5/tileset/helpers/tiles-3d-lod.js.map +1 -0
  32. package/dist/es5/tileset/helpers/transform-utils.js +50 -0
  33. package/dist/es5/tileset/helpers/transform-utils.js.map +1 -0
  34. package/dist/es5/tileset/helpers/zoom.js +63 -0
  35. package/dist/es5/tileset/helpers/zoom.js.map +1 -0
  36. package/dist/es5/tileset/tile-3d.js +536 -0
  37. package/dist/es5/tileset/tile-3d.js.map +1 -0
  38. package/dist/es5/tileset/tileset-3d.js +855 -0
  39. package/dist/es5/tileset/tileset-3d.js.map +1 -0
  40. package/dist/es5/tileset/tileset-cache.js +82 -0
  41. package/dist/es5/tileset/tileset-cache.js.map +1 -0
  42. package/dist/es5/tileset/tileset-traverser.js +321 -0
  43. package/dist/es5/tileset/tileset-traverser.js.map +1 -0
  44. package/dist/es5/types.js +2 -0
  45. package/dist/es5/types.js.map +1 -0
  46. package/dist/es5/utils/doubly-linked-list-node.js +21 -0
  47. package/dist/es5/utils/doubly-linked-list-node.js.map +1 -0
  48. package/dist/es5/utils/doubly-linked-list.js +88 -0
  49. package/dist/es5/utils/doubly-linked-list.js.map +1 -0
  50. package/dist/es5/utils/managed-array.js +126 -0
  51. package/dist/es5/utils/managed-array.js.map +1 -0
  52. package/dist/esm/bundle.js +4 -0
  53. package/dist/esm/bundle.js.map +1 -0
  54. package/dist/esm/constants.js +36 -0
  55. package/dist/esm/constants.js.map +1 -0
  56. package/dist/esm/index.js +10 -0
  57. package/dist/esm/index.js.map +1 -0
  58. package/dist/{tileset/traversers → esm/tileset/format-3d-tiles}/tileset-3d-traverser.js +2 -13
  59. package/dist/esm/tileset/format-3d-tiles/tileset-3d-traverser.js.map +1 -0
  60. package/dist/esm/tileset/format-i3s/i3s-pending-tiles-register.js +26 -0
  61. package/dist/esm/tileset/format-i3s/i3s-pending-tiles-register.js.map +1 -0
  62. package/dist/esm/tileset/format-i3s/i3s-tile-manager.js +79 -0
  63. package/dist/esm/tileset/format-i3s/i3s-tile-manager.js.map +1 -0
  64. package/dist/{tileset/traversers → esm/tileset/format-i3s}/i3s-tileset-traverser.js +16 -28
  65. package/dist/esm/tileset/format-i3s/i3s-tileset-traverser.js.map +1 -0
  66. package/dist/esm/tileset/helpers/3d-tiles-options.js +6 -0
  67. package/dist/esm/tileset/helpers/3d-tiles-options.js.map +1 -0
  68. package/dist/esm/tileset/helpers/bounding-volume.js +155 -0
  69. package/dist/esm/tileset/helpers/bounding-volume.js.map +1 -0
  70. package/dist/esm/tileset/helpers/frame-state.js +109 -0
  71. package/dist/esm/tileset/helpers/frame-state.js.map +1 -0
  72. package/dist/esm/tileset/helpers/i3s-lod.js +53 -0
  73. package/dist/esm/tileset/helpers/i3s-lod.js.map +1 -0
  74. package/dist/esm/tileset/helpers/tiles-3d-lod.js +100 -0
  75. package/dist/{tileset → esm/tileset}/helpers/tiles-3d-lod.js.map +1 -1
  76. package/dist/esm/tileset/helpers/transform-utils.js +50 -0
  77. package/dist/esm/tileset/helpers/transform-utils.js.map +1 -0
  78. package/dist/esm/tileset/helpers/zoom.js +55 -0
  79. package/dist/esm/tileset/helpers/zoom.js.map +1 -0
  80. package/dist/esm/tileset/tile-3d.js +414 -0
  81. package/dist/esm/tileset/tile-3d.js.map +1 -0
  82. package/dist/esm/tileset/tileset-3d.js +606 -0
  83. package/dist/esm/tileset/tileset-3d.js.map +1 -0
  84. package/dist/esm/tileset/tileset-cache.js +57 -0
  85. package/dist/esm/tileset/tileset-cache.js.map +1 -0
  86. package/dist/{tileset/traversers → esm/tileset}/tileset-traverser.js +29 -88
  87. package/dist/esm/tileset/tileset-traverser.js.map +1 -0
  88. package/dist/esm/types.js +2 -0
  89. package/dist/esm/types.js.map +1 -0
  90. package/dist/esm/utils/doubly-linked-list-node.js +12 -0
  91. package/dist/esm/utils/doubly-linked-list-node.js.map +1 -0
  92. package/dist/esm/utils/doubly-linked-list.js +65 -0
  93. package/dist/esm/utils/doubly-linked-list.js.map +1 -0
  94. package/dist/esm/utils/managed-array.js +87 -0
  95. package/dist/esm/utils/managed-array.js.map +1 -0
  96. package/dist/index.d.ts +11 -0
  97. package/dist/index.d.ts.map +1 -0
  98. package/dist/index.js +26 -9
  99. package/dist/tileset/format-3d-tiles/tileset-3d-traverser.d.ts +7 -0
  100. package/dist/tileset/format-3d-tiles/tileset-3d-traverser.d.ts.map +1 -0
  101. package/dist/tileset/format-3d-tiles/tileset-3d-traverser.js +54 -0
  102. package/dist/tileset/format-i3s/i3s-pending-tiles-register.d.ts +27 -0
  103. package/dist/tileset/format-i3s/i3s-pending-tiles-register.d.ts.map +1 -0
  104. package/dist/tileset/format-i3s/i3s-pending-tiles-register.js +47 -0
  105. package/dist/tileset/format-i3s/i3s-tile-manager.d.ts +34 -0
  106. package/dist/tileset/format-i3s/i3s-tile-manager.d.ts.map +1 -0
  107. package/dist/tileset/format-i3s/i3s-tile-manager.js +80 -0
  108. package/dist/tileset/format-i3s/i3s-tileset-traverser.d.ts +25 -0
  109. package/dist/tileset/format-i3s/i3s-tileset-traverser.d.ts.map +1 -0
  110. package/dist/tileset/format-i3s/i3s-tileset-traverser.js +92 -0
  111. package/dist/tileset/helpers/3d-tiles-options.d.ts +5 -0
  112. package/dist/tileset/helpers/3d-tiles-options.d.ts.map +1 -0
  113. package/dist/tileset/helpers/3d-tiles-options.js +8 -5
  114. package/dist/tileset/helpers/bounding-volume.d.ts +19 -0
  115. package/dist/tileset/helpers/bounding-volume.d.ts.map +1 -0
  116. package/dist/tileset/helpers/bounding-volume.js +274 -69
  117. package/dist/tileset/helpers/frame-state.d.ts +28 -0
  118. package/dist/tileset/helpers/frame-state.d.ts.map +1 -0
  119. package/dist/tileset/helpers/frame-state.js +131 -49
  120. package/dist/tileset/helpers/i3s-lod.d.ts +20 -0
  121. package/dist/tileset/helpers/i3s-lod.d.ts.map +1 -0
  122. package/dist/tileset/helpers/i3s-lod.js +82 -105
  123. package/dist/tileset/helpers/tiles-3d-lod.d.ts +8 -0
  124. package/dist/tileset/helpers/tiles-3d-lod.d.ts.map +1 -0
  125. package/dist/tileset/helpers/tiles-3d-lod.js +112 -100
  126. package/dist/tileset/helpers/transform-utils.d.ts +2 -0
  127. package/dist/tileset/helpers/transform-utils.d.ts.map +1 -0
  128. package/dist/tileset/helpers/transform-utils.js +51 -56
  129. package/dist/tileset/helpers/zoom.d.ts +46 -0
  130. package/dist/tileset/helpers/zoom.d.ts.map +1 -0
  131. package/dist/tileset/helpers/zoom.js +83 -30
  132. package/dist/tileset/tile-3d.d.ts +222 -0
  133. package/dist/tileset/tile-3d.d.ts.map +1 -0
  134. package/dist/tileset/tile-3d.js +607 -531
  135. package/dist/tileset/tileset-3d.d.ts +264 -0
  136. package/dist/tileset/tileset-3d.d.ts.map +1 -0
  137. package/dist/tileset/tileset-3d.js +693 -652
  138. package/dist/tileset/tileset-cache.d.ts +19 -0
  139. package/dist/tileset/tileset-cache.d.ts.map +1 -0
  140. package/dist/tileset/tileset-cache.js +66 -73
  141. package/dist/tileset/tileset-traverser.d.ts +57 -0
  142. package/dist/tileset/tileset-traverser.d.ts.map +1 -0
  143. package/dist/tileset/tileset-traverser.js +300 -0
  144. package/dist/types.d.ts +34 -0
  145. package/dist/types.d.ts.map +1 -0
  146. package/dist/types.js +2 -0
  147. package/dist/utils/doubly-linked-list-node.d.ts +11 -0
  148. package/dist/utils/doubly-linked-list-node.d.ts.map +1 -0
  149. package/dist/utils/doubly-linked-list-node.js +17 -8
  150. package/dist/utils/doubly-linked-list.d.ts +30 -0
  151. package/dist/utils/doubly-linked-list.d.ts.map +1 -0
  152. package/dist/utils/doubly-linked-list.js +91 -72
  153. package/dist/utils/managed-array.d.ts +85 -0
  154. package/dist/utils/managed-array.d.ts.map +1 -0
  155. package/dist/utils/managed-array.js +144 -103
  156. package/package.json +13 -10
  157. package/src/constants.ts +38 -18
  158. package/src/index.ts +7 -4
  159. package/src/tileset/{traversers → format-3d-tiles}/tileset-3d-traverser.ts +4 -2
  160. package/src/tileset/format-i3s/i3s-pending-tiles-register.ts +44 -0
  161. package/src/tileset/format-i3s/i3s-tile-manager.ts +101 -0
  162. package/src/tileset/{traversers → format-i3s}/i3s-tileset-traverser.ts +27 -15
  163. package/src/tileset/helpers/3d-tiles-options.ts +3 -1
  164. package/src/tileset/helpers/bounding-volume.ts +136 -0
  165. package/src/tileset/helpers/frame-state.ts +102 -18
  166. package/src/tileset/helpers/i3s-lod.ts +75 -96
  167. package/src/tileset/helpers/tiles-3d-lod.ts +2 -0
  168. package/src/tileset/helpers/transform-utils.ts +2 -0
  169. package/src/tileset/helpers/zoom.ts +84 -9
  170. package/src/tileset/tile-3d.ts +139 -123
  171. package/src/tileset/tileset-3d.ts +379 -252
  172. package/src/tileset/tileset-cache.ts +26 -17
  173. package/src/tileset/{traversers/tileset-traverser.ts → tileset-traverser.ts} +71 -72
  174. package/src/types.ts +36 -0
  175. package/src/utils/{doubly-linked-list-node.js → doubly-linked-list-node.ts} +7 -2
  176. package/src/utils/{doubly-linked-list.js → doubly-linked-list.ts} +5 -8
  177. package/src/utils/{managed-array.js → managed-array.ts} +5 -2
  178. package/dist/bundle.js.map +0 -1
  179. package/dist/constants.js.map +0 -1
  180. package/dist/index.js.map +0 -1
  181. package/dist/tileset/helpers/3d-tiles-options.js.map +0 -1
  182. package/dist/tileset/helpers/bounding-volume.js.map +0 -1
  183. package/dist/tileset/helpers/frame-state.js.map +0 -1
  184. package/dist/tileset/helpers/i3s-lod.js.map +0 -1
  185. package/dist/tileset/helpers/transform-utils.js.map +0 -1
  186. package/dist/tileset/helpers/zoom.js.map +0 -1
  187. package/dist/tileset/tile-3d.js.map +0 -1
  188. package/dist/tileset/tileset-3d.js.map +0 -1
  189. package/dist/tileset/tileset-cache.js.map +0 -1
  190. package/dist/tileset/traversers/i3s-tile-manager.js +0 -45
  191. package/dist/tileset/traversers/i3s-tile-manager.js.map +0 -1
  192. package/dist/tileset/traversers/i3s-tileset-traverser.js.map +0 -1
  193. package/dist/tileset/traversers/tileset-3d-traverser.js.map +0 -1
  194. package/dist/tileset/traversers/tileset-traverser.js.map +0 -1
  195. package/dist/utils/doubly-linked-list-node.js.map +0 -1
  196. package/dist/utils/doubly-linked-list.js.map +0 -1
  197. package/dist/utils/managed-array.js.map +0 -1
  198. package/src/tileset/traversers/i3s-tile-manager.ts +0 -39
@@ -1,20 +1,28 @@
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';
13
+ import type {DoublyLinkedListNode} from '../utils/doubly-linked-list-node';
7
14
  import {TILE_REFINEMENT, TILE_CONTENT_STATE, TILESET_TYPE} from '../constants';
8
15
 
9
16
  import {FrameState} from './helpers/frame-state';
10
- import {createBoundingVolume} from './helpers/bounding-volume';
17
+ import {
18
+ createBoundingVolume,
19
+ getCartographicBounds,
20
+ CartographicBounds
21
+ } from './helpers/bounding-volume';
11
22
  import {getTiles3DScreenSpaceError} from './helpers/tiles-3d-lod';
12
- import {getI3ScreenSize} from './helpers/i3s-lod';
23
+ import {getProjectedRadius} from './helpers/i3s-lod';
13
24
  import {get3dTilesOptions} from './helpers/3d-tiles-options';
14
- import TilesetTraverser from './traversers/tileset-traverser';
15
-
16
- // Note: circular dependency
17
- import type Tileset3D from './tileset-3d';
25
+ import {TilesetTraverser} from './tileset-traverser';
18
26
 
19
27
  const scratchVector = new Vector3();
20
28
 
@@ -25,14 +33,14 @@ function defined(x) {
25
33
  /**
26
34
  * @param tileset - Tileset3D instance
27
35
  * @param header - tile header - JSON loaded from a dataset
28
- * @param parentHeader - parent TileHeader instance
36
+ * @param parentHeader - parent Tile3D instance
29
37
  * @param extendedId - optional ID to separate copies of a tile for different viewports.
30
38
  * const extendedId = `${tile.id}-${frameState.viewport.id}`;
31
39
  */
32
- export type TileHeaderProps = {
40
+ export type Tile3DProps = {
33
41
  tileset: Tileset3D;
34
42
  header: Object;
35
- parentHeader: TileHeader;
43
+ parentHeader: Tile3D;
36
44
  extendedId: string;
37
45
  };
38
46
 
@@ -41,83 +49,91 @@ export type TileHeaderProps = {
41
49
  * the content is loaded on-demand when needed based on the view.
42
50
  * Do not construct this directly, instead access tiles through {@link Tileset3D#tileVisible}.
43
51
  */
44
- export default class TileHeader {
52
+ export class Tile3D {
45
53
  tileset: Tileset3D;
46
54
  header: any;
47
55
  id: string;
48
56
  url: string;
49
- parent: TileHeader;
57
+ parent: Tile3D;
58
+ /* Specifies the type of refine that is used when traversing this tile for rendering. */
50
59
  refine: number;
51
60
  type: string;
52
61
  contentUrl: string;
53
- lodMetricType: string;
54
- lodMetricValue: number;
55
- boundingVolume: any;
56
- content: any;
57
- contentState: any;
58
- gpuMemoryUsageInBytes: number;
59
- children: TileHeader[];
60
- depth: number;
61
- viewportIds: any[];
62
- transform: Matrix4;
63
-
64
- // Container to store application specific data
65
- userData: {[key: string]: any};
62
+ /** Different refinement algorithms used by I3S and 3D tiles */
63
+ lodMetricType: 'geometricError' | 'maxScreenThreshold' = 'geometricError';
64
+ /** The error, in meters, introduced if this tile is rendered and its children are not. */
65
+ lodMetricValue: number = 0;
66
+
67
+ /** @todo math.gl is not exporting BoundingVolume base type? */
68
+ boundingVolume: any = null;
69
+
70
+ /**
71
+ * The tile's content. This represents the actual tile's payload,
72
+ * not the content's metadata in the tileset JSON file.
73
+ */
74
+ content: any = null;
75
+ contentState: number = TILE_CONTENT_STATE.UNLOADED;
76
+ gpuMemoryUsageInBytes: number = 0;
77
+
78
+ /** The tile's children - an array of Tile3D objects. */
79
+ children: Tile3D[] = [];
80
+ depth: number = 0;
81
+ viewportIds: any[] = [];
82
+ transform = new Matrix4();
83
+ extensions: any = null;
84
+ /** TODO Cesium 3d tiles specific */
85
+ implicitTiling?: any = null;
86
+
87
+ /** Container to store application specific data */
88
+ userData: Record<string, any> = {};
89
+
66
90
  computedTransform: any;
67
- hasEmptyContent: boolean;
68
- hasTilesetContent: boolean;
91
+ hasEmptyContent: boolean = false;
92
+ hasTilesetContent: boolean = false;
69
93
 
70
- traverser: object;
94
+ traverser = new TilesetTraverser({});
71
95
 
72
- // @ts-ignore
73
- private _cacheNode: any;
74
- private _frameNumber: any;
75
- // TODO i3s specific, needs to remove
76
- // @ts-ignore
77
- private _lodJudge: any;
78
- // TODO Cesium 3d tiles specific
79
- private _expireDate: any;
80
- private _expiredContent: any;
81
- // @ts-ignore
82
- private _shouldRefine: boolean;
83
-
84
- // Members this are updated every frame for tree traversal and rendering optimizations:
85
- // @ts-ignore
86
- private _distanceToCamera: number;
87
- // @ts-ignore
88
- private _centerZDepth: number;
89
- private _screenSpaceError: number;
90
- private _visibilityPlaneMask: any;
91
- private _visible?: boolean;
92
- private _inRequestVolume: boolean;
96
+ /** Used by TilesetCache */
97
+ _cacheNode: DoublyLinkedListNode | null = null;
93
98
 
94
- // @ts-ignore
95
- private _stackLength: number;
96
- // @ts-ignore
97
- private _selectionDepth: number;
99
+ private _frameNumber: any = null;
98
100
 
99
- // @ts-ignore
100
- private _touchedFrame: number;
101
- // @ts-ignore
102
- private _visitedFrame: number;
103
- private _selectedFrame: number;
104
- // @ts-ignore
105
- private _requestedFrame: number;
101
+ // TODO Cesium 3d tiles specific
102
+ private _expireDate: any = null;
103
+ private _expiredContent: any = null;
104
+
105
+ private _boundingBox?: CartographicBounds;
106
106
 
107
- // @ts-ignore
108
- private _priority: number;
107
+ /** updated every frame for tree traversal and rendering optimizations: */
108
+ public _distanceToCamera: number = 0;
109
+ _screenSpaceError: number = 0;
110
+ private _visibilityPlaneMask: any;
111
+ private _visible: boolean | undefined = undefined;
109
112
 
110
113
  private _contentBoundingVolume: any;
111
114
  private _viewerRequestVolume: any;
112
115
 
113
- _initialTransform: Matrix4;
116
+ _initialTransform: Matrix4 = new Matrix4();
117
+
118
+ // Used by traverser, cannot be marked private
119
+ _priority: number = 0;
120
+ _selectedFrame: number = 0;
121
+ _requestedFrame: number = 0;
122
+ _selectionDepth: number = 0;
123
+ _touchedFrame: number = 0;
124
+ _centerZDepth: number = 0;
125
+ _shouldRefine: boolean = false;
126
+ _stackLength: number = 0;
127
+ _visitedFrame: number = 0;
128
+ _inRequestVolume: boolean = false;
129
+ _lodJudge: any = null; // TODO i3s specific, needs to remove
114
130
 
115
131
  /**
116
132
  * @constructs
117
- * Create a TileHeader instance
133
+ * Create a Tile3D instance
118
134
  * @param tileset - Tileset3D instance
119
135
  * @param header - tile header - JSON loaded from a dataset
120
- * @param parentHeader - parent TileHeader instance
136
+ * @param parentHeader - parent Tile3D instance
121
137
  * @param extendedId - optional ID to separate copies of a tile for different viewports.
122
138
  * const extendedId = `${tile.id}-${frameState.viewport.id}`;
123
139
  */
@@ -125,7 +141,7 @@ export default class TileHeader {
125
141
  constructor(
126
142
  tileset: Tileset3D,
127
143
  header: {[key: string]: any},
128
- parentHeader?: TileHeader,
144
+ parentHeader?: Tile3D,
129
145
  extendedId = ''
130
146
  ) {
131
147
  // PUBLIC MEMBERS
@@ -144,67 +160,12 @@ export default class TileHeader {
144
160
  this.type = header.type;
145
161
  this.contentUrl = header.contentUrl;
146
162
 
147
- // The error, in meters, introduced if this tile is rendered and its children are not.
148
- this.lodMetricType = 'geometricError';
149
- this.lodMetricValue = 0;
150
-
151
- // Specifies the type of refine that is used when traversing this tile for rendering.
152
- this.boundingVolume = null;
153
-
154
- // The tile's content. This represents the actual tile's payload,
155
- // not the content's metadata in the tileset JSON file.
156
- this.content = null;
157
- this.contentState = TILE_CONTENT_STATE.UNLOADED;
158
- this.gpuMemoryUsageInBytes = 0;
159
-
160
- // The tile's children - an array of Tile3D objects.
161
- this.children = [];
162
-
163
- this.hasEmptyContent = false;
164
- this.hasTilesetContent = false;
165
-
166
- this.depth = 0;
167
- this.viewportIds = [];
168
-
169
- // Container to store application specific data
170
- this.userData = {};
171
-
172
- // PRIVATE MEMBERS
173
- this._priority = 0;
174
- this._touchedFrame = 0;
175
- this._visitedFrame = 0;
176
- this._selectedFrame = 0;
177
- this._requestedFrame = 0;
178
- this._screenSpaceError = 0;
179
-
180
- this._cacheNode = null;
181
- this._frameNumber = null;
182
- this._cacheNode = null;
183
-
184
- this.traverser = new TilesetTraverser({});
185
- this._shouldRefine = false;
186
- this._distanceToCamera = 0;
187
- this._centerZDepth = 0;
188
- this._visible = undefined;
189
- this._inRequestVolume = false;
190
- this._stackLength = 0;
191
- this._selectionDepth = 0;
192
- this._initialTransform = new Matrix4();
193
- this.transform = new Matrix4();
194
-
195
163
  this._initializeLodMetric(header);
196
164
  this._initializeTransforms(header);
197
165
  this._initializeBoundingVolumes(header);
198
166
  this._initializeContent(header);
199
167
  this._initializeRenderingState(header);
200
168
 
201
- // TODO i3s specific, needs to remove
202
- this._lodJudge = null;
203
-
204
- // TODO Cesium 3d tiles specific
205
- this._expireDate = null;
206
- this._expiredContent = null;
207
-
208
169
  Object.seal(this);
209
170
  }
210
171
 
@@ -283,11 +244,36 @@ export default class TileHeader {
283
244
  return this.contentState === TILE_CONTENT_STATE.FAILED;
284
245
  }
285
246
 
247
+ /**
248
+ * Distance from the tile's bounding volume center to the camera
249
+ */
250
+ get distanceToCamera(): number {
251
+ return this._distanceToCamera;
252
+ }
253
+
254
+ /**
255
+ * Screen space error for LOD selection
256
+ */
257
+ get screenSpaceError(): number {
258
+ return this._screenSpaceError;
259
+ }
260
+
261
+ /**
262
+ * Get bounding box in cartographic coordinates
263
+ * @returns [min, max] each in [longitude, latitude, altitude]
264
+ */
265
+ get boundingBox(): CartographicBounds {
266
+ if (!this._boundingBox) {
267
+ this._boundingBox = getCartographicBounds(this.header.boundingVolume, this.boundingVolume);
268
+ }
269
+ return this._boundingBox;
270
+ }
271
+
286
272
  /** Get the tile's screen space error. */
287
273
  getScreenSpaceError(frameState, useParentLodMetric) {
288
274
  switch (this.tileset.type) {
289
275
  case TILESET_TYPE.I3S:
290
- return getI3ScreenSize(this, frameState);
276
+ return getProjectedRadius(this, frameState);
291
277
  case TILESET_TYPE.TILES3D:
292
278
  return getTiles3DScreenSpaceError(this, frameState, useParentLodMetric);
293
279
  default:
@@ -296,6 +282,21 @@ export default class TileHeader {
296
282
  }
297
283
  }
298
284
 
285
+ /**
286
+ * Make tile unselected than means it won't be shown
287
+ * but it can be still loaded in memory
288
+ */
289
+ unselect(): void {
290
+ this._selectedFrame = 0;
291
+ }
292
+
293
+ /**
294
+ * Memory usage of tile on GPU
295
+ */
296
+ _getGpuMemoryUsageInBytes(): number {
297
+ return this.content.gpuMemoryUsageInBytes || this.content.byteLength || 0;
298
+ }
299
+
299
300
  /*
300
301
  * If skipLevelOfDetail is off try to load child tiles as soon as possible so that their parent can refine sooner.
301
302
  * Tiles are prioritized by screen space error.
@@ -379,6 +380,7 @@ export default class TileHeader {
379
380
  const options = {
380
381
  ...this.tileset.loadOptions,
381
382
  [loader.id]: {
383
+ // @ts-expect-error
382
384
  ...this.tileset.loadOptions[loader.id],
383
385
  isTileset: this.type === 'json',
384
386
  ...this._getLoaderSpecificOptions(loader.id)
@@ -689,6 +691,8 @@ export default class TileHeader {
689
691
  // The content may be tileset json
690
692
  if (this._isTileset()) {
691
693
  this.hasTilesetContent = true;
694
+ } else {
695
+ this.gpuMemoryUsageInBytes = this._getGpuMemoryUsageInBytes();
692
696
  }
693
697
  }
694
698
 
@@ -747,8 +751,20 @@ export default class TileHeader {
747
751
  case 'i3s':
748
752
  return {
749
753
  ...this.tileset.options.i3s,
750
- tile: this.header,
751
- tileset: this.tileset.tileset,
754
+ _tileOptions: {
755
+ attributeUrls: this.header.attributeUrls,
756
+ textureUrl: this.header.textureUrl,
757
+ textureFormat: this.header.textureFormat,
758
+ textureLoaderOptions: this.header.textureLoaderOptions,
759
+ materialDefinition: this.header.materialDefinition,
760
+ isDracoGeometry: this.header.isDracoGeometry,
761
+ mbs: this.header.mbs
762
+ },
763
+ _tilesetOptions: {
764
+ store: this.tileset.tileset.store,
765
+ attributeStorageInfo: this.tileset.tileset.attributeStorageInfo,
766
+ fields: this.tileset.tileset.fields
767
+ },
752
768
  isTileHeader: false
753
769
  };
754
770
  case '3d-tiles':