@itwin/core-frontend 4.5.0-dev.4 → 4.5.0-dev.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js +1 -1
- package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js.map +1 -1
- package/lib/cjs/tile/map/CesiumTerrainProvider.d.ts +1 -1
- package/lib/cjs/tile/map/CesiumTerrainProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/CesiumTerrainProvider.js +8 -4
- package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.d.ts +1 -0
- package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.js +10 -5
- package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
- package/lib/cjs/tile/map/TerrainMeshProvider.d.ts +2 -0
- package/lib/cjs/tile/map/TerrainMeshProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/TerrainMeshProvider.js.map +1 -1
- package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js +1 -1
- package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js.map +1 -1
- package/lib/esm/tile/map/CesiumTerrainProvider.d.ts +1 -1
- package/lib/esm/tile/map/CesiumTerrainProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/CesiumTerrainProvider.js +9 -5
- package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/esm/tile/map/MapTileTree.d.ts +1 -0
- package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTileTree.js +10 -5
- package/lib/esm/tile/map/MapTileTree.js.map +1 -1
- package/lib/esm/tile/map/TerrainMeshProvider.d.ts +2 -0
- package/lib/esm/tile/map/TerrainMeshProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/TerrainMeshProvider.js.map +1 -1
- package/lib/public/locales/en/iModelJs.json +2 -1
- package/lib/public/scripts/parse-imdl-worker.js +1 -1
- package/lib/workers/webpack/parse-imdl-worker.js +1 -1
- package/package.json +18 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapTileTree.js","sourceRoot":"","sources":["../../../../src/tile/map/MapTileTree.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, compareBooleansOrUndefined, compareNumbers, compareStrings, compareStringsOrUndefined, CompressedId64Set, Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n BackgroundMapSettings, BaseLayerSettings, Cartographic, ColorDef, FeatureAppearance, GeoCoordStatus, GlobeMode, MapLayerSettings, PlanarClipMaskPriority, TerrainHeightOriginMode,\r\n} from \"@itwin/core-common\";\r\nimport {\r\n Angle, AngleSweep, Constant, Ellipsoid, EllipsoidPatch, Point3d, Range1d, Range3d, Ray3d, Transform, Vector3d, XYZProps,\r\n} from \"@itwin/core-geometry\";\r\nimport { ApproximateTerrainHeights } from \"../../ApproximateTerrainHeights\";\r\nimport { TerrainDisplayOverrides } from \"../../DisplayStyleState\";\r\nimport { HitDetail } from \"../../HitDetail\";\r\nimport { IModelConnection } from \"../../IModelConnection\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport { PlanarClipMaskState } from \"../../PlanarClipMaskState\";\r\nimport { FeatureSymbology } from \"../../render/FeatureSymbology\";\r\nimport { RenderPlanarClassifier } from \"../../render/RenderPlanarClassifier\";\r\nimport { SceneContext } from \"../../ViewContext\";\r\nimport { MapLayerScaleRangeVisibility, ScreenViewport } from \"../../Viewport\";\r\nimport {\r\n BingElevationProvider, createDefaultViewFlagOverrides, createMapLayerTreeReference, DisclosedTileTreeSet, EllipsoidTerrainProvider, GeometryTileTreeReference,\r\n GraphicsCollectorDrawArgs, ImageryMapLayerTreeReference, ImageryMapTileTree, ImageryTileTreeState, MapCartoRectangle, MapFeatureInfoOptions, MapLayerFeatureInfo, MapLayerImageryProvider, MapLayerIndex, MapLayerTileTreeReference, MapTile,\r\n MapTileLoader, MapTilingScheme, ModelMapLayerTileTreeReference, PlanarTilePatch, QuadId,\r\n RealityTile, RealityTileDrawArgs, RealityTileTree, RealityTileTreeParams, TerrainMeshProviderOptions, Tile, TileDrawArgs, TileLoadPriority, TileParams, TileTree,\r\n TileTreeLoadStatus, TileTreeOwner, TileTreeReference, TileTreeSupplier, UpsampledMapTile, WebMercatorTilingScheme,\r\n} from \"../internal\";\r\n\r\nconst scratchPoint = Point3d.create();\r\nconst scratchCorners = [Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero()];\r\nconst scratchCorner = Point3d.createZero();\r\nconst scratchZNormal = Vector3d.create(0, 0, 1);\r\n\r\n/** Utility interface that ties an imagery tile tree to its corresponding map-layer settings object.\r\n * @internal\r\n */\r\ninterface MapLayerTreeSetting {\r\n tree: ImageryMapTileTree;\r\n settings: MapLayerSettings;\r\n baseImageryLayer: boolean;\r\n}\r\n\r\n/** Map tile tree scale range visibility values.\r\n * @beta */\r\nexport enum MapTileTreeScaleRangeVisibility {\r\n /** state is currently unknown (i.e. never been displayed) */\r\n Unknown = 0,\r\n\r\n /** all currently selected tree tiles are visible (i.e within the scale range) */\r\n Visible,\r\n\r\n /** all currently selected tree tiles are hidden (i.e outside the scale range) */\r\n Hidden,\r\n\r\n /** currently selected tree tiles are partially visible (i.e some tiles are within the scale range, and some are outside.) */\r\n Partial\r\n}\r\n\r\n/**\r\n* Provides map layer information for a given tile tree.\r\n* @internal\r\n*/\r\nexport interface MapLayerInfoFromTileTree {\r\n /** Indicate if the map layer represents the base layer */\r\n isBaseLayer: boolean;\r\n\r\n /** Map layer index; undefined if base map */\r\n index?: MapLayerIndex;\r\n\r\n /** Settings for the map layer (or the base layer)*/\r\n settings: MapLayerSettings;\r\n\r\n /** Provider for the map layer (or the base layer) */\r\n provider?: MapLayerImageryProvider;\r\n}\r\n\r\n/** A [quad tree](https://en.wikipedia.org/wiki/Quadtree) consisting of [[MapTile]]s representing the map imagery draped onto the surface of the Earth.\r\n * A `MapTileTree` enables display of a globe or planar map with [map imagery](https://en.wikipedia.org/wiki/Tiled_web_map) obtained from any number of sources, such as\r\n * [Bing](https://learn.microsoft.com/en-us/bingmaps/), [OpenStreetMap](https://wiki.openstreetmap.org/wiki/API), and [GIS servers](https://wiki.openstreetmap.org/wiki/API).\r\n * The specific imagery displayed is determined by a [[Viewport]]'s [MapImagerySettings]($common) and [BackgroundMapSettings]($common).\r\n *\r\n * The map or globe may be smooth, or feature 3d geometry supplied by a [[TerrainProvider]].\r\n * The terrain displayed in a [[Viewport]] is determined by its [TerrainSettings]($common).\r\n * @public\r\n */\r\n\r\nexport class MapTileTree extends RealityTileTree {\r\n /** @internal */\r\n public ecefToDb: Transform;\r\n /** @internal */\r\n public bimElevationBias: number;\r\n /** @internal */\r\n public geodeticOffset: number;\r\n /** @internal */\r\n public sourceTilingScheme: MapTilingScheme;\r\n /** @internal */\r\n private _mercatorFractionToDb: Transform;\r\n /** @internal */\r\n public earthEllipsoid: Ellipsoid;\r\n /** @internal */\r\n public minEarthEllipsoid: Ellipsoid;\r\n /** @internal */\r\n public maxEarthEllipsoid: Ellipsoid;\r\n /** Determines whether the map displays as a plane or an ellipsoid. */\r\n public readonly globeMode: GlobeMode;\r\n /** @internal */\r\n public globeOrigin: Point3d;\r\n /** @internal */\r\n private _mercatorTilingScheme: MapTilingScheme;\r\n /** @internal */\r\n public useDepthBuffer: boolean;\r\n /** @internal */\r\n public isOverlay: boolean;\r\n /** @internal */\r\n public terrainExaggeration: number;\r\n /** @internal */\r\n public baseColor?: ColorDef;\r\n /** @internal */\r\n public baseTransparent: boolean;\r\n /** @internal */\r\n public mapTransparent: boolean;\r\n /** @internal */\r\n public produceGeometry?: boolean;\r\n /** @internal */\r\n public layerImageryTrees: MapLayerTreeSetting[] = [];\r\n private _layerSettings = new Map<Id64String, MapLayerSettings>();\r\n private _imageryTreeState = new Map<Id64String, ImageryTileTreeState>();\r\n private _modelIdToIndex = new Map<Id64String, number>();\r\n /** @internal */\r\n public layerClassifiers = new Map<number, RenderPlanarClassifier>();\r\n\r\n /** @internal */\r\n constructor(params: RealityTileTreeParams, ecefToDb: Transform, bimElevationBias: number, geodeticOffset: number,\r\n sourceTilingScheme: MapTilingScheme, id: MapTreeId, applyTerrain: boolean) {\r\n super(params);\r\n this.ecefToDb = ecefToDb;\r\n this.bimElevationBias = bimElevationBias;\r\n this.geodeticOffset = geodeticOffset;\r\n this.sourceTilingScheme = sourceTilingScheme;\r\n this._mercatorTilingScheme = new WebMercatorTilingScheme();\r\n this._mercatorFractionToDb = this._mercatorTilingScheme.computeMercatorFractionToDb(ecefToDb, bimElevationBias, params.iModel, applyTerrain);\r\n const quadId = new QuadId(sourceTilingScheme.rootLevel, 0, 0);\r\n this.globeOrigin = this.ecefToDb.getOrigin().clone();\r\n this.earthEllipsoid = Ellipsoid.createCenterMatrixRadii(this.globeOrigin, this.ecefToDb.matrix, Constant.earthRadiusWGS84.equator, Constant.earthRadiusWGS84.equator, Constant.earthRadiusWGS84.polar);\r\n const globalHeightRange = applyTerrain ? ApproximateTerrainHeights.instance.globalHeightRange : Range1d.createXX(0, 0);\r\n const globalRectangle = MapCartoRectangle.createMaximum();\r\n\r\n this.globeMode = id.globeMode;\r\n this.isOverlay = id.isOverlay;\r\n this.useDepthBuffer = id.useDepthBuffer;\r\n this.terrainExaggeration = id.terrainExaggeration;\r\n this.baseColor = id.baseColor;\r\n this.baseTransparent = id.baseTransparent;\r\n this.mapTransparent = id.mapTransparent;\r\n if (applyTerrain) {\r\n this.minEarthEllipsoid = Ellipsoid.createCenterMatrixRadii(this.globeOrigin, this.ecefToDb.matrix, Constant.earthRadiusWGS84.equator + globalHeightRange.low, Constant.earthRadiusWGS84.equator + globalHeightRange.low, Constant.earthRadiusWGS84.polar + globalHeightRange.low);\r\n this.maxEarthEllipsoid = Ellipsoid.createCenterMatrixRadii(this.globeOrigin, this.ecefToDb.matrix, Constant.earthRadiusWGS84.equator + globalHeightRange.high, Constant.earthRadiusWGS84.equator + globalHeightRange.high, Constant.earthRadiusWGS84.polar + globalHeightRange.high);\r\n this.produceGeometry = id.produceGeometry;\r\n } else {\r\n this.minEarthEllipsoid = this.earthEllipsoid;\r\n this.maxEarthEllipsoid = this.earthEllipsoid;\r\n }\r\n\r\n const rootPatch = EllipsoidPatch.createCapture(\r\n this.maxEarthEllipsoid, AngleSweep.createStartSweepRadians(0, Angle.pi2Radians),\r\n AngleSweep.createStartSweepRadians(-Angle.piOver2Radians, Angle.piRadians),\r\n );\r\n\r\n let range;\r\n if (this.globeMode === GlobeMode.Ellipsoid) {\r\n range = rootPatch.range();\r\n } else {\r\n const corners = this.getFractionalTileCorners(quadId);\r\n this._mercatorFractionToDb.multiplyPoint3dArrayInPlace(corners);\r\n range = Range3d.createArray(MapTile.computeRangeCorners(corners, Vector3d.create(0, 0, 1), 0, scratchCorners, globalHeightRange));\r\n }\r\n\r\n this._rootTile = this.createGlobeChild({ contentId: quadId.contentId, maximumSize: 0, range }, quadId, range.corners(), globalRectangle, rootPatch, undefined);\r\n }\r\n\r\n /** @internal */\r\n public override get parentsAndChildrenExclusive() {\r\n // If we are not depth buffering we force parents and exclusive to false to cause the map tiles to be sorted\r\n // by depth so that painters algorithm will approximate correct depth display.\r\n return this.useDepthBuffer ? this.loader.parentsAndChildrenExclusive : false;\r\n }\r\n\r\n /** Return the imagery tile tree state of matching the provided imagery tree id.\r\n * @internal\r\n */\r\n public getImageryTreeState(imageryTreeId: string) {\r\n return this._imageryTreeState.get(imageryTreeId);\r\n }\r\n\r\n /** Return a cloned dictionary of the imagery tile tree states\r\n * @internal\r\n */\r\n public cloneImageryTreeState() {\r\n const clone = new Map<Id64String, ImageryTileTreeState>();\r\n for (const [treeId, state] of this._imageryTreeState) {\r\n clone.set(treeId, state.clone());\r\n }\r\n return clone;\r\n }\r\n\r\n /** @internal */\r\n public tileFromQuadId(quadId: QuadId): MapTile | undefined {\r\n return (this._rootTile as MapTile).tileFromQuadId(quadId);\r\n }\r\n\r\n /** Add a new imagery tile tree / map-layer settings pair and initialize the imagery tile tree state.\r\n * @internal\r\n */\r\n public addImageryLayer(tree: ImageryMapTileTree, settings: MapLayerSettings, index: number, baseImageryLayer: boolean) {\r\n this.layerImageryTrees.push({ tree, settings, baseImageryLayer });\r\n this._layerSettings.set(tree.modelId, settings);\r\n if (!this._imageryTreeState.has(tree.modelId))\r\n this._imageryTreeState.set(tree.modelId, new ImageryTileTreeState());\r\n this._modelIdToIndex.set(tree.modelId, index);\r\n }\r\n\r\n /** @internal */\r\n public addModelLayer(layerTreeRef: ModelMapLayerTileTreeReference, context: SceneContext) {\r\n const classifier = context.addPlanarClassifier(`MapLayer ${this.modelId}-${layerTreeRef.layerIndex}`, layerTreeRef);\r\n if (classifier)\r\n this.layerClassifiers.set(layerTreeRef.layerIndex, classifier);\r\n }\r\n\r\n /** @internal */\r\n protected override collectClassifierGraphics(args: TileDrawArgs, selectedTiles: RealityTile[]) {\r\n super.collectClassifierGraphics(args, selectedTiles);\r\n\r\n this.layerClassifiers.forEach((layerClassifier: RenderPlanarClassifier) => {\r\n if (!(args instanceof GraphicsCollectorDrawArgs))\r\n layerClassifier.collectGraphics(args.context, { modelId: this.modelId, tiles: selectedTiles, location: args.location, isPointCloud: this.isPointCloud });\r\n\r\n });\r\n }\r\n\r\n /** @internal */\r\n public clearImageryTreesAndClassifiers() {\r\n this.layerImageryTrees.length = 0;\r\n this._layerSettings.clear();\r\n this._modelIdToIndex.clear();\r\n this.layerClassifiers.clear();\r\n }\r\n\r\n /** @internal */\r\n public override get isTransparent() {\r\n return this.mapTransparent || this.baseTransparent;\r\n }\r\n\r\n /** @internal */\r\n public override get maxDepth() {\r\n let maxDepth = this.loader.maxDepth;\r\n this.layerImageryTrees?.forEach((layerImageryTree) => maxDepth = Math.max(maxDepth, layerImageryTree.tree.maxDepth));\r\n\r\n return maxDepth;\r\n }\r\n\r\n /** @internal */\r\n public createPlanarChild(params: TileParams, quadId: QuadId, corners: Point3d[], normal: Vector3d, rectangle: MapCartoRectangle, chordHeight: number, heightRange?: Range1d): MapTile | undefined {\r\n const childAvailable = this.mapLoader.isTileAvailable(quadId);\r\n if (!childAvailable && this.produceGeometry)\r\n return undefined;\r\n\r\n const patch = new PlanarTilePatch(corners, normal, chordHeight);\r\n const cornerNormals = this.getCornerRays(rectangle);\r\n if (childAvailable)\r\n return new MapTile(params, this, quadId, patch, rectangle, heightRange, cornerNormals);\r\n\r\n assert(params.parent instanceof MapTile);\r\n let loadableTile: MapTile | undefined = params.parent;\r\n while (loadableTile?.isUpsampled)\r\n loadableTile = loadableTile.parent as MapTile | undefined;\r\n\r\n assert(undefined !== loadableTile);\r\n return new UpsampledMapTile(params, this, quadId, patch, rectangle, heightRange, cornerNormals, loadableTile);\r\n }\r\n\r\n /** @internal */\r\n public createGlobeChild(params: TileParams, quadId: QuadId, _rangeCorners: Point3d[], rectangle: MapCartoRectangle, ellipsoidPatch: EllipsoidPatch, heightRange?: Range1d): MapTile {\r\n return new MapTile(params, this, quadId, ellipsoidPatch, rectangle, heightRange, this.getCornerRays(rectangle));\r\n }\r\n\r\n /** @internal */\r\n public getChildHeightRange(quadId: QuadId, rectangle: MapCartoRectangle, parent: MapTile): Range1d | undefined {\r\n return this.mapLoader.getChildHeightRange(quadId, rectangle, parent);\r\n }\r\n\r\n /** @internal */\r\n public clearLayers() {\r\n (this._rootTile as MapTile).clearLayers();\r\n }\r\n\r\n /** Reprojection does not work with very large tiles so just do linear transform.\r\n * @internal\r\n */\r\n public static minReprojectionDepth = 8;\r\n /** @internal */\r\n public static maxGlobeDisplayDepth = 8;\r\n /** @internal */\r\n public static minDisplayableDepth = 3;\r\n /** @internal */\r\n public get mapLoader() { return this.loader as MapTileLoader; }\r\n\r\n /** @internal */\r\n public override getBaseRealityDepth(sceneContext: SceneContext) {\r\n // If the view has ever had global scope then preload low level (global) tiles.\r\n return (sceneContext.viewport.view.maxGlobalScopeFactor > 1) ? MapTileTree.minDisplayableDepth : -1;\r\n }\r\n\r\n /** @internal */\r\n public doCreateGlobeChildren(tile: Tile): boolean {\r\n if (this.globeMode !== GlobeMode.Ellipsoid)\r\n return false;\r\n\r\n const childDepth = tile.depth + 1;\r\n if (childDepth < MapTileTree.maxGlobeDisplayDepth) // If the depth is too low (tile is too large) display as globe.\r\n return true;\r\n\r\n return false; // Display as globe if more than 100 KM from project.\r\n }\r\n\r\n /** @internal */\r\n public override doReprojectChildren(tile: Tile): boolean {\r\n if (this._gcsConverter === undefined)\r\n return false;\r\n\r\n const childDepth = tile.depth + 1;\r\n if (childDepth < MapTileTree.minReprojectionDepth) // If the depth is too low (tile is too large) omit reprojection.\r\n return false;\r\n\r\n return this.cartesianRange.intersectsRange(tile.range);\r\n }\r\n\r\n /** @internal */\r\n public getCornerRays(rectangle: MapCartoRectangle): Ray3d[] | undefined {\r\n const rays = new Array<Ray3d>();\r\n if (this.globeMode === GlobeMode.Ellipsoid) {\r\n rays.push(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.low.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.high.y))!);\r\n rays.push(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.high.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.high.y))!);\r\n rays.push(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.low.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.low.y))!);\r\n rays.push(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.high.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.low.y))!);\r\n } else {\r\n const mercatorFractionRange = rectangle.getTileFractionRange(this._mercatorTilingScheme);\r\n rays.push(Ray3d.createCapture(this._mercatorFractionToDb.multiplyXYZ(mercatorFractionRange.low.x, mercatorFractionRange.high.y), scratchZNormal));\r\n rays.push(Ray3d.createCapture(this._mercatorFractionToDb.multiplyXYZ(mercatorFractionRange.high.x, mercatorFractionRange.high.y), scratchZNormal));\r\n rays.push(Ray3d.createCapture(this._mercatorFractionToDb.multiplyXYZ(mercatorFractionRange.low.x, mercatorFractionRange.low.y), scratchZNormal));\r\n rays.push(Ray3d.createCapture(this._mercatorFractionToDb.multiplyXYZ(mercatorFractionRange.high.x, mercatorFractionRange.low.y), scratchZNormal));\r\n }\r\n return rays;\r\n }\r\n\r\n /** @internal */\r\n public pointAboveEllipsoid(point: Point3d): boolean {\r\n return this.earthEllipsoid.worldToLocal(point, scratchPoint)!.magnitude() > 1;\r\n }\r\n\r\n private getMercatorFractionChildGridPoints(tile: MapTile, columnCount: number, rowCount: number): Point3d[] {\r\n const gridPoints = [];\r\n const quadId = tile.quadId;\r\n const deltaX = 1.0 / columnCount, deltaY = 1.0 / rowCount;\r\n for (let row = 0; row <= rowCount; row++) {\r\n for (let column = 0; column <= columnCount; column++) {\r\n const xFraction = this.sourceTilingScheme.tileXToFraction(quadId.column + column * deltaX, quadId.level);\r\n const yFraction = this.sourceTilingScheme.tileYToFraction(quadId.row + row * deltaY, quadId.level);\r\n\r\n gridPoints.push(Point3d.create(xFraction, yFraction, 0));\r\n }\r\n }\r\n // If not mercator already need to remap latitude...\r\n if (!(this.sourceTilingScheme instanceof WebMercatorTilingScheme))\r\n for (const gridPoint of gridPoints)\r\n gridPoint.y = this._mercatorTilingScheme.latitudeToYFraction(this.sourceTilingScheme.yFractionToLatitude(gridPoint.y));\r\n\r\n return gridPoints;\r\n }\r\n\r\n private getChildCornersFromGridPoints(gridPoints: Point3d[], columnCount: number, rowCount: number) {\r\n const childCorners = new Array<Point3d[]>();\r\n for (let row = 0; row < rowCount; row++) {\r\n for (let column = 0; column < columnCount; column++) {\r\n const index0 = column + row * (columnCount + 1);\r\n const index1 = index0 + (columnCount + 1);\r\n childCorners.push([gridPoints[index0], gridPoints[index0 + 1], gridPoints[index1], gridPoints[index1 + 1]]);\r\n }\r\n }\r\n return childCorners;\r\n }\r\n\r\n /** @internal */\r\n public getCachedReprojectedPoints(gridPoints: Point3d[]): (Point3d | undefined)[] | undefined {\r\n const requestProps = [];\r\n for (const gridPoint of gridPoints)\r\n requestProps.push({\r\n x: this._mercatorTilingScheme.xFractionToLongitude(gridPoint.x) * Angle.degreesPerRadian,\r\n y: this._mercatorTilingScheme.yFractionToLatitude(gridPoint.y) * Angle.degreesPerRadian,\r\n z: this.bimElevationBias,\r\n });\r\n\r\n const iModelCoordinates = this._gcsConverter!.getCachedIModelCoordinatesFromGeoCoordinates(requestProps);\r\n\r\n if (iModelCoordinates.missing)\r\n return undefined;\r\n\r\n return iModelCoordinates.result.map((result) => !result || result.s ? undefined : Point3d.fromJSON(result.p));\r\n }\r\n\r\n /** Minimize reprojection requests by requesting this corners tile and a grid that will include all points for 4 levels of descendants.\r\n * This greatly reduces the number of reprojection requests which currently require a roundtrip through the backend.\r\n * @internal\r\n */\r\n public async loadReprojectionCache(tile: MapTile): Promise<void> {\r\n const quadId = tile.quadId;\r\n const xRange = Range1d.createXX(this.sourceTilingScheme.tileXToFraction(quadId.column, quadId.level), this.sourceTilingScheme.tileXToFraction(quadId.column + 1, quadId.level));\r\n const yRange = Range1d.createXX(this.sourceTilingScheme.tileYToFraction(quadId.row, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row + 1, quadId.level));\r\n const cacheDepth = 4, cacheDimension = 2 ** cacheDepth;\r\n const delta = 1.0 / cacheDimension;\r\n const requestProps = [];\r\n\r\n for (let row = 0; row <= cacheDimension; row++) {\r\n for (let column = 0; column <= cacheDimension; column++) {\r\n let yFraction = yRange.fractionToPoint(row * delta);\r\n if (!(this.sourceTilingScheme instanceof WebMercatorTilingScheme))\r\n yFraction = this._mercatorTilingScheme.latitudeToYFraction(this.sourceTilingScheme.yFractionToLatitude(yFraction));\r\n requestProps.push({\r\n x: this._mercatorTilingScheme.xFractionToLongitude(xRange.fractionToPoint(column * delta)) * Angle.degreesPerRadian,\r\n y: this._mercatorTilingScheme.yFractionToLatitude(yFraction) * Angle.degreesPerRadian,\r\n z: this.bimElevationBias,\r\n });\r\n }\r\n }\r\n\r\n await this._gcsConverter!.getIModelCoordinatesFromGeoCoordinates(requestProps);\r\n }\r\n\r\n private static _scratchCarto = Cartographic.createZero();\r\n\r\n /** Get the corners for planar children.\r\n * This generally will resolve immediately, but may require an asynchronous request for reprojecting the corners.\r\n * @internal\r\n */\r\n public getPlanarChildCorners(tile: MapTile, columnCount: number, rowCount: number, resolve: (childCorners: Point3d[][]) => void) {\r\n const resolveCorners = (points: Point3d[], reprojected: (Point3d | undefined)[] | undefined = undefined) => {\r\n for (let i = 0; i < points.length; i++) {\r\n const gridPoint = points[i];\r\n this._mercatorFractionToDb.multiplyPoint3d(gridPoint, scratchCorner);\r\n if (this.globeMode !== GlobeMode.Ellipsoid || this.cartesianRange.containsPoint(scratchCorner)) {\r\n if (reprojected !== undefined && reprojected[i] !== undefined)\r\n reprojected[i]!.clone(gridPoint);\r\n else\r\n scratchCorner.clone(gridPoint);\r\n } else {\r\n this._mercatorTilingScheme.fractionToCartographic(gridPoint.x, gridPoint.y, MapTileTree._scratchCarto);\r\n this.earthEllipsoid.radiansToPoint(MapTileTree._scratchCarto.longitude, Cartographic.parametricLatitudeFromGeodeticLatitude(MapTileTree._scratchCarto.latitude), gridPoint);\r\n const cartesianDistance = this.cartesianRange.distanceToPoint(scratchCorner);\r\n if (cartesianDistance < this.cartesianTransitionDistance)\r\n scratchCorner.interpolate(cartesianDistance / this.cartesianTransitionDistance, gridPoint, gridPoint);\r\n }\r\n }\r\n resolve(this.getChildCornersFromGridPoints(points, columnCount, rowCount));\r\n };\r\n\r\n let reprojectedPoints: (Point3d | undefined)[] | undefined;\r\n const gridPoints = this.getMercatorFractionChildGridPoints(tile, columnCount, rowCount);\r\n if (this.doReprojectChildren(tile)) {\r\n reprojectedPoints = this.getCachedReprojectedPoints(gridPoints);\r\n if (reprojectedPoints) {\r\n // If the reprojected corners are in the cache, resolve immediately.\r\n resolveCorners(gridPoints, reprojectedPoints);\r\n } else {\r\n // If the reprojected corners are not in cache request them - but also request reprojection of a grid that will include descendent corners to ensure they can\r\n // be reloaded without expensive reprojection requests.\r\n this.loadReprojectionCache(tile).then(() => {\r\n const reprojected = this.getCachedReprojectedPoints(gridPoints);\r\n assert(reprojected !== undefined); // We just cached them... they better be there now.\r\n resolveCorners(gridPoints, reprojected);\r\n }).catch((_error: Error) => {\r\n resolveCorners(gridPoints);\r\n });\r\n }\r\n } else {\r\n resolveCorners(gridPoints);\r\n }\r\n }\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 override reportTileVisibility(args: TileDrawArgs, selected: RealityTile[]) {\r\n\r\n const debugControl = args.context.target.debugControl;\r\n\r\n const layersVisibilityBefore = this.cloneImageryTreeState();\r\n\r\n const changes = new Array<MapLayerScaleRangeVisibility>();\r\n\r\n if (!layersVisibilityBefore)\r\n return;\r\n\r\n for (const [treeId] of layersVisibilityBefore) {\r\n const treeVisibility = this.getImageryTreeState(treeId);\r\n if (treeVisibility) {\r\n treeVisibility.reset();\r\n }\r\n }\r\n\r\n for (const selectedTile of selected) {\r\n if (selectedTile instanceof MapTile) {\r\n let selectedImageryTiles = selectedTile.imageryTiles;\r\n if (selectedTile.hiddenImageryTiles) {\r\n selectedImageryTiles = selectedImageryTiles ? [...selectedImageryTiles, ...selectedTile.hiddenImageryTiles] : selectedTile.hiddenImageryTiles;\r\n }\r\n\r\n const leafTiles = selectedTile.highResolutionReplacementTiles;\r\n if (leafTiles) {\r\n for (const tile of leafTiles) {\r\n const treeState = this.getImageryTreeState(tile.tree.id);\r\n treeState?.setScaleRangeVisibility(false);\r\n }\r\n }\r\n\r\n if (selectedImageryTiles) {\r\n for (const selectedImageryTile of selectedImageryTiles) {\r\n const treeState = this.getImageryTreeState(selectedImageryTile.tree.id);\r\n if (treeState) {\r\n if (selectedImageryTile.isOutOfLodRange) {\r\n treeState.setScaleRangeVisibility(false);\r\n } else {\r\n treeState.setScaleRangeVisibility(true);\r\n }\r\n }\r\n\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (const [treeId, prevState] of layersVisibilityBefore) {\r\n const newState = this.getImageryTreeState(treeId);\r\n if (newState) {\r\n\r\n const prevVisibility = prevState.getScaleRangeVisibility();\r\n const visibility = newState.getScaleRangeVisibility();\r\n if (prevVisibility !== visibility) {\r\n\r\n if (debugControl && debugControl.logRealityTiles) {\r\n // eslint-disable-next-line no-console\r\n console.log(`ImageryTileTree '${treeId}' changed prev state: '${MapTileTreeScaleRangeVisibility[prevVisibility]}' new state: '${MapTileTreeScaleRangeVisibility[visibility]}'`);\r\n }\r\n\r\n const mapLayersIndexes = args.context.viewport.getMapLayerIndexesFromIds(this.id, treeId);\r\n for (const index of mapLayersIndexes) {\r\n changes.push({ index: index.index, isOverlay: index.isOverlay, visibility });\r\n }\r\n\r\n }\r\n }\r\n }\r\n\r\n if (changes.length !== 0) {\r\n args.context.viewport.onMapLayerScaleRangeVisibilityChanged.raiseEvent(changes);\r\n }\r\n\r\n }\r\n\r\n /** @internal */\r\n public getFractionalTileCorners(quadId: QuadId): Point3d[] {\r\n const corners: Point3d[] = [];\r\n corners.push(Point3d.create(this.sourceTilingScheme.tileXToFraction(quadId.column, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row, quadId.level), 0.0));\r\n corners.push(Point3d.create(this.sourceTilingScheme.tileXToFraction(quadId.column + 1, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row, quadId.level), 0.0));\r\n corners.push(Point3d.create(this.sourceTilingScheme.tileXToFraction(quadId.column, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row + 1, quadId.level), 0.0));\r\n corners.push(Point3d.create(this.sourceTilingScheme.tileXToFraction(quadId.column + 1, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row + 1, quadId.level), 0.0));\r\n return corners;\r\n }\r\n\r\n /** @internal */\r\n public getTileRectangle(quadId: QuadId): MapCartoRectangle {\r\n return this.sourceTilingScheme.tileXYToRectangle(quadId.column, quadId.row, quadId.level);\r\n }\r\n\r\n /** @internal */\r\n public getLayerIndex(imageryTreeId: Id64String) {\r\n const index = this._modelIdToIndex.get(imageryTreeId);\r\n return index === undefined ? -1 : index;\r\n }\r\n\r\n /** @internal */\r\n public getLayerTransparency(imageryTreeId: Id64String): number {\r\n const layerSettings = this._layerSettings.get(imageryTreeId);\r\n assert(undefined !== layerSettings);\r\n return undefined === layerSettings || !layerSettings.transparency ? 0.0 : layerSettings.transparency;\r\n }\r\n}\r\n\r\ninterface MapTreeId {\r\n tileUserId: number;\r\n applyTerrain: boolean;\r\n terrainProviderName: string;\r\n terrainHeightOrigin: number;\r\n terrainHeightOriginMode: number;\r\n terrainExaggeration: number;\r\n mapGroundBias: number;\r\n wantSkirts: boolean;\r\n wantNormals: boolean;\r\n globeMode: GlobeMode;\r\n useDepthBuffer: boolean;\r\n isOverlay: boolean;\r\n baseColor?: ColorDef;\r\n baseTransparent: boolean;\r\n mapTransparent: boolean;\r\n maskModelIds?: string;\r\n produceGeometry?: boolean;\r\n}\r\n\r\n/** @internal */\r\nclass MapTileTreeProps implements RealityTileTreeParams {\r\n public id: string;\r\n public modelId: string;\r\n public location = Transform.createIdentity();\r\n public yAxisUp = true;\r\n public is3d = true;\r\n public rootTile = { contentId: \"\", range: Range3d.createNull(), maximumSize: 0 };\r\n public loader: MapTileLoader;\r\n public iModel: IModelConnection;\r\n public get priority(): TileLoadPriority { return this.loader.priority; }\r\n\r\n public constructor(modelId: Id64String, loader: MapTileLoader, iModel: IModelConnection, public gcsConverterAvailable: boolean) {\r\n this.id = this.modelId = modelId;\r\n this.loader = loader;\r\n this.iModel = iModel;\r\n }\r\n}\r\n\r\nfunction createViewFlagOverrides(wantLighting: boolean, wantThematic: false | undefined) {\r\n return createDefaultViewFlagOverrides({ clipVolume: false, lighting: wantLighting, thematic: wantThematic });\r\n}\r\n\r\nclass MapTreeSupplier implements TileTreeSupplier {\r\n public readonly isEcefDependent = true;\r\n\r\n public compareTileTreeIds(lhs: MapTreeId, rhs: MapTreeId): number {\r\n let cmp = compareNumbers(lhs.tileUserId, rhs.tileUserId);\r\n if (0 === cmp) {\r\n cmp = compareStringsOrUndefined(lhs.maskModelIds, rhs.maskModelIds);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.isOverlay, rhs.isOverlay);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.wantSkirts, rhs.wantSkirts);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.wantNormals, rhs.wantNormals);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.globeMode, rhs.globeMode);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.baseColor ? lhs.baseColor.tbgr : -1, rhs.baseColor ? rhs.baseColor.tbgr : -1);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.baseTransparent, rhs.baseTransparent);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.mapTransparent, rhs.mapTransparent);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.applyTerrain, rhs.applyTerrain);\r\n if (0 === cmp) {\r\n if (lhs.applyTerrain) {\r\n // Terrain-only settings.\r\n cmp = compareStrings(lhs.terrainProviderName, rhs.terrainProviderName);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.terrainHeightOrigin, rhs.terrainHeightOrigin);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.terrainHeightOriginMode, rhs.terrainHeightOriginMode);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.terrainExaggeration, rhs.terrainExaggeration);\r\n if (0 === cmp)\r\n cmp = compareBooleansOrUndefined(lhs.produceGeometry, rhs.produceGeometry);\r\n }\r\n }\r\n }\r\n } else {\r\n // Non-Terrain (flat) settings.\r\n cmp = compareNumbers(lhs.mapGroundBias, rhs.mapGroundBias);\r\n if (0 === cmp)\r\n cmp = compareBooleans(lhs.useDepthBuffer, rhs.useDepthBuffer);\r\n }\r\n }\r\n }\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 private async computeHeightBias(heightOrigin: number, heightOriginMode: TerrainHeightOriginMode, exaggeration: number, iModel: IModelConnection, elevationProvider: BingElevationProvider): Promise<number> {\r\n const projectCenter = iModel.projectExtents.center;\r\n switch (heightOriginMode) {\r\n case TerrainHeightOriginMode.Ground:\r\n return heightOrigin + exaggeration * (await elevationProvider.getHeightValue(projectCenter, iModel, true));\r\n\r\n case TerrainHeightOriginMode.Geodetic:\r\n return heightOrigin;\r\n\r\n case TerrainHeightOriginMode.Geoid:\r\n return heightOrigin + await elevationProvider.getGeodeticToSeaLevelOffset(projectCenter, iModel);\r\n }\r\n }\r\n\r\n public async createTileTree(id: MapTreeId, iModel: IModelConnection): Promise<TileTree | undefined> {\r\n let bimElevationBias = 0, terrainProvider, geodeticOffset = 0;\r\n let applyTerrain = id.applyTerrain;\r\n const modelId = iModel.transientIds.getNext();\r\n const gcsConverterAvailable = await getGcsConverterAvailable(iModel);\r\n\r\n const terrainOpts: TerrainMeshProviderOptions = {\r\n wantSkirts: id.wantSkirts,\r\n exaggeration: id.terrainExaggeration,\r\n wantNormals: id.wantNormals,\r\n };\r\n\r\n if (id.applyTerrain) {\r\n await ApproximateTerrainHeights.instance.initialize();\r\n const elevationProvider = new BingElevationProvider();\r\n\r\n bimElevationBias = - await this.computeHeightBias(id.terrainHeightOrigin, id.terrainHeightOriginMode, id.terrainExaggeration, iModel, elevationProvider);\r\n geodeticOffset = await elevationProvider.getGeodeticToSeaLevelOffset(iModel.projectExtents.center, iModel);\r\n const provider = IModelApp.terrainProviderRegistry.find(id.terrainProviderName);\r\n if (provider)\r\n terrainProvider = await provider.createTerrainMeshProvider(terrainOpts);\r\n\r\n if (!terrainProvider) {\r\n applyTerrain = false;\r\n geodeticOffset = 0;\r\n }\r\n }\r\n\r\n if (!terrainProvider) {\r\n terrainProvider = new EllipsoidTerrainProvider(terrainOpts);\r\n bimElevationBias = id.mapGroundBias;\r\n }\r\n\r\n const loader = new MapTileLoader(iModel, modelId, bimElevationBias, terrainProvider);\r\n const ecefToDb = iModel.getMapEcefToDb(bimElevationBias);\r\n\r\n if (id.maskModelIds)\r\n await iModel.models.load(CompressedId64Set.decompressSet(id.maskModelIds));\r\n\r\n const treeProps = new MapTileTreeProps(modelId, loader, iModel, gcsConverterAvailable);\r\n return new MapTileTree(treeProps, ecefToDb, bimElevationBias, geodeticOffset, terrainProvider.tilingScheme, id, applyTerrain);\r\n }\r\n}\r\n\r\nconst mapTreeSupplier = new MapTreeSupplier();\r\n\r\n/** @internal */\r\ntype CheckTerrainDisplayOverride = () => TerrainDisplayOverrides | undefined;\r\n\r\n/** Specialization of tile tree that represents background map.\r\n * @internal\r\n */\r\nexport class MapTileTreeReference extends TileTreeReference {\r\n private _tileUserId: number;\r\n private _settings: BackgroundMapSettings;\r\n private readonly _iModel: IModelConnection;\r\n private _baseImageryLayerIncluded = false;\r\n private _baseColor?: ColorDef;\r\n private readonly _layerTrees = new Array<MapLayerTileTreeReference | undefined>();\r\n private _baseTransparent = false;\r\n private _symbologyOverrides: FeatureSymbology.Overrides | undefined;\r\n private _planarClipMask?: PlanarClipMaskState;\r\n\r\n public constructor(\r\n settings: BackgroundMapSettings,\r\n private _baseLayerSettings: BaseLayerSettings | undefined,\r\n private _layerSettings: MapLayerSettings[],\r\n iModel: IModelConnection,\r\n tileUserId: number,\r\n public isOverlay: boolean,\r\n private _isDrape: boolean,\r\n private _overrideTerrainDisplay?: CheckTerrainDisplayOverride) {\r\n super();\r\n this._tileUserId = tileUserId;\r\n this._settings = settings;\r\n this._iModel = iModel;\r\n let tree;\r\n if (!isOverlay && this._baseLayerSettings !== undefined) {\r\n if (this._baseLayerSettings instanceof MapLayerSettings) {\r\n tree = createMapLayerTreeReference(this._baseLayerSettings, 0, iModel);\r\n this._baseTransparent = this._baseLayerSettings.transparency > 0;\r\n } else {\r\n this._baseColor = this._baseLayerSettings;\r\n this._baseTransparent = this._baseColor?.getTransparency() > 0;\r\n }\r\n }\r\n\r\n if (this._baseImageryLayerIncluded = (undefined !== tree))\r\n this._layerTrees.push(tree);\r\n\r\n for (let i = 0; i < this._layerSettings.length; i++)\r\n if (undefined !== (tree = createMapLayerTreeReference(this._layerSettings[i], i + 1, iModel)))\r\n this._layerTrees.push(tree);\r\n\r\n if (this._settings.planarClipMask && this._settings.planarClipMask.isValid)\r\n this._planarClipMask = PlanarClipMaskState.create(this._settings.planarClipMask);\r\n\r\n if (this._overrideTerrainDisplay && this._overrideTerrainDisplay()?.produceGeometry)\r\n this.collectTileGeometry = (collector) => this._collectTileGeometry(collector);\r\n }\r\n\r\n public forEachLayerTileTreeRef(func: (ref: TileTreeReference) => void): void {\r\n for (const layerTree of this._layerTrees) {\r\n assert(layerTree instanceof MapLayerTileTreeReference);\r\n func(layerTree);\r\n }\r\n }\r\n\r\n public override get isGlobal() { return true; }\r\n public get baseColor(): ColorDef | undefined { return this._baseColor; }\r\n public override get planarclipMaskPriority(): number { return PlanarClipMaskPriority.BackgroundMap; }\r\n\r\n protected override _createGeometryTreeReference(): GeometryTileTreeReference | undefined {\r\n if (!this._settings.applyTerrain || this._isDrape)\r\n return undefined; // Don't bother generating non-terrain (flat) geometry.\r\n\r\n const ref = new MapTileTreeReference(this._settings, undefined, [], this._iModel, this._tileUserId, false, false, () => {\r\n return { produceGeometry: true };\r\n });\r\n\r\n assert(undefined !== ref.collectTileGeometry);\r\n return ref as GeometryTileTreeReference;\r\n }\r\n\r\n /** Terrain tiles do not contribute to the range used by \"fit view\". */\r\n public override unionFitRange(_range: Range3d): void { }\r\n public get settings(): BackgroundMapSettings { return this._settings; }\r\n public set settings(settings: BackgroundMapSettings) {\r\n this._settings = settings;\r\n this._planarClipMask = settings.planarClipMask ? PlanarClipMaskState.create(settings.planarClipMask) : undefined;\r\n }\r\n public setBaseLayerSettings(baseLayerSettings: BaseLayerSettings) {\r\n assert(!this.isOverlay);\r\n let tree;\r\n this._baseLayerSettings = baseLayerSettings;\r\n\r\n if (baseLayerSettings instanceof MapLayerSettings) {\r\n tree = createMapLayerTreeReference(baseLayerSettings, 0, this._iModel);\r\n this._baseColor = undefined;\r\n this._baseTransparent = baseLayerSettings.transparency > 0;\r\n } else {\r\n this._baseColor = baseLayerSettings;\r\n this._baseTransparent = this._baseColor.getTransparency() > 0;\r\n }\r\n\r\n if (tree) {\r\n if (this._baseImageryLayerIncluded)\r\n this._layerTrees[0] = tree;\r\n else\r\n this._layerTrees.splice(0, 0, tree);\r\n } else {\r\n if (this._baseImageryLayerIncluded)\r\n this._layerTrees.shift();\r\n }\r\n this._baseImageryLayerIncluded = tree !== undefined;\r\n this.clearLayers();\r\n }\r\n public get layerSettings(): MapLayerSettings[] {\r\n return this._layerSettings;\r\n }\r\n\r\n public setLayerSettings(layerSettings: MapLayerSettings[]) {\r\n this._layerSettings = layerSettings;\r\n const baseLayerIndex = this._baseImageryLayerIncluded ? 1 : 0;\r\n\r\n this._layerTrees.length = Math.min(layerSettings.length + baseLayerIndex, this._layerTrees.length); // Truncate if number of layers reduced.\r\n for (let i = 0; i < layerSettings.length; i++) {\r\n const treeIndex = i + baseLayerIndex;\r\n if (treeIndex >= this._layerTrees.length || !this._layerTrees[treeIndex]?.layerSettings.displayMatches(layerSettings[i]))\r\n this._layerTrees[treeIndex] = createMapLayerTreeReference(layerSettings[i], treeIndex, this._iModel)!;\r\n }\r\n this.clearLayers();\r\n }\r\n\r\n public clearLayers() {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (undefined !== tree)\r\n tree.clearLayers();\r\n }\r\n\r\n public override get castsShadows() {\r\n return false;\r\n }\r\n\r\n protected override get _isLoadingComplete(): boolean {\r\n // Wait until drape tree is fully loaded too.\r\n for (const drapeTree of this._layerTrees)\r\n if (drapeTree && !drapeTree.isLoadingComplete)\r\n return false;\r\n\r\n return super._isLoadingComplete;\r\n }\r\n public get useDepthBuffer() {\r\n return !this.isOverlay && (this.settings.applyTerrain || this.settings.useDepthBuffer);\r\n }\r\n\r\n public get treeOwner(): TileTreeOwner {\r\n let wantSkirts = (this.settings.applyTerrain || this.useDepthBuffer) && !this.settings.transparency && !this._baseTransparent;\r\n if (wantSkirts) {\r\n const maskTrans = this._planarClipMask?.settings.transparency;\r\n wantSkirts = (undefined === maskTrans || maskTrans <= 0);\r\n }\r\n\r\n const id: MapTreeId = {\r\n tileUserId: this._tileUserId,\r\n applyTerrain: this.settings.applyTerrain && !this._isDrape,\r\n terrainProviderName: this.settings.terrainSettings.providerName,\r\n terrainHeightOrigin: this.settings.terrainSettings.heightOrigin,\r\n terrainHeightOriginMode: this.settings.terrainSettings.heightOriginMode,\r\n terrainExaggeration: this.settings.terrainSettings.exaggeration,\r\n mapGroundBias: this.settings.groundBias,\r\n wantSkirts,\r\n // Can set to this.settings.terrainSettings.applyLighting if we want to ever apply lighting to terrain again so that normals are retrieved when lighting is on.\r\n wantNormals: false,\r\n globeMode: this._isDrape ? GlobeMode.Plane : this.settings.globeMode,\r\n isOverlay: this.isOverlay,\r\n useDepthBuffer: this.useDepthBuffer,\r\n baseColor: this._baseColor,\r\n baseTransparent: this._baseTransparent,\r\n mapTransparent: Number(this.settings.transparency) > 0,\r\n maskModelIds: this._planarClipMask?.settings.compressedModelIds,\r\n produceGeometry: false,\r\n };\r\n\r\n if (undefined !== this._overrideTerrainDisplay) {\r\n const ovr = this._overrideTerrainDisplay();\r\n if (undefined !== ovr) {\r\n id.wantSkirts = ovr.wantSkirts ?? id.wantSkirts;\r\n id.wantNormals = ovr.wantNormals ?? id.wantNormals;\r\n id.produceGeometry = ovr.produceGeometry === true;\r\n }\r\n }\r\n\r\n return this._iModel.tiles.getTileTreeOwner(id, mapTreeSupplier);\r\n }\r\n public getLayerImageryTreeRef(index: number): MapLayerTileTreeReference | undefined {\r\n const baseLayerIndex = this._baseImageryLayerIncluded ? 1 : 0;\r\n const treeIndex = index + baseLayerIndex;\r\n return index < 0 || treeIndex >= this._layerTrees.length ? undefined : this._layerTrees[treeIndex];\r\n }\r\n\r\n /** Return the map-layer scale range visibility for the provided map-layer index.\r\n * @internal\r\n */\r\n public getMapLayerScaleRangeVisibility(index: number): MapTileTreeScaleRangeVisibility {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (undefined !== tree) {\r\n const tileTreeRef = this.getLayerImageryTreeRef(index);\r\n const treeId = tileTreeRef?.treeOwner.tileTree?.id;\r\n if (treeId !== undefined) {\r\n const treeState = tree.getImageryTreeState(treeId);\r\n if (treeState !== undefined)\r\n return treeState.getScaleRangeVisibility();\r\n }\r\n }\r\n return MapTileTreeScaleRangeVisibility.Unknown;\r\n }\r\n\r\n public initializeLayers(context: SceneContext): boolean {\r\n const tree = this.treeOwner.load() as MapTileTree;\r\n if (undefined === tree)\r\n return false; // Not loaded yet.\r\n\r\n tree.layerImageryTrees.length = 0;\r\n if (0 === this._layerTrees.length)\r\n return !this.isOverlay;\r\n\r\n let treeIndex = this._layerTrees.length - 1;\r\n // Start displaying at the highest completely opaque layer...\r\n for (; treeIndex >= 1; treeIndex--) {\r\n const layerTreeRef = this._layerTrees[treeIndex];\r\n if (layerTreeRef?.isOpaque)\r\n break; // This layer is completely opaque and will obscure all others so ignore lower ones.\r\n }\r\n\r\n for (; treeIndex < this._layerTrees.length; treeIndex++) {\r\n const layerTreeRef = this._layerTrees[treeIndex];\r\n // Load tile tree for each configured layer.\r\n // Note: Non-visible layer are also added to allow proper tile tree scale range visibility reporting.\r\n if (layerTreeRef && TileTreeLoadStatus.NotFound !== layerTreeRef.treeOwner.loadStatus\r\n && !layerTreeRef.layerSettings.allSubLayersInvisible) {\r\n const layerTree = layerTreeRef.treeOwner.load();\r\n if (undefined === layerTree)\r\n return false; // Not loaded yet.\r\n\r\n const baseImageryLayer = this._baseImageryLayerIncluded && (treeIndex === 0);\r\n if (layerTree instanceof ImageryMapTileTree) {\r\n tree.addImageryLayer(layerTree, layerTreeRef.layerSettings, treeIndex, baseImageryLayer);\r\n } else if (layerTreeRef instanceof ModelMapLayerTileTreeReference)\r\n tree.addModelLayer(layerTreeRef, context);\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** Adds this reference's graphics to the scene. By default this invokes [[TileTree.drawScene]] on the referenced TileTree, if it is loaded. */\r\n public override addToScene(context: SceneContext): void {\r\n if (!context.viewFlags.backgroundMap)\r\n return;\r\n\r\n const tree = this.treeOwner.load() as MapTileTree;\r\n if (undefined === tree || !this.initializeLayers(context))\r\n return; // Not loaded yet.\r\n\r\n if (this._planarClipMask && this._planarClipMask.settings.isValid)\r\n context.addPlanarClassifier(tree.modelId, undefined, this._planarClipMask);\r\n\r\n const nonLocatable = this.settings.locatable ? undefined : true;\r\n const transparency = this.settings.transparency ? this.settings.transparency : undefined;\r\n this._symbologyOverrides = new FeatureSymbology.Overrides();\r\n if (nonLocatable || transparency) {\r\n this._symbologyOverrides.override({\r\n modelId: tree.modelId,\r\n appearance: FeatureAppearance.fromJSON({ transparency, nonLocatable }),\r\n });\r\n }\r\n\r\n const args = this.createDrawArgs(context);\r\n if (undefined !== args)\r\n tree.draw(args);\r\n\r\n tree.clearImageryTreesAndClassifiers();\r\n }\r\n\r\n public override createDrawArgs(context: SceneContext): TileDrawArgs | undefined {\r\n const args = super.createDrawArgs(context);\r\n if (undefined === args)\r\n return undefined;\r\n\r\n const tree = this.treeOwner.load() as MapTileTree;\r\n return new RealityTileDrawArgs(args, args.worldToViewMap, args.frustumPlanes, undefined, tree?.layerClassifiers);\r\n }\r\n\r\n protected override getViewFlagOverrides(_tree: TileTree) {\r\n return createViewFlagOverrides(false, this._settings.applyTerrain ? undefined : false);\r\n }\r\n\r\n protected override getSymbologyOverrides(_tree: TileTree) {\r\n return this._symbologyOverrides;\r\n }\r\n\r\n public override discloseTileTrees(trees: DisclosedTileTreeSet): void {\r\n super.discloseTileTrees(trees);\r\n for (const imageryTree of this._layerTrees)\r\n if (imageryTree)\r\n trees.disclose(imageryTree);\r\n\r\n if (this._planarClipMask)\r\n this._planarClipMask.discloseTileTrees(trees);\r\n }\r\n\r\n public imageryTreeFromTreeModelIds(mapTreeModelId: Id64String, layerTreeModelId: Id64String): ImageryMapLayerTreeReference[] {\r\n const imageryTrees: ImageryMapLayerTreeReference[] = [];\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (undefined === tree || tree.modelId !== mapTreeModelId)\r\n return imageryTrees;\r\n\r\n for (const imageryTree of this._layerTrees)\r\n if (imageryTree && imageryTree.treeOwner.tileTree && imageryTree.treeOwner.tileTree.modelId === layerTreeModelId)\r\n imageryTrees.push(imageryTree);\r\n\r\n return imageryTrees;\r\n }\r\n\r\n public layerFromTreeModelIds(mapTreeModelId: Id64String, layerTreeModelId: Id64String): MapLayerInfoFromTileTree[] {\r\n const imageryTree = this.imageryTreeFromTreeModelIds(mapTreeModelId, layerTreeModelId);\r\n return imageryTree.map((tree) => {\r\n const isBaseLayer = (this._baseImageryLayerIncluded && tree.layerIndex === 0);\r\n return {\r\n isBaseLayer,\r\n index: isBaseLayer ? undefined : {isOverlay: this.isOverlay, index: this._baseImageryLayerIncluded ? tree.layerIndex -1 : tree.layerIndex},\r\n settings: tree.layerSettings, provider: tree.imageryProvider};\r\n });\r\n }\r\n\r\n // Utility method that execute the provided function for every *imagery* tiles under a given HitDetail object.\r\n private async forEachImageryTileHit(hit: HitDetail, func: (imageryTreeRef: ImageryMapLayerTreeReference, quadId: QuadId, cartoGraphic: Cartographic, imageryTree: ImageryMapTileTree) => Promise<void>): Promise<void> {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (undefined === tree || hit.iModel !== tree.iModel || tree.modelId !== hit.modelId || !hit.viewport || !hit.viewport.view.is3d)\r\n return undefined;\r\n\r\n const backgroundMapGeometry = hit.viewport.displayStyle.getBackgroundMapGeometry();\r\n if (undefined === backgroundMapGeometry)\r\n return undefined;\r\n\r\n const worldPoint = hit.hitPoint.clone();\r\n let cartoGraphic: Cartographic | undefined;\r\n try {\r\n cartoGraphic = (await backgroundMapGeometry.dbToWGS84CartographicFromGcs([worldPoint]))[0];\r\n } catch {\r\n }\r\n if (!cartoGraphic) {\r\n return undefined;\r\n }\r\n\r\n const imageryTreeRef = this.imageryTreeFromTreeModelIds(hit.modelId, hit.sourceId);\r\n if (imageryTreeRef.length > 0) {\r\n if (hit.tileId !== undefined) {\r\n const terrainQuadId = QuadId.createFromContentId(hit.tileId);\r\n const terrainTile = tree.tileFromQuadId(terrainQuadId);\r\n\r\n for (const treeRef of imageryTreeRef) {\r\n const processedTileIds: string[] = [];\r\n if (terrainTile && terrainTile.imageryTiles) {\r\n const imageryTree = treeRef.treeOwner.tileTree as ImageryMapTileTree;\r\n if (imageryTree) {\r\n for (const imageryTile of terrainTile.imageryTiles) {\r\n if (!processedTileIds.includes(imageryTile.contentId)\r\n && imageryTree === imageryTile.imageryTree\r\n && imageryTile.rectangle.containsCartographic(cartoGraphic)) {\r\n processedTileIds.push(imageryTile.contentId);\r\n try {\r\n await func(treeRef, imageryTile.quadId, cartoGraphic, imageryTree);\r\n } catch {\r\n // continue iterating even though we got a failure.\r\n }\r\n\r\n }\r\n\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n public override async getToolTip(hit: HitDetail): Promise<HTMLElement | string | undefined> {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (tree.modelId !== hit.modelId)\r\n return undefined;\r\n\r\n let carto: Cartographic | undefined;\r\n\r\n const strings: string[] = [];\r\n\r\n const getTooltipFunc = async (imageryTreeRef: ImageryMapLayerTreeReference, quadId: QuadId, cartoGraphic: Cartographic, imageryTree: ImageryMapTileTree) => {\r\n strings.push(`Imagery Layer: ${imageryTreeRef.layerSettings.name}`);\r\n carto = cartoGraphic;\r\n await imageryTree.imageryLoader.getToolTip(strings, quadId, cartoGraphic, imageryTree);\r\n };\r\n try {\r\n await this.forEachImageryTileHit(hit, getTooltipFunc);\r\n } catch {\r\n // No results added\r\n }\r\n\r\n if (carto) {\r\n strings.push(`Latitude: ${carto.latitudeDegrees.toFixed(4)}`);\r\n strings.push(`Longitude: ${carto.longitudeDegrees.toFixed(4)}`);\r\n if (this.settings.applyTerrain && tree.terrainExaggeration !== 0.0) {\r\n const geodeticHeight = (carto.height - tree.bimElevationBias) / tree.terrainExaggeration;\r\n strings.push(`Height (Meters) Geodetic: ${geodeticHeight.toFixed(1)} Sea Level: ${(geodeticHeight - tree.geodeticOffset).toFixed(1)}`);\r\n }\r\n }\r\n\r\n const div = document.createElement(\"div\");\r\n div.innerHTML = strings.join(\"<br>\");\r\n return div;\r\n }\r\n\r\n public override async getMapFeatureInfo(hit: HitDetail, options?: MapFeatureInfoOptions): Promise<MapLayerFeatureInfo[] | undefined> {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (undefined === tree || hit.iModel !== tree.iModel || tree.modelId !== hit.modelId || !hit.viewport || !hit.viewport.view.is3d)\r\n return undefined;\r\n\r\n const info: MapLayerFeatureInfo[] = [];\r\n const imageryTreeRef = this.imageryTreeFromTreeModelIds(hit.modelId, hit.sourceId);\r\n if (imageryTreeRef !== undefined) {\r\n\r\n const getFeatureInfoFunc = async (_imageryTreeRef: ImageryMapLayerTreeReference, quadId: QuadId, cartoGraphic: Cartographic, imageryTree: ImageryMapTileTree) => {\r\n try {\r\n await imageryTree.imageryLoader.getMapFeatureInfo(info, quadId, cartoGraphic, imageryTree, hit, options);\r\n } catch {\r\n }\r\n };\r\n try {\r\n await this.forEachImageryTileHit(hit, getFeatureInfoFunc);\r\n } catch {\r\n // No results added\r\n }\r\n\r\n }\r\n\r\n return info;\r\n }\r\n\r\n /** Add logo cards to logo div. */\r\n public override addLogoCards(cards: HTMLTableElement, vp: ScreenViewport): void {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (tree) {\r\n tree.mapLoader.terrainProvider.addLogoCards(cards, vp);\r\n for (const imageryTreeRef of this._layerTrees) {\r\n if (imageryTreeRef?.layerSettings.visible) {\r\n const imageryTree = imageryTreeRef.treeOwner.tileTree;\r\n if (imageryTree instanceof ImageryMapTileTree)\r\n imageryTree.addLogoCards(cards, vp);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** Returns whether a GCS converter is available.\r\n * @internal\r\n */\r\nexport async function getGcsConverterAvailable(iModel: IModelConnection) {\r\n if (iModel.noGcsDefined)\r\n return false;\r\n\r\n // Determine if we have a usable GCS.\r\n const converter = iModel.geoServices.getConverter(\"WGS84\");\r\n if (undefined === converter)\r\n return false;\r\n const requestProps: XYZProps[] = [{ x: 0, y: 0, z: 0 }];\r\n let haveConverter;\r\n try {\r\n const responseProps = await converter.getIModelCoordinatesFromGeoCoordinates(requestProps);\r\n haveConverter = responseProps.iModelCoords.length === 1 && responseProps.iModelCoords[0].s !== GeoCoordStatus.NoGCSDefined;\r\n } catch {\r\n haveConverter = false;\r\n }\r\n return haveConverter;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"MapTileTree.js","sourceRoot":"","sources":["../../../../src/tile/map/MapTileTree.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAAoL;AACpL,oDAE4B;AAC5B,wDAE8B;AAC9B,+EAA4E;AAI5E,+CAA4C;AAC5C,mEAAgE;AAChE,oEAAiE;AAIjE,0CAMqB;AAErB,MAAM,YAAY,GAAG,uBAAO,CAAC,MAAM,EAAE,CAAC;AACtC,MAAM,cAAc,GAAG,CAAC,uBAAO,CAAC,UAAU,EAAE,EAAE,uBAAO,CAAC,UAAU,EAAE,EAAE,uBAAO,CAAC,UAAU,EAAE,EAAE,uBAAO,CAAC,UAAU,EAAE,EAAE,uBAAO,CAAC,UAAU,EAAE,EAAE,uBAAO,CAAC,UAAU,EAAE,EAAE,uBAAO,CAAC,UAAU,EAAE,EAAE,uBAAO,CAAC,UAAU,EAAE,CAAC,CAAC;AACxM,MAAM,aAAa,GAAG,uBAAO,CAAC,UAAU,EAAE,CAAC;AAC3C,MAAM,cAAc,GAAG,wBAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAWhD;WACW;AACX,IAAY,+BAYX;AAZD,WAAY,+BAA+B;IACzC,8DAA8D;IAC9D,2FAAW,CAAA;IAEX,kFAAkF;IAClF,2FAAO,CAAA;IAEP,kFAAkF;IAClF,yFAAM,CAAA;IAEN,6HAA6H;IAC7H,2FAAO,CAAA;AACT,CAAC,EAZW,+BAA+B,GAA/B,uCAA+B,KAA/B,uCAA+B,QAY1C;AAoBD;;;;;;;;GAQG;AAEH,MAAa,WAAY,SAAQ,0BAAe;IA6C9C,gBAAgB;IAChB,YAAY,MAA6B,EAAE,QAAmB,EAAE,gBAAwB,EAAE,cAAsB,EAC9G,kBAAmC,EAAE,EAAa,EAAE,YAAqB;QACzE,KAAK,CAAC,MAAM,CAAC,CAAC;QAXhB,gBAAgB;QACT,sBAAiB,GAA0B,EAAE,CAAC;QAC7C,mBAAc,GAAG,IAAI,GAAG,EAAgC,CAAC;QACzD,sBAAiB,GAAG,IAAI,GAAG,EAAoC,CAAC;QAChE,oBAAe,GAAG,IAAI,GAAG,EAAsB,CAAC;QACxD,gBAAgB;QACT,qBAAgB,GAAG,IAAI,GAAG,EAAkC,CAAC;QAMlE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,qBAAqB,GAAG,IAAI,kCAAuB,EAAE,CAAC;QAC3D,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC,2BAA2B,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAC7I,MAAM,MAAM,GAAG,IAAI,iBAAM,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC;QACrD,IAAI,CAAC,cAAc,GAAG,yBAAS,CAAC,uBAAuB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,wBAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,wBAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,wBAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACvM,MAAM,iBAAiB,GAAG,YAAY,CAAC,CAAC,CAAC,qDAAyB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,uBAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvH,MAAM,eAAe,GAAG,4BAAiB,CAAC,aAAa,EAAE,CAAC;QAE1D,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;QAC9B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,cAAc,CAAC;QACxC,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC,mBAAmB,CAAC;QAClD,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;QAC9B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,eAAe,CAAC;QAC1C,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,cAAc,CAAC;QACxC,IAAI,YAAY,EAAE;YAChB,IAAI,CAAC,iBAAiB,GAAG,yBAAS,CAAC,uBAAuB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,wBAAQ,CAAC,gBAAgB,CAAC,OAAO,GAAG,iBAAiB,CAAC,GAAG,EAAE,wBAAQ,CAAC,gBAAgB,CAAC,OAAO,GAAG,iBAAiB,CAAC,GAAG,EAAE,wBAAQ,CAAC,gBAAgB,CAAC,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;YAClR,IAAI,CAAC,iBAAiB,GAAG,yBAAS,CAAC,uBAAuB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,wBAAQ,CAAC,gBAAgB,CAAC,OAAO,GAAG,iBAAiB,CAAC,IAAI,EAAE,wBAAQ,CAAC,gBAAgB,CAAC,OAAO,GAAG,iBAAiB,CAAC,IAAI,EAAE,wBAAQ,CAAC,gBAAgB,CAAC,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACrR,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,eAAe,CAAC;SAC3C;aAAM;YACL,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC;YAC7C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC;SAC9C;QAED,MAAM,SAAS,GAAG,8BAAc,CAAC,aAAa,CAC5C,IAAI,CAAC,iBAAiB,EAAE,0BAAU,CAAC,uBAAuB,CAAC,CAAC,EAAE,qBAAK,CAAC,UAAU,CAAC,EAC/E,0BAAU,CAAC,uBAAuB,CAAC,CAAC,qBAAK,CAAC,cAAc,EAAE,qBAAK,CAAC,SAAS,CAAC,CAC3E,CAAC;QAEF,IAAI,KAAK,CAAC;QACV,IAAI,IAAI,CAAC,SAAS,KAAK,uBAAS,CAAC,SAAS,EAAE;YAC1C,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;SAC3B;aAAM;YACL,MAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;YACtD,IAAI,CAAC,qBAAqB,CAAC,2BAA2B,CAAC,OAAO,CAAC,CAAC;YAChE,KAAK,GAAG,uBAAO,CAAC,WAAW,CAAC,kBAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,wBAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,iBAAiB,CAAC,CAAC,CAAC;SACnI;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACjK,CAAC;IAED,gBAAgB;IAChB,IAAoB,2BAA2B;QAC7C,4GAA4G;QAC5G,8EAA8E;QAC9E,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/E,CAAC;IAED;;OAEG;IACI,mBAAmB,CAAC,aAAqB;QAC9C,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACI,qBAAqB;QAC1B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoC,CAAC;QAC1D,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACpD,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;SAClC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gBAAgB;IACT,cAAc,CAAC,MAAc;QAClC,OAAQ,IAAI,CAAC,SAAqB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACI,eAAe,CAAC,IAAwB,EAAE,QAA0B,EAAE,KAAa,EAAE,gBAAyB;QACnH,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;YAC3C,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,+BAAoB,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,gBAAgB;IACT,aAAa,CAAC,YAA4C,EAAE,OAAqB;QACtF,MAAM,UAAU,GAAG,OAAO,CAAC,mBAAmB,CAAC,YAAY,IAAI,CAAC,OAAO,IAAI,YAAY,CAAC,UAAU,EAAE,EAAE,YAAY,CAAC,CAAC;QACpH,IAAI,UAAU;YACZ,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACnE,CAAC;IAED,gBAAgB;IACG,yBAAyB,CAAC,IAAkB,EAAE,aAA4B;QAC3F,KAAK,CAAC,yBAAyB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAErD,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,eAAuC,EAAE,EAAE;YACxE,IAAI,CAAC,CAAC,IAAI,YAAY,oCAAyB,CAAC;gBAC9C,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAE7J,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB;IACT,+BAA+B;QACpC,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;IAED,gBAAgB;IAChB,IAAoB,aAAa;QAC/B,OAAO,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,eAAe,CAAC;IACrD,CAAC;IAED,gBAAgB;IAChB,IAAoB,QAAQ;QAC1B,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,gBAAgB,EAAE,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAErH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,gBAAgB;IACT,iBAAiB,CAAC,MAAkB,EAAE,MAAc,EAAE,OAAkB,EAAE,MAAgB,EAAE,SAA4B,EAAE,WAAmB,EAAE,WAAqB;QACzK,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC9D,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,eAAe;YACzC,OAAO,SAAS,CAAC;QAEnB,MAAM,KAAK,GAAG,IAAI,0BAAe,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAChE,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,cAAc;YAChB,OAAO,IAAI,kBAAO,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;QAEzF,IAAA,qBAAM,EAAC,MAAM,CAAC,MAAM,YAAY,kBAAO,CAAC,CAAC;QACzC,IAAI,YAAY,GAAwB,MAAM,CAAC,MAAM,CAAC;QACtD,OAAO,YAAY,EAAE,WAAW;YAC9B,YAAY,GAAG,YAAY,CAAC,MAA6B,CAAC;QAE5D,IAAA,qBAAM,EAAC,SAAS,KAAK,YAAY,CAAC,CAAC;QACnC,OAAO,IAAI,2BAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;IAChH,CAAC;IAED,gBAAgB;IACT,gBAAgB,CAAC,MAAkB,EAAE,MAAc,EAAE,aAAwB,EAAE,SAA4B,EAAE,cAA8B,EAAE,WAAqB;QACvK,OAAO,IAAI,kBAAO,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;IAClH,CAAC;IAED,gBAAgB;IACT,mBAAmB,CAAC,MAAc,EAAE,SAA4B,EAAE,MAAe;QACtF,OAAO,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACvE,CAAC;IAED,gBAAgB;IACT,WAAW;QACf,IAAI,CAAC,SAAqB,CAAC,WAAW,EAAE,CAAC;IAC5C,CAAC;IAUD,gBAAgB;IAChB,IAAW,SAAS,KAAK,OAAO,IAAI,CAAC,MAAuB,CAAC,CAAC,CAAC;IAE/D,gBAAgB;IACA,mBAAmB,CAAC,YAA0B;QAC5D,+EAA+E;QAC/E,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtG,CAAC;IAED,gBAAgB;IACT,qBAAqB,CAAC,IAAU;QACrC,IAAI,IAAI,CAAC,SAAS,KAAK,uBAAS,CAAC,SAAS;YACxC,OAAO,KAAK,CAAC;QAEf,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QAClC,IAAI,UAAU,GAAG,WAAW,CAAC,oBAAoB,EAAM,gEAAgE;YACrH,OAAO,IAAI,CAAC;QAEd,OAAO,KAAK,CAAC,CAAE,qDAAqD;IACtE,CAAC;IAED,gBAAgB;IACA,mBAAmB,CAAC,IAAU;QAC5C,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS;YAClC,OAAO,KAAK,CAAC;QAEf,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QAClC,IAAI,UAAU,GAAG,WAAW,CAAC,oBAAoB,EAAM,iEAAiE;YACtH,OAAO,KAAK,CAAC;QAEf,OAAO,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC;IAED,gBAAgB;IACT,aAAa,CAAC,SAA4B;QAC/C,MAAM,IAAI,GAAG,IAAI,KAAK,EAAS,CAAC;QAChC,IAAI,IAAI,CAAC,SAAS,KAAK,uBAAS,CAAC,SAAS,EAAE;YAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,0BAAY,CAAC,sCAAsC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;YAC/I,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,0BAAY,CAAC,sCAAsC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;YAChJ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,0BAAY,CAAC,sCAAsC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;YAC9I,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,0BAAY,CAAC,sCAAsC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;SAChJ;aAAM;YACL,MAAM,qBAAqB,GAAG,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACzF,IAAI,CAAC,IAAI,CAAC,qBAAK,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,EAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;YAClJ,IAAI,CAAC,IAAI,CAAC,qBAAK,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,EAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;YACnJ,IAAI,CAAC,IAAI,CAAC,qBAAK,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;YACjJ,IAAI,CAAC,IAAI,CAAC,qBAAK,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;SACnJ;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB;IACT,mBAAmB,CAAC,KAAc;QACvC,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,CAAE,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAChF,CAAC;IAEO,kCAAkC,CAAC,IAAa,EAAE,WAAmB,EAAE,QAAgB;QAC7F,MAAM,UAAU,GAAG,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,MAAM,GAAG,GAAG,GAAG,WAAW,EAAE,MAAM,GAAG,GAAG,GAAG,QAAQ,CAAC;QAC1D,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,QAAQ,EAAE,GAAG,EAAE,EAAE;YACxC,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,EAAE,EAAE;gBACpD,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBACzG,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBAEnG,UAAU,CAAC,IAAI,CAAC,uBAAO,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;aAC1D;SACF;QACD,oDAAoD;QACpD,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,YAAY,kCAAuB,CAAC;YAC/D,KAAK,MAAM,SAAS,IAAI,UAAU;gBAChC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3H,OAAO,UAAU,CAAC;IACpB,CAAC;IAEO,6BAA6B,CAAC,UAAqB,EAAE,WAAmB,EAAE,QAAgB;QAChG,MAAM,YAAY,GAAG,IAAI,KAAK,EAAa,CAAC;QAC5C,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,EAAE;YACvC,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,MAAM,EAAE,EAAE;gBACnD,MAAM,MAAM,GAAG,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;gBAChD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;gBAC1C,YAAY,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAC7G;SACF;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,gBAAgB;IACT,0BAA0B,CAAC,UAAqB;QACrD,MAAM,YAAY,GAAG,EAAE,CAAC;QACxB,KAAK,MAAM,SAAS,IAAI,UAAU;YAChC,YAAY,CAAC,IAAI,CAAC;gBAChB,CAAC,EAAE,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,qBAAK,CAAC,gBAAgB;gBACxF,CAAC,EAAE,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,qBAAK,CAAC,gBAAgB;gBACvF,CAAC,EAAE,IAAI,CAAC,gBAAgB;aACzB,CAAC,CAAC;QAEL,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAc,CAAC,4CAA4C,CAAC,YAAY,CAAC,CAAC;QAEzG,IAAI,iBAAiB,CAAC,OAAO;YAC3B,OAAO,SAAS,CAAC;QAEnB,OAAO,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,uBAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAChH,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,qBAAqB,CAAC,IAAa;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,MAAM,GAAG,uBAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAChL,MAAM,MAAM,GAAG,uBAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1K,MAAM,UAAU,GAAG,CAAC,EAAE,cAAc,GAAG,CAAC,IAAI,UAAU,CAAC;QACvD,MAAM,KAAK,GAAG,GAAG,GAAG,cAAc,CAAC;QACnC,MAAM,YAAY,GAAG,EAAE,CAAC;QAExB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,cAAc,EAAE,GAAG,EAAE,EAAE;YAC9C,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,EAAE,EAAE;gBACvD,IAAI,SAAS,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;gBACpD,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,YAAY,kCAAuB,CAAC;oBAC/D,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;gBACrH,YAAY,CAAC,IAAI,CAAC;oBAChB,CAAC,EAAE,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,qBAAK,CAAC,gBAAgB;oBACnH,CAAC,EAAE,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,SAAS,CAAC,GAAG,qBAAK,CAAC,gBAAgB;oBACrF,CAAC,EAAE,IAAI,CAAC,gBAAgB;iBACzB,CAAC,CAAC;aACJ;SACF;QAED,MAAM,IAAI,CAAC,aAAc,CAAC,sCAAsC,CAAC,YAAY,CAAC,CAAC;IACjF,CAAC;IAID;;;OAGG;IACI,qBAAqB,CAAC,IAAa,EAAE,WAAmB,EAAE,QAAgB,EAAE,OAA4C;QAC7H,MAAM,cAAc,GAAG,CAAC,MAAiB,EAAE,cAAmD,SAAS,EAAE,EAAE;YACzG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACtC,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC5B,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;gBACrE,IAAI,IAAI,CAAC,SAAS,KAAK,uBAAS,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE;oBAC9F,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,SAAS;wBAC3D,WAAW,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;;wBAEjC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;iBAClC;qBAAM;oBACL,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;oBACvG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,EAAE,0BAAY,CAAC,sCAAsC,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;oBAC5K,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;oBAC7E,IAAI,iBAAiB,GAAG,IAAI,CAAC,2BAA2B;wBACtD,aAAa,CAAC,WAAW,CAAC,iBAAiB,GAAG,IAAI,CAAC,2BAA2B,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;iBACzG;aACF;YACD,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC7E,CAAC,CAAC;QAEF,IAAI,iBAAsD,CAAC;QAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,kCAAkC,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;QACxF,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE;YAClC,iBAAiB,GAAG,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC;YAChE,IAAI,iBAAiB,EAAE;gBACrB,oEAAoE;gBACpE,cAAc,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;aAC/C;iBAAM;gBACL,6JAA6J;gBAC7J,uDAAuD;gBACvD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;oBACzC,MAAM,WAAW,GAAG,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC;oBAChE,IAAA,qBAAM,EAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAK,mDAAmD;oBAC1F,cAAc,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;gBAC1C,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAa,EAAE,EAAE;oBACzB,cAAc,CAAC,UAAU,CAAC,CAAC;gBAC7B,CAAC,CAAC,CAAC;aACJ;SACF;aAAM;YACL,cAAc,CAAC,UAAU,CAAC,CAAC;SAC5B;IACH,CAAC;IAED;;;OAGG;IACa,oBAAoB,CAAC,IAAkB,EAAE,QAAuB;QAE9E,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;QAEtD,MAAM,sBAAsB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE5D,MAAM,OAAO,GAAG,IAAI,KAAK,EAAgC,CAAC;QAE1D,IAAI,CAAC,sBAAsB;YACzB,OAAO;QAET,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,sBAAsB,EAAE;YAC7C,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YACxD,IAAI,cAAc,EAAE;gBAClB,cAAc,CAAC,KAAK,EAAE,CAAC;aACxB;SACF;QAED,KAAK,MAAM,YAAY,IAAI,QAAQ,EAAE;YACnC,IAAI,YAAY,YAAY,kBAAO,EAAE;gBACnC,IAAI,oBAAoB,GAAG,YAAY,CAAC,YAAY,CAAC;gBACrD,IAAI,YAAY,CAAC,kBAAkB,EAAE;oBACnC,oBAAoB,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC,GAAG,oBAAoB,EAAE,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,kBAAkB,CAAC;iBAC/I;gBAED,MAAM,SAAS,GAAG,YAAY,CAAC,8BAA8B,CAAC;gBAC9D,IAAI,SAAS,EAAE;oBACb,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;wBAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBACzD,SAAS,EAAE,uBAAuB,CAAC,KAAK,CAAC,CAAC;qBAC3C;iBACF;gBAED,IAAI,oBAAoB,EAAE;oBACxB,KAAK,MAAM,mBAAmB,IAAI,oBAAoB,EAAE;wBACtD,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBACxE,IAAI,SAAS,EAAE;4BACb,IAAI,mBAAmB,CAAC,eAAe,EAAE;gCACvC,SAAS,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;6BAC1C;iCAAM;gCACL,SAAS,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;6BACzC;yBACF;qBAEF;iBACF;aACF;SACF;QAED,KAAK,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,sBAAsB,EAAE;YACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAClD,IAAI,QAAQ,EAAE;gBAEZ,MAAM,cAAc,GAAG,SAAS,CAAC,uBAAuB,EAAE,CAAC;gBAC3D,MAAM,UAAU,GAAG,QAAQ,CAAC,uBAAuB,EAAE,CAAC;gBACtD,IAAI,cAAc,KAAK,UAAU,EAAE;oBAEjC,IAAI,YAAY,IAAI,YAAY,CAAC,eAAe,EAAE;wBAChD,sCAAsC;wBACtC,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,0BAA0B,+BAA+B,CAAC,cAAc,CAAC,iBAAiB,+BAA+B,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;qBACjL;oBAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;oBAC1F,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE;wBACpC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;qBAC9E;iBAEF;aACF;SACF;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,qCAAqC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;SACjF;IAEH,CAAC;IAED,gBAAgB;IACT,wBAAwB,CAAC,MAAc;QAC5C,MAAM,OAAO,GAAc,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,uBAAO,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3K,OAAO,CAAC,IAAI,CAAC,uBAAO,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/K,OAAO,CAAC,IAAI,CAAC,uBAAO,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/K,OAAO,CAAC,IAAI,CAAC,uBAAO,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACnL,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,gBAAgB;IACT,gBAAgB,CAAC,MAAc;QACpC,OAAO,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5F,CAAC;IAED,gBAAgB;IACT,aAAa,CAAC,aAAyB;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACtD,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC1C,CAAC;IAED,gBAAgB;IACT,oBAAoB,CAAC,aAAyB;QACnD,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC7D,IAAA,qBAAM,EAAC,SAAS,KAAK,aAAa,CAAC,CAAC;QACpC,OAAO,SAAS,KAAK,aAAa,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC;IACvG,CAAC;;AA3SD;;GAEG;AACW,gCAAoB,GAAG,CAAC,AAAJ,CAAK;AACvC,gBAAgB;AACF,gCAAoB,GAAG,CAAC,AAAJ,CAAK;AACvC,gBAAgB;AACF,+BAAmB,GAAG,CAAC,AAAJ,CAAK;AAuIvB,yBAAa,GAAG,0BAAY,CAAC,UAAU,EAAE,AAA5B,CAA6B;AA/V9C,kCAAW;AAohBxB,gBAAgB;AAChB,MAAM,gBAAgB;IASpB,IAAW,QAAQ,KAAuB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAExE,YAAmB,OAAmB,EAAE,MAAqB,EAAE,MAAwB,EAAS,qBAA8B;QAA9B,0BAAqB,GAArB,qBAAqB,CAAS;QARvH,aAAQ,GAAG,yBAAS,CAAC,cAAc,EAAE,CAAC;QACtC,YAAO,GAAG,IAAI,CAAC;QACf,SAAI,GAAG,IAAI,CAAC;QACZ,aAAQ,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,uBAAO,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;QAM/E,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,SAAS,uBAAuB,CAAC,YAAqB,EAAE,YAA+B;IACrF,OAAO,IAAA,yCAA8B,EAAC,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;AAC/G,CAAC;AAED,MAAM,eAAe;IAArB;QACkB,oBAAe,GAAG,IAAI,CAAC;IAqHzC,CAAC;IAnHQ,kBAAkB,CAAC,GAAc,EAAE,GAAc;QACtD,IAAI,GAAG,GAAG,IAAA,6BAAc,EAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK,GAAG,EAAE;YACb,GAAG,GAAG,IAAA,wCAAyB,EAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;YACpE,IAAI,CAAC,KAAK,GAAG,EAAE;gBACb,GAAG,GAAG,IAAA,8BAAe,EAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;gBACpD,IAAI,CAAC,KAAK,GAAG,EAAE;oBACb,GAAG,GAAG,IAAA,8BAAe,EAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;oBACtD,IAAI,CAAC,KAAK,GAAG,EAAE;wBACb,GAAG,GAAG,IAAA,8BAAe,EAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;wBACxD,IAAI,CAAC,KAAK,GAAG,EAAE;4BACb,GAAG,GAAG,IAAA,6BAAc,EAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;4BACnD,IAAI,CAAC,KAAK,GAAG,EAAE;gCACb,GAAG,GAAG,IAAA,6BAAc,EAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gCACvG,IAAI,CAAC,KAAK,GAAG,EAAE;oCACb,GAAG,GAAG,IAAA,8BAAe,EAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;oCAChE,IAAI,CAAC,KAAK,GAAG,EAAE;wCACb,GAAG,GAAG,IAAA,8BAAe,EAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;wCAC9D,IAAI,CAAC,KAAK,GAAG,EAAE;4CACb,GAAG,GAAG,IAAA,8BAAe,EAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;4CAC1D,IAAI,CAAC,KAAK,GAAG,EAAE;gDACb,IAAI,GAAG,CAAC,YAAY,EAAE;oDACpB,yBAAyB;oDACzB,GAAG,GAAG,IAAA,6BAAc,EAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAC;oDACvE,IAAI,CAAC,KAAK,GAAG,EAAE;wDACb,GAAG,GAAG,IAAA,wCAAyB,EAAC,GAAG,CAAC,iBAAiB,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;wDAC9E,IAAI,CAAC,KAAK,GAAG,EAAE;4DACb,GAAG,GAAG,IAAA,6BAAc,EAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAC;4DACvE,IAAI,CAAC,KAAK,GAAG,EAAE;gEACb,GAAG,GAAG,IAAA,6BAAc,EAAC,GAAG,CAAC,uBAAuB,EAAE,GAAG,CAAC,uBAAuB,CAAC,CAAC;gEAC/E,IAAI,CAAC,KAAK,GAAG,EAAE;oEACb,GAAG,GAAG,IAAA,6BAAc,EAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAC;oEACvE,IAAI,CAAC,KAAK,GAAG;wEACX,GAAG,GAAG,IAAA,yCAA0B,EAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;iEAC9E;6DACF;yDACF;qDACF;iDACF;qDAAM;oDACL,+BAA+B;oDAC/B,GAAG,GAAG,IAAA,6BAAc,EAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;oDAC3D,IAAI,CAAC,KAAK,GAAG;wDACX,GAAG,GAAG,IAAA,8BAAe,EAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;iDACjE;6CACF;yCACF;qCACF;iCACF;6BACF;yBACF;qBACF;iBACF;aACF;SACF;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,YAAoB,EAAE,gBAAyC,EAAE,YAAoB,EAAE,MAAwB,EAAE,iBAAwC;QACvL,MAAM,aAAa,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;QACnD,QAAQ,gBAAgB,EAAE;YACxB,KAAK,qCAAuB,CAAC,MAAM;gBACjC,OAAO,YAAY,GAAG,YAAY,GAAG,CAAC,MAAM,iBAAiB,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;YAE7G,KAAK,qCAAuB,CAAC,QAAQ;gBACnC,OAAO,YAAY,CAAC;YAEtB,KAAK,qCAAuB,CAAC,KAAK;gBAChC,OAAO,YAAY,GAAG,MAAM,iBAAiB,CAAC,2BAA2B,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;SACpG;IACH,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,EAAa,EAAE,MAAwB;QACjE,IAAI,gBAAgB,GAAG,CAAC,EAAE,eAAe,EAAE,cAAc,GAAG,CAAC,CAAC;QAC9D,IAAI,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAC9C,MAAM,qBAAqB,GAAG,MAAM,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAErE,MAAM,WAAW,GAA+B;YAC9C,UAAU,EAAE,EAAE,CAAC,UAAU;YACzB,YAAY,EAAE,EAAE,CAAC,mBAAmB;YACpC,WAAW,EAAE,EAAE,CAAC,WAAW;YAC3B,UAAU,EAAE,EAAE,CAAC,iBAAiB;SACjC,CAAC;QAEF,IAAI,EAAE,CAAC,YAAY,EAAE;YACnB,MAAM,qDAAyB,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;YACtD,MAAM,iBAAiB,GAAG,IAAI,gCAAqB,EAAE,CAAC;YAEtD,gBAAgB,GAAG,CAAE,MAAM,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,mBAAmB,EAAE,EAAE,CAAC,uBAAuB,EAAE,EAAE,CAAC,mBAAmB,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;YACzJ,cAAc,GAAG,MAAM,iBAAiB,CAAC,2BAA2B,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC3G,MAAM,QAAQ,GAAG,qBAAS,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC;YAChF,IAAI,QAAQ;gBACV,eAAe,GAAG,MAAM,QAAQ,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC;YAE1E,IAAI,CAAC,eAAe,EAAE;gBACpB,YAAY,GAAG,KAAK,CAAC;gBACrB,cAAc,GAAG,CAAC,CAAC;aACpB;SACF;QAED,IAAI,CAAC,eAAe,EAAE;YACpB,eAAe,GAAG,IAAI,mCAAwB,CAAC,WAAW,CAAC,CAAC;YAC5D,gBAAgB,GAAG,EAAE,CAAC,aAAa,CAAC;SACrC;QAED,MAAM,MAAM,GAAG,IAAI,wBAAa,CAAC,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,eAAe,CAAC,CAAC;QACrF,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAEzD,IAAI,EAAE,CAAC,YAAY;YACjB,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAiB,CAAC,aAAa,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;QAE7E,MAAM,SAAS,GAAG,IAAI,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,CAAC,CAAC;QACvF,OAAO,IAAI,WAAW,CAAC,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,CAAC,YAAY,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;IAChI,CAAC;CACF;AAED,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;AAK9C;;GAEG;AACH,MAAa,oBAAqB,SAAQ,4BAAiB;IAWzD,YACE,QAA+B,EACvB,kBAAiD,EACjD,cAAkC,EAC1C,MAAwB,EACxB,UAAkB,EACX,SAAkB,EACjB,QAAiB,EACjB,uBAAqD;QAC7D,KAAK,EAAE,CAAC;QAPA,uBAAkB,GAAlB,kBAAkB,CAA+B;QACjD,mBAAc,GAAd,cAAc,CAAoB;QAGnC,cAAS,GAAT,SAAS,CAAS;QACjB,aAAQ,GAAR,QAAQ,CAAS;QACjB,4BAAuB,GAAvB,uBAAuB,CAA8B;QAfvD,8BAAyB,GAAG,KAAK,CAAC;QAEzB,gBAAW,GAAG,IAAI,KAAK,EAAyC,CAAC;QAC1E,qBAAgB,GAAG,KAAK,CAAC;QAc/B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,IAAI,CAAC;QACT,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE;YACvD,IAAI,IAAI,CAAC,kBAAkB,YAAY,8BAAgB,EAAE;gBACvD,IAAI,GAAG,IAAA,sCAA2B,EAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;gBACvE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,GAAG,CAAC,CAAC;aAClE;iBAAM;gBACL,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBAC1C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC;aAChE;SACF;QAED,IAAI,IAAI,CAAC,yBAAyB,GAAG,CAAC,SAAS,KAAK,IAAI,CAAC;YACvD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE;YACjD,IAAI,SAAS,KAAK,CAAC,IAAI,GAAG,IAAA,sCAA2B,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC3F,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhC,IAAI,IAAI,CAAC,SAAS,CAAC,cAAc,IAAI,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO;YACxE,IAAI,CAAC,eAAe,GAAG,yCAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAEnF,IAAI,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE,eAAe;YACjF,IAAI,CAAC,mBAAmB,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACnF,CAAC;IAEM,uBAAuB,CAAC,IAAsC;QACnE,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE;YACxC,IAAA,qBAAM,EAAC,SAAS,YAAY,oCAAyB,CAAC,CAAC;YACvD,IAAI,CAAC,SAAS,CAAC,CAAC;SACjB;IACH,CAAC;IAED,IAAoB,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IAC/C,IAAW,SAAS,KAA2B,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACxE,IAAoB,sBAAsB,KAAa,OAAO,oCAAsB,CAAC,aAAa,CAAC,CAAC,CAAC;IAElF,4BAA4B;QAC7C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ;YAC/C,OAAO,SAAS,CAAC,CAAK,uDAAuD;QAE/E,MAAM,GAAG,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE;YACrH,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,IAAA,qBAAM,EAAC,SAAS,KAAK,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAC9C,OAAO,GAAgC,CAAC;IAC1C,CAAC;IAED,wEAAwE;IACxD,aAAa,CAAC,MAAe,IAAU,CAAC;IACxD,IAAW,QAAQ,KAA4B,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACvE,IAAW,QAAQ,CAAC,QAA+B;QACjD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,yCAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnH,CAAC;IACM,oBAAoB,CAAC,iBAAoC;QAC9D,IAAA,qBAAM,EAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC;QACT,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAC;QAE5C,IAAI,iBAAiB,YAAY,8BAAgB,EAAE;YACjD,IAAI,GAAG,IAAA,sCAA2B,EAAC,iBAAiB,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACvE,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAC5B,IAAI,CAAC,gBAAgB,GAAG,iBAAiB,CAAC,YAAY,GAAG,CAAC,CAAC;SAC5D;aAAM;YACL,IAAI,CAAC,UAAU,GAAG,iBAAiB,CAAC;YACpC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;SAC/D;QAED,IAAI,IAAI,EAAE;YACR,IAAI,IAAI,CAAC,yBAAyB;gBAChC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;;gBAE3B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;SACvC;aAAM;YACL,IAAI,IAAI,CAAC,yBAAyB;gBAChC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;SAC5B;QACD,IAAI,CAAC,yBAAyB,GAAG,IAAI,KAAK,SAAS,CAAC;QACpD,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IACD,IAAW,aAAa;QACtB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAEM,gBAAgB,CAAC,aAAiC;QACvD,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,MAAM,cAAc,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9D,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAI,wCAAwC;QAC/I,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC7C,MAAM,SAAS,GAAG,CAAC,GAAG,cAAc,CAAC;YACrC,IAAI,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;gBACtH,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,IAAA,sCAA2B,EAAC,aAAa,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAE,CAAC;SACzG;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAEM,WAAW;QAChB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAuB,CAAC;QACpD,IAAI,SAAS,KAAK,IAAI;YACpB,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,IAAoB,YAAY;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAuB,kBAAkB;QACvC,6CAA6C;QAC7C,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW;YACtC,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,iBAAiB;gBAC3C,OAAO,KAAK,CAAC;QAEjB,OAAO,KAAK,CAAC,kBAAkB,CAAC;IAClC,CAAC;IACD,IAAW,cAAc;QACvB,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACzF,CAAC;IAED,IAAW,SAAS;QAClB,IAAI,UAAU,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAC9H,IAAI,UAAU,EAAE;YACd,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,YAAY,CAAC;YAC9D,UAAU,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,SAAS,IAAI,CAAC,CAAC,CAAC;SAC1D;QAED,MAAM,EAAE,GAAc;YACpB,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,QAAQ;YAC1D,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY;YAC/D,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,UAAU;YAC3D,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY;YAC/D,uBAAuB,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,gBAAgB;YACvE,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY;YAC/D,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU;YACvC,UAAU;YACV,+JAA+J;YAC/J,WAAW,EAAE,KAAK;YAClB,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,uBAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS;YACpE,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,eAAe,EAAE,IAAI,CAAC,gBAAgB;YACtC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC;YACtD,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,kBAAkB;YAC/D,eAAe,EAAE,KAAK;SACvB,CAAC;QAEF,IAAI,SAAS,KAAK,IAAI,CAAC,uBAAuB,EAAE;YAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC3C,IAAI,SAAS,KAAK,GAAG,EAAE;gBACrB,EAAE,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,UAAU,CAAC;gBAChD,EAAE,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,WAAW,CAAC;gBACnD,EAAE,CAAC,eAAe,GAAG,GAAG,CAAC,eAAe,KAAK,IAAI,CAAC;aACnD;SACF;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;IAClE,CAAC;IACM,sBAAsB,CAAC,KAAa;QACzC,MAAM,cAAc,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAG,KAAK,GAAG,cAAc,CAAC;QACzC,OAAO,KAAK,GAAG,CAAC,IAAI,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACrG,CAAC;IAED;;KAEC;IACM,+BAA+B,CAAC,KAAa;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAuB,CAAC;QACpD,IAAI,SAAS,KAAK,IAAI,EAAE;YACtB,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,WAAW,EAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;YACnD,IAAI,MAAM,KAAK,SAAS,EAAE;gBACxB,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;gBACnD,IAAI,SAAS,KAAK,SAAS;oBACzB,OAAO,SAAS,CAAC,uBAAuB,EAAE,CAAC;aAC9C;SACF;QACD,OAAO,+BAA+B,CAAC,OAAO,CAAC;IACjD,CAAC;IAEM,gBAAgB,CAAC,OAAqB;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAiB,CAAC;QAClD,IAAI,SAAS,KAAK,IAAI;YACpB,OAAO,KAAK,CAAC,CAAK,kBAAkB;QAEtC,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM;YAC/B,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;QAEzB,IAAI,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5C,6DAA6D;QAC7D,OAAO,SAAS,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE;YAClC,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YACjD,IAAI,YAAY,EAAE,QAAQ;gBACxB,MAAM,CAAI,oFAAoF;SACjG;QAED,OAAO,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE;YACvD,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YACjD,4CAA4C;YAC5C,qGAAqG;YACrG,IAAI,YAAY,IAAI,6BAAkB,CAAC,QAAQ,KAAK,YAAY,CAAC,SAAS,CAAC,UAAU;mBAChF,CAAC,YAAY,CAAC,aAAa,CAAC,qBAAqB,EAAE;gBACtD,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;gBAChD,IAAI,SAAS,KAAK,SAAS;oBACzB,OAAO,KAAK,CAAC,CAAC,kBAAkB;gBAElC,MAAM,gBAAgB,GAAG,IAAI,CAAC,yBAAyB,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC;gBAC7E,IAAI,SAAS,YAAY,6BAAkB,EAAE;oBAC3C,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,YAAY,CAAC,aAAa,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;iBAC1F;qBAAM,IAAI,YAAY,YAAY,yCAA8B;oBAC/D,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;aAC7C;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+IAA+I;IAC/H,UAAU,CAAC,OAAqB;QAC9C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,aAAa;YAClC,OAAO;QAET,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAiB,CAAC;QAClD,IAAI,SAAS,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;YACvD,OAAO,CAAK,kBAAkB;QAEhC,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO;YAC/D,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAE7E,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QAChE,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;QACzF,IAAI,CAAC,mBAAmB,GAAG,IAAI,mCAAgB,CAAC,SAAS,EAAE,CAAC;QAC5D,IAAI,YAAY,IAAI,YAAY,EAAE;YAChC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;gBAChC,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,UAAU,EAAE,+BAAiB,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;aACvE,CAAC,CAAC;SACJ;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,SAAS,KAAK,IAAI;YACpB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAElB,IAAI,CAAC,+BAA+B,EAAE,CAAC;IACzC,CAAC;IAEe,cAAc,CAAC,OAAqB;QAClD,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,SAAS,KAAK,IAAI;YACpB,OAAO,SAAS,CAAC;QAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAiB,CAAC;QAClD,OAAO,IAAI,8BAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;IACnH,CAAC;IAEkB,oBAAoB,CAAC,KAAe;QACrD,OAAO,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACzF,CAAC;IAEkB,qBAAqB,CAAC,KAAe;QACtD,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAEe,iBAAiB,CAAC,KAA2B;QAC3D,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC/B,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,WAAW;YACxC,IAAI,WAAW;gBACb,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAEhC,IAAI,IAAI,CAAC,eAAe;YACtB,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC;IAEM,2BAA2B,CAAC,cAA0B,EAAE,gBAA4B;QACzF,MAAM,YAAY,GAAmC,EAAE,CAAC;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAuB,CAAC;QACpD,IAAI,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,cAAc;YACvD,OAAO,YAAY,CAAC;QAEtB,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,WAAW;YACxC,IAAI,WAAW,IAAI,WAAW,CAAC,SAAS,CAAC,QAAQ,IAAI,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,KAAK,gBAAgB;gBAC9G,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEnC,OAAO,YAAY,CAAC;IACtB,CAAC;IAEM,qBAAqB,CAAC,cAA0B,EAAE,gBAA4B;QACnF,MAAM,WAAW,GAAG,IAAI,CAAC,2BAA2B,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;QACvF,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC9B,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,yBAAyB,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC;YAC9E,OAAO;gBACL,WAAW;gBACX,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,GAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAC;gBAC1I,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe;aAAC,CAAC;QAClE,CAAC,CAAC,CAAC;IACL,CAAC;IAED,8GAA8G;IACtG,KAAK,CAAC,qBAAqB,CAAC,GAAc,EAAE,IAAkJ;QACpM,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAuB,CAAC;QACpD,IAAI,SAAS,KAAK,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI;YAC9H,OAAO,SAAS,CAAC;QAEnB,MAAM,qBAAqB,GAAG,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,wBAAwB,EAAE,CAAC;QACnF,IAAI,SAAS,KAAK,qBAAqB;YACrC,OAAO,SAAS,CAAC;QAEnB,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACxC,IAAI,YAAsC,CAAC;QAC3C,IAAI;YACF,YAAY,GAAG,CAAC,MAAM,qBAAqB,CAAC,4BAA4B,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAC5F;QAAC,MAAM;SACP;QACD,IAAI,CAAC,YAAY,EAAE;YACjB,OAAO,SAAS,CAAC;SAClB;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE;gBAC5B,MAAM,aAAa,GAAG,iBAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;gBAEvD,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE;oBACpC,MAAM,gBAAgB,GAAa,EAAE,CAAC;oBACtC,IAAI,WAAW,IAAI,WAAW,CAAC,YAAY,EAAE;wBAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,QAA8B,CAAC;wBACrE,IAAI,WAAW,EAAE;4BACf,KAAK,MAAM,WAAW,IAAI,WAAW,CAAC,YAAY,EAAE;gCAClD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC;uCAChD,WAAW,KAAK,WAAW,CAAC,WAAW;uCACvC,WAAW,CAAC,SAAS,CAAC,oBAAoB,CAAC,YAAY,CAAC,EAAE;oCAC7D,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;oCAC7C,IAAI;wCACF,MAAM,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;qCACpE;oCAAC,MAAM;wCACN,mDAAmD;qCACpD;iCAEF;6BAEF;yBACF;qBACF;iBACF;aACF;SACF;IACH,CAAC;IAEe,KAAK,CAAC,UAAU,CAAC,GAAc;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAuB,CAAC;QACpD,IAAI,IAAI,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO;YAC9B,OAAO,SAAS,CAAC;QAEnB,IAAI,KAA+B,CAAC;QAEpC,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,MAAM,cAAc,GAAG,KAAK,EAAE,cAA4C,EAAE,MAAc,EAAE,YAA0B,EAAE,WAA+B,EAAE,EAAE;YACzJ,OAAO,CAAC,IAAI,CAAC,kBAAkB,cAAc,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;YACpE,KAAK,GAAG,YAAY,CAAC;YACrB,MAAM,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;QACzF,CAAC,CAAC;QACF,IAAI;YACF,MAAM,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;SACvD;QAAC,MAAM;YACN,mBAAmB;SACpB;QAED,IAAI,KAAK,EAAE;YACT,OAAO,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAChE,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,IAAI,IAAI,CAAC,mBAAmB,KAAK,GAAG,EAAE;gBAClE,MAAM,cAAc,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC;gBACzF,OAAO,CAAC,IAAI,CAAC,6BAA6B,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aACxI;SACF;QAED,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,OAAO,GAAG,CAAC;IACb,CAAC;IAEe,KAAK,CAAC,iBAAiB,CAAC,GAAc,EAAE,OAA+B;QACrF,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAuB,CAAC;QACpD,IAAI,SAAS,KAAK,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI;YAC9H,OAAO,SAAS,CAAC;QAEnB,MAAM,IAAI,GAA0B,EAAE,CAAC;QACvC,MAAM,cAAc,GAAG,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnF,IAAI,cAAc,KAAK,SAAS,EAAE;YAEhC,MAAM,kBAAkB,GAAG,KAAK,EAAE,eAA6C,EAAE,MAAc,EAAE,YAA0B,EAAE,WAA+B,EAAE,EAAE;gBAC9J,IAAI;oBACF,MAAM,WAAW,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;iBAC1G;gBAAC,MAAM;iBACP;YACH,CAAC,CAAC;YACF,IAAI;gBACF,MAAM,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;aAC3D;YAAC,MAAM;gBACN,mBAAmB;aACpB;SAEF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kCAAkC;IAClB,YAAY,CAAC,KAAuB,EAAE,EAAkB;QACtE,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAuB,CAAC;QACpD,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACvD,KAAK,MAAM,cAAc,IAAI,IAAI,CAAC,WAAW,EAAE;gBAC7C,IAAI,cAAc,EAAE,aAAa,CAAC,OAAO,EAAE;oBACzC,MAAM,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC;oBACtD,IAAI,WAAW,YAAY,6BAAkB;wBAC3C,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;iBACvC;aACF;SACF;IACH,CAAC;CACF;AAncD,oDAmcC;AAED;;GAEG;AACI,KAAK,UAAU,wBAAwB,CAAC,MAAwB;IACrE,IAAI,MAAM,CAAC,YAAY;QACrB,OAAO,KAAK,CAAC;IAEf,qCAAqC;IACrC,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAC3D,IAAI,SAAS,KAAK,SAAS;QACzB,OAAO,KAAK,CAAC;IACf,MAAM,YAAY,GAAe,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACxD,IAAI,aAAa,CAAC;IAClB,IAAI;QACF,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,sCAAsC,CAAC,YAAY,CAAC,CAAC;QAC3F,aAAa,GAAG,aAAa,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,4BAAc,CAAC,YAAY,CAAC;KAC5H;IAAC,MAAM;QACN,aAAa,GAAG,KAAK,CAAC;KACvB;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAjBD,4DAiBC","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, compareBooleansOrUndefined, compareNumbers, compareStrings, compareStringsOrUndefined, CompressedId64Set, Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n BackgroundMapSettings, BaseLayerSettings, Cartographic, ColorDef, FeatureAppearance, GeoCoordStatus, GlobeMode, MapLayerSettings, PlanarClipMaskPriority, TerrainHeightOriginMode,\r\n} from \"@itwin/core-common\";\r\nimport {\r\n Angle, AngleSweep, Constant, Ellipsoid, EllipsoidPatch, Point3d, Range1d, Range3d, Ray3d, Transform, Vector3d, XYZProps,\r\n} from \"@itwin/core-geometry\";\r\nimport { ApproximateTerrainHeights } from \"../../ApproximateTerrainHeights\";\r\nimport { TerrainDisplayOverrides } from \"../../DisplayStyleState\";\r\nimport { HitDetail } from \"../../HitDetail\";\r\nimport { IModelConnection } from \"../../IModelConnection\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport { PlanarClipMaskState } from \"../../PlanarClipMaskState\";\r\nimport { FeatureSymbology } from \"../../render/FeatureSymbology\";\r\nimport { RenderPlanarClassifier } from \"../../render/RenderPlanarClassifier\";\r\nimport { SceneContext } from \"../../ViewContext\";\r\nimport { MapLayerScaleRangeVisibility, ScreenViewport } from \"../../Viewport\";\r\nimport {\r\n BingElevationProvider, createDefaultViewFlagOverrides, createMapLayerTreeReference, DisclosedTileTreeSet, EllipsoidTerrainProvider, GeometryTileTreeReference,\r\n GraphicsCollectorDrawArgs, ImageryMapLayerTreeReference, ImageryMapTileTree, ImageryTileTreeState, MapCartoRectangle, MapFeatureInfoOptions, MapLayerFeatureInfo, MapLayerImageryProvider, MapLayerIndex, MapLayerTileTreeReference, MapTile,\r\n MapTileLoader, MapTilingScheme, ModelMapLayerTileTreeReference, PlanarTilePatch, QuadId,\r\n RealityTile, RealityTileDrawArgs, RealityTileTree, RealityTileTreeParams, TerrainMeshProviderOptions, Tile, TileDrawArgs, TileLoadPriority, TileParams, TileTree,\r\n TileTreeLoadStatus, TileTreeOwner, TileTreeReference, TileTreeSupplier, UpsampledMapTile, WebMercatorTilingScheme,\r\n} from \"../internal\";\r\n\r\nconst scratchPoint = Point3d.create();\r\nconst scratchCorners = [Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero()];\r\nconst scratchCorner = Point3d.createZero();\r\nconst scratchZNormal = Vector3d.create(0, 0, 1);\r\n\r\n/** Utility interface that ties an imagery tile tree to its corresponding map-layer settings object.\r\n * @internal\r\n */\r\ninterface MapLayerTreeSetting {\r\n tree: ImageryMapTileTree;\r\n settings: MapLayerSettings;\r\n baseImageryLayer: boolean;\r\n}\r\n\r\n/** Map tile tree scale range visibility values.\r\n * @beta */\r\nexport enum MapTileTreeScaleRangeVisibility {\r\n /** state is currently unknown (i.e. never been displayed) */\r\n Unknown = 0,\r\n\r\n /** all currently selected tree tiles are visible (i.e within the scale range) */\r\n Visible,\r\n\r\n /** all currently selected tree tiles are hidden (i.e outside the scale range) */\r\n Hidden,\r\n\r\n /** currently selected tree tiles are partially visible (i.e some tiles are within the scale range, and some are outside.) */\r\n Partial\r\n}\r\n\r\n/**\r\n* Provides map layer information for a given tile tree.\r\n* @internal\r\n*/\r\nexport interface MapLayerInfoFromTileTree {\r\n /** Indicate if the map layer represents the base layer */\r\n isBaseLayer: boolean;\r\n\r\n /** Map layer index; undefined if base map */\r\n index?: MapLayerIndex;\r\n\r\n /** Settings for the map layer (or the base layer)*/\r\n settings: MapLayerSettings;\r\n\r\n /** Provider for the map layer (or the base layer) */\r\n provider?: MapLayerImageryProvider;\r\n}\r\n\r\n/** A [quad tree](https://en.wikipedia.org/wiki/Quadtree) consisting of [[MapTile]]s representing the map imagery draped onto the surface of the Earth.\r\n * A `MapTileTree` enables display of a globe or planar map with [map imagery](https://en.wikipedia.org/wiki/Tiled_web_map) obtained from any number of sources, such as\r\n * [Bing](https://learn.microsoft.com/en-us/bingmaps/), [OpenStreetMap](https://wiki.openstreetmap.org/wiki/API), and [GIS servers](https://wiki.openstreetmap.org/wiki/API).\r\n * The specific imagery displayed is determined by a [[Viewport]]'s [MapImagerySettings]($common) and [BackgroundMapSettings]($common).\r\n *\r\n * The map or globe may be smooth, or feature 3d geometry supplied by a [[TerrainProvider]].\r\n * The terrain displayed in a [[Viewport]] is determined by its [TerrainSettings]($common).\r\n * @public\r\n */\r\n\r\nexport class MapTileTree extends RealityTileTree {\r\n /** @internal */\r\n public ecefToDb: Transform;\r\n /** @internal */\r\n public bimElevationBias: number;\r\n /** @internal */\r\n public geodeticOffset: number;\r\n /** @internal */\r\n public sourceTilingScheme: MapTilingScheme;\r\n /** @internal */\r\n private _mercatorFractionToDb: Transform;\r\n /** @internal */\r\n public earthEllipsoid: Ellipsoid;\r\n /** @internal */\r\n public minEarthEllipsoid: Ellipsoid;\r\n /** @internal */\r\n public maxEarthEllipsoid: Ellipsoid;\r\n /** Determines whether the map displays as a plane or an ellipsoid. */\r\n public readonly globeMode: GlobeMode;\r\n /** @internal */\r\n public globeOrigin: Point3d;\r\n /** @internal */\r\n private _mercatorTilingScheme: MapTilingScheme;\r\n /** @internal */\r\n public useDepthBuffer: boolean;\r\n /** @internal */\r\n public isOverlay: boolean;\r\n /** @internal */\r\n public terrainExaggeration: number;\r\n /** @internal */\r\n public baseColor?: ColorDef;\r\n /** @internal */\r\n public baseTransparent: boolean;\r\n /** @internal */\r\n public mapTransparent: boolean;\r\n /** @internal */\r\n public produceGeometry?: boolean;\r\n /** @internal */\r\n public layerImageryTrees: MapLayerTreeSetting[] = [];\r\n private _layerSettings = new Map<Id64String, MapLayerSettings>();\r\n private _imageryTreeState = new Map<Id64String, ImageryTileTreeState>();\r\n private _modelIdToIndex = new Map<Id64String, number>();\r\n /** @internal */\r\n public layerClassifiers = new Map<number, RenderPlanarClassifier>();\r\n\r\n /** @internal */\r\n constructor(params: RealityTileTreeParams, ecefToDb: Transform, bimElevationBias: number, geodeticOffset: number,\r\n sourceTilingScheme: MapTilingScheme, id: MapTreeId, applyTerrain: boolean) {\r\n super(params);\r\n this.ecefToDb = ecefToDb;\r\n this.bimElevationBias = bimElevationBias;\r\n this.geodeticOffset = geodeticOffset;\r\n this.sourceTilingScheme = sourceTilingScheme;\r\n this._mercatorTilingScheme = new WebMercatorTilingScheme();\r\n this._mercatorFractionToDb = this._mercatorTilingScheme.computeMercatorFractionToDb(ecefToDb, bimElevationBias, params.iModel, applyTerrain);\r\n const quadId = new QuadId(sourceTilingScheme.rootLevel, 0, 0);\r\n this.globeOrigin = this.ecefToDb.getOrigin().clone();\r\n this.earthEllipsoid = Ellipsoid.createCenterMatrixRadii(this.globeOrigin, this.ecefToDb.matrix, Constant.earthRadiusWGS84.equator, Constant.earthRadiusWGS84.equator, Constant.earthRadiusWGS84.polar);\r\n const globalHeightRange = applyTerrain ? ApproximateTerrainHeights.instance.globalHeightRange : Range1d.createXX(0, 0);\r\n const globalRectangle = MapCartoRectangle.createMaximum();\r\n\r\n this.globeMode = id.globeMode;\r\n this.isOverlay = id.isOverlay;\r\n this.useDepthBuffer = id.useDepthBuffer;\r\n this.terrainExaggeration = id.terrainExaggeration;\r\n this.baseColor = id.baseColor;\r\n this.baseTransparent = id.baseTransparent;\r\n this.mapTransparent = id.mapTransparent;\r\n if (applyTerrain) {\r\n this.minEarthEllipsoid = Ellipsoid.createCenterMatrixRadii(this.globeOrigin, this.ecefToDb.matrix, Constant.earthRadiusWGS84.equator + globalHeightRange.low, Constant.earthRadiusWGS84.equator + globalHeightRange.low, Constant.earthRadiusWGS84.polar + globalHeightRange.low);\r\n this.maxEarthEllipsoid = Ellipsoid.createCenterMatrixRadii(this.globeOrigin, this.ecefToDb.matrix, Constant.earthRadiusWGS84.equator + globalHeightRange.high, Constant.earthRadiusWGS84.equator + globalHeightRange.high, Constant.earthRadiusWGS84.polar + globalHeightRange.high);\r\n this.produceGeometry = id.produceGeometry;\r\n } else {\r\n this.minEarthEllipsoid = this.earthEllipsoid;\r\n this.maxEarthEllipsoid = this.earthEllipsoid;\r\n }\r\n\r\n const rootPatch = EllipsoidPatch.createCapture(\r\n this.maxEarthEllipsoid, AngleSweep.createStartSweepRadians(0, Angle.pi2Radians),\r\n AngleSweep.createStartSweepRadians(-Angle.piOver2Radians, Angle.piRadians),\r\n );\r\n\r\n let range;\r\n if (this.globeMode === GlobeMode.Ellipsoid) {\r\n range = rootPatch.range();\r\n } else {\r\n const corners = this.getFractionalTileCorners(quadId);\r\n this._mercatorFractionToDb.multiplyPoint3dArrayInPlace(corners);\r\n range = Range3d.createArray(MapTile.computeRangeCorners(corners, Vector3d.create(0, 0, 1), 0, scratchCorners, globalHeightRange));\r\n }\r\n\r\n this._rootTile = this.createGlobeChild({ contentId: quadId.contentId, maximumSize: 0, range }, quadId, range.corners(), globalRectangle, rootPatch, undefined);\r\n }\r\n\r\n /** @internal */\r\n public override get parentsAndChildrenExclusive() {\r\n // If we are not depth buffering we force parents and exclusive to false to cause the map tiles to be sorted\r\n // by depth so that painters algorithm will approximate correct depth display.\r\n return this.useDepthBuffer ? this.loader.parentsAndChildrenExclusive : false;\r\n }\r\n\r\n /** Return the imagery tile tree state of matching the provided imagery tree id.\r\n * @internal\r\n */\r\n public getImageryTreeState(imageryTreeId: string) {\r\n return this._imageryTreeState.get(imageryTreeId);\r\n }\r\n\r\n /** Return a cloned dictionary of the imagery tile tree states\r\n * @internal\r\n */\r\n public cloneImageryTreeState() {\r\n const clone = new Map<Id64String, ImageryTileTreeState>();\r\n for (const [treeId, state] of this._imageryTreeState) {\r\n clone.set(treeId, state.clone());\r\n }\r\n return clone;\r\n }\r\n\r\n /** @internal */\r\n public tileFromQuadId(quadId: QuadId): MapTile | undefined {\r\n return (this._rootTile as MapTile).tileFromQuadId(quadId);\r\n }\r\n\r\n /** Add a new imagery tile tree / map-layer settings pair and initialize the imagery tile tree state.\r\n * @internal\r\n */\r\n public addImageryLayer(tree: ImageryMapTileTree, settings: MapLayerSettings, index: number, baseImageryLayer: boolean) {\r\n this.layerImageryTrees.push({ tree, settings, baseImageryLayer });\r\n this._layerSettings.set(tree.modelId, settings);\r\n if (!this._imageryTreeState.has(tree.modelId))\r\n this._imageryTreeState.set(tree.modelId, new ImageryTileTreeState());\r\n this._modelIdToIndex.set(tree.modelId, index);\r\n }\r\n\r\n /** @internal */\r\n public addModelLayer(layerTreeRef: ModelMapLayerTileTreeReference, context: SceneContext) {\r\n const classifier = context.addPlanarClassifier(`MapLayer ${this.modelId}-${layerTreeRef.layerIndex}`, layerTreeRef);\r\n if (classifier)\r\n this.layerClassifiers.set(layerTreeRef.layerIndex, classifier);\r\n }\r\n\r\n /** @internal */\r\n protected override collectClassifierGraphics(args: TileDrawArgs, selectedTiles: RealityTile[]) {\r\n super.collectClassifierGraphics(args, selectedTiles);\r\n\r\n this.layerClassifiers.forEach((layerClassifier: RenderPlanarClassifier) => {\r\n if (!(args instanceof GraphicsCollectorDrawArgs))\r\n layerClassifier.collectGraphics(args.context, { modelId: this.modelId, tiles: selectedTiles, location: args.location, isPointCloud: this.isPointCloud });\r\n\r\n });\r\n }\r\n\r\n /** @internal */\r\n public clearImageryTreesAndClassifiers() {\r\n this.layerImageryTrees.length = 0;\r\n this._layerSettings.clear();\r\n this._modelIdToIndex.clear();\r\n this.layerClassifiers.clear();\r\n }\r\n\r\n /** @internal */\r\n public override get isTransparent() {\r\n return this.mapTransparent || this.baseTransparent;\r\n }\r\n\r\n /** @internal */\r\n public override get maxDepth() {\r\n let maxDepth = this.loader.maxDepth;\r\n this.layerImageryTrees?.forEach((layerImageryTree) => maxDepth = Math.max(maxDepth, layerImageryTree.tree.maxDepth));\r\n\r\n return maxDepth;\r\n }\r\n\r\n /** @internal */\r\n public createPlanarChild(params: TileParams, quadId: QuadId, corners: Point3d[], normal: Vector3d, rectangle: MapCartoRectangle, chordHeight: number, heightRange?: Range1d): MapTile | undefined {\r\n const childAvailable = this.mapLoader.isTileAvailable(quadId);\r\n if (!childAvailable && this.produceGeometry)\r\n return undefined;\r\n\r\n const patch = new PlanarTilePatch(corners, normal, chordHeight);\r\n const cornerNormals = this.getCornerRays(rectangle);\r\n if (childAvailable)\r\n return new MapTile(params, this, quadId, patch, rectangle, heightRange, cornerNormals);\r\n\r\n assert(params.parent instanceof MapTile);\r\n let loadableTile: MapTile | undefined = params.parent;\r\n while (loadableTile?.isUpsampled)\r\n loadableTile = loadableTile.parent as MapTile | undefined;\r\n\r\n assert(undefined !== loadableTile);\r\n return new UpsampledMapTile(params, this, quadId, patch, rectangle, heightRange, cornerNormals, loadableTile);\r\n }\r\n\r\n /** @internal */\r\n public createGlobeChild(params: TileParams, quadId: QuadId, _rangeCorners: Point3d[], rectangle: MapCartoRectangle, ellipsoidPatch: EllipsoidPatch, heightRange?: Range1d): MapTile {\r\n return new MapTile(params, this, quadId, ellipsoidPatch, rectangle, heightRange, this.getCornerRays(rectangle));\r\n }\r\n\r\n /** @internal */\r\n public getChildHeightRange(quadId: QuadId, rectangle: MapCartoRectangle, parent: MapTile): Range1d | undefined {\r\n return this.mapLoader.getChildHeightRange(quadId, rectangle, parent);\r\n }\r\n\r\n /** @internal */\r\n public clearLayers() {\r\n (this._rootTile as MapTile).clearLayers();\r\n }\r\n\r\n /** Reprojection does not work with very large tiles so just do linear transform.\r\n * @internal\r\n */\r\n public static minReprojectionDepth = 8;\r\n /** @internal */\r\n public static maxGlobeDisplayDepth = 8;\r\n /** @internal */\r\n public static minDisplayableDepth = 3;\r\n /** @internal */\r\n public get mapLoader() { return this.loader as MapTileLoader; }\r\n\r\n /** @internal */\r\n public override getBaseRealityDepth(sceneContext: SceneContext) {\r\n // If the view has ever had global scope then preload low level (global) tiles.\r\n return (sceneContext.viewport.view.maxGlobalScopeFactor > 1) ? MapTileTree.minDisplayableDepth : -1;\r\n }\r\n\r\n /** @internal */\r\n public doCreateGlobeChildren(tile: Tile): boolean {\r\n if (this.globeMode !== GlobeMode.Ellipsoid)\r\n return false;\r\n\r\n const childDepth = tile.depth + 1;\r\n if (childDepth < MapTileTree.maxGlobeDisplayDepth) // If the depth is too low (tile is too large) display as globe.\r\n return true;\r\n\r\n return false; // Display as globe if more than 100 KM from project.\r\n }\r\n\r\n /** @internal */\r\n public override doReprojectChildren(tile: Tile): boolean {\r\n if (this._gcsConverter === undefined)\r\n return false;\r\n\r\n const childDepth = tile.depth + 1;\r\n if (childDepth < MapTileTree.minReprojectionDepth) // If the depth is too low (tile is too large) omit reprojection.\r\n return false;\r\n\r\n return this.cartesianRange.intersectsRange(tile.range);\r\n }\r\n\r\n /** @internal */\r\n public getCornerRays(rectangle: MapCartoRectangle): Ray3d[] | undefined {\r\n const rays = new Array<Ray3d>();\r\n if (this.globeMode === GlobeMode.Ellipsoid) {\r\n rays.push(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.low.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.high.y))!);\r\n rays.push(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.high.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.high.y))!);\r\n rays.push(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.low.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.low.y))!);\r\n rays.push(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.high.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.low.y))!);\r\n } else {\r\n const mercatorFractionRange = rectangle.getTileFractionRange(this._mercatorTilingScheme);\r\n rays.push(Ray3d.createCapture(this._mercatorFractionToDb.multiplyXYZ(mercatorFractionRange.low.x, mercatorFractionRange.high.y), scratchZNormal));\r\n rays.push(Ray3d.createCapture(this._mercatorFractionToDb.multiplyXYZ(mercatorFractionRange.high.x, mercatorFractionRange.high.y), scratchZNormal));\r\n rays.push(Ray3d.createCapture(this._mercatorFractionToDb.multiplyXYZ(mercatorFractionRange.low.x, mercatorFractionRange.low.y), scratchZNormal));\r\n rays.push(Ray3d.createCapture(this._mercatorFractionToDb.multiplyXYZ(mercatorFractionRange.high.x, mercatorFractionRange.low.y), scratchZNormal));\r\n }\r\n return rays;\r\n }\r\n\r\n /** @internal */\r\n public pointAboveEllipsoid(point: Point3d): boolean {\r\n return this.earthEllipsoid.worldToLocal(point, scratchPoint)!.magnitude() > 1;\r\n }\r\n\r\n private getMercatorFractionChildGridPoints(tile: MapTile, columnCount: number, rowCount: number): Point3d[] {\r\n const gridPoints = [];\r\n const quadId = tile.quadId;\r\n const deltaX = 1.0 / columnCount, deltaY = 1.0 / rowCount;\r\n for (let row = 0; row <= rowCount; row++) {\r\n for (let column = 0; column <= columnCount; column++) {\r\n const xFraction = this.sourceTilingScheme.tileXToFraction(quadId.column + column * deltaX, quadId.level);\r\n const yFraction = this.sourceTilingScheme.tileYToFraction(quadId.row + row * deltaY, quadId.level);\r\n\r\n gridPoints.push(Point3d.create(xFraction, yFraction, 0));\r\n }\r\n }\r\n // If not mercator already need to remap latitude...\r\n if (!(this.sourceTilingScheme instanceof WebMercatorTilingScheme))\r\n for (const gridPoint of gridPoints)\r\n gridPoint.y = this._mercatorTilingScheme.latitudeToYFraction(this.sourceTilingScheme.yFractionToLatitude(gridPoint.y));\r\n\r\n return gridPoints;\r\n }\r\n\r\n private getChildCornersFromGridPoints(gridPoints: Point3d[], columnCount: number, rowCount: number) {\r\n const childCorners = new Array<Point3d[]>();\r\n for (let row = 0; row < rowCount; row++) {\r\n for (let column = 0; column < columnCount; column++) {\r\n const index0 = column + row * (columnCount + 1);\r\n const index1 = index0 + (columnCount + 1);\r\n childCorners.push([gridPoints[index0], gridPoints[index0 + 1], gridPoints[index1], gridPoints[index1 + 1]]);\r\n }\r\n }\r\n return childCorners;\r\n }\r\n\r\n /** @internal */\r\n public getCachedReprojectedPoints(gridPoints: Point3d[]): (Point3d | undefined)[] | undefined {\r\n const requestProps = [];\r\n for (const gridPoint of gridPoints)\r\n requestProps.push({\r\n x: this._mercatorTilingScheme.xFractionToLongitude(gridPoint.x) * Angle.degreesPerRadian,\r\n y: this._mercatorTilingScheme.yFractionToLatitude(gridPoint.y) * Angle.degreesPerRadian,\r\n z: this.bimElevationBias,\r\n });\r\n\r\n const iModelCoordinates = this._gcsConverter!.getCachedIModelCoordinatesFromGeoCoordinates(requestProps);\r\n\r\n if (iModelCoordinates.missing)\r\n return undefined;\r\n\r\n return iModelCoordinates.result.map((result) => !result || result.s ? undefined : Point3d.fromJSON(result.p));\r\n }\r\n\r\n /** Minimize reprojection requests by requesting this corners tile and a grid that will include all points for 4 levels of descendants.\r\n * This greatly reduces the number of reprojection requests which currently require a roundtrip through the backend.\r\n * @internal\r\n */\r\n public async loadReprojectionCache(tile: MapTile): Promise<void> {\r\n const quadId = tile.quadId;\r\n const xRange = Range1d.createXX(this.sourceTilingScheme.tileXToFraction(quadId.column, quadId.level), this.sourceTilingScheme.tileXToFraction(quadId.column + 1, quadId.level));\r\n const yRange = Range1d.createXX(this.sourceTilingScheme.tileYToFraction(quadId.row, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row + 1, quadId.level));\r\n const cacheDepth = 4, cacheDimension = 2 ** cacheDepth;\r\n const delta = 1.0 / cacheDimension;\r\n const requestProps = [];\r\n\r\n for (let row = 0; row <= cacheDimension; row++) {\r\n for (let column = 0; column <= cacheDimension; column++) {\r\n let yFraction = yRange.fractionToPoint(row * delta);\r\n if (!(this.sourceTilingScheme instanceof WebMercatorTilingScheme))\r\n yFraction = this._mercatorTilingScheme.latitudeToYFraction(this.sourceTilingScheme.yFractionToLatitude(yFraction));\r\n requestProps.push({\r\n x: this._mercatorTilingScheme.xFractionToLongitude(xRange.fractionToPoint(column * delta)) * Angle.degreesPerRadian,\r\n y: this._mercatorTilingScheme.yFractionToLatitude(yFraction) * Angle.degreesPerRadian,\r\n z: this.bimElevationBias,\r\n });\r\n }\r\n }\r\n\r\n await this._gcsConverter!.getIModelCoordinatesFromGeoCoordinates(requestProps);\r\n }\r\n\r\n private static _scratchCarto = Cartographic.createZero();\r\n\r\n /** Get the corners for planar children.\r\n * This generally will resolve immediately, but may require an asynchronous request for reprojecting the corners.\r\n * @internal\r\n */\r\n public getPlanarChildCorners(tile: MapTile, columnCount: number, rowCount: number, resolve: (childCorners: Point3d[][]) => void) {\r\n const resolveCorners = (points: Point3d[], reprojected: (Point3d | undefined)[] | undefined = undefined) => {\r\n for (let i = 0; i < points.length; i++) {\r\n const gridPoint = points[i];\r\n this._mercatorFractionToDb.multiplyPoint3d(gridPoint, scratchCorner);\r\n if (this.globeMode !== GlobeMode.Ellipsoid || this.cartesianRange.containsPoint(scratchCorner)) {\r\n if (reprojected !== undefined && reprojected[i] !== undefined)\r\n reprojected[i]!.clone(gridPoint);\r\n else\r\n scratchCorner.clone(gridPoint);\r\n } else {\r\n this._mercatorTilingScheme.fractionToCartographic(gridPoint.x, gridPoint.y, MapTileTree._scratchCarto);\r\n this.earthEllipsoid.radiansToPoint(MapTileTree._scratchCarto.longitude, Cartographic.parametricLatitudeFromGeodeticLatitude(MapTileTree._scratchCarto.latitude), gridPoint);\r\n const cartesianDistance = this.cartesianRange.distanceToPoint(scratchCorner);\r\n if (cartesianDistance < this.cartesianTransitionDistance)\r\n scratchCorner.interpolate(cartesianDistance / this.cartesianTransitionDistance, gridPoint, gridPoint);\r\n }\r\n }\r\n resolve(this.getChildCornersFromGridPoints(points, columnCount, rowCount));\r\n };\r\n\r\n let reprojectedPoints: (Point3d | undefined)[] | undefined;\r\n const gridPoints = this.getMercatorFractionChildGridPoints(tile, columnCount, rowCount);\r\n if (this.doReprojectChildren(tile)) {\r\n reprojectedPoints = this.getCachedReprojectedPoints(gridPoints);\r\n if (reprojectedPoints) {\r\n // If the reprojected corners are in the cache, resolve immediately.\r\n resolveCorners(gridPoints, reprojectedPoints);\r\n } else {\r\n // If the reprojected corners are not in cache request them - but also request reprojection of a grid that will include descendent corners to ensure they can\r\n // be reloaded without expensive reprojection requests.\r\n this.loadReprojectionCache(tile).then(() => {\r\n const reprojected = this.getCachedReprojectedPoints(gridPoints);\r\n assert(reprojected !== undefined); // We just cached them... they better be there now.\r\n resolveCorners(gridPoints, reprojected);\r\n }).catch((_error: Error) => {\r\n resolveCorners(gridPoints);\r\n });\r\n }\r\n } else {\r\n resolveCorners(gridPoints);\r\n }\r\n }\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 override reportTileVisibility(args: TileDrawArgs, selected: RealityTile[]) {\r\n\r\n const debugControl = args.context.target.debugControl;\r\n\r\n const layersVisibilityBefore = this.cloneImageryTreeState();\r\n\r\n const changes = new Array<MapLayerScaleRangeVisibility>();\r\n\r\n if (!layersVisibilityBefore)\r\n return;\r\n\r\n for (const [treeId] of layersVisibilityBefore) {\r\n const treeVisibility = this.getImageryTreeState(treeId);\r\n if (treeVisibility) {\r\n treeVisibility.reset();\r\n }\r\n }\r\n\r\n for (const selectedTile of selected) {\r\n if (selectedTile instanceof MapTile) {\r\n let selectedImageryTiles = selectedTile.imageryTiles;\r\n if (selectedTile.hiddenImageryTiles) {\r\n selectedImageryTiles = selectedImageryTiles ? [...selectedImageryTiles, ...selectedTile.hiddenImageryTiles] : selectedTile.hiddenImageryTiles;\r\n }\r\n\r\n const leafTiles = selectedTile.highResolutionReplacementTiles;\r\n if (leafTiles) {\r\n for (const tile of leafTiles) {\r\n const treeState = this.getImageryTreeState(tile.tree.id);\r\n treeState?.setScaleRangeVisibility(false);\r\n }\r\n }\r\n\r\n if (selectedImageryTiles) {\r\n for (const selectedImageryTile of selectedImageryTiles) {\r\n const treeState = this.getImageryTreeState(selectedImageryTile.tree.id);\r\n if (treeState) {\r\n if (selectedImageryTile.isOutOfLodRange) {\r\n treeState.setScaleRangeVisibility(false);\r\n } else {\r\n treeState.setScaleRangeVisibility(true);\r\n }\r\n }\r\n\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (const [treeId, prevState] of layersVisibilityBefore) {\r\n const newState = this.getImageryTreeState(treeId);\r\n if (newState) {\r\n\r\n const prevVisibility = prevState.getScaleRangeVisibility();\r\n const visibility = newState.getScaleRangeVisibility();\r\n if (prevVisibility !== visibility) {\r\n\r\n if (debugControl && debugControl.logRealityTiles) {\r\n // eslint-disable-next-line no-console\r\n console.log(`ImageryTileTree '${treeId}' changed prev state: '${MapTileTreeScaleRangeVisibility[prevVisibility]}' new state: '${MapTileTreeScaleRangeVisibility[visibility]}'`);\r\n }\r\n\r\n const mapLayersIndexes = args.context.viewport.getMapLayerIndexesFromIds(this.id, treeId);\r\n for (const index of mapLayersIndexes) {\r\n changes.push({ index: index.index, isOverlay: index.isOverlay, visibility });\r\n }\r\n\r\n }\r\n }\r\n }\r\n\r\n if (changes.length !== 0) {\r\n args.context.viewport.onMapLayerScaleRangeVisibilityChanged.raiseEvent(changes);\r\n }\r\n\r\n }\r\n\r\n /** @internal */\r\n public getFractionalTileCorners(quadId: QuadId): Point3d[] {\r\n const corners: Point3d[] = [];\r\n corners.push(Point3d.create(this.sourceTilingScheme.tileXToFraction(quadId.column, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row, quadId.level), 0.0));\r\n corners.push(Point3d.create(this.sourceTilingScheme.tileXToFraction(quadId.column + 1, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row, quadId.level), 0.0));\r\n corners.push(Point3d.create(this.sourceTilingScheme.tileXToFraction(quadId.column, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row + 1, quadId.level), 0.0));\r\n corners.push(Point3d.create(this.sourceTilingScheme.tileXToFraction(quadId.column + 1, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row + 1, quadId.level), 0.0));\r\n return corners;\r\n }\r\n\r\n /** @internal */\r\n public getTileRectangle(quadId: QuadId): MapCartoRectangle {\r\n return this.sourceTilingScheme.tileXYToRectangle(quadId.column, quadId.row, quadId.level);\r\n }\r\n\r\n /** @internal */\r\n public getLayerIndex(imageryTreeId: Id64String) {\r\n const index = this._modelIdToIndex.get(imageryTreeId);\r\n return index === undefined ? -1 : index;\r\n }\r\n\r\n /** @internal */\r\n public getLayerTransparency(imageryTreeId: Id64String): number {\r\n const layerSettings = this._layerSettings.get(imageryTreeId);\r\n assert(undefined !== layerSettings);\r\n return undefined === layerSettings || !layerSettings.transparency ? 0.0 : layerSettings.transparency;\r\n }\r\n}\r\n\r\ninterface MapTreeId {\r\n tileUserId: number;\r\n applyTerrain: boolean;\r\n terrainProviderName: string;\r\n terrainDataSource: string;\r\n terrainHeightOrigin: number;\r\n terrainHeightOriginMode: number;\r\n terrainExaggeration: number;\r\n mapGroundBias: number;\r\n wantSkirts: boolean;\r\n wantNormals: boolean;\r\n globeMode: GlobeMode;\r\n useDepthBuffer: boolean;\r\n isOverlay: boolean;\r\n baseColor?: ColorDef;\r\n baseTransparent: boolean;\r\n mapTransparent: boolean;\r\n maskModelIds?: string;\r\n produceGeometry?: boolean;\r\n}\r\n\r\n/** @internal */\r\nclass MapTileTreeProps implements RealityTileTreeParams {\r\n public id: string;\r\n public modelId: string;\r\n public location = Transform.createIdentity();\r\n public yAxisUp = true;\r\n public is3d = true;\r\n public rootTile = { contentId: \"\", range: Range3d.createNull(), maximumSize: 0 };\r\n public loader: MapTileLoader;\r\n public iModel: IModelConnection;\r\n public get priority(): TileLoadPriority { return this.loader.priority; }\r\n\r\n public constructor(modelId: Id64String, loader: MapTileLoader, iModel: IModelConnection, public gcsConverterAvailable: boolean) {\r\n this.id = this.modelId = modelId;\r\n this.loader = loader;\r\n this.iModel = iModel;\r\n }\r\n}\r\n\r\nfunction createViewFlagOverrides(wantLighting: boolean, wantThematic: false | undefined) {\r\n return createDefaultViewFlagOverrides({ clipVolume: false, lighting: wantLighting, thematic: wantThematic });\r\n}\r\n\r\nclass MapTreeSupplier implements TileTreeSupplier {\r\n public readonly isEcefDependent = true;\r\n\r\n public compareTileTreeIds(lhs: MapTreeId, rhs: MapTreeId): number {\r\n let cmp = compareNumbers(lhs.tileUserId, rhs.tileUserId);\r\n if (0 === cmp) {\r\n cmp = compareStringsOrUndefined(lhs.maskModelIds, rhs.maskModelIds);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.isOverlay, rhs.isOverlay);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.wantSkirts, rhs.wantSkirts);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.wantNormals, rhs.wantNormals);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.globeMode, rhs.globeMode);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.baseColor ? lhs.baseColor.tbgr : -1, rhs.baseColor ? rhs.baseColor.tbgr : -1);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.baseTransparent, rhs.baseTransparent);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.mapTransparent, rhs.mapTransparent);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.applyTerrain, rhs.applyTerrain);\r\n if (0 === cmp) {\r\n if (lhs.applyTerrain) {\r\n // Terrain-only settings.\r\n cmp = compareStrings(lhs.terrainProviderName, rhs.terrainProviderName);\r\n if (0 === cmp) {\r\n cmp = compareStringsOrUndefined(lhs.terrainDataSource, rhs.terrainDataSource);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.terrainHeightOrigin, rhs.terrainHeightOrigin);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.terrainHeightOriginMode, rhs.terrainHeightOriginMode);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.terrainExaggeration, rhs.terrainExaggeration);\r\n if (0 === cmp)\r\n cmp = compareBooleansOrUndefined(lhs.produceGeometry, rhs.produceGeometry);\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n // Non-Terrain (flat) settings.\r\n cmp = compareNumbers(lhs.mapGroundBias, rhs.mapGroundBias);\r\n if (0 === cmp)\r\n cmp = compareBooleans(lhs.useDepthBuffer, rhs.useDepthBuffer);\r\n }\r\n }\r\n }\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 private async computeHeightBias(heightOrigin: number, heightOriginMode: TerrainHeightOriginMode, exaggeration: number, iModel: IModelConnection, elevationProvider: BingElevationProvider): Promise<number> {\r\n const projectCenter = iModel.projectExtents.center;\r\n switch (heightOriginMode) {\r\n case TerrainHeightOriginMode.Ground:\r\n return heightOrigin + exaggeration * (await elevationProvider.getHeightValue(projectCenter, iModel, true));\r\n\r\n case TerrainHeightOriginMode.Geodetic:\r\n return heightOrigin;\r\n\r\n case TerrainHeightOriginMode.Geoid:\r\n return heightOrigin + await elevationProvider.getGeodeticToSeaLevelOffset(projectCenter, iModel);\r\n }\r\n }\r\n\r\n public async createTileTree(id: MapTreeId, iModel: IModelConnection): Promise<TileTree | undefined> {\r\n let bimElevationBias = 0, terrainProvider, geodeticOffset = 0;\r\n let applyTerrain = id.applyTerrain;\r\n const modelId = iModel.transientIds.getNext();\r\n const gcsConverterAvailable = await getGcsConverterAvailable(iModel);\r\n\r\n const terrainOpts: TerrainMeshProviderOptions = {\r\n wantSkirts: id.wantSkirts,\r\n exaggeration: id.terrainExaggeration,\r\n wantNormals: id.wantNormals,\r\n dataSource: id.terrainDataSource,\r\n };\r\n\r\n if (id.applyTerrain) {\r\n await ApproximateTerrainHeights.instance.initialize();\r\n const elevationProvider = new BingElevationProvider();\r\n\r\n bimElevationBias = - await this.computeHeightBias(id.terrainHeightOrigin, id.terrainHeightOriginMode, id.terrainExaggeration, iModel, elevationProvider);\r\n geodeticOffset = await elevationProvider.getGeodeticToSeaLevelOffset(iModel.projectExtents.center, iModel);\r\n const provider = IModelApp.terrainProviderRegistry.find(id.terrainProviderName);\r\n if (provider)\r\n terrainProvider = await provider.createTerrainMeshProvider(terrainOpts);\r\n\r\n if (!terrainProvider) {\r\n applyTerrain = false;\r\n geodeticOffset = 0;\r\n }\r\n }\r\n\r\n if (!terrainProvider) {\r\n terrainProvider = new EllipsoidTerrainProvider(terrainOpts);\r\n bimElevationBias = id.mapGroundBias;\r\n }\r\n\r\n const loader = new MapTileLoader(iModel, modelId, bimElevationBias, terrainProvider);\r\n const ecefToDb = iModel.getMapEcefToDb(bimElevationBias);\r\n\r\n if (id.maskModelIds)\r\n await iModel.models.load(CompressedId64Set.decompressSet(id.maskModelIds));\r\n\r\n const treeProps = new MapTileTreeProps(modelId, loader, iModel, gcsConverterAvailable);\r\n return new MapTileTree(treeProps, ecefToDb, bimElevationBias, geodeticOffset, terrainProvider.tilingScheme, id, applyTerrain);\r\n }\r\n}\r\n\r\nconst mapTreeSupplier = new MapTreeSupplier();\r\n\r\n/** @internal */\r\ntype CheckTerrainDisplayOverride = () => TerrainDisplayOverrides | undefined;\r\n\r\n/** Specialization of tile tree that represents background map.\r\n * @internal\r\n */\r\nexport class MapTileTreeReference extends TileTreeReference {\r\n private _tileUserId: number;\r\n private _settings: BackgroundMapSettings;\r\n private readonly _iModel: IModelConnection;\r\n private _baseImageryLayerIncluded = false;\r\n private _baseColor?: ColorDef;\r\n private readonly _layerTrees = new Array<MapLayerTileTreeReference | undefined>();\r\n private _baseTransparent = false;\r\n private _symbologyOverrides: FeatureSymbology.Overrides | undefined;\r\n private _planarClipMask?: PlanarClipMaskState;\r\n\r\n public constructor(\r\n settings: BackgroundMapSettings,\r\n private _baseLayerSettings: BaseLayerSettings | undefined,\r\n private _layerSettings: MapLayerSettings[],\r\n iModel: IModelConnection,\r\n tileUserId: number,\r\n public isOverlay: boolean,\r\n private _isDrape: boolean,\r\n private _overrideTerrainDisplay?: CheckTerrainDisplayOverride) {\r\n super();\r\n this._tileUserId = tileUserId;\r\n this._settings = settings;\r\n this._iModel = iModel;\r\n let tree;\r\n if (!isOverlay && this._baseLayerSettings !== undefined) {\r\n if (this._baseLayerSettings instanceof MapLayerSettings) {\r\n tree = createMapLayerTreeReference(this._baseLayerSettings, 0, iModel);\r\n this._baseTransparent = this._baseLayerSettings.transparency > 0;\r\n } else {\r\n this._baseColor = this._baseLayerSettings;\r\n this._baseTransparent = this._baseColor?.getTransparency() > 0;\r\n }\r\n }\r\n\r\n if (this._baseImageryLayerIncluded = (undefined !== tree))\r\n this._layerTrees.push(tree);\r\n\r\n for (let i = 0; i < this._layerSettings.length; i++)\r\n if (undefined !== (tree = createMapLayerTreeReference(this._layerSettings[i], i + 1, iModel)))\r\n this._layerTrees.push(tree);\r\n\r\n if (this._settings.planarClipMask && this._settings.planarClipMask.isValid)\r\n this._planarClipMask = PlanarClipMaskState.create(this._settings.planarClipMask);\r\n\r\n if (this._overrideTerrainDisplay && this._overrideTerrainDisplay()?.produceGeometry)\r\n this.collectTileGeometry = (collector) => this._collectTileGeometry(collector);\r\n }\r\n\r\n public forEachLayerTileTreeRef(func: (ref: TileTreeReference) => void): void {\r\n for (const layerTree of this._layerTrees) {\r\n assert(layerTree instanceof MapLayerTileTreeReference);\r\n func(layerTree);\r\n }\r\n }\r\n\r\n public override get isGlobal() { return true; }\r\n public get baseColor(): ColorDef | undefined { return this._baseColor; }\r\n public override get planarclipMaskPriority(): number { return PlanarClipMaskPriority.BackgroundMap; }\r\n\r\n protected override _createGeometryTreeReference(): GeometryTileTreeReference | undefined {\r\n if (!this._settings.applyTerrain || this._isDrape)\r\n return undefined; // Don't bother generating non-terrain (flat) geometry.\r\n\r\n const ref = new MapTileTreeReference(this._settings, undefined, [], this._iModel, this._tileUserId, false, false, () => {\r\n return { produceGeometry: true };\r\n });\r\n\r\n assert(undefined !== ref.collectTileGeometry);\r\n return ref as GeometryTileTreeReference;\r\n }\r\n\r\n /** Terrain tiles do not contribute to the range used by \"fit view\". */\r\n public override unionFitRange(_range: Range3d): void { }\r\n public get settings(): BackgroundMapSettings { return this._settings; }\r\n public set settings(settings: BackgroundMapSettings) {\r\n this._settings = settings;\r\n this._planarClipMask = settings.planarClipMask ? PlanarClipMaskState.create(settings.planarClipMask) : undefined;\r\n }\r\n public setBaseLayerSettings(baseLayerSettings: BaseLayerSettings) {\r\n assert(!this.isOverlay);\r\n let tree;\r\n this._baseLayerSettings = baseLayerSettings;\r\n\r\n if (baseLayerSettings instanceof MapLayerSettings) {\r\n tree = createMapLayerTreeReference(baseLayerSettings, 0, this._iModel);\r\n this._baseColor = undefined;\r\n this._baseTransparent = baseLayerSettings.transparency > 0;\r\n } else {\r\n this._baseColor = baseLayerSettings;\r\n this._baseTransparent = this._baseColor.getTransparency() > 0;\r\n }\r\n\r\n if (tree) {\r\n if (this._baseImageryLayerIncluded)\r\n this._layerTrees[0] = tree;\r\n else\r\n this._layerTrees.splice(0, 0, tree);\r\n } else {\r\n if (this._baseImageryLayerIncluded)\r\n this._layerTrees.shift();\r\n }\r\n this._baseImageryLayerIncluded = tree !== undefined;\r\n this.clearLayers();\r\n }\r\n public get layerSettings(): MapLayerSettings[] {\r\n return this._layerSettings;\r\n }\r\n\r\n public setLayerSettings(layerSettings: MapLayerSettings[]) {\r\n this._layerSettings = layerSettings;\r\n const baseLayerIndex = this._baseImageryLayerIncluded ? 1 : 0;\r\n\r\n this._layerTrees.length = Math.min(layerSettings.length + baseLayerIndex, this._layerTrees.length); // Truncate if number of layers reduced.\r\n for (let i = 0; i < layerSettings.length; i++) {\r\n const treeIndex = i + baseLayerIndex;\r\n if (treeIndex >= this._layerTrees.length || !this._layerTrees[treeIndex]?.layerSettings.displayMatches(layerSettings[i]))\r\n this._layerTrees[treeIndex] = createMapLayerTreeReference(layerSettings[i], treeIndex, this._iModel)!;\r\n }\r\n this.clearLayers();\r\n }\r\n\r\n public clearLayers() {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (undefined !== tree)\r\n tree.clearLayers();\r\n }\r\n\r\n public override get castsShadows() {\r\n return false;\r\n }\r\n\r\n protected override get _isLoadingComplete(): boolean {\r\n // Wait until drape tree is fully loaded too.\r\n for (const drapeTree of this._layerTrees)\r\n if (drapeTree && !drapeTree.isLoadingComplete)\r\n return false;\r\n\r\n return super._isLoadingComplete;\r\n }\r\n public get useDepthBuffer() {\r\n return !this.isOverlay && (this.settings.applyTerrain || this.settings.useDepthBuffer);\r\n }\r\n\r\n public get treeOwner(): TileTreeOwner {\r\n let wantSkirts = (this.settings.applyTerrain || this.useDepthBuffer) && !this.settings.transparency && !this._baseTransparent;\r\n if (wantSkirts) {\r\n const maskTrans = this._planarClipMask?.settings.transparency;\r\n wantSkirts = (undefined === maskTrans || maskTrans <= 0);\r\n }\r\n\r\n const id: MapTreeId = {\r\n tileUserId: this._tileUserId,\r\n applyTerrain: this.settings.applyTerrain && !this._isDrape,\r\n terrainProviderName: this.settings.terrainSettings.providerName,\r\n terrainDataSource: this.settings.terrainSettings.dataSource,\r\n terrainHeightOrigin: this.settings.terrainSettings.heightOrigin,\r\n terrainHeightOriginMode: this.settings.terrainSettings.heightOriginMode,\r\n terrainExaggeration: this.settings.terrainSettings.exaggeration,\r\n mapGroundBias: this.settings.groundBias,\r\n wantSkirts,\r\n // Can set to this.settings.terrainSettings.applyLighting if we want to ever apply lighting to terrain again so that normals are retrieved when lighting is on.\r\n wantNormals: false,\r\n globeMode: this._isDrape ? GlobeMode.Plane : this.settings.globeMode,\r\n isOverlay: this.isOverlay,\r\n useDepthBuffer: this.useDepthBuffer,\r\n baseColor: this._baseColor,\r\n baseTransparent: this._baseTransparent,\r\n mapTransparent: Number(this.settings.transparency) > 0,\r\n maskModelIds: this._planarClipMask?.settings.compressedModelIds,\r\n produceGeometry: false,\r\n };\r\n\r\n if (undefined !== this._overrideTerrainDisplay) {\r\n const ovr = this._overrideTerrainDisplay();\r\n if (undefined !== ovr) {\r\n id.wantSkirts = ovr.wantSkirts ?? id.wantSkirts;\r\n id.wantNormals = ovr.wantNormals ?? id.wantNormals;\r\n id.produceGeometry = ovr.produceGeometry === true;\r\n }\r\n }\r\n\r\n return this._iModel.tiles.getTileTreeOwner(id, mapTreeSupplier);\r\n }\r\n public getLayerImageryTreeRef(index: number): MapLayerTileTreeReference | undefined {\r\n const baseLayerIndex = this._baseImageryLayerIncluded ? 1 : 0;\r\n const treeIndex = index + baseLayerIndex;\r\n return index < 0 || treeIndex >= this._layerTrees.length ? undefined : this._layerTrees[treeIndex];\r\n }\r\n\r\n /** Return the map-layer scale range visibility for the provided map-layer index.\r\n * @internal\r\n */\r\n public getMapLayerScaleRangeVisibility(index: number): MapTileTreeScaleRangeVisibility {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (undefined !== tree) {\r\n const tileTreeRef = this.getLayerImageryTreeRef(index);\r\n const treeId = tileTreeRef?.treeOwner.tileTree?.id;\r\n if (treeId !== undefined) {\r\n const treeState = tree.getImageryTreeState(treeId);\r\n if (treeState !== undefined)\r\n return treeState.getScaleRangeVisibility();\r\n }\r\n }\r\n return MapTileTreeScaleRangeVisibility.Unknown;\r\n }\r\n\r\n public initializeLayers(context: SceneContext): boolean {\r\n const tree = this.treeOwner.load() as MapTileTree;\r\n if (undefined === tree)\r\n return false; // Not loaded yet.\r\n\r\n tree.layerImageryTrees.length = 0;\r\n if (0 === this._layerTrees.length)\r\n return !this.isOverlay;\r\n\r\n let treeIndex = this._layerTrees.length - 1;\r\n // Start displaying at the highest completely opaque layer...\r\n for (; treeIndex >= 1; treeIndex--) {\r\n const layerTreeRef = this._layerTrees[treeIndex];\r\n if (layerTreeRef?.isOpaque)\r\n break; // This layer is completely opaque and will obscure all others so ignore lower ones.\r\n }\r\n\r\n for (; treeIndex < this._layerTrees.length; treeIndex++) {\r\n const layerTreeRef = this._layerTrees[treeIndex];\r\n // Load tile tree for each configured layer.\r\n // Note: Non-visible layer are also added to allow proper tile tree scale range visibility reporting.\r\n if (layerTreeRef && TileTreeLoadStatus.NotFound !== layerTreeRef.treeOwner.loadStatus\r\n && !layerTreeRef.layerSettings.allSubLayersInvisible) {\r\n const layerTree = layerTreeRef.treeOwner.load();\r\n if (undefined === layerTree)\r\n return false; // Not loaded yet.\r\n\r\n const baseImageryLayer = this._baseImageryLayerIncluded && (treeIndex === 0);\r\n if (layerTree instanceof ImageryMapTileTree) {\r\n tree.addImageryLayer(layerTree, layerTreeRef.layerSettings, treeIndex, baseImageryLayer);\r\n } else if (layerTreeRef instanceof ModelMapLayerTileTreeReference)\r\n tree.addModelLayer(layerTreeRef, context);\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** Adds this reference's graphics to the scene. By default this invokes [[TileTree.drawScene]] on the referenced TileTree, if it is loaded. */\r\n public override addToScene(context: SceneContext): void {\r\n if (!context.viewFlags.backgroundMap)\r\n return;\r\n\r\n const tree = this.treeOwner.load() as MapTileTree;\r\n if (undefined === tree || !this.initializeLayers(context))\r\n return; // Not loaded yet.\r\n\r\n if (this._planarClipMask && this._planarClipMask.settings.isValid)\r\n context.addPlanarClassifier(tree.modelId, undefined, this._planarClipMask);\r\n\r\n const nonLocatable = this.settings.locatable ? undefined : true;\r\n const transparency = this.settings.transparency ? this.settings.transparency : undefined;\r\n this._symbologyOverrides = new FeatureSymbology.Overrides();\r\n if (nonLocatable || transparency) {\r\n this._symbologyOverrides.override({\r\n modelId: tree.modelId,\r\n appearance: FeatureAppearance.fromJSON({ transparency, nonLocatable }),\r\n });\r\n }\r\n\r\n const args = this.createDrawArgs(context);\r\n if (undefined !== args)\r\n tree.draw(args);\r\n\r\n tree.clearImageryTreesAndClassifiers();\r\n }\r\n\r\n public override createDrawArgs(context: SceneContext): TileDrawArgs | undefined {\r\n const args = super.createDrawArgs(context);\r\n if (undefined === args)\r\n return undefined;\r\n\r\n const tree = this.treeOwner.load() as MapTileTree;\r\n return new RealityTileDrawArgs(args, args.worldToViewMap, args.frustumPlanes, undefined, tree?.layerClassifiers);\r\n }\r\n\r\n protected override getViewFlagOverrides(_tree: TileTree) {\r\n return createViewFlagOverrides(false, this._settings.applyTerrain ? undefined : false);\r\n }\r\n\r\n protected override getSymbologyOverrides(_tree: TileTree) {\r\n return this._symbologyOverrides;\r\n }\r\n\r\n public override discloseTileTrees(trees: DisclosedTileTreeSet): void {\r\n super.discloseTileTrees(trees);\r\n for (const imageryTree of this._layerTrees)\r\n if (imageryTree)\r\n trees.disclose(imageryTree);\r\n\r\n if (this._planarClipMask)\r\n this._planarClipMask.discloseTileTrees(trees);\r\n }\r\n\r\n public imageryTreeFromTreeModelIds(mapTreeModelId: Id64String, layerTreeModelId: Id64String): ImageryMapLayerTreeReference[] {\r\n const imageryTrees: ImageryMapLayerTreeReference[] = [];\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (undefined === tree || tree.modelId !== mapTreeModelId)\r\n return imageryTrees;\r\n\r\n for (const imageryTree of this._layerTrees)\r\n if (imageryTree && imageryTree.treeOwner.tileTree && imageryTree.treeOwner.tileTree.modelId === layerTreeModelId)\r\n imageryTrees.push(imageryTree);\r\n\r\n return imageryTrees;\r\n }\r\n\r\n public layerFromTreeModelIds(mapTreeModelId: Id64String, layerTreeModelId: Id64String): MapLayerInfoFromTileTree[] {\r\n const imageryTree = this.imageryTreeFromTreeModelIds(mapTreeModelId, layerTreeModelId);\r\n return imageryTree.map((tree) => {\r\n const isBaseLayer = (this._baseImageryLayerIncluded && tree.layerIndex === 0);\r\n return {\r\n isBaseLayer,\r\n index: isBaseLayer ? undefined : {isOverlay: this.isOverlay, index: this._baseImageryLayerIncluded ? tree.layerIndex -1 : tree.layerIndex},\r\n settings: tree.layerSettings, provider: tree.imageryProvider};\r\n });\r\n }\r\n\r\n // Utility method that execute the provided function for every *imagery* tiles under a given HitDetail object.\r\n private async forEachImageryTileHit(hit: HitDetail, func: (imageryTreeRef: ImageryMapLayerTreeReference, quadId: QuadId, cartoGraphic: Cartographic, imageryTree: ImageryMapTileTree) => Promise<void>): Promise<void> {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (undefined === tree || hit.iModel !== tree.iModel || tree.modelId !== hit.modelId || !hit.viewport || !hit.viewport.view.is3d)\r\n return undefined;\r\n\r\n const backgroundMapGeometry = hit.viewport.displayStyle.getBackgroundMapGeometry();\r\n if (undefined === backgroundMapGeometry)\r\n return undefined;\r\n\r\n const worldPoint = hit.hitPoint.clone();\r\n let cartoGraphic: Cartographic | undefined;\r\n try {\r\n cartoGraphic = (await backgroundMapGeometry.dbToWGS84CartographicFromGcs([worldPoint]))[0];\r\n } catch {\r\n }\r\n if (!cartoGraphic) {\r\n return undefined;\r\n }\r\n\r\n const imageryTreeRef = this.imageryTreeFromTreeModelIds(hit.modelId, hit.sourceId);\r\n if (imageryTreeRef.length > 0) {\r\n if (hit.tileId !== undefined) {\r\n const terrainQuadId = QuadId.createFromContentId(hit.tileId);\r\n const terrainTile = tree.tileFromQuadId(terrainQuadId);\r\n\r\n for (const treeRef of imageryTreeRef) {\r\n const processedTileIds: string[] = [];\r\n if (terrainTile && terrainTile.imageryTiles) {\r\n const imageryTree = treeRef.treeOwner.tileTree as ImageryMapTileTree;\r\n if (imageryTree) {\r\n for (const imageryTile of terrainTile.imageryTiles) {\r\n if (!processedTileIds.includes(imageryTile.contentId)\r\n && imageryTree === imageryTile.imageryTree\r\n && imageryTile.rectangle.containsCartographic(cartoGraphic)) {\r\n processedTileIds.push(imageryTile.contentId);\r\n try {\r\n await func(treeRef, imageryTile.quadId, cartoGraphic, imageryTree);\r\n } catch {\r\n // continue iterating even though we got a failure.\r\n }\r\n\r\n }\r\n\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n public override async getToolTip(hit: HitDetail): Promise<HTMLElement | string | undefined> {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (tree.modelId !== hit.modelId)\r\n return undefined;\r\n\r\n let carto: Cartographic | undefined;\r\n\r\n const strings: string[] = [];\r\n\r\n const getTooltipFunc = async (imageryTreeRef: ImageryMapLayerTreeReference, quadId: QuadId, cartoGraphic: Cartographic, imageryTree: ImageryMapTileTree) => {\r\n strings.push(`Imagery Layer: ${imageryTreeRef.layerSettings.name}`);\r\n carto = cartoGraphic;\r\n await imageryTree.imageryLoader.getToolTip(strings, quadId, cartoGraphic, imageryTree);\r\n };\r\n try {\r\n await this.forEachImageryTileHit(hit, getTooltipFunc);\r\n } catch {\r\n // No results added\r\n }\r\n\r\n if (carto) {\r\n strings.push(`Latitude: ${carto.latitudeDegrees.toFixed(4)}`);\r\n strings.push(`Longitude: ${carto.longitudeDegrees.toFixed(4)}`);\r\n if (this.settings.applyTerrain && tree.terrainExaggeration !== 0.0) {\r\n const geodeticHeight = (carto.height - tree.bimElevationBias) / tree.terrainExaggeration;\r\n strings.push(`Height (Meters) Geodetic: ${geodeticHeight.toFixed(1)} Sea Level: ${(geodeticHeight - tree.geodeticOffset).toFixed(1)}`);\r\n }\r\n }\r\n\r\n const div = document.createElement(\"div\");\r\n div.innerHTML = strings.join(\"<br>\");\r\n return div;\r\n }\r\n\r\n public override async getMapFeatureInfo(hit: HitDetail, options?: MapFeatureInfoOptions): Promise<MapLayerFeatureInfo[] | undefined> {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (undefined === tree || hit.iModel !== tree.iModel || tree.modelId !== hit.modelId || !hit.viewport || !hit.viewport.view.is3d)\r\n return undefined;\r\n\r\n const info: MapLayerFeatureInfo[] = [];\r\n const imageryTreeRef = this.imageryTreeFromTreeModelIds(hit.modelId, hit.sourceId);\r\n if (imageryTreeRef !== undefined) {\r\n\r\n const getFeatureInfoFunc = async (_imageryTreeRef: ImageryMapLayerTreeReference, quadId: QuadId, cartoGraphic: Cartographic, imageryTree: ImageryMapTileTree) => {\r\n try {\r\n await imageryTree.imageryLoader.getMapFeatureInfo(info, quadId, cartoGraphic, imageryTree, hit, options);\r\n } catch {\r\n }\r\n };\r\n try {\r\n await this.forEachImageryTileHit(hit, getFeatureInfoFunc);\r\n } catch {\r\n // No results added\r\n }\r\n\r\n }\r\n\r\n return info;\r\n }\r\n\r\n /** Add logo cards to logo div. */\r\n public override addLogoCards(cards: HTMLTableElement, vp: ScreenViewport): void {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (tree) {\r\n tree.mapLoader.terrainProvider.addLogoCards(cards, vp);\r\n for (const imageryTreeRef of this._layerTrees) {\r\n if (imageryTreeRef?.layerSettings.visible) {\r\n const imageryTree = imageryTreeRef.treeOwner.tileTree;\r\n if (imageryTree instanceof ImageryMapTileTree)\r\n imageryTree.addLogoCards(cards, vp);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** Returns whether a GCS converter is available.\r\n * @internal\r\n */\r\nexport async function getGcsConverterAvailable(iModel: IModelConnection) {\r\n if (iModel.noGcsDefined)\r\n return false;\r\n\r\n // Determine if we have a usable GCS.\r\n const converter = iModel.geoServices.getConverter(\"WGS84\");\r\n if (undefined === converter)\r\n return false;\r\n const requestProps: XYZProps[] = [{ x: 0, y: 0, z: 0 }];\r\n let haveConverter;\r\n try {\r\n const responseProps = await converter.getIModelCoordinatesFromGeoCoordinates(requestProps);\r\n haveConverter = responseProps.iModelCoords.length === 1 && responseProps.iModelCoords[0].s !== GeoCoordStatus.NoGCSDefined;\r\n } catch {\r\n haveConverter = false;\r\n }\r\n return haveConverter;\r\n}\r\n"]}
|
|
@@ -27,6 +27,8 @@ export interface TerrainMeshProviderOptions {
|
|
|
27
27
|
* A [[TerrainmeshProvider can ignore the request to produce normals, but doing so will prevent lighting and thematic display from applying to its terrain meshes.
|
|
28
28
|
*/
|
|
29
29
|
wantNormals: boolean;
|
|
30
|
+
/** Optionally identifies a specific terrain data source supplied by the [[TerrainMeshProvider]]. */
|
|
31
|
+
dataSource?: string;
|
|
30
32
|
}
|
|
31
33
|
/** Arguments supplied to [[TerrainMeshProvider.requestMeshData]].
|
|
32
34
|
* @public
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TerrainMeshProvider.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/TerrainMeshProvider.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EACL,iBAAiB,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EACpD,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,WAAW,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"TerrainMeshProvider.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/TerrainMeshProvider.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EACL,iBAAiB,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EACpD,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB,oGAAoG;IACpG,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,8DAA8D;IAC9D,IAAI,EAAE,OAAO,CAAC;IACd,0JAA0J;IAC1J,UAAU,IAAI,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,2EAA2E;IAC3E,IAAI,EAAE,GAAG,CAAC;IACV,8DAA8D;IAC9D,IAAI,EAAE,OAAO,CAAC;IACd,mJAAmJ;IACnJ,UAAU,IAAI,OAAO,CAAC;CACvB;AAED;;;;;;;;;;GAUG;AACH,8BAAsB,mBAAmB;IACvC;;OAEG;aACa,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC;IAExE;;OAEG;aACa,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;IAEpF;;;OAGG;IACI,YAAY,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI;IAExE;;;OAGG;IACI,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIhD,iEAAiE;IACjE,aAAoB,QAAQ,IAAI,MAAM,CAAC;IAEvC;;;OAGG;IACI,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;IAI9G,4GAA4G;IAC5G,aAAoB,YAAY,IAAI,eAAe,CAAC;IAEpD;;;OAGG;IACI,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;CAC9C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TerrainMeshProvider.js","sourceRoot":"","sources":["../../../../src/tile/map/TerrainMeshProvider.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,+EAA4E;
|
|
1
|
+
{"version":3,"file":"TerrainMeshProvider.js","sourceRoot":"","sources":["../../../../src/tile/map/TerrainMeshProvider.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,+EAA4E;AAuD5E;;;;;;;;;;GAUG;AACH,MAAsB,mBAAmB;IAWvC;;;OAGG;IACI,YAAY,CAAC,MAAwB,EAAE,GAAmB,IAAU,CAAC;IAE5E;;;OAGG;IACI,eAAe,CAAC,OAAe;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAKD;;;OAGG;IACI,mBAAmB,CAAC,MAAc,EAAE,SAA4B,EAAE,MAAe;QACtF,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,qDAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,qDAAyB,CAAC,QAAQ,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;IAC3J,CAAC;IAKD;;;OAGG;IACI,aAAa,CAAC,KAAc,IAAa,OAAO,KAAK,CAAC,CAAC,CAAC;CAChE;AA5CD,kDA4CC","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 { Range1d } from \"@itwin/core-geometry\";\r\nimport { ApproximateTerrainHeights } from \"../../ApproximateTerrainHeights\";\r\nimport { ScreenViewport } from \"../../Viewport\";\r\nimport { RealityMeshParams } from \"../../render/RealityMeshParams\";\r\nimport {\r\n MapCartoRectangle, MapTile, MapTilingScheme, QuadId,\r\n} from \"../internal\";\r\n\r\n/** Options supplied to [[TerrainProvider.createTerrainMeshProvider]] to construct a [[TerrainMeshProvider]].\r\n * @public\r\n */\r\nexport interface TerrainMeshProviderOptions {\r\n /** A scale factor to be applied to the height of the terrain meshes.\r\n * @see [TerrainSettings.exaggeration]($common).\r\n */\r\n exaggeration: number;\r\n /** If true, the meshes should include \"skirts\" around their edges.\r\n * Skirts add new geometry to each of the four sides of a tile, extending downward. This helps to hide small cracks between adjacent tiles.\r\n * However, if transparency is applied to the terrain then, rather than hiding slight imperfections, the skirts themselves become visible.\r\n * So skirts are only requested when the terrain is displayed without transparency.\r\n *\r\n * A [[TerrainMeshProvider]] can ignore the request for skirts if it considers the risk of visible cracks acceptable.\r\n */\r\n wantSkirts: boolean;\r\n /** If true, each vertex of the terrain meshes should include a normal vector. Normals are requested when lighting or [ThematicDisplay]($common) are applied\r\n * to the terrain.\r\n *\r\n * A [[TerrainmeshProvider can ignore the request to produce normals, but doing so will prevent lighting and thematic display from applying to its terrain meshes.\r\n */\r\n wantNormals: boolean;\r\n /** Optionally identifies a specific terrain data source supplied by the [[TerrainMeshProvider]]. */\r\n dataSource?: string;\r\n}\r\n\r\n/** Arguments supplied to [[TerrainMeshProvider.requestMeshData]].\r\n * @public\r\n */\r\nexport interface RequestMeshDataArgs {\r\n /** The tile for which the terrain mesh is being requested. */\r\n tile: MapTile;\r\n /** Returns true if the request has been cancelled. Check this after performing an asynchronous action, and abort `requestMeshData` if it returns true. */\r\n isCanceled(): boolean;\r\n}\r\n\r\n/** Arguments supplied to [[TerrainMeshProvider.readMesh]].\r\n * @public\r\n */\r\nexport interface ReadMeshArgs {\r\n /** The mesh data obtained from [[TerrainMeshProvider.requestMeshData]]. */\r\n data: any;\r\n /** The tile for which the terrain mesh is being generated. */\r\n tile: MapTile;\r\n /** Returns true if the request has been cancelled. Check this after performing an asynchronous action, and abort `readMesh` if it returns true. */\r\n isCanceled(): boolean;\r\n}\r\n\r\n/** Provides 3d meshes representing terrain for display in a [[Viewport]].\r\n * Each mesh represents the terrain within a rectangular region of the Earth associated with a [[MapTile]].\r\n * The display system drapes background map imagery onto these meshes.\r\n * `TerrainMeshProvider`s are obtained from [[TerrainProvider]]s.\r\n * @note A terrain mesh provider is expected to produce terrain for all areas of the globe. If it lacks terrain data for an area of the globe,\r\n * it might choose to fall back to producing smooth terrain using an [[EllipsoidTerrainProvider]].\r\n * @see [[EllipsoidTerrainProvider]] for an example implementation that provides smooth terrain meshes.\r\n * @see [BingTerrainMeshProvider](https://github.com/iTwin/itwinjs-core/blob/master/test-apps/display-test-app/src/frontend/BingTerrainProvider.ts) for an example\r\n * implementation that produces 3d terrain meshes from elevations provided by [[BingElevationProvider]].\r\n * @public\r\n */\r\nexport abstract class TerrainMeshProvider {\r\n /** Obtain a representation of the terrain for a specific [[MapTile]]. The result will subsequently be supplied to [[readMesh]] to produce the mesh.\r\n * Return `undefined` if no mesh data could be obtained.\r\n */\r\n public abstract requestMeshData(args: RequestMeshDataArgs): Promise<any>;\r\n\r\n /** Convert the terrain data supplied by [[requestMeshData]] into a terrain mesh.\r\n * @see [[RealityMeshParamsBuilder]] to simplify the process of creating the mesh.\r\n */\r\n public abstract readMesh(args: ReadMeshArgs): Promise<RealityMeshParams | undefined>;\r\n\r\n /** Add attribution logo cards for the terrain data supplied by this provider to the [[Viewport]]'s logo div.\r\n * For example, a provider that produces meshes from [Bing Maps](https://docs.microsoft.com/en-us/bingmaps/rest-services/elevations/) would be required to\r\n * disclose any copyrighted data used in the production of those meshes.\r\n */\r\n public addLogoCards(_cards: HTMLTableElement, _vp: ScreenViewport): void { }\r\n\r\n /** Return whether terrain data can be obtained for the [[MapTile]] specified by `quadId`. If it returns false, a terrain mesh will instead be produced for\r\n * that tile by up-sampling the terrain mesh provided by its parent tile.\r\n * The default implementation returns `true`.\r\n */\r\n public isTileAvailable(_quadId: QuadId): boolean {\r\n return true;\r\n }\r\n\r\n /** Returns the maximum level of detail of the terrain meshes. */\r\n public abstract get maxDepth(): number;\r\n\r\n /** Returns the minimum and maximum elevation of the terrain within the specified region of the Earth.\r\n * This range is used for culling terrain meshes that do not intersect the view frustum.\r\n * The default implementation uses a fast approximation.\r\n */\r\n public getChildHeightRange(quadId: QuadId, rectangle: MapCartoRectangle, parent: MapTile): Range1d | undefined {\r\n return (quadId.level < ApproximateTerrainHeights.maxLevel) ? ApproximateTerrainHeights.instance.getMinimumMaximumHeights(rectangle) : parent.heightRange;\r\n }\r\n\r\n /** The tiling scheme used by this provider to convert between tile coordinates and geodetic coordinates. */\r\n public abstract get tilingScheme(): MapTilingScheme;\r\n\r\n /** Returns true if the specified tile should always be loaded. Some tiles contain required metadata and hence should always be loaded.\r\n * For example, a parent tile might contain information about the availability or height ranges of its child tiles that can be used to\r\n * implement [[isTileAvailable]] or [[getChildHeightRange]], respectively.\r\n */\r\n public forceTileLoad(_tile: MapTile): boolean { return false; }\r\n}\r\n"]}
|
|
@@ -97,7 +97,7 @@ export class RealityDataSourceCesiumIonAssetImpl {
|
|
|
97
97
|
// The following is only if the reality data is not stored on PW Context Share.
|
|
98
98
|
const cesiumAsset = CesiumIonAssetProvider.parseCesiumUrl(url);
|
|
99
99
|
if (cesiumAsset) {
|
|
100
|
-
const tokenAndUrl = await getCesiumAccessTokenAndEndpointUrl(cesiumAsset.id
|
|
100
|
+
const tokenAndUrl = await getCesiumAccessTokenAndEndpointUrl(`${cesiumAsset.id}`, cesiumAsset.key);
|
|
101
101
|
if (tokenAndUrl.url && tokenAndUrl.token) {
|
|
102
102
|
url = tokenAndUrl.url;
|
|
103
103
|
this._requestAuthorization = `Bearer ${tokenAndUrl.token}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RealityDataSourceCesiumIonAssetImpl.js","sourceRoot":"","sources":["../../src/RealityDataSourceCesiumIonAssetImpl.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\nimport { request } from \"./request/Request\";\r\nimport { assert, BentleyStatus, GuidString } from \"@itwin/core-bentley\";\r\nimport { IModelError, RealityData, RealityDataProvider, RealityDataSourceKey, RealityDataSourceProps } from \"@itwin/core-common\";\r\nimport { CesiumIonAssetProvider, getCesiumAccessTokenAndEndpointUrl, getCesiumAssetUrl, getCesiumOSMBuildingsUrl } from \"./tile/internal\";\r\nimport { PublisherProductInfo, RealityDataSource, SpatialLocationAndExtents } from \"./RealityDataSource\";\r\n\r\n/** This class provides access to the reality data provider services.\r\n * It encapsulates access to a reality data weiter it be from local access, http or ProjectWise Context Share.\r\n * The key provided at the creation determines if this is ProjectWise Context Share reference.\r\n * If not then it is considered local (ex: C:\\temp\\TileRoot.json) or plain http access (http://someserver.com/data/TileRoot.json)\r\n * There is a one to one relationship between a reality data and the instances of present class.\r\n* @internal\r\n*/\r\nexport class RealityDataSourceCesiumIonAssetImpl implements RealityDataSource {\r\n public readonly key: RealityDataSourceKey;\r\n /** The URL that supplies the 3d tiles for displaying the reality model. */\r\n private _tilesetUrl: string | undefined;\r\n /** For use by all Reality Data. For RD stored on PW Context Share, represents the portion from the root of the Azure Blob Container*/\r\n private _baseUrl: string = \"\";\r\n /** Request authorization for non PW ContextShare requests.*/\r\n private _requestAuthorization?: string;\r\n\r\n /** Construct a new reality data source.\r\n * @param props JSON representation of the reality data source\r\n */\r\n protected constructor(props: RealityDataSourceProps) {\r\n assert(props.sourceKey.provider === RealityDataProvider.CesiumIonAsset);\r\n this.key = props.sourceKey;\r\n }\r\n\r\n /**\r\n * Create an instance of this class from a source key and iTwin context/\r\n */\r\n public static async createFromKey(sourceKey: RealityDataSourceKey, iTwinId: GuidString | undefined): Promise<RealityDataSource | undefined> {\r\n if (sourceKey.provider !== RealityDataProvider.CesiumIonAsset)\r\n return undefined;\r\n const rdSource = new RealityDataSourceCesiumIonAssetImpl({ sourceKey });\r\n let tilesetUrl: string | undefined;\r\n try {\r\n tilesetUrl = await rdSource.getServiceUrl(iTwinId);\r\n } catch (e) {\r\n }\r\n\r\n return (tilesetUrl !== undefined) ? rdSource : undefined;\r\n }\r\n\r\n public get isContextShare(): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Returns Reality Data if available\r\n */\r\n public get realityData(): RealityData | undefined {\r\n return undefined;\r\n }\r\n public get realityDataId(): string | undefined {\r\n return undefined;\r\n }\r\n /**\r\n * Returns Reality Data type if available\r\n */\r\n public get realityDataType(): string | undefined {\r\n return undefined;\r\n }\r\n\r\n // This is to set the root url from the provided root document path.\r\n // If the root document is stored on PW Context Share then the root document property of the Reality Data is provided,\r\n // otherwise the full path to root document is given.\r\n // The base URL contains the base URL from which tile relative path are constructed.\r\n // The tile's path root will need to be reinserted for child tiles to return a 200\r\n private setBaseUrl(url: string): void {\r\n const urlParts = url.split(\"/\");\r\n urlParts.pop();\r\n if (urlParts.length === 0)\r\n this._baseUrl = \"\";\r\n else\r\n this._baseUrl = `${urlParts.join(\"/\")}/`;\r\n }\r\n\r\n /**\r\n * This method returns the URL to access the actual 3d tiles from the service provider.\r\n * @returns string containing the URL to reality data.\r\n */\r\n public async getServiceUrl(_iTwinId: GuidString | undefined): Promise<string | undefined> {\r\n // If url was not resolved - resolve it\r\n this._tilesetUrl = this.key.id;\r\n if (this.key.id === CesiumIonAssetProvider.osmBuildingId) {\r\n this._tilesetUrl = getCesiumOSMBuildingsUrl();\r\n } else {\r\n const parsedId = CesiumIonAssetProvider.parseCesiumUrl(this.key.id);\r\n if (parsedId) {\r\n this._tilesetUrl = getCesiumAssetUrl(parsedId.id, parsedId.key);\r\n }\r\n }\r\n\r\n return this._tilesetUrl;\r\n }\r\n\r\n public async getRootDocument(iTwinId: GuidString | undefined): Promise<any> {\r\n let url = await this.getServiceUrl(iTwinId);\r\n if (!url)\r\n throw new IModelError(BentleyStatus.ERROR, \"Unable to get service url\");\r\n\r\n // The following is only if the reality data is not stored on PW Context Share.\r\n const cesiumAsset = CesiumIonAssetProvider.parseCesiumUrl(url);\r\n if (cesiumAsset) {\r\n const tokenAndUrl = await getCesiumAccessTokenAndEndpointUrl(cesiumAsset.id, cesiumAsset.key);\r\n if (tokenAndUrl.url && tokenAndUrl.token) {\r\n url = tokenAndUrl.url;\r\n this._requestAuthorization = `Bearer ${tokenAndUrl.token}`;\r\n }\r\n }\r\n\r\n // The following is only if the reality data is not stored on PW Context Share.\r\n this.setBaseUrl(url);\r\n const headers = { authorization: this._requestAuthorization };\r\n\r\n return request(url, \"json\", { headers });\r\n }\r\n\r\n /**\r\n * Returns the tile content. The path to the tile is relative to the base url of present reality data whatever the type.\r\n */\r\n public async getTileContent(name: string): Promise<ArrayBuffer> {\r\n const tileUrl = this._baseUrl + name;\r\n const headers = { authorization: this._requestAuthorization };\r\n\r\n return request(tileUrl, \"arraybuffer\", { headers });\r\n }\r\n\r\n /**\r\n * Returns the tile content in json format. The path to the tile is relative to the base url of present reality data whatever the type.\r\n */\r\n public async getTileJson(name: string): Promise<any> {\r\n const tileUrl = this._baseUrl + name;\r\n const headers = { authorization: this._requestAuthorization };\r\n\r\n return request(tileUrl, \"json\", { headers });\r\n }\r\n\r\n public getTileContentType(url: string): \"tile\" | \"tileset\" {\r\n return url.endsWith(\"json\") ? \"tileset\" : \"tile\";\r\n }\r\n\r\n /**\r\n * Gets spatial location and extents of this reality data source\r\n * @returns spatial location and extents\r\n * @internal\r\n */\r\n public async getSpatialLocationAndExtents(): Promise<SpatialLocationAndExtents | undefined> {\r\n // Cesium Ion asset we currenlty support are unbound (cover all earth)\r\n const spatialLocation: SpatialLocationAndExtents | undefined = undefined;\r\n return spatialLocation;\r\n }\r\n /**\r\n * Gets information to identify the product and engine that create this reality data\r\n * Will return undefined if cannot be resolved\r\n * @returns information to identify the product and engine that create this reality data\r\n * @alpha\r\n */\r\n public async getPublisherProductInfo(): Promise<PublisherProductInfo | undefined> {\r\n let publisherInfo: PublisherProductInfo | undefined;\r\n return publisherInfo;\r\n }\r\n}\r\n\r\n"]}
|
|
1
|
+
{"version":3,"file":"RealityDataSourceCesiumIonAssetImpl.js","sourceRoot":"","sources":["../../src/RealityDataSourceCesiumIonAssetImpl.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\nimport { request } from \"./request/Request\";\r\nimport { assert, BentleyStatus, GuidString } from \"@itwin/core-bentley\";\r\nimport { IModelError, RealityData, RealityDataProvider, RealityDataSourceKey, RealityDataSourceProps } from \"@itwin/core-common\";\r\nimport { CesiumIonAssetProvider, getCesiumAccessTokenAndEndpointUrl, getCesiumAssetUrl, getCesiumOSMBuildingsUrl } from \"./tile/internal\";\r\nimport { PublisherProductInfo, RealityDataSource, SpatialLocationAndExtents } from \"./RealityDataSource\";\r\n\r\n/** This class provides access to the reality data provider services.\r\n * It encapsulates access to a reality data weiter it be from local access, http or ProjectWise Context Share.\r\n * The key provided at the creation determines if this is ProjectWise Context Share reference.\r\n * If not then it is considered local (ex: C:\\temp\\TileRoot.json) or plain http access (http://someserver.com/data/TileRoot.json)\r\n * There is a one to one relationship between a reality data and the instances of present class.\r\n* @internal\r\n*/\r\nexport class RealityDataSourceCesiumIonAssetImpl implements RealityDataSource {\r\n public readonly key: RealityDataSourceKey;\r\n /** The URL that supplies the 3d tiles for displaying the reality model. */\r\n private _tilesetUrl: string | undefined;\r\n /** For use by all Reality Data. For RD stored on PW Context Share, represents the portion from the root of the Azure Blob Container*/\r\n private _baseUrl: string = \"\";\r\n /** Request authorization for non PW ContextShare requests.*/\r\n private _requestAuthorization?: string;\r\n\r\n /** Construct a new reality data source.\r\n * @param props JSON representation of the reality data source\r\n */\r\n protected constructor(props: RealityDataSourceProps) {\r\n assert(props.sourceKey.provider === RealityDataProvider.CesiumIonAsset);\r\n this.key = props.sourceKey;\r\n }\r\n\r\n /**\r\n * Create an instance of this class from a source key and iTwin context/\r\n */\r\n public static async createFromKey(sourceKey: RealityDataSourceKey, iTwinId: GuidString | undefined): Promise<RealityDataSource | undefined> {\r\n if (sourceKey.provider !== RealityDataProvider.CesiumIonAsset)\r\n return undefined;\r\n const rdSource = new RealityDataSourceCesiumIonAssetImpl({ sourceKey });\r\n let tilesetUrl: string | undefined;\r\n try {\r\n tilesetUrl = await rdSource.getServiceUrl(iTwinId);\r\n } catch (e) {\r\n }\r\n\r\n return (tilesetUrl !== undefined) ? rdSource : undefined;\r\n }\r\n\r\n public get isContextShare(): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Returns Reality Data if available\r\n */\r\n public get realityData(): RealityData | undefined {\r\n return undefined;\r\n }\r\n public get realityDataId(): string | undefined {\r\n return undefined;\r\n }\r\n /**\r\n * Returns Reality Data type if available\r\n */\r\n public get realityDataType(): string | undefined {\r\n return undefined;\r\n }\r\n\r\n // This is to set the root url from the provided root document path.\r\n // If the root document is stored on PW Context Share then the root document property of the Reality Data is provided,\r\n // otherwise the full path to root document is given.\r\n // The base URL contains the base URL from which tile relative path are constructed.\r\n // The tile's path root will need to be reinserted for child tiles to return a 200\r\n private setBaseUrl(url: string): void {\r\n const urlParts = url.split(\"/\");\r\n urlParts.pop();\r\n if (urlParts.length === 0)\r\n this._baseUrl = \"\";\r\n else\r\n this._baseUrl = `${urlParts.join(\"/\")}/`;\r\n }\r\n\r\n /**\r\n * This method returns the URL to access the actual 3d tiles from the service provider.\r\n * @returns string containing the URL to reality data.\r\n */\r\n public async getServiceUrl(_iTwinId: GuidString | undefined): Promise<string | undefined> {\r\n // If url was not resolved - resolve it\r\n this._tilesetUrl = this.key.id;\r\n if (this.key.id === CesiumIonAssetProvider.osmBuildingId) {\r\n this._tilesetUrl = getCesiumOSMBuildingsUrl();\r\n } else {\r\n const parsedId = CesiumIonAssetProvider.parseCesiumUrl(this.key.id);\r\n if (parsedId) {\r\n this._tilesetUrl = getCesiumAssetUrl(parsedId.id, parsedId.key);\r\n }\r\n }\r\n\r\n return this._tilesetUrl;\r\n }\r\n\r\n public async getRootDocument(iTwinId: GuidString | undefined): Promise<any> {\r\n let url = await this.getServiceUrl(iTwinId);\r\n if (!url)\r\n throw new IModelError(BentleyStatus.ERROR, \"Unable to get service url\");\r\n\r\n // The following is only if the reality data is not stored on PW Context Share.\r\n const cesiumAsset = CesiumIonAssetProvider.parseCesiumUrl(url);\r\n if (cesiumAsset) {\r\n const tokenAndUrl = await getCesiumAccessTokenAndEndpointUrl(`${cesiumAsset.id}`, cesiumAsset.key);\r\n if (tokenAndUrl.url && tokenAndUrl.token) {\r\n url = tokenAndUrl.url;\r\n this._requestAuthorization = `Bearer ${tokenAndUrl.token}`;\r\n }\r\n }\r\n\r\n // The following is only if the reality data is not stored on PW Context Share.\r\n this.setBaseUrl(url);\r\n const headers = { authorization: this._requestAuthorization };\r\n\r\n return request(url, \"json\", { headers });\r\n }\r\n\r\n /**\r\n * Returns the tile content. The path to the tile is relative to the base url of present reality data whatever the type.\r\n */\r\n public async getTileContent(name: string): Promise<ArrayBuffer> {\r\n const tileUrl = this._baseUrl + name;\r\n const headers = { authorization: this._requestAuthorization };\r\n\r\n return request(tileUrl, \"arraybuffer\", { headers });\r\n }\r\n\r\n /**\r\n * Returns the tile content in json format. The path to the tile is relative to the base url of present reality data whatever the type.\r\n */\r\n public async getTileJson(name: string): Promise<any> {\r\n const tileUrl = this._baseUrl + name;\r\n const headers = { authorization: this._requestAuthorization };\r\n\r\n return request(tileUrl, \"json\", { headers });\r\n }\r\n\r\n public getTileContentType(url: string): \"tile\" | \"tileset\" {\r\n return url.endsWith(\"json\") ? \"tileset\" : \"tile\";\r\n }\r\n\r\n /**\r\n * Gets spatial location and extents of this reality data source\r\n * @returns spatial location and extents\r\n * @internal\r\n */\r\n public async getSpatialLocationAndExtents(): Promise<SpatialLocationAndExtents | undefined> {\r\n // Cesium Ion asset we currenlty support are unbound (cover all earth)\r\n const spatialLocation: SpatialLocationAndExtents | undefined = undefined;\r\n return spatialLocation;\r\n }\r\n /**\r\n * Gets information to identify the product and engine that create this reality data\r\n * Will return undefined if cannot be resolved\r\n * @returns information to identify the product and engine that create this reality data\r\n * @alpha\r\n */\r\n public async getPublisherProductInfo(): Promise<PublisherProductInfo | undefined> {\r\n let publisherInfo: PublisherProductInfo | undefined;\r\n return publisherInfo;\r\n }\r\n}\r\n\r\n"]}
|