@itwin/core-frontend 4.0.0-dev.72 → 4.0.0-dev.75
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/DisplayStyleState.d.ts +35 -53
- package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
- package/lib/cjs/DisplayStyleState.js +51 -101
- package/lib/cjs/DisplayStyleState.js.map +1 -1
- package/lib/cjs/DrawingViewState.d.ts.map +1 -1
- package/lib/cjs/DrawingViewState.js +1 -2
- package/lib/cjs/DrawingViewState.js.map +1 -1
- package/lib/cjs/IModelApp.d.ts +1 -3
- package/lib/cjs/IModelApp.d.ts.map +1 -1
- package/lib/cjs/IModelApp.js +1 -3
- package/lib/cjs/IModelApp.js.map +1 -1
- package/lib/cjs/IModelConnection.d.ts.map +1 -1
- package/lib/cjs/IModelConnection.js +4 -6
- package/lib/cjs/IModelConnection.js.map +1 -1
- package/lib/cjs/SheetViewState.d.ts.map +1 -1
- package/lib/cjs/SheetViewState.js +1 -2
- package/lib/cjs/SheetViewState.js.map +1 -1
- package/lib/cjs/ViewCreator2d.d.ts.map +1 -1
- package/lib/cjs/ViewCreator2d.js +2 -4
- package/lib/cjs/ViewCreator2d.js.map +1 -1
- package/lib/cjs/ViewCreator3d.d.ts.map +1 -1
- package/lib/cjs/ViewCreator3d.js +1 -2
- package/lib/cjs/ViewCreator3d.js.map +1 -1
- package/lib/cjs/Viewport.d.ts +22 -11
- package/lib/cjs/Viewport.d.ts.map +1 -1
- package/lib/cjs/Viewport.js +60 -12
- package/lib/cjs/Viewport.js.map +1 -1
- package/lib/cjs/tile/RealityTile.d.ts +12 -5
- package/lib/cjs/tile/RealityTile.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTile.js +149 -57
- package/lib/cjs/tile/RealityTile.js.map +1 -1
- package/lib/cjs/tile/RealityTileTree.d.ts +1 -3
- package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTileTree.js +8 -21
- package/lib/cjs/tile/RealityTileTree.js.map +1 -1
- package/lib/cjs/tile/TileUsageMarker.d.ts +4 -0
- package/lib/cjs/tile/TileUsageMarker.d.ts.map +1 -1
- package/lib/cjs/tile/TileUsageMarker.js +9 -1
- package/lib/cjs/tile/TileUsageMarker.js.map +1 -1
- package/lib/cjs/tile/map/MapFeatureInfo.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapFeatureInfo.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerAuthentication.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerAuthentication.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts +15 -8
- package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerFormatRegistry.js +12 -7
- package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +23 -6
- package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.js +24 -8
- package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerSources.d.ts +4 -5
- package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerSources.js +3 -4
- package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
- package/lib/cjs/tile/map/MapTile.d.ts +3 -1
- package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTile.js +4 -0
- package/lib/cjs/tile/map/MapTile.js.map +1 -1
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts +4 -3
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.js +4 -4
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
- package/lib/cjs/tools/ElementSetTool.d.ts.map +1 -1
- package/lib/cjs/tools/ElementSetTool.js +1 -2
- package/lib/cjs/tools/ElementSetTool.js.map +1 -1
- package/lib/esm/DisplayStyleState.d.ts +35 -53
- package/lib/esm/DisplayStyleState.d.ts.map +1 -1
- package/lib/esm/DisplayStyleState.js +54 -104
- package/lib/esm/DisplayStyleState.js.map +1 -1
- package/lib/esm/DrawingViewState.d.ts.map +1 -1
- package/lib/esm/DrawingViewState.js +1 -2
- package/lib/esm/DrawingViewState.js.map +1 -1
- package/lib/esm/IModelApp.d.ts +1 -3
- package/lib/esm/IModelApp.d.ts.map +1 -1
- package/lib/esm/IModelApp.js +1 -3
- package/lib/esm/IModelApp.js.map +1 -1
- package/lib/esm/IModelConnection.d.ts.map +1 -1
- package/lib/esm/IModelConnection.js +4 -6
- package/lib/esm/IModelConnection.js.map +1 -1
- package/lib/esm/SheetViewState.d.ts.map +1 -1
- package/lib/esm/SheetViewState.js +1 -2
- package/lib/esm/SheetViewState.js.map +1 -1
- package/lib/esm/ViewCreator2d.d.ts.map +1 -1
- package/lib/esm/ViewCreator2d.js +2 -4
- package/lib/esm/ViewCreator2d.js.map +1 -1
- package/lib/esm/ViewCreator3d.d.ts.map +1 -1
- package/lib/esm/ViewCreator3d.js +1 -2
- package/lib/esm/ViewCreator3d.js.map +1 -1
- package/lib/esm/Viewport.d.ts +22 -11
- package/lib/esm/Viewport.d.ts.map +1 -1
- package/lib/esm/Viewport.js +63 -15
- package/lib/esm/Viewport.js.map +1 -1
- package/lib/esm/tile/RealityTile.d.ts +12 -5
- package/lib/esm/tile/RealityTile.d.ts.map +1 -1
- package/lib/esm/tile/RealityTile.js +149 -57
- package/lib/esm/tile/RealityTile.js.map +1 -1
- package/lib/esm/tile/RealityTileTree.d.ts +1 -3
- package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/esm/tile/RealityTileTree.js +11 -24
- package/lib/esm/tile/RealityTileTree.js.map +1 -1
- package/lib/esm/tile/TileUsageMarker.d.ts +4 -0
- package/lib/esm/tile/TileUsageMarker.d.ts.map +1 -1
- package/lib/esm/tile/TileUsageMarker.js +9 -1
- package/lib/esm/tile/TileUsageMarker.js.map +1 -1
- package/lib/esm/tile/map/MapFeatureInfo.d.ts.map +1 -1
- package/lib/esm/tile/map/MapFeatureInfo.js.map +1 -1
- package/lib/esm/tile/map/MapLayerAuthentication.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerAuthentication.js.map +1 -1
- package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts +15 -8
- package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerFormatRegistry.js +12 -7
- package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +23 -6
- package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.js +24 -8
- package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/MapLayerSources.d.ts +4 -5
- package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerSources.js +3 -4
- package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
- package/lib/esm/tile/map/MapTile.d.ts +3 -1
- package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTile.js +4 -0
- package/lib/esm/tile/map/MapTile.js.map +1 -1
- package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts +4 -3
- package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTiledGraphicsProvider.js +4 -4
- package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
- package/lib/esm/tools/ElementSetTool.d.ts.map +1 -1
- package/lib/esm/tools/ElementSetTool.js +1 -2
- package/lib/esm/tools/ElementSetTool.js.map +1 -1
- package/package.json +19 -19
|
@@ -19,13 +19,13 @@ const internal_1 = require("./internal");
|
|
|
19
19
|
class TraversalDetails {
|
|
20
20
|
constructor() {
|
|
21
21
|
this.queuedChildren = new Array();
|
|
22
|
-
this.childrenLoading = false;
|
|
23
22
|
this.childrenSelected = false;
|
|
23
|
+
this.shouldSelectParent = false;
|
|
24
24
|
}
|
|
25
25
|
initialize() {
|
|
26
26
|
this.queuedChildren.length = 0;
|
|
27
|
-
this.childrenLoading = false;
|
|
28
27
|
this.childrenSelected = false;
|
|
28
|
+
this.shouldSelectParent = false;
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
exports.TraversalDetails = TraversalDetails;
|
|
@@ -45,11 +45,11 @@ class TraversalChildrenDetails {
|
|
|
45
45
|
}
|
|
46
46
|
combine(parentDetails) {
|
|
47
47
|
parentDetails.queuedChildren.length = 0;
|
|
48
|
-
parentDetails.childrenLoading = false;
|
|
49
48
|
parentDetails.childrenSelected = false;
|
|
49
|
+
parentDetails.shouldSelectParent = false;
|
|
50
50
|
for (const child of this._childDetails) {
|
|
51
|
-
parentDetails.childrenLoading = parentDetails.childrenLoading || child.childrenLoading;
|
|
52
51
|
parentDetails.childrenSelected = parentDetails.childrenSelected || child.childrenSelected;
|
|
52
|
+
parentDetails.shouldSelectParent = parentDetails.shouldSelectParent || child.shouldSelectParent;
|
|
53
53
|
for (const queuedChild of child.queuedChildren)
|
|
54
54
|
parentDetails.queuedChildren.push(queuedChild);
|
|
55
55
|
}
|
|
@@ -70,14 +70,15 @@ class TraversalSelectionContext {
|
|
|
70
70
|
selectOrQueue(tile, args, traversalDetails) {
|
|
71
71
|
tile.selectSecondaryTiles(args, this);
|
|
72
72
|
tile.markUsed(args);
|
|
73
|
+
traversalDetails.shouldSelectParent = true;
|
|
73
74
|
if (tile.isReady) {
|
|
74
75
|
args.markReady(tile);
|
|
75
76
|
this.selected.push(tile);
|
|
76
77
|
tile.markDisplayed();
|
|
77
78
|
this.displayedDescendants.push((traversalDetails.childrenSelected) ? traversalDetails.queuedChildren.slice() : []);
|
|
78
79
|
traversalDetails.queuedChildren.length = 0;
|
|
79
|
-
traversalDetails.childrenLoading = false;
|
|
80
80
|
traversalDetails.childrenSelected = true;
|
|
81
|
+
traversalDetails.shouldSelectParent = false;
|
|
81
82
|
}
|
|
82
83
|
else if (!tile.isNotFound) {
|
|
83
84
|
traversalDetails.queuedChildren.push(tile);
|
|
@@ -105,7 +106,6 @@ class TraversalSelectionContext {
|
|
|
105
106
|
}
|
|
106
107
|
}
|
|
107
108
|
exports.TraversalSelectionContext = TraversalSelectionContext;
|
|
108
|
-
const scratchFrustum = new core_common_1.Frustum();
|
|
109
109
|
const scratchCarto = core_common_1.Cartographic.createZero();
|
|
110
110
|
const scratchPoint = core_geometry_1.Point3d.createZero(), scratchOrigin = core_geometry_1.Point3d.createZero();
|
|
111
111
|
const scratchRange = core_geometry_1.Range3d.createNull();
|
|
@@ -165,7 +165,7 @@ class RealityTileTree extends internal_1.TileTree {
|
|
|
165
165
|
/** @internal */
|
|
166
166
|
prune() {
|
|
167
167
|
const olderThan = core_bentley_1.BeTimePoint.now().minus(this.expirationTime);
|
|
168
|
-
this.rootTile.purgeContents(olderThan);
|
|
168
|
+
this.rootTile.purgeContents(olderThan, !core_bentley_1.ProcessDetector.isMobileBrowser);
|
|
169
169
|
}
|
|
170
170
|
/** @internal */
|
|
171
171
|
draw(args) {
|
|
@@ -352,7 +352,7 @@ class RealityTileTree extends internal_1.TileTree {
|
|
|
352
352
|
if (baseDepth > 0) // Maps may force loading of low level globe tiles.
|
|
353
353
|
rootTile.preloadRealityTilesAtDepth(baseDepth, context, args);
|
|
354
354
|
if (!freezeTiles)
|
|
355
|
-
|
|
355
|
+
rootTile.preloadProtectedTiles(args, context);
|
|
356
356
|
}
|
|
357
357
|
if (!freezeTiles)
|
|
358
358
|
for (const tile of context.missing) {
|
|
@@ -383,19 +383,6 @@ class RealityTileTree extends internal_1.TileTree {
|
|
|
383
383
|
return selected;
|
|
384
384
|
}
|
|
385
385
|
/** @internal */
|
|
386
|
-
preloadTilesForScene(args, context, frustumTransform) {
|
|
387
|
-
const preloadFrustum = args.viewingSpace.getPreloadFrustum(frustumTransform, scratchFrustum);
|
|
388
|
-
const preloadFrustumPlanes = core_common_1.FrustumPlanes.fromFrustum(preloadFrustum);
|
|
389
|
-
const worldToNpc = preloadFrustum.toMap4d();
|
|
390
|
-
const preloadWorldToViewMap = args.viewingSpace.calcNpcToView().multiplyMapMap(worldToNpc);
|
|
391
|
-
const preloadArgs = new internal_1.RealityTileDrawArgs(args, preloadWorldToViewMap, preloadFrustumPlanes);
|
|
392
|
-
if (context.preloadDebugBuilder) {
|
|
393
|
-
context.preloadDebugBuilder.setSymbology(core_common_1.ColorDef.blue, core_common_1.ColorDef.blue, 2, 0);
|
|
394
|
-
context.preloadDebugBuilder.addFrustum(preloadFrustum);
|
|
395
|
-
}
|
|
396
|
-
this.rootTile.preloadTilesInFrustum(preloadArgs, context, 2);
|
|
397
|
-
}
|
|
398
|
-
/** @internal */
|
|
399
386
|
logTiles(label, tiles) {
|
|
400
387
|
let depthString = "";
|
|
401
388
|
let min = 10000, max = -10000;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RealityTileTree.js","sourceRoot":"","sources":["../../../src/tile/RealityTileTree.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { assert, BeTimePoint } from \"@itwin/core-bentley\";\r\nimport {\r\n Matrix3d, Point3d, Range3d, Transform, Vector3d, XYZProps,\r\n} from \"@itwin/core-geometry\";\r\nimport { Cartographic, ColorDef, Frustum, FrustumPlanes, GeoCoordStatus, ViewFlagOverrides } from \"@itwin/core-common\";\r\nimport { BackgroundMapGeometry } from \"../BackgroundMapGeometry\";\r\nimport { GeoConverter } from \"../GeoServices\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { GraphicBranch } from \"../render/GraphicBranch\";\r\nimport { GraphicBuilder } from \"../render/GraphicBuilder\";\r\nimport { SceneContext } from \"../ViewContext\";\r\nimport {\r\n GraphicsCollectorDrawArgs, MapTile, RealityTile, RealityTileDrawArgs, RealityTileLoader, RealityTileParams, Tile, TileDrawArgs, TileGeometryCollector,\r\n TileGraphicType, TileParams, TileTree, TileTreeParams,\r\n} from \"./internal\";\r\n\r\n/** @internal */\r\nexport class TraversalDetails {\r\n public queuedChildren = new Array<Tile>();\r\n public childrenLoading = false;\r\n public childrenSelected = false;\r\n\r\n public initialize() {\r\n this.queuedChildren.length = 0;\r\n this.childrenLoading = false;\r\n this.childrenSelected = false;\r\n }\r\n}\r\n/** @internal */\r\nexport class TraversalChildrenDetails {\r\n private _childDetails: TraversalDetails[] = [];\r\n\r\n public initialize() {\r\n for (const child of this._childDetails)\r\n child.initialize();\r\n }\r\n public getChildDetail(index: number) {\r\n while (this._childDetails.length <= index)\r\n this._childDetails.push(new TraversalDetails());\r\n\r\n return this._childDetails[index];\r\n }\r\n\r\n public combine(parentDetails: TraversalDetails) {\r\n parentDetails.queuedChildren.length = 0;\r\n parentDetails.childrenLoading = false;\r\n parentDetails.childrenSelected = false;\r\n for (const child of this._childDetails) {\r\n parentDetails.childrenLoading = parentDetails.childrenLoading || child.childrenLoading;\r\n parentDetails.childrenSelected = parentDetails.childrenSelected || child.childrenSelected;\r\n for (const queuedChild of child.queuedChildren)\r\n parentDetails.queuedChildren.push(queuedChild);\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class TraversalSelectionContext {\r\n public preloaded = new Set<RealityTile>();\r\n public missing = new Array<RealityTile>();\r\n public get selectionCountExceeded() { return this._maxSelectionCount === undefined ? false : (this.missing.length + this.selected.length) > this._maxSelectionCount; } // Avoid selecting excessive number of tiles.\r\n constructor(public selected: Tile[], public displayedDescendants: Tile[][], public preloadDebugBuilder?: GraphicBuilder, private _maxSelectionCount?: number) { }\r\n\r\n public selectOrQueue(tile: RealityTile, args: TileDrawArgs, traversalDetails: TraversalDetails) {\r\n tile.selectSecondaryTiles(args, this);\r\n tile.markUsed(args);\r\n if (tile.isReady) {\r\n args.markReady(tile);\r\n this.selected.push(tile);\r\n tile.markDisplayed();\r\n this.displayedDescendants.push((traversalDetails.childrenSelected) ? traversalDetails.queuedChildren.slice() : []);\r\n traversalDetails.queuedChildren.length = 0;\r\n traversalDetails.childrenLoading = false;\r\n traversalDetails.childrenSelected = true;\r\n } else if (!tile.isNotFound) {\r\n traversalDetails.queuedChildren.push(tile);\r\n if (!tile.isLoaded)\r\n this.missing.push(tile);\r\n }\r\n }\r\n\r\n public preload(tile: RealityTile, args: TileDrawArgs): void {\r\n if (!this.preloaded.has(tile)) {\r\n if (this.preloadDebugBuilder)\r\n tile.addBoundingGraphic(this.preloadDebugBuilder, ColorDef.red);\r\n\r\n tile.markUsed(args);\r\n tile.selectSecondaryTiles(args, this);\r\n this.preloaded.add(tile);\r\n if (!tile.isNotFound && !tile.isLoaded)\r\n this.missing.push(tile);\r\n }\r\n }\r\n\r\n public select(tiles: RealityTile[], args: TileDrawArgs): void {\r\n for (const tile of tiles) {\r\n tile.markUsed(args);\r\n this.selected.push(tile);\r\n this.displayedDescendants.push([]);\r\n }\r\n }\r\n}\r\n\r\nconst scratchFrustum = new Frustum();\r\nconst scratchCarto = Cartographic.createZero();\r\nconst scratchPoint = Point3d.createZero(), scratchOrigin = Point3d.createZero();\r\nconst scratchRange = Range3d.createNull();\r\nconst scratchX = Vector3d.createZero(), scratchY = Vector3d.createZero(), scratchZ = Vector3d.createZero();\r\nconst scratchMatrix = Matrix3d.createZero(), scratchTransform = Transform.createZero();\r\n\r\ninterface ChildReprojection {\r\n child: RealityTile;\r\n ecefCenter: Point3d;\r\n dbPoints: Point3d[]; // Center, xEnd, yEnd, zEnd\r\n}\r\n\r\n/** @internal */\r\nexport interface RealityTileTreeParams extends TileTreeParams {\r\n readonly loader: RealityTileLoader;\r\n readonly yAxisUp?: boolean;\r\n readonly rootTile: RealityTileParams;\r\n readonly rootToEcef?: Transform;\r\n readonly gcsConverterAvailable: boolean;\r\n}\r\n\r\n/** Base class for a [[TileTree]] representing a reality model (e.g., a point cloud or photogrammetry mesh) or 3d terrain with map imagery.\r\n * The tiles within the tree are instances of [[RealityTile]]s.\r\n * @public\r\n */\r\nexport class RealityTileTree extends TileTree {\r\n /** @internal */\r\n public traversalChildrenByDepth: TraversalChildrenDetails[] = [];\r\n /** @internal */\r\n public readonly loader: RealityTileLoader;\r\n /** @internal */\r\n public readonly yAxisUp: boolean;\r\n /** @internal */\r\n public cartesianRange: Range3d;\r\n /** @internal */\r\n public cartesianTransitionDistance: number;\r\n /** @internal */\r\n protected _gcsConverter: GeoConverter | undefined;\r\n /** @internal */\r\n protected _rootTile: RealityTile;\r\n /** @internal */\r\n protected _rootToEcef?: Transform;\r\n /** @internal */\r\n protected _ecefToDb?: Transform;\r\n\r\n /** @internal */\r\n public constructor(params: RealityTileTreeParams) {\r\n super(params);\r\n this.loader = params.loader;\r\n this.yAxisUp = true === params.yAxisUp;\r\n this._rootTile = this.createTile(params.rootTile);\r\n this.cartesianRange = BackgroundMapGeometry.getCartesianRange(this.iModel);\r\n this.cartesianTransitionDistance = this.cartesianRange.diagonal().magnitudeXY() * .25; // Transition distance from elliptical to cartesian.\r\n this._gcsConverter = params.gcsConverterAvailable ? params.iModel.geoServices.getConverter(\"WGS84\") : undefined;\r\n if (params.rootToEcef) {\r\n this._rootToEcef = params.rootToEcef;\r\n const dbToRoot = this.iModelTransform.inverse();\r\n if (dbToRoot) {\r\n const dbToEcef = this._rootToEcef.multiplyTransformTransform(dbToRoot);\r\n this._ecefToDb = dbToEcef.inverse();\r\n }\r\n }\r\n }\r\n\r\n /** @internal */\r\n public get rootTile(): RealityTile { return this._rootTile; }\r\n /** @internal */\r\n public get is3d() { return true; }\r\n /** @internal */\r\n public get maxDepth() { return this.loader.maxDepth; }\r\n /** @internal */\r\n public get minDepth() { return this.loader.minDepth; }\r\n /** @internal */\r\n public override get isContentUnbounded() { return this.loader.isContentUnbounded; }\r\n /** @internal */\r\n public get isTransparent() { return false; }\r\n\r\n /** @internal */\r\n protected _selectTiles(args: TileDrawArgs): Tile[] { return this.selectRealityTiles(args, []); }\r\n /** @internal */\r\n public get viewFlagOverrides(): ViewFlagOverrides { return this.loader.viewFlagOverrides; }\r\n /** @internal */\r\n public override get parentsAndChildrenExclusive() { return this.loader.parentsAndChildrenExclusive; }\r\n\r\n /** @internal */\r\n public createTile(props: TileParams): RealityTile { return new RealityTile(props, this); }\r\n\r\n /** Collect tiles from this tile tree based on the criteria implemented by `collector`.\r\n * @internal\r\n */\r\n public override collectTileGeometry(collector: TileGeometryCollector): void {\r\n this.rootTile.collectTileGeometry(collector);\r\n }\r\n\r\n /** @internal */\r\n public prune(): void {\r\n const olderThan = BeTimePoint.now().minus(this.expirationTime);\r\n this.rootTile.purgeContents(olderThan);\r\n }\r\n\r\n /** @internal */\r\n public draw(args: TileDrawArgs): void {\r\n const displayedTileDescendants = new Array<RealityTile[]>();\r\n const debugControl = args.context.target.debugControl;\r\n const selectBuilder = (debugControl && debugControl.displayRealityTileRanges) ? args.context.createSceneGraphicBuilder() : undefined;\r\n const preloadDebugBuilder = (debugControl && debugControl.displayRealityTilePreload) ? args.context.createSceneGraphicBuilder() : undefined;\r\n const graphicTypeBranches = new Map<TileGraphicType, GraphicBranch>();\r\n\r\n const selectedTiles = this.selectRealityTiles(args, displayedTileDescendants, preloadDebugBuilder);\r\n args.processSelectedTiles(selectedTiles);\r\n let sortIndices;\r\n\r\n if (!this.parentsAndChildrenExclusive) {\r\n sortIndices = selectedTiles.map((_x, i) => i);\r\n sortIndices.sort((a, b) => selectedTiles[a].depth - selectedTiles[b].depth);\r\n }\r\n\r\n if (! (args instanceof GraphicsCollectorDrawArgs))\r\n this.collectClassifierGraphics(args, selectedTiles);\r\n\r\n assert(selectedTiles.length === displayedTileDescendants.length);\r\n for (let i = 0; i < selectedTiles.length; i++) {\r\n const index = sortIndices ? sortIndices[i] : i;\r\n const selectedTile = selectedTiles[index];\r\n const graphics = args.getTileGraphics(selectedTile);\r\n const tileGraphicType = selectedTile.graphicType;\r\n let targetBranch;\r\n if (undefined !== tileGraphicType && tileGraphicType !== args.context.graphicType) {\r\n if (!(targetBranch = graphicTypeBranches.get(tileGraphicType))) {\r\n graphicTypeBranches.set(tileGraphicType, targetBranch = new GraphicBranch(false));\r\n targetBranch.setViewFlagOverrides(args.graphics.viewFlagOverrides);\r\n targetBranch.symbologyOverrides = args.graphics.symbologyOverrides;\r\n }\r\n }\r\n\r\n if (!targetBranch)\r\n targetBranch = args.graphics;\r\n\r\n if (undefined !== graphics) {\r\n const displayedDescendants = displayedTileDescendants[index];\r\n if (0 === displayedDescendants.length || !this.loader.parentsAndChildrenExclusive || selectedTile.allChildrenIncluded(displayedDescendants)) {\r\n targetBranch.add(graphics);\r\n if (selectBuilder)\r\n selectedTile.addBoundingGraphic(selectBuilder, ColorDef.green);\r\n } else {\r\n if (selectBuilder)\r\n selectedTile.addBoundingGraphic(selectBuilder, ColorDef.red);\r\n\r\n for (const displayedDescendant of displayedDescendants) {\r\n const clipVector = displayedDescendant.getContentClip();\r\n if (selectBuilder)\r\n displayedDescendant.addBoundingGraphic(selectBuilder, ColorDef.blue);\r\n\r\n if (undefined === clipVector) {\r\n targetBranch.add(graphics);\r\n } else {\r\n clipVector.transformInPlace(args.location);\r\n if (!this.isTransparent)\r\n for (const primitive of clipVector.clips)\r\n for (const clipPlanes of primitive.fetchClipPlanesRef()!.convexSets)\r\n for (const plane of clipPlanes.planes)\r\n plane.offsetDistance(-displayedDescendant.radius * .05); // Overlap with existing (high resolution) tile slightly to avoid cracks.\r\n\r\n const branch = new GraphicBranch(false);\r\n branch.add(graphics);\r\n const clipVolume = args.context.target.renderSystem.createClipVolume(clipVector);\r\n targetBranch.add(args.context.createGraphicBranch(branch, Transform.createIdentity(), { clipVolume }));\r\n }\r\n }\r\n }\r\n if (preloadDebugBuilder)\r\n targetBranch.add(preloadDebugBuilder.finish());\r\n\r\n if (selectBuilder)\r\n targetBranch.add(selectBuilder.finish());\r\n\r\n const rangeGraphic = selectedTile.getRangeGraphic(args.context);\r\n if (undefined !== rangeGraphic)\r\n targetBranch.add(rangeGraphic);\r\n }\r\n }\r\n\r\n args.drawGraphics();\r\n for (const graphicTypeBranch of graphicTypeBranches) {\r\n args.drawGraphicsWithType(graphicTypeBranch[0], graphicTypeBranch[1]);\r\n }\r\n }\r\n\r\n /** @internal */\r\n protected collectClassifierGraphics(args: TileDrawArgs, selectedTiles: RealityTile[]) {\r\n const classifier = args.context.planarClassifiers.get(this.modelId);\r\n if (classifier)\r\n classifier.collectGraphics(args.context, { modelId: this.modelId, tiles: selectedTiles, location: args.location, isPointCloud: this.isPointCloud });\r\n }\r\n\r\n /** @internal */\r\n public getTraversalChildren(depth: number) {\r\n while (this.traversalChildrenByDepth.length <= depth)\r\n this.traversalChildrenByDepth.push(new TraversalChildrenDetails());\r\n\r\n return this.traversalChildrenByDepth[depth];\r\n }\r\n\r\n /** @internal */\r\n public doReprojectChildren(tile: Tile): boolean {\r\n if (!(tile instanceof RealityTile) || this._gcsConverter === undefined || this._rootToEcef === undefined || undefined === this._ecefToDb)\r\n return false;\r\n\r\n const tileRange = this.iModelTransform.isIdentity ? tile.range : this.iModelTransform.multiplyRange(tile.range, scratchRange);\r\n\r\n return this.cartesianRange.intersectsRange(tileRange);\r\n }\r\n\r\n /** @internal */\r\n public reprojectAndResolveChildren(parent: Tile, children: Tile[], resolve: (children: Tile[] | undefined) => void): void {\r\n if (!this.doReprojectChildren(parent)) {\r\n resolve(children);\r\n return;\r\n }\r\n\r\n const ecefToDb = this._ecefToDb!; // Tested for undefined in doReprojectChildren\r\n const rootToDb = this.iModelTransform;\r\n const dbToEcef = ecefToDb.inverse()!;\r\n const reprojectChildren = new Array<ChildReprojection>();\r\n for (const child of children) {\r\n const realityChild = child as RealityTile;\r\n const childRange = realityChild.rangeCorners ? Range3d.createTransformedArray(rootToDb, realityChild.rangeCorners) : rootToDb.multiplyRange(realityChild.contentRange, scratchRange);\r\n const dbCenter = childRange.center;\r\n const ecefCenter = dbToEcef.multiplyPoint3d(dbCenter);\r\n const dbPoints = [dbCenter, dbCenter.plusXYZ(1), dbCenter.plusXYZ(0, 1), dbCenter.plusXYZ(0, 0, 1)];\r\n reprojectChildren.push({ child: realityChild, ecefCenter, dbPoints });\r\n }\r\n if (reprojectChildren.length === 0)\r\n resolve(children);\r\n else {\r\n const requestProps = new Array<XYZProps>();\r\n\r\n for (const reprojection of reprojectChildren) {\r\n for (const dbPoint of reprojection.dbPoints) {\r\n const ecefPoint = dbToEcef.multiplyPoint3d(dbPoint);\r\n const carto = Cartographic.fromEcef(ecefPoint, scratchCarto);\r\n if (carto)\r\n requestProps.push({ x: carto.longitudeDegrees, y: carto.latitudeDegrees, z: carto.height });\r\n\r\n }\r\n }\r\n\r\n if (requestProps.length !== 4 * reprojectChildren.length)\r\n resolve(children);\r\n else {\r\n this._gcsConverter!.getIModelCoordinatesFromGeoCoordinates(requestProps).then((response) => {\r\n\r\n const reprojectedCoords = response.iModelCoords;\r\n const dbToRoot = rootToDb.inverse()!;\r\n const getReprojectedPoint = (original: Point3d, reprojectedXYZ: XYZProps) => {\r\n scratchPoint.setFromJSON(reprojectedXYZ);\r\n const cartesianDistance = this.cartesianRange.distanceToPoint(scratchPoint);\r\n if (cartesianDistance < this.cartesianTransitionDistance)\r\n return scratchPoint.interpolate(cartesianDistance / this.cartesianTransitionDistance, original, scratchPoint);\r\n else\r\n return original;\r\n };\r\n\r\n let responseIndex = 0;\r\n for (const reprojection of reprojectChildren) {\r\n if (reprojectedCoords.every((coord) => coord.s === GeoCoordStatus.Success)) {\r\n const reprojectedOrigin = getReprojectedPoint(reprojection.dbPoints[0], reprojectedCoords[responseIndex++].p).clone(scratchOrigin);\r\n const xVector = Vector3d.createStartEnd(reprojectedOrigin, getReprojectedPoint(reprojection.dbPoints[1], reprojectedCoords[responseIndex++].p), scratchX);\r\n const yVector = Vector3d.createStartEnd(reprojectedOrigin, getReprojectedPoint(reprojection.dbPoints[2], reprojectedCoords[responseIndex++].p), scratchY);\r\n const zVector = Vector3d.createStartEnd(reprojectedOrigin, getReprojectedPoint(reprojection.dbPoints[3], reprojectedCoords[responseIndex++].p), scratchZ);\r\n const matrix = Matrix3d.createColumns(xVector, yVector, zVector, scratchMatrix);\r\n if (matrix !== undefined) {\r\n const dbReprojection = Transform.createMatrixPickupPutdown(matrix, reprojection.dbPoints[0], reprojectedOrigin, scratchTransform);\r\n if (dbReprojection) {\r\n const rootReprojection = dbToRoot.multiplyTransformTransform(dbReprojection).multiplyTransformTransform(rootToDb);\r\n reprojection.child.reproject(rootReprojection);\r\n }\r\n }\r\n }\r\n }\r\n\r\n resolve(children);\r\n }).catch(() => {\r\n resolve(children); // Error occured in reprojection - just resolve with unprojected corners.\r\n });\r\n }\r\n }\r\n }\r\n\r\n /** @internal */\r\n public getBaseRealityDepth(_sceneContext: SceneContext) { return -1; }\r\n\r\n /** Scan the list of currently selected reality tiles, and fire the viewport's 'onMapLayerScaleRangeVisibilityChanged ' event\r\n * if any scale range visibility change is detected for one more map-layer definition.\r\n * @internal\r\n */\r\n public reportTileVisibility(_args: TileDrawArgs, _selected: RealityTile[]) {}\r\n\r\n /** @internal */\r\n public selectRealityTiles(args: TileDrawArgs, displayedDescendants: RealityTile[][], preloadDebugBuilder?: GraphicBuilder): RealityTile[] {\r\n this._lastSelected = BeTimePoint.now();\r\n const selected: RealityTile[] = [];\r\n const context = new TraversalSelectionContext(selected, displayedDescendants, preloadDebugBuilder, args.maxRealityTreeSelectionCount);\r\n const rootTile = this.rootTile;\r\n const debugControl = args.context.target.debugControl;\r\n const freezeTiles = debugControl && debugControl.freezeRealityTiles;\r\n\r\n rootTile.selectRealityTiles(context, args, new TraversalDetails());\r\n\r\n const baseDepth = this.getBaseRealityDepth(args.context);\r\n\r\n if (!args.context.target.renderSystem.isMobile && 0 === context.missing.length) { // We skip preloading on mobile devices.\r\n if (baseDepth > 0) // Maps may force loading of low level globe tiles.\r\n rootTile.preloadRealityTilesAtDepth(baseDepth, context, args);\r\n\r\n if (!freezeTiles)\r\n this.preloadTilesForScene(args, context, undefined);\r\n }\r\n\r\n if (!freezeTiles)\r\n for (const tile of context.missing) {\r\n const loadableTile = tile.loadableTile;\r\n\r\n loadableTile.markUsed(args);\r\n args.insertMissing(loadableTile);\r\n }\r\n\r\n if (debugControl && debugControl.logRealityTiles) {\r\n this.logTiles(\"Selected: \", selected.values());\r\n const preloaded = [];\r\n for (const tile of context.preloaded)\r\n preloaded.push(tile);\r\n\r\n this.logTiles(\"Preloaded: \", preloaded.values());\r\n this.logTiles(\"Missing: \", context.missing.values());\r\n\r\n const imageryTiles: RealityTile[] = [];\r\n for (const selectedTile of selected) {\r\n if (selectedTile instanceof MapTile) {\r\n const selectedImageryTiles = (selectedTile).imageryTiles;\r\n if (selectedImageryTiles)\r\n selectedImageryTiles.forEach((tile) => imageryTiles.push(tile));\r\n }\r\n }\r\n if (imageryTiles.length)\r\n this.logTiles(\"Imagery:\", imageryTiles.values());\r\n }\r\n\r\n this.reportTileVisibility(args, selected);\r\n\r\n IModelApp.tileAdmin.addTilesForUser(args.context.viewport, selected, args.readyTiles);\r\n return selected;\r\n }\r\n\r\n /** @internal */\r\n public preloadTilesForScene(args: TileDrawArgs, context: TraversalSelectionContext, frustumTransform?: Transform) {\r\n const preloadFrustum = args.viewingSpace.getPreloadFrustum(frustumTransform, scratchFrustum);\r\n const preloadFrustumPlanes = FrustumPlanes.fromFrustum(preloadFrustum);\r\n const worldToNpc = preloadFrustum.toMap4d();\r\n const preloadWorldToViewMap = args.viewingSpace.calcNpcToView().multiplyMapMap(worldToNpc!);\r\n const preloadArgs = new RealityTileDrawArgs(args, preloadWorldToViewMap, preloadFrustumPlanes);\r\n\r\n if (context.preloadDebugBuilder) {\r\n context.preloadDebugBuilder.setSymbology(ColorDef.blue, ColorDef.blue, 2, 0);\r\n context.preloadDebugBuilder.addFrustum(preloadFrustum);\r\n }\r\n\r\n this.rootTile.preloadTilesInFrustum(preloadArgs, context, 2);\r\n }\r\n\r\n /** @internal */\r\n protected logTiles(label: string, tiles: IterableIterator<Tile>) {\r\n let depthString = \"\";\r\n let min = 10000, max = -10000;\r\n let count = 0;\r\n const depthMap = new Map<number, number>();\r\n for (const tile of tiles) {\r\n count++;\r\n const depth = tile.depth;\r\n min = Math.min(min, tile.depth);\r\n max = Math.max(max, tile.depth);\r\n const found = depthMap.get(depth);\r\n depthMap.set(depth, found === undefined ? 1 : found + 1);\r\n }\r\n\r\n depthMap.forEach((value, key ) => depthString += `${key}(x${value}), `);\r\n // eslint-disable-next-line no-console\r\n console.log(`${label}: ${count} Min: ${min} Max: ${max} Depths: ${depthString}`);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"RealityTileTree.js","sourceRoot":"","sources":["../../../src/tile/RealityTileTree.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { assert, BeTimePoint, ProcessDetector } from \"@itwin/core-bentley\";\r\nimport {\r\n Matrix3d, Point3d, Range3d, Transform, Vector3d, XYZProps,\r\n} from \"@itwin/core-geometry\";\r\nimport { Cartographic, ColorDef, GeoCoordStatus, ViewFlagOverrides } from \"@itwin/core-common\";\r\nimport { BackgroundMapGeometry } from \"../BackgroundMapGeometry\";\r\nimport { GeoConverter } from \"../GeoServices\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { GraphicBranch } from \"../render/GraphicBranch\";\r\nimport { GraphicBuilder } from \"../render/GraphicBuilder\";\r\nimport { SceneContext } from \"../ViewContext\";\r\nimport {\r\n GraphicsCollectorDrawArgs, MapTile, RealityTile, RealityTileLoader, RealityTileParams, Tile, TileDrawArgs, TileGeometryCollector,\r\n TileGraphicType, TileParams, TileTree, TileTreeParams,\r\n} from \"./internal\";\r\n\r\n/** @internal */\r\nexport class TraversalDetails {\r\n public queuedChildren = new Array<Tile>();\r\n public childrenSelected = false;\r\n public shouldSelectParent = false;\r\n\r\n public initialize() {\r\n this.queuedChildren.length = 0;\r\n this.childrenSelected = false;\r\n this.shouldSelectParent = false;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class TraversalChildrenDetails {\r\n private _childDetails: TraversalDetails[] = [];\r\n\r\n public initialize() {\r\n for (const child of this._childDetails)\r\n child.initialize();\r\n }\r\n\r\n public getChildDetail(index: number) {\r\n while (this._childDetails.length <= index)\r\n this._childDetails.push(new TraversalDetails());\r\n\r\n return this._childDetails[index];\r\n }\r\n\r\n public combine(parentDetails: TraversalDetails) {\r\n parentDetails.queuedChildren.length = 0;\r\n parentDetails.childrenSelected = false;\r\n parentDetails.shouldSelectParent = false;\r\n\r\n for (const child of this._childDetails) {\r\n parentDetails.childrenSelected = parentDetails.childrenSelected || child.childrenSelected;\r\n parentDetails.shouldSelectParent = parentDetails.shouldSelectParent || child.shouldSelectParent;\r\n\r\n for (const queuedChild of child.queuedChildren)\r\n parentDetails.queuedChildren.push(queuedChild);\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class TraversalSelectionContext {\r\n public preloaded = new Set<RealityTile>();\r\n public missing = new Array<RealityTile>();\r\n public get selectionCountExceeded() { return this._maxSelectionCount === undefined ? false : (this.missing.length + this.selected.length) > this._maxSelectionCount; } // Avoid selecting excessive number of tiles.\r\n constructor(public selected: Tile[], public displayedDescendants: Tile[][], public preloadDebugBuilder?: GraphicBuilder, private _maxSelectionCount?: number) { }\r\n\r\n public selectOrQueue(tile: RealityTile, args: TileDrawArgs, traversalDetails: TraversalDetails) {\r\n tile.selectSecondaryTiles(args, this);\r\n tile.markUsed(args);\r\n traversalDetails.shouldSelectParent = true;\r\n\r\n if (tile.isReady) {\r\n args.markReady(tile);\r\n this.selected.push(tile);\r\n tile.markDisplayed();\r\n this.displayedDescendants.push((traversalDetails.childrenSelected) ? traversalDetails.queuedChildren.slice() : []);\r\n traversalDetails.queuedChildren.length = 0;\r\n traversalDetails.childrenSelected = true;\r\n traversalDetails.shouldSelectParent = false;\r\n } else if (!tile.isNotFound) {\r\n traversalDetails.queuedChildren.push(tile);\r\n if (!tile.isLoaded)\r\n this.missing.push(tile);\r\n }\r\n }\r\n\r\n public preload(tile: RealityTile, args: TileDrawArgs): void {\r\n if (!this.preloaded.has(tile)) {\r\n if (this.preloadDebugBuilder)\r\n tile.addBoundingGraphic(this.preloadDebugBuilder, ColorDef.red);\r\n\r\n tile.markUsed(args);\r\n tile.selectSecondaryTiles(args, this);\r\n this.preloaded.add(tile);\r\n if (!tile.isNotFound && !tile.isLoaded)\r\n this.missing.push(tile);\r\n }\r\n }\r\n\r\n public select(tiles: RealityTile[], args: TileDrawArgs): void {\r\n for (const tile of tiles) {\r\n tile.markUsed(args);\r\n this.selected.push(tile);\r\n this.displayedDescendants.push([]);\r\n }\r\n }\r\n}\r\n\r\nconst scratchCarto = Cartographic.createZero();\r\nconst scratchPoint = Point3d.createZero(), scratchOrigin = Point3d.createZero();\r\nconst scratchRange = Range3d.createNull();\r\nconst scratchX = Vector3d.createZero(), scratchY = Vector3d.createZero(), scratchZ = Vector3d.createZero();\r\nconst scratchMatrix = Matrix3d.createZero(), scratchTransform = Transform.createZero();\r\n\r\ninterface ChildReprojection {\r\n child: RealityTile;\r\n ecefCenter: Point3d;\r\n dbPoints: Point3d[]; // Center, xEnd, yEnd, zEnd\r\n}\r\n\r\n/** @internal */\r\nexport interface RealityTileTreeParams extends TileTreeParams {\r\n readonly loader: RealityTileLoader;\r\n readonly yAxisUp?: boolean;\r\n readonly rootTile: RealityTileParams;\r\n readonly rootToEcef?: Transform;\r\n readonly gcsConverterAvailable: boolean;\r\n}\r\n\r\n/** Base class for a [[TileTree]] representing a reality model (e.g., a point cloud or photogrammetry mesh) or 3d terrain with map imagery.\r\n * The tiles within the tree are instances of [[RealityTile]]s.\r\n * @public\r\n */\r\nexport class RealityTileTree extends TileTree {\r\n /** @internal */\r\n public traversalChildrenByDepth: TraversalChildrenDetails[] = [];\r\n /** @internal */\r\n public readonly loader: RealityTileLoader;\r\n /** @internal */\r\n public readonly yAxisUp: boolean;\r\n /** @internal */\r\n public cartesianRange: Range3d;\r\n /** @internal */\r\n public cartesianTransitionDistance: number;\r\n /** @internal */\r\n protected _gcsConverter: GeoConverter | undefined;\r\n /** @internal */\r\n protected _rootTile: RealityTile;\r\n /** @internal */\r\n protected _rootToEcef?: Transform;\r\n /** @internal */\r\n protected _ecefToDb?: Transform;\r\n\r\n /** @internal */\r\n public constructor(params: RealityTileTreeParams) {\r\n super(params);\r\n this.loader = params.loader;\r\n this.yAxisUp = true === params.yAxisUp;\r\n this._rootTile = this.createTile(params.rootTile);\r\n this.cartesianRange = BackgroundMapGeometry.getCartesianRange(this.iModel);\r\n this.cartesianTransitionDistance = this.cartesianRange.diagonal().magnitudeXY() * .25; // Transition distance from elliptical to cartesian.\r\n this._gcsConverter = params.gcsConverterAvailable ? params.iModel.geoServices.getConverter(\"WGS84\") : undefined;\r\n if (params.rootToEcef) {\r\n this._rootToEcef = params.rootToEcef;\r\n const dbToRoot = this.iModelTransform.inverse();\r\n if (dbToRoot) {\r\n const dbToEcef = this._rootToEcef.multiplyTransformTransform(dbToRoot);\r\n this._ecefToDb = dbToEcef.inverse();\r\n }\r\n }\r\n }\r\n\r\n /** @internal */\r\n public get rootTile(): RealityTile { return this._rootTile; }\r\n /** @internal */\r\n public get is3d() { return true; }\r\n /** @internal */\r\n public get maxDepth() { return this.loader.maxDepth; }\r\n /** @internal */\r\n public get minDepth() { return this.loader.minDepth; }\r\n /** @internal */\r\n public override get isContentUnbounded() { return this.loader.isContentUnbounded; }\r\n /** @internal */\r\n public get isTransparent() { return false; }\r\n\r\n /** @internal */\r\n protected _selectTiles(args: TileDrawArgs): Tile[] { return this.selectRealityTiles(args, []); }\r\n /** @internal */\r\n public get viewFlagOverrides(): ViewFlagOverrides { return this.loader.viewFlagOverrides; }\r\n /** @internal */\r\n public override get parentsAndChildrenExclusive() { return this.loader.parentsAndChildrenExclusive; }\r\n\r\n /** @internal */\r\n public createTile(props: TileParams): RealityTile { return new RealityTile(props, this); }\r\n\r\n /** Collect tiles from this tile tree based on the criteria implemented by `collector`.\r\n * @internal\r\n */\r\n public override collectTileGeometry(collector: TileGeometryCollector): void {\r\n this.rootTile.collectTileGeometry(collector);\r\n }\r\n\r\n /** @internal */\r\n public prune(): void {\r\n const olderThan = BeTimePoint.now().minus(this.expirationTime);\r\n this.rootTile.purgeContents(olderThan, !ProcessDetector.isMobileBrowser);\r\n }\r\n\r\n /** @internal */\r\n public draw(args: TileDrawArgs): void {\r\n const displayedTileDescendants = new Array<RealityTile[]>();\r\n const debugControl = args.context.target.debugControl;\r\n const selectBuilder = (debugControl && debugControl.displayRealityTileRanges) ? args.context.createSceneGraphicBuilder() : undefined;\r\n const preloadDebugBuilder = (debugControl && debugControl.displayRealityTilePreload) ? args.context.createSceneGraphicBuilder() : undefined;\r\n const graphicTypeBranches = new Map<TileGraphicType, GraphicBranch>();\r\n\r\n const selectedTiles = this.selectRealityTiles(args, displayedTileDescendants, preloadDebugBuilder);\r\n args.processSelectedTiles(selectedTiles);\r\n let sortIndices;\r\n\r\n if (!this.parentsAndChildrenExclusive) {\r\n sortIndices = selectedTiles.map((_x, i) => i);\r\n sortIndices.sort((a, b) => selectedTiles[a].depth - selectedTiles[b].depth);\r\n }\r\n\r\n if (!(args instanceof GraphicsCollectorDrawArgs))\r\n this.collectClassifierGraphics(args, selectedTiles);\r\n\r\n assert(selectedTiles.length === displayedTileDescendants.length);\r\n for (let i = 0; i < selectedTiles.length; i++) {\r\n const index = sortIndices ? sortIndices[i] : i;\r\n const selectedTile = selectedTiles[index];\r\n const graphics = args.getTileGraphics(selectedTile);\r\n const tileGraphicType = selectedTile.graphicType;\r\n let targetBranch;\r\n if (undefined !== tileGraphicType && tileGraphicType !== args.context.graphicType) {\r\n if (!(targetBranch = graphicTypeBranches.get(tileGraphicType))) {\r\n graphicTypeBranches.set(tileGraphicType, targetBranch = new GraphicBranch(false));\r\n targetBranch.setViewFlagOverrides(args.graphics.viewFlagOverrides);\r\n targetBranch.symbologyOverrides = args.graphics.symbologyOverrides;\r\n }\r\n }\r\n\r\n if (!targetBranch)\r\n targetBranch = args.graphics;\r\n\r\n if (undefined !== graphics) {\r\n const displayedDescendants = displayedTileDescendants[index];\r\n if (0 === displayedDescendants.length || !this.loader.parentsAndChildrenExclusive || selectedTile.allChildrenIncluded(displayedDescendants)) {\r\n targetBranch.add(graphics);\r\n if (selectBuilder)\r\n selectedTile.addBoundingGraphic(selectBuilder, ColorDef.green);\r\n } else {\r\n if (selectBuilder)\r\n selectedTile.addBoundingGraphic(selectBuilder, ColorDef.red);\r\n\r\n for (const displayedDescendant of displayedDescendants) {\r\n const clipVector = displayedDescendant.getContentClip();\r\n if (selectBuilder)\r\n displayedDescendant.addBoundingGraphic(selectBuilder, ColorDef.blue);\r\n\r\n if (undefined === clipVector) {\r\n targetBranch.add(graphics);\r\n } else {\r\n clipVector.transformInPlace(args.location);\r\n if (!this.isTransparent)\r\n for (const primitive of clipVector.clips)\r\n for (const clipPlanes of primitive.fetchClipPlanesRef()!.convexSets)\r\n for (const plane of clipPlanes.planes)\r\n plane.offsetDistance(-displayedDescendant.radius * .05); // Overlap with existing (high resolution) tile slightly to avoid cracks.\r\n\r\n const branch = new GraphicBranch(false);\r\n branch.add(graphics);\r\n const clipVolume = args.context.target.renderSystem.createClipVolume(clipVector);\r\n targetBranch.add(args.context.createGraphicBranch(branch, Transform.createIdentity(), { clipVolume }));\r\n }\r\n }\r\n }\r\n if (preloadDebugBuilder)\r\n targetBranch.add(preloadDebugBuilder.finish());\r\n\r\n if (selectBuilder)\r\n targetBranch.add(selectBuilder.finish());\r\n\r\n const rangeGraphic = selectedTile.getRangeGraphic(args.context);\r\n if (undefined !== rangeGraphic)\r\n targetBranch.add(rangeGraphic);\r\n }\r\n }\r\n\r\n args.drawGraphics();\r\n for (const graphicTypeBranch of graphicTypeBranches) {\r\n args.drawGraphicsWithType(graphicTypeBranch[0], graphicTypeBranch[1]);\r\n }\r\n }\r\n\r\n /** @internal */\r\n protected collectClassifierGraphics(args: TileDrawArgs, selectedTiles: RealityTile[]) {\r\n const classifier = args.context.planarClassifiers.get(this.modelId);\r\n if (classifier)\r\n classifier.collectGraphics(args.context, { modelId: this.modelId, tiles: selectedTiles, location: args.location, isPointCloud: this.isPointCloud });\r\n }\r\n\r\n /** @internal */\r\n public getTraversalChildren(depth: number) {\r\n while (this.traversalChildrenByDepth.length <= depth)\r\n this.traversalChildrenByDepth.push(new TraversalChildrenDetails());\r\n\r\n return this.traversalChildrenByDepth[depth];\r\n }\r\n\r\n /** @internal */\r\n public doReprojectChildren(tile: Tile): boolean {\r\n if (!(tile instanceof RealityTile) || this._gcsConverter === undefined || this._rootToEcef === undefined || undefined === this._ecefToDb)\r\n return false;\r\n\r\n const tileRange = this.iModelTransform.isIdentity ? tile.range : this.iModelTransform.multiplyRange(tile.range, scratchRange);\r\n\r\n return this.cartesianRange.intersectsRange(tileRange);\r\n }\r\n\r\n /** @internal */\r\n public reprojectAndResolveChildren(parent: Tile, children: Tile[], resolve: (children: Tile[] | undefined) => void): void {\r\n if (!this.doReprojectChildren(parent)) {\r\n resolve(children);\r\n return;\r\n }\r\n\r\n const ecefToDb = this._ecefToDb!; // Tested for undefined in doReprojectChildren\r\n const rootToDb = this.iModelTransform;\r\n const dbToEcef = ecefToDb.inverse()!;\r\n const reprojectChildren = new Array<ChildReprojection>();\r\n for (const child of children) {\r\n const realityChild = child as RealityTile;\r\n const childRange = realityChild.rangeCorners ? Range3d.createTransformedArray(rootToDb, realityChild.rangeCorners) : rootToDb.multiplyRange(realityChild.contentRange, scratchRange);\r\n const dbCenter = childRange.center;\r\n const ecefCenter = dbToEcef.multiplyPoint3d(dbCenter);\r\n const dbPoints = [dbCenter, dbCenter.plusXYZ(1), dbCenter.plusXYZ(0, 1), dbCenter.plusXYZ(0, 0, 1)];\r\n reprojectChildren.push({ child: realityChild, ecefCenter, dbPoints });\r\n }\r\n if (reprojectChildren.length === 0)\r\n resolve(children);\r\n else {\r\n const requestProps = new Array<XYZProps>();\r\n\r\n for (const reprojection of reprojectChildren) {\r\n for (const dbPoint of reprojection.dbPoints) {\r\n const ecefPoint = dbToEcef.multiplyPoint3d(dbPoint);\r\n const carto = Cartographic.fromEcef(ecefPoint, scratchCarto);\r\n if (carto)\r\n requestProps.push({ x: carto.longitudeDegrees, y: carto.latitudeDegrees, z: carto.height });\r\n\r\n }\r\n }\r\n\r\n if (requestProps.length !== 4 * reprojectChildren.length)\r\n resolve(children);\r\n else {\r\n this._gcsConverter!.getIModelCoordinatesFromGeoCoordinates(requestProps).then((response) => {\r\n\r\n const reprojectedCoords = response.iModelCoords;\r\n const dbToRoot = rootToDb.inverse()!;\r\n const getReprojectedPoint = (original: Point3d, reprojectedXYZ: XYZProps) => {\r\n scratchPoint.setFromJSON(reprojectedXYZ);\r\n const cartesianDistance = this.cartesianRange.distanceToPoint(scratchPoint);\r\n if (cartesianDistance < this.cartesianTransitionDistance)\r\n return scratchPoint.interpolate(cartesianDistance / this.cartesianTransitionDistance, original, scratchPoint);\r\n else\r\n return original;\r\n };\r\n\r\n let responseIndex = 0;\r\n for (const reprojection of reprojectChildren) {\r\n if (reprojectedCoords.every((coord) => coord.s === GeoCoordStatus.Success)) {\r\n const reprojectedOrigin = getReprojectedPoint(reprojection.dbPoints[0], reprojectedCoords[responseIndex++].p).clone(scratchOrigin);\r\n const xVector = Vector3d.createStartEnd(reprojectedOrigin, getReprojectedPoint(reprojection.dbPoints[1], reprojectedCoords[responseIndex++].p), scratchX);\r\n const yVector = Vector3d.createStartEnd(reprojectedOrigin, getReprojectedPoint(reprojection.dbPoints[2], reprojectedCoords[responseIndex++].p), scratchY);\r\n const zVector = Vector3d.createStartEnd(reprojectedOrigin, getReprojectedPoint(reprojection.dbPoints[3], reprojectedCoords[responseIndex++].p), scratchZ);\r\n const matrix = Matrix3d.createColumns(xVector, yVector, zVector, scratchMatrix);\r\n if (matrix !== undefined) {\r\n const dbReprojection = Transform.createMatrixPickupPutdown(matrix, reprojection.dbPoints[0], reprojectedOrigin, scratchTransform);\r\n if (dbReprojection) {\r\n const rootReprojection = dbToRoot.multiplyTransformTransform(dbReprojection).multiplyTransformTransform(rootToDb);\r\n reprojection.child.reproject(rootReprojection);\r\n }\r\n }\r\n }\r\n }\r\n\r\n resolve(children);\r\n }).catch(() => {\r\n resolve(children); // Error occured in reprojection - just resolve with unprojected corners.\r\n });\r\n }\r\n }\r\n }\r\n\r\n /** @internal */\r\n public getBaseRealityDepth(_sceneContext: SceneContext) { return -1; }\r\n\r\n /** Scan the list of currently selected reality tiles, and fire the viewport's 'onMapLayerScaleRangeVisibilityChanged ' event\r\n * if any scale range visibility change is detected for one more map-layer definition.\r\n * @internal\r\n */\r\n public reportTileVisibility(_args: TileDrawArgs, _selected: RealityTile[]) { }\r\n\r\n /** @internal */\r\n public selectRealityTiles(args: TileDrawArgs, displayedDescendants: RealityTile[][], preloadDebugBuilder?: GraphicBuilder): RealityTile[] {\r\n this._lastSelected = BeTimePoint.now();\r\n const selected: RealityTile[] = [];\r\n const context = new TraversalSelectionContext(selected, displayedDescendants, preloadDebugBuilder, args.maxRealityTreeSelectionCount);\r\n const rootTile = this.rootTile;\r\n const debugControl = args.context.target.debugControl;\r\n const freezeTiles = debugControl && debugControl.freezeRealityTiles;\r\n\r\n rootTile.selectRealityTiles(context, args, new TraversalDetails());\r\n\r\n const baseDepth = this.getBaseRealityDepth(args.context);\r\n\r\n if (!args.context.target.renderSystem.isMobile && 0 === context.missing.length) { // We skip preloading on mobile devices.\r\n if (baseDepth > 0) // Maps may force loading of low level globe tiles.\r\n rootTile.preloadRealityTilesAtDepth(baseDepth, context, args);\r\n\r\n if (!freezeTiles)\r\n rootTile.preloadProtectedTiles(args, context);\r\n }\r\n\r\n if (!freezeTiles)\r\n for (const tile of context.missing) {\r\n const loadableTile = tile.loadableTile;\r\n\r\n loadableTile.markUsed(args);\r\n args.insertMissing(loadableTile);\r\n }\r\n\r\n if (debugControl && debugControl.logRealityTiles) {\r\n this.logTiles(\"Selected: \", selected.values());\r\n const preloaded = [];\r\n for (const tile of context.preloaded)\r\n preloaded.push(tile);\r\n\r\n this.logTiles(\"Preloaded: \", preloaded.values());\r\n this.logTiles(\"Missing: \", context.missing.values());\r\n\r\n const imageryTiles: RealityTile[] = [];\r\n for (const selectedTile of selected) {\r\n if (selectedTile instanceof MapTile) {\r\n const selectedImageryTiles = (selectedTile).imageryTiles;\r\n if (selectedImageryTiles)\r\n selectedImageryTiles.forEach((tile) => imageryTiles.push(tile));\r\n }\r\n }\r\n if (imageryTiles.length)\r\n this.logTiles(\"Imagery:\", imageryTiles.values());\r\n }\r\n\r\n this.reportTileVisibility(args, selected);\r\n\r\n IModelApp.tileAdmin.addTilesForUser(args.context.viewport, selected, args.readyTiles);\r\n return selected;\r\n }\r\n\r\n /** @internal */\r\n protected logTiles(label: string, tiles: IterableIterator<Tile>) {\r\n let depthString = \"\";\r\n let min = 10000, max = -10000;\r\n let count = 0;\r\n const depthMap = new Map<number, number>();\r\n for (const tile of tiles) {\r\n count++;\r\n const depth = tile.depth;\r\n min = Math.min(min, tile.depth);\r\n max = Math.max(max, tile.depth);\r\n const found = depthMap.get(depth);\r\n depthMap.set(depth, found === undefined ? 1 : found + 1);\r\n }\r\n\r\n depthMap.forEach((value, key) => depthString += `${key}(x${value}), `);\r\n // eslint-disable-next-line no-console\r\n console.log(`${label}: ${count} Min: ${min} Max: ${max} Depths: ${depthString}`);\r\n }\r\n}\r\n"]}
|
|
@@ -18,6 +18,10 @@ export declare class TileUsageMarker {
|
|
|
18
18
|
constructor();
|
|
19
19
|
/** Returns true if this tile is currently in use by no [[TileUser]]s and its timestamp pre-dates `expirationTime`. */
|
|
20
20
|
isExpired(expirationTime: BeTimePoint): boolean;
|
|
21
|
+
/** Returns true if this tile is currently in use by any [[TileUser]]. */
|
|
22
|
+
getIsTileInUse(): boolean;
|
|
23
|
+
/** Returns true if this tile's timestamp pre-dates `expirationTime`, without checking if it is in use. */
|
|
24
|
+
isTimestampExpired(expirationTime: BeTimePoint): boolean;
|
|
21
25
|
/** Updates the timestamp to the specified time and marks the tile as being in use by the specified [[TileUser]]. */
|
|
22
26
|
mark(user: TileUser, time: BeTimePoint): void;
|
|
23
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TileUsageMarker.d.ts","sourceRoot":"","sources":["../../../src/tile/TileUsageMarker.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC;;;;;;;;GAQG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,UAAU,CAAqB;IAEvC,+GAA+G;;IAI/G,sHAAsH;IAC/G,SAAS,CAAC,cAAc,EAAE,WAAW,GAAG,OAAO;IAItD,oHAAoH;IAC7G,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI;CAIrD"}
|
|
1
|
+
{"version":3,"file":"TileUsageMarker.d.ts","sourceRoot":"","sources":["../../../src/tile/TileUsageMarker.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC;;;;;;;;GAQG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,UAAU,CAAqB;IAEvC,+GAA+G;;IAI/G,sHAAsH;IAC/G,SAAS,CAAC,cAAc,EAAE,WAAW,GAAG,OAAO;IAItD,yEAAyE;IAClE,cAAc,IAAI,OAAO;IAIhC,0GAA0G;IACnG,kBAAkB,CAAC,cAAc,EAAE,WAAW,GAAG,OAAO;IAI/D,oHAAoH;IAC7G,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI;CAIrD"}
|
|
@@ -26,7 +26,15 @@ class TileUsageMarker {
|
|
|
26
26
|
}
|
|
27
27
|
/** Returns true if this tile is currently in use by no [[TileUser]]s and its timestamp pre-dates `expirationTime`. */
|
|
28
28
|
isExpired(expirationTime) {
|
|
29
|
-
return this.
|
|
29
|
+
return this.isTimestampExpired(expirationTime) && !this.getIsTileInUse();
|
|
30
|
+
}
|
|
31
|
+
/** Returns true if this tile is currently in use by any [[TileUser]]. */
|
|
32
|
+
getIsTileInUse() {
|
|
33
|
+
return IModelApp_1.IModelApp.tileAdmin.isTileInUse(this);
|
|
34
|
+
}
|
|
35
|
+
/** Returns true if this tile's timestamp pre-dates `expirationTime`, without checking if it is in use. */
|
|
36
|
+
isTimestampExpired(expirationTime) {
|
|
37
|
+
return this._timePoint.before(expirationTime);
|
|
30
38
|
}
|
|
31
39
|
/** Updates the timestamp to the specified time and marks the tile as being in use by the specified [[TileUser]]. */
|
|
32
40
|
mark(user, time) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TileUsageMarker.js","sourceRoot":"","sources":["../../../src/tile/TileUsageMarker.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAAkD;AAClD,4CAAyC;AAGzC;;;;;;;;GAQG;AACH,MAAa,eAAe;IAG1B,+GAA+G;IAC/G;QAHQ,eAAU,GAAG,0BAAW,CAAC,GAAG,EAAE,CAAC;IAIvC,CAAC;IAED,sHAAsH;IAC/G,SAAS,CAAC,cAA2B;QAC1C,OAAO,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"TileUsageMarker.js","sourceRoot":"","sources":["../../../src/tile/TileUsageMarker.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAAkD;AAClD,4CAAyC;AAGzC;;;;;;;;GAQG;AACH,MAAa,eAAe;IAG1B,+GAA+G;IAC/G;QAHQ,eAAU,GAAG,0BAAW,CAAC,GAAG,EAAE,CAAC;IAIvC,CAAC;IAED,sHAAsH;IAC/G,SAAS,CAAC,cAA2B;QAC1C,OAAO,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;IAC3E,CAAC;IAED,yEAAyE;IAClE,cAAc;QACnB,OAAO,qBAAS,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,0GAA0G;IACnG,kBAAkB,CAAC,cAA2B;QACnD,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAChD,CAAC;IAED,oHAAoH;IAC7G,IAAI,CAAC,IAAc,EAAE,IAAiB;QAC3C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,qBAAS,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;CACF;AA3BD,0CA2BC","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 { BeTimePoint } from \"@itwin/core-bentley\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { TileUser } from \"./internal\";\r\n\r\n/** A marker associated with a [[Tile]] to track usage of that tile by any number of [[TileUser]]s.\r\n * The marker tracks:\r\n * - the set of [[TileUser]]s by which the tile is in use for some purpose (displayed, preloaded, requested, selected for shadow map, etc); and\r\n * - the most recent time at which any tile user declared its use of the tile.\r\n * The marker is used to allow tiles to be discarded after they become disused by any tile user, via [[Tile.prune]].\r\n * @see [[Tile.usageMarker]].\r\n * @public\r\n * @extensions\r\n */\r\nexport class TileUsageMarker {\r\n private _timePoint = BeTimePoint.now();\r\n\r\n /** Constructs a usage marker with its timepoint set to the current time and its set of [[TileUser]]s empty. */\r\n public constructor() {\r\n }\r\n\r\n /** Returns true if this tile is currently in use by no [[TileUser]]s and its timestamp pre-dates `expirationTime`. */\r\n public isExpired(expirationTime: BeTimePoint): boolean {\r\n return this.isTimestampExpired(expirationTime) && !this.getIsTileInUse();\r\n }\r\n\r\n /** Returns true if this tile is currently in use by any [[TileUser]]. */\r\n public getIsTileInUse(): boolean {\r\n return IModelApp.tileAdmin.isTileInUse(this);\r\n }\r\n\r\n /** Returns true if this tile's timestamp pre-dates `expirationTime`, without checking if it is in use. */\r\n public isTimestampExpired(expirationTime: BeTimePoint): boolean {\r\n return this._timePoint.before(expirationTime);\r\n }\r\n\r\n /** Updates the timestamp to the specified time and marks the tile as being in use by the specified [[TileUser]]. */\r\n public mark(user: TileUser, time: BeTimePoint): void {\r\n this._timePoint = time;\r\n IModelApp.tileAdmin.markTileUsed(this, user);\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapFeatureInfo.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/MapFeatureInfo.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"MapFeatureInfo.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/MapFeatureInfo.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,aAAa;AACb,qBAAa,oBAAqB,SAAQ,cAAc;gBACnC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,mBAAmB;CAGvE;AAED,aAAa;AACb,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAClC,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED,aAAa;AACb,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,sBAAsB,EAAE,GAAG,WAAW,CAAC;CAC/C;AAED,aAAa;AACb,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,oBAAoB,EAAE,CAAC;CAClC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapFeatureInfo.js","sourceRoot":"","sources":["../../../../src/tile/map/MapFeatureInfo.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,0DAA2F;
|
|
1
|
+
{"version":3,"file":"MapFeatureInfo.js","sourceRoot":"","sources":["../../../../src/tile/map/MapFeatureInfo.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,0DAA2F;AAG3F,aAAa;AACb,MAAa,oBAAqB,SAAQ,+BAAc;IACtD,YAAmB,KAAoB,EAAE,QAA6B;QACpE,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACzB,CAAC;CACF;AAJD,oDAIC","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 MapLayers\r\n */\r\n\r\nimport { PropertyDescription, PropertyRecord, PropertyValue } from \"@itwin/appui-abstract\";\r\nimport { Cartographic } from \"@itwin/core-common\";\r\n\r\n/** @alpha */\r\nexport class MapFeatureInfoRecord extends PropertyRecord {\r\n public constructor(value: PropertyValue, property: PropertyDescription) {\r\n super(value, property);\r\n }\r\n}\r\n\r\n/** @alpha */\r\nexport interface MapFeatureInfo {\r\n layerInfo?: MapLayerFeatureInfo[];\r\n hitPoint?: Cartographic;\r\n}\r\n\r\n/** @alpha */\r\nexport interface MapLayerFeatureInfo {\r\n layerName: string;\r\n info?: MapSubLayerFeatureInfo[] | HTMLElement;\r\n}\r\n\r\n/** @alpha */\r\nexport interface MapSubLayerFeatureInfo {\r\n subLayerName: string;\r\n displayFieldName?: string;\r\n records?: MapFeatureInfoRecord[];\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapLayerAuthentication.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/MapLayerAuthentication.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAExD,YAAY;AACZ,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,SAAS,CAAC,EAAE,GAAG,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"MapLayerAuthentication.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/MapLayerAuthentication.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAExD,YAAY;AACZ,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,SAAS,CAAC,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS,CAAC;IACjD,MAAM,IAAI,MAAM,CAAC;CAClB;AAED,YAAY;AACZ,MAAM,WAAW,0BAA0B;IACzC,aAAa,CAAC,EAAE,qBAAqB,CAAC;CACvC;AAED,YAAY;AACZ,MAAM,WAAW,mBAAmB;IAElC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,YAAY;AACZ,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,GAAG,CAAC;IAGjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,YAAY;AACZ,MAAM,WAAW,oBAAoB;IACnC,cAAc,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAAC;IAC5F,uBAAuB,CAAC,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAAC;IAC1F,eAAe,CAAC,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC;IAEtD,iBAAiB,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;CACvC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapLayerAuthentication.js","sourceRoot":"","sources":["../../../../src/tile/map/MapLayerAuthentication.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG","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 MapLayers\r\n */\r\n\r\nimport { BeEvent, Listener } from \"@itwin/core-bentley\";\r\n\r\n/** @beta */\r\nexport interface MapLayerTokenEndpoint {\r\n getLoginUrl(stateData?: any): string|undefined;\r\n getUrl(): string;\r\n}\r\n\r\n/** @beta */\r\nexport interface MapLayerAuthenticationInfo {\r\n tokenEndpoint?: MapLayerTokenEndpoint;\r\n}\r\n\r\n/** @beta */\r\nexport interface MapLayerAccessToken {\r\n // The generated token.\r\n token: string;\r\n}\r\n\r\n/** @beta */\r\nexport interface MapLayerAccessTokenParams {\r\n mapLayerUrl: URL;\r\n\r\n // credentials are used to generate non-oauth tokens (i.e ArcGIS legacy tokens)\r\n userName?: string;\r\n password?: string;\r\n}\r\n\r\n/** @beta */\r\nexport interface MapLayerAccessClient {\r\n getAccessToken(params: MapLayerAccessTokenParams): Promise<MapLayerAccessToken|undefined>;\r\n getTokenServiceEndPoint?(mapLayerUrl: string): Promise<MapLayerTokenEndpoint | undefined>;\r\n invalidateToken?(token: MapLayerAccessToken): boolean;\r\n\r\n onOAuthProcessEnd?: BeEvent<Listener>;\r\n}\r\n\r\n"]}
|
|
1
|
+
{"version":3,"file":"MapLayerAuthentication.js","sourceRoot":"","sources":["../../../../src/tile/map/MapLayerAuthentication.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG","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 MapLayers\r\n */\r\n\r\nimport { BeEvent, Listener } from \"@itwin/core-bentley\";\r\n\r\n/** @beta */\r\nexport interface MapLayerTokenEndpoint {\r\n getLoginUrl(stateData?: any): string | undefined;\r\n getUrl(): string;\r\n}\r\n\r\n/** @beta */\r\nexport interface MapLayerAuthenticationInfo {\r\n tokenEndpoint?: MapLayerTokenEndpoint;\r\n}\r\n\r\n/** @beta */\r\nexport interface MapLayerAccessToken {\r\n // The generated token.\r\n token: string;\r\n}\r\n\r\n/** @beta */\r\nexport interface MapLayerAccessTokenParams {\r\n mapLayerUrl: URL;\r\n\r\n // credentials are used to generate non-oauth tokens (i.e ArcGIS legacy tokens)\r\n userName?: string;\r\n password?: string;\r\n}\r\n\r\n/** @beta */\r\nexport interface MapLayerAccessClient {\r\n getAccessToken(params: MapLayerAccessTokenParams): Promise<MapLayerAccessToken | undefined>;\r\n getTokenServiceEndPoint?(mapLayerUrl: string): Promise<MapLayerTokenEndpoint | undefined>;\r\n invalidateToken?(token: MapLayerAccessToken): boolean;\r\n\r\n onOAuthProcessEnd?: BeEvent<Listener>;\r\n}\r\n\r\n"]}
|
|
@@ -4,14 +4,13 @@
|
|
|
4
4
|
import { ImageMapLayerSettings, MapLayerKey, MapLayerSettings, MapSubLayerProps } from "@itwin/core-common";
|
|
5
5
|
import { IModelConnection } from "../../IModelConnection";
|
|
6
6
|
import { ImageryMapLayerTreeReference, MapLayerAccessClient, MapLayerAuthenticationInfo, MapLayerImageryProvider, MapLayerSourceStatus, MapLayerTileTreeReference } from "../internal";
|
|
7
|
-
/** @beta */
|
|
8
7
|
/** Class representing a map-layer format.
|
|
9
8
|
* Each format has it's unique 'formatId' string, used to uniquely identify a format in the [[MapLayerFormatRegistry]].
|
|
10
9
|
* When creating an [[ImageMapLayerSettings]] object, a format needs to be specified this 'formatId'.
|
|
11
10
|
* The MapLayerFormat object can later be used to validate a source, or create a provider.
|
|
12
11
|
*
|
|
13
|
-
* Subclasses should override formatId and [[MapLayerFormat.createImageryProvider]].
|
|
14
|
-
* @
|
|
12
|
+
* Subclasses should override formatId and [[MapLayerFormat.createImageryProvider]].
|
|
13
|
+
* @public
|
|
15
14
|
*/
|
|
16
15
|
export declare class MapLayerFormat {
|
|
17
16
|
static formatId: string;
|
|
@@ -28,7 +27,9 @@ export declare class MapLayerFormat {
|
|
|
28
27
|
/** @internal */
|
|
29
28
|
static createMapLayerTree(_layerSettings: MapLayerSettings, _layerIndex: number, _iModel: IModelConnection): MapLayerTileTreeReference | undefined;
|
|
30
29
|
}
|
|
31
|
-
/**
|
|
30
|
+
/** The type of a map layer format.
|
|
31
|
+
* @public
|
|
32
|
+
*/
|
|
32
33
|
export type MapLayerFormatType = typeof MapLayerFormat;
|
|
33
34
|
/** @public */
|
|
34
35
|
export interface MapLayerSourceValidation {
|
|
@@ -42,7 +43,7 @@ export interface MapLayerSourceValidation {
|
|
|
42
43
|
* 'BingMaps' must have it's key value set to 'key'
|
|
43
44
|
* 'MapboxImagery' must have it's key value set to 'access_token'
|
|
44
45
|
*
|
|
45
|
-
* @
|
|
46
|
+
* @public
|
|
46
47
|
*/
|
|
47
48
|
export interface MapLayerOptions {
|
|
48
49
|
/** Access key for Azure Maps in the format `{ key: "subscription-key", value: "your-azure-maps-key" }`. */
|
|
@@ -59,19 +60,25 @@ export interface MapLayerFormatEntry {
|
|
|
59
60
|
type: MapLayerFormatType;
|
|
60
61
|
accessClient?: MapLayerAccessClient;
|
|
61
62
|
}
|
|
62
|
-
/**
|
|
63
|
+
/** A registry of MapLayerFormats identified by their unique format IDs. The registry can be accessed via [[IModelApp.mapLayerFormatRegistry]].
|
|
64
|
+
* @public
|
|
65
|
+
*/
|
|
63
66
|
export declare class MapLayerFormatRegistry {
|
|
64
67
|
private _configOptions;
|
|
65
68
|
constructor(opts?: MapLayerOptions);
|
|
66
69
|
private _formats;
|
|
67
70
|
isRegistered(formatId: string): boolean;
|
|
68
|
-
register(formatClass: MapLayerFormatType
|
|
71
|
+
register(formatClass: MapLayerFormatType): void;
|
|
72
|
+
/** @beta */
|
|
69
73
|
setAccessClient(formatId: string, accessClient: MapLayerAccessClient): boolean;
|
|
74
|
+
/** @beta */
|
|
70
75
|
getAccessClient(formatId: string): MapLayerAccessClient | undefined;
|
|
71
76
|
get configOptions(): MapLayerOptions;
|
|
72
77
|
/** @internal */
|
|
73
78
|
createImageryMapLayerTree(layerSettings: ImageMapLayerSettings, layerIndex: number, iModel: IModelConnection): ImageryMapLayerTreeReference | undefined;
|
|
74
|
-
/**
|
|
79
|
+
/** Returns a [[MapLayerImageryProvider]] based on the provided [[ImageMapLayerSettings]] object.
|
|
80
|
+
* @internal
|
|
81
|
+
*/
|
|
75
82
|
createImageryProvider(layerSettings: ImageMapLayerSettings): MapLayerImageryProvider | undefined;
|
|
76
83
|
validateSource(formatId: string, url: string, userName?: string, password?: string, ignoreCache?: boolean): Promise<MapLayerSourceValidation>;
|
|
77
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapLayerFormatRegistry.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/MapLayerFormatRegistry.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE5G,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAkC,oBAAoB,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAGvN
|
|
1
|
+
{"version":3,"file":"MapLayerFormatRegistry.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/MapLayerFormatRegistry.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE5G,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAkC,oBAAoB,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAGvN;;;;;;;GAOG;AACH,qBAAa,cAAc;IACzB,OAAc,QAAQ,EAAE,MAAM,CAAC;IAE/B;MACE;WACY,QAAQ;IAEtB;MACE;WACkB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAEnJ;;MAEE;WACY,qBAAqB,CAAC,SAAS,EAAE,gBAAgB,GAAG,uBAAuB,GAAG,SAAS;IAErG,gBAAgB;WACF,kBAAkB,CAAC,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,yBAAyB,GAAG,SAAS;CAK1J;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,cAAc,CAAC;AAEvD,cAAc;AACd,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,oBAAoB,CAAC;IAC7B,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAE/B,YAAY;IACZ,QAAQ,CAAC,EAAE,0BAA0B,CAAC;CACvC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,2GAA2G;IAE3G,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,+FAA+F;IAE/F,aAAa,CAAC,EAAE,WAAW,CAAC;IAC5B,4FAA4F;IAE5F,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,oDAAoD;IACpD,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;CAC3C;AAED,gBAAgB;AAChB,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,kBAAkB,CAAC;IACzB,YAAY,CAAC,EAAE,oBAAoB,CAAC;CACrC;AAED;;GAEG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,cAAc,CAAkB;gBAC5B,IAAI,CAAC,EAAE,eAAe;IAIlC,OAAO,CAAC,QAAQ,CAA0C;IAEnD,YAAY,CAAC,QAAQ,EAAE,MAAM;IAE7B,QAAQ,CAAC,WAAW,EAAE,kBAAkB;IAO/C,YAAY;IACL,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,oBAAoB,GAAG,OAAO;IASrF,YAAY;IACL,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAO1E,IAAW,aAAa,IAAI,eAAe,CAE1C;IAED,gBAAgB;IACT,yBAAyB,CAAC,aAAa,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,4BAA4B,GAAG,SAAS;IAU9J;;OAEG;IACI,qBAAqB,CAAC,aAAa,EAAE,qBAAqB,GAAG,uBAAuB,GAAG,SAAS;IAW1F,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,wBAAwB,CAAC;CAK3J"}
|
|
@@ -12,14 +12,13 @@ const core_bentley_1 = require("@itwin/core-bentley");
|
|
|
12
12
|
const IModelApp_1 = require("../../IModelApp");
|
|
13
13
|
const internal_1 = require("../internal");
|
|
14
14
|
const loggerCategory = "ArcGISFeatureProvider";
|
|
15
|
-
/** @beta */
|
|
16
15
|
/** Class representing a map-layer format.
|
|
17
16
|
* Each format has it's unique 'formatId' string, used to uniquely identify a format in the [[MapLayerFormatRegistry]].
|
|
18
17
|
* When creating an [[ImageMapLayerSettings]] object, a format needs to be specified this 'formatId'.
|
|
19
18
|
* The MapLayerFormat object can later be used to validate a source, or create a provider.
|
|
20
19
|
*
|
|
21
|
-
* Subclasses should override formatId and [[MapLayerFormat.createImageryProvider]].
|
|
22
|
-
* @
|
|
20
|
+
* Subclasses should override formatId and [[MapLayerFormat.createImageryProvider]].
|
|
21
|
+
* @public
|
|
23
22
|
*/
|
|
24
23
|
class MapLayerFormat {
|
|
25
24
|
/** Register the current format in the [[MapLayerFormatRegistry]].
|
|
@@ -39,7 +38,9 @@ class MapLayerFormat {
|
|
|
39
38
|
}
|
|
40
39
|
}
|
|
41
40
|
exports.MapLayerFormat = MapLayerFormat;
|
|
42
|
-
/**
|
|
41
|
+
/** A registry of MapLayerFormats identified by their unique format IDs. The registry can be accessed via [[IModelApp.mapLayerFormatRegistry]].
|
|
42
|
+
* @public
|
|
43
|
+
*/
|
|
43
44
|
class MapLayerFormatRegistry {
|
|
44
45
|
constructor(opts) {
|
|
45
46
|
this._formats = new Map();
|
|
@@ -47,11 +48,12 @@ class MapLayerFormatRegistry {
|
|
|
47
48
|
internal_1.internalMapLayerImageryFormats.forEach((format) => this.register(format));
|
|
48
49
|
}
|
|
49
50
|
isRegistered(formatId) { return this._formats.get(formatId) !== undefined; }
|
|
50
|
-
register(formatClass
|
|
51
|
+
register(formatClass) {
|
|
51
52
|
if (formatClass.formatId.length === 0)
|
|
52
53
|
return; // must be an abstract class, ignore it
|
|
53
|
-
this._formats.set(formatClass.formatId, { type: formatClass
|
|
54
|
+
this._formats.set(formatClass.formatId, { type: formatClass });
|
|
54
55
|
}
|
|
56
|
+
/** @beta */
|
|
55
57
|
setAccessClient(formatId, accessClient) {
|
|
56
58
|
const entry = this._formats.get(formatId);
|
|
57
59
|
if (entry !== undefined) {
|
|
@@ -60,6 +62,7 @@ class MapLayerFormatRegistry {
|
|
|
60
62
|
}
|
|
61
63
|
return false;
|
|
62
64
|
}
|
|
65
|
+
/** @beta */
|
|
63
66
|
getAccessClient(formatId) {
|
|
64
67
|
if (formatId.length === 0)
|
|
65
68
|
return undefined;
|
|
@@ -78,7 +81,9 @@ class MapLayerFormatRegistry {
|
|
|
78
81
|
}
|
|
79
82
|
return format.createMapLayerTree(layerSettings, layerIndex, iModel);
|
|
80
83
|
}
|
|
81
|
-
/**
|
|
84
|
+
/** Returns a [[MapLayerImageryProvider]] based on the provided [[ImageMapLayerSettings]] object.
|
|
85
|
+
* @internal
|
|
86
|
+
*/
|
|
82
87
|
createImageryProvider(layerSettings) {
|
|
83
88
|
const entry = this._formats.get(layerSettings.formatId);
|
|
84
89
|
const format = entry?.type;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapLayerFormatRegistry.js","sourceRoot":"","sources":["../../../../src/tile/map/MapLayerFormatRegistry.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 MapLayers\r\n */\r\n\r\nimport { assert, Logger } from \"@itwin/core-bentley\";\r\nimport { ImageMapLayerSettings, MapLayerKey, MapLayerSettings, MapSubLayerProps } from \"@itwin/core-common\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport { IModelConnection } from \"../../IModelConnection\";\r\nimport { ImageryMapLayerTreeReference, internalMapLayerImageryFormats, MapLayerAccessClient, MapLayerAuthenticationInfo, MapLayerImageryProvider, MapLayerSourceStatus, MapLayerTileTreeReference } from \"../internal\";\r\nconst loggerCategory = \"ArcGISFeatureProvider\";\r\n\r\n/** @beta */\r\n/** Class representing a map-layer format.\r\n * Each format has it's unique 'formatId' string, used to uniquely identify a format in the [[MapLayerFormatRegistry]].\r\n * When creating an [[ImageMapLayerSettings]] object, a format needs to be specified this 'formatId'.\r\n * The MapLayerFormat object can later be used to validate a source, or create a provider.\r\n *\r\n* Subclasses should override formatId and [[MapLayerFormat.createImageryProvider]].\r\n * @beta\r\n */\r\nexport class MapLayerFormat {\r\n public static formatId: string;\r\n\r\n /** Register the current format in the [[MapLayerFormatRegistry]].\r\n */\r\n public static register() { IModelApp.mapLayerFormatRegistry.register(this); }\r\n\r\n /** Allow a source of a specific to be validated before being attached as a map-layer.\r\n */\r\n public static async validateSource(_url: string, _userName?: string, _password?: string, _ignoreCache?: boolean): Promise<MapLayerSourceValidation> { return { status: MapLayerSourceStatus.Valid }; }\r\n\r\n /** Create a [[MapLayerImageryProvider]] that will be used to feed data in a map-layer tile Tree.\r\n * @internal\r\n */\r\n public static createImageryProvider(_settings: MapLayerSettings): MapLayerImageryProvider | undefined { assert(false); }\r\n\r\n /** @internal */\r\n public static createMapLayerTree(_layerSettings: MapLayerSettings, _layerIndex: number, _iModel: IModelConnection): MapLayerTileTreeReference | undefined {\r\n assert(false);\r\n return undefined;\r\n }\r\n\r\n}\r\n\r\n/** @beta */\r\nexport type MapLayerFormatType = typeof MapLayerFormat;\r\n\r\n/** @public */\r\nexport interface MapLayerSourceValidation {\r\n status: MapLayerSourceStatus;\r\n subLayers?: MapSubLayerProps[];\r\n\r\n /** @beta */\r\n authInfo?: MapLayerAuthenticationInfo;\r\n}\r\n\r\n/**\r\n * Options supplied at startup via [[IModelAppOptions.mapLayerOptions]] to specify access keys for various map layer formats.\r\n * 'BingMaps' must have it's key value set to 'key'\r\n * 'MapboxImagery' must have it's key value set to 'access_token'\r\n *\r\n * @beta\r\n */\r\nexport interface MapLayerOptions {\r\n /** Access key for Azure Maps in the format `{ key: \"subscription-key\", value: \"your-azure-maps-key\" }`. */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n AzureMaps?: MapLayerKey;\r\n /** Access key for Mapbox in the format `{ key: \"access_token\", value: \"your-mapbox-key\" }`. */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n MapboxImagery?: MapLayerKey;\r\n /** Access key for Bing Maps in the format `{ key: \"key\", value: \"your-bing-maps-key\" }`. */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n BingMaps?: MapLayerKey;\r\n /** Access keys for additional map layer formats. */\r\n [format: string]: MapLayerKey | undefined;\r\n}\r\n\r\n/** @internal */\r\nexport interface MapLayerFormatEntry {\r\n type: MapLayerFormatType;\r\n accessClient?: MapLayerAccessClient;\r\n}\r\n\r\n/** @beta */\r\nexport class MapLayerFormatRegistry {\r\n private _configOptions: MapLayerOptions;\r\n constructor(opts?: MapLayerOptions) {\r\n this._configOptions = opts ?? {};\r\n internalMapLayerImageryFormats.forEach((format) => this.register(format));\r\n }\r\n private _formats = new Map<string, MapLayerFormatEntry>();\r\n\r\n public isRegistered(formatId: string) {return this._formats.get(formatId) !== undefined;}\r\n\r\n public register(formatClass: MapLayerFormatType, accessClient?: MapLayerAccessClient) {\r\n if (formatClass.formatId.length === 0)\r\n return; // must be an abstract class, ignore it\r\n\r\n this._formats.set(formatClass.formatId, {type: formatClass, accessClient});\r\n }\r\n\r\n public setAccessClient(formatId: string, accessClient: MapLayerAccessClient ): boolean {\r\n const entry = this._formats.get(formatId);\r\n if (entry !== undefined) {\r\n entry.accessClient = accessClient;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n public getAccessClient(formatId: string): MapLayerAccessClient | undefined {\r\n if (formatId.length === 0)\r\n return undefined;\r\n\r\n return this._formats.get(formatId)?.accessClient;\r\n }\r\n\r\n public get configOptions(): MapLayerOptions {\r\n return this._configOptions;\r\n }\r\n\r\n /** @internal */\r\n public createImageryMapLayerTree(layerSettings: ImageMapLayerSettings, layerIndex: number, iModel: IModelConnection): ImageryMapLayerTreeReference | undefined {\r\n const entry = this._formats.get(layerSettings.formatId);\r\n const format = entry?.type;\r\n if (format === undefined) {\r\n Logger.logError(loggerCategory, `Could not find format '${layerSettings.formatId}' in registry`);\r\n return undefined;\r\n }\r\n return format.createMapLayerTree(layerSettings, layerIndex, iModel) as ImageryMapLayerTreeReference;\r\n }\r\n\r\n /** @internal */\r\n public createImageryProvider(layerSettings: ImageMapLayerSettings): MapLayerImageryProvider | undefined {\r\n const entry = this._formats.get(layerSettings.formatId);\r\n const format = entry?.type;\r\n if (this._configOptions[layerSettings.formatId] !== undefined) {\r\n const keyValuePair = this._configOptions[layerSettings.formatId]!;\r\n const key: MapLayerKey = { key: keyValuePair.key, value: keyValuePair.value };\r\n layerSettings = layerSettings.clone({ accessKey: key });\r\n }\r\n return (format === undefined) ? undefined : format.createImageryProvider(layerSettings);\r\n }\r\n\r\n public async validateSource(formatId: string, url: string, userName?: string, password?: string, ignoreCache?: boolean): Promise<MapLayerSourceValidation> {\r\n const entry = this._formats.get(formatId);\r\n const format = entry?.type;\r\n return (format === undefined) ? { status: MapLayerSourceStatus.InvalidFormat } : format.validateSource(url, userName, password, ignoreCache);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"MapLayerFormatRegistry.js","sourceRoot":"","sources":["../../../../src/tile/map/MapLayerFormatRegistry.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAAqD;AAErD,+CAA4C;AAE5C,0CAAuN;AACvN,MAAM,cAAc,GAAG,uBAAuB,CAAC;AAE/C;;;;;;;GAOG;AACH,MAAa,cAAc;IAGzB;MACE;IACK,MAAM,CAAC,QAAQ,KAAK,qBAAS,CAAC,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE7E;MACE;IACK,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,IAAY,EAAE,SAAkB,EAAE,SAAkB,EAAE,YAAsB,IAAuC,OAAO,EAAE,MAAM,EAAE,+BAAoB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAEtM;;MAEE;IACK,MAAM,CAAC,qBAAqB,CAAC,SAA2B,IAAyC,IAAA,qBAAM,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAExH,gBAAgB;IACT,MAAM,CAAC,kBAAkB,CAAC,cAAgC,EAAE,WAAmB,EAAE,OAAyB;QAC/G,IAAA,qBAAM,EAAC,KAAK,CAAC,CAAC;QACd,OAAO,SAAS,CAAC;IACnB,CAAC;CAEF;AAtBD,wCAsBC;AA2CD;;GAEG;AACH,MAAa,sBAAsB;IAEjC,YAAY,IAAsB;QAI1B,aAAQ,GAAG,IAAI,GAAG,EAA+B,CAAC;QAHxD,IAAI,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC;QACjC,yCAA8B,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5E,CAAC;IAGM,YAAY,CAAC,QAAgB,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC;IAEpF,QAAQ,CAAC,WAA+B;QAC7C,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YACnC,OAAO,CAAC,uCAAuC;QAEjD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,YAAY;IACL,eAAe,CAAC,QAAgB,EAAE,YAAkC;QACzE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;YAClC,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,YAAY;IACL,eAAe,CAAC,QAAgB;QACrC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YACvB,OAAO,SAAS,CAAC;QAEnB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACnD,CAAC;IAED,IAAW,aAAa;QACtB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,gBAAgB;IACT,yBAAyB,CAAC,aAAoC,EAAE,UAAkB,EAAE,MAAwB;QACjH,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,KAAK,EAAE,IAAI,CAAC;QAC3B,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,qBAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,0BAA0B,aAAa,CAAC,QAAQ,eAAe,CAAC,CAAC;YACjG,OAAO,SAAS,CAAC;SAClB;QACD,OAAO,MAAM,CAAC,kBAAkB,CAAC,aAAa,EAAE,UAAU,EAAE,MAAM,CAAiC,CAAC;IACtG,CAAC;IAED;;OAEG;IACI,qBAAqB,CAAC,aAAoC;QAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,KAAK,EAAE,IAAI,CAAC;QAC3B,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE;YAC7D,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAE,CAAC;YAClE,MAAM,GAAG,GAAgB,EAAE,GAAG,EAAE,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,CAAC;YAC9E,aAAa,GAAG,aAAa,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;SACzD;QACD,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;IAC1F,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,QAAgB,EAAE,GAAW,EAAE,QAAiB,EAAE,QAAiB,EAAE,WAAqB;QACpH,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,KAAK,EAAE,IAAI,CAAC;QAC3B,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,+BAAoB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC/I,CAAC;CACF;AArED,wDAqEC","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 MapLayers\r\n */\r\n\r\nimport { assert, Logger } from \"@itwin/core-bentley\";\r\nimport { ImageMapLayerSettings, MapLayerKey, MapLayerSettings, MapSubLayerProps } from \"@itwin/core-common\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport { IModelConnection } from \"../../IModelConnection\";\r\nimport { ImageryMapLayerTreeReference, internalMapLayerImageryFormats, MapLayerAccessClient, MapLayerAuthenticationInfo, MapLayerImageryProvider, MapLayerSourceStatus, MapLayerTileTreeReference } from \"../internal\";\r\nconst loggerCategory = \"ArcGISFeatureProvider\";\r\n\r\n/** Class representing a map-layer format.\r\n * Each format has it's unique 'formatId' string, used to uniquely identify a format in the [[MapLayerFormatRegistry]].\r\n * When creating an [[ImageMapLayerSettings]] object, a format needs to be specified this 'formatId'.\r\n * The MapLayerFormat object can later be used to validate a source, or create a provider.\r\n *\r\n * Subclasses should override formatId and [[MapLayerFormat.createImageryProvider]].\r\n * @public\r\n */\r\nexport class MapLayerFormat {\r\n public static formatId: string;\r\n\r\n /** Register the current format in the [[MapLayerFormatRegistry]].\r\n */\r\n public static register() { IModelApp.mapLayerFormatRegistry.register(this); }\r\n\r\n /** Allow a source of a specific to be validated before being attached as a map-layer.\r\n */\r\n public static async validateSource(_url: string, _userName?: string, _password?: string, _ignoreCache?: boolean): Promise<MapLayerSourceValidation> { return { status: MapLayerSourceStatus.Valid }; }\r\n\r\n /** Create a [[MapLayerImageryProvider]] that will be used to feed data in a map-layer tile Tree.\r\n * @internal\r\n */\r\n public static createImageryProvider(_settings: MapLayerSettings): MapLayerImageryProvider | undefined { assert(false); }\r\n\r\n /** @internal */\r\n public static createMapLayerTree(_layerSettings: MapLayerSettings, _layerIndex: number, _iModel: IModelConnection): MapLayerTileTreeReference | undefined {\r\n assert(false);\r\n return undefined;\r\n }\r\n\r\n}\r\n\r\n/** The type of a map layer format.\r\n * @public\r\n */\r\nexport type MapLayerFormatType = typeof MapLayerFormat;\r\n\r\n/** @public */\r\nexport interface MapLayerSourceValidation {\r\n status: MapLayerSourceStatus;\r\n subLayers?: MapSubLayerProps[];\r\n\r\n /** @beta */\r\n authInfo?: MapLayerAuthenticationInfo;\r\n}\r\n\r\n/**\r\n * Options supplied at startup via [[IModelAppOptions.mapLayerOptions]] to specify access keys for various map layer formats.\r\n * 'BingMaps' must have it's key value set to 'key'\r\n * 'MapboxImagery' must have it's key value set to 'access_token'\r\n *\r\n * @public\r\n */\r\nexport interface MapLayerOptions {\r\n /** Access key for Azure Maps in the format `{ key: \"subscription-key\", value: \"your-azure-maps-key\" }`. */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n AzureMaps?: MapLayerKey;\r\n /** Access key for Mapbox in the format `{ key: \"access_token\", value: \"your-mapbox-key\" }`. */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n MapboxImagery?: MapLayerKey;\r\n /** Access key for Bing Maps in the format `{ key: \"key\", value: \"your-bing-maps-key\" }`. */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n BingMaps?: MapLayerKey;\r\n /** Access keys for additional map layer formats. */\r\n [format: string]: MapLayerKey | undefined;\r\n}\r\n\r\n/** @internal */\r\nexport interface MapLayerFormatEntry {\r\n type: MapLayerFormatType;\r\n accessClient?: MapLayerAccessClient;\r\n}\r\n\r\n/** A registry of MapLayerFormats identified by their unique format IDs. The registry can be accessed via [[IModelApp.mapLayerFormatRegistry]].\r\n * @public\r\n */\r\nexport class MapLayerFormatRegistry {\r\n private _configOptions: MapLayerOptions;\r\n constructor(opts?: MapLayerOptions) {\r\n this._configOptions = opts ?? {};\r\n internalMapLayerImageryFormats.forEach((format) => this.register(format));\r\n }\r\n private _formats = new Map<string, MapLayerFormatEntry>();\r\n\r\n public isRegistered(formatId: string) { return this._formats.get(formatId) !== undefined; }\r\n\r\n public register(formatClass: MapLayerFormatType) {\r\n if (formatClass.formatId.length === 0)\r\n return; // must be an abstract class, ignore it\r\n\r\n this._formats.set(formatClass.formatId, { type: formatClass });\r\n }\r\n\r\n /** @beta */\r\n public setAccessClient(formatId: string, accessClient: MapLayerAccessClient): boolean {\r\n const entry = this._formats.get(formatId);\r\n if (entry !== undefined) {\r\n entry.accessClient = accessClient;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /** @beta */\r\n public getAccessClient(formatId: string): MapLayerAccessClient | undefined {\r\n if (formatId.length === 0)\r\n return undefined;\r\n\r\n return this._formats.get(formatId)?.accessClient;\r\n }\r\n\r\n public get configOptions(): MapLayerOptions {\r\n return this._configOptions;\r\n }\r\n\r\n /** @internal */\r\n public createImageryMapLayerTree(layerSettings: ImageMapLayerSettings, layerIndex: number, iModel: IModelConnection): ImageryMapLayerTreeReference | undefined {\r\n const entry = this._formats.get(layerSettings.formatId);\r\n const format = entry?.type;\r\n if (format === undefined) {\r\n Logger.logError(loggerCategory, `Could not find format '${layerSettings.formatId}' in registry`);\r\n return undefined;\r\n }\r\n return format.createMapLayerTree(layerSettings, layerIndex, iModel) as ImageryMapLayerTreeReference;\r\n }\r\n\r\n /** Returns a [[MapLayerImageryProvider]] based on the provided [[ImageMapLayerSettings]] object.\r\n * @internal\r\n */\r\n public createImageryProvider(layerSettings: ImageMapLayerSettings): MapLayerImageryProvider | undefined {\r\n const entry = this._formats.get(layerSettings.formatId);\r\n const format = entry?.type;\r\n if (this._configOptions[layerSettings.formatId] !== undefined) {\r\n const keyValuePair = this._configOptions[layerSettings.formatId]!;\r\n const key: MapLayerKey = { key: keyValuePair.key, value: keyValuePair.value };\r\n layerSettings = layerSettings.clone({ accessKey: key });\r\n }\r\n return (format === undefined) ? undefined : format.createImageryProvider(layerSettings);\r\n }\r\n\r\n public async validateSource(formatId: string, url: string, userName?: string, password?: string, ignoreCache?: boolean): Promise<MapLayerSourceValidation> {\r\n const entry = this._formats.get(formatId);\r\n const format = entry?.type;\r\n return (format === undefined) ? { status: MapLayerSourceStatus.InvalidFormat } : format.validateSource(url, userName, password, ignoreCache);\r\n }\r\n}\r\n"]}
|