@itwin/core-frontend 4.0.0-dev.4 → 4.0.0-dev.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/lib/cjs/render/webgl/SolarShadowMap.d.ts.map +1 -1
- package/lib/cjs/render/webgl/SolarShadowMap.js +0 -9
- package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/cjs/render/webgl/System.d.ts +0 -1
- package/lib/cjs/render/webgl/System.d.ts.map +1 -1
- package/lib/cjs/render/webgl/System.js +0 -1
- package/lib/cjs/render/webgl/System.js.map +1 -1
- package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTileTree.js +1 -2
- package/lib/cjs/tile/RealityTileTree.js.map +1 -1
- package/lib/cjs/tile/map/ImageryTileTree.d.ts +2 -2
- package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryTileTree.js +10 -5
- package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapTile.d.ts +8 -0
- package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTile.js +26 -2
- package/lib/cjs/tile/map/MapTile.js.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.d.ts +2 -1
- package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.js +11 -8
- package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
- package/lib/esm/render/webgl/SolarShadowMap.d.ts.map +1 -1
- package/lib/esm/render/webgl/SolarShadowMap.js +0 -9
- package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/esm/render/webgl/System.d.ts +0 -1
- package/lib/esm/render/webgl/System.d.ts.map +1 -1
- package/lib/esm/render/webgl/System.js +0 -1
- package/lib/esm/render/webgl/System.js.map +1 -1
- package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/esm/tile/RealityTileTree.js +1 -2
- package/lib/esm/tile/RealityTileTree.js.map +1 -1
- package/lib/esm/tile/map/ImageryTileTree.d.ts +2 -2
- package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryTileTree.js +10 -5
- package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapTile.d.ts +8 -0
- package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTile.js +26 -2
- package/lib/esm/tile/map/MapTile.js.map +1 -1
- package/lib/esm/tile/map/MapTileTree.d.ts +2 -1
- package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTileTree.js +11 -8
- package/lib/esm/tile/map/MapTileTree.js.map +1 -1
- package/package.json +20 -20
|
@@ -33,16 +33,21 @@ class ImageryMapTile extends internal_1.RealityTile {
|
|
|
33
33
|
this.parent.setLeaf(); // Avoid traversing bing branches after no graphics is found.
|
|
34
34
|
this.setIsReady();
|
|
35
35
|
}
|
|
36
|
-
selectCartoDrapeTiles(drapeTiles, rectangleToDrape, drapePixelSize, args) {
|
|
36
|
+
selectCartoDrapeTiles(drapeTiles, highResolutionReplacementTiles, rectangleToDrape, drapePixelSize, args) {
|
|
37
37
|
// Base draping overlap on width rather than height so that tiling schemes with multiple root nodes overlay correctly.
|
|
38
38
|
const isSmallerThanDrape = (this.rectangle.xLength() / this.maximumSize) < drapePixelSize;
|
|
39
|
-
if (this.isLeaf // Include leaves so tiles get stretched past max LOD levels.
|
|
39
|
+
if ((this.isLeaf) // Include leaves so tiles get stretched past max LOD levels. (Only for base imagery layer)
|
|
40
40
|
|| isSmallerThanDrape
|
|
41
41
|
|| this._anyChildNotFound) {
|
|
42
42
|
if (this.isOutOfLodRange) {
|
|
43
43
|
drapeTiles.push(this);
|
|
44
44
|
this.setIsReady();
|
|
45
45
|
}
|
|
46
|
+
else if (this.isLeaf && !isSmallerThanDrape && !this._anyChildNotFound) {
|
|
47
|
+
// These tiles are selected because we are beyond the max LOD of the tile tree,
|
|
48
|
+
// might be used to display "stretched" tiles instead of having blank.
|
|
49
|
+
highResolutionReplacementTiles.push(this);
|
|
50
|
+
}
|
|
46
51
|
else {
|
|
47
52
|
drapeTiles.push(this);
|
|
48
53
|
}
|
|
@@ -57,7 +62,7 @@ class ImageryMapTile extends internal_1.RealityTile {
|
|
|
57
62
|
for (const child of this.children) {
|
|
58
63
|
const mapChild = child;
|
|
59
64
|
if (mapChild.rectangle.intersectsRange(rectangleToDrape))
|
|
60
|
-
status = mapChild.selectCartoDrapeTiles(drapeTiles, rectangleToDrape, drapePixelSize, args);
|
|
65
|
+
status = mapChild.selectCartoDrapeTiles(drapeTiles, highResolutionReplacementTiles, rectangleToDrape, drapePixelSize, args);
|
|
61
66
|
if (internal_1.TileTreeLoadStatus.Loaded !== status)
|
|
62
67
|
break;
|
|
63
68
|
}
|
|
@@ -194,12 +199,12 @@ class ImageryMapTileTree extends internal_1.RealityTileTree {
|
|
|
194
199
|
return [];
|
|
195
200
|
}
|
|
196
201
|
draw(_args) { (0, core_bentley_1.assert)(false); }
|
|
197
|
-
selectCartoDrapeTiles(drapeTiles, tileToDrape, args) {
|
|
202
|
+
selectCartoDrapeTiles(drapeTiles, highResolutionReplacementTiles, tileToDrape, args) {
|
|
198
203
|
const drapeRectangle = tileToDrape.rectangle.clone(ImageryMapTileTree._scratchDrapeRectangle);
|
|
199
204
|
// Base draping overlap on width rather than height so that tiling schemes with multiple root nodes overlay correctly.
|
|
200
205
|
const drapePixelSize = 1.05 * tileToDrape.rectangle.xLength() / tileToDrape.maximumSize;
|
|
201
206
|
drapeRectangle.scaleAboutCenterInPlace(ImageryMapTileTree._drapeIntersectionScale); // Contract slightly to avoid draping adjacent or slivers.
|
|
202
|
-
return this.rootTile.selectCartoDrapeTiles(drapeTiles, drapeRectangle, drapePixelSize, args);
|
|
207
|
+
return this.rootTile.selectCartoDrapeTiles(drapeTiles, highResolutionReplacementTiles, drapeRectangle, drapePixelSize, args);
|
|
203
208
|
}
|
|
204
209
|
cartoRectangleFromQuadId(quadId) { return this.tilingScheme.tileXYToRectangle(quadId.column, quadId.row, quadId.level); }
|
|
205
210
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageryTileTree.js","sourceRoot":"","sources":["../../../../src/tile/map/ImageryTileTree.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { assert, compareBooleans, compareNumbers, compareStrings, compareStringsOrUndefined, dispose } from \"@itwin/core-bentley\";\r\nimport { Angle, Range3d, Transform } from \"@itwin/core-geometry\";\r\nimport { Cartographic, ImageMapLayerSettings, ImageSource, MapLayerSettings, RenderTexture, ViewFlagOverrides } from \"@itwin/core-common\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport { IModelConnection } from \"../../IModelConnection\";\r\nimport { RenderMemory } from \"../../render/RenderMemory\";\r\nimport { RenderSystem } from \"../../render/RenderSystem\";\r\nimport { ScreenViewport } from \"../../Viewport\";\r\nimport {\r\n MapCartoRectangle, MapLayerFeatureInfo, MapLayerImageryProvider, MapLayerTileTreeReference, MapTile, MapTileTreeScaleRangeVisibility, MapTilingScheme, QuadId, RealityTile, RealityTileLoader, RealityTileTree,\r\n RealityTileTreeParams, Tile, TileContent, TileDrawArgs, TileLoadPriority, TileParams, TileRequest, TileTree, TileTreeLoadStatus, TileTreeOwner,\r\n TileTreeSupplier,\r\n} from \"../internal\";\r\n\r\n/** @internal */\r\nexport interface ImageryTileContent extends TileContent {\r\n imageryTexture?: RenderTexture;\r\n}\r\n\r\n/** @internal */\r\nexport class ImageryMapTile extends RealityTile {\r\n private _texture?: RenderTexture;\r\n private _mapTileUsageCount = 0;\r\n\r\n private readonly _outOfLodRange: boolean;\r\n\r\n constructor(params: TileParams, public imageryTree: ImageryMapTileTree, public quadId: QuadId, public rectangle: MapCartoRectangle) {\r\n super(params, imageryTree);\r\n\r\n this._outOfLodRange = this.depth < imageryTree.minDepth;\r\n }\r\n\r\n public get texture() { return this._texture; }\r\n public get tilingScheme() { return this.imageryTree.tilingScheme; }\r\n public override get isDisplayable() { return (this.depth > 1) && super.isDisplayable; }\r\n public override get isOutOfLodRange(): boolean { return this._outOfLodRange;}\r\n\r\n public override setContent(content: ImageryTileContent): void {\r\n this._texture = content.imageryTexture; // No dispose - textures may be shared by terrain tiles so let garbage collector dispose them.\r\n if (undefined === content.imageryTexture)\r\n (this.parent! as ImageryMapTile).setLeaf(); // Avoid traversing bing branches after no graphics is found.\r\n\r\n this.setIsReady();\r\n }\r\n\r\n public selectCartoDrapeTiles(drapeTiles: ImageryMapTile[], rectangleToDrape: MapCartoRectangle, drapePixelSize: number, args: TileDrawArgs): TileTreeLoadStatus {\r\n // Base draping overlap on width rather than height so that tiling schemes with multiple root nodes overlay correctly.\r\n const isSmallerThanDrape = (this.rectangle.xLength() / this.maximumSize) < drapePixelSize;\r\n if ( this.isLeaf // Include leaves so tiles get stretched past max LOD levels.\r\n || isSmallerThanDrape\r\n || this._anyChildNotFound) {\r\n if (this.isOutOfLodRange) {\r\n drapeTiles.push(this);\r\n this.setIsReady();\r\n } else {\r\n drapeTiles.push(this);\r\n }\r\n return TileTreeLoadStatus.Loaded;\r\n }\r\n\r\n let status = this.loadChildren();\r\n if (TileTreeLoadStatus.Loading === status) {\r\n args.markChildrenLoading();\r\n } else if (TileTreeLoadStatus.Loaded === status) {\r\n if (undefined !== this.children) {\r\n for (const child of this.children) {\r\n const mapChild = child as ImageryMapTile;\r\n if (mapChild.rectangle.intersectsRange(rectangleToDrape))\r\n status = mapChild.selectCartoDrapeTiles(drapeTiles, rectangleToDrape, drapePixelSize, args);\r\n if (TileTreeLoadStatus.Loaded !== status)\r\n break;\r\n }\r\n }\r\n }\r\n return status;\r\n }\r\n public markMapTileUsage() {\r\n this._mapTileUsageCount++;\r\n }\r\n public releaseMapTileUsage() {\r\n assert(!this._texture || this._mapTileUsageCount > 0);\r\n if (this._mapTileUsageCount)\r\n this._mapTileUsageCount--;\r\n }\r\n\r\n /** @internal */\r\n public override setLeaf(): void {\r\n // Don't potentially re-request the children later.\r\n this.disposeChildren();\r\n this._isLeaf = true;\r\n this._childrenLoadStatus = TileTreeLoadStatus.Loaded;\r\n }\r\n\r\n protected override _loadChildren(resolve: (children: Tile[] | undefined) => void, _reject: (error: Error) => void): void {\r\n\r\n const imageryTree = this.imageryTree;\r\n const resolveChildren = (childIds: QuadId[]) => {\r\n const children = new Array<Tile>();\r\n const childrenAreLeaves = (this.depth + 1) === imageryTree.maxDepth;\r\n // If children depth is lower than min LOD, mark them as disabled.\r\n // This is important: if those tiles are requested and the server refuse to serve them,\r\n // they will be marked as not found and their descendant will never be displayed.\r\n\r\n childIds.forEach((quadId) => {\r\n const rectangle = imageryTree.tilingScheme.tileXYToRectangle(quadId.column, quadId.row, quadId.level);\r\n const range = Range3d.createXYZXYZ(rectangle.low.x, rectangle.low.x, 0, rectangle.high.x, rectangle.high.y, 0);\r\n const maximumSize = imageryTree.imageryLoader.maximumScreenSize;\r\n const tile = new ImageryMapTile({ parent: this, isLeaf: childrenAreLeaves, contentId: quadId.contentId, range, maximumSize}, imageryTree, quadId, rectangle);\r\n children.push(tile);\r\n });\r\n\r\n resolve(children);\r\n };\r\n\r\n imageryTree.imageryLoader.generateChildIds(this, resolveChildren);\r\n }\r\n\r\n protected override _collectStatistics(stats: RenderMemory.Statistics): void {\r\n super._collectStatistics(stats);\r\n if (this._texture)\r\n stats.addTexture(this._texture.bytesUsed);\r\n }\r\n\r\n public override freeMemory(): void {\r\n // ###TODO MapTiles and ImageryMapTiles share resources and don't currently interact well with TileAdmin.freeMemory(). Opt out for now.\r\n }\r\n\r\n public override disposeContents() {\r\n if (0 === this._mapTileUsageCount) {\r\n super.disposeContents();\r\n this.disposeTexture();\r\n }\r\n }\r\n\r\n private disposeTexture(): void {\r\n this._texture = dispose(this._texture);\r\n }\r\n public override dispose() {\r\n this._mapTileUsageCount = 0;\r\n super.dispose();\r\n }\r\n}\r\n\r\n/** Object that holds various state values for an ImageryTileTree\r\n * @internal */\r\nexport class ImageryTileTreeState {\r\n private _scaleRangeVis: MapTileTreeScaleRangeVisibility;\r\n\r\n constructor() {\r\n this._scaleRangeVis = MapTileTreeScaleRangeVisibility.Unknown;\r\n }\r\n\r\n /** Get the scale range visibility of the imagery tile tree.\r\n * @returns the scale range visibility of the imagery tile tree.\r\n */\r\n public getScaleRangeVisibility() {return this._scaleRangeVis;}\r\n\r\n /** Makes a deep copy of the current object.\r\n */\r\n public clone() {\r\n const clone = new ImageryTileTreeState();\r\n clone._scaleRangeVis = this._scaleRangeVis;\r\n return clone;\r\n }\r\n\r\n /** Reset the scale range visibility of imagery tile tree (i.e. unknown)\r\n */\r\n public reset() {\r\n this._scaleRangeVis = MapTileTreeScaleRangeVisibility.Unknown;\r\n }\r\n\r\n /** Sets the scale range visibility of the current imagery tile tree.\r\n * The state will be derived based on the previous visibility values:\r\n * Initial state: 'Unknown'\r\n * The first call will set the state to either: 'Visible' or 'Hidden'.\r\n * If subsequent visibility values are not consistent with the first visibility state, the state become 'Partial',\r\n * meaning the imagery tree currently contains a mixed of tiles being in range and out of range.\r\n */\r\n public setScaleRangeVisibility(visible: boolean) {\r\n if (this._scaleRangeVis === MapTileTreeScaleRangeVisibility.Unknown) {\r\n this._scaleRangeVis = (visible ? MapTileTreeScaleRangeVisibility.Visible : MapTileTreeScaleRangeVisibility.Hidden);\r\n } else if ((visible && this._scaleRangeVis === MapTileTreeScaleRangeVisibility.Hidden) || (!visible && this._scaleRangeVis === MapTileTreeScaleRangeVisibility.Visible)) {\r\n this._scaleRangeVis = MapTileTreeScaleRangeVisibility.Partial;\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class ImageryMapTileTree extends RealityTileTree {\r\n constructor(params: RealityTileTreeParams, private _imageryLoader: ImageryTileLoader) {\r\n super(params);\r\n const rootQuadId = new QuadId(_imageryLoader.imageryProvider.tilingScheme.rootLevel, 0, 0);\r\n this._rootTile = new ImageryMapTile(params.rootTile, this, rootQuadId, this.getTileRectangle(rootQuadId));\r\n }\r\n public get tilingScheme(): MapTilingScheme { return this._imageryLoader.imageryProvider.tilingScheme; }\r\n public addLogoCards(cards: HTMLTableElement, vp: ScreenViewport): void {\r\n this._imageryLoader.addLogoCards(cards, vp);\r\n }\r\n\r\n public getTileRectangle(quadId: QuadId): MapCartoRectangle {\r\n return this.tilingScheme.tileXYToRectangle(quadId.column, quadId.row, quadId.level);\r\n }\r\n public get imageryLoader(): ImageryTileLoader { return this._imageryLoader; }\r\n public override get is3d(): boolean {\r\n assert(false);\r\n return false;\r\n }\r\n public override get viewFlagOverrides(): ViewFlagOverrides {\r\n assert(false);\r\n return {};\r\n }\r\n public override get isContentUnbounded(): boolean {\r\n assert(false);\r\n return true;\r\n }\r\n protected override _selectTiles(_args: TileDrawArgs): Tile[] {\r\n assert(false);\r\n return [];\r\n }\r\n public override draw(_args: TileDrawArgs): void { assert(false); }\r\n\r\n private static _scratchDrapeRectangle = MapCartoRectangle.createZero();\r\n private static _drapeIntersectionScale = 1.0 - 1.0E-5;\r\n\r\n public selectCartoDrapeTiles(drapeTiles: ImageryMapTile[], tileToDrape: MapTile, args: TileDrawArgs): TileTreeLoadStatus {\r\n const drapeRectangle = tileToDrape.rectangle.clone(ImageryMapTileTree._scratchDrapeRectangle);\r\n // Base draping overlap on width rather than height so that tiling schemes with multiple root nodes overlay correctly.\r\n const drapePixelSize = 1.05 * tileToDrape.rectangle.xLength() / tileToDrape.maximumSize;\r\n drapeRectangle.scaleAboutCenterInPlace(ImageryMapTileTree._drapeIntersectionScale); // Contract slightly to avoid draping adjacent or slivers.\r\n return (this.rootTile as ImageryMapTile).selectCartoDrapeTiles(drapeTiles, drapeRectangle, drapePixelSize, args);\r\n }\r\n public cartoRectangleFromQuadId(quadId: QuadId): MapCartoRectangle { return this.tilingScheme.tileXYToRectangle(quadId.column, quadId.row, quadId.level); }\r\n}\r\n\r\nclass ImageryTileLoader extends RealityTileLoader {\r\n constructor(private _imageryProvider: MapLayerImageryProvider, private _iModel: IModelConnection) {\r\n super();\r\n }\r\n public override computeTilePriority(tile: Tile): number {\r\n return 25 * (this._imageryProvider.usesCachedTiles ? 2 : 1) - tile.depth; // Always cached first then descending by depth (high resolution/front first)\r\n } // Prioritized fast, cached tiles first.\r\n\r\n public get maxDepth(): number { return this._imageryProvider.maximumZoomLevel; }\r\n public get minDepth(): number { return this._imageryProvider.minimumZoomLevel; }\r\n public get priority(): TileLoadPriority { return TileLoadPriority.Map; }\r\n public addLogoCards(cards: HTMLTableElement, vp: ScreenViewport): void {\r\n this._imageryProvider.addLogoCards(cards, vp);\r\n }\r\n\r\n public get maximumScreenSize(): number { return this._imageryProvider.maximumScreenSize; }\r\n public get imageryProvider(): MapLayerImageryProvider { return this._imageryProvider; }\r\n public async getToolTip(strings: string[], quadId: QuadId, carto: Cartographic, tree: ImageryMapTileTree): Promise<void> { await this._imageryProvider.getToolTip(strings, quadId, carto, tree); }\r\n\r\n public async getMapFeatureInfo(featureInfos: MapLayerFeatureInfo[], quadId: QuadId, carto: Cartographic, tree: ImageryMapTileTree): Promise<void> {\r\n await this._imageryProvider.getFeatureInfo(featureInfos, quadId, carto, tree);\r\n }\r\n\r\n public generateChildIds(tile: ImageryMapTile, resolveChildren: (childIds: QuadId[]) => void) { return this._imageryProvider.generateChildIds(tile, resolveChildren); }\r\n\r\n /** Load this tile's children, possibly asynchronously. Pass them to `resolve`, or an error to `reject`. */\r\n public async loadChildren(_tile: RealityTile): Promise<Tile[] | undefined> {\r\n assert(false);\r\n return undefined;\r\n }\r\n public async requestTileContent(tile: Tile, _isCanceled: () => boolean): Promise<TileRequest.Response> {\r\n const quadId = QuadId.createFromContentId(tile.contentId);\r\n return this._imageryProvider.loadTile(quadId.row, quadId.column, quadId.level);\r\n }\r\n\r\n public getRequestChannel(_tile: Tile) {\r\n // ###TODO use hostname from url - but so many layers to go through to get that...\r\n return IModelApp.tileAdmin.channels.getForHttp(\"itwinjs-imagery\");\r\n }\r\n\r\n public override async loadTileContent(tile: Tile, data: TileRequest.ResponseData, system: RenderSystem): Promise<ImageryTileContent> {\r\n assert(data instanceof ImageSource);\r\n assert(tile instanceof ImageryMapTile);\r\n const content: ImageryTileContent = {};\r\n const texture = await this.loadTextureImage(data, system);\r\n if (undefined === texture)\r\n return content;\r\n\r\n content.imageryTexture = texture;\r\n return content;\r\n }\r\n\r\n private async loadTextureImage(source: ImageSource, system: RenderSystem): Promise<RenderTexture | undefined> {\r\n try {\r\n return await system.createTextureFromSource({\r\n type: RenderTexture.Type.FilteredTileSection,\r\n source,\r\n });\r\n } catch {\r\n return undefined;\r\n }\r\n }\r\n}\r\n\r\ninterface ImageryMapLayerTreeId {\r\n settings: ImageMapLayerSettings;\r\n}\r\n\r\n/** Supplies a TileTree that can load and draw tiles based on our imagery provider.\r\n * The TileTree is uniquely identified by its imagery type.\r\n */\r\nclass ImageryMapLayerTreeSupplier implements TileTreeSupplier {\r\n /** Return a numeric value indicating how two tree IDs are ordered relative to one another.\r\n * This allows the ID to serve as a lookup key to find the corresponding TileTree.\r\n */\r\n public compareTileTreeIds(lhs: ImageryMapLayerTreeId, rhs: ImageryMapLayerTreeId): number {\r\n let cmp = compareStrings(lhs.settings.url, rhs.settings.url);\r\n if (0 === cmp) {\r\n cmp = compareStringsOrUndefined(lhs.settings.userName, rhs.settings.userName);\r\n if (0 === cmp) {\r\n cmp = compareStringsOrUndefined(lhs.settings.password, rhs.settings.password);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.settings.transparentBackground, rhs.settings.transparentBackground);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.settings.subLayers.length, rhs.settings.subLayers.length);\r\n if (0 === cmp) {\r\n for (let i = 0; i < lhs.settings.subLayers.length && 0 === cmp; i++)\r\n cmp = compareBooleans(lhs.settings.subLayers[i].visible, rhs.settings.subLayers[i].visible);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return cmp;\r\n }\r\n\r\n /** The first time a tree of a particular imagery type is requested, this function creates it. */\r\n public async createTileTree(id: ImageryMapLayerTreeId, iModel: IModelConnection): Promise<TileTree | undefined> {\r\n const imageryProvider = IModelApp.mapLayerFormatRegistry.createImageryProvider(id.settings);\r\n if (undefined === imageryProvider)\r\n return undefined;\r\n\r\n await imageryProvider.initialize();\r\n const modelId = iModel.transientIds.getNext();\r\n const tilingScheme = imageryProvider.tilingScheme;\r\n const rootLevel = (1 === tilingScheme.numberOfLevelZeroTilesX && 1 === tilingScheme.numberOfLevelZeroTilesY) ? 0 : -1;\r\n const rootTileId = new QuadId(rootLevel, 0, 0).contentId;\r\n const rootRange = Range3d.createXYZXYZ(-Angle.piRadians, -Angle.piOver2Radians, 0, Angle.piRadians, Angle.piOver2Radians, 0);\r\n const rootTileProps = { contentId: rootTileId, range: rootRange, maximumSize: 0 };\r\n const loader = new ImageryTileLoader(imageryProvider, iModel);\r\n const treeProps = { rootTile: rootTileProps, id: modelId, modelId, iModel, location: Transform.createIdentity(), priority: TileLoadPriority.Map, loader, gcsConverterAvailable: false };\r\n return new ImageryMapTileTree(treeProps, loader);\r\n }\r\n}\r\n\r\nconst imageryTreeSupplier = new ImageryMapLayerTreeSupplier();\r\n\r\n/** A reference to one of our tile trees. The specific TileTree drawn may change when the desired imagery type or target iModel changes.\r\n * @internal\r\n */\r\nexport class ImageryMapLayerTreeReference extends MapLayerTileTreeReference {\r\n public constructor(layerSettings: MapLayerSettings, layerIndex: number, iModel: IModelConnection) {\r\n super(layerSettings, layerIndex, iModel);\r\n }\r\n\r\n public override get castsShadows() { return false; }\r\n\r\n /** Return the owner of the TileTree to draw. */\r\n public get treeOwner(): TileTreeOwner {\r\n return this.iModel.tiles.getTileTreeOwner({ settings: this._layerSettings }, imageryTreeSupplier);\r\n }\r\n\r\n public override resetTreeOwner() {\r\n return this.iModel.tiles.resetTileTreeOwner({ settings: this._layerSettings }, imageryTreeSupplier);\r\n }\r\n\r\n public override get imageryProvider(): MapLayerImageryProvider | undefined {\r\n const tree = this.treeOwner.load();\r\n if (!tree || !(tree instanceof ImageryMapTileTree))\r\n return undefined;\r\n\r\n return tree.imageryLoader.imageryProvider;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"ImageryTileTree.js","sourceRoot":"","sources":["../../../../src/tile/map/ImageryTileTree.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { assert, compareBooleans, compareNumbers, compareStrings, compareStringsOrUndefined, dispose } from \"@itwin/core-bentley\";\r\nimport { Angle, Range3d, Transform } from \"@itwin/core-geometry\";\r\nimport { Cartographic, ImageMapLayerSettings, ImageSource, MapLayerSettings, RenderTexture, ViewFlagOverrides } from \"@itwin/core-common\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport { IModelConnection } from \"../../IModelConnection\";\r\nimport { RenderMemory } from \"../../render/RenderMemory\";\r\nimport { RenderSystem } from \"../../render/RenderSystem\";\r\nimport { ScreenViewport } from \"../../Viewport\";\r\nimport {\r\n MapCartoRectangle, MapLayerFeatureInfo, MapLayerImageryProvider, MapLayerTileTreeReference, MapTile, MapTileTreeScaleRangeVisibility, MapTilingScheme, QuadId, RealityTile, RealityTileLoader, RealityTileTree,\r\n RealityTileTreeParams, Tile, TileContent, TileDrawArgs, TileLoadPriority, TileParams, TileRequest, TileTree, TileTreeLoadStatus, TileTreeOwner,\r\n TileTreeSupplier,\r\n} from \"../internal\";\r\n\r\n/** @internal */\r\nexport interface ImageryTileContent extends TileContent {\r\n imageryTexture?: RenderTexture;\r\n}\r\n\r\n/** @internal */\r\nexport class ImageryMapTile extends RealityTile {\r\n private _texture?: RenderTexture;\r\n private _mapTileUsageCount = 0;\r\n\r\n private readonly _outOfLodRange: boolean;\r\n\r\n constructor(params: TileParams, public imageryTree: ImageryMapTileTree, public quadId: QuadId, public rectangle: MapCartoRectangle) {\r\n super(params, imageryTree);\r\n\r\n this._outOfLodRange = this.depth < imageryTree.minDepth;\r\n }\r\n\r\n public get texture() { return this._texture; }\r\n public get tilingScheme() { return this.imageryTree.tilingScheme; }\r\n public override get isDisplayable() { return (this.depth > 1) && super.isDisplayable; }\r\n public override get isOutOfLodRange(): boolean { return this._outOfLodRange;}\r\n\r\n public override setContent(content: ImageryTileContent): void {\r\n this._texture = content.imageryTexture; // No dispose - textures may be shared by terrain tiles so let garbage collector dispose them.\r\n if (undefined === content.imageryTexture)\r\n (this.parent! as ImageryMapTile).setLeaf(); // Avoid traversing bing branches after no graphics is found.\r\n\r\n this.setIsReady();\r\n }\r\n\r\n public selectCartoDrapeTiles(drapeTiles: ImageryMapTile[], highResolutionReplacementTiles: ImageryMapTile[], rectangleToDrape: MapCartoRectangle, drapePixelSize: number, args: TileDrawArgs): TileTreeLoadStatus {\r\n // Base draping overlap on width rather than height so that tiling schemes with multiple root nodes overlay correctly.\r\n const isSmallerThanDrape = (this.rectangle.xLength() / this.maximumSize) < drapePixelSize;\r\n if ( (this.isLeaf ) // Include leaves so tiles get stretched past max LOD levels. (Only for base imagery layer)\r\n || isSmallerThanDrape\r\n || this._anyChildNotFound) {\r\n if (this.isOutOfLodRange ) {\r\n drapeTiles.push(this);\r\n this.setIsReady();\r\n } else if (this.isLeaf && !isSmallerThanDrape && !this._anyChildNotFound) {\r\n // These tiles are selected because we are beyond the max LOD of the tile tree,\r\n // might be used to display \"stretched\" tiles instead of having blank.\r\n highResolutionReplacementTiles.push(this);\r\n } else {\r\n drapeTiles.push(this);\r\n }\r\n return TileTreeLoadStatus.Loaded;\r\n }\r\n\r\n let status = this.loadChildren();\r\n if (TileTreeLoadStatus.Loading === status) {\r\n args.markChildrenLoading();\r\n } else if (TileTreeLoadStatus.Loaded === status) {\r\n if (undefined !== this.children) {\r\n for (const child of this.children) {\r\n const mapChild = child as ImageryMapTile;\r\n if (mapChild.rectangle.intersectsRange(rectangleToDrape))\r\n status = mapChild.selectCartoDrapeTiles(drapeTiles, highResolutionReplacementTiles, rectangleToDrape, drapePixelSize, args);\r\n if (TileTreeLoadStatus.Loaded !== status)\r\n break;\r\n }\r\n }\r\n }\r\n return status;\r\n }\r\n public markMapTileUsage() {\r\n this._mapTileUsageCount++;\r\n }\r\n public releaseMapTileUsage() {\r\n assert(!this._texture || this._mapTileUsageCount > 0);\r\n if (this._mapTileUsageCount)\r\n this._mapTileUsageCount--;\r\n }\r\n\r\n /** @internal */\r\n public override setLeaf(): void {\r\n // Don't potentially re-request the children later.\r\n this.disposeChildren();\r\n this._isLeaf = true;\r\n this._childrenLoadStatus = TileTreeLoadStatus.Loaded;\r\n }\r\n\r\n protected override _loadChildren(resolve: (children: Tile[] | undefined) => void, _reject: (error: Error) => void): void {\r\n\r\n const imageryTree = this.imageryTree;\r\n const resolveChildren = (childIds: QuadId[]) => {\r\n const children = new Array<Tile>();\r\n const childrenAreLeaves = (this.depth + 1) === imageryTree.maxDepth;\r\n // If children depth is lower than min LOD, mark them as disabled.\r\n // This is important: if those tiles are requested and the server refuse to serve them,\r\n // they will be marked as not found and their descendant will never be displayed.\r\n\r\n childIds.forEach((quadId) => {\r\n const rectangle = imageryTree.tilingScheme.tileXYToRectangle(quadId.column, quadId.row, quadId.level);\r\n const range = Range3d.createXYZXYZ(rectangle.low.x, rectangle.low.x, 0, rectangle.high.x, rectangle.high.y, 0);\r\n const maximumSize = imageryTree.imageryLoader.maximumScreenSize;\r\n const tile = new ImageryMapTile({ parent: this, isLeaf: childrenAreLeaves, contentId: quadId.contentId, range, maximumSize}, imageryTree, quadId, rectangle);\r\n children.push(tile);\r\n });\r\n\r\n resolve(children);\r\n };\r\n\r\n imageryTree.imageryLoader.generateChildIds(this, resolveChildren);\r\n }\r\n\r\n protected override _collectStatistics(stats: RenderMemory.Statistics): void {\r\n super._collectStatistics(stats);\r\n if (this._texture)\r\n stats.addTexture(this._texture.bytesUsed);\r\n }\r\n\r\n public override freeMemory(): void {\r\n // ###TODO MapTiles and ImageryMapTiles share resources and don't currently interact well with TileAdmin.freeMemory(). Opt out for now.\r\n }\r\n\r\n public override disposeContents() {\r\n if (0 === this._mapTileUsageCount) {\r\n super.disposeContents();\r\n this.disposeTexture();\r\n }\r\n }\r\n\r\n private disposeTexture(): void {\r\n this._texture = dispose(this._texture);\r\n }\r\n public override dispose() {\r\n this._mapTileUsageCount = 0;\r\n super.dispose();\r\n }\r\n}\r\n\r\n/** Object that holds various state values for an ImageryTileTree\r\n * @internal */\r\nexport class ImageryTileTreeState {\r\n private _scaleRangeVis: MapTileTreeScaleRangeVisibility;\r\n\r\n constructor() {\r\n this._scaleRangeVis = MapTileTreeScaleRangeVisibility.Unknown;\r\n }\r\n\r\n /** Get the scale range visibility of the imagery tile tree.\r\n * @returns the scale range visibility of the imagery tile tree.\r\n */\r\n public getScaleRangeVisibility() {return this._scaleRangeVis;}\r\n\r\n /** Makes a deep copy of the current object.\r\n */\r\n public clone() {\r\n const clone = new ImageryTileTreeState();\r\n clone._scaleRangeVis = this._scaleRangeVis;\r\n return clone;\r\n }\r\n\r\n /** Reset the scale range visibility of imagery tile tree (i.e. unknown)\r\n */\r\n public reset() {\r\n this._scaleRangeVis = MapTileTreeScaleRangeVisibility.Unknown;\r\n }\r\n\r\n /** Sets the scale range visibility of the current imagery tile tree.\r\n * The state will be derived based on the previous visibility values:\r\n * Initial state: 'Unknown'\r\n * The first call will set the state to either: 'Visible' or 'Hidden'.\r\n * If subsequent visibility values are not consistent with the first visibility state, the state become 'Partial',\r\n * meaning the imagery tree currently contains a mixed of tiles being in range and out of range.\r\n */\r\n public setScaleRangeVisibility(visible: boolean) {\r\n if (this._scaleRangeVis === MapTileTreeScaleRangeVisibility.Unknown) {\r\n this._scaleRangeVis = (visible ? MapTileTreeScaleRangeVisibility.Visible : MapTileTreeScaleRangeVisibility.Hidden);\r\n } else if ((visible && this._scaleRangeVis === MapTileTreeScaleRangeVisibility.Hidden) || (!visible && this._scaleRangeVis === MapTileTreeScaleRangeVisibility.Visible)) {\r\n this._scaleRangeVis = MapTileTreeScaleRangeVisibility.Partial;\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class ImageryMapTileTree extends RealityTileTree {\r\n constructor(params: RealityTileTreeParams, private _imageryLoader: ImageryTileLoader) {\r\n super(params);\r\n const rootQuadId = new QuadId(_imageryLoader.imageryProvider.tilingScheme.rootLevel, 0, 0);\r\n this._rootTile = new ImageryMapTile(params.rootTile, this, rootQuadId, this.getTileRectangle(rootQuadId));\r\n }\r\n public get tilingScheme(): MapTilingScheme { return this._imageryLoader.imageryProvider.tilingScheme; }\r\n public addLogoCards(cards: HTMLTableElement, vp: ScreenViewport): void {\r\n this._imageryLoader.addLogoCards(cards, vp);\r\n }\r\n\r\n public getTileRectangle(quadId: QuadId): MapCartoRectangle {\r\n return this.tilingScheme.tileXYToRectangle(quadId.column, quadId.row, quadId.level);\r\n }\r\n public get imageryLoader(): ImageryTileLoader { return this._imageryLoader; }\r\n public override get is3d(): boolean {\r\n assert(false);\r\n return false;\r\n }\r\n public override get viewFlagOverrides(): ViewFlagOverrides {\r\n assert(false);\r\n return {};\r\n }\r\n public override get isContentUnbounded(): boolean {\r\n assert(false);\r\n return true;\r\n }\r\n protected override _selectTiles(_args: TileDrawArgs): Tile[] {\r\n assert(false);\r\n return [];\r\n }\r\n public override draw(_args: TileDrawArgs): void { assert(false); }\r\n\r\n private static _scratchDrapeRectangle = MapCartoRectangle.createZero();\r\n private static _drapeIntersectionScale = 1.0 - 1.0E-5;\r\n\r\n public selectCartoDrapeTiles(drapeTiles: ImageryMapTile[], highResolutionReplacementTiles: ImageryMapTile[], tileToDrape: MapTile, args: TileDrawArgs): TileTreeLoadStatus {\r\n const drapeRectangle = tileToDrape.rectangle.clone(ImageryMapTileTree._scratchDrapeRectangle);\r\n // Base draping overlap on width rather than height so that tiling schemes with multiple root nodes overlay correctly.\r\n const drapePixelSize = 1.05 * tileToDrape.rectangle.xLength() / tileToDrape.maximumSize;\r\n drapeRectangle.scaleAboutCenterInPlace(ImageryMapTileTree._drapeIntersectionScale); // Contract slightly to avoid draping adjacent or slivers.\r\n return (this.rootTile as ImageryMapTile).selectCartoDrapeTiles(drapeTiles, highResolutionReplacementTiles, drapeRectangle, drapePixelSize, args);\r\n }\r\n public cartoRectangleFromQuadId(quadId: QuadId): MapCartoRectangle { return this.tilingScheme.tileXYToRectangle(quadId.column, quadId.row, quadId.level); }\r\n}\r\n\r\nclass ImageryTileLoader extends RealityTileLoader {\r\n constructor(private _imageryProvider: MapLayerImageryProvider, private _iModel: IModelConnection) {\r\n super();\r\n }\r\n public override computeTilePriority(tile: Tile): number {\r\n return 25 * (this._imageryProvider.usesCachedTiles ? 2 : 1) - tile.depth; // Always cached first then descending by depth (high resolution/front first)\r\n } // Prioritized fast, cached tiles first.\r\n\r\n public get maxDepth(): number { return this._imageryProvider.maximumZoomLevel; }\r\n public get minDepth(): number { return this._imageryProvider.minimumZoomLevel; }\r\n public get priority(): TileLoadPriority { return TileLoadPriority.Map; }\r\n public addLogoCards(cards: HTMLTableElement, vp: ScreenViewport): void {\r\n this._imageryProvider.addLogoCards(cards, vp);\r\n }\r\n\r\n public get maximumScreenSize(): number { return this._imageryProvider.maximumScreenSize; }\r\n public get imageryProvider(): MapLayerImageryProvider { return this._imageryProvider; }\r\n public async getToolTip(strings: string[], quadId: QuadId, carto: Cartographic, tree: ImageryMapTileTree): Promise<void> { await this._imageryProvider.getToolTip(strings, quadId, carto, tree); }\r\n\r\n public async getMapFeatureInfo(featureInfos: MapLayerFeatureInfo[], quadId: QuadId, carto: Cartographic, tree: ImageryMapTileTree): Promise<void> {\r\n await this._imageryProvider.getFeatureInfo(featureInfos, quadId, carto, tree);\r\n }\r\n\r\n public generateChildIds(tile: ImageryMapTile, resolveChildren: (childIds: QuadId[]) => void) { return this._imageryProvider.generateChildIds(tile, resolveChildren); }\r\n\r\n /** Load this tile's children, possibly asynchronously. Pass them to `resolve`, or an error to `reject`. */\r\n public async loadChildren(_tile: RealityTile): Promise<Tile[] | undefined> {\r\n assert(false);\r\n return undefined;\r\n }\r\n public async requestTileContent(tile: Tile, _isCanceled: () => boolean): Promise<TileRequest.Response> {\r\n const quadId = QuadId.createFromContentId(tile.contentId);\r\n return this._imageryProvider.loadTile(quadId.row, quadId.column, quadId.level);\r\n }\r\n\r\n public getRequestChannel(_tile: Tile) {\r\n // ###TODO use hostname from url - but so many layers to go through to get that...\r\n return IModelApp.tileAdmin.channels.getForHttp(\"itwinjs-imagery\");\r\n }\r\n\r\n public override async loadTileContent(tile: Tile, data: TileRequest.ResponseData, system: RenderSystem): Promise<ImageryTileContent> {\r\n assert(data instanceof ImageSource);\r\n assert(tile instanceof ImageryMapTile);\r\n const content: ImageryTileContent = {};\r\n const texture = await this.loadTextureImage(data, system);\r\n if (undefined === texture)\r\n return content;\r\n\r\n content.imageryTexture = texture;\r\n return content;\r\n }\r\n\r\n private async loadTextureImage(source: ImageSource, system: RenderSystem): Promise<RenderTexture | undefined> {\r\n try {\r\n return await system.createTextureFromSource({\r\n type: RenderTexture.Type.FilteredTileSection,\r\n source,\r\n });\r\n } catch {\r\n return undefined;\r\n }\r\n }\r\n}\r\n\r\ninterface ImageryMapLayerTreeId {\r\n settings: ImageMapLayerSettings;\r\n}\r\n\r\n/** Supplies a TileTree that can load and draw tiles based on our imagery provider.\r\n * The TileTree is uniquely identified by its imagery type.\r\n */\r\nclass ImageryMapLayerTreeSupplier implements TileTreeSupplier {\r\n /** Return a numeric value indicating how two tree IDs are ordered relative to one another.\r\n * This allows the ID to serve as a lookup key to find the corresponding TileTree.\r\n */\r\n public compareTileTreeIds(lhs: ImageryMapLayerTreeId, rhs: ImageryMapLayerTreeId): number {\r\n let cmp = compareStrings(lhs.settings.url, rhs.settings.url);\r\n if (0 === cmp) {\r\n cmp = compareStringsOrUndefined(lhs.settings.userName, rhs.settings.userName);\r\n if (0 === cmp) {\r\n cmp = compareStringsOrUndefined(lhs.settings.password, rhs.settings.password);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.settings.transparentBackground, rhs.settings.transparentBackground);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.settings.subLayers.length, rhs.settings.subLayers.length);\r\n if (0 === cmp) {\r\n for (let i = 0; i < lhs.settings.subLayers.length && 0 === cmp; i++)\r\n cmp = compareBooleans(lhs.settings.subLayers[i].visible, rhs.settings.subLayers[i].visible);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return cmp;\r\n }\r\n\r\n /** The first time a tree of a particular imagery type is requested, this function creates it. */\r\n public async createTileTree(id: ImageryMapLayerTreeId, iModel: IModelConnection): Promise<TileTree | undefined> {\r\n const imageryProvider = IModelApp.mapLayerFormatRegistry.createImageryProvider(id.settings);\r\n if (undefined === imageryProvider)\r\n return undefined;\r\n\r\n await imageryProvider.initialize();\r\n const modelId = iModel.transientIds.getNext();\r\n const tilingScheme = imageryProvider.tilingScheme;\r\n const rootLevel = (1 === tilingScheme.numberOfLevelZeroTilesX && 1 === tilingScheme.numberOfLevelZeroTilesY) ? 0 : -1;\r\n const rootTileId = new QuadId(rootLevel, 0, 0).contentId;\r\n const rootRange = Range3d.createXYZXYZ(-Angle.piRadians, -Angle.piOver2Radians, 0, Angle.piRadians, Angle.piOver2Radians, 0);\r\n const rootTileProps = { contentId: rootTileId, range: rootRange, maximumSize: 0 };\r\n const loader = new ImageryTileLoader(imageryProvider, iModel);\r\n const treeProps = { rootTile: rootTileProps, id: modelId, modelId, iModel, location: Transform.createIdentity(), priority: TileLoadPriority.Map, loader, gcsConverterAvailable: false };\r\n return new ImageryMapTileTree(treeProps, loader);\r\n }\r\n}\r\n\r\nconst imageryTreeSupplier = new ImageryMapLayerTreeSupplier();\r\n\r\n/** A reference to one of our tile trees. The specific TileTree drawn may change when the desired imagery type or target iModel changes.\r\n * @internal\r\n */\r\nexport class ImageryMapLayerTreeReference extends MapLayerTileTreeReference {\r\n public constructor(layerSettings: MapLayerSettings, layerIndex: number, iModel: IModelConnection) {\r\n super(layerSettings, layerIndex, iModel);\r\n }\r\n\r\n public override get castsShadows() { return false; }\r\n\r\n /** Return the owner of the TileTree to draw. */\r\n public get treeOwner(): TileTreeOwner {\r\n return this.iModel.tiles.getTileTreeOwner({ settings: this._layerSettings }, imageryTreeSupplier);\r\n }\r\n\r\n public override resetTreeOwner() {\r\n return this.iModel.tiles.resetTileTreeOwner({ settings: this._layerSettings }, imageryTreeSupplier);\r\n }\r\n\r\n public override get imageryProvider(): MapLayerImageryProvider | undefined {\r\n const tree = this.treeOwner.load();\r\n if (!tree || !(tree instanceof ImageryMapTileTree))\r\n return undefined;\r\n\r\n return tree.imageryLoader.imageryProvider;\r\n }\r\n}\r\n"]}
|
|
@@ -54,6 +54,7 @@ export declare class MapTile extends RealityTile {
|
|
|
54
54
|
private static _maxParentHeightDepth;
|
|
55
55
|
private _imageryTiles?;
|
|
56
56
|
private _hiddenTiles?;
|
|
57
|
+
private _highResolutionReplacementTiles?;
|
|
57
58
|
/** @internal */
|
|
58
59
|
everLoaded: boolean;
|
|
59
60
|
/** @internal */
|
|
@@ -80,6 +81,13 @@ export declare class MapTile extends RealityTile {
|
|
|
80
81
|
* @internal
|
|
81
82
|
*/
|
|
82
83
|
get hiddenImageryTiles(): ImageryMapTile[] | undefined;
|
|
84
|
+
/** List of leafs tiles that have been selected as a replacement for missing high resolution tiles.
|
|
85
|
+
* When this list is non-empty this means we are past the maximum LOD available of the tile tree.
|
|
86
|
+
* By using those tiles, you are likely to get a display where tiles looks pixelated..
|
|
87
|
+
* in some cases this is preferred to have no tile at all.
|
|
88
|
+
* @internal
|
|
89
|
+
*/
|
|
90
|
+
get highResolutionReplacementTiles(): ImageryMapTile[] | undefined;
|
|
83
91
|
/** The [[MapTileTree]] to which this tile belongs. */
|
|
84
92
|
readonly mapTree: MapTileTree;
|
|
85
93
|
/** Uniquely identifies this tile within its [[mapTree]]. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapTile.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/MapTile.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"MapTile.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/MapTile.ts"],"names":[],"mappings":"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"}
|
|
@@ -128,6 +128,13 @@ class MapTile extends internal_1.RealityTile {
|
|
|
128
128
|
* @internal
|
|
129
129
|
*/
|
|
130
130
|
get hiddenImageryTiles() { return this._hiddenTiles; }
|
|
131
|
+
/** List of leafs tiles that have been selected as a replacement for missing high resolution tiles.
|
|
132
|
+
* When this list is non-empty this means we are past the maximum LOD available of the tile tree.
|
|
133
|
+
* By using those tiles, you are likely to get a display where tiles looks pixelated..
|
|
134
|
+
* in some cases this is preferred to have no tile at all.
|
|
135
|
+
* @internal
|
|
136
|
+
*/
|
|
137
|
+
get highResolutionReplacementTiles() { return this._highResolutionReplacementTiles; }
|
|
131
138
|
/** @internal */
|
|
132
139
|
getRangeCorners(result) {
|
|
133
140
|
return this._patch instanceof PlanarTilePatch ? this._patch.getRangeCorners(this.heightRange, result) : this.range.corners(result);
|
|
@@ -400,6 +407,9 @@ class MapTile extends internal_1.RealityTile {
|
|
|
400
407
|
if (this._hiddenTiles) {
|
|
401
408
|
this._hiddenTiles = undefined;
|
|
402
409
|
}
|
|
410
|
+
if (this._highResolutionReplacementTiles) {
|
|
411
|
+
this._highResolutionReplacementTiles = undefined;
|
|
412
|
+
}
|
|
403
413
|
}
|
|
404
414
|
/** @internal */
|
|
405
415
|
produceGraphics() {
|
|
@@ -491,12 +501,26 @@ class MapTile extends internal_1.RealityTile {
|
|
|
491
501
|
this.clearImageryTiles();
|
|
492
502
|
this._imageryTiles = new Array();
|
|
493
503
|
this._hiddenTiles = new Array();
|
|
504
|
+
this._highResolutionReplacementTiles = new Array();
|
|
494
505
|
for (const layerImageryTree of this.mapTree.layerImageryTrees) {
|
|
495
|
-
|
|
496
|
-
|
|
506
|
+
let tmpTiles = new Array();
|
|
507
|
+
const tmpLeafTiles = new Array();
|
|
508
|
+
if (internal_1.TileTreeLoadStatus.Loaded !== layerImageryTree.tree.selectCartoDrapeTiles(tmpTiles, tmpLeafTiles, this, args)) {
|
|
497
509
|
this._imageryTiles = undefined;
|
|
498
510
|
return;
|
|
499
511
|
}
|
|
512
|
+
// When the base layer is zoomed-in beyond it's max resolution,
|
|
513
|
+
// we display leaf tiles and stretched them if needed.
|
|
514
|
+
// We don't want the same behavior non-base layers, in the case,
|
|
515
|
+
// the layer will simply disappear past its max resolution.
|
|
516
|
+
// Note: Replacement leaf tiles are kept as a mean to determine which
|
|
517
|
+
// imagery tree has reached it's maximum zoom level.
|
|
518
|
+
if (layerImageryTree.baseImageryLayer) {
|
|
519
|
+
tmpTiles = [...tmpTiles, ...tmpLeafTiles];
|
|
520
|
+
}
|
|
521
|
+
else {
|
|
522
|
+
this._highResolutionReplacementTiles = [...this._highResolutionReplacementTiles, ...tmpLeafTiles];
|
|
523
|
+
}
|
|
500
524
|
// MapTileTree might include a non-visible imagery tree, we need to check for that.
|
|
501
525
|
if (layerImageryTree.settings.visible && !layerImageryTree.settings.allSubLayersInvisible) {
|
|
502
526
|
for (const imageryTile of tmpTiles) {
|