@itwin/core-frontend 4.0.0 → 4.0.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"RealityTileTree.js","sourceRoot":"","sources":["../../../src/tile/RealityTileTree.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, BeTimePoint, ProcessDetector } from \"@itwin/core-bentley\";\r\nimport {\r\n Matrix3d, Point3d, Range3d, Transform, Vector3d, XYZProps,\r\n} from \"@itwin/core-geometry\";\r\nimport { Cartographic, ColorDef, GeoCoordStatus, ViewFlagOverrides } from \"@itwin/core-common\";\r\nimport { BackgroundMapGeometry } from \"../BackgroundMapGeometry\";\r\nimport { GeoConverter } from \"../GeoServices\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { GraphicBranch } from \"../render/GraphicBranch\";\r\nimport { GraphicBuilder } from \"../render/GraphicBuilder\";\r\nimport { SceneContext } from \"../ViewContext\";\r\nimport {\r\n GraphicsCollectorDrawArgs, MapTile, RealityTile, RealityTileLoader, RealityTileParams, Tile, TileDrawArgs, TileGeometryCollector,\r\n TileGraphicType, TileParams, TileTree, TileTreeParams,\r\n} from \"./internal\";\r\n\r\n/** @internal */\r\nexport class TraversalDetails {\r\n public queuedChildren = new Array<Tile>();\r\n public childrenSelected = false;\r\n public shouldSelectParent = false;\r\n\r\n public initialize() {\r\n this.queuedChildren.length = 0;\r\n this.childrenSelected = false;\r\n this.shouldSelectParent = false;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class TraversalChildrenDetails {\r\n private _childDetails: TraversalDetails[] = [];\r\n\r\n public initialize() {\r\n for (const child of this._childDetails)\r\n child.initialize();\r\n }\r\n\r\n public getChildDetail(index: number) {\r\n while (this._childDetails.length <= index)\r\n this._childDetails.push(new TraversalDetails());\r\n\r\n return this._childDetails[index];\r\n }\r\n\r\n public combine(parentDetails: TraversalDetails) {\r\n parentDetails.queuedChildren.length = 0;\r\n parentDetails.childrenSelected = false;\r\n parentDetails.shouldSelectParent = false;\r\n\r\n for (const child of this._childDetails) {\r\n parentDetails.childrenSelected = parentDetails.childrenSelected || child.childrenSelected;\r\n parentDetails.shouldSelectParent = parentDetails.shouldSelectParent || child.shouldSelectParent;\r\n\r\n for (const queuedChild of child.queuedChildren)\r\n parentDetails.queuedChildren.push(queuedChild);\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class TraversalSelectionContext {\r\n public preloaded = new Set<RealityTile>();\r\n public missing = new Array<RealityTile>();\r\n public get selectionCountExceeded() { return this._maxSelectionCount === undefined ? false : (this.missing.length + this.selected.length) > this._maxSelectionCount; } // Avoid selecting excessive number of tiles.\r\n constructor(public selected: Tile[], public displayedDescendants: Tile[][], public preloadDebugBuilder?: GraphicBuilder, private _maxSelectionCount?: number) { }\r\n\r\n public selectOrQueue(tile: RealityTile, args: TileDrawArgs, traversalDetails: TraversalDetails) {\r\n tile.selectSecondaryTiles(args, this);\r\n tile.markUsed(args);\r\n traversalDetails.shouldSelectParent = true;\r\n\r\n if (tile.isReady) {\r\n args.markReady(tile);\r\n this.selected.push(tile);\r\n tile.markDisplayed();\r\n this.displayedDescendants.push((traversalDetails.childrenSelected) ? traversalDetails.queuedChildren.slice() : []);\r\n traversalDetails.queuedChildren.length = 0;\r\n traversalDetails.childrenSelected = true;\r\n traversalDetails.shouldSelectParent = false;\r\n } else if (!tile.isNotFound) {\r\n traversalDetails.queuedChildren.push(tile);\r\n if (!tile.isLoaded)\r\n this.missing.push(tile);\r\n }\r\n }\r\n\r\n public preload(tile: RealityTile, args: TileDrawArgs): void {\r\n if (!this.preloaded.has(tile)) {\r\n if (this.preloadDebugBuilder)\r\n tile.addBoundingGraphic(this.preloadDebugBuilder, ColorDef.red);\r\n\r\n tile.markUsed(args);\r\n tile.selectSecondaryTiles(args, this);\r\n this.preloaded.add(tile);\r\n if (!tile.isNotFound && !tile.isLoaded)\r\n this.missing.push(tile);\r\n }\r\n }\r\n\r\n public select(tiles: RealityTile[], args: TileDrawArgs): void {\r\n for (const tile of tiles) {\r\n tile.markUsed(args);\r\n this.selected.push(tile);\r\n this.displayedDescendants.push([]);\r\n }\r\n }\r\n}\r\n\r\nconst scratchCarto = Cartographic.createZero();\r\nconst scratchPoint = Point3d.createZero(), scratchOrigin = Point3d.createZero();\r\nconst scratchRange = Range3d.createNull();\r\nconst scratchX = Vector3d.createZero(), scratchY = Vector3d.createZero(), scratchZ = Vector3d.createZero();\r\nconst scratchMatrix = Matrix3d.createZero(), scratchTransform = Transform.createZero();\r\n\r\ninterface ChildReprojection {\r\n child: RealityTile;\r\n ecefCenter: Point3d;\r\n dbPoints: Point3d[]; // Center, xEnd, yEnd, zEnd\r\n}\r\n\r\n/** @internal */\r\nexport interface RealityTileTreeParams extends TileTreeParams {\r\n readonly loader: RealityTileLoader;\r\n readonly yAxisUp?: boolean;\r\n readonly rootTile: RealityTileParams;\r\n readonly rootToEcef?: Transform;\r\n readonly gcsConverterAvailable: boolean;\r\n}\r\n\r\n/** Base class for a [[TileTree]] representing a reality model (e.g., a point cloud or photogrammetry mesh) or 3d terrain with map imagery.\r\n * The tiles within the tree are instances of [[RealityTile]]s.\r\n * @public\r\n */\r\nexport class RealityTileTree extends TileTree {\r\n /** @internal */\r\n public traversalChildrenByDepth: TraversalChildrenDetails[] = [];\r\n /** @internal */\r\n public readonly loader: RealityTileLoader;\r\n /** @internal */\r\n public readonly yAxisUp: boolean;\r\n /** @internal */\r\n public cartesianRange: Range3d;\r\n /** @internal */\r\n public cartesianTransitionDistance: number;\r\n /** @internal */\r\n protected _gcsConverter: GeoConverter | undefined;\r\n /** @internal */\r\n protected _rootTile: RealityTile;\r\n /** @internal */\r\n protected _rootToEcef?: Transform;\r\n /** @internal */\r\n protected _ecefToDb?: Transform;\r\n\r\n /** @internal */\r\n public constructor(params: RealityTileTreeParams) {\r\n super(params);\r\n this.loader = params.loader;\r\n this.yAxisUp = true === params.yAxisUp;\r\n this._rootTile = this.createTile(params.rootTile);\r\n this.cartesianRange = BackgroundMapGeometry.getCartesianRange(this.iModel);\r\n this.cartesianTransitionDistance = this.cartesianRange.diagonal().magnitudeXY() * .25; // Transition distance from elliptical to cartesian.\r\n this._gcsConverter = params.gcsConverterAvailable ? params.iModel.geoServices.getConverter(\"WGS84\") : undefined;\r\n if (params.rootToEcef) {\r\n this._rootToEcef = params.rootToEcef;\r\n const dbToRoot = this.iModelTransform.inverse();\r\n if (dbToRoot) {\r\n const dbToEcef = this._rootToEcef.multiplyTransformTransform(dbToRoot);\r\n this._ecefToDb = dbToEcef.inverse();\r\n }\r\n }\r\n }\r\n\r\n /** @internal */\r\n public get rootTile(): RealityTile { return this._rootTile; }\r\n /** @internal */\r\n public get is3d() { return true; }\r\n /** @internal */\r\n public get maxDepth() { return this.loader.maxDepth; }\r\n /** @internal */\r\n public get minDepth() { return this.loader.minDepth; }\r\n /** @internal */\r\n public override get isContentUnbounded() { return this.loader.isContentUnbounded; }\r\n /** @internal */\r\n public get isTransparent() { return false; }\r\n\r\n /** @internal */\r\n protected _selectTiles(args: TileDrawArgs): Tile[] { return this.selectRealityTiles(args, []); }\r\n /** @internal */\r\n public get viewFlagOverrides(): ViewFlagOverrides { return this.loader.viewFlagOverrides; }\r\n /** @internal */\r\n public override get parentsAndChildrenExclusive() { return this.loader.parentsAndChildrenExclusive; }\r\n\r\n /** @internal */\r\n public createTile(props: TileParams): RealityTile { return new RealityTile(props, this); }\r\n\r\n /** Collect tiles from this tile tree based on the criteria implemented by `collector`.\r\n * @internal\r\n */\r\n public override collectTileGeometry(collector: TileGeometryCollector): void {\r\n this.rootTile.collectTileGeometry(collector);\r\n }\r\n\r\n /** @internal */\r\n public prune(): void {\r\n const olderThan = BeTimePoint.now().minus(this.expirationTime);\r\n this.rootTile.purgeContents(olderThan, !ProcessDetector.isMobileBrowser);\r\n }\r\n\r\n /** @internal */\r\n public draw(args: TileDrawArgs): void {\r\n const displayedTileDescendants = new Array<RealityTile[]>();\r\n const debugControl = args.context.target.debugControl;\r\n const selectBuilder = (debugControl && debugControl.displayRealityTileRanges) ? args.context.createSceneGraphicBuilder() : undefined;\r\n const preloadDebugBuilder = (debugControl && debugControl.displayRealityTilePreload) ? args.context.createSceneGraphicBuilder() : undefined;\r\n const graphicTypeBranches = new Map<TileGraphicType, GraphicBranch>();\r\n\r\n const selectedTiles = this.selectRealityTiles(args, displayedTileDescendants, preloadDebugBuilder);\r\n args.processSelectedTiles(selectedTiles);\r\n let sortIndices;\r\n\r\n if (!this.parentsAndChildrenExclusive) {\r\n sortIndices = selectedTiles.map((_x, i) => i);\r\n sortIndices.sort((a, b) => selectedTiles[a].depth - selectedTiles[b].depth);\r\n }\r\n\r\n if (!(args instanceof GraphicsCollectorDrawArgs))\r\n this.collectClassifierGraphics(args, selectedTiles);\r\n\r\n assert(selectedTiles.length === displayedTileDescendants.length);\r\n for (let i = 0; i < selectedTiles.length; i++) {\r\n const index = sortIndices ? sortIndices[i] : i;\r\n const selectedTile = selectedTiles[index];\r\n const graphics = args.getTileGraphics(selectedTile);\r\n const tileGraphicType = selectedTile.graphicType;\r\n let targetBranch;\r\n if (undefined !== tileGraphicType && tileGraphicType !== args.context.graphicType) {\r\n if (!(targetBranch = graphicTypeBranches.get(tileGraphicType))) {\r\n graphicTypeBranches.set(tileGraphicType, targetBranch = new GraphicBranch(false));\r\n targetBranch.setViewFlagOverrides(args.graphics.viewFlagOverrides);\r\n targetBranch.symbologyOverrides = args.graphics.symbologyOverrides;\r\n }\r\n }\r\n\r\n if (!targetBranch)\r\n targetBranch = args.graphics;\r\n\r\n if (undefined !== graphics) {\r\n const displayedDescendants = displayedTileDescendants[index];\r\n if (0 === displayedDescendants.length || !this.loader.parentsAndChildrenExclusive || selectedTile.allChildrenIncluded(displayedDescendants)) {\r\n targetBranch.add(graphics);\r\n if (selectBuilder)\r\n selectedTile.addBoundingGraphic(selectBuilder, ColorDef.green);\r\n } else {\r\n if (selectBuilder)\r\n selectedTile.addBoundingGraphic(selectBuilder, ColorDef.red);\r\n\r\n for (const displayedDescendant of displayedDescendants) {\r\n const clipVector = displayedDescendant.getContentClip();\r\n if (selectBuilder)\r\n displayedDescendant.addBoundingGraphic(selectBuilder, ColorDef.blue);\r\n\r\n if (undefined === clipVector) {\r\n targetBranch.add(graphics);\r\n } else {\r\n clipVector.transformInPlace(args.location);\r\n if (!this.isTransparent)\r\n for (const primitive of clipVector.clips)\r\n for (const clipPlanes of primitive.fetchClipPlanesRef()!.convexSets)\r\n for (const plane of clipPlanes.planes)\r\n plane.offsetDistance(-displayedDescendant.radius * .05); // Overlap with existing (high resolution) tile slightly to avoid cracks.\r\n\r\n const branch = new GraphicBranch(false);\r\n branch.add(graphics);\r\n const clipVolume = args.context.target.renderSystem.createClipVolume(clipVector);\r\n targetBranch.add(args.context.createGraphicBranch(branch, Transform.createIdentity(), { clipVolume }));\r\n }\r\n }\r\n }\r\n if (preloadDebugBuilder)\r\n targetBranch.add(preloadDebugBuilder.finish());\r\n\r\n if (selectBuilder)\r\n targetBranch.add(selectBuilder.finish());\r\n\r\n const rangeGraphic = selectedTile.getRangeGraphic(args.context);\r\n if (undefined !== rangeGraphic)\r\n targetBranch.add(rangeGraphic);\r\n }\r\n }\r\n\r\n args.drawGraphics();\r\n for (const graphicTypeBranch of graphicTypeBranches) {\r\n args.drawGraphicsWithType(graphicTypeBranch[0], graphicTypeBranch[1]);\r\n }\r\n }\r\n\r\n /** @internal */\r\n protected collectClassifierGraphics(args: TileDrawArgs, selectedTiles: RealityTile[]) {\r\n const classifier = args.context.planarClassifiers.get(this.modelId);\r\n if (classifier)\r\n classifier.collectGraphics(args.context, { modelId: this.modelId, tiles: selectedTiles, location: args.location, isPointCloud: this.isPointCloud });\r\n }\r\n\r\n /** @internal */\r\n public getTraversalChildren(depth: number) {\r\n while (this.traversalChildrenByDepth.length <= depth)\r\n this.traversalChildrenByDepth.push(new TraversalChildrenDetails());\r\n\r\n return this.traversalChildrenByDepth[depth];\r\n }\r\n\r\n /** @internal */\r\n public doReprojectChildren(tile: Tile): boolean {\r\n if (!(tile instanceof RealityTile) || this._gcsConverter === undefined || this._rootToEcef === undefined || undefined === this._ecefToDb)\r\n return false;\r\n\r\n const tileRange = this.iModelTransform.isIdentity ? tile.range : this.iModelTransform.multiplyRange(tile.range, scratchRange);\r\n\r\n return this.cartesianRange.intersectsRange(tileRange);\r\n }\r\n\r\n /** @internal */\r\n public reprojectAndResolveChildren(parent: Tile, children: Tile[], resolve: (children: Tile[] | undefined) => void): void {\r\n if (!this.doReprojectChildren(parent)) {\r\n resolve(children);\r\n return;\r\n }\r\n\r\n const ecefToDb = this._ecefToDb!; // Tested for undefined in doReprojectChildren\r\n const rootToDb = this.iModelTransform;\r\n const dbToEcef = ecefToDb.inverse()!;\r\n const reprojectChildren = new Array<ChildReprojection>();\r\n for (const child of children) {\r\n const realityChild = child as RealityTile;\r\n const childRange = realityChild.rangeCorners ? Range3d.createTransformedArray(rootToDb, realityChild.rangeCorners) : rootToDb.multiplyRange(realityChild.contentRange, scratchRange);\r\n const dbCenter = childRange.center;\r\n const ecefCenter = dbToEcef.multiplyPoint3d(dbCenter);\r\n const dbPoints = [dbCenter, dbCenter.plusXYZ(1), dbCenter.plusXYZ(0, 1), dbCenter.plusXYZ(0, 0, 1)];\r\n reprojectChildren.push({ child: realityChild, ecefCenter, dbPoints });\r\n }\r\n if (reprojectChildren.length === 0)\r\n resolve(children);\r\n else {\r\n const requestProps = new Array<XYZProps>();\r\n\r\n for (const reprojection of reprojectChildren) {\r\n for (const dbPoint of reprojection.dbPoints) {\r\n const ecefPoint = dbToEcef.multiplyPoint3d(dbPoint);\r\n const carto = Cartographic.fromEcef(ecefPoint, scratchCarto);\r\n if (carto)\r\n requestProps.push({ x: carto.longitudeDegrees, y: carto.latitudeDegrees, z: carto.height });\r\n\r\n }\r\n }\r\n\r\n if (requestProps.length !== 4 * reprojectChildren.length)\r\n resolve(children);\r\n else {\r\n this._gcsConverter!.getIModelCoordinatesFromGeoCoordinates(requestProps).then((response) => {\r\n\r\n const reprojectedCoords = response.iModelCoords;\r\n const dbToRoot = rootToDb.inverse()!;\r\n const getReprojectedPoint = (original: Point3d, reprojectedXYZ: XYZProps) => {\r\n scratchPoint.setFromJSON(reprojectedXYZ);\r\n const cartesianDistance = this.cartesianRange.distanceToPoint(scratchPoint);\r\n if (cartesianDistance < this.cartesianTransitionDistance)\r\n return scratchPoint.interpolate(cartesianDistance / this.cartesianTransitionDistance, original, scratchPoint);\r\n else\r\n return original;\r\n };\r\n\r\n let responseIndex = 0;\r\n for (const reprojection of reprojectChildren) {\r\n if (reprojectedCoords.every((coord) => coord.s === GeoCoordStatus.Success)) {\r\n const reprojectedOrigin = getReprojectedPoint(reprojection.dbPoints[0], reprojectedCoords[responseIndex++].p).clone(scratchOrigin);\r\n const xVector = Vector3d.createStartEnd(reprojectedOrigin, getReprojectedPoint(reprojection.dbPoints[1], reprojectedCoords[responseIndex++].p), scratchX);\r\n const yVector = Vector3d.createStartEnd(reprojectedOrigin, getReprojectedPoint(reprojection.dbPoints[2], reprojectedCoords[responseIndex++].p), scratchY);\r\n const zVector = Vector3d.createStartEnd(reprojectedOrigin, getReprojectedPoint(reprojection.dbPoints[3], reprojectedCoords[responseIndex++].p), scratchZ);\r\n const matrix = Matrix3d.createColumns(xVector, yVector, zVector, scratchMatrix);\r\n if (matrix !== undefined) {\r\n const dbReprojection = Transform.createMatrixPickupPutdown(matrix, reprojection.dbPoints[0], reprojectedOrigin, scratchTransform);\r\n if (dbReprojection) {\r\n const rootReprojection = dbToRoot.multiplyTransformTransform(dbReprojection).multiplyTransformTransform(rootToDb);\r\n reprojection.child.reproject(rootReprojection);\r\n }\r\n }\r\n }\r\n }\r\n\r\n resolve(children);\r\n }).catch(() => {\r\n resolve(children); // Error occured in reprojection - just resolve with unprojected corners.\r\n });\r\n }\r\n }\r\n }\r\n\r\n /** @internal */\r\n public getBaseRealityDepth(_sceneContext: SceneContext) { return -1; }\r\n\r\n /** Scan the list of currently selected reality tiles, and fire the viewport's 'onMapLayerScaleRangeVisibilityChanged ' event\r\n * if any scale range visibility change is detected for one more map-layer definition.\r\n * @internal\r\n */\r\n public reportTileVisibility(_args: TileDrawArgs, _selected: RealityTile[]) { }\r\n\r\n /** @internal */\r\n public selectRealityTiles(args: TileDrawArgs, displayedDescendants: RealityTile[][], preloadDebugBuilder?: GraphicBuilder): RealityTile[] {\r\n this._lastSelected = BeTimePoint.now();\r\n const selected: RealityTile[] = [];\r\n const context = new TraversalSelectionContext(selected, displayedDescendants, preloadDebugBuilder, args.maxRealityTreeSelectionCount);\r\n const rootTile = this.rootTile;\r\n const debugControl = args.context.target.debugControl;\r\n const freezeTiles = debugControl && debugControl.freezeRealityTiles;\r\n\r\n rootTile.selectRealityTiles(context, args, new TraversalDetails());\r\n\r\n const baseDepth = this.getBaseRealityDepth(args.context);\r\n\r\n if (!args.context.target.renderSystem.isMobile && 0 === context.missing.length) { // We skip preloading on mobile devices.\r\n if (baseDepth > 0) // Maps may force loading of low level globe tiles.\r\n rootTile.preloadRealityTilesAtDepth(baseDepth, context, args);\r\n\r\n if (!freezeTiles)\r\n rootTile.preloadProtectedTiles(args, context);\r\n }\r\n\r\n if (!freezeTiles)\r\n for (const tile of context.missing) {\r\n const loadableTile = tile.loadableTile;\r\n\r\n loadableTile.markUsed(args);\r\n args.insertMissing(loadableTile);\r\n }\r\n\r\n if (debugControl && debugControl.logRealityTiles) {\r\n this.logTiles(\"Selected: \", selected.values());\r\n const preloaded = [];\r\n for (const tile of context.preloaded)\r\n preloaded.push(tile);\r\n\r\n this.logTiles(\"Preloaded: \", preloaded.values());\r\n this.logTiles(\"Missing: \", context.missing.values());\r\n\r\n const imageryTiles: RealityTile[] = [];\r\n for (const selectedTile of selected) {\r\n if (selectedTile instanceof MapTile) {\r\n const selectedImageryTiles = (selectedTile).imageryTiles;\r\n if (selectedImageryTiles)\r\n selectedImageryTiles.forEach((tile) => imageryTiles.push(tile));\r\n }\r\n }\r\n if (imageryTiles.length)\r\n this.logTiles(\"Imagery:\", imageryTiles.values());\r\n }\r\n\r\n this.reportTileVisibility(args, selected);\r\n\r\n IModelApp.tileAdmin.addTilesForUser(args.context.viewport, selected, args.readyTiles, args.touchedTiles);\r\n return selected;\r\n }\r\n\r\n /** @internal */\r\n protected logTiles(label: string, tiles: IterableIterator<Tile>) {\r\n let depthString = \"\";\r\n let min = 10000, max = -10000;\r\n let count = 0;\r\n const depthMap = new Map<number, number>();\r\n for (const tile of tiles) {\r\n count++;\r\n const depth = tile.depth;\r\n min = Math.min(min, tile.depth);\r\n max = Math.max(max, tile.depth);\r\n const found = depthMap.get(depth);\r\n depthMap.set(depth, found === undefined ? 1 : found + 1);\r\n }\r\n\r\n depthMap.forEach((value, key) => depthString += `${key}(x${value}), `);\r\n // eslint-disable-next-line no-console\r\n console.log(`${label}: ${count} Min: ${min} Max: ${max} Depths: ${depthString}`);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"RealityTileTree.js","sourceRoot":"","sources":["../../../src/tile/RealityTileTree.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, BeTimePoint, ProcessDetector } from \"@itwin/core-bentley\";\r\nimport {\r\n Matrix3d, Point3d, Range3d, Transform, Vector3d, XYZProps,\r\n} from \"@itwin/core-geometry\";\r\nimport { Cartographic, ColorDef, GeoCoordStatus, ViewFlagOverrides } from \"@itwin/core-common\";\r\nimport { BackgroundMapGeometry } from \"../BackgroundMapGeometry\";\r\nimport { GeoConverter } from \"../GeoServices\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { GraphicBranch } from \"../render/GraphicBranch\";\r\nimport { GraphicBuilder } from \"../render/GraphicBuilder\";\r\nimport { SceneContext } from \"../ViewContext\";\r\nimport {\r\n GraphicsCollectorDrawArgs, MapTile, RealityTile, RealityTileLoader, RealityTileParams, Tile, TileDrawArgs, TileGeometryCollector,\r\n TileGraphicType, TileParams, TileTree, TileTreeParams,\r\n} from \"./internal\";\r\n\r\n/** @internal */\r\nexport class TraversalDetails {\r\n public queuedChildren = new Array<Tile>();\r\n public childrenSelected = false;\r\n public shouldSelectParent = false;\r\n\r\n public initialize() {\r\n this.queuedChildren.length = 0;\r\n this.childrenSelected = false;\r\n this.shouldSelectParent = false;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class TraversalChildrenDetails {\r\n private _childDetails: TraversalDetails[] = [];\r\n\r\n public initialize() {\r\n for (const child of this._childDetails)\r\n child.initialize();\r\n }\r\n\r\n public getChildDetail(index: number) {\r\n while (this._childDetails.length <= index)\r\n this._childDetails.push(new TraversalDetails());\r\n\r\n return this._childDetails[index];\r\n }\r\n\r\n public combine(parentDetails: TraversalDetails) {\r\n parentDetails.queuedChildren.length = 0;\r\n parentDetails.childrenSelected = false;\r\n parentDetails.shouldSelectParent = false;\r\n\r\n for (const child of this._childDetails) {\r\n parentDetails.childrenSelected = parentDetails.childrenSelected || child.childrenSelected;\r\n parentDetails.shouldSelectParent = parentDetails.shouldSelectParent || child.shouldSelectParent;\r\n\r\n for (const queuedChild of child.queuedChildren)\r\n parentDetails.queuedChildren.push(queuedChild);\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class TraversalSelectionContext {\r\n public preloaded = new Set<RealityTile>();\r\n public missing = new Array<RealityTile>();\r\n public get selectionCountExceeded() { return this._maxSelectionCount === undefined ? false : (this.missing.length + this.selected.length) > this._maxSelectionCount; } // Avoid selecting excessive number of tiles.\r\n constructor(public selected: Tile[], public displayedDescendants: Tile[][], public preloadDebugBuilder?: GraphicBuilder, private _maxSelectionCount?: number) { }\r\n\r\n public selectOrQueue(tile: RealityTile, args: TileDrawArgs, traversalDetails: TraversalDetails) {\r\n tile.selectSecondaryTiles(args, this);\r\n tile.markUsed(args);\r\n traversalDetails.shouldSelectParent = true;\r\n\r\n if (tile.isReady) {\r\n args.markReady(tile);\r\n this.selected.push(tile);\r\n tile.markDisplayed();\r\n this.displayedDescendants.push((traversalDetails.childrenSelected) ? traversalDetails.queuedChildren.slice() : []);\r\n traversalDetails.queuedChildren.length = 0;\r\n traversalDetails.childrenSelected = true;\r\n traversalDetails.shouldSelectParent = false;\r\n } else if (!tile.isNotFound) {\r\n traversalDetails.queuedChildren.push(tile);\r\n if (!tile.isLoaded)\r\n this.missing.push(tile);\r\n }\r\n }\r\n\r\n public preload(tile: RealityTile, args: TileDrawArgs): void {\r\n if (!this.preloaded.has(tile)) {\r\n if (this.preloadDebugBuilder)\r\n tile.addBoundingGraphic(this.preloadDebugBuilder, ColorDef.red);\r\n\r\n tile.markUsed(args);\r\n tile.selectSecondaryTiles(args, this);\r\n this.preloaded.add(tile);\r\n if (!tile.isNotFound && !tile.isLoaded)\r\n this.missing.push(tile);\r\n }\r\n }\r\n\r\n public select(tiles: RealityTile[], args: TileDrawArgs): void {\r\n for (const tile of tiles) {\r\n tile.markUsed(args);\r\n this.selected.push(tile);\r\n this.displayedDescendants.push([]);\r\n }\r\n }\r\n}\r\n\r\nconst scratchCarto = Cartographic.createZero();\r\nconst scratchPoint = Point3d.createZero(), scratchOrigin = Point3d.createZero();\r\nconst scratchRange = Range3d.createNull();\r\nconst scratchX = Vector3d.createZero(), scratchY = Vector3d.createZero(), scratchZ = Vector3d.createZero();\r\nconst scratchMatrix = Matrix3d.createZero(), scratchTransform = Transform.createZero();\r\n\r\ninterface ChildReprojection {\r\n child: RealityTile;\r\n ecefCenter: Point3d;\r\n dbPoints: Point3d[]; // Center, xEnd, yEnd, zEnd\r\n}\r\n\r\n/** @internal */\r\nexport interface RealityTileTreeParams extends TileTreeParams {\r\n readonly loader: RealityTileLoader;\r\n readonly yAxisUp?: boolean;\r\n readonly rootTile: RealityTileParams;\r\n readonly rootToEcef?: Transform;\r\n readonly gcsConverterAvailable: boolean;\r\n}\r\n\r\n/** Base class for a [[TileTree]] representing a reality model (e.g., a point cloud or photogrammetry mesh) or 3d terrain with map imagery.\r\n * The tiles within the tree are instances of [[RealityTile]]s.\r\n * @public\r\n */\r\nexport class RealityTileTree extends TileTree {\r\n /** @internal */\r\n public traversalChildrenByDepth: TraversalChildrenDetails[] = [];\r\n /** @internal */\r\n public readonly loader: RealityTileLoader;\r\n /** @internal */\r\n public readonly yAxisUp: boolean;\r\n /** @internal */\r\n public cartesianRange: Range3d;\r\n /** @internal */\r\n public cartesianTransitionDistance: number;\r\n /** @internal */\r\n protected _gcsConverter: GeoConverter | undefined;\r\n /** @internal */\r\n protected _rootTile: RealityTile;\r\n /** @internal */\r\n protected _rootToEcef?: Transform;\r\n /** @internal */\r\n protected _ecefToDb?: Transform;\r\n\r\n /** @internal */\r\n public constructor(params: RealityTileTreeParams) {\r\n super(params);\r\n this.loader = params.loader;\r\n this.yAxisUp = true === params.yAxisUp;\r\n this._rootTile = this.createTile(params.rootTile);\r\n this.cartesianRange = BackgroundMapGeometry.getCartesianRange(this.iModel);\r\n this.cartesianTransitionDistance = this.cartesianRange.diagonal().magnitudeXY() * .25; // Transition distance from elliptical to cartesian.\r\n this._gcsConverter = params.gcsConverterAvailable ? params.iModel.geoServices.getConverter(\"WGS84\") : undefined;\r\n if (params.rootToEcef) {\r\n this._rootToEcef = params.rootToEcef;\r\n const dbToRoot = this.iModelTransform.inverse();\r\n if (dbToRoot) {\r\n const dbToEcef = this._rootToEcef.multiplyTransformTransform(dbToRoot);\r\n this._ecefToDb = dbToEcef.inverse();\r\n }\r\n }\r\n }\r\n\r\n /** @internal */\r\n public get rootTile(): RealityTile { return this._rootTile; }\r\n /** @internal */\r\n public get is3d() { return true; }\r\n /** @internal */\r\n public get maxDepth() { return this.loader.maxDepth; }\r\n /** @internal */\r\n public get minDepth() { return this.loader.minDepth; }\r\n /** @internal */\r\n public override get isContentUnbounded() { return this.loader.isContentUnbounded; }\r\n /** @internal */\r\n public get isTransparent() { return false; }\r\n\r\n /** @internal */\r\n protected _selectTiles(args: TileDrawArgs): Tile[] { return this.selectRealityTiles(args, []); }\r\n /** @internal */\r\n public get viewFlagOverrides(): ViewFlagOverrides { return this.loader.viewFlagOverrides; }\r\n /** @internal */\r\n public override get parentsAndChildrenExclusive() { return this.loader.parentsAndChildrenExclusive; }\r\n\r\n /** @internal */\r\n public createTile(props: TileParams): RealityTile { return new RealityTile(props, this); }\r\n\r\n /** Collect tiles from this tile tree based on the criteria implemented by `collector`.\r\n * @internal\r\n */\r\n public override collectTileGeometry(collector: TileGeometryCollector): void {\r\n this.rootTile.collectTileGeometry(collector);\r\n }\r\n\r\n /** @internal */\r\n public prune(): void {\r\n const olderThan = BeTimePoint.now().minus(this.expirationTime);\r\n this.rootTile.purgeContents(olderThan, !ProcessDetector.isMobileBrowser);\r\n }\r\n\r\n /** @internal */\r\n public draw(args: TileDrawArgs): void {\r\n const displayedTileDescendants = new Array<RealityTile[]>();\r\n const debugControl = args.context.target.debugControl;\r\n const selectBuilder = (debugControl && debugControl.displayRealityTileRanges) ? args.context.createSceneGraphicBuilder() : undefined;\r\n const preloadDebugBuilder = (debugControl && debugControl.displayRealityTilePreload) ? args.context.createSceneGraphicBuilder() : undefined;\r\n const graphicTypeBranches = new Map<TileGraphicType, GraphicBranch>();\r\n\r\n const selectedTiles = this.selectRealityTiles(args, displayedTileDescendants, preloadDebugBuilder);\r\n args.processSelectedTiles(selectedTiles);\r\n let sortIndices;\r\n\r\n if (!this.parentsAndChildrenExclusive) {\r\n sortIndices = selectedTiles.map((_x, i) => i);\r\n sortIndices.sort((a, b) => selectedTiles[a].depth - selectedTiles[b].depth);\r\n }\r\n\r\n if (!(args instanceof GraphicsCollectorDrawArgs))\r\n this.collectClassifierGraphics(args, selectedTiles);\r\n\r\n assert(selectedTiles.length === displayedTileDescendants.length);\r\n for (let i = 0; i < selectedTiles.length; i++) {\r\n const index = sortIndices ? sortIndices[i] : i;\r\n const selectedTile = selectedTiles[index];\r\n const graphics = args.getTileGraphics(selectedTile);\r\n const tileGraphicType = selectedTile.graphicType;\r\n let targetBranch;\r\n if (undefined !== tileGraphicType && tileGraphicType !== args.context.graphicType) {\r\n if (!(targetBranch = graphicTypeBranches.get(tileGraphicType))) {\r\n graphicTypeBranches.set(tileGraphicType, targetBranch = new GraphicBranch(false));\r\n targetBranch.setViewFlagOverrides(args.graphics.viewFlagOverrides);\r\n targetBranch.symbologyOverrides = args.graphics.symbologyOverrides;\r\n }\r\n }\r\n\r\n if (!targetBranch)\r\n targetBranch = args.graphics;\r\n\r\n if (undefined !== graphics) {\r\n const displayedDescendants = displayedTileDescendants[index];\r\n if (0 === displayedDescendants.length || !this.loader.parentsAndChildrenExclusive || selectedTile.allChildrenIncluded(displayedDescendants)) {\r\n targetBranch.add(graphics);\r\n if (selectBuilder)\r\n selectedTile.addBoundingGraphic(selectBuilder, ColorDef.green);\r\n } else {\r\n if (selectBuilder)\r\n selectedTile.addBoundingGraphic(selectBuilder, ColorDef.red);\r\n\r\n for (const displayedDescendant of displayedDescendants) {\r\n const clipVector = displayedDescendant.getContentClip();\r\n if (selectBuilder)\r\n displayedDescendant.addBoundingGraphic(selectBuilder, ColorDef.blue);\r\n\r\n if (undefined === clipVector) {\r\n targetBranch.add(graphics);\r\n } else {\r\n clipVector.transformInPlace(args.location);\r\n if (!this.isTransparent)\r\n for (const primitive of clipVector.clips)\r\n for (const clipPlanes of primitive.fetchClipPlanesRef()!.convexSets)\r\n for (const plane of clipPlanes.planes)\r\n plane.offsetDistance(-displayedDescendant.radius * .05); // Overlap with existing (high resolution) tile slightly to avoid cracks.\r\n\r\n const branch = new GraphicBranch(false);\r\n branch.add(graphics);\r\n const clipVolume = args.context.target.renderSystem.createClipVolume(clipVector);\r\n targetBranch.add(args.context.createGraphicBranch(branch, Transform.createIdentity(), { clipVolume }));\r\n }\r\n }\r\n }\r\n if (preloadDebugBuilder)\r\n targetBranch.add(preloadDebugBuilder.finish());\r\n\r\n if (selectBuilder)\r\n targetBranch.add(selectBuilder.finish());\r\n\r\n const rangeGraphic = selectedTile.getRangeGraphic(args.context);\r\n if (undefined !== rangeGraphic)\r\n targetBranch.add(rangeGraphic);\r\n }\r\n }\r\n\r\n args.drawGraphics();\r\n for (const graphicTypeBranch of graphicTypeBranches) {\r\n args.drawGraphicsWithType(graphicTypeBranch[0], graphicTypeBranch[1]);\r\n }\r\n }\r\n\r\n /** @internal */\r\n protected collectClassifierGraphics(args: TileDrawArgs, selectedTiles: RealityTile[]) {\r\n const classifier = args.context.planarClassifiers.get(this.modelId);\r\n if (classifier)\r\n classifier.collectGraphics(args.context, { modelId: this.modelId, tiles: selectedTiles, location: args.location, isPointCloud: this.isPointCloud });\r\n }\r\n\r\n /** @internal */\r\n public getTraversalChildren(depth: number) {\r\n while (this.traversalChildrenByDepth.length <= depth)\r\n this.traversalChildrenByDepth.push(new TraversalChildrenDetails());\r\n\r\n return this.traversalChildrenByDepth[depth];\r\n }\r\n\r\n /** @internal */\r\n public doReprojectChildren(tile: Tile): boolean {\r\n if (!(tile instanceof RealityTile) || this._gcsConverter === undefined || this._rootToEcef === undefined || undefined === this._ecefToDb)\r\n return false;\r\n\r\n const tileRange = this.iModelTransform.isIdentity ? tile.range : this.iModelTransform.multiplyRange(tile.range, scratchRange);\r\n\r\n return this.cartesianRange.intersectsRange(tileRange);\r\n }\r\n\r\n /** @internal */\r\n public reprojectAndResolveChildren(parent: Tile, children: Tile[], resolve: (children: Tile[] | undefined) => void): void {\r\n if (!this.doReprojectChildren(parent)) {\r\n resolve(children);\r\n return;\r\n }\r\n\r\n const ecefToDb = this._ecefToDb!; // Tested for undefined in doReprojectChildren\r\n const rootToDb = this.iModelTransform;\r\n const dbToEcef = ecefToDb.inverse()!;\r\n const reprojectChildren = new Array<ChildReprojection>();\r\n for (const child of children) {\r\n const realityChild = child as RealityTile;\r\n const childRange = rootToDb.multiplyRange(realityChild.contentRange, scratchRange);\r\n const dbCenter = childRange.center;\r\n const ecefCenter = dbToEcef.multiplyPoint3d(dbCenter);\r\n const dbPoints = [dbCenter, dbCenter.plusXYZ(1), dbCenter.plusXYZ(0, 1), dbCenter.plusXYZ(0, 0, 1)];\r\n reprojectChildren.push({ child: realityChild, ecefCenter, dbPoints });\r\n }\r\n if (reprojectChildren.length === 0)\r\n resolve(children);\r\n else {\r\n const requestProps = new Array<XYZProps>();\r\n\r\n for (const reprojection of reprojectChildren) {\r\n for (const dbPoint of reprojection.dbPoints) {\r\n const ecefPoint = dbToEcef.multiplyPoint3d(dbPoint);\r\n const carto = Cartographic.fromEcef(ecefPoint, scratchCarto);\r\n if (carto)\r\n requestProps.push({ x: carto.longitudeDegrees, y: carto.latitudeDegrees, z: carto.height });\r\n\r\n }\r\n }\r\n\r\n if (requestProps.length !== 4 * reprojectChildren.length)\r\n resolve(children);\r\n else {\r\n this._gcsConverter!.getIModelCoordinatesFromGeoCoordinates(requestProps).then((response) => {\r\n\r\n const reprojectedCoords = response.iModelCoords;\r\n const dbToRoot = rootToDb.inverse()!;\r\n const getReprojectedPoint = (original: Point3d, reprojectedXYZ: XYZProps) => {\r\n scratchPoint.setFromJSON(reprojectedXYZ);\r\n const cartesianDistance = this.cartesianRange.distanceToPoint(scratchPoint);\r\n if (cartesianDistance < this.cartesianTransitionDistance)\r\n return scratchPoint.interpolate(cartesianDistance / this.cartesianTransitionDistance, original, scratchPoint);\r\n else\r\n return original;\r\n };\r\n\r\n let responseIndex = 0;\r\n for (const reprojection of reprojectChildren) {\r\n if (reprojectedCoords.every((coord) => coord.s === GeoCoordStatus.Success)) {\r\n const reprojectedOrigin = getReprojectedPoint(reprojection.dbPoints[0], reprojectedCoords[responseIndex++].p).clone(scratchOrigin);\r\n const xVector = Vector3d.createStartEnd(reprojectedOrigin, getReprojectedPoint(reprojection.dbPoints[1], reprojectedCoords[responseIndex++].p), scratchX);\r\n const yVector = Vector3d.createStartEnd(reprojectedOrigin, getReprojectedPoint(reprojection.dbPoints[2], reprojectedCoords[responseIndex++].p), scratchY);\r\n const zVector = Vector3d.createStartEnd(reprojectedOrigin, getReprojectedPoint(reprojection.dbPoints[3], reprojectedCoords[responseIndex++].p), scratchZ);\r\n const matrix = Matrix3d.createColumns(xVector, yVector, zVector, scratchMatrix);\r\n if (matrix !== undefined) {\r\n const dbReprojection = Transform.createMatrixPickupPutdown(matrix, reprojection.dbPoints[0], reprojectedOrigin, scratchTransform);\r\n if (dbReprojection) {\r\n const rootReprojection = dbToRoot.multiplyTransformTransform(dbReprojection).multiplyTransformTransform(rootToDb);\r\n reprojection.child.reproject(rootReprojection);\r\n }\r\n }\r\n }\r\n }\r\n\r\n resolve(children);\r\n }).catch(() => {\r\n resolve(children); // Error occured in reprojection - just resolve with unprojected corners.\r\n });\r\n }\r\n }\r\n }\r\n\r\n /** @internal */\r\n public getBaseRealityDepth(_sceneContext: SceneContext) { return -1; }\r\n\r\n /** Scan the list of currently selected reality tiles, and fire the viewport's 'onMapLayerScaleRangeVisibilityChanged ' event\r\n * if any scale range visibility change is detected for one more map-layer definition.\r\n * @internal\r\n */\r\n public reportTileVisibility(_args: TileDrawArgs, _selected: RealityTile[]) { }\r\n\r\n /** @internal */\r\n public selectRealityTiles(args: TileDrawArgs, displayedDescendants: RealityTile[][], preloadDebugBuilder?: GraphicBuilder): RealityTile[] {\r\n this._lastSelected = BeTimePoint.now();\r\n const selected: RealityTile[] = [];\r\n const context = new TraversalSelectionContext(selected, displayedDescendants, preloadDebugBuilder, args.maxRealityTreeSelectionCount);\r\n const rootTile = this.rootTile;\r\n const debugControl = args.context.target.debugControl;\r\n const freezeTiles = debugControl && debugControl.freezeRealityTiles;\r\n\r\n rootTile.selectRealityTiles(context, args, new TraversalDetails());\r\n\r\n const baseDepth = this.getBaseRealityDepth(args.context);\r\n\r\n if (!args.context.target.renderSystem.isMobile && 0 === context.missing.length) { // We skip preloading on mobile devices.\r\n if (baseDepth > 0) // Maps may force loading of low level globe tiles.\r\n rootTile.preloadRealityTilesAtDepth(baseDepth, context, args);\r\n\r\n if (!freezeTiles)\r\n rootTile.preloadProtectedTiles(args, context);\r\n }\r\n\r\n if (!freezeTiles)\r\n for (const tile of context.missing) {\r\n const loadableTile = tile.loadableTile;\r\n\r\n loadableTile.markUsed(args);\r\n args.insertMissing(loadableTile);\r\n }\r\n\r\n if (debugControl && debugControl.logRealityTiles) {\r\n this.logTiles(\"Selected: \", selected.values());\r\n const preloaded = [];\r\n for (const tile of context.preloaded)\r\n preloaded.push(tile);\r\n\r\n this.logTiles(\"Preloaded: \", preloaded.values());\r\n this.logTiles(\"Missing: \", context.missing.values());\r\n\r\n const imageryTiles: RealityTile[] = [];\r\n for (const selectedTile of selected) {\r\n if (selectedTile instanceof MapTile) {\r\n const selectedImageryTiles = (selectedTile).imageryTiles;\r\n if (selectedImageryTiles)\r\n selectedImageryTiles.forEach((tile) => imageryTiles.push(tile));\r\n }\r\n }\r\n if (imageryTiles.length)\r\n this.logTiles(\"Imagery:\", imageryTiles.values());\r\n }\r\n\r\n this.reportTileVisibility(args, selected);\r\n\r\n IModelApp.tileAdmin.addTilesForUser(args.context.viewport, selected, args.readyTiles, args.touchedTiles);\r\n return selected;\r\n }\r\n\r\n /** @internal */\r\n protected logTiles(label: string, tiles: IterableIterator<Tile>) {\r\n let depthString = \"\";\r\n let min = 10000, max = -10000;\r\n let count = 0;\r\n const depthMap = new Map<number, number>();\r\n for (const tile of tiles) {\r\n count++;\r\n const depth = tile.depth;\r\n min = Math.min(min, tile.depth);\r\n max = Math.max(max, tile.depth);\r\n const found = depthMap.get(depth);\r\n depthMap.set(depth, found === undefined ? 1 : found + 1);\r\n }\r\n\r\n depthMap.forEach((value, key) => depthString += `${key}(x${value}), `);\r\n // eslint-disable-next-line no-console\r\n console.log(`${label}: ${count} Min: ${min} Max: ${max} Depths: ${depthString}`);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ImageryTileTree.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/ImageryTileTree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ImageryTileTree.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/ImageryTileTree.ts"],"names":[],"mappings":"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"}
@@ -271,18 +271,25 @@ class ImageryMapLayerTreeSupplier {
271
271
  * This allows the ID to serve as a lookup key to find the corresponding TileTree.
272
272
  */
273
273
  compareTileTreeIds(lhs, rhs) {
274
- let cmp = compareStrings(lhs.settings.url, rhs.settings.url);
274
+ let cmp = compareStrings(lhs.settings.formatId, rhs.settings.formatId);
275
275
  if (0 === cmp) {
276
- cmp = compareStringsOrUndefined(lhs.settings.userName, rhs.settings.userName);
276
+ cmp = compareStrings(lhs.settings.url, rhs.settings.url);
277
277
  if (0 === cmp) {
278
- cmp = compareStringsOrUndefined(lhs.settings.password, rhs.settings.password);
278
+ cmp = compareStringsOrUndefined(lhs.settings.userName, rhs.settings.userName);
279
279
  if (0 === cmp) {
280
- cmp = compareBooleans(lhs.settings.transparentBackground, rhs.settings.transparentBackground);
280
+ cmp = compareStringsOrUndefined(lhs.settings.password, rhs.settings.password);
281
281
  if (0 === cmp) {
282
- cmp = compareNumbers(lhs.settings.subLayers.length, rhs.settings.subLayers.length);
282
+ cmp = compareBooleans(lhs.settings.transparentBackground, rhs.settings.transparentBackground);
283
283
  if (0 === cmp) {
284
- for (let i = 0; i < lhs.settings.subLayers.length && 0 === cmp; i++)
285
- cmp = compareBooleans(lhs.settings.subLayers[i].visible, rhs.settings.subLayers[i].visible);
284
+ cmp = compareNumbers(lhs.settings.subLayers.length, rhs.settings.subLayers.length);
285
+ if (0 === cmp) {
286
+ for (let i = 0; i < lhs.settings.subLayers.length && 0 === cmp; i++) {
287
+ cmp = compareStrings(lhs.settings.subLayers[i].name, rhs.settings.subLayers[i].name);
288
+ if (0 === cmp) {
289
+ cmp = compareBooleans(lhs.settings.subLayers[i].visible, rhs.settings.subLayers[i].visible);
290
+ }
291
+ }
292
+ }
286
293
  }
287
294
  }
288
295
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ImageryTileTree.js","sourceRoot":"","sources":["../../../../src/tile/map/ImageryTileTree.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,yBAAyB,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAClI,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAuC,WAAW,EAAoB,aAAa,EAAqB,MAAM,oBAAoB,CAAC;AAC1I,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAK5C,OAAO,EACL,iBAAiB,EAAgD,yBAAyB,EAAW,+BAA+B,EAAmB,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE,eAAe,EACtJ,gBAAgB,EAAqC,kBAAkB,GAEhI,MAAM,aAAa,CAAC;AAOrB,gBAAgB;AAChB,MAAM,OAAO,cAAe,SAAQ,WAAW;IAM7C,YAAY,MAAkB,EAAS,WAA+B,EAAS,MAAc,EAAS,SAA4B;QAChI,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QADU,gBAAW,GAAX,WAAW,CAAoB;QAAS,WAAM,GAAN,MAAM,CAAQ;QAAS,cAAS,GAAT,SAAS,CAAmB;QAJ1H,uBAAkB,GAAG,CAAC,CAAC;QAO7B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC;IAC1D,CAAC;IAED,IAAW,OAAO,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9C,IAAW,YAAY,KAAK,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC;IACnE,IAAoB,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;IACvF,IAAoB,eAAe,KAAc,OAAO,IAAI,CAAC,cAAc,CAAC,CAAA,CAAC;IAE7D,UAAU,CAAC,OAA2B;QACpD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CAAQ,8FAA8F;QAC7I,IAAI,SAAS,KAAK,OAAO,CAAC,cAAc;YACrC,IAAI,CAAC,MAA0B,CAAC,OAAO,EAAE,CAAC,CAAG,6DAA6D;QAE7G,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAEM,qBAAqB,CAAC,UAA4B,EAAE,8BAAgD,EAAE,gBAAmC,EAAE,cAAsB,EAAE,IAAkB;QAC1L,sHAAsH;QACtH,MAAM,kBAAkB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC;QAC1F,IAAM,CAAC,IAAI,CAAC,MAAM,CAAE,CAAW,2FAA2F;eACrH,kBAAkB;eAClB,IAAI,CAAC,iBAAiB,EAAE;YAC3B,IAAI,IAAI,CAAC,eAAe,EAAG;gBACzB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,IAAI,CAAC,UAAU,EAAE,CAAC;aACnB;iBAAM,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBACxE,+EAA+E;gBAC/E,sEAAsE;gBACtE,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC3C;iBAAM;gBACL,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACvB;YACD,OAAO,kBAAkB,CAAC,MAAM,CAAC;SAClC;QAED,IAAI,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACjC,IAAI,kBAAkB,CAAC,OAAO,KAAK,MAAM,EAAE;YACzC,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC5B;aAAM,IAAI,kBAAkB,CAAC,MAAM,KAAK,MAAM,EAAE;YAC/C,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ,EAAE;gBAC/B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjC,MAAM,QAAQ,GAAG,KAAuB,CAAC;oBACzC,IAAI,QAAQ,CAAC,SAAS,CAAC,eAAe,CAAC,gBAAgB,CAAC;wBACtD,MAAM,GAAG,QAAQ,CAAC,qBAAqB,CAAC,UAAU,EAAE,8BAA8B,EAAE,gBAAgB,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;oBAC9H,IAAI,kBAAkB,CAAC,MAAM,KAAK,MAAM;wBACtC,MAAM;iBACT;aACF;SACF;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACM,gBAAgB;QACrB,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IACM,mBAAmB;QACxB,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC;QACtD,IAAI,IAAI,CAAC,kBAAkB;YACzB,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAED,gBAAgB;IACA,OAAO;QACrB,mDAAmD;QACnD,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,mBAAmB,GAAG,kBAAkB,CAAC,MAAM,CAAC;IACvD,CAAC;IAEkB,aAAa,CAAC,OAA+C,EAAE,OAA+B;QAE/G,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACrC,MAAM,eAAe,GAAG,CAAC,QAAkB,EAAE,EAAE;YAC7C,MAAM,QAAQ,GAAG,IAAI,KAAK,EAAQ,CAAC;YACnC,MAAM,iBAAiB,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,WAAW,CAAC,QAAQ,CAAC;YACpE,kEAAkE;YAClE,uFAAuF;YACvF,iFAAiF;YAEjF,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC1B,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBACtG,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC/G,MAAM,WAAW,GAAG,WAAW,CAAC,aAAa,CAAC,iBAAiB,CAAC;gBAChE,MAAM,IAAI,GAAG,IAAI,cAAc,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAC,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;gBAC7J,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpB,CAAC,CAAC;QAEF,WAAW,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACpE,CAAC;IAEkB,kBAAkB,CAAC,KAA8B;QAClE,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,QAAQ;YACf,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC;IAEe,UAAU;QACxB,uIAAuI;IACzI,CAAC;IAEe,eAAe;QAC7B,IAAI,CAAC,KAAK,IAAI,CAAC,kBAAkB,EAAE;YACjC,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,EAAE,CAAC;SACvB;IACH,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IACe,OAAO;QACrB,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QAC5B,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;CACF;AAED;eACe;AACf,MAAM,OAAO,oBAAoB;IAG/B;QACE,IAAI,CAAC,cAAc,GAAG,+BAA+B,CAAC,OAAO,CAAC;IAChE,CAAC;IAED;;OAEG;IACI,uBAAuB,KAAI,OAAO,IAAI,CAAC,cAAc,CAAC,CAAA,CAAC;IAE9D;OACG;IACI,KAAK;QACV,MAAM,KAAK,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACzC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC;IAED;OACG;IACI,KAAK;QACV,IAAI,CAAC,cAAc,GAAG,+BAA+B,CAAC,OAAO,CAAC;IAChE,CAAC;IAED;;;;;;OAMG;IACI,uBAAuB,CAAC,OAAgB;QAC7C,IAAI,IAAI,CAAC,cAAc,KAAK,+BAA+B,CAAC,OAAO,EAAE;YACnE,IAAI,CAAC,cAAc,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,+BAA+B,CAAC,OAAO,CAAC,CAAC,CAAC,+BAA+B,CAAC,MAAM,CAAC,CAAC;SACpH;aAAM,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,KAAK,+BAA+B,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,KAAK,+BAA+B,CAAC,OAAO,CAAC,EAAE;YACvK,IAAI,CAAC,cAAc,GAAG,+BAA+B,CAAC,OAAO,CAAC;SAC/D;IACH,CAAC;CACF;AAED,gBAAgB;AAChB,MAAa,kBAAmB,SAAQ,eAAe;IACrD,YAAY,MAA6B,EAAU,cAAiC;QAClF,KAAK,CAAC,MAAM,CAAC,CAAC;QADmC,mBAAc,GAAd,cAAc,CAAmB;QAElF,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3F,IAAI,CAAC,SAAS,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC;IAC5G,CAAC;IACD,IAAW,YAAY,KAAsB,OAAO,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC;IAChG,YAAY,CAAC,KAAuB,EAAE,EAAkB;QAC7D,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC9C,CAAC;IAEM,gBAAgB,CAAC,MAAc;QACpC,OAAO,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACtF,CAAC;IACD,IAAW,aAAa,KAAwB,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IAC7E,IAAoB,IAAI;QACtB,MAAM,CAAC,KAAK,CAAC,CAAC;QACd,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAoB,iBAAiB;QACnC,MAAM,CAAC,KAAK,CAAC,CAAC;QACd,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAoB,kBAAkB;QACpC,MAAM,CAAC,KAAK,CAAC,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IACkB,YAAY,CAAC,KAAmB;QACjD,MAAM,CAAC,KAAK,CAAC,CAAC;QACd,OAAO,EAAE,CAAC;IACZ,CAAC;IACe,IAAI,CAAC,KAAmB,IAAU,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAK3D,qBAAqB,CAAC,UAA4B,EAAE,8BAAgD,EAAE,WAAoB,EAAE,IAAkB;QACnJ,MAAM,cAAc,GAAG,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,CAAC;QAC9F,sHAAsH;QACtH,MAAM,cAAc,GAAG,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,WAAW,CAAC,WAAW,CAAC;QACxF,cAAc,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,CAAC,CAAI,0DAA0D;QACjJ,OAAQ,IAAI,CAAC,QAA2B,CAAC,qBAAqB,CAAC,UAAU,EAAE,8BAA8B,EAAE,cAAc,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;IACnJ,CAAC;IACM,wBAAwB,CAAC,MAAc,IAAuB,OAAO,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;AAV5I,yCAAsB,GAAG,iBAAiB,CAAC,UAAU,EAAE,CAAC;AACxD,0CAAuB,GAAG,GAAG,GAAG,MAAM,CAAC;SAlC3C,kBAAkB;AA8C/B,MAAM,iBAAkB,SAAQ,iBAAiB;IAC/C,YAAoB,gBAAyC,EAAU,OAAyB;QAC9F,KAAK,EAAE,CAAC;QADU,qBAAgB,GAAhB,gBAAgB,CAAyB;QAAU,YAAO,GAAP,OAAO,CAAkB;IAEhG,CAAC;IACe,mBAAmB,CAAC,IAAU;QAC5C,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAK,6EAA6E;IAC7J,CAAC,CAAE,wCAAwC;IAE3C,IAAW,QAAQ,KAAa,OAAO,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAChF,IAAW,QAAQ,KAAa,OAAO,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAChF,IAAW,QAAQ,KAAuB,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;IACjE,YAAY,CAAC,KAAuB,EAAE,EAAkB;QAC7D,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,IAAW,iBAAiB,KAAa,OAAO,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC1F,IAAW,eAAe,KAA8B,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAChF,KAAK,CAAC,UAAU,CAAC,OAAiB,EAAE,MAAc,EAAE,KAAmB,EAAE,IAAwB,IAAmB,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAE3L,KAAK,CAAC,iBAAiB,CAAC,YAAmC,EAAE,MAAc,EAAE,KAAmB,EAAE,IAAwB;QAC/H,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAChF,CAAC;IAEM,gBAAgB,CAAC,IAAoB,EAAE,eAA6C,IAAI,OAAO,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IAEtK,2GAA2G;IACpG,KAAK,CAAC,YAAY,CAAC,KAAkB;QAC1C,MAAM,CAAC,KAAK,CAAC,CAAC;QACd,OAAO,SAAS,CAAC;IACnB,CAAC;IACM,KAAK,CAAC,kBAAkB,CAAC,IAAU,EAAE,WAA0B;QACpE,MAAM,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACjF,CAAC;IAEM,iBAAiB,CAAC,KAAW;QAClC,kFAAkF;QAClF,OAAO,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;IACpE,CAAC;IAEe,KAAK,CAAC,eAAe,CAAC,IAAU,EAAE,IAA8B,EAAE,MAAoB;QACpG,MAAM,CAAC,IAAI,YAAY,WAAW,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,YAAY,cAAc,CAAC,CAAC;QACvC,MAAM,OAAO,GAAuB,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1D,IAAI,SAAS,KAAK,OAAO;YACvB,OAAO,OAAO,CAAC;QAEjB,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC;QACjC,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,MAAmB,EAAE,MAAoB;QACtE,IAAI;YACF,OAAO,MAAM,MAAM,CAAC,uBAAuB,CAAC;gBAC1C,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,mBAAmB;gBAC5C,MAAM;aACP,CAAC,CAAC;SACJ;QAAC,MAAM;YACN,OAAO,SAAS,CAAC;SAClB;IACH,CAAC;CACF;AAMD;;GAEG;AACH,MAAM,2BAA2B;IAC/B;;OAEG;IACI,kBAAkB,CAAC,GAA0B,EAAE,GAA0B;QAC9E,IAAI,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC7D,IAAI,CAAC,KAAK,GAAG,EAAE;YACb,GAAG,GAAG,yBAAyB,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC9E,IAAI,CAAC,KAAK,GAAG,EAAE;gBACb,GAAG,GAAG,yBAAyB,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAC9E,IAAI,CAAC,KAAK,GAAG,EAAE;oBACb,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,qBAAqB,EAAE,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;oBAC9F,IAAI,CAAC,KAAK,GAAG,EAAE;wBACb,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;wBACnF,IAAI,CAAC,KAAK,GAAG,EAAE;4BACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE;gCACjE,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;yBAC/F;qBACF;iBACF;aACF;SACF;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED,iGAAiG;IAC1F,KAAK,CAAC,cAAc,CAAC,EAAyB,EAAE,MAAwB;QAC7E,MAAM,eAAe,GAAG,SAAS,CAAC,sBAAsB,CAAC,qBAAqB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC5F,IAAI,SAAS,KAAK,eAAe;YAC/B,OAAO,SAAS,CAAC;QAEnB,MAAM,eAAe,CAAC,UAAU,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAC9C,MAAM,YAAY,GAAG,eAAe,CAAC,YAAY,CAAC;QAClD,MAAM,SAAS,GAAI,CAAC,CAAC,KAAK,YAAY,CAAC,uBAAuB,IAAI,CAAC,KAAK,YAAY,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvH,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACzD,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QAC7H,MAAM,aAAa,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;QAClF,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAG,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC;QACxL,OAAO,IAAI,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;CACF;AAED,MAAM,mBAAmB,GAAG,IAAI,2BAA2B,EAAE,CAAC;AAE9D;;GAEG;AACH,MAAM,OAAO,4BAA6B,SAAQ,yBAAyB;IACzE,YAAmB,aAA+B,EAAE,UAAkB,EAAE,MAAwB;QAC9F,KAAK,CAAC,aAAa,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,IAAoB,YAAY,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;IAEpD,gDAAgD;IAChD,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,mBAAmB,CAAC,CAAC;IACpG,CAAC;IAEe,cAAc;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,mBAAmB,CAAC,CAAC;IACtG,CAAC;IAED,IAAoB,eAAe;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,YAAY,kBAAkB,CAAC;YAChD,OAAO,SAAS,CAAC;QAEnB,OAAO,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;IAC5C,CAAC;CACF","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"]}
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.formatId, rhs.settings.formatId);\r\n if (0 === cmp) {\r\n 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 = compareStrings(lhs.settings.subLayers[i].name, rhs.settings.subLayers[i].name);\r\n if (0 === cmp) {\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 }\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/core-frontend",
3
- "version": "4.0.0",
3
+ "version": "4.0.2",
4
4
  "description": "iTwin.js frontend components",
5
5
  "main": "lib/cjs/core-frontend.js",
6
6
  "module": "lib/esm/core-frontend.js",
@@ -23,12 +23,12 @@
23
23
  "url": "http://www.bentley.com"
24
24
  },
25
25
  "peerDependencies": {
26
- "@itwin/appui-abstract": "^4.0.0",
27
- "@itwin/core-bentley": "^4.0.0",
28
- "@itwin/core-common": "^4.0.0",
29
- "@itwin/core-geometry": "^4.0.0",
30
- "@itwin/core-orbitgt": "^4.0.0",
31
- "@itwin/core-quantity": "^4.0.0"
26
+ "@itwin/appui-abstract": "^4.0.2",
27
+ "@itwin/core-bentley": "^4.0.2",
28
+ "@itwin/core-common": "^4.0.2",
29
+ "@itwin/core-geometry": "^4.0.2",
30
+ "@itwin/core-orbitgt": "^4.0.2",
31
+ "@itwin/core-quantity": "^4.0.2"
32
32
  },
33
33
  "//devDependencies": [
34
34
  "NOTE: All peerDependencies should also be listed as devDependencies since peerDependencies are not considered by npm install",
@@ -55,14 +55,14 @@
55
55
  "source-map-loader": "^4.0.0",
56
56
  "typescript": "~5.0.2",
57
57
  "webpack": "^5.76.0",
58
- "@itwin/core-geometry": "4.0.0",
59
- "@itwin/build-tools": "4.0.0",
60
- "@itwin/core-bentley": "4.0.0",
61
- "@itwin/appui-abstract": "4.0.0",
62
- "@itwin/core-quantity": "4.0.0",
63
- "@itwin/core-common": "4.0.0",
64
- "@itwin/core-orbitgt": "4.0.0",
65
- "@itwin/certa": "4.0.0"
58
+ "@itwin/appui-abstract": "4.0.2",
59
+ "@itwin/core-bentley": "4.0.2",
60
+ "@itwin/build-tools": "4.0.2",
61
+ "@itwin/core-common": "4.0.2",
62
+ "@itwin/core-geometry": "4.0.2",
63
+ "@itwin/core-orbitgt": "4.0.2",
64
+ "@itwin/core-quantity": "4.0.2",
65
+ "@itwin/certa": "4.0.2"
66
66
  },
67
67
  "//dependencies": [
68
68
  "NOTE: these dependencies should be only for things that DO NOT APPEAR IN THE API",
@@ -77,9 +77,9 @@
77
77
  "fuse.js": "^3.3.0",
78
78
  "wms-capabilities": "0.4.0",
79
79
  "reflect-metadata": "0.1.13",
80
- "@itwin/core-telemetry": "4.0.0",
81
- "@itwin/core-i18n": "4.0.0",
82
- "@itwin/webgl-compatibility": "4.0.0"
80
+ "@itwin/core-i18n": "4.0.2",
81
+ "@itwin/core-telemetry": "4.0.2",
82
+ "@itwin/webgl-compatibility": "4.0.2"
83
83
  },
84
84
  "nyc": {
85
85
  "extends": "./node_modules/@itwin/build-tools/.nycrc"