@itwin/frontend-tiles 3.7.0-dev.7 → 3.7.0-dev.8

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 (78) hide show
  1. package/.rush/temp/66eda89ae927be7163ab4886bb1a316597deda28.log +10 -0
  2. package/.rush/temp/operation/build_ci/state.json +1 -1
  3. package/lib/cjs/BatchedSpatialTileTreeRefs.d.ts +4 -4
  4. package/lib/cjs/BatchedSpatialTileTreeRefs.d.ts.map +1 -1
  5. package/lib/cjs/BatchedSpatialTileTreeRefs.js +133 -129
  6. package/lib/cjs/BatchedSpatialTileTreeRefs.js.map +1 -1
  7. package/lib/cjs/BatchedTile.d.ts +23 -23
  8. package/lib/cjs/BatchedTile.d.ts.map +1 -1
  9. package/lib/cjs/BatchedTile.js +251 -250
  10. package/lib/cjs/BatchedTile.js.map +1 -1
  11. package/lib/cjs/BatchedTileContentReader.d.ts +22 -22
  12. package/lib/cjs/BatchedTileContentReader.js +76 -76
  13. package/lib/cjs/BatchedTileContentReader.js.map +1 -1
  14. package/lib/cjs/BatchedTileTree.d.ts +22 -22
  15. package/lib/cjs/BatchedTileTree.js +52 -52
  16. package/lib/cjs/BatchedTileTree.js.map +1 -1
  17. package/lib/cjs/BatchedTileTreeReference.d.ts +21 -17
  18. package/lib/cjs/BatchedTileTreeReference.d.ts.map +1 -1
  19. package/lib/cjs/BatchedTileTreeReference.js +73 -49
  20. package/lib/cjs/BatchedTileTreeReference.js.map +1 -1
  21. package/lib/cjs/BatchedTileTreeSupplier.d.ts +5 -5
  22. package/lib/cjs/BatchedTileTreeSupplier.js +38 -38
  23. package/lib/cjs/BatchedTileTreeSupplier.js.map +1 -1
  24. package/lib/cjs/BatchedTilesetReader.d.ts +13 -13
  25. package/lib/cjs/BatchedTilesetReader.js +88 -88
  26. package/lib/cjs/BatchedTilesetReader.js.map +1 -1
  27. package/lib/cjs/FrontendTiles.d.ts +32 -21
  28. package/lib/cjs/FrontendTiles.d.ts.map +1 -1
  29. package/lib/cjs/FrontendTiles.js +26 -18
  30. package/lib/cjs/FrontendTiles.js.map +1 -1
  31. package/lib/cjs/LoggerCategory.d.ts +2 -2
  32. package/lib/cjs/LoggerCategory.js +9 -9
  33. package/lib/cjs/LoggerCategory.js.map +1 -1
  34. package/lib/cjs/frontend-tiles.d.ts +1 -1
  35. package/lib/cjs/frontend-tiles.js +17 -17
  36. package/lib/cjs/frontend-tiles.js.map +1 -1
  37. package/lib/cjs/tsconfig.tsbuildinfo +1 -1
  38. package/lib/esm/BatchedSpatialTileTreeRefs.d.ts +4 -4
  39. package/lib/esm/BatchedSpatialTileTreeRefs.d.ts.map +1 -1
  40. package/lib/esm/BatchedSpatialTileTreeRefs.js +129 -125
  41. package/lib/esm/BatchedSpatialTileTreeRefs.js.map +1 -1
  42. package/lib/esm/BatchedTile.d.ts +23 -23
  43. package/lib/esm/BatchedTile.d.ts.map +1 -1
  44. package/lib/esm/BatchedTile.js +247 -246
  45. package/lib/esm/BatchedTile.js.map +1 -1
  46. package/lib/esm/BatchedTileContentReader.d.ts +22 -22
  47. package/lib/esm/BatchedTileContentReader.js +72 -72
  48. package/lib/esm/BatchedTileContentReader.js.map +1 -1
  49. package/lib/esm/BatchedTileTree.d.ts +22 -22
  50. package/lib/esm/BatchedTileTree.js +48 -48
  51. package/lib/esm/BatchedTileTree.js.map +1 -1
  52. package/lib/esm/BatchedTileTreeReference.d.ts +21 -17
  53. package/lib/esm/BatchedTileTreeReference.d.ts.map +1 -1
  54. package/lib/esm/BatchedTileTreeReference.js +69 -45
  55. package/lib/esm/BatchedTileTreeReference.js.map +1 -1
  56. package/lib/esm/BatchedTileTreeSupplier.d.ts +5 -5
  57. package/lib/esm/BatchedTileTreeSupplier.js +34 -34
  58. package/lib/esm/BatchedTileTreeSupplier.js.map +1 -1
  59. package/lib/esm/BatchedTilesetReader.d.ts +13 -13
  60. package/lib/esm/BatchedTilesetReader.js +84 -84
  61. package/lib/esm/BatchedTilesetReader.js.map +1 -1
  62. package/lib/esm/FrontendTiles.d.ts +32 -21
  63. package/lib/esm/FrontendTiles.d.ts.map +1 -1
  64. package/lib/esm/FrontendTiles.js +21 -14
  65. package/lib/esm/FrontendTiles.js.map +1 -1
  66. package/lib/esm/LoggerCategory.d.ts +2 -2
  67. package/lib/esm/LoggerCategory.js +6 -6
  68. package/lib/esm/LoggerCategory.js.map +1 -1
  69. package/lib/esm/frontend-tiles.d.ts +1 -1
  70. package/lib/esm/frontend-tiles.js +5 -5
  71. package/lib/esm/frontend-tiles.js.map +1 -1
  72. package/lib/esm/tsconfig.tsbuildinfo +1 -1
  73. package/package.json +11 -11
  74. package/src/BatchedSpatialTileTreeRefs.ts +6 -4
  75. package/src/BatchedTile.ts +2 -1
  76. package/src/BatchedTileTreeReference.ts +36 -4
  77. package/src/FrontendTiles.ts +19 -0
  78. package/.rush/temp/package-deps_build_ci.json +0 -21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/frontend-tiles",
3
- "version": "3.7.0-dev.7",
3
+ "version": "3.7.0-dev.8",
4
4
  "description": "Experimental alternative technique for visualizing the contents of iModels",
5
5
  "main": "lib/cjs/frontend-tiles.js",
6
6
  "module": "lib/esm/frontend-tiles.js",
@@ -22,18 +22,18 @@
22
22
  "url": "http://www.bentley.com"
23
23
  },
24
24
  "peerDependencies": {
25
- "@itwin/core-bentley": "3.7.0-dev.7",
26
- "@itwin/core-common": "3.7.0-dev.7",
27
- "@itwin/core-frontend": "3.7.0-dev.7",
28
- "@itwin/core-geometry": "3.7.0-dev.7"
25
+ "@itwin/core-bentley": "3.7.0-dev.8",
26
+ "@itwin/core-common": "3.7.0-dev.8",
27
+ "@itwin/core-frontend": "3.7.0-dev.8",
28
+ "@itwin/core-geometry": "3.7.0-dev.8"
29
29
  },
30
30
  "devDependencies": {
31
- "@itwin/build-tools": "3.7.0-dev.7",
32
- "@itwin/core-bentley": "3.7.0-dev.7",
33
- "@itwin/core-common": "3.7.0-dev.7",
34
- "@itwin/core-frontend": "3.7.0-dev.7",
35
- "@itwin/core-geometry": "3.7.0-dev.7",
36
- "@itwin/eslint-plugin": "3.7.0-dev.7",
31
+ "@itwin/build-tools": "3.7.0-dev.8",
32
+ "@itwin/core-bentley": "3.7.0-dev.8",
33
+ "@itwin/core-common": "3.7.0-dev.8",
34
+ "@itwin/core-frontend": "3.7.0-dev.8",
35
+ "@itwin/core-geometry": "3.7.0-dev.8",
36
+ "@itwin/eslint-plugin": "3.7.0-dev.8",
37
37
  "@types/node": "18.11.5",
38
38
  "eslint": "^7.11.0",
39
39
  "rimraf": "^3.0.2",
@@ -119,10 +119,12 @@ class ProxySpatialTileTreeReferences implements SpatialTileTreeReferences {
119
119
  public setDeactivated(): void { }
120
120
 
121
121
  public *[Symbol.iterator](): Iterator<TileTreeReference> {
122
- if (this._impl)
123
- return this._impl[Symbol.iterator]();
124
-
125
- yield this._proxyRef;
122
+ if (this._impl) {
123
+ for (const ref of this._impl)
124
+ yield ref;
125
+ } else {
126
+ yield this._proxyRef;
127
+ }
126
128
  }
127
129
  }
128
130
 
@@ -12,6 +12,7 @@ import {
12
12
  import { loggerCategory } from "./LoggerCategory";
13
13
  import { BatchedTileTree } from "./BatchedTileTree";
14
14
  import { BatchedTileContentReader } from "./BatchedTileContentReader";
15
+ import { getMaxLevelsToSkip } from "./FrontendTiles";
15
16
 
16
17
  /** @internal */
17
18
  export interface BatchedTileParams extends TileParams {
@@ -105,7 +106,7 @@ export class BatchedTile extends Tile {
105
106
  // This tile is too coarse to draw. Try to draw something more appropriate.
106
107
  // If it is not ready to draw, we may want to skip loading in favor of loading its descendants.
107
108
  // If we previously loaded and later unloaded content for this tile to free memory, don't force it to reload its content - proceed to children.
108
- const maximumLevelsToSkip = IModelApp.tileAdmin.maximumLevelsToSkip;
109
+ const maximumLevelsToSkip = getMaxLevelsToSkip();
109
110
  let canSkipThisTile = (this._hadGraphics && !this.hasGraphics) /* || this.depth < this.iModelTree.maxInitialTilesToSkip */ ;
110
111
  if (canSkipThisTile) {
111
112
  numSkipped = 1;
@@ -3,8 +3,11 @@
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
 
6
- import { Id64 } from "@itwin/core-bentley";
7
- import { BatchType, FeatureAppearance, FeatureAppearanceProvider, FeatureAppearanceSource, GeometryClass } from "@itwin/core-common";
6
+ import { Id64, Id64String } from "@itwin/core-bentley";
7
+ import { Range3d } from "@itwin/core-geometry";
8
+ import {
9
+ BatchType, FeatureAppearance, FeatureAppearanceProvider, FeatureAppearanceSource, GeometryClass, ModelExtentsProps,
10
+ } from "@itwin/core-common";
8
11
  import {
9
12
  AttachToViewportArgs, SpatialViewState, TileTreeOwner, TileTreeReference,
10
13
  } from "@itwin/core-frontend";
@@ -15,6 +18,8 @@ export class BatchedTileTreeReference extends TileTreeReference implements Featu
15
18
  private readonly _treeOwner: TileTreeOwner;
16
19
  private readonly _view: SpatialViewState;
17
20
  private readonly _viewedModels = new Id64.Uint32Set();
21
+ private readonly _modelRanges = new Map<Id64String, Range3d>();
22
+ private _modelRangePromise?: Promise<void>;
18
23
  private _onModelSelectorChanged?: () => void;
19
24
 
20
25
  private constructor(treeOwner: TileTreeOwner, view: SpatialViewState) {
@@ -44,8 +49,35 @@ export class BatchedTileTreeReference extends TileTreeReference implements Featu
44
49
  public updateViewedModels(): void {
45
50
  this._viewedModels.clear();
46
51
  this._viewedModels.addIds(this._view.modelSelector.models);
47
- if (this._onModelSelectorChanged)
48
- this._onModelSelectorChanged();
52
+ if (!this._onModelSelectorChanged) {
53
+ // Don't bother updating model ranges if we're not attached to a viewport.
54
+ return;
55
+ }
56
+
57
+ this._onModelSelectorChanged();
58
+
59
+ this._modelRangePromise = undefined;
60
+ const modelIds = Array.from(this._view.modelSelector.models).filter((modelId) => !this._modelRanges.has(modelId));
61
+ if (modelIds.length === 0)
62
+ return;
63
+
64
+ const modelRangePromise = this._modelRangePromise = this._treeOwner.iModel.models.queryExtents(modelIds).then((extents: ModelExtentsProps[]) => {
65
+ if (modelRangePromise !== this._modelRangePromise)
66
+ return;
67
+
68
+ this._modelRangePromise = undefined;
69
+ for (const extent of extents)
70
+ this._modelRanges.set(extent.id, Range3d.fromJSON(extent.extents));
71
+ }).catch(() => { });
72
+ }
73
+
74
+ public override unionFitRange(union: Range3d): void {
75
+ this._viewedModels.forEach((low: number, high: number) => {
76
+ const id = Id64.fromUint32Pair(low, high);
77
+ const extent = this._modelRanges.get(id);
78
+ if (extent)
79
+ union.extendRange(extent);
80
+ });
49
81
  }
50
82
 
51
83
  public override getAppearanceProvider(): FeatureAppearanceProvider | undefined {
@@ -20,14 +20,33 @@ export type ComputeSpatialTilesetBaseUrl = (iModel: IModelConnection) => Promise
20
20
  export interface FrontendTilesOptions {
21
21
  /** Provide the base URL for the pre-published tileset for a given iModel. */
22
22
  computeSpatialTilesetBaseUrl: ComputeSpatialTilesetBaseUrl;
23
+ /** The maximum number of levels in the tile tree to skip loading if they do not provide the desired level of detail for the current view.
24
+ * Default: 4.
25
+ * Reducing this value will load more intermediate tiles, which causes more gradual refinement: low-resolution tiles will display quickly, followed more gradually by
26
+ * successively higher-resolution ones.
27
+ * Increasing the value jumps more directly to tiles of the exact level of detail desired, which may load more, smaller tiles up-front, leaving some areas of the view
28
+ * vacant for longer; and when zooming out some newly-exposed areas of the view may remain vacant for longer because no lower-resolution tiles are initially available to
29
+ * fill them. However, tiles close to the viewer (and therefore likely of most interest to them) will refine to an appropriate level of detail more quickly.
30
+ */
31
+ maxLevelsToSkip?: number;
23
32
  }
24
33
 
25
34
  /** @internal */
26
35
  export const createFallbackSpatialTileTreeReferences = SpatialTileTreeReferences.create;
27
36
 
37
+ let maxLevelsToSkip = 4;
38
+
39
+ /** @internal */
40
+ export function getMaxLevelsToSkip(): number {
41
+ return maxLevelsToSkip;
42
+ }
43
+
28
44
  /** Initialize the frontend-tiles package to obtain tiles for spatial views.
29
45
  * @alpha
30
46
  */
31
47
  export function initializeFrontendTiles(options: FrontendTilesOptions): void {
48
+ if (undefined !== options.maxLevelsToSkip && options.maxLevelsToSkip >= 0)
49
+ maxLevelsToSkip = options.maxLevelsToSkip;
50
+
32
51
  SpatialTileTreeReferences.create = (view: SpatialViewState) => createBatchedSpatialTileTreeReferences(view, options.computeSpatialTilesetBaseUrl);
33
52
  }
@@ -1,21 +0,0 @@
1
- {
2
- "files": {
3
- "extensions/frontend-tiles/.rush/temp/shrinkwrap-deps.json": "26b8d7130ce28f6f411cc64fa48f47de86afe4d9",
4
- "extensions/frontend-tiles/LICENSE.md": "77dfb5043040cc16a3611930daba56d86ef54334",
5
- "extensions/frontend-tiles/README.md": "4ea38e83e862cdfa6fab08adc92eb62bcb2fe238",
6
- "extensions/frontend-tiles/config/rush-project.json": "10683a57d3bd2b8ae364fbe8f844c01619f1a821",
7
- "extensions/frontend-tiles/package.json": "7216343e4afe61f33eb3896923035a6ca0b14c1a",
8
- "extensions/frontend-tiles/src/BatchedSpatialTileTreeRefs.ts": "7c696e9b315d871bc22bbbf84f66419dc6c65d10",
9
- "extensions/frontend-tiles/src/BatchedTile.ts": "b67686d0bcea3a6a1a9c563a1574d82e546ee9fa",
10
- "extensions/frontend-tiles/src/BatchedTileContentReader.ts": "7a1392a3e55882eedd68f0fb098db9009f190a3e",
11
- "extensions/frontend-tiles/src/BatchedTileTree.ts": "bc27ba7b54de36cfe58ce3ecd62c7795569d3509",
12
- "extensions/frontend-tiles/src/BatchedTileTreeReference.ts": "0c57e84a7d361ef6d81c1c7c419e9f5891683843",
13
- "extensions/frontend-tiles/src/BatchedTileTreeSupplier.ts": "916587d978864b4f9595b560ee1bac3033a123f5",
14
- "extensions/frontend-tiles/src/BatchedTilesetReader.ts": "0cc90a58fc8f4cafab8c2bbdac6dc1186337b4f0",
15
- "extensions/frontend-tiles/src/FrontendTiles.ts": "e274242958517a7819433778c33f756fda03ccba",
16
- "extensions/frontend-tiles/src/LoggerCategory.ts": "458e67157ea150f6bff37674320dfc8cf5886049",
17
- "extensions/frontend-tiles/src/frontend-tiles.ts": "2778da0ad9afc43273e7105641ef1213edc47a83",
18
- "extensions/frontend-tiles/tsconfig.json": "67be9deac4eea3b76c3e1a66b0e9004ed0f6255e"
19
- },
20
- "arguments": "npm run -s build && npm run -s build:esm "
21
- }