bruce-cesium 2.2.2 → 2.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"bruce-cesium.es5.js","sources":["../src/viewer/cesium-view-monitor.ts","../src/internal/js-utils.ts","../src/utils/measure-utils.ts","../src/utils/drawing-utils.ts","../src/utils/entity-utils.ts","../src/rendering/render-managers/render-manager.ts","../src/rendering/entity-render-engine.ts","../src/rendering/render-managers/common/point-clustering.ts","../src/rendering/render-managers/entities/entities-render-manager.ts","../src/rendering/render-managers/entities/entities-loaded-render-manager.ts","../src/rendering/render-managers/common/cesium-parabola.ts","../src/rendering/relation-render-engine.ts","../src/rendering/visuals-register.ts","../src/rendering/render-managers/entities/entities-ids-render-manager.ts","../src/rendering/render-managers/entities/entity-render-manager.ts","../src/rendering/tileset-render-engine.ts","../src/rendering/render-managers/tilesets/tileset-cad-render-manager.ts","../src/rendering/render-managers/common/shared-getters.ts","../src/rendering/render-managers/tilesets/tileset-osm-render-manager.ts","../src/rendering/render-managers/tilesets/tileset-entities-render-manager.ts","../src/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.ts","../src/rendering/render-managers/data-source/data-source-static-kml-manager.ts","../src/rendering/render-managers/tilesets/tileset-arb-render-manager.ts","../src/rendering/render-managers/other/relations-render-manager.ts","../src/rendering/render-managers/tilesets/tileset-google-photos-render-manager.ts","../src/rendering/menu-item-manager.ts","../src/viewer/viewer-utils.ts","../src/rendering/menu-item-creator.ts","../src/rendering/tile-render-engine.ts","../src/utils/view-utils.ts","../src/rendering/view-render-engine.ts","../src/bruce-cesium.ts"],"sourcesContent":["import { Bounds, BruceEvent, Carto, ViewMonitor } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\n\nconst TIME_LAG = 300;\nconst POSITION_CHECK_TIMER = 950;\nconst DEFAULT_GROUNDED_HEIGHT = 300;\nconst MINIMUM_VIEW_AREA_SIZE_DEGREES = 0.01;\nconst NET_STEP_PERCENT = 5;\nconst BORDER_STEPS = 3;\n\nenum ESearchStatus {\n LocationFound = 1,\n LocationChanged = 2,\n LocationMissing = 3\n}\n\nfunction netScanViewForBoundaries(viewer: Cesium.Viewer): Bounds.IReqBounds {\n let maxLong = - 2 * Math.PI;\n let minLong = 2 * Math.PI;\n let maxLat = -2 * Math.PI;\n let minLat = 2 * Math.PI;\n let found = 0;\n\n const updateMinMaxForPoint = (stepX: number, stepY: number) => {\n const x = Math.round(0 + (viewer.container.clientWidth / 100) * (stepX * NET_STEP_PERCENT));\n const y = Math.round(0 + (viewer.container.clientHeight / 100) * (stepY * NET_STEP_PERCENT));\n const winPos = new Cesium.Cartesian2(x, y);\n try {\n let intersection = getAdjustedGroundIntersectionOfCameraRay(viewer, winPos);\n if (intersection) {\n let point = (<any> Cesium.Cartographic).fromCartesian(intersection, viewer.scene.globe.ellipsoid);\n maxLong = Math.max(maxLong, point.longitude);\n maxLat = Math.max(maxLat, point.latitude);\n minLong = Math.min(minLong, point.longitude);\n minLat = Math.min(minLat, point.latitude);\n found++;\n }\n }\n catch {\n\n }\n };\n\n // Outer circle.\n updateMinMaxForPoint(BORDER_STEPS, BORDER_STEPS);\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS, BORDER_STEPS);\n updateMinMaxForPoint(BORDER_STEPS, (100 / NET_STEP_PERCENT) - BORDER_STEPS);\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS, (100 / NET_STEP_PERCENT) - BORDER_STEPS);\n\n // Inner circle.\n updateMinMaxForPoint(BORDER_STEPS * 2, BORDER_STEPS * 2);\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS * 2, BORDER_STEPS * 2);\n updateMinMaxForPoint(BORDER_STEPS * 2, (100 / NET_STEP_PERCENT) - BORDER_STEPS * 2);\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS * 2, (100 / NET_STEP_PERCENT) - BORDER_STEPS * 2);\n\n if (found > 0) {\n const viewRect: Bounds.IReqBounds = {\n east: maxLong,\n west: minLong,\n north: maxLat,\n south: minLat\n };\n return viewRect;\n }\n return <any>null;\n}\n\nfunction getAdjustedGroundIntersectionOfCameraRay(viewer: Cesium.Viewer, screenPos: Cesium.Cartesian2): Cesium.Cartesian3 {\n const ray = viewer.camera.getPickRay(screenPos);\n const intersection = ray ? viewer.scene.globe.pick(ray, viewer.scene) : null;\n if (intersection) {\n return intersection;\n }\n return <any>null;\n}\n\nfunction areBoundsEqual(a: Bounds.IReqBounds, b: Bounds.IReqBounds): boolean {\n return a.north == b.north && a.south == b.south && a.east == b.east && a.west == b.west;\n}\n\nfunction arePosEqual(a: Carto.ICarto, b: Carto.ICarto): boolean {\n return a.latitude == b.latitude && a.longitude == b.longitude;\n}\n\n/**\n * Monitors and emits events when the Cesium view changes.\n */\nexport class CesiumViewMonitor implements ViewMonitor.IMonitor {\n private viewer: Cesium.Viewer;\n private pendingTimeout: any;\n private checkInterval: any;\n private target: Carto.ICarto = <any>null;\n private bounds: Bounds.IReqBounds = <any>null;\n private disposed: boolean = false;\n private updatedEvent: BruceEvent<ViewMonitor.IArea> = <any>null;\n public get Disposed(): boolean {\n return this.disposed;\n }\n private entity: Cesium.Entity = <any>null;\n\n\n public constructor(viewer: Cesium.Viewer) {\n this.viewer = viewer;\n this.tryEmitUpdate();\n this.checkInterval = setInterval(() => {\n this.updateQueue();\n },\n POSITION_CHECK_TIMER);\n }\n\n private createEntity(): void {\n if (this.entity) {\n return;\n }\n this.entity = this.viewer.entities.add({\n position: new Cesium.CallbackProperty(() => {\n return this.target ? Cesium.Cartesian3.fromDegrees(this.target.longitude, this.target.latitude) : null;\n }, false) as any,\n point: {\n pixelSize: 8,\n color: Cesium.Color.ORANGE\n },\n rectangle: {\n coordinates: new Cesium.CallbackProperty(() => {\n return this.bounds ? Cesium.Rectangle.fromDegrees(this.bounds.west, this.bounds.south, this.bounds.east, this.bounds.north) : null;\n }, false) as any,\n material: Cesium.Color.fromCssColorString('#ff0000').withAlpha(0.4),\n zIndex: 1\n }\n });\n }\n\n private destroyEntity() {\n if (this.entity && this.viewer.entities.contains(this.entity)) {\n this.viewer.entities.remove(this.entity);\n }\n this.entity = null;\n }\n\n public Updated(): BruceEvent<ViewMonitor.IArea> {\n if (!this.updatedEvent) {\n this.updatedEvent = new BruceEvent();\n }\n return this.updatedEvent;\n }\n\n public GetBounds(): Bounds.IReqBounds {\n return this.bounds;\n }\n\n public GetTarget(): Carto.ICarto {\n return this.target;\n }\n\n public DoUpdate(): void {\n this.tryEmitUpdate();\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n clearInterval(this.checkInterval);\n this.destroyEntity();\n }\n\n private tryDoUpdate(): ESearchStatus {\n if (!this.viewer || this.viewer.isDestroyed()) {\n this.Dispose();\n return ESearchStatus.LocationMissing;\n }\n\n let viewRect: Bounds.IReqBounds = <any>null;\n let center: Carto.ICarto = <any>null;\n\n const camera = this.viewer.camera;\n const terrainHeight = this.viewer.scene.globe.getHeight(camera.positionCartographic);\n const cameraPosition = this.viewer.camera.positionCartographic;\n\n // We are almost at the ground, screw horizon, just load around.\n if (terrainHeight && ((cameraPosition.height - terrainHeight) < DEFAULT_GROUNDED_HEIGHT)) {\n\n // View area calculation.\n viewRect = <any>{};\n const viewRectRad: Bounds.IReqBounds = netScanViewForBoundaries(this.viewer);\n if\n (\n viewRectRad &&\n viewRectRad.east &&\n viewRectRad.west &&\n viewRectRad.north &&\n viewRectRad.south\n ) {\n viewRect.east = Cesium.Math.toDegrees(Math.max(viewRectRad.east, cameraPosition.longitude));\n viewRect.west = Cesium.Math.toDegrees(Math.min(viewRectRad.west, cameraPosition.longitude));\n viewRect.south = Cesium.Math.toDegrees(Math.min(viewRectRad.south, cameraPosition.latitude));\n viewRect.north = Cesium.Math.toDegrees(Math.max(viewRectRad.north, cameraPosition.latitude));\n }\n else {\n viewRect.east = cameraPosition.longitude;\n viewRect.west = cameraPosition.longitude;\n viewRect.south = cameraPosition.latitude;\n viewRect.north = cameraPosition.latitude;\n }\n center = <any>{};\n center.latitude = Cesium.Math.toDegrees(camera.positionCartographic.latitude);\n center.longitude = Cesium.Math.toDegrees(camera.positionCartographic.longitude);\n }\n else {\n // View area calculation.\n const windowPosition = new Cesium.Cartesian2(\n this.viewer.container.clientWidth / 2,\n this.viewer.container.clientHeight / 2\n );\n const intersection = getAdjustedGroundIntersectionOfCameraRay(this.viewer, windowPosition);\n\n let point = null;\n if (intersection) {\n point = (<any> Cesium.Cartographic).fromCartesian(intersection, this.viewer.scene.globe.ellipsoid);\n }\n if (point) {\n center = <any>{};\n center.latitude = Cesium.Math.toDegrees(point.latitude);\n center.longitude = Cesium.Math.toDegrees(point.longitude);\n\n let viewRectRad: Bounds.IReqBounds = netScanViewForBoundaries(this.viewer);\n if (viewRectRad) {\n viewRect = <any>{};\n viewRect.east = Cesium.Math.toDegrees(viewRectRad.east);\n viewRect.west = Cesium.Math.toDegrees(viewRectRad.west);\n viewRect.south = Cesium.Math.toDegrees(viewRectRad.south);\n viewRect.north = Cesium.Math.toDegrees(viewRectRad.north);\n }\n }\n }\n\n // Minimal field of view.\n if (viewRect) {\n const centerLong = (viewRect.east + viewRect.west) / 2;\n const centerLat = (viewRect.north + viewRect.south) / 2;\n viewRect.east = Math.max(viewRect.east, centerLong + (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\n viewRect.west = Math.min(viewRect.west, centerLong - (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\n viewRect.south = Math.min(viewRect.south, centerLat - (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\n viewRect.north = Math.max(viewRect.north, centerLat + (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\n viewRect.alt = this.viewer.scene.camera.positionCartographic?.height;\n }\n\n if (center && viewRect) {\n if (\n (!this.target || (this.target && !arePosEqual(this.target, center))) ||\n (!this.bounds || (this.bounds && !areBoundsEqual(this.bounds, viewRect)))\n ) {\n this.target = center;\n this.bounds = viewRect;\n return ESearchStatus.LocationChanged;\n }\n return ESearchStatus.LocationFound;\n }\n return ESearchStatus.LocationMissing;\n }\n\n private tryEmitUpdate() {\n const searchResult = this.tryDoUpdate();\n if (searchResult == ESearchStatus.LocationChanged) {\n const interest: ViewMonitor.IArea = {\n \tbounds: this.bounds,\n \ttarget: this.target\n };\n //this.createEntity();\n this.updatedEvent?.Trigger(interest);\n }\n else if (searchResult == ESearchStatus.LocationMissing) {\n this.updateQueue();\n }\n }\n\n private queuePosition(lag: number) {\n if (this.pendingTimeout) {\n clearTimeout(this.pendingTimeout);\n }\n this.pendingTimeout = setTimeout(() => {\n if (!this.disposed) {\n this.tryEmitUpdate();\n }\n }, lag);\n }\n\n private updateQueue() {\n this.queuePosition(TIME_LAG);\n }\n}","/**\n * Ensures a number is returned from a given value.\n * If given value cannot be parsed it will return defaultNum.\n * @param value \n * @param defaultNum default is 0.\n * @returns \n */\nexport function EnsureNumber(value: any, defaultNum?: number): number {\n if (!defaultNum) {\n defaultNum = 0;\n }\n value = Number(value);\n if (isNaN(value)) {\n return defaultNum;\n }\n return value;\n}","import { Cartes } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\n\nexport namespace MeasureUtils {\n /**\n * Returns the total distance in meters between an array of points.\n * This distance is NOT following the terrain.\n * @param posses \n * @returns \n */\n export function MeasurePolyline(params: {\n posses: Cesium.Cartesian3[]\n }): {\n totalLength: number\n } {\n const { posses } = params;\n if (posses.length < 2) {\n return {\n totalLength: 0\n };\n }\n let totalLength = 0;\n let pos1 = null;\n let pos2 = null;\n for (let i = 0; i < posses.length; i++) {\n if (pos1 == null) {\n pos1 = posses[i];\n }\n else if (pos2 == null) {\n pos2 = posses[i];\n totalLength += Cesium.Cartesian3.distance(pos1, pos2);\n pos1 = pos2;\n pos2 = null;\n }\n }\n return {\n totalLength\n };\n }\n\n export function MeasurePolygon(params: {\n posses: Cesium.Cartesian3[]\n }): {\n area: number,\n perimeter: number\n } {\n let { posses } = params;\n posses = [].concat(posses);\n if (!Cartes.IsRing3Closed(posses)) {\n posses.push(posses[0].clone());\n }\n if (posses.length < 3) {\n return {\n area: 0,\n perimeter: 0\n }; \n }\n\n let area = 0;\n const indices = (Cesium as any).PolygonPipeline.triangulate(posses, []);\n for (let i = 0; i < indices.length; i += 3) {\n const vector1 = posses[indices[i]];\n const vector2 = posses[indices[i + 1]];\n const vector3 = posses[indices[i + 2]];\n const vectorC = Cesium.Cartesian3.subtract(vector2, vector1, new Cesium.Cartesian3());\n const vectorD = Cesium.Cartesian3.subtract(vector3, vector1, new Cesium.Cartesian3());\n const areaVector = Cesium.Cartesian3.cross(vectorC, vectorD, new Cesium.Cartesian3());\n area += Cesium.Cartesian3.magnitude(areaVector) / 2.0;\n }\n const {totalLength: perimeter} = MeasurePolyline({\n posses: posses\n });\n return {\n area,\n perimeter\n };\n }\n}","import { Cartes } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { EnsureNumber } from \"../internal/js-utils\";\nimport { MeasureUtils } from \"./measure-utils\";\n\nexport namespace DrawingUtils {\n /**\n * Returns the point across a polyline at a given distance.\n * If the distance exceeds the length of the line, the point will be placed at the end of the line.\n * @param viewer\n * @param positions\n * @param distance\n * @returns\n */\n export function PointAcrossPolyline(params: {\n viewer: Cesium.Viewer,\n posses: Cesium.Cartesian3[],\n distance: number\n }): {\n point: Cesium.Cartesian3\n } {\n const { viewer, posses: positions, distance } = params;\n if (distance <= 0 && positions.length > 0) {\n return {\n point: positions[0]\n }\n }\n else if (positions.length > 1) {\n let currentDistance = 0;\n let {totalLength} = MeasureUtils.MeasurePolyline({\n posses: positions,\n })\n if (distance > totalLength) {\n return {\n point: positions[positions.length - 1]\n }\n }\n for (let i = 0; i < positions.length - 1; i++) {\n const length = Cesium.Cartesian3.distance(positions[i], positions[i + 1]);\n if (length + currentDistance >= distance) {\n const carto1 = Cesium.Cartographic.fromCartesian(positions[i]);\n const carto2 = Cesium.Cartographic.fromCartesian(positions[i + 1]);\n const geodesic = new Cesium.EllipsoidGeodesic(carto1, carto2, viewer.scene.globe.ellipsoid);\n //const position = geodesic.interpolateUsingSurfaceDistance(distance - currentDistance);\n const position = geodesic.interpolateUsingFraction((distance - currentDistance) / length);\n const height = (carto1.height + carto2.height) / 2;\n return {\n point: Cesium.Cartesian3.fromRadians(position.longitude, position.latitude, height)\n };\n }\n else {\n currentDistance += length;\n }\n }\n }\n return {\n point: positions.length ? positions[positions.length - 1] : null\n }\n }\n\n /**\n * Returns terrain height from current viewer's provider.\n * On error or flat terrain, it will return 0.\n * If an error occurred it will be attached to the result.\n * @param pos3d\n * @param viewer\n * @returns\n */\n export async function GetTerrainHeight(params: {\n pos3d: Cesium.Cartesian3,\n viewer: Cesium.Viewer\n }): Promise<{\n height: number,\n error?: any\n }> {\n const { pos3d, viewer } = params;\n try {\n if (viewer.scene.terrainProvider instanceof Cesium.EllipsoidTerrainProvider) {\n return {\n height: 0\n };\n }\n const sample = await Cesium.sampleTerrainMostDetailed(viewer.scene.terrainProvider, [Cesium.Cartographic.fromCartesian(pos3d)]);\n const height = sample?.length ? sample[0].height : null;\n if (isNaN(height)) {\n return {\n height: 0,\n error: \"NaN\"\n };\n }\n return {\n height: height\n };\n }\n catch (e) {\n return {\n height: 0,\n error: e\n };\n }\n }\n\n export function EnsurePosHeight(params: {\n pos3d: Cesium.Cartesian3,\n viewer: Cesium.Viewer,\n desiredHeightRef: Cesium.HeightReference,\n heightRef: Cesium.HeightReference\n }): Cesium.Cartesian3 {\n let { pos3d, viewer, desiredHeightRef, heightRef } = params;\n const carto = Cartes.ValidateCartes3(pos3d) ? Cesium.Cartographic.fromCartesian(pos3d) : null;\n if (heightRef == null) {\n heightRef = Cesium.HeightReference.CLAMP_TO_GROUND;\n }\n if (desiredHeightRef == null) {\n desiredHeightRef = Cesium.HeightReference.CLAMP_TO_GROUND;\n }\n if (heightRef == desiredHeightRef) {\n return pos3d;\n }\n if (heightRef == Cesium.HeightReference.NONE) {\n // Turn absolute into clamped.\n if (desiredHeightRef == Cesium.HeightReference.CLAMP_TO_GROUND) {\n return Cesium.Cartesian3.fromRadians(carto.longitude, carto.latitude, 0);\n }\n // Turn absolute into relative (remove terrain height).\n else if (desiredHeightRef == Cesium.HeightReference.RELATIVE_TO_GROUND) {\n const terrainHeight = EnsureNumber(viewer.scene.globe.getHeight(carto), 0);\n return Cesium.Cartesian3.fromRadians(carto.longitude, carto.latitude, carto.height - terrainHeight);\n }\n }\n else if (heightRef == Cesium.HeightReference.CLAMP_TO_GROUND) {\n const terrainHeight = EnsureNumber(viewer.scene.globe.getHeight(carto), 0);\n return Cesium.Cartesian3.fromRadians(carto.longitude, carto.latitude, terrainHeight);\n }\n else if (heightRef == Cesium.HeightReference.RELATIVE_TO_GROUND) {\n // Turn relative into absolute (add terrain height).\n if (desiredHeightRef == Cesium.HeightReference.NONE) {\n const terrainHeight = EnsureNumber(viewer.scene.globe.getHeight(carto), 0);\n return Cesium.Cartesian3.fromRadians(carto.longitude, carto.latitude, carto.height + terrainHeight);\n }\n // Turn relative into clamped.\n else if (desiredHeightRef == Cesium.HeightReference.CLAMP_TO_GROUND) {\n return Cesium.Cartesian3.fromRadians(carto.longitude, carto.latitude, 0);\n }\n }\n return pos3d;\n }\n}","import { BruceApi, Cartes, Carto, Entity as E, Entity, Geometry, Tileset } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { VisualsRegister } from \"../rendering/visuals-register\";\nimport { EntityRenderEngine } from \"../rendering/entity-render-engine\";\nimport { DrawingUtils } from \"./drawing-utils\";\nimport { MeasureUtils } from \"./measure-utils\";\nimport { EnsureNumber } from \"../internal/js-utils\";\n\n/**\n * Returns if a given visual is alive and in the scene.\n * @param viewer\n * @param visual\n * @returns\n */\nfunction isAlive(viewer: Cesium.Viewer, visual: VisualsRegister.Visual) {\n if (!viewer?.scene || viewer.isDestroyed()) {\n return false;\n }\n if (visual instanceof Cesium.Entity) {\n return viewer.entities.contains(visual);\n }\n else if (visual instanceof Cesium.Primitive) {\n return viewer.scene.primitives.contains(visual);\n }\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\n const cTileset = visual?.tileset;\n if (!cTileset) {\n return false;\n }\n if (cTileset.isDestroyed() || !viewer.scene.primitives.contains(cTileset)) {\n return false;\n }\n return true;\n }\n return false;\n}\n\nfunction traverseEntity(\n cEntity: EntityRenderEngine.ICesiumEntityExt,\n arr: EntityRenderEngine.ICesiumEntityExt[],\n ignoreParent: boolean\n): void {\n if (cEntity._parentEntity && !ignoreParent) {\n traverseEntity(cEntity._parentEntity, arr, false);\n }\n if (cEntity._siblingGraphics) {\n for (let i = 0; i < cEntity._siblingGraphics.length; i++) {\n const sibling = cEntity._siblingGraphics[i];\n traverseEntity(sibling, arr, true);\n }\n }\n arr.push(cEntity);\n}\n\nconst ORG_OPACITY_KEY = \"_org_opacity_\";\nconst NEW_OPACITY_KEY = \"_new_opacity_\";\n\nfunction getColor(viewer: Cesium.Viewer, material: Cesium.Property | Cesium.ColorMaterialProperty) {\n function findColor() {\n if (!material) {\n return Cesium.Color.WHITE;\n }\n if (material.getValue) {\n material = material.getValue(viewer.scene.lastRenderTime);\n }\n if (material instanceof Cesium.Color) {\n return material;\n }\n let tmp = (material as any)?.color;\n if (tmp?.getValue) {\n tmp = tmp.getValue(viewer.scene.lastRenderTime);\n }\n return tmp ? tmp : Cesium.Color.WHITE;\n }\n return findColor()?.clone?.();\n}\n\nfunction applyOpacityToColor(viewer: Cesium.Viewer, opacity: number, material: Cesium.Property | Cesium.ColorMaterialProperty) {\n const color = getColor(viewer, material);\n if (color) {\n color.alpha = opacity;\n }\n return color;\n}\n\nfunction applyOpacityToGraphic(viewer: Cesium.Viewer, entity: Cesium.Entity, graphicKey: string, materialKey: string, opacity: number) {\n const color = applyOpacityToColor(viewer, opacity, entity[graphicKey][materialKey]);\n if (color) {\n entity[graphicKey][materialKey] = materialKey == \"material\" ? new Cesium.ColorMaterialProperty(color) : color;\n }\n}\n\nfunction revertAppliedEntityOpacity(viewer: Cesium.Viewer, entity: VisualsRegister.Visual) {\n if (!isAlive(viewer, entity)) {\n return;\n }\n\n entity[NEW_OPACITY_KEY] = null;\n if (entity instanceof Cesium.Entity) {\n const processKey = (graphicKey: string, materialKey: string = \"material\") => {\n if (entity[graphicKey]) {\n const orgOpacity = entity[graphicKey][ORG_OPACITY_KEY];\n if (orgOpacity != null) {\n applyOpacityToGraphic(viewer, entity, graphicKey, materialKey, orgOpacity);\n }\n entity[graphicKey][ORG_OPACITY_KEY] = null;\n }\n }\n processKey(\"polygon\");\n processKey(\"polyline\");\n processKey(\"point\", \"color\");\n processKey(\"ellipse\");\n processKey(\"model\", \"color\");\n }\n else if (entity instanceof Cesium.Cesium3DTileFeature) {\n const orgOpacity = entity[ORG_OPACITY_KEY];\n if (orgOpacity != null) {\n const color = entity.color ? entity.color.clone() : new Cesium.Color();\n color.alpha = orgOpacity;\n entity.color = color;\n }\n entity[ORG_OPACITY_KEY] = null;\n }\n}\n\nfunction applyOpacityToEntity(viewer: Cesium.Viewer, opacity: number, entity: VisualsRegister.Visual) {\n if (!isAlive(viewer, entity)) {\n return;\n }\n\n entity[NEW_OPACITY_KEY] = opacity;\n if (entity instanceof Cesium.Entity) {\n const processKey = (graphicKey: string, materialKey: string = \"material\") => {\n if (entity[graphicKey]) {\n let orgOpacity = entity[graphicKey][ORG_OPACITY_KEY];\n if (orgOpacity == null) {\n entity[graphicKey][ORG_OPACITY_KEY] = getColor(viewer, entity[graphicKey][materialKey])?.alpha;\n }\n if (orgOpacity == null) {\n orgOpacity = 1;\n }\n applyOpacityToGraphic(viewer, entity, graphicKey, materialKey, opacity * orgOpacity);\n }\n }\n processKey(\"polygon\");\n processKey(\"polyline\");\n processKey(\"point\", \"color\");\n processKey(\"ellipse\");\n processKey(\"model\", \"color\");\n }\n else if (entity instanceof Cesium.Cesium3DTileFeature) {\n let orgOpacity = entity[ORG_OPACITY_KEY];\n if (orgOpacity == null) {\n entity[ORG_OPACITY_KEY] = entity.color ? entity.color.alpha : 1;\n }\n if (!orgOpacity) {\n orgOpacity = 1;\n }\n const color = entity.color ? entity.color.clone() : new Cesium.Color();\n color.alpha = opacity * orgOpacity;\n if (color.equals(Cesium.Color.WHITE)) {\n color.blue = 0.0001;\n }\n entity.color = color;\n }\n}\n\nfunction findOpacity(entity: VisualsRegister.Visual) {\n return entity ? entity[NEW_OPACITY_KEY] : null;\n}\n\nfunction GetValue<T>(viewer: Cesium.Viewer, obj: Cesium.Property | any): T {\n if ((obj as any)?.getValue) {\n return obj.getValue(viewer.scene.lastRenderTime);\n }\n return obj;\n}\n\nexport namespace EntityUtils {\n /**\n * Returns an entity's position.\n * This will attempt to calculate it from multiple sources of data.\n * @param params\n * @returns\n */\n export function GetPos(params: {\n viewer: Cesium.Viewer,\n entity: E.IEntity,\n // Optional register to try find currently rendered position from.\n visualRegister?: VisualsRegister.Register,\n // Will ensure returned position is at this height reference.\n // If no cesium visual is found, it will return it clamped to the ground.\n returnHeightRef?: Cesium.HeightReference,\n // Height reference of the record altitude.\n recordHeightRef?: Cesium.HeightReference,\n }): Cesium.Cartesian3 {\n const { viewer, entity, visualRegister } = params;\n\n function evaluateRendered() {\n const rego = visualRegister ? visualRegister.GetRego({\n entityId: entity.Bruce.ID,\n }) : null;\n\n if (rego?.visual instanceof Cesium.Entity) {\n const visual = rego.visual as Cesium.Entity;\n if (visual.position) {\n let pos3d = GetValue<Cesium.Cartesian3>(viewer, visual.position);\n // Fix height reference.\n if (pos3d?.x) {\n let visualHeightRef = Cesium.HeightReference.RELATIVE_TO_GROUND;\n if (visual.model) {\n visualHeightRef = GetValue<Cesium.HeightReference>(viewer, visual.model.heightReference);\n }\n else if (visual.polygon) {\n visualHeightRef = GetValue<Cesium.HeightReference>(viewer, visual.polygon.heightReference);\n }\n else if (visual.polyline) {\n visualHeightRef = GetValue<boolean>(viewer, visual.polyline.clampToGround) ?\n Cesium.HeightReference.CLAMP_TO_GROUND : Cesium.HeightReference.NONE;\n }\n else if (visual.billboard) {\n visualHeightRef = GetValue<Cesium.HeightReference>(viewer, visual.billboard.heightReference);\n }\n else if (visual.ellipse) {\n visualHeightRef = GetValue<Cesium.HeightReference>(viewer, visual.ellipse.heightReference);\n }\n else if (visual.point) {\n visualHeightRef = GetValue<Cesium.HeightReference>(viewer, visual.point.heightReference);\n }\n return DrawingUtils.EnsurePosHeight({\n desiredHeightRef: params.returnHeightRef,\n heightRef: visualHeightRef,\n pos3d: pos3d,\n viewer: viewer\n });\n }\n }\n }\n return null;\n }\n function evaluateRecord() {\n if (entity.location && Carto.ValidateCarto(entity.location)) {\n const location = entity.location;\n const latitude = EnsureNumber(location.latitude);\n const longitude = EnsureNumber(location.longitude);\n // Disallowing exact 0.\n if (latitude || longitude) {\n return Cesium.Cartesian3.fromDegrees(longitude, latitude, EnsureNumber(location.altitude));\n }\n }\n if (entity.geometry && typeof entity.geometry == \"object\") {\n const pointStr = entity.geometry.Point;\n if (pointStr && typeof pointStr == \"string\") {\n const points = Geometry.ParsePoints(pointStr);\n const point = points.length > 0 ? points[0] : null;\n if (point && Carto.ValidateCarto(point)) {\n return Cesium.Cartesian3.fromDegrees(EnsureNumber(point.longitude), EnsureNumber(point.latitude), EnsureNumber(point.altitude));\n }\n }\n const lineStr = entity.geometry.LineString;\n if (lineStr && typeof lineStr == \"string\") {\n const points = Geometry.ParsePoints(lineStr);\n if (points.length > 0) {\n const posses = points.map(x => Cesium.Cartesian3.fromDegrees(EnsureNumber(x.longitude), EnsureNumber(x.latitude), EnsureNumber(x.altitude)));\n const {totalLength: length} = MeasureUtils.MeasurePolyline({\n posses\n });\n if (length > 0) {\n const {point} = DrawingUtils.PointAcrossPolyline({\n viewer,\n posses: posses,\n distance: length / 2\n });\n if (point && Cartes.ValidateCartes3(point)) {\n return point;\n }\n }\n else {\n return posses[0];\n }\n }\n }\n const pRings = entity.geometry.Polygon;\n if (pRings && typeof pRings == \"object\") {\n const boundary = pRings.find(x => x.Facing == Geometry.EPolygonRingType.Boundaries)\n if (boundary?.LinearRing) {\n const points = Geometry.ParsePoints(boundary.LinearRing);\n const point = Carto.GetCenter(points);\n if (point && Carto.ValidateCarto(point)) {\n return Cesium.Cartesian3.fromDegrees(EnsureNumber(point.longitude), EnsureNumber(point.latitude), EnsureNumber(point.altitude));\n }\n }\n }\n }\n if (entity.boundaries) {\n const point: Carto.ICarto = {\n latitude: (EnsureNumber(entity.boundaries.minLatitude) + EnsureNumber(entity.boundaries.maxLatitude)) / 2,\n longitude: (EnsureNumber(entity.boundaries.minLongitude) + EnsureNumber(entity.boundaries.maxLongitude)) / 2,\n altitude: 0\n };\n // Disallowing exact 0.\n if (point.latitude || point.longitude) {\n if (Carto.ValidateCarto(point)) {\n return Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\n }\n }\n }\n }\n\n let pos3d = evaluateRendered();\n if (Cartes.ValidateCartes3(pos3d)) {\n return pos3d;\n }\n pos3d = evaluateRecord();\n return DrawingUtils.EnsurePosHeight({\n desiredHeightRef: params.returnHeightRef,\n heightRef: params.recordHeightRef,\n pos3d: pos3d,\n viewer: viewer\n });\n }\n\n /**\n * Returns the position of the entity.\n * This is an async variant that checks for related tilesets.\n * @param params\n * @returns\n */\n export async function GetPosAsync(params: {\n // Required if ids are passed instead of records.\n api?: BruceApi.Api,\n viewer: Cesium.Viewer,\n // Either entityId or entity is required.\n entityId?: string,\n entity?: Entity.IEntity,\n // (Optional) tileset to avoid check entity id for associated tilesets.\n tileset?: Tileset.ITileset,\n // (Optional) tileset id to avoid check entity id for associated tilesets.\n tilesetId?: string,\n // (Optional) Register to try find currently rendered position from.\n visualRegister?: VisualsRegister.Register,\n // Will ensure returned position is at this height reference.\n // If no cesium visual is found, it will return it clamped to the ground.\n returnHeightRef?: Cesium.HeightReference,\n // Height reference of the record altitude.\n recordHeightRef?: Cesium.HeightReference,\n }) {\n let { viewer, entityId, entity, tileset, tilesetId, visualRegister, returnHeightRef, recordHeightRef, api } = params;\n if (!entity) {\n try {\n entity = (await Entity.Get({\n api,\n entityId,\n expandLocation: true\n })).entity;\n }\n // Crashes for non tileset entities at the moment.\n catch (e) {\n console.warn(e);\n entity = (await Entity.Get({\n api,\n entityId,\n expandLocation: false\n })).entity;\n }\n }\n if (!entity) {\n return null;\n }\n if (!tilesetId) {\n tilesetId = entity.tilesetID?.length ? entity.tilesetID[0] : tilesetId;\n }\n let pos3d = tilesetId ? null : GetPos({\n viewer,\n entity,\n visualRegister,\n returnHeightRef,\n recordHeightRef\n });\n if (Cartes.ValidateCartes3(pos3d)) {\n return pos3d;\n }\n if (!tileset) {\n if (tilesetId) {\n tileset = (await Tileset.Get({\n api,\n tilesetId\n })).tileset;\n }\n }\n const tSettings = tileset?.settings as Tileset.Settings.ICad;\n if (entity.location?.longitude || tSettings?.location?.longitude) {\n if (entity?.location?.longitude) {\n let alt = +entity.location.altitude;\n if (isNaN(alt)) {\n alt = 0;\n }\n pos3d = Cesium.Cartesian3.fromDegrees(\n +entity.location.longitude,\n +entity.location.latitude,\n alt\n );\n }\n else {\n let alt = +tSettings.location.altitude;\n if (isNaN(alt)) {\n alt = 0;\n }\n pos3d = Cesium.Cartesian3.fromDegrees(\n +tSettings.location.longitude,\n +tSettings.location.latitude,\n alt\n );\n }\n // World position = we got lat/lon/alt from the tileset, now we need to apply relative movement.\n if (entity?.worldPosition) {\n let heading = 0;\n let pitch = 0;\n let roll = 0;\n if (entity?.transform?.heading) {\n heading = entity.transform.heading;\n }\n else if (tSettings?.transform?.heading) {\n heading = tSettings.transform.heading;\n }\n if (entity?.transform?.pitch) {\n pitch = entity.transform.pitch;\n }\n else if (tSettings?.transform?.pitch) {\n pitch = tSettings.transform.pitch;\n }\n if (entity?.transform?.roll) {\n roll = entity.transform.roll;\n }\n else if (tSettings?.transform?.roll) {\n roll = tSettings.transform.roll;\n }\n\n heading = +heading;\n if (isNaN(heading)) {\n heading = 0;\n }\n pitch = +pitch;\n if (isNaN(pitch)) {\n pitch = 0;\n }\n roll = +roll;\n if (isNaN(roll)) {\n roll = 0;\n }\n\n const matrix4 = entity.worldPosition as number[][];\n const offset = new Cesium.Cartesian3(+matrix4[0][3], +matrix4[1][3], +matrix4[2][3]);\n const m1 = Cesium.Transforms.eastNorthUpToFixedFrame(pos3d);\n const hpr = Cesium.HeadingPitchRoll.fromDegrees(heading, pitch, roll, new Cesium.HeadingPitchRoll());\n const transform = Cesium.Matrix3.fromHeadingPitchRoll(hpr);\n const transformedOffset = Cesium.Matrix3.multiplyByVector(transform, offset, new Cesium.Cartesian3());\n pos3d = Cesium.Matrix4.multiplyByPoint(m1, transformedOffset, new Cesium.Cartesian3());\n }\n }\n return DrawingUtils.EnsurePosHeight({\n desiredHeightRef: params.returnHeightRef,\n heightRef: params.recordHeightRef,\n pos3d: pos3d,\n viewer: viewer\n });\n }\n\n /**\n * Returns entity and any associated parent/sibling entities as a flat array.\n * @param entity\n */\n export function GatherEntity(params: {\n entity: Cesium.Entity\n }): Cesium.Entity[] {\n const { entity } = params;\n if (entity instanceof Cesium.Entity) {\n const cEntity = entity as EntityRenderEngine.ICesiumEntityExt;\n const items: EntityRenderEngine.ICesiumEntityExt[] = [];\n traverseEntity(cEntity, items, false);\n return items;\n }\n return [entity];\n }\n\n /**\n * Looks at given entities with least amount of movement.\n * @param viewer\n * @param entities\n */\n export function LookAtEntities(params: {\n viewer: Cesium.Viewer,\n entities: VisualsRegister.Visual[]\n }) {\n let { viewer, entities } = params;\n\n // Removing cesium tileset features for now as it's not accurate.\n entities = [].concat(entities).filter(x => !(x instanceof Cesium.Cesium3DTileFeature));\n if (!entities.length) {\n return;\n }\n\n const [ R, CT, C3, M3, M4, E ] = [ Cesium.Rectangle, Cesium.Cartographic, Cesium.Cartesian3, Cesium.Matrix3, Cesium.Matrix4, Cesium.EasingFunction ];\n const cutoffDistance = 2000;\n const hoverHeight = 2000;\n const duration = 0.5;\n\n const centers = (p: Cesium.Primitive): [Cesium.Cartesian3, number][] => {\n const PM = p.modelMatrix;\n const instances = ((i) => (i instanceof Cesium.GeometryInstance ? [i] : i))(p.geometryInstances);\n return instances.map((g) => {\n const _M = M4.multiply(PM, g.modelMatrix, new M4);\n const G = g.geometry;\n const _p = G.attributes.position;\n const b = G.boundingSphere;\n return [ b.center, b.radius ];\n });\n };\n\n const currentTime = Cesium.JulianDate.now();\n const target: [Cesium.Cartesian3, number][] = entities.flatMap((e) => {\n if (e instanceof Cesium.Cartesian3) {\n return [[ e, 0 ]];\n }\n if (e instanceof Cesium.Entity) {\n return [[ e.position?.getValue(currentTime)!, 0 ]];\n }\n if (e instanceof Cesium.Primitive) {\n return centers(e);\n }\n if (e instanceof Cesium.Cesium3DTileFeature) {\n const s = e.tileset.boundingSphere;\n return [[ s.center, s.radius ]];\n }\n });\n\n const bounds = (list: [Cesium.Cartesian3, number][]) => {\n let min = list[0][0];\n let max = min;\n for (const [ p, r ] of list) {\n const pMin = C3.subtract(p, new C3(r), new C3);\n const pMax = C3.add(p, new C3(r), new C3);\n min = C3.minimumByComponent(pMin, min, new C3);\n max = C3.maximumByComponent(pMax, max, new C3);\n }\n const c = C3.multiplyByScalar(C3.add(max, min, new C3), 0.5, new C3);\n\n return c;\n };\n\n const center = bounds(target);\n\n const orient = (p) => {\n const d = C3.subtract(center, p, new C3);\n const dir = C3.normalize(d, new C3);\n const up = viewer.scene.globe.ellipsoid.geodeticSurfaceNormal(center);\n return [ p, dir, up ];\n };\n\n const shorten = (v, l) => {\n const c = l / C3.magnitude(v);\n return C3.multiplyByScalar(v, c, new C3);\n };\n\n const camera = viewer.camera;\n const [ p, direction, up ] = orient(camera.position);\n const orientation = { direction, up };\n camera.flyTo({\n destination: p,\n orientation,\n duration,\n complete: () => {\n if (C3.distance(p, center) > cutoffDistance) {\n let d = C3.subtract(p, center, new C3);\n d = shorten(d, cutoffDistance);\n const h = C3.multiplyByScalar(C3.normalize(up, new C3), hoverHeight, new C3);\n d = C3.add(d, h, new C3);\n d = shorten(d, cutoffDistance);\n d = C3.add(d, center, new C3);\n\n const [ _p, direction, u ] = orient(d);\n camera.flyTo({\n destination: d,\n orientation: { direction, up: u }\n });\n }\n }\n });\n }\n\n /**\n * Sets opacity of given entity.\n * Opacity will be multiplied by original opacity.\n * Setting opacity puts original opacity into a temporary storage which can be reverted into.\n * @param viewer\n * @param entity\n * @param opacity\n */\n export function SetOpacity(params: {\n viewer: Cesium.Viewer,\n entity: VisualsRegister.Visual,\n opacity: number\n }) {\n const { viewer, entity, opacity } = params;\n applyOpacityToEntity(viewer, opacity, entity);\n }\n\n /**\n * Reverts opacity of given entity to original opacity.\n * If opacity was not updated using \"SetOpacity\" then nothing will happen.\n * @param viewer\n * @param entity\n */\n export function RevertOpacity(params: {\n viewer: Cesium.Viewer,\n entity: VisualsRegister.Visual\n }) {\n const { viewer, entity } = params;\n revertAppliedEntityOpacity(viewer, entity);\n }\n\n /**\n * Gets opacity of the entity.\n * This does not count opacity that it was rendered with.\n * This is the opacity that was set post-rendering.\n * @param viewer\n * @param entity\n */\n export function GetOpacity(params: {\n entity: VisualsRegister.Visual\n }) {\n const { entity } = params;\n return findOpacity(entity);\n }\n}","import { EntityUtils } from \"../../utils/entity-utils\";\nimport { Cartes, Carto, Entity, Geometry, MathUtils, ZoomControl, LRUCache } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { EnsureNumber } from \"../../internal/js-utils\";\n\nfunction distanceToSegment(fromPoint: Cesium.Cartesian3, toPoint1: Cesium.Cartesian3, toPoint2: Cesium.Cartesian3): number {\n const ab = Cesium.Cartesian3.subtract(toPoint2, toPoint1, new Cesium.Cartesian3());\n const ap = Cesium.Cartesian3.subtract(fromPoint, toPoint1, new Cesium.Cartesian3());\n\n const e = Cesium.Cartesian3.dot(ap, ab);\n if (e <= 0) {\n return Cesium.Cartesian3.distance(fromPoint, toPoint1);\n }\n const f = Cesium.Cartesian3.dot(ab, ab);\n if (e >= f) {\n return Cesium.Cartesian3.distance(fromPoint, toPoint2);\n }\n\n const proj = Cesium.Cartesian3.multiplyByScalar(ab, e / f, new Cesium.Cartesian3());\n const projECEF = Cesium.Cartesian3.add(toPoint1, proj, new Cesium.Cartesian3());\n return Cesium.Cartesian3.distance(fromPoint, projECEF);\n}\n\nfunction pointInsidePolygon(point: Carto.ICarto, polygon: Carto.ICarto[]): boolean {\n let inside = false;\n const x = point.latitude;\n const y = point.longitude;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const xi = +polygon[i].latitude;\n const yi = +polygon[i].longitude;\n const xj = +polygon[j].latitude;\n const yj = +polygon[j].longitude;\n if (isNaN(xi) || isNaN(yi) || isNaN(xj) || isNaN(yj)) {\n continue;\n }\n const intersect = (yi > y) !== (yj > y) && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi;\n if (intersect) {\n inside = !inside;\n }\n }\n return inside;\n}\n\nfunction distanceToPolygon(point: Carto.ICarto, polygon: Carto.ICarto[]): number {\n if (pointInsidePolygon(point, polygon)) {\n const avgAltitude = polygon.reduce((sum, vertex) => sum + vertex.altitude, 0) / polygon.length;\n return Math.abs(point.altitude - avgAltitude);\n }\n const pointECEF = Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\n let minDistance = Infinity;\n for (let i = 0; i < polygon.length; i++) {\n const point1 = polygon[i];\n const point1Latitude = EnsureNumber(point1.latitude);\n const point1Longitude = EnsureNumber(point1.longitude);\n if (!point1Latitude && !point1Longitude) {\n continue;\n }\n const point2 = polygon[(i + 1) % polygon.length];\n const point2Latitude = EnsureNumber(point2.latitude);\n const point2Longitude = EnsureNumber(point2.longitude);\n if (!point2Latitude && !point2Longitude) {\n continue;\n }\n const coord1ECEF = Cesium.Cartesian3.fromDegrees(\n point1Longitude,\n point1Latitude,\n EnsureNumber(point1.altitude)\n );\n const coord2ECEF = Cesium.Cartesian3.fromDegrees(\n point2Longitude,\n point2Latitude,\n EnsureNumber(point2.altitude)\n );\n const distance = distanceToSegment(pointECEF, coord1ECEF, coord2ECEF);\n minDistance = Math.min(minDistance, distance);\n }\n return minDistance;\n}\n\n// Cache for distance calculations.\n// It will keep only the most recent 3000 entries.\nconst distanceCache = new LRUCache<string, number>(3000);\nfunction createCacheKey(point: Carto.ICarto, entity: Entity.IEntity): string {\n try {\n const pointData = {\n latitude: MathUtils.Round(+point.latitude, 5),\n longitude: MathUtils.Round(+point.longitude, 5),\n altitude: MathUtils.Round(+point.altitude, 4)\n };\n const entityData = {\n ...entity.location,\n ...entity.geometry,\n ...entity.boundaries\n };\n return JSON.stringify(pointData) + '|' + JSON.stringify(entityData);\n }\n catch (e) {\n console.error(e);\n return null;\n }\n}\n\n/**\n * Calculates distance while accounting for polylines and polygons.\n * It does not account for multi-geometry.\n * @param point\n * @param entity\n * @returns\n */\nfunction calculateDistance(point: Carto.ICarto, entity: Entity.IEntity): number {\n const cacheKey = createCacheKey(point, entity);\n const cachedResult = cacheKey ? distanceCache.Get(cacheKey) : null;\n if (cachedResult || cachedResult == 0) {\n return cachedResult;\n }\n\n let minDistance = Infinity;\n const pointPos = Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\n\n // We'll start by using the entity location if it's available.\n let entityPos3d: Cesium.Cartesian3 = null;\n if (entity.location && entity.location.latitude) {\n const latitude = EnsureNumber(entity.location.latitude);\n const longitude = EnsureNumber(entity.location.longitude);\n // Disallowing exact 0.\n if (latitude || longitude) {\n const altitude = EnsureNumber(entity.location.altitude);\n entityPos3d = Cesium.Cartesian3.fromDegrees(longitude, latitude, altitude);\n }\n }\n if (!isNaN(entityPos3d.x)) {\n minDistance = Cesium.Cartesian3.distance(pointPos, entityPos3d);\n }\n // Check geometry if it's available.\n if (entity.geometry) {\n let passedGeometry = false;\n if (entity.geometry.Polygon) {\n const polygonRings = entity.geometry.Polygon;\n const polygon = typeof polygonRings == \"string\" ? String(polygonRings) : polygonRings.length ? polygonRings[0].LinearRing : \"\";\n let points = polygon ? Geometry.ParsePoints(polygon) : [];\n if (points.length > 2) {\n const distance = distanceToPolygon(point, points);\n if (!isNaN(distance)) {\n minDistance = Math.min(minDistance, distance);\n passedGeometry = true;\n }\n }\n }\n if (!passedGeometry && entity.geometry.LineString) {\n const points = Geometry.ParsePoints(entity.geometry.LineString);\n if (points.length > 1) {\n const pointsLen = points.length;\n for (let i = 0; i < pointsLen; i++) {\n const point1 = points[i];\n const point1Latitude = EnsureNumber(point1.latitude);\n const point1Longitude = EnsureNumber(point1.longitude);\n if (!point1Latitude && !point1Longitude) {\n continue;\n }\n const point2 = points[(i + 1) % pointsLen];\n const point2Latitude = EnsureNumber(point2.latitude);\n const point2Longitude = EnsureNumber(point2.longitude);\n if (!point2Latitude && !point2Longitude) {\n continue;\n }\n const coord1ECEF = Cesium.Cartesian3.fromDegrees(\n point1Longitude,\n point1Latitude,\n EnsureNumber(point1.altitude)\n );\n const coord2ECEF = Cesium.Cartesian3.fromDegrees(\n point2Longitude,\n point2Latitude,\n EnsureNumber(point2.altitude)\n );\n const distance = distanceToSegment(pointPos, coord1ECEF, coord2ECEF);\n if (!isNaN(distance)) {\n minDistance = Math.min(minDistance, distance);\n passedGeometry = true;\n }\n }\n }\n }\n }\n // Backup is using boundaries.\n if (minDistance === Infinity && entity.boundaries) {\n const point: Carto.ICarto = {\n latitude: (EnsureNumber(entity.boundaries.minLatitude) + EnsureNumber(entity.boundaries.maxLatitude)) / 2,\n longitude: (EnsureNumber(entity.boundaries.minLongitude) + EnsureNumber(entity.boundaries.maxLongitude)) / 2,\n altitude: 0\n };\n // Disallowing exact 0.\n if (point.latitude || point.longitude) {\n if (Carto.ValidateCarto(point)) {\n const boundsPoint = Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\n minDistance = Cesium.Cartesian3.distance(pointPos, boundsPoint);\n }\n }\n }\n\n if (cacheKey) {\n distanceCache.Set(cacheKey, minDistance);\n }\n return minDistance;\n}\n\nexport namespace RenderManager {\n export interface IManager {\n /**\n * Must be sync so that experience related to enabling/disabling is easier to manage.\n * If any async stuff needs to be loaded then it needs to be handled internally within the manager.\n */\n Init(): void;\n Dispose(): void;\n Disposed: boolean;\n ReRender(params: {\n entityIds?: string[],\n entities?: Entity.IEntity[],\n force?: boolean\n }): Promise<void>;\n }\n\n export function DetermineZoomItem(params: {\n viewer: Cesium.Viewer,\n entity: Entity.IEntity,\n zoomControl: ZoomControl.IItem[]\n }): ZoomControl.IItem {\n const {viewer, entity, zoomControl} = params;\n const pos = EntityUtils.GetPos({\n viewer,\n entity\n });\n if (!pos) {\n return null;\n }\n const is2d = viewer.scene.mode === Cesium.SceneMode.SCENE2D;\n const cameraPos = viewer.camera.positionCartographic;\n if (!cameraPos || !cameraPos.latitude) {\n return null;\n }\n const distance = calculateDistance({\n altitude: cameraPos.height,\n latitude: Cesium.Math.toDegrees(cameraPos.latitude),\n longitude: Cesium.Math.toDegrees(cameraPos.longitude)\n }, entity);\n let zoomItem = (!distance && distance != 0) ? null : GetZoomControlFromDistance({\n zoomControl,\n distance\n });\n // In 2d cesium gets camera position very wrong.\n // TODO: Need to check if lat/lon is correct and use that for distance calc instead.\n if (is2d && !zoomItem && zoomControl.length) {\n zoomItem = zoomControl[zoomControl.length - 1];\n }\n return zoomItem;\n }\n\n export function GetZoomControlFromDistance(params: {\n zoomControl: ZoomControl.IItem[],\n distance: number\n }): ZoomControl.IItem {\n const {zoomControl, distance} = params;\n for (let i = 0; i < zoomControl.length; i++) {\n let zoomItem = zoomControl[i];\n if ((distance >= EnsureNumber(zoomItem.MinZoom)) && (distance <= EnsureNumber(zoomItem.MaxZoom))) {\n return zoomItem;\n }\n }\n return <any>null;\n }\n\n export function GetZoomMinMax(params: {\n zoomControl: ZoomControl.IItem[]\n }): number[] {\n const {zoomControl} = params;\n let min = 0;\n let max = 100;\n for (let i = 0; i < zoomControl.length; i++) {\n const zoomItem = zoomControl[i];\n zoomItem.MinZoom = EnsureNumber(zoomItem.MinZoom);\n zoomItem.MaxZoom = EnsureNumber(zoomItem.MaxZoom);\n if (zoomItem.MinZoom != null) {\n if (zoomItem.MinZoom < min) {\n min = zoomItem.MinZoom;\n }\n }\n if (zoomItem.MaxZoom != null) {\n if (zoomItem.MaxZoom > max) {\n max = zoomItem.MaxZoom;\n }\n }\n }\n return [min, max];\n }\n}","import * as Cesium from \"cesium\";\nimport { Entity, BruceApi, ZoomControl, Style, EntityTag, Calculator, Color, Geometry, Carto, EntityLod, EntityType, IDictionary, ClientFile, ObjectUtils, Cartes } from \"bruce-models\";\nimport { EntityUtils } from \"../utils/entity-utils\";\nimport { RenderManager } from \"./render-managers/render-manager\";\nimport { VisualsRegister } from \"./visuals-register\";\nimport { EnsureNumber } from \"../internal/js-utils\";\n\nfunction colorToCColor(color: Color.IColor): Cesium.Color {\n return new Cesium.Color(\n color.red ? color.red/255 : 0,\n color.green ? color.green/255 : 0,\n color.blue ? color.blue/255 : 0,\n color.alpha\n );\n}\n\nfunction getPolygonStyleExtrusion(pStyle: any, entity: Entity.IEntity, tags: EntityTag.ITag[], heightRef: Cesium.HeightReference): number {\n const attrPath = pStyle.extrusionPath;\n if (!pStyle.useExtrusion || !attrPath) {\n return <any>null;\n }\n try {\n const extrusion = +Calculator.GetNumber(attrPath, entity, tags);\n if (!extrusion && extrusion != 0) {\n return <any>null;\n }\n /*\n Cesium extrudes in strange way.\n If you want something that is 50 meters above sea, and 5 meters tall,\n You need to extrude by 55 meters, if you extrude by 5 it will extrude from sea and look flat.\n */\n const height = <number>entity.location?.altitude;\n return heightRef != Cesium.HeightReference.CLAMP_TO_GROUND ? extrusion + height : extrusion;\n }\n catch (e) {\n console.error(e);\n }\n return 0;\n}\n\ninterface IExtrusionData {\n value: number;\n exHeightRef: Cesium.HeightReference;\n posses: Cesium.Cartesian3[];\n}\n\nfunction getPolygonExtrusion(\n entity: Entity.IEntity,\n tags: EntityTag.ITag[],\n ring: Geometry.IPolygonRing,\n posses: Cesium.Cartesian3[],\n heightRef: Cesium.HeightReference,\n pStyle: any\n): IExtrusionData {\n const data: IExtrusionData = {\n value: <any>undefined,\n exHeightRef: Cesium.HeightReference.RELATIVE_TO_GROUND,\n posses: <any>null\n }\n\n // Step 1. Try get using style.\n const extrusion = getPolygonStyleExtrusion(pStyle, entity, tags, heightRef);\n if (extrusion) {\n if (heightRef == Cesium.HeightReference.NONE) {\n // Let's normalize all point heights to be the same (at entity altitude).\n // This let's us have a consistent extrusion height, and be adjustable easier by user.\n let alt = <number>entity?.location?.altitude;\n if (!alt) {\n alt = 0;\n }\n\n const points = posses.map(x => Cesium.Cartographic.fromCartesian(x));\n points.forEach((point) => {\n point.height = alt;\n });\n posses = points.map(x => Cesium.Cartesian3.fromRadians(EnsureNumber(x.longitude), EnsureNumber(x.latitude), EnsureNumber(x.height)));\n }\n data.value = extrusion;\n }\n // Step 2. Try get using geometry data.\n else {\n data.exHeightRef = <any>undefined;\n if (ring.Height && ring.Height > 0) {\n const points = posses.map(x => Cesium.Cartographic.fromCartesian(x));\n if (points.length <= 0) {\n data.value = ring.Height;\n }\n else {\n let highest: number = <any>null;\n for (let i = 0; i < points.length; i++) {\n let pointHeight = points[i].height;\n if (pointHeight > highest || highest === null) {\n highest = pointHeight;\n }\n }\n highest = (highest === null ? 0 : highest) + ring.Height;\n data.value = highest;\n }\n data.exHeightRef = Cesium.HeightReference.NONE;\n }\n }\n\n data.posses = posses;\n if (data.value != undefined) {\n data.value = EnsureNumber(data.value);\n }\n return data;\n}\n\nfunction getHeightRef(style: any): Cesium.HeightReference {\n let heightRef = Cesium.HeightReference.CLAMP_TO_GROUND;\n const altOptionId = style?.altitudeOption?.id;\n if (altOptionId == 1) {\n heightRef = Cesium.HeightReference.NONE;\n }\n else if (altOptionId == 2) {\n heightRef = Cesium.HeightReference.RELATIVE_TO_GROUND;\n }\n return heightRef;\n}\n\nfunction getZIndex(style: any, entity: Entity.IEntity, tags: EntityTag.ITag[]): number {\n let zIndex = style?.zIndex ? +Calculator.GetNumber(style?.zIndex, entity, tags) : 0;\n if (zIndex == null) {\n zIndex = 0;\n }\n return EnsureNumber(zIndex);\n}\n\nfunction getValue<T>(viewer: Cesium.Viewer, obj: Cesium.Property | any): T {\n if ((obj as any)?.getValue) {\n return obj.getValue(viewer.scene.lastRenderTime);\n }\n return obj;\n}\n\nasync function getStyle(api: BruceApi.Api, entity: Entity.IEntity, styleId: number): Promise<Style.IStyle> {\n let style: Style.IStyle = <any>null;\n if (styleId) {\n style = (await Style.Get({\n api,\n styleId\n })).style;\n }\n if (!style) {\n const {entityType: type} = await EntityType.Get({\n api,\n entityTypeId: entity.Bruce[\"EntityType.ID\"]\n });\n if (type[\"DisplaySetting.ID\"]) {\n style = (await Style.Get({\n api,\n styleId: type[\"DisplaySetting.ID\"]\n })).style;\n }\n }\n return style;\n}\n\n/**\n * Height fix means while flat terrain is active we don't clamp-to-ground and instead place at alt=0.\n * This is currently breaking as the curvature of the earth makes larger polygons/polylines clip.\n * @param terrain \n * @returns \n */\nfunction shouldApplyFlatFix(terrain: Cesium.TerrainProvider) {\n //return terrain instanceof Cesium.EllipsoidTerrainProvider;\n return false;\n}\n\nfunction getRenderGroupId(zoomItem: ZoomControl.IItem, terrain: Cesium.TerrainProvider): string {\n if (!zoomItem) {\n return <any>null;\n }\n return zoomItem.MinZoom + \"-\" + zoomItem.MaxZoom + \"-\" + shouldApplyFlatFix(terrain);\n}\n\nlet _fileValidationCache: IDictionary<boolean> = {};\n\nfunction getDisplayCondition(min: number, max: number): Cesium.DistanceDisplayCondition {\n // Max is required.\n if (isNaN(+max)) {\n return undefined;\n }\n // Min is optional.\n if (isNaN(+min)) {\n min = 0;\n }\n // Adjusting slightly because I distrust our initial calculation vs Cesium's one.\n max = (+max) * 1.2;\n min = +min;\n if (min > 0) {\n min = (+min) * 0.8;\n }\n return new Cesium.DistanceDisplayCondition(min, max);\n}\n\nfunction getTranslucencyByDistance(min: number, max: number): Cesium.NearFarScalar {\n // Max is required.\n if (isNaN(+max)) {\n return undefined;\n }\n // Min is optional.\n if (isNaN(+min)) {\n min = 0;\n }\n // Adjusting slightly because I distrust our initial calculation vs Cesium's one.\n max = (+max) * 1.2;\n min = +min;\n if (min > 0) {\n min = (+min) * 0.8;\n }\n return new Cesium.NearFarScalar(min, 1, max, 0);\n}\n\nexport namespace EntityRenderEngine {\n export interface ICesiumEntityExt extends Cesium.Entity {\n _siblingGraphics?: Cesium.Entity[];\n _parentEntity?: Cesium.Entity;\n _renderGroup?: string;\n }\n\n export interface ICesiumModelExt extends Cesium.ModelGraphics {\n _clientFileId?: string;\n _entityScale?: {\n record?: number;\n style?: number;\n }\n }\n\n export interface IParams {\n apiGetter: BruceApi.IGetter,\n viewer: Cesium.Viewer;\n visualRegister: VisualsRegister.Register;\n menuItemId: string;\n zoomControl: ZoomControl.IItem[];\n entities: Entity.IEntity[];\n force?: boolean;\n }\n\n export async function Render(params: IParams): Promise<IDictionary<ICesiumEntityExt>> {\n const groupRenderParams = {\n apiGetter: params.apiGetter,\n viewer: params.viewer,\n entities: [],\n zoomItems: <IDictionary<ZoomControl.IItem>>{},\n menuItemId: params.menuItemId,\n visualRegister: params.visualRegister\n }\n // Flatten multi-geometry if it's only got 1 piece.\n for (let i = 0; i < params.entities.length; i++) {\n const entity = params.entities[i];\n const geometry = entity.geometry;\n if (geometry?.MultiGeometry?.length == 1) {\n entity.geometry = {\n ...entity.geometry,\n ...geometry.MultiGeometry[0],\n MultiGeometry: []\n };\n }\n }\n\n const cEntities: IDictionary<ICesiumEntityExt> = {};\n const models: Entity.IEntity[] = [];\n const multiGeometry: Entity.IEntity[] = [];\n const polygons: Entity.IEntity[] = [];\n const polylines: Entity.IEntity[] = [];\n const points: Entity.IEntity[] = [];\n\n // Initial sorting.\n for (let i = 0; i < params.entities.length; i++) {\n const entity = params.entities[i];\n const id = <string>entity.Bruce.ID;\n\n const zoomItem = RenderManager.DetermineZoomItem({\n viewer: params.viewer,\n entity,\n zoomControl: params.zoomControl\n });\n let displayType = zoomItem?.DisplayType;\n if (!displayType) {\n displayType = ZoomControl.EDisplayType.Hidden;\n }\n // Backwards compatibility.\n else if (<string>displayType == \"polygon\") {\n displayType = ZoomControl.EDisplayType.Geometry;\n }\n\n if (displayType != ZoomControl.EDisplayType.Hidden) {\n const newRenderId = getRenderGroupId(zoomItem, params.viewer?.terrainProvider);\n const existingRego = params.visualRegister.GetRego({\n entityId: id,\n menuItemId: params.menuItemId\n });\n const oldRenderId = (existingRego?.visual as ICesiumEntityExt)?._renderGroup;\n if (!params.force && newRenderId == oldRenderId && !existingRego?.stale) {\n cEntities[id] = existingRego.visual as ICesiumEntityExt;\n }\n else {\n if (displayType == ZoomControl.EDisplayType.Model3D) {\n models.push(entity);\n }\n else if (displayType == ZoomControl.EDisplayType.Geometry) {\n if (entity.geometry?.MultiGeometry?.length) {\n multiGeometry.push(entity);\n }\n else {\n polygons.push(entity);\n }\n }\n else {\n points.push(entity);\n }\n groupRenderParams.zoomItems[id] = zoomItem;\n }\n }\n }\n\n // Keep trying to render things in order of hard-coded priority system.\n if (models.length > 0) {\n const mParams: Model3d.IGroupParams = {\n ...groupRenderParams,\n entities: models\n };\n const mEntities = await Model3d.RenderGroup(mParams);\n for (let i = 0; i < mParams.entities.length; i++) {\n const entity = mParams.entities[i];\n const id = <string>entity.Bruce.ID;\n const cEntity = mEntities[id];\n if (cEntity) {\n cEntities[id] = cEntity;\n }\n else {\n multiGeometry.push(entity);\n }\n }\n }\n if (multiGeometry.length > 0) {\n for (let i = 0; i < multiGeometry.length; i++) {\n const entity = multiGeometry[i];\n if (!entity.geometry?.MultiGeometry?.length) {\n polygons.push(entity);\n continue;\n }\n const pParams: Polygon.IGroupParams | Polyline.IGroupParams = {\n ...groupRenderParams,\n entities: []\n };\n const zoomItem = pParams.zoomItems[entity.Bruce.ID];\n for (let j = 0; j < entity.geometry.MultiGeometry.length; j++) {\n const subEntity = {\n ...entity,\n geometry: entity.geometry.MultiGeometry[j],\n Bruce: {\n ...entity.Bruce,\n ID: ObjectUtils.UId()\n }\n };\n pParams.zoomItems[subEntity.Bruce.ID] = zoomItem;\n pParams.entities.push(subEntity);\n }\n const cPoly = await Polygon.RenderGroup(pParams);\n Object.keys(cPoly).forEach((key) => {\n if (cPoly[key]) {\n pParams.entities = pParams.entities.filter((e) => e.Bruce.ID != key);\n }\n });\n let rendered = Object.values(cPoly);\n const cLines = await Polyline.RenderGroup(pParams);\n Object.keys(cLines).forEach((key) => {\n if (cLines[key]) {\n pParams.entities = pParams.entities.filter((e) => e.Bruce.ID != key);\n }\n });\n rendered = rendered.concat(Object.values(cLines));\n const cPoints = await Point.RenderGroup(pParams);\n rendered = rendered.concat(Object.values(cPoints));\n rendered = rendered.filter(x => x != null);\n if (rendered.length) {\n const rootEntity = new Cesium.Entity({}) as ICesiumEntityExt;\n params.viewer.entities.add(rootEntity);\n rootEntity._siblingGraphics = [];\n rootEntity._renderGroup = getRenderGroupId(zoomItem, params.viewer?.terrainProvider);\n rootEntity._siblingGraphics = rootEntity._siblingGraphics.concat(rendered);\n cEntities[<string>entity.Bruce.ID] = rootEntity;\n const firstEntity = rendered[0];\n if (firstEntity) {\n rootEntity.position = getValue(params.viewer, firstEntity.position);\n }\n rendered.forEach((child) => {\n child._parentEntity = rootEntity;\n });\n }\n else {\n polygons.push(entity);\n }\n }\n }\n if (polygons.length > 0) {\n const pParams: Polygon.IGroupParams = {\n ...groupRenderParams,\n entities: polygons\n };\n const pEntities = await Polygon.RenderGroup(pParams);\n for (let i = 0; i < pParams.entities.length; i++) {\n const entity = pParams.entities[i];\n const cEntity = pEntities[<string>entity.Bruce.ID];\n if (cEntity) {\n cEntities[<string>entity.Bruce.ID] = cEntity;\n }\n else {\n polylines.push(entity);\n }\n }\n }\n if (polylines.length > 0) {\n const pParams: Polyline.IGroupParams = {\n ...groupRenderParams,\n entities: polylines\n };\n const pEntities = await Polyline.RenderGroup(pParams);\n for (let i = 0; i < pParams.entities.length; i++) {\n const entity = pParams.entities[i];\n const cEntity = pEntities[<string>entity.Bruce.ID];\n if (cEntity) {\n cEntities[<string>entity.Bruce.ID] = cEntity;\n }\n else {\n points.push(entity);\n }\n }\n }\n if (points.length > 0) {\n const pParams: Point.IGroupParams = {\n ...groupRenderParams,\n entities: points\n };\n const pEntities = await Point.RenderGroup(pParams);\n for (let i = 0; i < pParams.entities.length; i++) {\n const entity = pParams.entities[i];\n const cEntity = pEntities[<string>entity.Bruce.ID];\n if (cEntity) {\n cEntities[<string>entity.Bruce.ID] = cEntity;\n }\n }\n }\n\n return cEntities;\n }\n\n export function Remove(params: {\n viewer: Cesium.Viewer,\n entity: ICesiumEntityExt,\n }): void {\n function doRemove(params: {\n viewer: Cesium.Viewer,\n entity: ICesiumEntityExt,\n ignoreParent: boolean\n }) {\n const { viewer, entity, ignoreParent } = params;\n if (viewer.isDestroyed()) {\n return;\n }\n if (entity._parentEntity && !ignoreParent) {\n doRemove({\n viewer,\n entity: entity._parentEntity,\n ignoreParent: false\n });\n }\n if (entity._siblingGraphics) {\n for (let i = 0; i < entity._siblingGraphics.length; i++) {\n const sibling = entity._siblingGraphics[i];\n doRemove({\n viewer,\n entity: sibling,\n ignoreParent: true\n });\n }\n }\n if (viewer.entities.contains(entity)) {\n viewer.entities.remove(entity);\n }\n }\n doRemove({\n viewer: params.viewer,\n entity: params.entity,\n ignoreParent: false\n });\n }\n\n export namespace Point {\n export interface IParams {\n api: BruceApi.Api;\n style: Style.IPointSettings;\n entity: Entity.IEntity;\n tags: EntityTag.ITag[];\n viewer: Cesium.Viewer;\n // The min and max distance to display the entity.\n maxDistance?: number;\n minDistance?: number;\n }\n\n export interface IGroupParams {\n apiGetter: BruceApi.IGetter,\n menuItemId: string;\n entities: Entity.IEntity[];\n zoomItems: IDictionary<ZoomControl.IItem>;\n visualRegister: VisualsRegister.Register;\n viewer: Cesium.Viewer;\n }\n\n export async function Render(params: IParams): Promise<ICesiumEntityExt> {\n const entity = params.entity;\n const style = params.style;\n let type = style.Type;\n if (type == null) {\n // Very old backward compatibility.\n if ((style as any).useIcon == true) {\n type = Style.EPointType.Icon;\n }\n }\n\n let cEntity: ICesiumEntityExt = <any>null;\n let siblings: ICesiumEntityExt[] = [];\n\n if (type == Style.EPointType.Icon) {\n // Fixing poor data.\n let iconUrlRows = style.iconUrl == null ? [] : style.iconUrl;\n iconUrlRows.forEach((row) => {\n if (row.type == Calculator.EValueType.Color) {\n row.type = Calculator.EValueType.Input;\n }\n });\n\n const icon = Calculator.GetString(iconUrlRows, entity, params.tags);\n let iconUrl: string = <any>null;\n if (typeof icon == \"string\") {\n iconUrl = icon;\n }\n if (!iconUrl && style.iconId) {\n iconUrl = ClientFile.GetUrl({\n api: params.api,\n fileId: style.iconId\n });\n }\n\n // ND-1640 - Tags not appearing.\n // Validate file, else user will see nothing.\n // Pray we aren't loading some giant file.\n if (iconUrl) {\n try {\n if (_fileValidationCache[iconUrl] == null) {\n const res = await fetch(iconUrl);\n if (res.status != 200) {\n iconUrl = null;\n }\n _fileValidationCache[iconUrl] = Boolean(iconUrl);\n }\n else if (!_fileValidationCache[iconUrl]) {\n iconUrl = null;\n }\n }\n catch (e) {\n iconUrl = null;\n }\n }\n\n if (iconUrl) {\n let iconScale = EnsureNumber(Calculator.GetNumber(style.iconScale, entity, params.tags));\n if (!iconScale && iconScale != 0) {\n iconScale = 1;\n }\n if (iconScale > 0) {\n const heightRef = getHeightRef(style);\n cEntity = new Cesium.Entity({\n billboard: {\n horizontalOrigin: Cesium.HorizontalOrigin.CENTER,\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n image: iconUrl,\n heightReference: getHeightRef(style),\n scale: iconScale,\n distanceDisplayCondition: getDisplayCondition(params.minDistance, params.maxDistance),\n // Would be great once we have a setting for this.\n // translucencyByDistance: getTranslucencyByDistance(params.minDistance, params.maxDistance),\n },\n position: EntityUtils.GetPos({\n viewer: params.viewer,\n entity,\n recordHeightRef: heightRef,\n returnHeightRef: heightRef\n }),\n show: false\n });\n }\n }\n }\n if (type == Style.EPointType.Cylinder) {\n const radius = EnsureNumber(Calculator.GetNumber(style.CylinderRadius, entity, params.tags));\n if (radius <= 0) {\n return null;\n }\n const bFill: Color.IColor = style.CylinderFillColor ? Calculator.GetColor(style.CylinderFillColor, entity, params.tags) : null;\n const cFill = bFill ? colorToCColor(bFill) : Cesium.Color.RED;\n const outline = Boolean(style.CylinderBorderEnabled);\n let cOutline: Cesium.Color = null;\n let outlineWidth = 1;\n let outlineHeight = 0;\n if (outline) {\n const bOutline: Color.IColor = style.CylinderBorderColor ? Calculator.GetColor(style.CylinderBorderColor, entity, params.tags) : null;\n cOutline = bOutline ? colorToCColor(bOutline) : Cesium.Color.BLACK;\n outlineWidth = EnsureNumber(Calculator.GetNumber(style.CylinderBorderWidth, entity, params.tags), 1);\n outlineHeight = EnsureNumber(Calculator.GetNumber(style.CylinderBorderExtrusion, entity, params.tags), 0);\n }\n let fillHeight = EnsureNumber(Calculator.GetNumber(style.CylinderFillExtrusion, entity, params.tags));\n let exHeightRef: Cesium.HeightReference = undefined;\n if (fillHeight > 0) {\n exHeightRef = Cesium.HeightReference.RELATIVE_TO_GROUND;\n }\n\n const pos = EntityUtils.GetPos({\n viewer: params.viewer,\n entity,\n recordHeightRef: Cesium.HeightReference.CLAMP_TO_GROUND,\n returnHeightRef: Cesium.HeightReference.CLAMP_TO_GROUND\n });\n\n cEntity = new Cesium.Entity({\n ellipse: {\n semiMajorAxis: radius,\n semiMinorAxis: radius,\n material: cFill,\n outlineWidth: null,\n extrudedHeight: fillHeight,\n heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,\n extrudedHeightReference: exHeightRef,\n zIndex: 1,\n distanceDisplayCondition: getDisplayCondition(params.minDistance, params.maxDistance)\n },\n position: pos?.clone(),\n show: false\n });\n if (outline && outlineWidth > 0) {\n if (!exHeightRef && outlineHeight > 0) {\n exHeightRef = Cesium.HeightReference.RELATIVE_TO_GROUND;\n // We need height reference to match between rings.\n cEntity.ellipse.extrudedHeightReference = <Cesium.Property><any>exHeightRef;\n }\n siblings.push(new Cesium.Entity({\n ellipse: {\n semiMajorAxis: radius + outlineWidth,\n semiMinorAxis: radius + outlineWidth,\n material: cOutline,\n outlineWidth: undefined,\n extrudedHeight: outlineHeight,\n heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,\n extrudedHeightReference: exHeightRef,\n zIndex: 2,\n distanceDisplayCondition: getDisplayCondition(params.minDistance, params.maxDistance)\n },\n position: pos?.clone()\n }));\n }\n }\n if (!cEntity) {\n const bColor: Color.IColor = style.color ? Calculator.GetColor(style.color, entity, params.tags) : null;\n const cColor = bColor ? colorToCColor(bColor) : Cesium.Color.RED;\n\n let size = style.size ? <number>Calculator.GetNumber(style.size, entity, params.tags) : null;\n if (size == null) {\n size = 30;\n }\n size = EnsureNumber(size);\n if (size <= 0) {\n return <any>null;\n }\n const heightRef = getHeightRef(style);\n cEntity = new Cesium.Entity({\n point: {\n pixelSize: size,\n color: cColor,\n heightReference: getHeightRef(style),\n distanceDisplayCondition: getDisplayCondition(params.minDistance, params.maxDistance)\n },\n position: EntityUtils.GetPos({\n viewer: params.viewer,\n entity,\n recordHeightRef: heightRef,\n returnHeightRef: heightRef\n }),\n show: false\n });\n }\n if (cEntity) {\n params.viewer.entities.add(cEntity);\n if (siblings) {\n siblings.forEach((sibling) => {\n params.viewer.entities.add(sibling);\n });\n }\n cEntity._siblingGraphics = siblings;\n }\n return cEntity;\n }\n\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\n const api = params.apiGetter.getApi();\n\n const cEntities: IDictionary<ICesiumEntityExt> = {};\n for (let i = 0; i < params.entities.length; i++) {\n const entity = params.entities[i];\n\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\n let tags: EntityTag.ITag[] = [];\n if (tagIds && tagIds.length > 0) {\n tags = (await EntityTag.GetListByIds({\n api,\n tagIds\n })).tags;\n }\n const pStyle = (style?.Settings as Style.IEntitySettings)?.pointStyle ?? <any>{};\n const cEntity = await Render({\n entity: entity,\n style: pStyle,\n tags: tags,\n viewer: params.viewer,\n api: api,\n maxDistance: zoomItem.MaxZoom,\n minDistance: zoomItem.MinZoom\n });\n if (cEntity) {\n cEntity._renderGroup = getRenderGroupId(zoomItem, params.viewer?.terrainProvider);\n }\n\n cEntities[<string>entity.Bruce.ID] = cEntity;\n }\n\n return cEntities;\n }\n }\n\n export namespace Polyline {\n export interface IParams {\n style: Style.IPolylineSettings;\n entity: Entity.IEntity;\n tags: EntityTag.ITag[];\n viewer: Cesium.Viewer;\n // The min and max distance to display the entity.\n maxDistance?: number;\n minDistance?: number;\n }\n\n export interface IGroupParams {\n apiGetter: BruceApi.IGetter,\n menuItemId: string;\n entities: Entity.IEntity[];\n zoomItems: IDictionary<ZoomControl.IItem>;\n visualRegister: VisualsRegister.Register;\n viewer: Cesium.Viewer;\n }\n\n export function Render(params: IParams): ICesiumEntityExt {\n const entity = params.entity;\n\n const line = entity.geometry?.LineString;\n const points: Carto.ICarto[] = line && typeof line == \"string\" ? Geometry.ParsePoints(line) : [];\n if (!points || points.length < 2) {\n return <any>null;\n }\n let isValid = true;\n for (let i = 0; i < points.length; i++) {\n if (!Carto.ValidateCarto(points[i])) {\n isValid = false;\n break;\n }\n }\n if (!isValid) {\n return <any>null;\n }\n\n const style = params.style;\n let heightRef = getHeightRef(style);\n let flattenPoints = false;\n // We gain a lot of performance when not clamping.\n // If there is no terrain we can safely not clamp.\n if (\n heightRef == Cesium.HeightReference.CLAMP_TO_GROUND && shouldApplyFlatFix(params.viewer?.terrainProvider)\n ) {\n heightRef = Cesium.HeightReference.NONE;\n flattenPoints = true;\n }\n const posses = points.map(\n x => Cesium.Cartesian3.fromDegrees(\n EnsureNumber(x.longitude),\n EnsureNumber(x.latitude),\n EnsureNumber(\n flattenPoints ? 0 : x.altitude\n )\n )\n );\n\n // 5 points should be enough to tell most bad data.\n const CHECK_POINTS = 5;\n const MIN_LEN = 0.001;\n const MAX_LEN = 4500000;\n let totalLength = 0;\n for (let i = 0; i < posses.length; i++) {\n if (i > CHECK_POINTS) {\n break;\n }\n let pos1 = posses[i];\n let pos2 = posses[i + 1];\n if (pos1 && pos2) {\n totalLength += Cesium.Cartesian3.distance(pos1, pos2);\n }\n }\n if (totalLength < MIN_LEN || totalLength > MAX_LEN) {\n return <any>null;\n }\n\n const bColor: Color.IColor = style.lineColor ? <any>Calculator.GetColor(style.lineColor, entity, params.tags) : null;\n const cColor = bColor ? colorToCColor(bColor) : Cesium.Color.RED;\n if (cColor.alpha <= 0) {\n return <any>null;\n }\n\n let width = style.lineWidth ? <number>Calculator.GetNumber(style.lineWidth, entity, params.tags) : null;\n if (width == null) {\n width = 4;\n }\n width = EnsureNumber(width);\n if (width < 0.01) {\n width = 0;\n }\n if (width <= 0) {\n return <any>null;\n }\n\n const cEntity: ICesiumEntityExt = new Cesium.Entity({\n polyline: {\n positions: posses,\n material: <Cesium.MaterialProperty><any>cColor,\n width: width,\n classificationType: Cesium.ClassificationType.TERRAIN,\n arcType: Cesium.ArcType.GEODESIC,\n zIndex: getZIndex(style, entity, params.tags),\n clampToGround: heightRef == Cesium.HeightReference.CLAMP_TO_GROUND,\n distanceDisplayCondition: getDisplayCondition(params.minDistance, params.maxDistance)\n },\n position: EntityUtils.GetPos({\n viewer: params.viewer,\n entity,\n recordHeightRef: heightRef,\n returnHeightRef: heightRef\n }),\n show: false\n });\n\n params.viewer.entities.add(cEntity);\n return cEntity;\n }\n\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\n const api = params.apiGetter.getApi();\n const cEntities: IDictionary<ICesiumEntityExt> = {};\n for (let i = 0; i < params.entities.length; i++) {\n const entity = params.entities[i];\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\n let tags: EntityTag.ITag[] = [];\n if (tagIds && tagIds.length > 0) {\n tags = (await EntityTag.GetListByIds({\n api,\n tagIds\n })).tags;\n }\n const lStyle = (style?.Settings as Style.IEntitySettings)?.polylineStyle ?? <any>{};\n\n const cEntity = Render({\n entity: entity,\n style: lStyle,\n tags: tags,\n viewer: params.viewer,\n maxDistance: zoomItem.MaxZoom,\n minDistance: zoomItem.MinZoom\n });\n if (cEntity) {\n cEntity._renderGroup = getRenderGroupId(zoomItem, params.viewer?.terrainProvider);\n cEntities[<string>entity.Bruce.ID] = cEntity;\n }\n }\n return cEntities;\n }\n }\n\n export namespace Polygon {\n export interface IParams {\n style: Style.IPolygonSettings;\n entity: Entity.IEntity;\n tags: EntityTag.ITag[];\n viewer: Cesium.Viewer;\n // The min and max distance to display the entity.\n maxDistance?: number;\n minDistance?: number;\n }\n\n export interface IGroupParams {\n apiGetter: BruceApi.IGetter,\n menuItemId: string;\n entities: Entity.IEntity[];\n zoomItems: IDictionary<ZoomControl.IItem>;\n visualRegister: VisualsRegister.Register;\n viewer: Cesium.Viewer;\n }\n\n export function Render(params: IParams): ICesiumEntityExt {\n const entity = params.entity;\n const pRings = entity.geometry?.Polygon;\n if (pRings == null || pRings.length <= 0) {\n return <any>null;\n }\n const style = params.style;\n\n const bFillColor = Calculator.GetColor(style.fillColor, entity, params.tags);\n const cFillColor = bFillColor ? colorToCColor(bFillColor) : Cesium.Color.RED;\n\n const bLineColor = Calculator.GetColor(style.lineColor, entity, params.tags);\n const cLineColor = bLineColor ? colorToCColor(bLineColor) : Cesium.Color.RED;\n\n let width = style.lineWidth ? <number>Calculator.GetNumber(style.lineWidth, entity, params.tags) : null;\n if (width == null) {\n width = 4;\n }\n width = EnsureNumber(width);\n if (width < 0.01) {\n width = 0;\n }\n\n // If both outline and fill is not available then don't render anything.\n if (\n (width <= 0 || cLineColor.alpha <= 0) && \n cFillColor.alpha <= 0\n ) {\n return <any>null;\n }\n\n let heightRef = getHeightRef(style);\n\n const outerRing = <Geometry.IPolygonRing>pRings.find(x => x.Facing == Geometry.EPolygonRingType.Boundaries);\n const points = Geometry.ParsePoints(outerRing?.LinearRing);\n let posses = points.map(x => Cesium.Cartesian3.fromDegrees(EnsureNumber(x.longitude), EnsureNumber(x.latitude), EnsureNumber(x.altitude)));\n Cartes.CloseRing3(posses);\n const extrusion = getPolygonExtrusion(\n entity,\n params.tags,\n outerRing,\n posses,\n heightRef,\n style\n );\n posses = extrusion.posses;\n\n let flattenPoints = false;\n if (\n heightRef == Cesium.HeightReference.CLAMP_TO_GROUND && shouldApplyFlatFix(params.viewer?.terrainProvider)\n ) {\n heightRef = Cesium.HeightReference.NONE;\n flattenPoints = true;\n }\n\n const holeRings = pRings.filter(x => x.Facing == Geometry.EPolygonRingType.Hole);\n const holePosses = holeRings.map((x) => {\n const points = Geometry.ParsePoints(x.LinearRing);\n return points.map(x => Cesium.Cartesian3.fromDegrees(\n EnsureNumber(x.longitude),\n EnsureNumber(x.latitude),\n EnsureNumber(flattenPoints ? 0 : x.altitude)\n ));\n });\n\n const zIndex = getZIndex(style, entity, params.tags);\n\n const cEntity: ICesiumEntityExt = new Cesium.Entity({\n polygon: {\n hierarchy: new Cesium.PolygonHierarchy(posses, holePosses.map(x => new Cesium.PolygonHierarchy(x))),\n material: cFillColor,\n extrudedHeight: extrusion.value,\n extrudedHeightReference: extrusion.exHeightRef,\n shadows: Cesium.ShadowMode.ENABLED,\n heightReference: heightRef,\n classificationType: Cesium.ClassificationType.BOTH,\n perPositionHeight: heightRef == Cesium.HeightReference.CLAMP_TO_GROUND ? false : true,\n zIndex: zIndex,\n distanceDisplayCondition: getDisplayCondition(params.minDistance, params.maxDistance)\n },\n position: EntityUtils.GetPos({\n viewer: params.viewer,\n entity,\n recordHeightRef: heightRef,\n returnHeightRef: heightRef\n }),\n show: false\n });\n cEntity._siblingGraphics = [];\n\n if (width > 0 && cLineColor) {\n let borderPosses = posses;\n if (flattenPoints) {\n borderPosses = points.map(x => Cesium.Cartesian3.fromDegrees(\n EnsureNumber(x.longitude),\n EnsureNumber(x.latitude),\n EnsureNumber(0))\n );\n Cartes.CloseRing3(borderPosses);\n }\n const cEntityBorder: ICesiumEntityExt = new Cesium.Entity({\n polyline: new Cesium.PolylineGraphics({\n positions: borderPosses,\n material: <Cesium.MaterialProperty><any>cLineColor,\n width: width,\n clampToGround: heightRef == Cesium.HeightReference.CLAMP_TO_GROUND,\n classificationType: Cesium.ClassificationType.TERRAIN,\n arcType: Cesium.ArcType.GEODESIC,\n zIndex: zIndex,\n distanceDisplayCondition: getDisplayCondition(params.minDistance, params.maxDistance)\n }),\n show: false\n });\n params.viewer.entities.add(cEntityBorder);\n cEntityBorder._parentEntity = cEntity;\n cEntity._siblingGraphics.push(cEntityBorder);\n\n for (let i = 0; i < holePosses.length; i++) {\n const posses = holePosses[i];\n Cartes.CloseRing3(posses);\n const cEntityHole: ICesiumEntityExt = new Cesium.Entity({\n polyline: new Cesium.PolylineGraphics({\n positions: posses,\n material: <Cesium.MaterialProperty><any>cLineColor,\n width: width,\n clampToGround: heightRef == Cesium.HeightReference.CLAMP_TO_GROUND,\n classificationType: Cesium.ClassificationType.TERRAIN,\n arcType: Cesium.ArcType.GEODESIC,\n zIndex: zIndex,\n distanceDisplayCondition: getDisplayCondition(params.minDistance, params.maxDistance)\n }),\n show: false\n });\n cEntity._siblingGraphics.push(cEntityHole);\n cEntityHole._parentEntity = cEntity;\n params.viewer.entities.add(cEntityHole);\n }\n }\n\n params.viewer.entities.add(cEntity);\n return cEntity;\n }\n\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\n const api = params.apiGetter.getApi();\n const cEntities: IDictionary<ICesiumEntityExt> = {};\n for (let i = 0; i < params.entities.length; i++) {\n const entity = params.entities[i];\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\n\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\n let tags: EntityTag.ITag[] = [];\n if (tagIds && tagIds.length > 0) {\n tags = (await EntityTag.GetListByIds({\n api,\n tagIds\n })).tags;\n }\n const pStyle = (style?.Settings as Style.IEntitySettings)?.polygonStyle ?? <any>{};\n\n const cEntity = Render({\n entity: entity,\n style: pStyle,\n tags: tags,\n viewer: params.viewer,\n maxDistance: zoomItem.MaxZoom,\n minDistance: zoomItem.MinZoom\n });\n if (cEntity) {\n cEntity._renderGroup = getRenderGroupId(zoomItem, params.viewer?.terrainProvider);\n cEntities[<string>entity.Bruce.ID] = cEntity;\n }\n }\n return cEntities;\n }\n }\n\n export namespace Model3d {\n export interface IParams {\n lodUrl: string;\n lodClientFileId?: string;\n style: Style.IModelSettings;\n entity: Entity.IEntity;\n tags: EntityTag.ITag[];\n viewer: Cesium.Viewer;\n // The min and max distance to display the entity.\n maxDistance?: number;\n minDistance?: number;\n }\n\n export interface IGroupParams {\n apiGetter: BruceApi.IGetter,\n menuItemId: string;\n entities: Entity.IEntity[];\n zoomItems: IDictionary<ZoomControl.IItem>;\n visualRegister: VisualsRegister.Register;\n viewer: Cesium.Viewer;\n }\n\n export function Render(params: IParams): ICesiumEntityExt {\n const entity = params.entity;\n\n const transform = entity?.transform;\n let heading = EnsureNumber(transform?.heading);\n heading = (heading + 90) % 360;\n const pitch = EnsureNumber(transform?.pitch);\n const roll = EnsureNumber(transform?.roll);\n\n let scale = EnsureNumber(transform?.scale, 1);\n if (scale <= 0) {\n scale = 1;\n }\n\n const style = params.style;\n let styleScale = style?.scale ? Calculator.GetNumber(style?.scale, entity, params.tags) : null;\n styleScale = EnsureNumber(styleScale ? styleScale : 1);\n if (styleScale <= 0) {\n styleScale = 1;\n }\n\n const hpr = new Cesium.HeadingPitchRoll(\n Cesium.Math.toRadians(heading),\n Cesium.Math.toRadians(pitch),\n Cesium.Math.toRadians(roll)\n );\n\n let heightRef = getHeightRef(style);\n let pos = EntityUtils.GetPos({\n viewer: params.viewer,\n entity,\n recordHeightRef: heightRef,\n returnHeightRef: heightRef\n });\n if (heightRef == Cesium.HeightReference.CLAMP_TO_GROUND) {\n const carto = Cesium.Cartographic.fromCartesian(pos);\n pos = Cesium.Cartesian3.fromRadians(EnsureNumber(carto.longitude), EnsureNumber(carto.latitude), 0);\n heightRef = Cesium.HeightReference.RELATIVE_TO_GROUND;\n }\n const orientation = Cesium.Transforms.headingPitchRollQuaternion(pos, hpr);\n\n let blendMode: number = <any>null;\n let blendAmount: number = <any>null;\n let color: Cesium.Color = <any>null;\n if (style?.customize) {\n blendMode = style.fillColorBlendMode;\n if (!blendMode) {\n blendMode = Cesium.ColorBlendMode.HIGHLIGHT;\n }\n if (blendMode == Cesium.ColorBlendMode.MIX) {\n blendAmount = <any>style.fillColorBlendAmount;\n if (!blendAmount) {\n blendAmount = 0.5;\n }\n }\n const bColor = Calculator.GetColor(style.fillColor, entity, params.tags);\n if (bColor) {\n color = colorToCColor(bColor);\n }\n }\n\n const cEntity: ICesiumEntityExt = new Cesium.Entity({\n model: {\n uri: params.lodUrl,\n heightReference: heightRef,\n scale: scale * styleScale,\n shadows: Cesium.ShadowMode.ENABLED,\n colorBlendAmount: blendAmount,\n colorBlendMode: blendMode,\n color: color,\n distanceDisplayCondition: getDisplayCondition(params.minDistance, params.maxDistance)\n },\n orientation: <Cesium.Property><any>orientation,\n position: pos,\n show: false\n });\n const model = cEntity.model as ICesiumModelExt;\n model._clientFileId = params.lodClientFileId;\n model._entityScale = {\n record: scale,\n style: styleScale\n };\n\n params.viewer.entities.add(cEntity);\n return cEntity;\n }\n\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\n const api = params.apiGetter.getApi();\n const cEntities: IDictionary<ICesiumEntityExt> = {};\n const reqBody: EntityLod.Filter.IListParams = {\n \"strict\": false,\n \"externalSources\": false,\n \"Items\": []\n };\n\n for (let i = 0; i < params.entities.length; i++) {\n const entity = params.entities[i];\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\n let tags: EntityTag.ITag[] = [];\n if (tagIds && tagIds.length > 0) {\n tags = (await EntityTag.GetListByIds({\n api,\n tagIds\n })).tags;\n }\n const mStyle = (style?.Settings as Style.IEntitySettings)?.modelStyle ?? <any>{};\n let group = mStyle.lodGroup ? Calculator.GetString(mStyle.lodGroup, entity, tags) : null;\n if (!group) {\n group = \"DEFAULT\";\n }\n let level = <number>+<any>zoomItem.LODLevel;\n if (!level) {\n level = 0;\n }\n let catId = <string>zoomItem.LODCategoryID;\n if (!catId) {\n catId = \"glb\";\n }\n reqBody.Items.push({\n \"entityId\": <string>entity.Bruce.ID,\n \"categoryId\": catId,\n \"group\": <string>group,\n \"level\": level\n });\n }\n\n const {lods: lodData} = await EntityLod.GetLods({\n api,\n filter: reqBody\n });\n\n for (let i = 0; i < params.entities.length; i++) {\n const entity = params.entities[i];\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\n let tags: EntityTag.ITag[] = [];\n if (tagIds && tagIds.length > 0) {\n tags = (await EntityTag.GetListByIds({\n api,\n tagIds\n })).tags;\n }\n\n const lod = lodData.find(x => x.entityId == entity.Bruce.ID);\n if (!lod?.clientFileId) {\n continue;\n }\n const mStyle = (style?.Settings as Style.IEntitySettings)?.modelStyle ?? <any>{};\n const cEntity = Render({\n entity: entity,\n style: mStyle,\n tags: tags,\n viewer: params.viewer,\n lodUrl: ClientFile.GetUrl({\n api,\n fileId: lod.clientFileId\n }),\n lodClientFileId: lod.clientFileId,\n maxDistance: zoomItem.MaxZoom,\n minDistance: zoomItem.MinZoom\n })\n if (cEntity) {\n cEntity._renderGroup = getRenderGroupId(zoomItem, params.viewer?.terrainProvider);\n cEntities[<string>entity.Bruce.ID] = cEntity;\n }\n }\n\n return cEntities;\n }\n }\n}","import { DelayQueue, LRUCache } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\n\r\nfunction GetValue<T>(viewer: Cesium.Viewer, obj: Cesium.Property | any): T {\r\n if ((obj as any)?.getValue) {\r\n return obj.getValue(viewer.scene.lastRenderTime);\r\n }\r\n return obj;\r\n}\r\n\r\ninterface Shape {\r\n x: number;\r\n y: number;\r\n width: number;\r\n height: number;\r\n Contains(point: Point): boolean;\r\n}\r\n\r\nclass Point {\r\n public lon: number;\r\n public lat: number;\r\n public id: string;\r\n\r\n constructor(lon, lat, id) {\r\n this.lon = lon;\r\n this.lat = lat;\r\n this.id = id;\r\n }\r\n}\r\n\r\nclass Circle implements Shape {\r\n public x: number;\r\n public y: number;\r\n public radius: number;\r\n public width: number;\r\n public height: number;\r\n\r\n constructor(x: number, y: number, radius: number) {\r\n this.x = x;\r\n this.y = y;\r\n this.radius = radius;\r\n this.width = 2 * radius;\r\n this.height = 2 * radius;\r\n }\r\n\r\n public Intersects(range: Circle | Rectangle) {\r\n let xDist = Math.abs(range.x - this.x);\r\n let yDist = Math.abs(range.y - this.y);\r\n\r\n let r = this.radius;\r\n let w = range.width;\r\n let h = range.height;\r\n\r\n if (xDist > (w + r) || yDist > (h + r)) {\r\n return false;\r\n }\r\n\r\n if (xDist <= w || yDist <= h) {\r\n return true;\r\n }\r\n\r\n let dx = xDist - w;\r\n let dy = yDist - h;\r\n return (dx * dx + dy * dy <= this.radius * this.radius);\r\n }\r\n\r\n public Contains(point: Point): boolean {\r\n const dx = this.x - point.lon;\r\n const dy = this.y - point.lat;\r\n const distance = Math.sqrt(dx * dx + dy * dy);\r\n return distance <= this.radius;\r\n }\r\n}\r\n\r\nclass Rectangle implements Shape {\r\n public x: number;\r\n public y: number;\r\n // Actual width.\r\n public w: number;\r\n // Actual height.\r\n public h: number;\r\n // for compatibility with Shape.\r\n public width: number;\r\n // for compatibility with Shape.\r\n public height: number;\r\n\r\n constructor(x: number, y: number, w: number, h: number) {\r\n this.x = x;\r\n this.y = y;\r\n this.w = w;\r\n this.h = h;\r\n this.width = 2 * w;\r\n this.height = 2 * h;\r\n }\r\n\r\n public Contains(point: Point) {\r\n return (point.lon >= this.x - this.w &&\r\n point.lon < this.x + this.w &&\r\n point.lat >= this.y - this.h &&\r\n point.lat < this.y + this.h);\r\n }\r\n\r\n public Intersects(range: Rectangle) {\r\n return !(range.x - range.w > this.x + this.w ||\r\n range.x + range.w < this.x - this.w ||\r\n range.y - range.h > this.y + this.h ||\r\n range.y + range.h < this.y - this.h);\r\n }\r\n}\r\n\r\nclass Quad {\r\n public boundary: Rectangle;\r\n public capacity: number;\r\n public points: Point[];\r\n public divided: boolean;\r\n public northeast: Quad;\r\n public northwest: Quad;\r\n public southeast: Quad;\r\n public southwest: Quad;\r\n\r\n constructor(boundary: Rectangle, capacity: number) {\r\n this.boundary = boundary;\r\n this.capacity = capacity;\r\n this.points = [];\r\n this.divided = false;\r\n }\r\n\r\n public Subdivide() {\r\n let x = this.boundary.x;\r\n let y = this.boundary.y;\r\n let w = this.boundary.w / 2;\r\n let h = this.boundary.h / 2;\r\n\r\n let ne = new Rectangle(x + w / 2, y - h / 2, w, h);\r\n this.northeast = new Quad(ne, this.capacity);\r\n let nw = new Rectangle(x - w / 2, y - h / 2, w, h);\r\n this.northwest = new Quad(nw, this.capacity);\r\n let se = new Rectangle(x + w / 2, y + h / 2, w, h);\r\n this.southeast = new Quad(se, this.capacity);\r\n let sw = new Rectangle(x - w / 2, y + h / 2, w, h);\r\n this.southwest = new Quad(sw, this.capacity);\r\n\r\n this.divided = true;\r\n }\r\n\r\n public Insert(point: Point) {\r\n if (!this.boundary.Contains(point)) {\r\n return false;\r\n }\r\n\r\n if (this.points.length < this.capacity) {\r\n this.points.push(point);\r\n return true;\r\n }\r\n\r\n if (!this.divided) {\r\n this.Subdivide();\r\n }\r\n\r\n return (this.northeast.Insert(point) || this.northwest.Insert(point) ||\r\n this.southeast.Insert(point) || this.southwest.Insert(point));\r\n }\r\n\r\n public Query(range: Circle | Rectangle, found: Point[]): Point[] {\r\n if (!found) {\r\n found = [];\r\n }\r\n if (!range.Intersects(this.boundary)) {\r\n return found;\r\n }\r\n\r\n for (let p of this.points) {\r\n if (range.Contains(p)) {\r\n found.push(p);\r\n }\r\n }\r\n\r\n if (this.divided) {\r\n this.northwest.Query(range, found);\r\n this.northeast.Query(range, found);\r\n this.southwest.Query(range, found);\r\n this.southeast.Query(range, found);\r\n }\r\n\r\n return found;\r\n }\r\n\r\n public Find(id: string): Point | null {\r\n for (let point of this.points) {\r\n if (point.id === id) {\r\n return point;\r\n }\r\n }\r\n\r\n if (this.divided) {\r\n return this.northwest.Find(id) || this.northeast.Find(id) ||\r\n this.southwest.Find(id) || this.southeast.Find(id);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public Remove(point: Point): void {\r\n let index = this.points.indexOf(point);\r\n\r\n if (index !== -1) {\r\n this.points.splice(index, 1);\r\n }\r\n\r\n if (this.divided) {\r\n this.northwest.Remove(point);\r\n this.northeast.Remove(point);\r\n this.southwest.Remove(point);\r\n this.southeast.Remove(point);\r\n }\r\n }\r\n\r\n public GetDistanceToQuad(pos3d: Cesium.Cartesian3) {\r\n const minLat = this.boundary.y - this.boundary.h;\r\n const maxLat = this.boundary.y + this.boundary.h;\r\n const minLon = this.boundary.x - this.boundary.w;\r\n const maxLon = this.boundary.x + this.boundary.w;\r\n const points = [\r\n // Corners.\r\n new Cesium.Cartesian3(minLon, minLat, 0),\r\n new Cesium.Cartesian3(minLon, maxLat, 0),\r\n new Cesium.Cartesian3(maxLon, minLat, 0),\r\n new Cesium.Cartesian3(maxLon, maxLat, 0),\r\n // Center.\r\n new Cesium.Cartesian3(this.boundary.x, this.boundary.y, 0)\r\n ];\r\n let shortest = Number.MAX_VALUE;\r\n for (let point of points) {\r\n const distance = Cesium.Cartesian3.distance(pos3d, point);\r\n if (distance < shortest) {\r\n shortest = distance;\r\n }\r\n }\r\n return shortest;\r\n }\r\n}\r\n\r\ntype Cluster = {\r\n center: Point;\r\n points: Point[];\r\n};\r\n\r\ntype ClusterResult = {\r\n clusters: Cluster[];\r\n noLongerClustered: Set<string>;\r\n};\r\n\r\nconst _clusterImageCache = new LRUCache(500);\r\nconst _clusterImageLoadedCache = new LRUCache(500);\r\nasync function _loadClusterImage(params: {\r\n size: number,\r\n txtColor: string,\r\n bgColor: string,\r\n text: string,\r\n iconUrl?: string\r\n}) {\r\n const { size, txtColor, bgColor, text, iconUrl } = params;\r\n const key = `${size}-${txtColor}-${bgColor}-${text}-${iconUrl}`;\r\n const cacheData = _clusterImageCache.Get(key);\r\n if (cacheData) {\r\n return await cacheData;\r\n }\r\n\r\n const prom = new Promise((res, rej) => {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = size;\r\n canvas.height = size;\r\n const ctx = canvas.getContext(\"2d\");\r\n\r\n const WHITESPACE_PADDING_PERCENT = 0.05;\r\n const radius = (size / 2) - (size * WHITESPACE_PADDING_PERCENT);\r\n \r\n const drawWithoutImage = (img?: HTMLImageElement) => {\r\n ctx.beginPath();\r\n ctx.arc(size / 2, size / 2, radius, 0, 2 * Math.PI, false);\r\n \r\n let fill = null;\r\n let txt = null;\r\n if (img) {\r\n const brightness = calculateImageBrightness(img);\r\n fill = brightness < 128 ? \"white\" : \"#114d78\";\r\n txt = brightness < 128 ? \"black\" : \"white\";\r\n } \r\n else {\r\n fill = bgColor ? bgColor : \"#114d78\";\r\n txt = txtColor ? txtColor : \"white\";\r\n }\r\n ctx.fillStyle = fill;\r\n ctx.fill();\r\n \r\n const maxTextWidth = size * 0.7;\r\n const maxTextHeight = size * 0.7;\r\n const minTextSize = Math.floor(size / 12);\r\n const textSize = findOptimalFontSize(text, maxTextWidth, maxTextHeight, minTextSize);\r\n \r\n ctx.font = `bold ${textSize}px Arial`;\r\n ctx.fillStyle = txt;\r\n ctx.textAlign = \"center\";\r\n ctx.textBaseline = \"middle\";\r\n ctx.fillText(text, size / 2, size / 2);\r\n };\r\n \r\n const drawWithImage = (img) => {\r\n const aspectRatio = img.width / img.height;\r\n let imageSize = Math.min(radius, img.width, img.height);\r\n if (imageSize / aspectRatio > radius) {\r\n imageSize = radius * aspectRatio;\r\n }\r\n const imageX = (size - imageSize) / 2;\r\n const imageY = (size - imageSize) / 2 - imageSize / 3;\r\n \r\n ctx.beginPath();\r\n ctx.arc(size / 2, size / 2, radius, 0, 2 * Math.PI, false);\r\n \r\n const brightness = calculateImageBrightness(img);\r\n const bgColor = brightness < 128 ? \"white\" : \"#114d78\";\r\n const txtColor = brightness < 128 ? \"black\" : \"white\";\r\n \r\n ctx.fillStyle = bgColor;\r\n ctx.fill();\r\n \r\n ctx.shadowColor = \"rgba(0, 0, 0, 0.3)\";\r\n ctx.shadowOffsetX = 3;\r\n ctx.shadowOffsetY = 3;\r\n ctx.shadowBlur = 5;\r\n ctx.drawImage(img, imageX, imageY, imageSize, imageSize);\r\n \r\n const padding = imageSize / 7;\r\n const maxTextWidth = imageSize;\r\n const maxTextHeight = imageSize - padding;\r\n const minTextSize = Math.floor(imageSize / 5);\r\n const textSize = findOptimalFontSize(text, maxTextWidth, maxTextHeight, minTextSize);\r\n \r\n ctx.font = `bold ${textSize}px Arial`;\r\n ctx.fillStyle = txtColor;\r\n ctx.textAlign = \"center\";\r\n ctx.textBaseline = \"top\";\r\n ctx.shadowColor = \"rgba(0, 0, 0, 0)\";\r\n ctx.shadowOffsetX = 0;\r\n ctx.shadowOffsetY = 0;\r\n ctx.shadowBlur = 0;\r\n \r\n ctx.fillText(text, size / 2, imageY + imageSize + padding);\r\n };\r\n \r\n const findOptimalFontSize = (text, maxWidth, maxHeight, minSize) => {\r\n let fontSize = maxHeight;\r\n const tempCanvas = document.createElement(\"canvas\");\r\n const tempCtx = tempCanvas.getContext(\"2d\");\r\n \r\n while (fontSize > minSize) {\r\n tempCtx.font = `bold ${fontSize}px Arial`;\r\n const measuredWidth = tempCtx.measureText(text).width;\r\n const measuredHeight = fontSize * 1.2;\r\n if (measuredWidth <= maxWidth && measuredHeight <= maxHeight) {\r\n break;\r\n }\r\n fontSize--;\r\n }\r\n \r\n return fontSize;\r\n };\r\n \r\n \r\n const calculateImageBrightness = (img: HTMLImageElement) => {\r\n let brightness = 0;\r\n const tempCanvas = document.createElement(\"canvas\");\r\n tempCanvas.width = img.width;\r\n tempCanvas.height = img.height;\r\n const tempCtx = tempCanvas.getContext(\"2d\");\r\n tempCtx.drawImage(img, 0, 0);\r\n const imageData = tempCtx.getImageData(0, 0, img.width, img.height).data;\r\n for (let i = 0; i < imageData.length; i += 4) {\r\n const r = imageData[i];\r\n const g = imageData[i + 1];\r\n const b = imageData[i + 2];\r\n brightness += (r + g + b) / 3;\r\n }\r\n return Math.round(brightness / (img.width * img.height));\r\n };\r\n \r\n if (iconUrl) {\r\n const img = new Image();\r\n img.crossOrigin = \"anonymous\";\r\n img.src = iconUrl;\r\n img.onload = () => {\r\n if (size > 50) {\r\n drawWithImage(img);\r\n }\r\n else {\r\n drawWithoutImage(img);\r\n }\r\n res(canvas);\r\n };\r\n img.onerror = () => {\r\n drawWithoutImage();\r\n res(canvas);\r\n };\r\n }\r\n else {\r\n drawWithoutImage();\r\n res(canvas);\r\n }\r\n }) as Promise<HTMLCanvasElement>;\r\n\r\n _clusterImageCache.Set(key, prom);\r\n prom.then((canvas) => {\r\n _clusterImageLoadedCache.Set(key, canvas);\r\n _clusterImageCache.Set(key, null);\r\n });\r\n\r\n return await prom;\r\n}\r\n\r\nfunction getClusterImage(params: {\r\n size: number,\r\n txtColor: string,\r\n bgColor: string,\r\n text: string,\r\n iconUrl?: string\r\n}): HTMLCanvasElement {\r\n const { size, txtColor, bgColor, text, iconUrl } = params;\r\n const key = `${size}-${txtColor}-${bgColor}-${text}-${iconUrl}`;\r\n const cacheData = _clusterImageLoadedCache.Get(key);\r\n // If available then return.\r\n if (cacheData) {\r\n return cacheData as HTMLCanvasElement;\r\n }\r\n // If not available then queue for it to cook.\r\n else {\r\n _loadClusterImage(params);\r\n }\r\n return null;\r\n}\r\n\r\nconst FORCE_UPDATE_BATCH_SIZE = 1000;\r\nconst FORCE_UPDATE_BATCH_DELAY = 100;\r\n\r\nexport class PointClustering {\r\n private quadTree: Quad;\r\n private prevClusteredEntities: Set<string>;\r\n private currClusteredEntities: Set<string>;\r\n private viewer: Cesium.Viewer;\r\n private register: VisualsRegister.Register;\r\n private updateQueue: DelayQueue;\r\n private clusterEntities: Map<string, Cesium.Entity>;\r\n private disposed: boolean = false;\r\n private listenCameraRemoval: () => void;\r\n private menuItemId: string;\r\n private registeredEntityIds: Set<string> = new Set();\r\n\r\n // Style of the first point added so we can make cluster points look similar.\r\n private pointColorBg: string;\r\n private pointColorTxt: string;\r\n private iconUrl: string;\r\n\r\n // Queue to force update entities.\r\n private updateEntityQueue: string[] = [];\r\n private queueInterval: any;\r\n\r\n constructor(register: VisualsRegister.Register, menuItemId: string) {\r\n this.register = register;\r\n this.viewer = register.Viewer;\r\n this.menuItemId = menuItemId;\r\n let boundary = new Rectangle(0, 0, 360, 180);\r\n this.quadTree = new Quad(boundary, 30);\r\n this.prevClusteredEntities = new Set();\r\n this.currClusteredEntities = new Set();\r\n this.clusterEntities = new Map();\r\n this.updateQueue = new DelayQueue(() => {\r\n this.doUpdate();\r\n }, 1000);\r\n this.listenCamera();\r\n }\r\n\r\n private queueForceUpdate(entityIds: string[]) {\r\n for (let i = 0; i < entityIds.length; i++) {\r\n if (this.updateEntityQueue.includes(entityIds[i])) {\r\n continue;\r\n }\r\n this.updateEntityQueue.push(entityIds[i]);\r\n }\r\n this.runForceUpdateQueue();\r\n }\r\n\r\n private runForceUpdateQueue() {\r\n if (!this.updateEntityQueue.length) {\r\n return;\r\n }\r\n if (this.queueInterval) {\r\n return;\r\n }\r\n this.queueInterval = setInterval(() => {\r\n if (this.disposed) {\r\n clearInterval(this.queueInterval);\r\n this.queueInterval = null;\r\n return;\r\n }\r\n const ids = this.updateEntityQueue.splice(0, FORCE_UPDATE_BATCH_SIZE);\r\n this.register.ForceUpdate({\r\n entityIds: ids\r\n });\r\n if (!this.updateEntityQueue.length) {\r\n clearInterval(this.queueInterval);\r\n this.queueInterval = null;\r\n }\r\n }, FORCE_UPDATE_BATCH_DELAY);\r\n }\r\n\r\n /**\r\n * Starts listening to camera changes.\r\n * This will trigger the clustering update whenever camera is moved.\r\n */\r\n private listenCamera() {\r\n const viewer = this.viewer;\r\n let lastPos3d: Cesium.Cartesian3;\r\n const hasMoved = (): boolean => {\r\n const cameraPos = viewer?.camera?.positionCartographic;\r\n if (!cameraPos) {\r\n return false;\r\n }\r\n const pos3d = Cesium.Cartographic.toCartesian(cameraPos);\r\n if (!lastPos3d) {\r\n lastPos3d = pos3d;\r\n return false;\r\n }\r\n const distance = Cesium.Cartesian3.distance(pos3d, lastPos3d);\r\n lastPos3d = pos3d;\r\n // 50 meter movement at least.\r\n return distance > 50;\r\n };\r\n this.listenCameraRemoval = viewer.scene.camera.changed.addEventListener(() => {\r\n if (hasMoved()) {\r\n this.updateQueue.Call();\r\n }\r\n }); \r\n }\r\n\r\n /**\r\n * Stops listening to camera changes.\r\n */\r\n private unlistenCamera() {\r\n if (this.listenCameraRemoval) {\r\n this.listenCameraRemoval();\r\n this.listenCameraRemoval = null;\r\n }\r\n }\r\n\r\n /**\r\n * Removes all clusters and updates entities to no longer be suppressed.\r\n * @returns \r\n */\r\n public Dispose() {\r\n if (this.disposed) {\r\n return;\r\n }\r\n for (let [,entity] of Array.from(this.clusterEntities)) {\r\n this.viewer.entities.remove(entity);\r\n }\r\n this.clusterEntities.clear();\r\n this.unlistenCamera();\r\n this.disposed = true;\r\n this.updateEntityQueue = [];\r\n // Restore entities.\r\n const toUpdateIds: string[] = [];\r\n for (let id of Array.from(this.registeredEntityIds)) {\r\n const rego = this.register.GetRego({\r\n entityId: id,\r\n menuItemId: this.menuItemId\r\n });\r\n if (rego && rego.suppressShow) {\r\n rego.suppressShow = false;\r\n toUpdateIds.push(id);\r\n }\r\n }\r\n if (toUpdateIds.length) {\r\n this.register.ForceUpdate({\r\n entityIds: toUpdateIds,\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * Calculates center of given points.\r\n * @param points \r\n * @returns \r\n */\r\n private calculateCentroid(points: Point[]): Point {\r\n let lonSum = 0;\r\n let latSum = 0;\r\n for (let point of points) {\r\n lonSum += point.lon;\r\n latSum += point.lat;\r\n }\r\n const lonAvg = lonSum / points.length;\r\n const latAvg = latSum / points.length;\r\n return new Point(lonAvg, latAvg, \"\");\r\n }\r\n\r\n /**\r\n * Gathers current clusters and renders them.\r\n * @returns \r\n */\r\n private doUpdate() {\r\n if (this.disposed) {\r\n return;\r\n }\r\n\r\n // 1: Update precision.\r\n // This defines how far apart these clusters can be.\r\n const cameraHeight = this.viewer.camera.positionCartographic.height;\r\n this.getClusterSpacing(cameraHeight);\r\n\r\n // 2: Get clusters.\r\n const { clusters, noLongerClustered } = this.getClusters();\r\n const entitiesToUpdate: string[] = [];\r\n\r\n // 3: Remove all cesium cluster entities that are no longer clustered.\r\n for (let id of Array.from(noLongerClustered)) {\r\n this.removeClusterEntity(id);\r\n }\r\n\r\n // 4: Stop hiding entities that are no longer clustered.\r\n const previousEntityIds = new Set(this.registeredEntityIds);\r\n for (let id of Array.from(previousEntityIds)) {\r\n if (!this.currClusteredEntities.has(id)) {\r\n const rego = this.register.GetRego({\r\n entityId: id,\r\n menuItemId: this.menuItemId\r\n });\r\n if (rego && rego.suppressShow) {\r\n rego.suppressShow = false;\r\n entitiesToUpdate.push(id);\r\n }\r\n }\r\n }\r\n\r\n const getScale = (count: number) => {\r\n // const MIN_SCALE = 15;\r\n // const MAX_SCALE = 80;\r\n // const SCALE_PER_POINT = 1.01;\r\n // let scale = MIN_SCALE + (count * SCALE_PER_POINT);\r\n // scale = Math.min(scale, MAX_SCALE);\r\n // return scale;\r\n if (count >= 10000) {\r\n return 140;\r\n }\r\n if (count >= 1000) {\r\n return 120;\r\n }\r\n if (count >= 100) {\r\n return 90;\r\n }\r\n if (count >= 10) {\r\n return 80;\r\n }\r\n return 70;\r\n };\r\n\r\n /**\r\n * Generate circle with label in center.\r\n * @param count \r\n * @returns \r\n */\r\n const getCanvas = (count: number): HTMLElement => {\r\n const params = {\r\n size: getScale(count),\r\n txtColor: this.pointColorTxt,\r\n bgColor: this.pointColorBg,\r\n text: String(count),\r\n iconUrl: this.iconUrl\r\n };\r\n return getClusterImage(params);\r\n };\r\n\r\n // 5: iterate over clusters and add/update them as Cesium entities.\r\n for (let cluster of clusters) {\r\n const clusterId = cluster.center.id;\r\n let clusterEntity = this.clusterEntities.get(clusterId);\r\n\r\n const centroid = this.calculateCentroid(cluster.points);\r\n const count = cluster.points.length;\r\n if (clusterEntity) {\r\n clusterEntity.position = Cesium.Cartesian3.fromDegrees(centroid.lon, centroid.lat, 150) as any;\r\n clusterEntity.billboard.image = new Cesium.CallbackProperty(() => {\r\n return getCanvas(count);\r\n }, false),\r\n clusterEntity.billboard.width = getScale(cluster.points.length) as any;\r\n clusterEntity.billboard.height = getScale(cluster.points.length) as any;\r\n } \r\n else {\r\n clusterEntity = this.viewer.entities.add({\r\n position: Cesium.Cartesian3.fromDegrees(centroid.lon, centroid.lat, 150),\r\n billboard: {\r\n heightReference: Cesium.HeightReference.NONE,\r\n image: new Cesium.CallbackProperty(() => {\r\n return getCanvas(count);\r\n }, false),\r\n width: getScale(count),\r\n height: getScale(count),\r\n verticalOrigin: Cesium.VerticalOrigin.CENTER,\r\n horizontalOrigin: Cesium.HorizontalOrigin.CENTER,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n scaleByDistance: new Cesium.NearFarScalar(1.5e2, 0.5, 3.0e7, 0.1),\r\n }\r\n });\r\n this.clusterEntities.set(clusterId, clusterEntity);\r\n }\r\n\r\n for (let i = 0; i < cluster.points.length; i++) {\r\n const entityId = cluster.points[i].id;\r\n const rego = this.register.GetRego({\r\n entityId: entityId,\r\n menuItemId: this.menuItemId\r\n });\r\n if (rego && !rego.suppressShow) {\r\n rego.suppressShow = true;\r\n entitiesToUpdate.push(entityId);\r\n }\r\n }\r\n }\r\n this.queueForceUpdate(entitiesToUpdate);\r\n\r\n // 6: Iterate over existing cluster entities and remove those that are no longer clustered.\r\n for (let [clusterId, clusterEntity] of Array.from(this.clusterEntities)) {\r\n if (!clusters.find(x => x.center.id == clusterId)) {\r\n this.viewer.entities.remove(clusterEntity);\r\n this.clusterEntities.delete(clusterId);\r\n }\r\n }\r\n }\r\n\r\n private getClusterSpacing(distanceFromCluster?: number) {\r\n // Distance thresholds in meters from the cluster.\r\n const distanceThresholds = [3000, 4000, 5300, 6000, 7000];\r\n // Distance increments in degrees.\r\n const distanceIncrements = [0.001, 0.002, 0.01, 0.03, 0.09];\r\n \r\n let index = 0;\r\n if (distanceFromCluster) {\r\n for (let i = 0; i < distanceThresholds.length; i++) {\r\n if (distanceFromCluster > distanceThresholds[i]) {\r\n index = i;\r\n }\r\n }\r\n }\r\n return distanceIncrements[index];\r\n } \r\n \r\n private getClusters(): ClusterResult {\r\n this.currClusteredEntities.clear();\r\n let clusters: Cluster[] = [];\r\n let processedPoints: Set<string> = new Set();\r\n const cameraPosition = this.viewer.camera.position;\r\n \r\n const MIN_CAMERA_DISTANCE = 5000;\r\n const processQuad = (quad: Quad) => {\r\n // Distance to quad.\r\n // TODO: Needs improvement.\r\n const distanceToQuad = quad.GetDistanceToQuad(cameraPosition);\r\n\r\n // Skip quads that are too close.\r\n if (distanceToQuad >= MIN_CAMERA_DISTANCE) {\r\n for (let point of quad.points) {\r\n // Skip points already processed in previous clusters.\r\n if (processedPoints.has(point.id)) {\r\n continue;\r\n }\r\n // Skip points closer than MIN_CAMERA_DISTANCE meters to the camera.\r\n const cartesian3 = Cesium.Cartesian3.fromDegrees(point.lon, point.lat);\r\n const distanceFromCluster = Cesium.Cartesian3.distance(\r\n cartesian3,\r\n cameraPosition\r\n );\r\n if (distanceFromCluster <= MIN_CAMERA_DISTANCE) {\r\n continue;\r\n }\r\n \r\n let found: Point[] = [];\r\n let nearbyPoints: Point[] = quad.Query(\r\n new Circle(point.lon, point.lat, this.getClusterSpacing(distanceFromCluster)),\r\n found\r\n );\r\n if (nearbyPoints.length > 1) {\r\n let cluster: Cluster = { center: point, points: [] };\r\n for (let nearby of nearbyPoints) {\r\n if (!processedPoints.has(nearby.id) && !cluster.points.includes(nearby)) {\r\n cluster.points.push(nearby);\r\n processedPoints.add(nearby.id);\r\n this.currClusteredEntities.add(nearby.id);\r\n }\r\n }\r\n clusters.push(cluster);\r\n }\r\n }\r\n }\r\n if (quad.divided) {\r\n processQuad(quad.northwest);\r\n processQuad(quad.northeast);\r\n processQuad(quad.southwest);\r\n processQuad(quad.southeast);\r\n }\r\n };\r\n \r\n processQuad(this.quadTree);\r\n \r\n // Filter out clusters with only one point.\r\n const validClusters = clusters.filter((cluster) => cluster.points.length > 1);\r\n // Get the entity IDs that are no longer clustered\r\n let noLongerClustered = new Set(\r\n Array.from(this.prevClusteredEntities).filter(\r\n (id) => !this.currClusteredEntities.has(id)\r\n )\r\n );\r\n // Update the previous clustered entities ref.\r\n this.prevClusteredEntities = new Set(this.currClusteredEntities);\r\n return { clusters: validClusters, noLongerClustered };\r\n }\r\n \r\n /**\r\n * Removes Cesium cluster entity.\r\n * @param clusterId \r\n */\r\n private removeClusterEntity(clusterId: string) {\r\n const clusterEntity = this.clusterEntities.get(clusterId);\r\n if (clusterEntity) {\r\n this.viewer.entities.remove(clusterEntity);\r\n this.clusterEntities.delete(clusterId);\r\n }\r\n }\r\n \r\n private convertCartesianToCartographic(cartesian3: Cesium.Cartesian3) {\r\n const carto = Cesium.Cartographic.fromCartesian(cartesian3);\r\n const lon = Cesium.Math.toDegrees(carto.longitude);\r\n const lat = Cesium.Math.toDegrees(carto.latitude);\r\n const id = lon + ',' + lat;\r\n return new Point(lon, lat, id);\r\n }\r\n\r\n /**\r\n * Adds new entity to the clustering logic.\r\n * @param id Bruce entity ID.\r\n * @param cartesian3 entity's position.\r\n */\r\n private addPoint(id: string, cartesian3: Cesium.Cartesian3) {\r\n let point = this.convertCartesianToCartographic(cartesian3);\r\n point.id = id;\r\n return this.quadTree.Insert(point);\r\n }\r\n\r\n /**\r\n * Adds entity to clustering logic.\r\n * Will return false if entity could not be clustered and therefor should not be hidden.\r\n * @param id \r\n * @param entity \r\n * @returns \r\n */\r\n public AddEntity(id: string, entity: Cesium.Entity): boolean {\r\n if (this.disposed) {\r\n return false;\r\n }\r\n if (!entity) {\r\n return false;\r\n }\r\n if (entity.polygon || entity.polyline) {\r\n return false;\r\n }\r\n const pos3d: Cesium.Cartesian3 = GetValue(this.viewer, entity.position);\r\n if (!pos3d?.x) {\r\n return false;\r\n }\r\n\r\n if (!this.pointColorBg && entity.point) {\r\n const pointColorBg: any = GetValue(this.viewer, entity.point.color);\r\n if (pointColorBg) {\r\n let cColor: Cesium.Color = null;\r\n if (pointColorBg instanceof Object) {\r\n cColor = new Cesium.Color(\r\n pointColorBg.red, \r\n pointColorBg.green, \r\n pointColorBg.blue, \r\n pointColorBg.alpha\r\n );\r\n }\r\n else if (typeof pointColorBg === \"string\") {\r\n cColor = Cesium.Color.fromCssColorString(pointColorBg);\r\n }\r\n // Determine if text color should instead be black based on background.\r\n // cColor contains r,g,b,a values where r,g,b are in the range [0,1].\r\n if (cColor) {\r\n const brightness = (cColor.red * 299 + cColor.green * 587 + cColor.blue * 114) / 1000;\r\n if (brightness > 0.5) {\r\n this.pointColorTxt = \"black\";\r\n }\r\n else {\r\n this.pointColorTxt = \"white\";\r\n }\r\n this.pointColorBg = cColor.toCssColorString();\r\n }\r\n }\r\n }\r\n if (!this.iconUrl && entity.billboard) {\r\n const iconUrl: string = GetValue(this.viewer, entity.billboard.image);\r\n if (typeof iconUrl == \"string\") {\r\n this.iconUrl = iconUrl;\r\n }\r\n }\r\n const added = this.addPoint(id, pos3d);\r\n if (!added) {\r\n return false;\r\n }\r\n this.registeredEntityIds.add(id);\r\n this.updateQueue.Call();\r\n return true;\r\n }\r\n\r\n /**\r\n * Removes entity from clustering logic.\r\n * Warning: This will not reveal the entity, suppressShow will remain true.\r\n * This is made with the assumption that the entity is being removed from viewer.\r\n * @param id \r\n * @returns \r\n */\r\n public RemoveEntity(id: string) {\r\n if (this.disposed) {\r\n return;\r\n }\r\n\r\n let pointToRemove = this.quadTree.Find(id);\r\n if (pointToRemove) {\r\n this.quadTree.Remove(pointToRemove);\r\n this.updateQueue.Call();\r\n }\r\n this.registeredEntityIds.delete(id);\r\n }\r\n}\r\n","import { BruceApi, DelayQueue, Entity, EntityFilterGetter, IDictionary, MenuItem } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\r\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\nimport { SharedGetters } from \"../common/shared-getters\";\r\nimport { PointClustering } from \"../common/point-clustering\";\r\n\r\nconst BATCH_SIZE = 500;\r\nconst CHECK_BATCH_SIZE = 250;\r\n\r\n/**\r\n * Manager for rendering Bruce entities.\r\n * This will request entities based on setup menu item filter.\r\n */\r\nexport namespace EntitiesRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private sharedGetters: SharedGetters.Cache;\r\n private monitor: CesiumViewMonitor;\r\n private item: MenuItem.Item.IEntities;\r\n private getter: EntityFilterGetter.Getter = <any>null;\r\n private getterSub: () => void = <any>null;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private renderedEntities: IDictionary<boolean> = {};\r\n private visualsManager: VisualsRegister.Register;\r\n private entityCheckQueue: DelayQueue = <any>null;\r\n private entityCheckQueueIds: string[] = [];\r\n private entityCheckRemoval: () => void = <any>null;\r\n private isRunningCheck = false;\r\n private viewMonitorRemoval: () => void = <any>null;\r\n private renderQueue: Entity.IEntity[] = [];\r\n private renderQueueInterval: any = null;\r\n private clustering: PointClustering;\r\n\r\n constructor(params: {\r\n viewer: Cesium.Viewer,\r\n register: VisualsRegister.Register,\r\n apiGetter: BruceApi.IGetter,\r\n monitor: CesiumViewMonitor,\r\n item: MenuItem.Item.IEntities,\r\n sharedGetters: SharedGetters.Cache\r\n }) {\r\n const { viewer, apiGetter, monitor, item, register: visualsManager, sharedGetters } = params;\r\n this.viewer = viewer;\r\n this.sharedGetters = sharedGetters;\r\n this.monitor = monitor;\r\n this.apiGetter = apiGetter;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n if (item.enableClustering) {\r\n this.clustering = new PointClustering(this.visualsManager, this.item.id);\r\n }\r\n }\r\n\r\n public Init(params?: {\r\n item: MenuItem.Item.IEntities\r\n }) {\r\n if (this.disposed) {\r\n throw(new Error(\"This item is disposed.\"));\r\n }\r\n if (params?.item) {\r\n this.item = params.item;\r\n }\r\n\r\n const isTagItem = Boolean(this.item.BruceEntity.ExpandLayers);\r\n let tagsToRender = isTagItem ? this.item.BruceEntity.SelectedExpandLayers : null;\r\n if (!tagsToRender) {\r\n tagsToRender = [];\r\n }\r\n tagsToRender = [].concat(tagsToRender);\r\n const shouldRender = !isTagItem || tagsToRender.length > 0;\r\n this.getter?.ExcludeMenuItem(this.item.id);\r\n this.getter = null;\r\n this.getterSub?.();\r\n this.getterSub = null;\r\n this.viewMonitorRemoval?.();\r\n this.viewMonitorRemoval = null;\r\n this.entityCheckQueue?.Dispose();\r\n this.entityCheckQueue = null;\r\n clearInterval(this.renderQueueInterval);\r\n this.renderQueueInterval = null;\r\n this.renderQueue = [];\r\n // Remove just the ones that shouldn't be rendered.\r\n // Eg: for a tag menu item we can see what tags are selected and only render those.\r\n if (shouldRender) {\r\n this.visualsManager.RemoveRegos({\r\n menuItemId: this.item.id,\r\n retainTagIds: tagsToRender\r\n });\r\n this.clustering?.Dispose();\r\n }\r\n else {\r\n this.visualsManager.RemoveRegos({\r\n menuItemId: this.item.id\r\n });\r\n this.clustering?.Dispose();\r\n return;\r\n }\r\n if (this.item.enableClustering) { \r\n this.clustering = new PointClustering(this.visualsManager, this.item.id);\r\n }\r\n const api = this.apiGetter.getApi();\r\n this.getter = this.sharedGetters.GetOrCreateFilterGetter({\r\n api: api,\r\n attrFilter: this.item.BruceEntity.Filter ?? {},\r\n batchSize: BATCH_SIZE,\r\n typeId: this.item.BruceEntity[\"EntityType.ID\"],\r\n monitor: this.monitor,\r\n viewer: this.viewer,\r\n debugShowBounds: Boolean((window as any)?.ENTITIES_RENDER_MANAGER_SHOW_BOUNDS),\r\n cdn: this.item.cdnEnabled\r\n });\r\n const minMax = RenderManager.GetZoomMinMax({\r\n zoomControl: this.item.CameraZoomSettings\r\n });\r\n this.getter.IncludeMenuItem(this.item.id, [], minMax[0], minMax[1]);\r\n this.getterSub = this.getter.OnUpdate.Subscribe((entities) => {\r\n if (isTagItem) {\r\n this.distributeForRender(entities.filter((entity) => {\r\n let entityTags = entity.Bruce[\"Layer.ID\"];\r\n if (!entityTags) {\r\n entityTags = [];\r\n }\r\n return entityTags.some((tag) => {\r\n return tagsToRender.indexOf(tag) !== -1;\r\n });\r\n }));\r\n }\r\n else {\r\n this.distributeForRender(entities);\r\n }\r\n });\r\n this.viewMonitorRemoval = this.monitor.Updated().Subscribe(() => {\r\n this.entityCheckQueue.Call();\r\n });\r\n this.entityCheckQueue = new DelayQueue(() => {\r\n // Don't bother checking for zoom control changes if we only have 1 item.\r\n // We'll let Cesium handle hide/show at max zoom range. \r\n const shouldCheck = this.item?.CameraZoomSettings && this.item.CameraZoomSettings.length > 1;\r\n if (shouldCheck) {\r\n this.doEntityCheck(Object.keys(this.renderedEntities));\r\n }\r\n }, 3000);\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.doDispose();\r\n }\r\n\r\n private doDispose() {\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n if (this.getter) {\r\n this.getter.ExcludeMenuItem(this.item.id);\r\n }\r\n this.disposed = true;\r\n this.visualsManager.RemoveRegos({\r\n menuItemId: this.item.id\r\n });\r\n this.entityCheckRemoval?.();\r\n this.viewMonitorRemoval?.();\r\n clearInterval(this.renderQueueInterval);\r\n this.renderQueue = [];\r\n this.clustering?.Dispose();\r\n }\r\n\r\n public async ReRender(params: {\r\n entityIds?: string[],\r\n entities?: Entity.IEntity[],\r\n force?: boolean\r\n }) {\r\n let { entityIds, force, entities } = params;\r\n if (entities && !entityIds) {\r\n entityIds = entities.map(x => x.Bruce?.ID);\r\n }\r\n if (entityIds == null) {\r\n entityIds = Object.keys(this.renderedEntities);\r\n }\r\n this.visualsManager.MarkStale({\r\n entityIds: entityIds,\r\n menuItemIds: [this.item.id]\r\n });\r\n if (entities?.length) {\r\n entities = [].concat(entities).filter(x => entityIds.includes(x.Bruce?.ID));\r\n }\r\n\r\n // Forcing to skip queue and to render immediately.\r\n if (force) {\r\n if (entities?.length) {\r\n this.renderEntities(entities, true);\r\n }\r\n else {\r\n try {\r\n const data = await Entity.GetListByIds({\r\n api: this.apiGetter.getApi(),\r\n entityIds\r\n });\r\n this.renderEntities(data.entities, true);\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n else {\r\n if (entities?.length) {\r\n this.distributeForRender(entities);\r\n }\r\n else {\r\n await this.doEntityCheck(entityIds);\r\n }\r\n }\r\n }\r\n\r\n private async doEntityCheck(ids: string[]): Promise<void> {\r\n if (this.isRunningCheck) {\r\n this.entityCheckQueueIds = this.entityCheckQueueIds.concat(ids);\r\n this.entityCheckQueue.Call();\r\n return;\r\n }\r\n ids.concat(this.entityCheckQueueIds);\r\n this.entityCheckQueueIds = [];\r\n ids = ids.filter((id, index) => {\r\n return ids.indexOf(id) === index;\r\n });\r\n\r\n this.isRunningCheck = true;\r\n const api = this.apiGetter.getApi();\r\n try {\r\n if (this.disposed) {\r\n return;\r\n }\r\n if (ids.length > 0) {\r\n const checkBatch = async() => {\r\n const entityIds = ids.splice(0, CHECK_BATCH_SIZE);\r\n const {entities} = await Entity.GetListByIds({\r\n api,\r\n entityIds\r\n });\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.distributeForRender(entities);\r\n };\r\n while (ids.length > 0) {\r\n await checkBatch();\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n this.isRunningCheck = false;\r\n }\r\n\r\n private distributeForRender(entities: Entity.IEntity[]): void {\r\n this.renderQueue = this.renderQueue.concat(entities);\r\n if (!this.renderQueueInterval && this.renderQueue.length) {\r\n this.renderQueueInterval = setInterval(() => {\r\n const batch = this.renderQueue.splice(0, BATCH_SIZE);\r\n this.renderEntities(batch);\r\n if (this.renderQueue.length <= 0) {\r\n clearInterval(this.renderQueueInterval);\r\n this.renderQueueInterval = null;\r\n }\r\n }, 50);\r\n }\r\n }\r\n\r\n private async renderEntities(entities: Entity.IEntity[], force: boolean = false): Promise<void> {\r\n try {\r\n if (this.disposed || this.viewer.isDestroyed()) {\r\n return;\r\n }\r\n // Ensuring a re-render call with improper entity ids doesn't cause them to render here.\r\n const typeId = this.item.BruceEntity?.[\"EntityType.ID\"];\r\n if (typeId) {\r\n entities = entities.filter(x => x.Bruce?.[\"EntityType.ID\"] == typeId);\r\n }\r\n\r\n const cEntities = await EntityRenderEngine.Render({\r\n viewer: this.viewer,\r\n apiGetter: this.apiGetter,\r\n entities: entities,\r\n menuItemId: this.item.id,\r\n visualRegister: this.visualsManager,\r\n zoomControl: this.item.CameraZoomSettings,\r\n force\r\n });\r\n if (this.disposed) {\r\n this.doDispose();\r\n return;\r\n }\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n const id = entity.Bruce.ID;\r\n const cEntity = cEntities[id];\r\n this.renderedEntities[id] = !!cEntity;\r\n if (cEntity) {\r\n let visual = this.visualsManager.GetRego({\r\n entityId: id,\r\n menuItemId: this.item.id\r\n })?.visual;\r\n if (!visual || visual != cEntity) {\r\n const wasClustered = this.clustering ? this.clustering.AddEntity(id, cEntity) : false;\r\n const tagIds = entity.Bruce?.[\"Layer.ID\"];\r\n const rego: VisualsRegister.IVisualRego = {\r\n entityId: id,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0,\r\n entityTypeId: entity.Bruce[\"EntityType.ID\"],\r\n accountId: this.apiGetter.accountId,\r\n tagIds: tagIds ? [].concat(tagIds) : [],\r\n suppressShow: wasClustered\r\n };\r\n this.visualsManager.AddRego({\r\n rego\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.RemoveRegos({\r\n entityId: id,\r\n menuItemId: this.item.id\r\n });\r\n this.clustering?.RemoveEntity(id);\r\n }\r\n }\r\n this.viewer.scene.requestRender();\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n}","import { BatchedDataGetter, BruceApi, Entity, IDictionary, ZoomControl, MenuItem } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\r\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\n\r\nconst BATCH_SIZE = 500;\r\nconst CHECK_BATCH_SIZE = 250;\r\n\r\n/**\r\n * Render manager for a group of pre-loaded entities.\r\n * The entities may or may not have records.\r\n * If the entities DON'T have records, it is recommended to avoid using the 3dmodel visualization as it will fail to locate LODs.\r\n */\r\nexport namespace EntitiesLoadedRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private item: MenuItem.Item.IEntitiesLoaded;\r\n private getter: BatchedDataGetter.Getter<Entity.IEntity> = <any>null;\r\n private monitor: CesiumViewMonitor;\r\n private getterSub: () => void = <any>null;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private renderedEntities: IDictionary<boolean> = {};\r\n private visualsManager: VisualsRegister.Register;\r\n private updatedEntities: IDictionary<Entity.IEntity> = {};\r\n\r\n constructor(params: {\r\n viewer: Cesium.Viewer,\r\n register: VisualsRegister.Register,\r\n apiGetter: BruceApi.IGetter,\r\n monitor: CesiumViewMonitor,\r\n item: MenuItem.Item.IEntitiesLoaded\r\n }) {\r\n const { viewer, apiGetter, monitor, item, register: visualsManager } = params;\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.monitor = monitor;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public Init() {\r\n if (this.disposed) {\r\n throw(new Error(\"This item is disposed.\"));\r\n }\r\n this.getter = new BatchedDataGetter.Getter<Entity.IEntity>(\r\n this.item.BruceEntity.Entities,\r\n this.monitor,\r\n BATCH_SIZE\r\n );\r\n this.getterSub = this.getter.OnUpdate.Subscribe((entities) => {\r\n const latest = [];\r\n for (const entity of entities) {\r\n if (this.renderedEntities[entity?.Bruce?.ID]) {\r\n latest.push(entity);\r\n continue;\r\n }\r\n latest.push(entity);\r\n }\r\n this.onGetterUpdate(entities);\r\n });\r\n this.getter.Start();\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n this.disposed = true;\r\n this.visualsManager.RemoveRegos({\r\n menuItemId: this.item.id\r\n });\r\n }\r\n\r\n public async ReRender(params: {\r\n entityIds?: string[],\r\n entities?: Entity.IEntity[],\r\n force?: boolean\r\n }) {\r\n let { entityIds, force, entities } = params;\r\n if (entities && !entityIds) {\r\n entityIds = entities.map(x => x.Bruce?.ID);\r\n }\r\n if (entityIds == null) {\r\n entityIds = Object.keys(this.renderedEntities);\r\n }\r\n else {\r\n // ensure entity ids are part of menu item.\r\n entityIds = entityIds.filter(x => {\r\n return this.item.BruceEntity?.Entities?.find(y => y?.Bruce?.ID == x);\r\n })\r\n }\r\n if (entities?.length) {\r\n entities = [].concat(entities).filter(x => entityIds.includes(x.Bruce?.ID))\r\n entities.forEach((x) => {\r\n this.updatedEntities[x.Bruce?.ID] = x;\r\n });\r\n }\r\n this.visualsManager.MarkStale({\r\n entityIds: entityIds,\r\n menuItemIds: [this.item.id]\r\n });\r\n if (entities?.length) {\r\n this.onGetterUpdate(entities, force);\r\n }\r\n else {\r\n this.doEntityCheck(entityIds, force);\r\n }\r\n }\r\n\r\n private async doEntityCheck(ids: string[], force: boolean = false): Promise<void> {\r\n const api = this.apiGetter.getApi();\r\n try {\r\n if (this.disposed) {\r\n return;\r\n }\r\n if (ids.length > 0) {\r\n const checkBatch = async() => {\r\n const entityIds = ids.splice(0, CHECK_BATCH_SIZE);\r\n const {entities} = await Entity.GetListByIds({\r\n api,\r\n entityIds\r\n });\r\n if (this.disposed) {\r\n return;\r\n }\r\n entities.forEach((x) => {\r\n this.updatedEntities[x.Bruce?.ID] = x;\r\n });\r\n this.onGetterUpdate(entities, force);\r\n };\r\n while (ids.length > 0) {\r\n await checkBatch();\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n private async onGetterUpdate(entities: Entity.IEntity[], force: boolean = false): Promise<void> {\r\n try {\r\n if (this.disposed || this.viewer.isDestroyed()) {\r\n return;\r\n }\r\n const cEntities = await EntityRenderEngine.Render({\r\n viewer: this.viewer,\r\n apiGetter: this.apiGetter,\r\n entities: entities,\r\n menuItemId: this.item.id,\r\n visualRegister: this.visualsManager,\r\n zoomControl: this.item.CameraZoomSettings,\r\n force\r\n });\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n const id = <string>entity.Bruce.ID;\r\n const cEntity = cEntities[id];\r\n this.renderedEntities[id] = !!cEntity;\r\n if (cEntity) {\r\n const visual = this.visualsManager.GetRego({\r\n entityId: id,\r\n menuItemId: this.item.id\r\n })?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.AddRego({\r\n rego: {\r\n entityId: <string>id,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0,\r\n entityTypeId: entity.Bruce[\"EntityType.ID\"],\r\n accountId: this.apiGetter.accountId\r\n }\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.RemoveRegos({\r\n entityId: id,\r\n menuItemId: this.item.id\r\n });\r\n }\r\n }\r\n this.viewer.scene.requestRender();\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n}","import { Cartes } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { DrawingUtils } from \"../../../utils/drawing-utils\";\n\n/**\n * Utility for rendering parabolas between two points on the map.\n */\nexport class CesiumParabola {\n private viewer: Cesium.Viewer;\n private pos1: Cesium.Cartesian3 | (() => Cesium.Cartesian3);\n private pos2: Cesium.Cartesian3 | (() => Cesium.Cartesian3);\n private color = \"white\";\n private width = 2;\n private duration = 10;\n private heightDistanceRatio = 0.25;\n\n private curPoints = [];\n private animateInterval = null;\n private retryTimeout = null;\n private parabola: Cesium.Entity;\n private siblings: Cesium.Entity[];\n\n private get curPos1() {\n return this.pos1 instanceof Function ? this.pos1() : this.pos1;\n }\n private get curPos2() {\n return this.pos2 instanceof Function ? this.pos2() : this.pos2;\n }\n\n\n constructor(params: {\n viewer: Cesium.Viewer,\n // Direct position or a callback to get one.\n pos1: Cesium.Cartesian3 | (() => Cesium.Cartesian3),\n pos2: Cesium.Cartesian3 | (() => Cesium.Cartesian3),\n color?: string,\n width?: number,\n duration?: number,\n heightDistanceRatio?: number\n }) {\n this.viewer = params.viewer;\n this.pos1 = params.pos1;\n this.pos2 = params.pos2;\n if (params.color) {\n this.color = params.color;\n }\n if (!isNaN(params.width)) {\n this.width = params.width;\n }\n if (!isNaN(params.duration)) {\n this.duration = params.duration;\n }\n if (!isNaN(params.heightDistanceRatio)) {\n this.heightDistanceRatio = params.heightDistanceRatio;\n }\n this.prepareEntities();\n }\n\n private prepareEntities() {\n const parabola = new Cesium.Entity({\n polyline: {\n positions: new Cesium.CallbackProperty(() => {\n return this.curPoints;\n }, false) as any,\n width: this.width,\n material: Cesium.Color.fromCssColorString(this.color)\n }\n });\n const p1Entity = new Cesium.Entity({\n position: new Cesium.CallbackProperty(() => {\n return this.curPoints.length ? this.curPoints[0] : new Cesium.Cartesian3();\n }, false) as any,\n point: {\n heightReference: Cesium.HeightReference.NONE,\n pixelSize: this.width * 1.3,\n color: Cesium.Color.fromCssColorString(this.color),\n outlineColor: Cesium.Color.WHITE,\n outlineWidth: 2\n }\n });\n const p2Entity = new Cesium.Entity({\n position: new Cesium.CallbackProperty(() => {\n return this.curPoints.length ? this.curPoints[this.curPoints.length - 1] : new Cesium.Cartesian3();\n }, false) as any,\n point: {\n heightReference: Cesium.HeightReference.NONE,\n pixelSize: this.width * 1.8,\n color: Cesium.Color.fromCssColorString(this.color),\n outlineColor: Cesium.Color.WHITE,\n outlineWidth: 2\n }\n });\n p1Entity.parent = parabola;\n p2Entity.parent = parabola;\n const siblings = [p1Entity, p2Entity];\n this.parabola = parabola;\n this.siblings = siblings;\n }\n\n public Animate(): {\n parabola: Cesium.Entity,\n siblings: Cesium.Entity[]\n } {\n if (this.parabola && !this.viewer.entities.contains(this.parabola)) {\n this.viewer.entities.add(this.parabola);\n }\n\n let retry = false;\n if (!this.curPos1 || !this.curPos2 || !Cartes.ValidateCartes3(this.curPos1) || !Cartes.ValidateCartes3(this.curPos2)) {\n retry = true;\n }\n let TOTAL_LENGTH = retry ? 0 : Cesium.Cartesian3.distance(this.curPos1, this.curPos2);\n if (TOTAL_LENGTH <= 0) {\n retry = true;\n }\n if (retry) {\n this.retryTimeout = setTimeout(() => {\n this.Animate();\n }, 2000);\n return {\n parabola: this.parabola,\n siblings: this.siblings\n };\n }\n\n const cEntities = [\n this.parabola\n ].concat(this.siblings);\n cEntities.forEach(e => {\n if (e && !this.viewer.entities.contains(e)) {\n this.viewer.entities.add(e);\n }\n });\n\n const RATE_PER_SECOND = 1000 / 40;\n const SEC_DURATION = this.duration;\n const HEIGHT_DISTANCE_RATIO = this.heightDistanceRatio;\n let TOTAL_POINTS = Math.max(50, Math.min(1000, TOTAL_LENGTH * 0.1));\n let POINT_LENGTH = TOTAL_LENGTH / TOTAL_POINTS;\n let TICK_LENGTH_INC = SEC_DURATION == 0 ? TOTAL_LENGTH : TOTAL_POINTS / (RATE_PER_SECOND * SEC_DURATION);\n\n let curPoint = 0;\n let quadraticKey = null;\n let quadratic: { a: number, b: number, c: number } = null;\n let quadraticPreparing = false;\n\n const prepareQuadratic = async () => {\n if (quadraticPreparing) {\n return;\n }\n quadraticPreparing = true;\n try {\n const p1 = this.curPos1;\n const p2 = this.curPos2;\n if (!p1 || !p2 || !Cartes.ValidateCartes3(p1) || !Cartes.ValidateCartes3(p2)) {\n return;\n }\n const height1 = Cesium.Cartographic.fromCartesian(p1).height;\n const height2 = Cesium.Cartographic.fromCartesian(p2).height;\n if (isNaN(height1) || isNaN(height2)) {\n return;\n }\n const totalHeight = height2 + height1;\n const curQuadraticKey = `${height1}-${height2}-${TOTAL_LENGTH}`;\n if (quadraticKey == curQuadraticKey) {\n return;\n }\n \n const points2d = [\n new Cesium.Cartesian2(0, height1),\n new Cesium.Cartesian2(TOTAL_LENGTH, height2)\n ];\n let vertexHeight = 0;\n // Flat line.\n if (HEIGHT_DISTANCE_RATIO == 0) {\n vertexHeight = totalHeight * 0.5;\n }\n else {\n const largestHeight = Math.max(height1, height2);\n vertexHeight = largestHeight + (TOTAL_LENGTH * HEIGHT_DISTANCE_RATIO);\n }\n points2d.push(new Cesium.Cartesian2(\n TOTAL_LENGTH * 0.5,\n vertexHeight\n ));\n const calcQuadratic = (points: Cesium.Cartesian2[]) => {\n // Swaps position of two rows in matrix.\n function swapRows(matrix, rowAIndex, rowBIndex) {\n const rowAVal = matrix[rowAIndex];\n matrix[rowAIndex] = matrix[rowBIndex];\n matrix[rowBIndex] = rowAVal;\n return matrix;\n }\n \n // Zeros rowA at colIndex by subtracting a multiplied rowB from it.\n function reduceMatrixRowByRow(matrix, zeroingIndex, parentIndex, colIndex) {\n const zeroRow = matrix[zeroingIndex];\n const parentRow = matrix[parentIndex];\n \n if (zeroRow[colIndex] == 0) {\n return matrix;\n }\n else if (parentRow[colIndex] == 0) {\n matrix = swapRows(matrix, parentIndex, zeroingIndex); \n return divideMatrixRow(matrix, parentIndex, colIndex);\n }\n \n // rowAIndex colIndex / rowBIndex colIndex = factor;\n let factor = zeroRow[colIndex] / parentRow[colIndex];\n for (let i = 0; i < zeroRow.length; i++) {\n if (i >= colIndex) {\n zeroRow[i] -= parentRow[i] * factor;\n }\n }\n return matrix;\n }\n \n // Makes a given row column equal 1 by diving while row by that column.\n function divideMatrixRow(matrix, rowIndex, colIndex) {\n const row = matrix[rowIndex];\n const colValue = row[colIndex];\n for (let i = 0; i < row.length; i++) {\n if (i >= colIndex) {\n row[i] /= colValue;\n }\n }\n return matrix;\n }\n \n // Returns initial matrix for calculating a, b and c for quadratic formula from given points.\n function matrixFromPoints(points) {\n const rows = [];\n const constructRow = (point) => {\n rows.push([\n -Math.pow(point.x, 2),\n point.x,\n 1,\n point.y\n ]);\n };\n for (let i = 0; i < points.length; i++) {\n constructRow(points[i]);\n }\n return rows;\n }\n \n const initialMatrix = matrixFromPoints(points);\n const step1Matrix = reduceMatrixRowByRow(initialMatrix, 1, 0, 0);\n const step2Matrix = reduceMatrixRowByRow(step1Matrix, 2, 0, 0);\n const step3Matrix = reduceMatrixRowByRow(step2Matrix, 2, 1, 1);\n const step4Matrix = reduceMatrixRowByRow(step3Matrix, 0, 1, 1);\n const step5Matrix = reduceMatrixRowByRow(step4Matrix, 0, 2, 2);\n const step6Matrix = reduceMatrixRowByRow(step5Matrix, 1, 2, 2);\n const a = step6Matrix[0][3];\n const b = step6Matrix[1][3];\n const c = step6Matrix[2][3];\n return { a: a, b: b, c: c };\n };\n quadratic = calcQuadratic(points2d);\n }\n catch (e) {\n console.error(e);\n }\n finally {\n quadraticPreparing = false;\n }\n };\n\n const getPosition = (increment: number): Cesium.Cartesian3 => {\n if (!quadratic) {\n return null;\n }\n\n let lengthAcross = POINT_LENGTH * increment;\n if (lengthAcross > TOTAL_LENGTH) {\n lengthAcross = TOTAL_LENGTH;\n }\n\n const getParabolaYFromX = (x: number, quadLetters: { a: number, b: number, c: number }): number => {\n let a = quadLetters.a;\n let b = quadLetters.b;\n let c = quadLetters.c;\n return (-a * Math.pow(x, 2)) + (b * x) + c;\n }\n\n const {point: pos3d} = DrawingUtils.PointAcrossPolyline({\n viewer: this.viewer,\n distance: lengthAcross,\n posses: [this.curPos1, this.curPos2]\n })\n const point = Cesium.Cartographic.fromCartesian(pos3d);\n const posHeight = getParabolaYFromX(lengthAcross, quadratic);\n return Cesium.Cartesian3.fromRadians(point.longitude, point.latitude, posHeight);\n };\n\n const updatePoints = () => {\n if (!quadratic) {\n return;\n }\n const increment = Math.floor(curPoint);\n const chips = curPoint - Math.floor(curPoint);\n const posses: Cesium.Cartesian3[] = [];\n posses.push(getPosition(0));\n const addLast = increment >= TOTAL_POINTS;\n const totalCycles = addLast ? increment + 1 : increment;\n for (let i = 0; i < totalCycles; i++) {\n posses.push(getPosition(i));\n }\n posses.push(getPosition(increment + chips));\n if (posses.find(x => !x || !Cartes.ValidateCartes3(x))) {\n return;\n }\n this.curPoints = posses;\n };\n\n const doTick = () => {\n const p1 = this.curPos1;\n const p2 = this.curPos2;\n const newLength = p1 && p2 ? Cesium.Cartesian3.distance(p1, p2) : -1;\n if (newLength > 0 && newLength != TOTAL_LENGTH) {\n TOTAL_LENGTH = newLength;\n TOTAL_POINTS = Math.max(50, Math.min(1000, TOTAL_LENGTH * 0.1));\n POINT_LENGTH = TOTAL_LENGTH / TOTAL_POINTS;\n TICK_LENGTH_INC = SEC_DURATION == 0 ? TOTAL_LENGTH : TOTAL_POINTS / (RATE_PER_SECOND * SEC_DURATION);\n }\n prepareQuadratic();\n if (quadratic) {\n if (curPoint < TOTAL_POINTS) {\n curPoint += TICK_LENGTH_INC;\n }\n updatePoints();\n }\n };\n this.animateInterval = setInterval(doTick, RATE_PER_SECOND);\n\n return {\n parabola: this.parabola,\n siblings: this.siblings\n };\n }\n\n public Dispose() {\n clearTimeout(this.retryTimeout);\n clearInterval(this.animateInterval);\n const cEntities = [\n this.parabola\n ].concat(this.siblings);\n cEntities.forEach(e => {\n if (e && this.viewer.entities.contains(e)) {\n this.viewer.entities.remove(e);\n }\n });\n }\n}","import { BruceApi, Calculator, Color, Entity, EntityRelation, EntityRelationType, EntityType, IDictionary, Style } from \"bruce-models\";\nimport { VisualsRegister } from \"./visuals-register\";\nimport * as Cesium from \"cesium\";\nimport { CesiumParabola } from \"./render-managers/common/cesium-parabola\";\nimport { EnsureNumber } from \"../internal/js-utils\";\nimport { EntityUtils } from \"../utils/entity-utils\";\n\nfunction colorToCColor(color: Color.IColor): Cesium.Color {\n return new Cesium.Color(\n color.red ? color.red/255 : 0,\n color.green ? color.green/255 : 0,\n color.blue ? color.blue/255 : 0,\n color.alpha\n );\n}\n\nexport namespace RelationRenderEngine {\n export interface ICesiumEntityExt extends Cesium.Entity {\n _siblingGraphics?: Cesium.Entity[];\n _parentEntity?: Cesium.Entity;\n _renderGroup?: string;\n }\n\n export function GetRenderGroupId(relation: EntityRelation.IRelation) {\n return `${relation[\"Related.Entity.ID\"]}-${relation[\"Principal.Entity.ID\"]}-${relation[\"Relation.Type.ID\"]}`;\n }\n\n export async function Render(params: {\n apiGetter: BruceApi.IGetter,\n viewer: Cesium.Viewer;\n visualRegister: VisualsRegister.Register;\n menuItemId: string;\n relations: EntityRelation.IRelation[]\n }): Promise<IDictionary<ICesiumEntityExt>> {\n const { apiGetter, viewer, visualRegister, menuItemId, relations } = params;\n const api = apiGetter.getApi(apiGetter.accountId);\n const rendered: IDictionary<ICesiumEntityExt> = {};\n for (let i = 0; i < relations.length; i++) {\n const relation = relations[i];\n const {entity: fromEntity} = await Entity.Get({\n api,\n entityId: relation[\"Principal.Entity.ID\"],\n });\n const {entity: toEntity} = await Entity.Get({\n api,\n entityId: relation[\"Related.Entity.ID\"],\n });\n const dataEntity = relation[\"Data.Entity.ID\"] ? (await Entity.Get({\n api,\n entityId: relation[\"Data.Entity.ID\"]\n })).entity : null;\n const {relationType} = await EntityRelationType.Get({\n api,\n relationTypeId: relation[\"Relation.Type.ID\"]\n });\n let styleId = Number(relationType?.EntityDisplaySettingID);\n if (!styleId) {\n const typeId = relationType?.[\"Relation.EntityType.ID\"];\n const entityType = typeId ? (await EntityType.Get({\n api,\n entityTypeId: typeId\n })).entityType : null;\n styleId = entityType?.[\"DisplaySetting.ID\"];\n }\n const style = styleId ? (await Style.Get({\n api,\n styleId: styleId\n })).style : null;\n const cEntity = await Parabola.Render({\n dataEntity,\n fromEntity,\n relation,\n style,\n toEntity,\n viewer,\n visualRegister,\n apiGetter\n });\n cEntity._renderGroup = GetRenderGroupId(relation);\n rendered[GetRenderGroupId(relation)] = cEntity;\n }\n return rendered;\n }\n\n export namespace Parabola {\n export interface IParabola {\n viewer: Cesium.Viewer;\n relation: EntityRelation.IRelation;\n fromEntity: Entity.IEntity;\n toEntity: Entity.IEntity;\n dataEntity: Entity.IEntity;\n style: Style.IStyle;\n visualRegister?: VisualsRegister.Register;\n apiGetter: BruceApi.IGetter;\n }\n\n export async function Render(params: IParabola): Promise<ICesiumEntityExt> {\n const style = params.style?.Settings as Style.IRelationSettings;\n\n const entity = params.dataEntity;\n const bColor: Color.IColor = style?.lineColor ? Calculator.GetColor(style?.lineColor, entity, []) : null;\n const cColor = bColor ? colorToCColor(bColor) : Cesium.Color.WHITE;\n let width = EnsureNumber(style?.lineWidth ? Calculator.GetNumber(style?.lineWidth, entity, []) : 4, 4);\n if (width < 1) {\n width = 1;\n }\n const duration = EnsureNumber(style?.duration ? Calculator.GetNumber(style?.duration, entity, []) : 2, 2);\n const hDistanceRatio = EnsureNumber(style?.heightDistanceRatio ? Calculator.GetNumber(style?.heightDistanceRatio, entity, []) : 0.25, 0.25);\n\n let fromPos = null;\n let toPos = null;\n let updatingPosses = false;\n const updatePosses = async () => {\n if (updatingPosses) {\n return;\n }\n updatingPosses = true;\n try {\n fromPos = await EntityUtils.GetPosAsync({\n // Not passing it so it requests entity with expanded tileset information instead.\n //entity: params.fromEntity,\n viewer: params.viewer,\n visualRegister: params.visualRegister,\n returnHeightRef: Cesium.HeightReference.NONE,\n recordHeightRef: Cesium.HeightReference.CLAMP_TO_GROUND,\n api: params.apiGetter.getApi(),\n entityId: params.fromEntity.Bruce.ID\n });\n toPos = await EntityUtils.GetPosAsync({\n // Not passing it so it requests entity with expanded tileset information instead.\n //entity: params.toEntity,\n viewer: params.viewer,\n visualRegister: params.visualRegister,\n returnHeightRef: Cesium.HeightReference.NONE,\n recordHeightRef: Cesium.HeightReference.CLAMP_TO_GROUND,\n api: params.apiGetter.getApi(),\n entityId: params.toEntity.Bruce.ID\n });\n }\n catch (e) {\n console.error(e);\n }\n updatingPosses = false;\n };\n updatePosses();\n const parabola = new CesiumParabola({\n viewer: params.viewer,\n pos1: () => fromPos,\n pos2: () => toPos,\n color: cColor.toCssColorString(),\n width: width,\n duration: duration,\n heightDistanceRatio: hDistanceRatio\n });\n const cEntities = parabola.Animate();\n const cEntity = cEntities.parabola as ICesiumEntityExt;\n cEntity._siblingGraphics = [];\n for (let i = 0; i < cEntities.siblings.length; i++) {\n const sibling = cEntities.siblings[i];\n cEntity._siblingGraphics.push(sibling);\n }\n let updateInterval = setInterval(() => {\n if (\n !params.viewer?.scene ||\n params.viewer.isDestroyed() ||\n !params.viewer.entities.contains(cEntity)\n ) {\n clearInterval(updateInterval);\n parabola.Dispose();\n return;\n }\n updatePosses();\n }, 1000);\n return cEntity;\n }\n }\n}","import { BruceEvent, Cartes, EntityRelation, IDictionary, ObjectUtils } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EnsureNumber } from \"../internal/js-utils\";\r\nimport { EntityUtils } from \"../utils/entity-utils\";\r\nimport { EntityRenderEngine } from \"./entity-render-engine\";\r\nimport { RelationRenderEngine } from \"./relation-render-engine\";\r\n\r\ninterface IVisualExt {//extends Visual {\r\n _register?: VisualsRegister.Register;\r\n _rego?: VisualsRegister.IVisualRego;\r\n}\r\n\r\n/**\r\n * Returns if a given visual is alive and in the scene.\r\n * @param viewer\r\n * @param visual\r\n * @returns\r\n */\r\nfunction isAlive(viewer: Cesium.Viewer, visual: VisualsRegister.Visual) {\r\n if (!viewer?.scene || viewer.isDestroyed()) {\r\n return false;\r\n }\r\n if (visual instanceof Cesium.Entity) {\r\n return viewer.entities.contains(visual);\r\n }\r\n else if (visual instanceof Cesium.Primitive) {\r\n return viewer.scene.primitives.contains(visual);\r\n }\r\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\r\n const cTileset = visual?.tileset;\r\n if (!cTileset) {\r\n return false;\r\n }\r\n if (cTileset.isDestroyed() || !viewer.scene.primitives.contains(cTileset)) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction removeEntity(viewer: Cesium.Viewer, visual: VisualsRegister.Visual): void {\r\n unmarkEntity(visual, false);\r\n if (visual instanceof Cesium.Entity) {\r\n EntityRenderEngine.Remove({\r\n viewer,\r\n entity: visual\r\n });\r\n }\r\n else if (visual instanceof Cesium.Primitive) {\r\n if (viewer.scene.primitives.contains(visual)) {\r\n viewer.scene.primitives.remove(visual);\r\n }\r\n }\r\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\r\n try {\r\n const tileset = visual?.tileset;\r\n if (tileset && viewer.scene.primitives.contains(tileset)) {\r\n visual.show = false;\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n}\r\n\r\nfunction updateCEntityShow(viewer: Cesium.Viewer, visual: EntityRenderEngine.ICesiumEntityExt, show: boolean, ignoreParent: boolean) {\r\n if (visual._parentEntity && !ignoreParent) {\r\n updateCEntityShow(viewer, visual._parentEntity, show, false);\r\n }\r\n if (visual._siblingGraphics) {\r\n for (let i = 0; i < visual._siblingGraphics.length; i++) {\r\n const sibling = visual._siblingGraphics[i];\r\n updateCEntityShow(viewer, sibling, show, true);\r\n }\r\n }\r\n if (viewer.entities.contains(visual)) {\r\n visual.show = show;\r\n }\r\n}\r\n\r\nfunction updateEntityShow(\r\n viewer: Cesium.Viewer,\r\n visual: VisualsRegister.Visual,\r\n show: boolean\r\n): void {\r\n if (!isAlive(viewer, visual)) {\r\n return;\r\n }\r\n if (visual instanceof Cesium.Entity) {\r\n updateCEntityShow(viewer, visual, show, false);\r\n }\r\n else if (visual instanceof Cesium.Primitive) {\r\n if (viewer.scene.primitives.contains(visual)) {\r\n visual.show = show;\r\n }\r\n }\r\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\r\n // No way to tell if changing show will crash it!\r\n try {\r\n visual.show = show;\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n}\r\n\r\nfunction updateEntity(viewer: Cesium.Viewer, entityId: string, register: VisualsRegister.Register): void {\r\n const isolatedIds = register.GetIsolated();\r\n const isIsolated = isolatedIds.includes(entityId);\r\n const isHidden = register.GetIsHidden({\r\n entityId\r\n });\r\n const regos = register.GetRegos({\r\n entityId\r\n });\r\n let highestPriority: VisualsRegister.IVisualRego = <any>null;\r\n for (let i = 0; i < regos.length; i++) {\r\n const rego = regos[i];\r\n if (highestPriority === null || rego.priority > highestPriority.priority) {\r\n highestPriority = rego;\r\n }\r\n }\r\n\r\n function getShowState(rego: VisualsRegister.IVisualRego) {\r\n if (isHidden) {\r\n return false;\r\n }\r\n if (!isIsolated && isolatedIds.length > 0) {\r\n return false;\r\n }\r\n return rego === highestPriority;\r\n }\r\n\r\n for (let i = 0; i < regos.length; i++) {\r\n const rego = regos[i];\r\n rego.best = rego === highestPriority;\r\n updateEntityShow(viewer, rego.visual, rego.suppressShow ? false : getShowState(rego));\r\n }\r\n}\r\n\r\nfunction markEntity(register: VisualsRegister.Register, rego: VisualsRegister.IVisualRego, visual: VisualsRegister.Visual, ignoreParent: boolean): void {\r\n const vis = <IVisualExt>visual;\r\n vis._register = register;\r\n vis._rego = rego;\r\n if (visual instanceof Cesium.Entity) {\r\n const visEnt = <EntityRenderEngine.ICesiumEntityExt>visual;\r\n if (visEnt._parentEntity && !ignoreParent) {\r\n markEntity(register, rego, visEnt._parentEntity, false);\r\n }\r\n if (visEnt._siblingGraphics) {\r\n for (let i = 0; i < visEnt._siblingGraphics.length; i++) {\r\n markEntity(register, rego, visEnt._siblingGraphics[i], true);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction unmarkEntity(visual: VisualsRegister.Visual, ignoreParent: boolean): void {\r\n const vis = <IVisualExt>visual;\r\n vis._register = <any>null;\r\n if (visual instanceof Cesium.Entity) {\r\n const visEnt = <EntityRenderEngine.ICesiumEntityExt>visual;\r\n if (visEnt._parentEntity && !ignoreParent) {\r\n unmarkEntity(visEnt._parentEntity, false);\r\n }\r\n if (visEnt._siblingGraphics) {\r\n for (let i = 0; i < visEnt._siblingGraphics.length; i++) {\r\n unmarkEntity(visEnt._siblingGraphics[i], true);\r\n }\r\n }\r\n }\r\n}\r\n\r\nconst ORG_COLOR_KEY = \"_org_color_\";\r\n\r\nfunction select(viewer: Cesium.Viewer, visual: VisualsRegister.Visual, color: Cesium.Color): void {\r\n if (!isAlive(viewer, visual)) {\r\n return;\r\n }\r\n if (!color) {\r\n color = Cesium.Color.fromAlpha(Cesium.Color.YELLOW, 0.5);\r\n }\r\n if (visual instanceof Cesium.Entity) {\r\n const entities = EntityUtils.GatherEntity({\r\n entity: visual\r\n });\r\n const keyMapping = {\r\n \"point\": \"color\",\r\n \"polygon\": \"material\",\r\n \"polyline\": \"material\",\r\n \"model\": \"color\",\r\n \"billboard\": \"color\",\r\n \"ellipse\": \"material\"\r\n };\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n const processGraphic = (graphicKey: string, materialKey: string) => {\r\n if (entity[graphicKey]) {\r\n if (entity[graphicKey][ORG_COLOR_KEY] == null) {\r\n let orgColor = entity[graphicKey][materialKey];\r\n if (!orgColor) {\r\n orgColor = Cesium.Color.WHITE;\r\n }\r\n entity[graphicKey][ORG_COLOR_KEY] = orgColor.clone ? orgColor.clone() : orgColor;\r\n }\r\n entity[graphicKey][materialKey] = color.clone();\r\n }\r\n };\r\n for (let key in keyMapping) {\r\n const map = keyMapping[key];\r\n processGraphic(key, map);\r\n }\r\n }\r\n }\r\n else if (visual instanceof Cesium.Primitive) {\r\n // TODO.\r\n }\r\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\r\n let orgColor = visual[ORG_COLOR_KEY];\r\n if (orgColor == null) {\r\n orgColor = visual.color;\r\n visual[ORG_COLOR_KEY] = orgColor?.clone?.();\r\n }\r\n visual.color = color.clone();\r\n }\r\n const opacity = EntityUtils.GetOpacity({\r\n entity: visual\r\n });\r\n if (opacity != null) {\r\n EntityUtils.SetOpacity({\r\n viewer,\r\n entity: visual,\r\n opacity\r\n });\r\n }\r\n}\r\n\r\nfunction deselect(viewer: Cesium.Viewer, visual: VisualsRegister.Visual): void {\r\n if (!isAlive(viewer, visual)) {\r\n return;\r\n }\r\n if (visual instanceof Cesium.Entity) {\r\n const entities = EntityUtils.GatherEntity({\r\n entity: visual\r\n });\r\n const keyMapping = {\r\n \"point\": \"color\",\r\n \"polygon\": \"material\",\r\n \"polyline\": \"material\",\r\n \"model\": \"color\",\r\n \"billboard\": \"color\",\r\n \"ellipse\": \"material\"\r\n };\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n const processGraphic = (graphicKey: string, materialKey: string) => {\r\n if (entity[graphicKey]?.[ORG_COLOR_KEY]) {\r\n entity[graphicKey][materialKey] = entity[graphicKey][ORG_COLOR_KEY];\r\n }\r\n };\r\n for (let key in keyMapping) {\r\n const map = keyMapping[key];\r\n processGraphic(key, map);\r\n }\r\n }\r\n }\r\n else if (visual instanceof Cesium.Primitive) {\r\n // TODO.\r\n }\r\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\r\n const orgColor = visual[ORG_COLOR_KEY];\r\n if (orgColor != null) {\r\n visual.color = orgColor;\r\n }\r\n }\r\n const opacity = EntityUtils.GetOpacity({\r\n entity: visual\r\n });\r\n if (opacity != null) {\r\n EntityUtils.SetOpacity({\r\n viewer,\r\n entity: visual,\r\n opacity\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Manages a registry of all Bruce visuals being rendered by menu items.\r\n * If multiple stuff is registered with the same entity id, only the \"best\" one is left visible.\r\n */\r\nexport namespace VisualsRegister {\r\n export type Visual = Cesium.Entity | Cesium.Primitive | Cesium.Cesium3DTileFeature;\r\n\r\n export interface IVisualRego {\r\n // Bruce entity id.\r\n entityId: string;\r\n // Source bruce account id.\r\n accountId?: string;\r\n // Relationship if this is a rendered relationship.\r\n relation?: EntityRelation.IRelation;\r\n // Bruce entity type id - if known while menu item was loading the visual.\r\n entityTypeId?: string;\r\n // Bruce data-source id.\r\n // Used to store source-entity-id mapping to entity-id.\r\n sourceId?: number\r\n // External entity id.\r\n sourceEntityId?: string;\r\n // Tileset id from which this visual was loaded from.\r\n tilesetId?: string;\r\n // Entity tag ids if known during rendering.\r\n tagIds?: number[];\r\n // Menu item id from which this visual was loaded from.\r\n menuItemId: string;\r\n // The visual itself.\r\n visual: Visual;\r\n // The visual's render priority. The highest priority is rendered, lower ones are hidden.\r\n priority: number;\r\n // Indicates if this is the best visual for the entity.\r\n // If multiple visuals are registered for the same entity, only the best one is left visible.\r\n // Warning: Don't assign, the register will do it.\r\n best?: boolean;\r\n // Optional indicator that this visual is stale,\r\n // This means the next re-render of the menu item will update this visual.\r\n stale?: boolean;\r\n // Last updated opacity value. Null = 100% opacity.\r\n // Warning: Don't assign, the register will do it.\r\n opacity?: number;\r\n // Don't update the visual's show=true.\r\n suppressShow?: boolean;\r\n }\r\n\r\n export enum EVisualUpdateType {\r\n Add = \"ADD\",\r\n Remove = \"REMOVE\",\r\n Update = \"UPDATE\"\r\n }\r\n\r\n export interface IVisualUpdate {\r\n type: EVisualUpdateType;\r\n entityId?: string;\r\n rego?: IVisualRego;\r\n hidden?: boolean;\r\n isolated?: boolean;\r\n selected?: boolean;\r\n opacity?: number;\r\n }\r\n\r\n export class Register {\r\n private id = ObjectUtils.UId();\r\n public get Id(): string {\r\n return this.id;\r\n }\r\n private viewer: Cesium.Viewer;\r\n public get Viewer(): Cesium.Viewer {\r\n return this.viewer;\r\n }\r\n private rego: IDictionary<IVisualRego[]> = {};\r\n private onUpdate: BruceEvent<IVisualUpdate> = <any>null;\r\n public get OnUpdate(): BruceEvent<IVisualUpdate> {\r\n if (!this.onUpdate) {\r\n this.onUpdate = new BruceEvent<IVisualUpdate>();\r\n }\r\n return this.onUpdate;\r\n }\r\n private selectedIds: string[] = [];\r\n private isolatedIds: string[] = [];\r\n private hiddenIds: string[] = [];\r\n // Entity id -> opacity for visual.\r\n private opacity: IDictionary<number> = {};\r\n private selectionColor: Cesium.Color;\r\n\r\n\r\n constructor(viewer: Cesium.Viewer) {\r\n this.viewer = viewer;\r\n }\r\n\r\n public ForceUpdate(params: {\r\n entityIds: string[]\r\n }) {\r\n const { entityIds } = params;\r\n for (let i = 0; i < entityIds.length; i++) {\r\n const entityId = entityIds[i];\r\n updateEntity(this.viewer, entityId, this);\r\n this.OnUpdate.Trigger({\r\n type: EVisualUpdateType.Update,\r\n entityId\r\n });\r\n }\r\n }\r\n\r\n public SetSelectionColor(color: Cesium.Color): void {\r\n this.selectionColor = color;\r\n }\r\n\r\n public SetSelected(params: {\r\n selected: boolean,\r\n entityIds: string[],\r\n refreshIfSelected?: boolean\r\n }): void {\r\n let { entityIds, selected, refreshIfSelected } = params;\r\n if (refreshIfSelected == null) {\r\n refreshIfSelected = true;\r\n }\r\n for (let i = 0; i < entityIds.length; i++) {\r\n const id = entityIds[i];\r\n if (selected) {\r\n let doSelect = refreshIfSelected;\r\n if (this.selectedIds.indexOf(id) === -1) {\r\n this.selectedIds.push(id);\r\n doSelect = true;\r\n }\r\n if (doSelect) {\r\n const regos = this.rego[id];\r\n if (regos) {\r\n for (let i = 0; i < regos.length; i++) {\r\n const rego = regos[i];\r\n select(this.viewer, rego.visual, this.selectionColor);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n const index = this.selectedIds.indexOf(id);\r\n if (index !== -1) {\r\n this.selectedIds.splice(index, 1);\r\n const regos = this.rego[id];\r\n if (regos) {\r\n for (let i = 0; i < regos.length; i++) {\r\n const rego = regos[i];\r\n deselect(this.viewer, rego.visual);\r\n }\r\n }\r\n }\r\n }\r\n this.onUpdate?.Trigger({\r\n entityId: id,\r\n type: EVisualUpdateType.Update,\r\n selected: selected\r\n });\r\n }\r\n }\r\n\r\n public GetIsSelected(params: {\r\n entityId: string\r\n }): boolean {\r\n const { entityId: id } = params;\r\n return this.selectedIds.indexOf(id) !== -1;\r\n }\r\n\r\n public ClearSelected(): void {\r\n for (let i = 0; i < this.selectedIds.length; i++) {\r\n const id = this.selectedIds[i];\r\n const regos = this.rego[id];\r\n if (regos) {\r\n for (let i = 0; i < regos.length; i++) {\r\n const rego = regos[i];\r\n deselect(this.viewer, rego.visual);\r\n }\r\n }\r\n }\r\n this.selectedIds = [];\r\n }\r\n\r\n public GetSelected() {\r\n return this.selectedIds;\r\n }\r\n\r\n public SetIsolated(params: {\r\n entityIds: string[],\r\n isolated: boolean\r\n }): void {\r\n const { entityIds, isolated: isolate } = params;\r\n for (let i = 0; i < entityIds.length; i++) {\r\n const id = entityIds[i];\r\n if (isolate) {\r\n if (this.isolatedIds.indexOf(id) === -1) {\r\n this.isolatedIds.push(id);\r\n }\r\n }\r\n else {\r\n const index = this.isolatedIds.indexOf(id);\r\n if (index !== -1) {\r\n this.isolatedIds.splice(index, 1);\r\n }\r\n }\r\n this.onUpdate?.Trigger({\r\n entityId: id,\r\n type: EVisualUpdateType.Update,\r\n isolated: isolate\r\n });\r\n }\r\n this.updateAllEntities();\r\n }\r\n\r\n public GetIsIsolated(params: {\r\n entityId: string\r\n }): boolean {\r\n const { entityId: id } = params;\r\n return this.isolatedIds.indexOf(id) !== -1;\r\n }\r\n\r\n public GetIsolated() {\r\n return this.isolatedIds;\r\n }\r\n\r\n public ClearIsolated(): void {\r\n this.isolatedIds = [];\r\n this.updateAllEntities();\r\n }\r\n\r\n public SetHidden(params: {\r\n hidden: boolean,\r\n entityIds: string[]\r\n }): void {\r\n const { entityIds, hidden } = params;\r\n for (let i = 0; i < entityIds.length; i++) {\r\n const id = entityIds[i];\r\n if (hidden) {\r\n if (this.hiddenIds.indexOf(id) === -1) {\r\n this.hiddenIds.push(id);\r\n }\r\n updateEntity(this.viewer, id, this);\r\n }\r\n else {\r\n const index = this.hiddenIds.indexOf(id);\r\n if (index !== -1) {\r\n this.hiddenIds.splice(index, 1);\r\n }\r\n updateEntity(this.viewer, id, this);\r\n }\r\n this.onUpdate?.Trigger({\r\n entityId: id,\r\n type: EVisualUpdateType.Update,\r\n hidden: hidden\r\n });\r\n }\r\n }\r\n\r\n public GetIsHidden(params: {\r\n entityId: string\r\n }): boolean {\r\n const { entityId: id } = params;\r\n return this.hiddenIds.indexOf(id) !== -1;\r\n }\r\n\r\n public GetHidden() {\r\n return this.hiddenIds;\r\n }\r\n\r\n public ClearHidden(): void {\r\n this.hiddenIds = [];\r\n this.updateAllEntities();\r\n this.onUpdate?.Trigger({\r\n type: EVisualUpdateType.Update,\r\n hidden: false\r\n });\r\n }\r\n\r\n public AddRego(params: {\r\n rego: IVisualRego\r\n }): void {\r\n const { rego } = params;\r\n // ND-2078\r\n // Tilesets will often add -> remove -> add because of how tiles load in and out of the scene.\r\n // To avoid flickering, we'll just replace rather than remove -> add.\r\n if (!rego.tilesetId) {\r\n this.RemoveRegos({\r\n entityId: rego.entityId,\r\n menuItemId: rego.menuItemId,\r\n doUpdate: false\r\n });\r\n }\r\n const entityId = rego.entityId;\r\n const entityRegos = this.rego[entityId] ?? [];\r\n entityRegos.push(rego);\r\n this.rego[entityId] = entityRegos;\r\n markEntity(this, rego, rego.visual, false);\r\n updateEntity(this.viewer, entityId, this);\r\n\r\n const selected = this.selectedIds.includes(entityId);\r\n if (selected) {\r\n select(this.viewer, rego.visual, this.selectionColor);\r\n }\r\n const opacity = this.opacity[entityId];\r\n if (opacity != null && opacity != 1) {\r\n EntityUtils.SetOpacity({\r\n entity: rego.visual,\r\n opacity: opacity,\r\n viewer: this.viewer\r\n });\r\n }\r\n\r\n this.onUpdate?.Trigger({\r\n rego: rego,\r\n type: EVisualUpdateType.Add,\r\n entityId: rego.entityId,\r\n opacity: opacity,\r\n selected: selected\r\n });\r\n }\r\n\r\n /**\r\n * Locates a visual corresponding to a given entity id.\r\n * If no menu item id is provided, then it will pick the \"best\" one.\r\n * @param entityId\r\n * @param menuItemId\r\n * @returns\r\n */\r\n public GetRego(params: {\r\n entityId: string,\r\n menuItemId?: string\r\n }): IVisualRego {\r\n const { entityId, menuItemId } = params;\r\n const entityRegos = this.rego[entityId];\r\n if (!entityRegos) {\r\n return <any>[];\r\n }\r\n if (menuItemId) {\r\n return <any>entityRegos.find(r => r.menuItemId === menuItemId);\r\n }\r\n return entityRegos.find(x => x.best);\r\n }\r\n\r\n /**\r\n * Returns regos matching given criteria.\r\n * Either entityId or menuItemId must be provided.\r\n * @param params\r\n * @returns\r\n */\r\n public GetRegos(params: {\r\n entityId?: string,\r\n menuItemId?: string\r\n }): IVisualRego[] {\r\n // TODO: refactor.\r\n // Currently this was made by merging two functions.\r\n\r\n const { entityId, menuItemId } = params;\r\n if (entityId) {\r\n const entityId = params.entityId;\r\n const entityRegos = this.rego[entityId];\r\n if (!entityRegos) {\r\n return <any>[];\r\n }\r\n return menuItemId ? entityRegos.filter(x => x.menuItemId == menuItemId) : entityRegos;\r\n }\r\n else if (menuItemId) {\r\n const menuItemId = params.menuItemId;\r\n const visuals: IVisualRego[] = [];\r\n for (const entityId in this.rego) {\r\n const entityRegos = this.rego[entityId];\r\n if (entityRegos) {\r\n const rego = entityRegos.find(r => r.menuItemId === menuItemId);\r\n if (rego) {\r\n visuals.push(rego);\r\n }\r\n }\r\n }\r\n return visuals;\r\n }\r\n }\r\n\r\n /**\r\n * Removes regos matching given criteria.\r\n * Either entityId or menuItemId must be provided.\r\n * @param params\r\n * @returns\r\n */\r\n public RemoveRegos(params: {\r\n entityId?: string,\r\n menuItemId?: string,\r\n relation?: EntityRelation.IRelation,\r\n doUpdate?: boolean,\r\n // If a menu item is being removed, you can specify what tags to retain.\r\n // This means only regos with tags that don't match any retained ones will be removed.\r\n retainTagIds?: (string | number)[]\r\n }): void {\r\n let { entityId, menuItemId, doUpdate, relation, retainTagIds } = params;\r\n if (doUpdate == null) {\r\n doUpdate = true;\r\n }\r\n if (retainTagIds == null) {\r\n retainTagIds = [];\r\n }\r\n\r\n // TODO: refactor.\r\n // Currently this was made by merging two functions.\r\n\r\n if (menuItemId && !entityId) {\r\n for (const entityId in this.rego) {\r\n const entityRegos = this.rego[entityId];\r\n if (entityRegos) {\r\n const rego = entityRegos.find(r => r.menuItemId === menuItemId);\r\n if (!rego) {\r\n continue;\r\n }\r\n const regoTagIds = rego.tagIds ? rego.tagIds : [];\r\n const shouldRetain = regoTagIds.some(tagId => retainTagIds.includes(tagId));\r\n if (shouldRetain) {\r\n continue;\r\n }\r\n removeEntity(this.viewer, rego.visual);\r\n const doesInclude = this.rego[entityId].find(r => r.menuItemId === menuItemId);\r\n if (doesInclude) {\r\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== menuItemId);\r\n }\r\n this.onUpdate?.Trigger({\r\n type: EVisualUpdateType.Remove,\r\n entityId: rego.entityId,\r\n rego: rego\r\n });\r\n if (doesInclude) {\r\n updateEntity(this.viewer, entityId, this);\r\n }\r\n }\r\n }\r\n }\r\n else if (entityId) {\r\n const entityRegos = this.rego[entityId];\r\n if (!entityRegos) {\r\n return;\r\n }\r\n const menuItems = menuItemId ? [menuItemId] : entityRegos.map(x => x.menuItemId);\r\n for (let i = 0; i < menuItems.length; i++) {\r\n const menuItemId = menuItems[i];\r\n const rego = entityRegos.find(r => r.menuItemId === menuItemId);\r\n if (!rego) {\r\n return;\r\n }\r\n removeEntity(this.viewer, rego.visual);\r\n this.onUpdate?.Trigger({\r\n type: EVisualUpdateType.Remove,\r\n entityId: rego.entityId,\r\n rego: rego\r\n });\r\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== menuItemId);\r\n if (doUpdate && menuItemId) {\r\n updateEntity(this.viewer, entityId, this);\r\n }\r\n }\r\n }\r\n else if (relation) {\r\n const relationKey = RelationRenderEngine.GetRenderGroupId(relation);\r\n for (const entityId in this.rego) {\r\n const entityRegos = this.rego[entityId];\r\n if (entityRegos) {\r\n const rego = entityRegos.find(r => r.relation && RelationRenderEngine.GetRenderGroupId(r.relation) == relationKey);\r\n if (!rego) {\r\n continue;\r\n }\r\n removeEntity(this.viewer, rego.visual);\r\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== menuItemId);\r\n this.onUpdate?.Trigger({\r\n type: EVisualUpdateType.Remove,\r\n entityId: rego.entityId,\r\n rego: rego\r\n });\r\n if (doUpdate && menuItemId) {\r\n updateEntity(this.viewer, entityId, this);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Returns an array of drilled visuals associated with this register.\r\n * The top array item is the first found.\r\n * @param cursor\r\n * @returns\r\n */\r\n public GetRegosFromCursor(params: {\r\n cursor: Cartes.ICartes2,\r\n // Pixel width/height. Default is 5x5 pixels.\r\n width?: number,\r\n height?: number,\r\n // Default is 5.\r\n pickLimit?: number\r\n }): {\r\n regos: IVisualRego[]\r\n } {\r\n const { cursor } = params;\r\n const found: IVisualRego[] = [];\r\n\r\n const width = Math.ceil(EnsureNumber(params.width, 5));\r\n const height = Math.ceil(EnsureNumber(params.height, 5));\r\n const x = Math.ceil(cursor.x - width / 2);\r\n const y = Math.ceil(cursor.y - height / 2);\r\n const pickLimit = Math.ceil(EnsureNumber(params.pickLimit, 5));\r\n\r\n const picked = this.viewer.scene.drillPick(new Cesium.Cartesian2(x, y), pickLimit, width, height);\r\n for (let i = 0; i < picked.length; i++) {\r\n const object = picked[i];\r\n const entity = <Visual>(object && object.id && object.id instanceof Cesium.Entity ? object.id : object);\r\n const visual = <IVisualExt>entity;\r\n if (visual?._register?.Id == this.id) {\r\n found.push(<IVisualRego>visual._rego);\r\n }\r\n }\r\n return {\r\n regos: found\r\n };\r\n }\r\n\r\n /**\r\n * Returns all registered entity ids.\r\n */\r\n public GetEntityIds(): string[] {\r\n const ids: string[] = [];\r\n for (const entityId in this.rego) {\r\n const regos = this.rego[entityId];\r\n if (regos && regos.length) {\r\n ids.push(entityId);\r\n }\r\n }\r\n return ids;\r\n }\r\n\r\n /**\r\n * Marks regos corresponding to given entity ids as stale.\r\n * This will cause them to be updated on the next update cycle.\r\n * Optionally include menu item ids to restrict the filter.\r\n * @param params\r\n */\r\n public MarkStale(params: {\r\n entityIds: string[],\r\n menuItemIds?: string[]\r\n }) {\r\n const { entityIds, menuItemIds } = params;\r\n for (const entityId of entityIds) {\r\n const regos = this.rego[entityId];\r\n if (regos && regos.length) {\r\n for (const rego of regos) {\r\n if (!menuItemIds || menuItemIds.includes(rego.menuItemId)) {\r\n rego.stale = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private updateAllEntities() {\r\n for (const entityId in this.rego) {\r\n const regos = this.rego[entityId];\r\n if (regos && regos.length) {\r\n updateEntity(this.viewer, entityId, this);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets opacity for given set of entities.\r\n * 100% opacity is treated as \"use original\".\r\n * @param params\r\n */\r\n public SetOpacity(params: {\r\n opacity: number,\r\n entityIds: string[],\r\n menuItemId?: string\r\n }) {\r\n const { entityIds, menuItemId: menuItemIds } = params;\r\n for (const entityId of entityIds) {\r\n const regos = this.rego[entityId];\r\n if (regos && regos.length) {\r\n for (const rego of regos) {\r\n if (\r\n rego.visual &&\r\n (!menuItemIds || menuItemIds.includes(rego.menuItemId))\r\n ) {\r\n if (params.opacity == 1) {\r\n EntityUtils.RevertOpacity({\r\n entity: rego.visual,\r\n viewer: this.viewer\r\n });\r\n }\r\n else {\r\n EntityUtils.SetOpacity({\r\n entity: rego.visual,\r\n opacity: params.opacity,\r\n viewer: this.viewer\r\n });\r\n }\r\n this.opacity[rego.entityId] = params.opacity;\r\n this.onUpdate?.Trigger({\r\n rego: rego,\r\n type: EVisualUpdateType.Update,\r\n entityId: rego.entityId,\r\n opacity: params.opacity\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Returns opacity for given entity/s.\r\n * If multiple entities are supplied, then the average is returned.\r\n * Unknown opacity is treated as 100% opacity.\r\n * @param params\r\n * @returns\r\n */\r\n public GetOpacity(params: {\r\n entityIds: string[],\r\n menuItemIds?: string\r\n }) {\r\n let totalOpacity = null;\r\n let totalTicks = 0;\r\n const { entityIds, menuItemIds } = params;\r\n for (const entityId of entityIds) {\r\n const regos = this.rego[entityId];\r\n if (regos && regos.length) {\r\n for (const rego of regos) {\r\n if (\r\n rego.visual &&\r\n (!menuItemIds || menuItemIds.includes(rego.menuItemId))\r\n ) {\r\n const opacity = this.opacity[rego.entityId];\r\n if (opacity != null) {\r\n totalOpacity += opacity;\r\n totalTicks += 1;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return totalOpacity ? totalOpacity / totalTicks : 1;\r\n }\r\n\r\n public ClearOpacity() {\r\n for (const entityId in this.opacity) {\r\n const regos = this.rego[entityId];\r\n if (regos && regos.length) {\r\n for (const rego of regos) {\r\n if (rego?.visual) {\r\n EntityUtils.RevertOpacity({\r\n entity: rego.visual,\r\n viewer: this.viewer\r\n });\r\n }\r\n }\r\n }\r\n }\r\n this.opacity = {};\r\n }\r\n\r\n /**\r\n * Returns a dictionary containing entityId -> opacity values.\r\n * Opacity 1 = 100%.\r\n * @returns\r\n */\r\n public GetOpacityMap(): IDictionary<number> {\r\n return this.opacity ? JSON.parse(JSON.stringify(this.opacity)) : {};\r\n }\r\n }\r\n}","import { BatchedDataGetter, BruceApi, Entity, IDictionary, MenuItem } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\nimport { VisualsRegister } from \"../../visuals-register\";\nimport { RenderManager } from \"../render-manager\";\nimport { PointClustering } from \"../common/point-clustering\";\n\nconst BATCH_SIZE = 500;\n\n/**\n * Render manager for rendering an array of entity ids.\n * This will render them in batches to avoid overloading the viewer.\n */\nexport namespace EntitiesIdsRenderManager {\n export class Manager implements RenderManager.IManager {\n private viewer: Cesium.Viewer;\n private apiGetter: BruceApi.IGetter;\n private monitor: CesiumViewMonitor;\n private item: MenuItem.Item.IEntityIds;\n private getter: BatchedDataGetter.Getter<string> = <any>null;\n private getterSub: () => void = <any>null;\n private disposed: boolean = false;\n public get Disposed(): boolean {\n return this.disposed;\n }\n private renderedEntities: IDictionary<boolean> = {};\n private visualsManager: VisualsRegister.Register;\n private clustering: PointClustering;\n\n constructor(params: {\n viewer: Cesium.Viewer,\n register: VisualsRegister.Register,\n apiGetter: BruceApi.IGetter,\n monitor: CesiumViewMonitor,\n item: MenuItem.Item.IEntityIds\n }) {\n const { viewer, apiGetter, monitor, item, register: visualsManager } = params;\n this.viewer = viewer;\n this.apiGetter = apiGetter;\n this.monitor = monitor;\n this.item = item;\n this.visualsManager = visualsManager;\n if (this.item.enableClustering) {\n this.clustering = new PointClustering(visualsManager, this.item.id);\n }\n }\n\n public Init() {\n if (this.disposed) {\n throw(new Error(\"This item is disposed.\"));\n }\n this.getter = new BatchedDataGetter.Getter<string>(\n this.item.BruceEntity.EntityIds,\n this.monitor,\n BATCH_SIZE\n );\n this.getterSub = this.getter.OnUpdate.Subscribe((ids) => {\n this.onGetterUpdate(ids);\n });\n this.getter.Start();\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.getterSub?.();\n this.getterSub = <any>null;\n this.disposed = true;\n this.visualsManager.RemoveRegos({\n menuItemId: this.item.id\n });\n this.clustering?.Dispose();\n }\n\n public async ReRender(params: {\n entityIds?: string[],\n entities?: Entity.IEntity[],\n force: boolean\n }) {\n let { entityIds, force, entities } = params;\n if (entities && !entityIds) {\n entityIds = entities.map(x => x.Bruce?.ID);\n }\n if (entityIds == null) {\n entityIds = Object.keys(this.renderedEntities);\n }\n else {\n // ensure entity ids are part of menu item.\n entityIds = entityIds.filter(x => {\n return this.item.BruceEntity?.EntityIds.includes(x);\n })\n }\n this.visualsManager.MarkStale({\n entityIds: entityIds,\n menuItemIds: [this.item.id]\n });\n if (entities?.length) {\n this.renderEntities([].concat(entities).filter(x => entityIds.includes(x.Bruce?.ID)), force);\n }\n else {\n this.onGetterUpdate(entityIds, force);\n }\n }\n\n private async onGetterUpdate(entityIds: string[], force: boolean = false): Promise<void> {\n if (this.disposed || this.viewer.isDestroyed()) {\n return;\n }\n try {\n const api = this.apiGetter.getApi();\n const {entities} = await Entity.GetListByIds({\n api,\n entityIds\n });\n await this.renderEntities(entities, force);\n }\n catch (e) {\n console.error(e);\n }\n }\n\n private async renderEntities(entities: Entity.IEntity[], force: boolean = false) {\n if (this.disposed || this.viewer.isDestroyed()) {\n return;\n }\n try {\n const cEntities = await EntityRenderEngine.Render({\n viewer: this.viewer,\n apiGetter: this.apiGetter,\n entities: entities,\n menuItemId: this.item.id,\n visualRegister: this.visualsManager,\n zoomControl: this.item.CameraZoomSettings,\n force\n });\n for (let i = 0; i < entities.length; i++) {\n const entity = entities[i];\n const id = <string>entity.Bruce.ID;\n const cEntity = cEntities[id];\n this.renderedEntities[id] = !!cEntity;\n if (cEntity) {\n const visual = this.visualsManager.GetRego({\n entityId: id,\n menuItemId: this.item.id\n })?.visual;\n if (!visual || visual != cEntity) {\n const clustered = this.clustering ? this.clustering.AddEntity(id, cEntity) : false;\n this.visualsManager.AddRego({\n rego: {\n entityId: id,\n menuItemId: this.item.id,\n visual: cEntity,\n priority: 0,\n entityTypeId: entity.Bruce[\"EntityType.ID\"],\n accountId: this.apiGetter.accountId,\n suppressShow: clustered\n }\n });\n }\n }\n else {\n this.visualsManager.RemoveRegos({\n entityId: id,\n menuItemId: this.item.id\n });\n this.clustering?.RemoveEntity(id);\n }\n }\n this.viewer.scene.requestRender();\n }\n catch (e) {\n console.error(e);\n }\n }\n }\n}","import { BatchedDataGetter, BruceApi, Entity, IDictionary, MenuItem, ZoomControl } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\nimport { VisualsRegister } from \"../../visuals-register\";\nimport { RenderManager } from \"../render-manager\";\n\n/**\n * Manager for rendering a single Bruce entity.\n */\nexport namespace EntityRenderManager {\n export class Manager implements RenderManager.IManager {\n private viewer: Cesium.Viewer;\n private apiGetter: BruceApi.IGetter;\n private item: MenuItem.Item.IEntity;\n private getter: BatchedDataGetter.Getter<string> = <any>null;\n private monitor: CesiumViewMonitor;\n private getterSub: () => void = <any>null;\n private disposed: boolean = false;\n public get Disposed(): boolean {\n return this.disposed;\n }\n private visualsManager: VisualsRegister.Register;\n\n\n constructor(params: {\n viewer: Cesium.Viewer,\n register: VisualsRegister.Register,\n apiGetter: BruceApi.IGetter,\n monitor: CesiumViewMonitor,\n item: MenuItem.Item.IEntity\n }) {\n const { viewer, apiGetter, monitor, item, register: visualsManager } = params;\n this.viewer = viewer;\n this.apiGetter = apiGetter;\n this.monitor = monitor;\n this.item = item;\n this.visualsManager = visualsManager;\n }\n\n public Init() {\n if (this.disposed) {\n throw(new Error(\"This item is disposed.\"));\n }\n this.getter = new BatchedDataGetter.Getter<string>(\n [this.item.BruceEntity.EntityId],\n this.monitor,\n 1\n );\n this.getterSub = this.getter.OnUpdate.Subscribe((ids) => {\n this.onGetterUpdate(ids[0]);\n });\n this.getter.Start();\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n this.getterSub?.();\n this.getterSub = <any>null;\n this.visualsManager.RemoveRegos({\n menuItemId: this.item.id\n });\n }\n\n public async ReRender(params: {\n entityIds?: string[],\n entities?: Entity.IEntity[],\n force?: boolean\n }) {\n let {entityIds, force, entities} = params;\n if (entities && !entityIds) {\n entityIds = entities.map(x => x.Bruce?.ID);\n }\n if (entityIds && !entityIds.includes(this.item.BruceEntity.EntityId)) {\n return;\n }\n this.visualsManager.MarkStale({\n entityIds: entityIds,\n menuItemIds: [this.item.id]\n });\n if (entities?.length) {\n await this.renderEntity(entities.find(x => x.Bruce?.ID == this.item.BruceEntity.EntityId), force);\n }\n else {\n await this.onGetterUpdate(this.item.BruceEntity.EntityId, force);\n }\n }\n\n private async onGetterUpdate(id: string, force: boolean = false): Promise<void> {\n try {\n if (this.disposed || this.viewer.isDestroyed()) {\n return;\n }\n\n const api = this.apiGetter.getApi();\n const {entity} = await Entity.Get({\n api,\n entityId: id\n });\n this.renderEntity(entity, force);\n }\n catch (e) {\n console.error(e);\n }\n }\n\n private async renderEntity(entity: Entity.IEntity, force: boolean = false) {\n try {\n if (this.disposed || this.viewer.isDestroyed()) {\n return;\n }\n const id = entity.Bruce.ID;\n const cEntities = await EntityRenderEngine.Render({\n viewer: this.viewer,\n apiGetter: this.apiGetter,\n entities: [entity],\n menuItemId: this.item.id,\n visualRegister: this.visualsManager,\n zoomControl: this.item.CameraZoomSettings,\n force\n });\n const cEntity = cEntities[id];\n if (cEntity) {\n const visual = this.visualsManager.GetRego({\n entityId: id,\n menuItemId: this.item.id\n })?.visual;\n if (!visual || visual != cEntity) {\n this.visualsManager.AddRego({\n rego: {\n entityId: <string>entity.Bruce.ID,\n menuItemId: this.item.id,\n visual: cEntity,\n priority: 0,\n entityTypeId: entity.Bruce[\"EntityType.ID\"],\n accountId: this.apiGetter.accountId\n }\n });\n }\n }\n else {\n this.visualsManager.RemoveRegos({\n entityId: id,\n menuItemId: this.item.id\n });\n }\n this.viewer.scene.requestRender();\n }\n catch (e) {\n console.error(e);\n }\n }\n }\n}","import { BruceApi, Calculator, Cartes, Carto, Color, Entity, EntityCoords, EntityType, IDictionary, ObjectUtils, Style, Tileset, Transform } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { VisualsRegister } from \"./visuals-register\";\nimport { EnsureNumber } from \"../internal/js-utils\";\n\nfunction colorToCColor(color: Color.IColor): Cesium.Color {\n return new Cesium.Color(\n color.red ? color.red/255 : 0,\n color.green ? color.green/255 : 0,\n color.blue ? color.blue/255 : 0,\n color.alpha\n );\n}\n\n/**\n * Returns if a given tileset is alive and in the scene.\n * @param viewer\n * @param cTileset\n * @returns\n */\nfunction isAlive(viewer: Cesium.Viewer, cTileset: Cesium.Cesium3DTileset) {\n if (!viewer?.scene) {\n return false;\n }\n if (viewer.isDestroyed()) {\n return false;\n }\n if (cTileset.isDestroyed()) {\n return false;\n }\n return viewer.scene.primitives.contains(cTileset);\n}\n\n// ND-1641. BOOKMARKS - (DEMO) View does not match bookmark.\n// We have some evil hard-coded style mappings that need to be fixed.\n// These exist within legacy project views.\nfunction correctStyle(style: Style.IStyle | any) {\n if (style && !style.Settings && !style.ID) {\n return {\n ID: 0,\n Name: \"Unknown\",\n Settings: {\n ...style as Style.IEntitySettings\n },\n Type: Style.EType.Entity\n }\n }\n return style;\n}\n\nconst VIEWER_WATCH_KEY = \"bruce-viewer-watch\";\nconst WATCH_KEY = \"bruce-tileset-watch\";\ninterface IWatchedTileset extends Cesium.Cesium3DTileset {\n [WATCH_KEY]?: string;\n}\n\n/**\n * Creates and returns a tileset instance from a given url.\n * This is made to handle the difference between old and new cesium versions.\n * New versions use fromUrl whereas old versions pass the url as a property.\n * @param url\n * @param props\n * @returns\n */\nasync function createTileset(url: string, props?: any): Promise<Cesium.Cesium3DTileset> {\n const defaultProps = {\n // \"Optimization option. Reduce the screen space error for tiles that are further away from the camera.\".\n dynamicScreenSpaceError: true,\n // \"The maximum amount of memory in MB that can be used by the tileset.\".\n maximumMemoryUsage: 512\n };\n\n const C3DT = Cesium.Cesium3DTileset as any;\n if (C3DT.fromUrl) {\n // New cesium is running.\n return C3DT.fromUrl(url, {\n ...defaultProps,\n ...props\n } as any);\n }\n // Old cesium is running.\n return new C3DT({\n url: url,\n ...defaultProps,\n ...props\n });\n}\n\nexport namespace TilesetRenderEngine {\n export interface IPositionParams {\n ucs?: {\n location?: Carto.ICarto;\n transform?: Transform.ITransform;\n },\n location?: Carto.ICarto;\n transform?: Transform.ITransform;\n isLegacy?: boolean;\n legacyProps?: {\n usingBoundingBox?: boolean;\n transform?: boolean;\n rotate?: boolean;\n }\n }\n\n export interface ISettingsParams {\n maxScreenSpaceError?: number;\n attenuation?: boolean;\n maximumAttenuation?: number;\n colorMask?: string;\n }\n\n export interface ITilesetExt extends Cesium.Cesium3DTileset {\n _bruceCoords?: IPositionParams;\n _bruceSettings?: ISettingsParams;\n }\n\n export interface IParams {\n accountId: string;\n apiGetter: BruceApi.IGetter;\n tileset: Tileset.ITileset;\n viewer: Cesium.Viewer;\n coords?: EntityCoords.IEntityCoords;\n // Default false. Requires cdn base url within api to be set.\n viaCdn?: boolean;\n }\n\n export function ApplyPosition(params: {\n cTileset: Cesium.Cesium3DTileset\n position: IPositionParams\n }): void {\n const cTileset = params.cTileset;\n const root = cTileset.root;\n const position = params.position;\n const location = position.ucs?.location ? position.ucs.location : position.location;\n let transform = position.transform;\n transform = {\n heading: 0,\n pitch: 0,\n roll: 0,\n scale: 1,\n x: 0,\n y: 0,\n z: 0,\n ...transform\n }\n transform.scale = EnsureNumber(transform.scale);\n if (transform.scale <= 0) {\n transform.scale = 0.000001;\n }\n\n /**\n * Very cursed.\n */\n if (position.isLegacy) {\n const legacy = position.legacyProps;\n if (legacy.usingBoundingBox == null) {\n legacy.usingBoundingBox = true;\n }\n if (legacy.transform) {\n const offsetPoint = (pos: Cesium.Cartographic, distance: number, bearing: number): Cesium.Cartographic => {\n // radius of earth\n let radius: number = 6371e3;\n let δ = distance / radius;\n let θ = Cesium.Math.toRadians(bearing);\n let φ1 = Cesium.Math.toRadians(pos.latitude);\n let λ1 = Cesium.Math.toRadians(pos.longitude);\n let sinφ2 = Math.sin(φ1) * Math.cos(δ) + Math.cos(φ1) * Math.sin(δ) * Math.cos(θ);\n let φ2 = Math.asin(sinφ2);\n let y = Math.sin(θ) * Math.sin(δ) * Math.cos(φ1);\n let x = Math.cos(δ) - Math.sin(φ1) * sinφ2;\n let λ2 = λ1 + Math.atan2(y, x);\n let finalPos: Cesium.Cartographic = new Cesium.Cartographic(λ2, φ2, pos.height);\n finalPos.latitude = Cesium.Math.toDegrees(finalPos.latitude);\n finalPos.longitude = Cesium.Math.toDegrees(finalPos.longitude);\n return finalPos;\n }\n\n const getOffset = (pos: Cesium.Cartesian3, n: number, e: number, alt: number): Cesium.Cartesian3 => {\n if (n == 0 && e == 0 && alt == 0) {\n return new Cesium.Cartesian3(0, 0, 0);\n }\n let carto: Cesium.Cartographic = Cesium.Cartographic.fromCartesian(pos);\n carto.latitude = Cesium.Math.toDegrees(carto.latitude);\n carto.longitude = Cesium.Math.toDegrees(carto.longitude);\n // North\n if (n != 0) {\n carto = offsetPoint(carto, Number(n), 0);\n }\n // East\n if (e != 0) {\n carto = offsetPoint(carto, Number(e), 90);\n }\n // Altitude\n carto.height += Number(alt);\n let finalOffset: Cesium.Cartesian3 = Cesium.Cartesian3.fromDegrees(carto.longitude, carto.latitude, carto.height);\n finalOffset.x -= pos.x;\n finalOffset.y -= pos.y;\n finalOffset.z -= pos.z;\n return finalOffset;\n }\n\n const getCurPos3d = () => {\n if (legacy.usingBoundingBox == false) {\n return Cesium.Matrix4.getTranslation(root.transform, new Cesium.Cartesian3());\n }\n else {\n return Cesium.Cartesian3.clone(root.boundingSphere.center);\n }\n };\n\n let pos3d: Cesium.Cartesian3;\n if (location?.latitude != null && location?.longitude != null) {\n pos3d = Cesium.Cartesian3.fromDegrees(\n EnsureNumber(location.longitude),\n EnsureNumber(location.latitude),\n EnsureNumber(location.altitude)\n );\n }\n if (!pos3d) {\n pos3d = getCurPos3d();\n }\n const offset = getOffset(pos3d, transform.x, transform.y, transform.z);\n if (Cartes.ValidateCartes3(offset)) {\n pos3d.x += offset.x;\n pos3d.y += offset.y;\n pos3d.z += offset.z;\n }\n\n if (legacy.rotate) {\n const hpr = Cesium.HeadingPitchRoll.fromDegrees(\n EnsureNumber(transform.heading),\n EnsureNumber(transform.pitch),\n EnsureNumber(transform.roll),\n new Cesium.HeadingPitchRoll());\n root.transform = Cesium.Transforms.headingPitchRollToFixedFrame(pos3d, hpr);\n (<any>root).updateTransform();\n }\n\n const curPos3d = getCurPos3d();\n const newTransform = Cesium.Matrix4.pack(root.transform.clone(new Cesium.Matrix4()), []);\n newTransform[12] += pos3d.x - curPos3d.x;\n newTransform[13] += pos3d.y - curPos3d.y;\n newTransform[14] += pos3d.z - curPos3d.z;\n root.transform = Cesium.Matrix4.unpack(newTransform);\n (<any>root).updateTransform();\n }\n }\n else {\n if (!location?.latitude) {\n return;\n }\n const translationMatrix = Cesium.Matrix4.fromTranslation(new Cesium.Cartesian3(\n EnsureNumber(transform.x),\n EnsureNumber(transform.y),\n EnsureNumber(transform.z)\n ), new Cesium.Matrix4());\n const pos3d = Cesium.Cartesian3.fromDegrees(\n EnsureNumber(location.longitude),\n EnsureNumber(location.latitude),\n EnsureNumber(location.altitude)\n );\n const m1 = Cesium.Transforms.eastNorthUpToFixedFrame(pos3d);\n const hpr = Cesium.HeadingPitchRoll.fromDegrees(\n EnsureNumber(transform.heading),\n EnsureNumber(transform.pitch),\n EnsureNumber(transform.roll),\n new Cesium.HeadingPitchRoll()\n );\n const hprRotation = Cesium.Matrix3.fromHeadingPitchRoll(hpr);\n const scaleMatrix = Cesium.Matrix4.fromUniformScale(EnsureNumber(transform.scale), new Cesium.Matrix4());\n\n let combinedMatrix = Cesium.Matrix4.multiply(m1, translationMatrix, new Cesium.Matrix4());\n combinedMatrix = Cesium.Matrix4.multiply(combinedMatrix, Cesium.Matrix4.fromRotation(hprRotation), new Cesium.Matrix4());\n combinedMatrix = Cesium.Matrix4.multiply(combinedMatrix, scaleMatrix, new Cesium.Matrix4());\n\n root.transform = combinedMatrix;\n\n // Force matrix to update\n (<any>root).updateTransform();\n }\n\n // Store data in the tileset as we can't interpret it using the cesium primitive later.\n const cTilesetExt = cTileset as ITilesetExt;\n cTilesetExt._bruceCoords = {\n ...position\n };\n }\n\n export function ApplySettings(params: {\n cTileset: Cesium.Cesium3DTileset,\n settings: ISettingsParams\n }): void {\n const { cTileset, settings } = params;\n cTileset.maximumScreenSpaceError = EnsureNumber(settings.maxScreenSpaceError, 5);\n cTileset.pointCloudShading.attenuation = Boolean(settings.attenuation);\n cTileset.pointCloudShading.maximumAttenuation = EnsureNumber(settings.maximumAttenuation, 4);\n if (settings.colorMask) {\n cTileset.style = new Cesium.Cesium3DTileStyle({\n color: settings.colorMask\n });\n }\n\n const cTilesetExt = cTileset as ITilesetExt;\n cTilesetExt._bruceSettings = {\n ...settings\n }\n }\n\n export async function Render(params: IParams): Promise<Cesium.Cesium3DTileset> {\n const api = params.apiGetter.getApi(params.apiGetter.accountId);\n // Ensure regional url is loaded.\n await api.Loading;\n\n let loadUrl = params.tileset.loadUrl;\n // CDN url must match the api getter account id.\n if (!params.accountId || params.accountId == params.apiGetter.accountId) {\n // CDN enabled and tileset url template is available.\n if (params.viaCdn && api.TilesetCdnUrl) {\n loadUrl = api.TilesetCdnUrl.replace(\"<TILESETID>\", params.tileset.id).replace(\"<FILEPATH>\", \"files/tileset.json\");\n // First url param reserved for accountId. This is set within the API instance.\n loadUrl += \"&generation=\" + params.tileset.generateVersion;\n }\n }\n\n if (params.tileset.type == Tileset.EType.Cad) {\n const cTileset = await createTileset(loadUrl ? loadUrl : Tileset.GetPublicFileUrl({\n api,\n tilesetId: params.tileset.id,\n file: \"tileset.json\"\n }) + \"?generation=\" + params.tileset.generateVersion, null);\n params.viewer.scene.primitives.add(cTileset);\n cTileset.readyPromise.then(() => {\n try {\n if (!isAlive(params.viewer, cTileset)) {\n return;\n }\n GetMemoryWatcher(params.viewer)?.Watch(cTileset);\n const settings = params.tileset.settings as Tileset.Settings.ICad;\n ApplySettings({\n cTileset,\n settings: {\n maxScreenSpaceError: settings.maximumScreenSpaceError\n }\n });\n ApplyPosition({\n cTileset,\n position: {\n ucs: params.coords?.ucs,\n location: params.coords?.location == null ? settings.location : params.coords.location,\n transform: params.coords?.transform == null ? settings.transform : params.coords.transform\n }\n });\n }\n catch (e) {\n console.error(e);\n }\n });\n return cTileset;\n }\n else if (params.tileset.type === Tileset.EType.EntitiesSet) {\n const cTileset = await createTileset(loadUrl ? loadUrl : Tileset.GetPublicFileUrl({\n api,\n tilesetId: params.tileset.id,\n file: \"tileset.json\"\n }) + \"?generation=\" + params.tileset.generateVersion, null);\n params.viewer.scene.primitives.add(cTileset);\n return cTileset;\n }\n else if (params.tileset.type == Tileset.EType.PointCloud) {\n const cTileset = await createTileset(loadUrl ? loadUrl : Tileset.GetPublicFileUrl({\n api,\n tilesetId: params.tileset.id,\n file: \"tileset.json\"\n }) + \"?generation=\" + params.tileset.generateVersion, null);\n params.viewer.scene.primitives.add(cTileset);\n cTileset.readyPromise.then(() => {\n try {\n if (!isAlive(params.viewer, cTileset)) {\n return;\n }\n GetMemoryWatcher(params.viewer)?.Watch(cTileset);\n const settings = params.tileset.settings as Tileset.Settings.IPointcloud;\n ApplySettings({\n cTileset,\n settings: {\n attenuation: settings.attenuation,\n maximumAttenuation: settings.attenuationMax,\n maxScreenSpaceError: settings.maximumScreenSpaceError\n }\n });\n ApplyPosition({\n cTileset,\n position: {\n location: settings.location,\n transform: settings.transform\n }\n });\n }\n catch (e) {\n console.error(e);\n }\n });\n return cTileset;\n }\n else {\n throw(\"Not implemented.\");\n }\n }\n\n export async function RenderLegacy(params: {\n apiGetter: BruceApi.IGetter,\n // With legacy we don't know if the default account id will match the apiGetter default.\n // ND-1731. 3D tileset not showing after project upgrade.\n accountId: string,\n viewer: Cesium.Viewer,\n ionId?: string | number,\n tileset?: any,\n loadUrl?: string,\n // Default false. Requires cdn base url within api to be set.\n viaCdn?: boolean\n }) {\n let { apiGetter, viewer, tileset, ionId, loadUrl, viaCdn, accountId } = params;\n\n let settings = tileset?.Settings;\n settings = {\n ...settings\n };\n let visual = settings.visual;\n visual = {\n ...visual\n };\n let etc = settings.etc;\n etc = {\n ...etc\n };\n\n if (ionId) {\n loadUrl = (await Cesium.IonResource.fromAssetId(EnsureNumber(ionId))) as any;\n }\n else if (etc?.ExternalTilesetURL) {\n loadUrl = etc.ExternalTilesetURL;\n }\n\n if (!loadUrl && tileset) {\n const api = apiGetter.getApi(accountId);\n const rootFile = tileset.RootFileName ? tileset.RootFileName : \"tileset.json\";\n loadUrl = api.GetBaseUrl() + `ui.tileset/${tileset.ID}/file/${rootFile}`;\n }\n\n if (viaCdn && tileset?.ID) {\n const api = apiGetter.getApi(accountId);\n if (api.LegacyTilesetCdnUrl) {\n const rootFile = tileset.RootFileName ? tileset.RootFileName : \"tileset.json\";\n loadUrl = api.LegacyTilesetCdnUrl\n .replace(\"<TILESETID>\", tileset.ID)\n .replace(\"<FILEPATH>\", rootFile)\n .replace(\"<ACCOUNT>\", accountId);\n }\n }\n\n const cTileset = await createTileset(loadUrl, null);\n viewer.scene.primitives.add(cTileset);\n\n cTileset.readyPromise.then(() => {\n try {\n if (!isAlive(viewer, cTileset)) {\n return;\n }\n GetMemoryWatcher(params.viewer)?.Watch(cTileset);\n if (tileset) {\n let settings = tileset.Settings;\n settings = {\n ...settings\n };\n let origin = settings.origin;\n origin = {\n ...origin\n };\n let etc = settings.etc;\n etc = {\n ...etc\n };\n let positionOffset = settings.positionOffset;\n positionOffset = {\n ...positionOffset\n };\n const rotation = settings.rotation;\n\n ApplySettings({\n cTileset,\n settings: {\n attenuation: visual.attenuation != false,\n colorMask: visual.colorMask,\n maximumAttenuation: visual.attenuationMax,\n maxScreenSpaceError: visual.maximumScreenSpaceError\n }\n });\n\n ApplyPosition({\n cTileset: cTileset,\n position: {\n transform: rotation ? {\n heading: rotation.z,\n pitch: rotation.x,\n roll: rotation.y,\n scale: 1,\n z: EnsureNumber(positionOffset?.altitude),\n x: EnsureNumber(positionOffset?.latitude),\n y: EnsureNumber(positionOffset?.longitude)\n } : null,\n location: origin?.latitude ? {\n latitude: origin.latitude,\n longitude: origin.longitude,\n altitude: origin.altitude\n } : null,\n isLegacy: true,\n legacyProps: {\n rotate: etc.dontRotate != true,\n transform: etc.dontTransform != true,\n usingBoundingBox: etc.usingBoundingBox != false\n }\n }\n });\n }\n }\n catch (e) {\n console.error(e);\n }\n });\n return cTileset;\n }\n\n export class Styler {\n private api: BruceApi.Api;\n\n private disposed: boolean = false;\n public get Disposed(): boolean {\n return this.disposed;\n }\n\n private register: VisualsRegister.Register;\n private menuItemId: string;\n\n private cTileset: Cesium.Cesium3DTileset;\n private styleMapping: {\n EntityTypeID: string,\n StyleID: number,\n style: Style.IStyle\n }[];\n private styleMappingLoaded: boolean = false;\n private styleMappingsLoaded: IDictionary<boolean> = {};\n private fallbackStyleId: number;\n private fallbackStyle: Style.IStyle = <any>null;\n\n private runningQueues: number = 0;\n private queueLoadInterval: any;\n private recordLoadQueue: string[] = [];\n private recordCheckQueue: string[] = [];\n private queueCheckInterval: any;\n\n\n constructor(\n api: BruceApi.Api,\n cTileset: Cesium.Cesium3DTileset,\n fallbackStyleId: number,\n styleMapping: any[],\n menuItemId: string,\n register: VisualsRegister.Register,\n ) {\n this.api = api;\n this.cTileset = cTileset;\n this.fallbackStyleId = fallbackStyleId;\n this.styleMapping = styleMapping;\n\n // ND-1641. BOOKMARKS - (DEMO) View does not match bookmark.\n // We have some evil hard-coded style mappings that need to be fixed.\n // These exist within legacy project views.\n if (this.styleMapping?.length) {\n for (let i = 0; i < this.styleMapping.length; i++) {\n const mapItem = this.styleMapping[i];\n this.styleMapping[i].style = correctStyle(mapItem?.style);\n }\n }\n\n this.register = register;\n this.menuItemId = menuItemId;\n this.loadStyles();\n }\n\n public QueueEntities(entities: VisualsRegister.IVisualRego[]): void {\n for (let i = 0; i < entities.length; i++) {\n const entity = entities[i];\n this.queueTilesetFeatureStyle(entity);\n }\n if (this.recordLoadQueue.length > 0) {\n this.processQueue();\n }\n }\n\n private async processQueue(): Promise<void> {\n const MAX_BATCHES = 2;\n const BATCH_DELAY = 200;\n\n if (this.runningQueues >= MAX_BATCHES) {\n return;\n }\n else if (this.disposed) {\n return;\n }\n this.runningQueues += 1;\n\n let batch: string[] = [];\n let rerun: boolean = false;\n try {\n batch = this.getEntityIdsForQueue();\n\n if (batch.length > 0) {\n const {entities} = await Entity.GetListByIds({\n api: this.api,\n entityIds: batch\n });\n for (let i = 0; i < batch.length; i++) {\n const entityId = batch[i];\n const record = entities.find(e => e.Bruce?.ID == entityId);\n const feature = this.getEntityRego(entityId);\n if (feature) {\n this.styleTilesetFeatureFullData(feature, record);\n }\n }\n rerun = batch.length > 0;\n }\n }\n finally {\n setTimeout(() => {\n this.runningQueues -= 1;\n if (rerun) {\n this.processQueue();\n }\n }, BATCH_DELAY);\n }\n }\n\n private getEntityIdsForQueue(): string[] {\n const BATCH_SIZE = 30;\n return this.recordLoadQueue.splice(0, BATCH_SIZE);\n }\n\n private getEntityRego(entityId: string): VisualsRegister.IVisualRego {\n return this.register.GetRego({\n entityId,\n menuItemId: this.menuItemId\n })\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n clearInterval(this.queueLoadInterval);\n clearInterval(this.queueCheckInterval);\n }\n\n private async loadStyles(): Promise<void> {\n let fallbackStyleId = this.fallbackStyleId;\n if (fallbackStyleId && fallbackStyleId > 0) {\n try {\n let {style: data} = await Style.Get({\n api: this.api,\n styleId: fallbackStyleId\n });\n this.fallbackStyle = data;\n }\n catch (e) {\n console.error(e);\n }\n }\n\n // Load styles in the style mapping\n let styleMapping = this.styleMapping;\n if (!styleMapping) {\n styleMapping = [];\n }\n this.styleMapping = styleMapping;\n\n // It is default style.\n // We have to get all possible entity type ids and append them to mapping.\n if (!fallbackStyleId) {\n try {\n const modelTree = this.cTileset?.extensions?.modelTree;\n if (modelTree) {\n const entityTypeIds = this.getEntityTypeIdsFromModelTree(modelTree);\n for (let i = 0; i < entityTypeIds.length; i++) {\n const entityTypeId = entityTypeIds[i];\n if (styleMapping.findIndex(x => x.EntityTypeID == entityTypeId) <= -1) {\n styleMapping.push({\n EntityTypeID: entityTypeId,\n StyleID: null,\n style: <any>null\n });\n }\n }\n }\n }\n catch (e) {\n console.error(e);\n }\n }\n\n for (let i = 0; i < styleMapping.length; i++) {\n if (this.disposed) {\n break;\n }\n\n let styleMap = styleMapping[i];\n if (!styleMap.style) {\n let styleId = styleMap.StyleID;\n\n // Get default style of the entity type.\n if (!styleId) {\n try {\n let {entityType} = await EntityType.Get({\n api: this.api,\n entityTypeId: styleMap.EntityTypeID\n });\n styleId = entityType?.[\"DisplaySetting.ID\"];\n }\n catch (e) {\n console.error(e);\n }\n }\n\n if (styleId) {\n try {\n let {style: data} = await Style.Get({\n api: this.api,\n styleId\n });\n if (data) {\n styleMap.style = data;\n styleMap.StyleID = styleId;\n }\n }\n catch (e) {\n console.error(e);\n }\n }\n }\n\n if (styleMap.EntityTypeID && styleMap.style) {\n this.styleMappingsLoaded[styleMap.EntityTypeID] = true;\n this.processTilesetFeatureCheckQueue();\n this.processQueue();\n }\n }\n this.styleMappingLoaded = true;\n\n if (!this.disposed) {\n await this.processTilesetFeatureCheckQueue();\n this.processQueue();\n }\n }\n\n private getEntityTypeIdsFromModelTree(modelTree: any): string[] {\n const entityTypeIds: string[] = [];\n this.digEntityTypeIdsFromModelTreeBranch(modelTree, entityTypeIds);\n return entityTypeIds;\n }\n\n private digEntityTypeIdsFromModelTreeBranch(branch: any, arr: string[]): void {\n if (branch) {\n // Does not yet include this entity type id.\n if (branch.typeId && !arr.includes(branch.typeId)) {\n arr.push(branch.typeId);\n }\n\n if (branch.children) {\n for (let i = 0; i < branch.children.length; i++) {\n let child = branch.children[i];\n this.digEntityTypeIdsFromModelTreeBranch(child, arr);\n }\n }\n }\n }\n\n private async processTilesetFeatureCheckQueue(): Promise<void> {\n const BATCH_CHECK_SIZE = 1000;\n\n return new Promise((res) => {\n clearInterval(this.queueCheckInterval);\n this.queueCheckInterval = setInterval(() => {\n if (this.disposed) {\n clearInterval(this.queueCheckInterval);\n res();\n return;\n }\n\n // Construct batch for loaded styles.\n let batch = [];\n\n if (this.styleMappingLoaded) {\n batch = this.recordCheckQueue.splice(0, BATCH_CHECK_SIZE);\n }\n else {\n for (let i = 0; i < this.recordCheckQueue.length; i++) {\n let entityId = this.recordCheckQueue[i];\n let entity = this.getEntityRego(entityId);\n if (entity) {\n let entityTypeId = entity.entityTypeId;\n if (entityTypeId) {\n if (this.styleMappingsLoaded[entityTypeId] == true) {\n batch.push(entityId);\n }\n }\n }\n\n if (batch.length >= BATCH_CHECK_SIZE) {\n break;\n }\n }\n\n for (let i = 0; i < batch.length; i++) {\n let hash = batch[i];\n let index = this.recordCheckQueue.findIndex(x => x == hash);\n if (index > -1) {\n this.recordCheckQueue.splice(index, 1);\n }\n }\n }\n\n if (batch.length) {\n for (let i = 0; i < batch.length; i++) {\n let entityId = batch[i];\n let entity = this.getEntityRego(entityId);\n if (entity) {\n this.queueTilesetFeatureStyle(entity);\n }\n }\n }\n else {\n clearInterval(this.queueCheckInterval);\n res();\n }\n }, 50);\n });\n }\n\n private queueTilesetFeatureStyle(entity: VisualsRegister.IVisualRego): void {\n if (this.styleMappingLoaded || this.styleMappingsLoaded[<string>entity.entityTypeId] == true) {\n const needsData = this.getTilesetFeatureNeedsFullData(entity.entityId, <string>entity.entityTypeId);\n if (needsData) {\n if (!this.recordLoadQueue.find(x => x == entity.entityId)) {\n this.recordLoadQueue.push(entity.entityId);\n }\n }\n else {\n this.styleTilesetFeature(entity);\n }\n }\n else {\n this.recordCheckQueue.push(entity.entityId);\n }\n }\n\n private styleTilesetFeature(entity: VisualsRegister.IVisualRego): void {\n this.styleTilesetFeatureFullData(entity, <any>null);\n }\n\n private styleTilesetFeatureFullData(entity: VisualsRegister.IVisualRego, data: Entity.IEntity): void {\n const style = <Style.IEntitySettings>this.getTilesetFeatureStyle(entity.entityId, <string>entity.entityTypeId);\n if (!style) {\n return;\n }\n const bColor = style.modelStyle?.fillColor ? Calculator.GetColor(style.modelStyle.fillColor, data, []) : null;\n if (bColor != null) {\n const cColor = colorToCColor(bColor);\n const visual = entity.visual;\n if (visual && visual instanceof Cesium.Cesium3DTileFeature) {\n visual.color = cColor;\n }\n }\n }\n\n private getTilesetFeatureStyle(entityId: string, entityTypeId: string): Style.IEntitySettings {\n // Locate what style is applicable to the feature.\n let style: Style.IEntitySettings = null;\n if (entityTypeId) {\n style = (this.styleMapping.find(x => x.EntityTypeID == entityTypeId)?.style?.Settings) as Style.IEntitySettings;\n }\n if (!style) {\n style = (this.fallbackStyle?.Settings) as Style.IEntitySettings;\n }\n if (!style || !style?.modelStyle?.customize) {\n return null;\n }\n return style;\n }\n\n private getTilesetFeatureNeedsFullData(entityId: string, entityTypeId: string): boolean {\n const style = this.getTilesetFeatureStyle(entityId, entityTypeId);\n if (!style) {\n return false;\n }\n const fill = style?.modelStyle?.fillColor;\n if (!fill || fill.length <= 0) {\n return false;\n }\n return fill[0].type != 0;\n }\n }\n\n /**\n * The maximum memory in MB that can be used by all tilesets.\n * This is distributed evenly between all loaded tilesets.\n */\n export let MAX_TILESET_MEMORY = 1024;\n\n /**\n * Watches tilesets in the viewer.\n * This will regulate their max memory param.\n * As more get watched their memory will be reduced.\n */\n export class MemoryWatcher {\n private viewer: Cesium.Viewer;\n private watched: IWatchedTileset[] = [];\n\n constructor(viewer: Cesium.Viewer) {\n this.viewer = viewer;\n }\n\n private distributeMemory() {\n this.clean();\n\n // Total 1gb as default.\n // We'll need to allow user to change this somehow.\n const maxMemory = MAX_TILESET_MEMORY;\n // Minimum memory in MB per tileset.\n const minMemory = 80;\n\n const totalPerTileset = Math.max(this.watched.length ? maxMemory / this.watched.length : maxMemory, minMemory);\n this.watched.forEach(x => {\n x.maximumMemoryUsage = totalPerTileset;\n });\n }\n\n public destroy() {\n this.watched = [];\n }\n\n /**\n * Remove all dead tilesets.\n */\n private clean() {\n // Remove all dead tilesets.\n this.watched = this.watched.filter(x => isAlive(this.viewer, x));\n // Check if viewer is destroyed.\n if (!this.viewer || this.viewer.isDestroyed()) {\n this.destroy();\n }\n }\n\n public Watch(tileset: IWatchedTileset) {\n if (!tileset) {\n return;\n }\n if (!tileset[WATCH_KEY]) {\n tileset[WATCH_KEY] = ObjectUtils.UId();\n }\n const index = this.watched.findIndex(x => x[WATCH_KEY] === tileset[WATCH_KEY]);\n if (index >= 0) {\n return;\n }\n this.watched.push(tileset);\n this.distributeMemory();\n }\n\n public Unwatch(tileset: IWatchedTileset) {\n if (!tileset) {\n return;\n }\n if (!tileset[WATCH_KEY]) {\n tileset[WATCH_KEY] = ObjectUtils.UId();\n }\n const index = this.watched.findIndex(x => x?.[WATCH_KEY] === tileset[WATCH_KEY]);\n if (index > -1) {\n this.watched.splice(index, 1);\n }\n this.distributeMemory();\n }\n }\n\n export function GetMemoryWatcher(viewer: Cesium.Viewer): MemoryWatcher {\n // If viewer is dead return nothing.\n if (!viewer || viewer.isDestroyed()) {\n return null;\n }\n if (!viewer[VIEWER_WATCH_KEY]) {\n viewer[VIEWER_WATCH_KEY] = new MemoryWatcher(viewer);\n }\n return viewer[VIEWER_WATCH_KEY]; \n }\n}","import { BruceApi, EntityCoords, MenuItem, Tileset } from \"bruce-models\";\nimport { VisualsRegister } from \"../../visuals-register\";\nimport { RenderManager } from \"../render-manager\";\nimport * as Cesium from \"cesium\";\nimport { TilesetRenderEngine } from \"../../tileset-render-engine\";\nimport { EnsureNumber } from \"../../../internal/js-utils\";\n\n/**\n * Manager for rendering CAD tilesets.\n * CAD tilesets are referred to as \"MODEL\" tilesets in some other areas of Bruce code.\n */\nexport namespace TilesetCadRenderManager {\n export class Manager implements RenderManager.IManager {\n private viewer: Cesium.Viewer;\n private apiGetter: BruceApi.IGetter;\n private item: MenuItem.Item.ICadTileset;\n private disposed: boolean = false;\n public get Disposed(): boolean {\n return this.disposed;\n }\n private visualsManager: VisualsRegister.Register;\n private cTileset: Cesium.Cesium3DTileset = <any>null;\n public get Tileset(): Cesium.Cesium3DTileset {\n return this.cTileset;\n }\n private styler: TilesetRenderEngine.Styler = <any>null;\n // Indicates the hierarchy depth limit has been hit.\n // This likely means poor data so we have to disable drilling otherwise lag would be too bad.\n // The result is no entity type IDs are known so most styles fail.\n private hasHitDepthLimit = false;\n\n constructor(params: {\n viewer: Cesium.Viewer,\n register: VisualsRegister.Register,\n apiGetter: BruceApi.IGetter,\n item: MenuItem.Item.ICadTileset\n }) {\n const { viewer, register: visualsManager, apiGetter, item } = params;\n this.viewer = viewer;\n this.apiGetter = apiGetter;\n this.item = item;\n this.visualsManager = visualsManager;\n }\n\n public Init() {\n const tilesetId = this.item.tileset?.TilesetID;\n if (!tilesetId) {\n return;\n }\n\n (async () => {\n const api = this.apiGetter.getApi();\n const {tileset} = await Tileset.Get({\n api,\n tilesetId\n });\n if (!tileset || this.disposed) {\n return;\n }\n\n const settings = <Tileset.Settings.ICad>tileset.settings;\n const rootId = settings.rootEntityId;\n const {coords} = await EntityCoords.GetEntityCoords({\n api,\n rootEntityId: rootId\n });\n if (this.disposed) {\n return;\n }\n\n const cTileset = this.cTileset = await TilesetRenderEngine.Render({\n apiGetter: this.apiGetter,\n tileset: tileset,\n viewer: this.viewer,\n coords: coords,\n accountId: this.item.tileset?.ClientAccountID ?? this.apiGetter.accountId,\n viaCdn: this.item.cdnEnabled\n });\n\n if (this.disposed) {\n this.doDispose();\n return;\n }\n\n cTileset.readyPromise.then(() => {\n try {\n if (this.disposed || cTileset.isDestroyed()) {\n return;\n }\n\n this.onCTilesetLoad();\n this.styler = new TilesetRenderEngine.Styler(\n api, this.cTileset,\n <number>this.item.styleId,\n <any[]>this.item.StyleMapping,\n this.item.id,\n this.visualsManager\n );\n }\n catch (e) {\n console.error(e);\n }\n });\n cTileset.tileLoad.addEventListener((tile) => {\n try {\n this.mapCTile(tile);\n }\n catch (e) {\n console.error(e);\n }\n });\n })();\n }\n\n private onCTilesetLoad(): void {\n if (this.item.StyleBlending) {\n let blending = this.item.StyleBlending;\n this.cTileset.colorBlendMode = EnsureNumber(blending?.blendMode, Cesium.Cesium3DTileColorBlendMode.MIX);\n this.cTileset.colorBlendAmount = EnsureNumber(blending?.blendPercent, 0.9);\n }\n if (this.item.FlyTo) {\n this.viewer.zoomTo(\n this.cTileset,\n new Cesium.HeadingPitchRange(0.0, -0.5, this.cTileset.boundingSphere.radius / 4.0)\n );\n }\n }\n\n private mapCTile(tile: Cesium.Cesium3DTile): void {\n const content = tile?.content;\n if (!content) {\n return;\n }\n for (let i = 0; i < content.featuresLength; i++) {\n const feature = content.getFeature(i);\n\n let rego = this.mapTilesetFeature(feature);\n if (rego?.entityId && this.styler) {\n this.styler.QueueEntities([rego]);\n }\n }\n }\n\n private mapTilesetFeature(feature: Cesium.Cesium3DTileFeature): VisualsRegister.IVisualRego {\n let rego: VisualsRegister.IVisualRego = {\n entityId: <any>null,\n entityTypeId: <any>null,\n menuItemId: this.item.id,\n priority: 0,\n visual: feature,\n accountId: this.item.tileset?.ClientAccountID ?? this.apiGetter.accountId,\n tilesetId: this.item.tileset?.TilesetID\n };\n\n const featureAny = feature as any;\n const propertyNames = featureAny.getPropertyNames ? featureAny.getPropertyNames() : featureAny.getPropertyIds?.();\n if (!propertyNames) {\n return null;\n }\n\n const setByGeomId = () => {\n const geomIdProp = propertyNames.find(x => String(x).toLowerCase() == \"geomid\");\n if (geomIdProp) {\n const geomId = +feature.getProperty(geomIdProp);\n if (geomId != null && (!!geomId || geomId == 0)) {\n const meta = this.getMetaByGeomId(geomId, feature.tileset);\n if (meta) {\n rego.entityId = meta.id;\n rego.entityTypeId = meta.typeId;\n }\n }\n }\n }\n const setByEntityId = () => {\n const bruceIdProp = propertyNames.find(x => String(x).toLowerCase() == \"bruceid\");\n if (bruceIdProp) {\n rego.entityId = feature.getProperty(bruceIdProp);\n }\n }\n const setByPath = () => {\n const brucePathProp = propertyNames.find(x => String(x).toLowerCase() == \"brucepath\");\n if (brucePathProp) {\n const pathStr = feature.getProperty(brucePathProp);\n if (pathStr) {\n let path = pathStr.split(\"|\");\n let entityTypeId = this.getEntityTypeByPath(path);\n rego.entityTypeId = entityTypeId;\n rego.entityId = path[path.length - 1];\n }\n }\n }\n\n setByGeomId();\n if (!rego.entityId) {\n setByEntityId();\n }\n if (!rego.entityId) {\n setByPath();\n }\n if (!rego.entityId) {\n return null;\n }\n // Optional menu item restriction.\n // Allows only showing certain entities from a tileset.\n const onlyIds = this.item.BruceEntity?.EntityIds;\n if (onlyIds?.length && !onlyIds.includes(rego.entityId)) {\n if (this.item.BruceEntity.Ghosts) {\n feature.color = Cesium.Color.WHITE.clone().withAlpha(0.5);\n }\n else {\n feature.show = false;\n }\n return null;\n }\n\n this.visualsManager.AddRego({\n rego\n });\n return rego;\n }\n\n private getMetaByGeomId(geomId: number, tileset: Cesium.Cesium3DTileset): { id: string, typeId: string } {\n let modelTree: any = tileset?.extensions?.modelTree;\n return this.digMetaByGeomId(geomId, modelTree, [], 0);\n }\n\n private digMetaByGeomId(\n geomId: number,\n branch: any,\n path: string[],\n depth: number\n ): { id: string, typeId: string } {\n if (this.hasHitDepthLimit || depth > 10) {\n if (!this.hasHitDepthLimit) {\n console.error(\"digMetaByGeomId: depth > 10. Disabling further attempts.\");\n this.hasHitDepthLimit = true;\n }\n return null;\n }\n path = [].concat(path);\n path.push(branch.id);\n if (branch.geomId == geomId) {\n return { id: path[path.length - 1], typeId: branch.typeId };\n }\n else if (branch.children) {\n for (let i = 0; i < branch.children.length; i++) {\n let meta = this.digMetaByGeomId(geomId, branch.children[i], path, depth + 1);\n if (meta) {\n return meta;\n }\n }\n }\n return null;\n }\n\n private getEntityTypeByPath(path: string[]): string {\n let modelTree: any = this.cTileset?.extensions?.modelTree;\n if (modelTree) {\n let data = this.digModelTreeByPath(modelTree, path);\n if (data) {\n return data.typeId;\n }\n }\n return <any>null;\n }\n\n private digModelTreeByPath(branch: any, path: string[]): any {\n // Dereference.\n path = JSON.parse(JSON.stringify(path));\n\n if (path.length <= 0) {\n return null;\n }\n let pathTop = path.splice(0, 1)[0];\n if (pathTop != branch.id) {\n return null;\n }\n else if (path.length == 0 && pathTop == branch.id) {\n return branch;\n }\n else if (branch.children) {\n for (let i = 0; i < branch.children.length; i++) {\n let foundPath = this.digModelTreeByPath(branch.children[i], path);\n if (foundPath) {\n return foundPath;\n }\n }\n }\n return null;\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n this.doDispose();\n }\n\n private doDispose() {\n if (this.cTileset) {\n const viewer = this.viewer;\n if (!viewer?.isDestroyed() && this.viewer.scene.primitives.contains(this.cTileset)) {\n this.cTileset.show = false;\n this.viewer.scene.primitives.remove(this.cTileset);\n TilesetRenderEngine.GetMemoryWatcher(viewer)?.Unwatch(this.cTileset);\n }\n this.cTileset = null;\n }\n this.styler?.Dispose();\n this.visualsManager.RemoveRegos({\n menuItemId: this.item.id\n });\n }\n\n public async ReRender(params: {\n entityIds?: string[],\n force?: boolean\n }) {\n const { entityIds, force } = params;\n if (!this.styler) {\n return;\n }\n let regos: VisualsRegister.IVisualRego[] = this.visualsManager.GetRegos({\n menuItemId: this.item.id\n });\n if (entityIds != null) {\n regos = regos.filter(r => entityIds.indexOf(r.entityId) >= 0);\n }\n this.styler.QueueEntities(regos);\n }\n }\n}","import { Entity, EntityFilterGetter } from \"bruce-models\";\nimport { BruceApi } from \"bruce-models/dist/types/api/bruce-api\";\nimport { IDictionary } from \"bruce-models/dist/types/common/dictionary\";\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\nimport * as Cesium from \"cesium\";\n\nfunction createFilterGetterCacheKey(params: SharedGetters.IFilterGetterParams): string {\n let cacheKey = \"\";\n cacheKey += params.api.GetBaseUrl();\n cacheKey += params.typeId;\n cacheKey += params.batchSize;\n cacheKey += String(params.cdn);\n // This could potentially crash, but if it crashes here then it would crash during API request anyways.\n cacheKey += JSON.stringify(params.attrFilter ? params.attrFilter : {});\n return cacheKey;\n}\n\nexport namespace SharedGetters {\n export interface IFilterGetterParams {\n api: BruceApi.Api;\n typeId: string;\n batchSize: number;\n attrFilter: IDictionary<string>;\n monitor: CesiumViewMonitor;\n // Debug options.\n viewer?: Cesium.Viewer;\n debugShowBounds?: boolean;\n cdn?: boolean;\n }\n\n export class Cache {\n private data: IDictionary<EntityFilterGetter.Getter> = {};\n\n public GetOrCreateFilterGetter(params: IFilterGetterParams): EntityFilterGetter.Getter {\n params.cdn = Boolean(params.cdn);\n const cacheKey = createFilterGetterCacheKey(params);\n let getter = this.data[cacheKey];\n if (!getter) {\n getter = new EntityFilterGetter.Getter(\n params.api,\n params.monitor,\n params.typeId,\n params.batchSize,\n params.attrFilter,\n params.cdn\n );\n this.data[cacheKey] = getter;\n if (params.viewer && params.debugShowBounds) {\n // Cell id -> entity.\n const cellCache = {};\n getter.OnScanUpdate.Subscribe((cells) => {\n if ((window as any).ON_SCAN_UPDATE_PAUSED == true) {\n return;\n }\n const curCellIds = [];\n let fetchingCellId = null;\n const fetchedCells = {};\n cells.forEach((cell) => {\n const bounds = cell.GetBounds();\n const id = bounds.east + \"_\" + bounds.north + \"_\" + bounds.south + \"_\" + bounds.west;\n curCellIds.push(id);\n fetchedCells[id] = cell.IsFetched();\n fetchingCellId = (cell as any).Fetching ? id : fetchingCellId;\n\n let material = null;\n if (fetchedCells[id]) {\n material = Cesium.Color.LIGHTGREEN.clone().withAlpha(0.3);\n }\n else if (fetchingCellId == id) {\n material = Cesium.Color.LIGHTBLUE.clone().withAlpha(0.3);\n }\n else {\n material = Cesium.Color.GOLD.clone().withAlpha(0.3);\n }\n\n if (cellCache[id]) {\n const rect = cellCache[id]?.rectangle;\n if (rect) {\n rect.material = material;\n }\n return;\n }\n const rect = new Cesium.Rectangle(\n Cesium.Math.toRadians(bounds.west),\n Cesium.Math.toRadians(bounds.south),\n Cesium.Math.toRadians(bounds.east),\n Cesium.Math.toRadians(bounds.north)\n );\n const entity = params.viewer.entities.add(new Cesium.Entity({\n id: id,\n rectangle: {\n coordinates: rect,\n fill: true,\n //material: Cesium.Color.fromRandom().withAlpha(0.3),\n material: material,\n zIndex: 0\n },\n // point: {\n // pixelSize: 15,\n // outlineColor: Cesium.Color.WHITE,\n // outlineWidth: 2,\n // color: Cesium.Color.fromRandom().withAlpha(0.5),\n // heightReference: Cesium.HeightReference.CLAMP_TO_GROUND\n // },\n position: Cesium.Cartesian3.fromRadians(\n (rect.east + rect.west) / 2,\n (rect.north + rect.south) / 2\n )\n }));\n cellCache[id] = entity;\n });\n Object.keys(cellCache).forEach((id) => {\n if (curCellIds.indexOf(id) == -1) {\n const entity = cellCache[id];\n if (entity && params.viewer.entities.contains(entity)) {\n params.viewer.entities.remove(entity);\n }\n delete cellCache[id];\n }\n });\n });\n }\n }\n return getter;\n }\n }\n}","import { BruceApi, Cartes, EntitySource, IDictionary, MenuItem, ObjectUtils } from \"bruce-models\";\nimport { VisualsRegister } from \"../../visuals-register\";\nimport { RenderManager } from \"../render-manager\";\nimport * as Cesium from \"cesium\";\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\n\ninterface ICesiumFeatureExtended extends Cesium.Cesium3DTileFeature {\n _orgColor: Cesium.Color;\n _counter: number;\n}\n\nconst MAX_BATCHES = 2;\nconst BATCH_SIZE = 30;\nconst BATCH_DELAY = 200;\nconst MAX_RANGE = 3000;\n\nexport namespace TilesetOsmRenderManager {\n export class Manager implements RenderManager.IManager {\n private viewer: Cesium.Viewer;\n private apiGetter: BruceApi.IGetter;\n private item: MenuItem.Item.IOsm;\n private monitor: CesiumViewMonitor;\n private disposed: boolean = false;\n public get Disposed(): boolean {\n return this.disposed;\n }\n private visualsManager: VisualsRegister.Register;\n private cTileset: Cesium.Cesium3DTileset = <any>null;\n public get Tileset(): Cesium.Cesium3DTileset {\n return this.cTileset;\n }\n\n private counter: number = 0;\n private get count(): number {\n return ++this.counter;\n }\n\n private _loadedCesiumEntities: IDictionary<VisualsRegister.IVisualRego> = {};\n private totalLoaded: number = 0;\n private featureQueue: ICesiumFeatureExtended[] = [];\n private sourceId: number = <any>null;\n private entityTypeId: string = <any>null;\n private queueCheckInterval: any = null;\n private processingQueue: number = 0;\n\n\n constructor(params: {\n viewer: Cesium.Viewer,\n register: VisualsRegister.Register,\n apiGetter: BruceApi.IGetter,\n monitor: CesiumViewMonitor,\n item: MenuItem.Item.IOsm\n }) {\n const { viewer, register: visualsManager, apiGetter, monitor, item } = params;\n this.viewer = viewer;\n this.apiGetter = apiGetter;\n this.item = item;\n this.visualsManager = visualsManager;\n this.monitor = monitor;\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n clearInterval(this.queueCheckInterval);\n if (this.cTileset) {\n const viewer = this.viewer;\n if (!viewer?.isDestroyed() && this.viewer.scene.primitives.contains(this.cTileset)) {\n this.cTileset.show = false;\n this.viewer.scene.primitives.remove(this.cTileset);\n }\n this.cTileset = null;\n }\n this.visualsManager.RemoveRegos({\n menuItemId: this.item.id\n });\n this.featureQueue = [];\n }\n\n public Init() {\n const menuItem = this.item;\n this.sourceId = <number><any>menuItem.BruceEntity?.SourceId;\n this.entityTypeId = <string>menuItem.BruceEntity?.[\"EntityType.ID\"];\n\n this.cTileset = Cesium.createOsmBuildings();\n this.cTileset.show = true;\n\n if (this.sourceId) {\n if (menuItem.ghostLoading == true) {\n this.cTileset.style = new Cesium.Cesium3DTileStyle({\n color: \"rgba(255, 255, 250, 0.98)\"\n });\n }\n\n this.viewer.scene.primitives.add(this.cTileset);\n this.cTileset.tileLoad.addEventListener((tile) => {\n try {\n this.mapCTile(tile);\n }\n catch (e) {\n console.error(e);\n }\n });\n\n this.queueCheckInterval = setInterval(() => {\n if (this.featureQueue.length > 0) {\n this.processQueue();\n }\n }, 5000);\n }\n else {\n this.viewer.scene.primitives.add(this.cTileset);\n }\n }\n\n private async mapCTile(tile: Cesium.Cesium3DTile): Promise<void> {\n if (this.sourceId) {\n let content = tile?.content;\n if (!content) {\n return;\n }\n for (let i = 0; i < content.featuresLength; i++) {\n let feature: ICesiumFeatureExtended = <ICesiumFeatureExtended>content.getFeature(i);\n if (feature._counter == null) {\n feature._counter = this.count;\n }\n if (feature._orgColor == null) {\n feature._orgColor = feature.color;\n }\n this.featureQueue.push(feature);\n }\n this.processQueue();\n }\n }\n\n private async processQueue(): Promise<void> {\n if (this.processingQueue >= MAX_BATCHES) {\n return;\n }\n else if (this.Disposed) {\n return;\n }\n this.processingQueue += 1;\n\n let batch: ICesiumFeatureExtended[] = [];\n let rerun: boolean = false;\n\n try {\n batch = this.getVisualsForBatch();\n\n if (batch.length > 0) {\n await this.mapTileBatch(batch);\n }\n\n if (this.totalLoaded > 8000) {\n rerun = this.removeFarAwayBatch();\n }\n else {\n rerun = this.featureQueue.length > 0 && batch.length > 0;\n }\n }\n catch (e) {\n console.error(e);\n }\n finally {\n setTimeout(() => {\n this.processingQueue -= 1;\n if (rerun) {\n this.processQueue();\n }\n }, BATCH_DELAY);\n }\n }\n\n private getVisualsForBatch(): ICesiumFeatureExtended[] {\n const batch: ICesiumFeatureExtended[] = [];\n const features = this.featureQueue;\n const bounds = this.monitor.GetBounds();\n const rect = bounds?.east ? new Cesium.Rectangle(\n Cesium.Math.toRadians(bounds.west),\n Cesium.Math.toRadians(bounds.south),\n Cesium.Math.toRadians(bounds.east),\n Cesium.Math.toRadians(bounds.north)\n ) : null;\n\n if (rect) {\n for (let i = 0; i < features.length; i++) {\n const feature = features[i];\n if (feature) {\n const featureLon = feature.getProperty(\"cesium#longitude\");\n const featureLat = feature.getProperty(\"cesium#latitude\");\n if (featureLon && featureLat) {\n const carto = Cesium.Cartographic.fromDegrees(featureLon, featureLat, 0);\n const isIn = Cesium.Rectangle.contains(rect, carto);\n if (isIn) {\n const isClose = this.getIsVisualWithinRange(feature, MAX_RANGE);\n if (isClose) {\n batch.push(feature);\n if (batch.length >= BATCH_SIZE) {\n return batch;\n }\n }\n }\n }\n }\n }\n }\n return batch;\n }\n\n private getIsVisualWithinRange(visual: ICesiumFeatureExtended, range: number): boolean {\n const featureLon = visual.getProperty(\"cesium#longitude\");\n const featureLat = visual.getProperty(\"cesium#latitude\");\n if (featureLon && featureLat) {\n const pos = Cesium.Cartesian3.fromDegrees(featureLon, featureLat, 0);\n const camPoint = this.monitor.GetTarget();\n const camPos = camPoint?.latitude ? Cesium.Cartesian3.fromDegrees(camPoint.longitude, camPoint.latitude, camPoint.altitude) : null;\n if (camPos && Cartes.ValidateCartes3(camPos) && Cartes.ValidateCartes3(pos)) {\n let distance = Cesium.Cartesian3.distance(pos, camPos);\n if (distance != null && distance <= range) {\n return true;\n }\n }\n }\n return false;\n }\n\n private async mapTileBatch(features: ICesiumFeatureExtended[]): Promise<void> {\n const featureIds: string[] = [];\n const featureMap: ICesiumFeatureExtended[] = [];\n\n for (let i = 0; i < features.length; i++) {\n const feature = features[i];\n const featureId = feature.getProperty(\"elementId\");\n if (featureId) {\n featureMap.push(feature);\n featureIds.push(featureId + \"\");\n }\n\n const index = this.featureQueue.findIndex(x => x._counter == feature._counter);\n if (index > -1) {\n this.featureQueue.splice(index, 1);\n }\n }\n\n const api = this.apiGetter.getApi();\n const {idMapping: bIds} = await EntitySource.GetEntityIdsBySourceKeys({\n api,\n sourceId: this.sourceId,\n sourceKeys: featureIds\n });\n\n for (let i = 0; i < featureIds.length; i++) {\n const osmId = featureIds[i];\n let bruceId = bIds[osmId];\n if (!bruceId) {\n bruceId = ObjectUtils.UId();\n }\n const feature = featureMap[i];\n if (this.item.ghostLoading == true) {\n feature.color = feature._orgColor;\n }\n const rego = {\n entityId: bruceId,\n menuItemId: this.item.id,\n priority: 0,\n visual: feature,\n entityTypeId: this.entityTypeId,\n sourceId: this.sourceId,\n sourceEntityId: osmId,\n accountId: this.apiGetter.accountId\n } as VisualsRegister.IVisualRego;\n this.visualsManager.AddRego({\n rego\n });\n this._loadedCesiumEntities[bruceId] = rego;\n }\n }\n\n private removeFarAwayBatch(): boolean {\n let removed = 0;\n let keys = Object.keys(this._loadedCesiumEntities);\n for (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n let rego = this._loadedCesiumEntities[key];\n if (rego) {\n if (!this.getIsVisualWithinRange(rego.visual as ICesiumFeatureExtended, MAX_RANGE)) {\n this.visualsManager.RemoveRegos({\n entityId: rego.entityId,\n menuItemId: this.item.id\n });\n this._loadedCesiumEntities[key] = <any>null;\n delete this._loadedCesiumEntities[key];\n this.totalLoaded -= 1;\n removed += 1;\n\n if (removed >= BATCH_SIZE) {\n return true;\n }\n }\n }\n }\n\n return removed > 0;\n }\n\n public async ReRender(params: {\n entityIds?: string[],\n force?: boolean\n }) {\n const {entityIds, force} = params;\n if (entityIds == null) {\n\n }\n else {\n\n }\n }\n }\n}","import { BruceApi, MenuItem, Tileset } from \"bruce-models\";\nimport { VisualsRegister } from \"../../visuals-register\";\nimport { RenderManager } from \"../render-manager\";\nimport * as Cesium from \"cesium\";\nimport { TilesetRenderEngine } from \"../../tileset-render-engine\";\n\nexport namespace TilesetEntitiesRenderManager {\n export class Manager implements RenderManager.IManager {\n private viewer: Cesium.Viewer;\n private apiGetter: BruceApi.IGetter;\n private item: MenuItem.Item.ICadTileset;\n private disposed: boolean = false;\n public get Disposed(): boolean {\n return this.disposed;\n }\n private visualsManager: VisualsRegister.Register;\n private cTileset: Cesium.Cesium3DTileset = <any>null;\n public get Tileset(): Cesium.Cesium3DTileset {\n return this.cTileset;\n }\n private typeId: string;\n\n constructor(params: {\n viewer: Cesium.Viewer,\n register: VisualsRegister.Register,\n apiGetter: BruceApi.IGetter,\n item: MenuItem.Item.ICadTileset\n }) {\n const { viewer, register: visualsManager, apiGetter, item } = params;\n this.viewer = viewer;\n this.apiGetter = apiGetter;\n this.item = item;\n this.visualsManager = visualsManager;\n }\n\n public async Init(): Promise<void> {\n const tilesetId = this.item.tileset?.TilesetID;\n if (!tilesetId) {\n return;\n }\n\n (async () => {\n const api = this.apiGetter.getApi();\n const {tileset} = await Tileset.Get({\n api,\n tilesetId\n });\n if (!tileset || this.disposed) {\n return;\n }\n this.typeId = (tileset.settings as Tileset.Settings.IEntities).entityTypeId;\n\n const cTileset = this.cTileset = await TilesetRenderEngine.Render({\n apiGetter: this.apiGetter,\n tileset: tileset,\n viewer: this.viewer,\n accountId: this.item.tileset?.ClientAccountID ?? this.apiGetter.accountId,\n viaCdn: this.item.cdnEnabled\n });\n if (this.disposed) {\n this.doDispose();\n return;\n }\n\n cTileset.readyPromise.then(() => {\n try {\n if (this.disposed || this.viewer.isDestroyed()) {\n return;\n }\n this.onCTilesetLoad();\n }\n catch (e) {\n console.error(e);\n }\n });\n cTileset.tileLoad.addEventListener((tile) => {\n this.mapCTile(tile);\n });\n })();\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n this.doDispose();\n }\n\n private doDispose() {\n if (this.cTileset) {\n const viewer = this.viewer;\n if (!viewer?.isDestroyed() && this.viewer.scene.primitives.contains(this.cTileset)) {\n this.cTileset.show = false;\n this.viewer.scene.primitives.remove(this.cTileset);\n TilesetRenderEngine.GetMemoryWatcher(viewer)?.Unwatch(this.cTileset);\n }\n this.cTileset = null;\n }\n this.visualsManager.RemoveRegos({\n menuItemId: this.item.id\n });\n }\n\n private onCTilesetLoad(): void {\n if (this.item.FlyTo) {\n this.viewer.zoomTo(\n this.cTileset,\n new Cesium.HeadingPitchRange(0.0, -0.5, this.cTileset.boundingSphere.radius / 4.0)\n );\n }\n }\n\n private mapCTile(tile: Cesium.Cesium3DTile): void {\n const content = tile?.content;\n if (!content) {\n return;\n }\n for (let i = 0; i < content.featuresLength; i++) {\n const feature = content.getFeature(i);\n this.mapTilesetFeature(feature);\n }\n }\n\n private mapTilesetFeature(feature: Cesium.Cesium3DTileFeature): void {\n const id = feature.getProperty(\"BruceId\");\n if (id) {\n const rego: VisualsRegister.IVisualRego = {\n entityId: id,\n entityTypeId: this.typeId,\n menuItemId: this.item.id,\n priority: 0,\n visual: feature,\n tilesetId: this.item.tileset?.TilesetID,\n accountId: this.item.tileset?.ClientAccountID ?? this.apiGetter.accountId\n };\n this.visualsManager.AddRego({\n rego\n });\n }\n }\n\n public async ReRender(params: {\n entityIds?: string[],\n force?: boolean\n }) {\n const { entityIds, force } = params;\n if (entityIds == null) {\n\n }\n else {\n\n }\n }\n }\n}","import { BruceApi, MenuItem, Tileset } from \"bruce-models\";\nimport { RenderManager } from \"../render-manager\";\nimport * as Cesium from \"cesium\";\nimport { TilesetRenderEngine } from \"../../tileset-render-engine\";\n\nexport namespace TilesetPointcloudRenderManager {\n export class Manager implements RenderManager.IManager {\n private viewer: Cesium.Viewer;\n private apiGetter: BruceApi.IGetter;\n private item: MenuItem.Item.IPointcloud;\n private disposed: boolean = false;\n public get Disposed(): boolean {\n return this.disposed;\n }\n private cTileset: Cesium.Cesium3DTileset = <any>null;\n public get Tileset(): Cesium.Cesium3DTileset {\n return this.cTileset;\n }\n\n constructor(params: {\n viewer: Cesium.Viewer,\n apiGetter: BruceApi.IGetter,\n item: MenuItem.Item.IPointcloud\n }) {\n const { viewer, apiGetter, item } = params;\n this.viewer = viewer;\n this.apiGetter = apiGetter;\n this.item = item;\n }\n\n public Init() {\n const tilesetId = this.item.tileset?.TilesetID;\n if (!tilesetId) {\n return;\n }\n\n (async () => {\n const api = this.apiGetter.getApi();\n const {tileset} = await Tileset.Get({\n api,\n tilesetId\n });\n if (!tileset || this.disposed) {\n return;\n }\n\n const cTileset = this.cTileset = await TilesetRenderEngine.Render({\n apiGetter: this.apiGetter,\n tileset: tileset,\n viewer: this.viewer,\n coords: null,\n accountId: this.item.tileset?.ClientAccountID ?? this.apiGetter.accountId,\n viaCdn: this.item.cdnEnabled\n });\n if (this.disposed) {\n this.doDispose();\n return;\n }\n\n cTileset.readyPromise.then(() => {\n try {\n if (this.disposed || this.viewer.isDestroyed()) {\n return;\n }\n this.onCTilesetLoad();\n }\n catch (e) {\n console.error(e);\n }\n });\n })();\n }\n\n private onCTilesetLoad(): void {\n if (this.item.FlyTo) {\n this.viewer.zoomTo(\n this.cTileset,\n new Cesium.HeadingPitchRange(0.0, -0.5, this.cTileset.boundingSphere.radius / 4.0)\n );\n }\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n this.doDispose();\n }\n\n private doDispose() {\n if (this.cTileset) {\n const viewer = this.viewer;\n if (!viewer?.isDestroyed() && this.viewer.scene.primitives.contains(this.cTileset)) {\n this.cTileset.show = false;\n this.viewer.scene.primitives.remove(this.cTileset);\n TilesetRenderEngine.GetMemoryWatcher(viewer)?.Unwatch(this.cTileset);\n }\n this.cTileset = null;\n }\n }\n\n public async ReRender(params: {\n entityIds?: string[],\n force?: boolean\n }) {\n const { entityIds, force } = params;\n if (entityIds == null) {\n\n }\n else {\n\n }\n }\n }\n}","import { BruceApi, ClientFile, MenuItem } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { RenderManager } from \"../render-manager\";\n\nexport namespace DataSourceStaticKmlManager {\n export class Manager implements RenderManager.IManager {\n private viewer: Cesium.Viewer;\n private apiGetter: BruceApi.IGetter;\n private item: MenuItem.Item.IKml;\n private disposed: boolean = false;\n public get Disposed(): boolean {\n return this.disposed;\n }\n private dataSources: Cesium.KmlDataSource[] = [];\n\n constructor(params: {\n viewer: Cesium.Viewer,\n apiGetter: BruceApi.IGetter,\n item: MenuItem.Item.IKml\n }) {\n const { viewer, apiGetter, item } = params;\n this.viewer = viewer;\n this.apiGetter = apiGetter;\n this.item = item;\n }\n\n public Init() {\n let files = this.item.KML;\n if (!files) {\n return;\n }\n if (!Array.isArray(files)) {\n files = [files];\n }\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n const fileId = file?.ClientFile?.ID;\n const externalURL = file?.fileUrl\n if (!fileId && !externalURL) {\n continue;\n }\n\n const api = this.apiGetter.getApi();\n let fileUrl: string;\n if (fileId){\n fileUrl = ClientFile.GetUrl({\n api,\n fileId\n });\n }\n else if (externalURL) {\n fileUrl = externalURL;\n }\n\n const source = new Cesium.KmlDataSource();\n source.load(fileUrl);\n this.viewer.dataSources.add(source);\n this.dataSources.push(source);\n }\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n if (!this.viewer?.isDestroyed()) {\n for (let i = 0; i < this.dataSources.length; i++) {\n const source = this.dataSources[i];\n if (\n source &&\n this.viewer.dataSources.contains(source)\n ) {\n this.viewer.dataSources.remove(source);\n }\n }\n }\n this.dataSources = [];\n }\n\n public async ReRender(params: {\n entityIds?: string[],\n force?: boolean\n }) {\n const { entityIds, force } = params;\n if (entityIds == null) {\n\n }\n else {\n\n }\n }\n }\n}","import { RenderManager } from \"../render-manager\";\nimport * as Cesium from \"cesium\";\nimport { BruceApi, MenuItem, Tileset } from \"bruce-models\";\nimport { TilesetRenderEngine } from \"../../tileset-render-engine\";\nimport { VisualsRegister } from \"../../visuals-register\";\n\nasync function getLegacyTileset(params: {\n apiGetter: BruceApi.IGetter,\n menuItem: MenuItem.Item.IArbTileset,\n tileset: Tileset.ITileset\n}): Promise<any> {\n const { apiGetter, menuItem, tileset } = params;\n try {\n const api = apiGetter.getApi(menuItem.tileset.ClientAccountID);\n const legacyTileset = await api.GET(`ui.tileset/${tileset.id}`);\n return legacyTileset;\n }\n catch (e) {\n console.error(e);\n }\n}\n\nasync function getTileset(params: {\n apiGetter: BruceApi.IGetter,\n menuItem: MenuItem.Item.IArbTileset\n}): Promise<{\n tileset: Tileset.ITileset,\n type: Tileset.EType\n}> {\n const { apiGetter, menuItem } = params;\n try {\n const api = apiGetter.getApi(menuItem.tileset.ClientAccountID);\n const { tileset } = await Tileset.Get({\n api,\n tilesetId: menuItem.tileset.TilesetID\n });\n const {typeMapping} = await Tileset.GetTypes({\n api,\n tilesetIds: [menuItem.tileset.TilesetID]\n });\n return {\n tileset,\n type: typeMapping[menuItem.tileset.TilesetID]\n };\n }\n catch (e) {\n console.error(e);\n }\n}\n\nexport namespace TilesetArbRenderManager {\n export class Manager implements RenderManager.IManager {\n private viewer: Cesium.Viewer;\n private apiGetter: BruceApi.IGetter;\n private item: MenuItem.Item.IArbTileset;\n private disposed: boolean = false;\n public get Disposed(): boolean {\n return this.disposed;\n }\n private visualsManager: VisualsRegister.Register;\n private cTileset: Cesium.Cesium3DTileset = null;\n public get Tileset(): Cesium.Cesium3DTileset {\n return this.cTileset;\n }\n private styler: TilesetRenderEngine.Styler = null;\n\n\n public constructor(params: {\n viewer: Cesium.Viewer,\n item: MenuItem.Item.IArbTileset,\n apiGetter: BruceApi.IGetter,\n register: VisualsRegister.Register\n }) {\n this.viewer = params.viewer;\n this.apiGetter = params.apiGetter;\n this.visualsManager = params.register;\n // We modify the object due to a lot of backwards compatibility.\n try {\n this.item = params.item ? JSON.parse(JSON.stringify(params.item)) : {};\n }\n catch (e) {\n console.error(e);\n }\n }\n\n public Init() {\n // Horrid backwards compatibility.\n let loadUrlOverride = null;\n if (this.item.tileset) {\n const itemUrl = this.item.tileset?.TilesetURL;\n if (itemUrl && itemUrl.includes(\"cc3d.api\")) {\n this.item.tileset.ClientAccountID = \"cc3d\";\n }\n else if (this.item.IonResource?.AssetID) {\n this.item.tileset.ClientAccountID = \"cc3d\";\n }\n\n // Try fix a legacy record.\n // Eg: https://my3dcity.api.nextspace-uat-us.net/ui.tileset/0838d707-38af-4592-a2d4-5028997cab85/file/tileset.json\n if (!this.item.tileset.TilesetID && this.item.tileset.TilesetURL) {\n loadUrlOverride = this.item.tileset.TilesetURL;\n const url = this.item.tileset.TilesetURL;\n const urlParts = url.split(\"/\");\n if (urlParts.length > 5) {\n const tilesetId = urlParts[urlParts.length - 3];\n const accountId = urlParts[urlParts.length - 5].split(\".\")[0];\n this.item.tileset.TilesetID = tilesetId;\n this.item.tileset.ClientAccountID = accountId;\n }\n }\n }\n const tilesetId = this.item.tileset?.TilesetID;\n (async () => {\n const {tileset, type} = tilesetId ? await getTileset({\n apiGetter: this.apiGetter,\n menuItem: this.item\n }) : { tileset: null, type: null };\n if (this.disposed) {\n return;\n }\n\n if (tileset && loadUrlOverride) {\n tileset.loadUrl = loadUrlOverride;\n }\n\n const LEGACY_TYPES = [\n Tileset.EType.LegacyEntitiesSet,\n Tileset.EType.LegacyExternal,\n Tileset.EType.LegacyStatic\n ];\n if (!type || LEGACY_TYPES.includes(type)) {\n // Legacy type. We re-request using ui.tileset endpoint.\n const legacyTileset = tileset ? await getLegacyTileset({\n apiGetter: this.apiGetter,\n menuItem: this.item as MenuItem.Item.IArbTileset,\n tileset\n }) : null;\n if (this.disposed) {\n return;\n }\n\n let accountId = this.item?.tileset?.ClientAccountID;\n if (!accountId) {\n accountId = this.apiGetter.accountId;\n }\n this.cTileset = await TilesetRenderEngine.RenderLegacy({\n apiGetter: this.apiGetter,\n tileset: legacyTileset,\n viewer: this.viewer,\n ionId: this.item.IonResource?.AssetID,\n loadUrl: loadUrlOverride,\n accountId: accountId,\n viaCdn: true\n });\n }\n else if (tileset) {\n this.cTileset = await TilesetRenderEngine.Render({\n apiGetter: this.apiGetter,\n tileset: tileset,\n viewer: this.viewer,\n coords: null,\n accountId: this.item.tileset?.ClientAccountID ?? this.apiGetter.accountId,\n // Not doing viaCDN here because I fear it'll break something since this is a legacy menu item type.\n viaCdn: false\n });\n }\n if (this.disposed) {\n this.doDispose();\n return;\n }\n this.cTileset.readyPromise.then(() => {\n try {\n if (\n this.item.ApplyStyles ||\n this.item.Type == MenuItem.EType.IonTileset\n ) {\n const api = this.apiGetter.getApi();\n this.styler = new TilesetRenderEngine.Styler(\n api,\n this.cTileset,\n <number>this.item.styleId,\n <any[]>this.item.StyleMapping,\n this.item.id,\n this.visualsManager\n );\n }\n this.onCTilesetLoad();\n }\n catch (e) {\n console.error(e);\n }\n });\n this.cTileset.tileLoad.addEventListener((tile) => {\n try {\n this.mapCTile(tile);\n }\n catch (e) {\n console.error(e);\n }\n });\n })();\n }\n\n private onCTilesetLoad(): void {\n if (this.item.FlyTo) {\n this.viewer.zoomTo(\n this.cTileset,\n new Cesium.HeadingPitchRange(0.0, -0.5, this.cTileset.boundingSphere.radius / 4.0)\n );\n }\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n this.doDispose();\n }\n\n private doDispose() {\n if (this.cTileset) {\n const viewer = this.viewer;\n if (!viewer?.isDestroyed() && this.viewer.scene.primitives.contains(this.cTileset)) {\n this.cTileset.show = false;\n this.viewer.scene.primitives.remove(this.cTileset);\n TilesetRenderEngine.GetMemoryWatcher(viewer)?.Unwatch(this.cTileset);\n }\n this.cTileset = null;\n }\n this.styler?.Dispose();\n this.visualsManager.RemoveRegos({\n menuItemId: this.item.id\n });\n }\n\n public async ReRender(params: {\n entityIds?: string[],\n force?: boolean\n }): Promise<void> {\n const {entityIds, force} = params;\n if (!this.styler) {\n return;\n }\n let regos: VisualsRegister.IVisualRego[] = this.visualsManager.GetRegos({\n menuItemId: this.item.id\n });\n if (entityIds != null) {\n regos = regos.filter(r => entityIds.indexOf(r.entityId) >= 0);\n }\n this.styler.QueueEntities(regos);\n }\n\n private mapCTile(tile: Cesium.Cesium3DTile): void {\n const content = tile?.content;\n if (!content) {\n return;\n }\n for (let i = 0; i < content.featuresLength; i++) {\n const feature = content.getFeature(i);\n let rego = this.mapTilesetFeature(feature);\n if (rego?.entityId && this.styler) {\n this.styler.QueueEntities([rego]);\n }\n }\n }\n\n private mapTilesetFeature(feature: Cesium.Cesium3DTileFeature): VisualsRegister.IVisualRego {\n let rego: VisualsRegister.IVisualRego = {\n entityId: <any>null,\n entityTypeId: <any>null,\n menuItemId: this.item.id,\n priority: 0,\n visual: feature,\n accountId: this.item.tileset?.ClientAccountID ?? this.apiGetter.accountId,\n tilesetId: this.item.tileset?.TilesetID\n };\n\n // Two different methods for two different Cesium versions...\n const props = (feature as any).getPropertyNames ? (feature as any).getPropertyNames([]) :\n (feature as any).getPropertyIds ? (feature as any).getPropertyIds() : [];\n\n if (props.find(x => x == \"BrucePath\")) {\n const path = feature.getProperty(\"BrucePath\")?.split(\"|\");\n if (path?.length) {\n rego.entityId = path[path.length - 1];\n }\n }\n if (!rego.entityId) {\n const ACCEPTABLE_PROPS = [\n \"Building_ID\", \"BuildingID\", \"BruceId\"\n ];\n for (let acceptableId of ACCEPTABLE_PROPS) {\n if (props.indexOf(acceptableId) > -1) {\n rego.entityId = feature.getProperty(acceptableId);\n if (rego.entityId) {\n break;\n }\n }\n }\n }\n if (!rego.entityId) {\n return null;\n }\n\n this.visualsManager.AddRego({\n rego\n });\n return rego;\n }\n }\n}","import { BruceApi, EntityRelation, MenuItem, ObjectUtils } from \"bruce-models\";\nimport { RenderManager } from \"../render-manager\";\nimport { VisualsRegister } from \"../../visuals-register\";\nimport * as Cesium from \"cesium\";\nimport { RelationRenderEngine } from \"../../relation-render-engine\";\n\nexport namespace RelationsRenderManager {\n export class Manager implements RenderManager.IManager {\n private disposed = false;\n public get Disposed() {\n return this.disposed;\n };\n private apiGetter: BruceApi.IGetter;\n private item: MenuItem.Item.IEntityRelations;\n private register: VisualsRegister.Register;\n private viewer: Cesium.Viewer;\n\n\n public constructor(params: {\n apiGetter: BruceApi.IGetter,\n item: MenuItem.Item.IEntityRelations,\n register: VisualsRegister.Register,\n viewer: Cesium.Viewer\n }) {\n const { apiGetter, item, register, viewer } = params;\n this.apiGetter = apiGetter;\n this.item = item;\n this.register = register;\n this.viewer = viewer;\n }\n\n public Init() {\n const drawn: string[] = [];\n const api = this.apiGetter.getApi(this.apiGetter.accountId);\n const BATCH_SIZE = 5;\n let drawBatch = [];\n let pending = this.item.BruceEntity.EntityIds.length;\n\n const onResolve = () => {\n pending -= 1;\n if (pending <= 0) {\n if (drawBatch?.length) {\n this.onGetterUpdate(drawBatch);\n }\n }\n };\n\n for (let i = 0; i < this.item.BruceEntity.EntityIds.length; i++) {\n const entityId = this.item.BruceEntity.EntityIds[i];\n EntityRelation.GetList({\n api,\n entityId,\n filter: {\n oneWayOnly: false,\n loadEntityData: false\n }\n }).then((data) => {\n const relations = data.relations;\n for (let j = 0; j < relations.length; j++) {\n const relation = relations[j];\n if (this.item.relationTypeIds?.length && !this.item.relationTypeIds.includes(relation[\"Relation.Type.ID\"])) {\n continue;\n }\n const key = RelationRenderEngine.GetRenderGroupId(relation);\n if (!drawn.find(x => x == key)) {\n drawn.push(key);\n drawBatch.push(relation);\n if (drawBatch.length >= BATCH_SIZE) {\n this.onGetterUpdate(drawBatch);\n drawBatch = [];\n }\n }\n }\n onResolve();\n }).catch((e) => {\n onResolve();\n });\n }\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n this.register.RemoveRegos({\n menuItemId: this.item.id\n });\n }\n\n public async ReRender(params: {\n entityIds?: string[],\n force?: boolean\n }): Promise<void> {\n let { entityIds, force } = params;\n if (entityIds == null) {\n\n }\n else {\n\n }\n }\n\n private async onGetterUpdate(relations: EntityRelation.IRelation[]): Promise<void> {\n try {\n if (this.disposed || this.viewer.isDestroyed()) {\n return;\n }\n const cEntities = await RelationRenderEngine.Render({\n apiGetter: this.apiGetter,\n menuItemId: this.item.id,\n relations: relations,\n viewer: this.viewer,\n visualRegister: this.register\n });\n for (let i = 0; i < relations.length; i++) {\n const relation = relations[i];\n const key = RelationRenderEngine.GetRenderGroupId(relation);\n const cEntity = cEntities[key];\n if (cEntity) {\n const visual = this.register.GetRego({\n entityId: key,\n menuItemId: this.item.id\n })?.visual;\n if (!visual || visual != cEntity) {\n this.register.AddRego({\n rego: {\n entityId: relation[\"Data.Entity.ID\"] ?? ObjectUtils.UId(),\n menuItemId: this.item.id,\n relation: relation,\n visual: cEntity,\n priority: 0,\n accountId: this.apiGetter.accountId\n }\n });\n }\n }\n else {\n this.register.RemoveRegos({\n entityId: relation[\"Data.Entity.ID\"],\n relation: relation,\n menuItemId: this.item.id\n });\n }\n }\n }\n catch (e) {\n console.error(e);\n }\n }\n }\n}","import { MenuItem } from \"bruce-models\";\nimport { RenderManager } from \"../render-manager\";\nimport * as Cesium from \"cesium\";\n\nexport namespace TilesetGooglePhotosRenderManager {\n export class Manager implements RenderManager.IManager {\n private viewer: Cesium.Viewer;\n private item: MenuItem.Item.IGooglePhotoTileset;\n private disposed: boolean = false;\n public get Disposed(): boolean {\n return this.disposed;\n }\n private cTileset: Cesium.Cesium3DTileset = <any>null;\n public get Tileset(): Cesium.Cesium3DTileset {\n return this.cTileset;\n }\n\n\n constructor(params: {\n viewer: Cesium.Viewer,\n item: MenuItem.Item.IGooglePhotoTileset\n }) {\n const { viewer, item } = params;\n this.viewer = viewer;\n this.item = item;\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.doDispose();\n }\n\n private doDispose() {\n if (this.cTileset) {\n const viewer = this.viewer;\n if (!viewer?.isDestroyed() && this.viewer.scene.primitives.contains(this.cTileset)) {\n this.cTileset.show = false;\n this.viewer.scene.primitives.remove(this.cTileset);\n }\n this.cTileset = null;\n }\n }\n\n public Init() {\n (async () => {\n // Using as any to be OK with older versions.\n this.cTileset = await (Cesium as any).createGooglePhotorealistic3DTileset?.();\n if (this.disposed) {\n this.doDispose();\n return;\n }\n this.viewer.scene.primitives.add(this.cTileset);\n const colorCss = this.item.colorMask;\n if (colorCss) {\n this.cTileset.style = new Cesium.Cesium3DTileStyle({\n color: {\n conditions: [\n [ \"true\", `color(\"${colorCss}\")` ]\n ]\n }\n });\n }\n })();\n }\n\n public async ReRender(params: {\n entityIds?: string[],\n force?: boolean\n }) {\n const { entityIds, force } = params;\n if (entityIds == null) {\n\n }\n else {\n\n }\n }\n }\n}","import { BruceApi, BruceEvent, ENVIRONMENT, Entity, MenuItem, ObjectUtils } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntitiesRenderManager } from \"./render-managers/entities/entities-render-manager\";\r\nimport { EntitiesLoadedRenderManager } from \"./render-managers/entities/entities-loaded-render-manager\";\r\nimport { RenderManager } from \"./render-managers/render-manager\";\r\nimport { VisualsRegister } from \"./visuals-register\";\r\nimport { EntitiesIdsRenderManager } from \"./render-managers/entities/entities-ids-render-manager\";\r\nimport { EntityRenderManager } from \"./render-managers/entities/entity-render-manager\";\r\nimport { TilesetCadRenderManager } from \"./render-managers/tilesets/tileset-cad-render-manager\";\r\nimport { SharedGetters } from \"./render-managers/common/shared-getters\";\r\nimport { CesiumViewMonitor } from \"../viewer/cesium-view-monitor\";\r\nimport { TilesetOsmRenderManager } from \"./render-managers/tilesets/tileset-osm-render-manager\";\r\nimport { TilesetEntitiesRenderManager } from \"./render-managers/tilesets/tileset-entities-render-manager\";\r\nimport { TilesetPointcloudRenderManager } from \"./render-managers/tilesets/tileset-pointcloud-render-manager\";\r\nimport { DataSourceStaticKmlManager } from \"./render-managers/data-source/data-source-static-kml-manager\";\r\nimport { TilesetArbRenderManager } from \"./render-managers/tilesets/tileset-arb-render-manager\";\r\nimport { RelationsRenderManager } from \"./render-managers/other/relations-render-manager\";\r\nimport { TilesetGooglePhotosRenderManager } from \"./render-managers/tilesets/tileset-google-photos-render-manager\";\r\n\r\ninterface IRenderedItem {\r\n id: string;\r\n type: MenuItem.EType;\r\n childIds: string[];\r\n item: MenuItem.IItem;\r\n renderManager: RenderManager.IManager;\r\n // Array of exceptions during the menu item's rendering.\r\n // Eg: Failed to enable as the item's tileset was deleted.\r\n errors?: (string | any)[];\r\n}\r\n\r\n/**\r\n * Utility to keep track of enabled menu items within a Cesium viewer.\r\n */\r\nexport namespace MenuItemManager {\r\n export interface IMenuItemUpdate {\r\n itemId: string;\r\n isEnabling: boolean;\r\n }\r\n\r\n export class Manager {\r\n private viewer: Cesium.Viewer;\r\n public get Viewer(): Cesium.Viewer {\r\n return this.viewer;\r\n }\r\n private items: IRenderedItem[] = [];\r\n private visualsRegister: VisualsRegister.Register;\r\n public get VisualsRegister(): VisualsRegister.Register {\r\n return this.visualsRegister;\r\n }\r\n private onUpdate: BruceEvent<IMenuItemUpdate> = <any>null;\r\n public get OnUpdate(): BruceEvent<IMenuItemUpdate> {\r\n if (!this.onUpdate) {\r\n this.onUpdate = new BruceEvent<IMenuItemUpdate>();\r\n }\r\n return this.onUpdate;\r\n }\r\n private sharedGetters: SharedGetters.Cache;\r\n private sharedMonitor: CesiumViewMonitor;\r\n public get Monitor(): CesiumViewMonitor {\r\n return this.sharedMonitor;\r\n }\r\n\r\n public constructor(params: {\r\n viewer: Cesium.Viewer,\r\n visualsRegister?: VisualsRegister.Register\r\n }) {\r\n let { viewer, visualsRegister } = params;\r\n this.viewer = viewer;\r\n if (!visualsRegister) {\r\n visualsRegister = new VisualsRegister.Register(viewer);\r\n }\r\n this.visualsRegister = visualsRegister;\r\n this.sharedGetters = new SharedGetters.Cache();\r\n this.sharedMonitor = new CesiumViewMonitor(this.viewer);\r\n }\r\n\r\n /**\r\n * Renders a given menu item and all its children.\r\n * Will return the enabled item id.\r\n * @param params\r\n * @returns\r\n */\r\n public RenderItem(params: {\r\n item: MenuItem.IItem;\r\n // Default = true.\r\n recursive?: boolean\r\n apiGetter?: BruceApi.IGetter;\r\n }): string {\r\n if (this.viewer.isDestroyed()) {\r\n return null;\r\n }\r\n if (!params.apiGetter) {\r\n params.apiGetter = ENVIRONMENT.Api().GetBruceGetter();\r\n }\r\n\r\n let rItem = this.items.find(x => x.id == params.item.id);\r\n if (rItem) {\r\n // This means we're updating a tag menu item.\r\n // Tag menu items have alternative states based on bookmark settings.\r\n // Eg: different tags that were enabled.\r\n if (rItem.type == MenuItem.EType.Entities && params.item.Type == MenuItem.EType.Entities) {\r\n const eItem = rItem.item as MenuItem.Item.IEntities;\r\n if (eItem?.BruceEntity?.ExpandLayers) {\r\n (rItem.renderManager as EntitiesRenderManager.Manager).Init({\r\n item: params.item as MenuItem.Item.IEntities,\r\n });\r\n rItem.item = params.item;\r\n }\r\n }\r\n }\r\n else {\r\n rItem = {\r\n id: params.item.id ?? ObjectUtils.UId(),\r\n childIds: [],\r\n item: params.item,\r\n renderManager: <any>null,\r\n type: params.item.Type,\r\n errors: []\r\n }\r\n this.items.push(rItem);\r\n\r\n if (!params.item.Type) {\r\n params.item.Type = MenuItem.EType.None;\r\n }\r\n switch (params.item.Type) {\r\n case MenuItem.EType.Entities:\r\n rItem.renderManager = new EntitiesRenderManager.Manager({\r\n viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n monitor: this.sharedMonitor,\r\n item: <MenuItem.Item.IEntities>params.item,\r\n sharedGetters: this.sharedGetters\r\n });\r\n break;\r\n case MenuItem.EType.EntitiesLoaded:\r\n rItem.renderManager = new EntitiesLoadedRenderManager.Manager({\r\n viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n monitor: this.sharedMonitor,\r\n item: <MenuItem.Item.IEntitiesLoaded>params.item\r\n });\r\n break;\r\n case MenuItem.EType.EntitiesIds:\r\n rItem.renderManager = new EntitiesIdsRenderManager.Manager({\r\n viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n monitor: this.sharedMonitor,\r\n item: <MenuItem.Item.IEntityIds>params.item\r\n });\r\n break;\r\n case MenuItem.EType.Entity:\r\n rItem.renderManager = new EntityRenderManager.Manager({\r\n viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n monitor: this.sharedMonitor,\r\n item: <MenuItem.Item.IEntity>params.item\r\n });\r\n break;\r\n case MenuItem.EType.CadTileset:\r\n rItem.renderManager = new TilesetCadRenderManager.Manager({\r\n viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n item: <MenuItem.Item.ICadTileset>params.item\r\n });\r\n break;\r\n case MenuItem.EType.Osm:\r\n rItem.renderManager = new TilesetOsmRenderManager.Manager({\r\n viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n monitor: this.sharedMonitor,\r\n item: <MenuItem.Item.IOsm>params.item\r\n });\r\n break;\r\n case MenuItem.EType.PointCloud:\r\n rItem.renderManager = new TilesetPointcloudRenderManager.Manager({\r\n viewer: this.viewer,\r\n apiGetter: params.apiGetter,\r\n item: <MenuItem.Item.IPointcloud>params.item\r\n });\r\n break;\r\n case MenuItem.EType.EntityTileset:\r\n rItem.renderManager = new TilesetEntitiesRenderManager.Manager({\r\n viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n item: <MenuItem.Item.IEntitiesTileset>params.item\r\n });\r\n break;\r\n case MenuItem.EType.Kml:\r\n rItem.renderManager = new DataSourceStaticKmlManager.Manager({\r\n viewer: this.viewer,\r\n apiGetter: params.apiGetter,\r\n item: <MenuItem.Item.IKml>params.item\r\n });\r\n break;\r\n case MenuItem.EType.IonTileset:\r\n case MenuItem.EType.ArbTileset:\r\n rItem.renderManager = new TilesetArbRenderManager.Manager({\r\n apiGetter: params.apiGetter,\r\n item: <MenuItem.Item.IArbTileset>params.item,\r\n viewer: this.viewer,\r\n register: this.visualsRegister\r\n });\r\n break;\r\n case MenuItem.EType.Relations:\r\n rItem.renderManager = new RelationsRenderManager.Manager({\r\n apiGetter: params.apiGetter,\r\n item: params.item as any,\r\n register: this.visualsRegister,\r\n viewer: this.viewer\r\n });\r\n break;\r\n case MenuItem.EType.GooglePhotoTileset:\r\n rItem.renderManager = new TilesetGooglePhotosRenderManager.Manager({\r\n item: params.item as any,\r\n viewer: this.viewer,\r\n });\r\n break;\r\n // Any \"none\" type can be ignored. These are just containers for other items.\r\n case MenuItem.EType.None:\r\n break;\r\n default:\r\n console.error(\"Menu item type is not implemented.\", params.item.Type);\r\n }\r\n\r\n if (rItem.renderManager && !rItem.renderManager.Disposed) {\r\n try {\r\n rItem.renderManager.Init();\r\n }\r\n catch (e) {\r\n rItem.errors.push(e);\r\n }\r\n }\r\n }\r\n // We no longer support folder items being both a folder and an action.\r\n // Now an item must have no action to be a folder.\r\n const isFolder = !params.item.Type || params.item.Type == MenuItem.EType.None;\r\n if (params.item.Children && params.recursive != false && isFolder) {\r\n for (let i = 0; i < params.item.Children.length; i++) {\r\n const childId = this.RenderItem({\r\n ...params,\r\n item: params.item.Children[i]\r\n });\r\n rItem.childIds.push(childId);\r\n }\r\n }\r\n if (rItem.renderManager && !rItem.renderManager?.Disposed) {\r\n this.onUpdate?.Trigger({ isEnabling: true, itemId: rItem.id });\r\n }\r\n rItem.id;\r\n }\r\n\r\n /**\r\n * Disables a menu item by its id.\r\n * This will disable all children as well.\r\n * @param id\r\n * @param recursive\r\n */\r\n public RemoveItemById(params: {\r\n menuItemId: string,\r\n // Default = true.\r\n recursive?: boolean\r\n }): Promise<void> {\r\n let { menuItemId: id, recursive } = params;\r\n if (this.viewer.isDestroyed()) {\r\n return;\r\n }\r\n if (recursive == null) {\r\n recursive = true;\r\n }\r\n const item = this.items.find(x => x.id === id);\r\n if (item) {\r\n if (recursive) {\r\n for (let i = 0; i < item.childIds.length; i++) {\r\n const child = this.items.find(x => x.id === item.childIds[i]);\r\n if (child) {\r\n this.RemoveItemById({\r\n menuItemId: child.id\r\n });\r\n }\r\n }\r\n }\r\n try {\r\n item.renderManager?.Dispose();\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n this.items = this.items.filter(x => x.id !== id);\r\n this.onUpdate?.Trigger({ isEnabling: false, itemId: item.id });\r\n }\r\n }\r\n\r\n public GetEnabledItemIds(): string[] {\r\n return this.items.map(x => x.id);\r\n }\r\n\r\n public GetEnabledItem(id: string): IRenderedItem {\r\n return this.items.find(x => x.id === id);\r\n }\r\n\r\n /**\r\n * Rerenders given entities.\r\n * If no menu items are specified then the rerender is called on all enabled menu items.\r\n * It is highly recommended to supply menu item ids.\r\n * @param params\r\n */\r\n public async ReRender(params: {\r\n entityIds?: string[],\r\n entities?: Entity.IEntity[],\r\n menuItemIds?: string[]\r\n // Skips queues and renders immediately.\r\n force?: boolean\r\n }) {\r\n let { entityIds, entities, menuItemIds, force } = params;\r\n if (!entityIds?.length && !entities?.length) {\r\n return;\r\n }\r\n if (!entityIds && entities) {\r\n entityIds = entities.map(x => x.Bruce?.ID);\r\n }\r\n const items = menuItemIds?.length ? this.items.filter(x => menuItemIds.includes(x.id)) : this.items;\r\n for (let i = 0; i < items.length; i++) {\r\n const item = items[i];\r\n if (item.renderManager) {\r\n await item.renderManager.ReRender({\r\n entityIds,\r\n entities,\r\n force\r\n });\r\n }\r\n }\r\n }\r\n }\r\n}","import * as Cesium from \"cesium\";\nimport { MenuItemManager } from \"../rendering/menu-item-manager\";\n\ninterface IWidget {\n isDestroyed: () => boolean;\n destroy: () => void;\n}\n\nconst CESIUM_VIEWER_MANAGER_KEY = \"_cesiumViewerManager\";\n\nexport namespace ViewerUtils {\n /**\n * Destroys all the junk that cesium viewer ships with.\n * @param viewer \n */\n export function InitViewer(params: {\n viewer: Cesium.Viewer\n // Default = true.\n destroyWidgets?: boolean;\n // Default = true.\n styleContainer?: boolean;\n }) {\n const { viewer, destroyWidgets, styleContainer } = params;\n if (destroyWidgets != false) {\n ViewerUtils.DestroyWidget(viewer.timeline);\n ViewerUtils.DestroyWidget(viewer.vrButton);\n ViewerUtils.DestroyWidget(viewer.sceneModePicker);\n ViewerUtils.DestroyWidget(viewer.homeButton);\n ViewerUtils.DestroyWidget(viewer.fullscreenButton);\n ViewerUtils.DestroyWidget(viewer.baseLayerPicker);\n }\n if (styleContainer != false) {\n ViewerUtils.StyleContainer({ viewer });\n }\n }\n\n export function DestroyWidget(widget: IWidget): void {\n if (widget && !widget.isDestroyed()) {\n widget.destroy();\n }\n }\n\n /**\n * Hides all unnecessary elements from the Cesium viewer container.\n * @param viewer \n */\n export function StyleContainer(params: {\n viewer: Cesium.Viewer\n }) {\n const { viewer } = params;\n const container = viewer.container;\n const genContainer = container.getElementsByClassName(\"cesium-viewer\")?.[0];\n if (genContainer) {\n const children = genContainer.children;\n for (let i = 0; i < children.length; i++) {\n const child = children[i] as HTMLElement;\n if (!child.classList.contains(\"cesium-viewer-cesiumWidgetContainer\")) {\n child.style.display = \"none\";\n }\n }\n }\n\n const canvas = viewer.canvas as HTMLElement;\n canvas.style.width = \"100%\";\n canvas.style.height = \"100%\";\n\n const widget = canvas.parentElement as HTMLElement;\n widget.style.width = \"100%\";\n widget.style.height = \"100%\";\n widget.style.touchAction = \"none\";\n\n const widgetContainer = widget.parentElement as HTMLElement;\n widgetContainer.style.width = \"100%\";\n widgetContainer.style.height = \"100%\";\n\n const viewerContainer = widgetContainer.parentElement as HTMLElement;\n viewerContainer.style.fontFamily = \"sans-serif\";\n viewerContainer.style.fontSize = \"16px\";\n viewerContainer.style.overflow = \"hidden\";\n viewerContainer.style.display = \"block\";\n viewerContainer.style.position = \"relative\";\n viewerContainer.style.top = \"0\";\n viewerContainer.style.left = \"0\";\n viewerContainer.style.width = \"100%\";\n viewerContainer.style.height = \"100%\";\n }\n\n /**\n * Returns a given Cesium viewer's menu item manager.\n * If one is missing then it'll optionally create one before returning it.\n * @param params \n * @returns \n */\n export function GetManager(params: {\n viewer: Cesium.Viewer,\n // Default is true.\n createIfMissing?: boolean\n }): MenuItemManager.Manager {\n const { viewer, createIfMissing } = params;\n if (viewer[CESIUM_VIEWER_MANAGER_KEY]) {\n return viewer[CESIUM_VIEWER_MANAGER_KEY];\n }\n else if (createIfMissing != false) {\n const manager = new MenuItemManager.Manager({ viewer });\n viewer[CESIUM_VIEWER_MANAGER_KEY] = manager;\n return manager;\n }\n return null;\n }\n}","import { BruceApi, ENVIRONMENT, Entity, IDictionary, MenuItem, ObjectUtils, ProjectView, ProjectViewBookmark, Tileset, ZoomControl } from \"bruce-models\";\r\nimport { MenuItemManager } from \"./menu-item-manager\";\r\nimport * as Cesium from \"cesium\";\r\nimport { ViewerUtils } from \"../viewer/viewer-utils\";\r\n\r\n/**\r\n * Utility to help generate menu items for rendering various data.\r\n */\r\nexport namespace MenuItemCreator {\r\n export interface IParams {\r\n apiGetter?: BruceApi.IGetter;\r\n // Either viewer or manager must be provided.\r\n // If manager is not provided then a default instance for the viewer will be used.\r\n viewer?: Cesium.Viewer;\r\n manager?: MenuItemManager.Manager;\r\n }\r\n\r\n export async function RenderEntities(params: {\r\n entityIds: string[]\r\n } & IParams): Promise<{\r\n menuItemIds: string[],\r\n menuItems: MenuItem.IItem[]\r\n }> {\r\n let {entityIds, apiGetter, manager, viewer} = params;\r\n if (!manager && viewer) {\r\n manager = ViewerUtils.GetManager({\r\n viewer,\r\n createIfMissing: true\r\n });\r\n }\r\n else if (manager && !viewer) {\r\n viewer = manager.Viewer;\r\n }\r\n\r\n const item: MenuItem.Item.IEntityIds = {\r\n Caption: \"Rendering Loaded Entities\",\r\n Type: <MenuItem.EType><any>MenuItem.EType.EntitiesIds,\r\n id: ObjectUtils.UId(),\r\n Children: [],\r\n BruceEntity: {\r\n EntityIds: entityIds\r\n },\r\n CameraZoomSettings: [\r\n {\r\n DisplayType: ZoomControl.EDisplayType.Model3D,\r\n LODCategoryID: \"glb\",\r\n LODLevel: 0,\r\n MaxZoom: 100000,\r\n MinZoom: 0,\r\n StyleID: 0 // 0 = Attempt to get entity type's default.\r\n }\r\n ]\r\n };\r\n const renderedId = await manager.RenderItem({\r\n apiGetter: apiGetter,\r\n item: item\r\n });\r\n return {\r\n menuItemIds: [renderedId],\r\n menuItems: [item]\r\n }\r\n }\r\n\r\n export async function RenderEntityTypes(params: {\r\n entityTypeIds: string[]\r\n } & IParams): Promise<{\r\n menuItemIds: string[],\r\n menuItems: MenuItem.IItem[]\r\n }> {\r\n let {entityTypeIds: typeIds, apiGetter, manager, viewer} = params;\r\n if (!manager && viewer) {\r\n manager = ViewerUtils.GetManager({\r\n viewer,\r\n createIfMissing: true\r\n });\r\n }\r\n else if (manager && !viewer) {\r\n viewer = manager.Viewer;\r\n }\r\n\r\n const renderedItemIds: string[] = [];\r\n const menuItems = [];\r\n for (let i = 0; i < typeIds.length; i++) {\r\n const typeId = typeIds[i];\r\n const menuItem = MenuItem.CreateFromTypeId(typeId, 0);\r\n menuItems.push(menuItem);\r\n const itemId = await manager.RenderItem({\r\n apiGetter: apiGetter,\r\n item: menuItem\r\n });\r\n renderedItemIds.push(itemId);\r\n }\r\n return {\r\n menuItemIds: renderedItemIds,\r\n menuItems: menuItems\r\n };\r\n }\r\n\r\n export async function RenderEntityFilter(params: {\r\n attrFilter: IDictionary<string>\r\n } & IParams): Promise<{\r\n menuItemIds: string[],\r\n menuItems: MenuItem.IItem[]\r\n }> {\r\n let {attrFilter: filter, apiGetter, manager, viewer} = params;\r\n if (!manager && viewer) {\r\n manager = ViewerUtils.GetManager({\r\n viewer,\r\n createIfMissing: true\r\n });\r\n }\r\n else if (manager && !viewer) {\r\n viewer = manager.Viewer;\r\n }\r\n\r\n const item: MenuItem.Item.IEntities = {\r\n BruceEntity: {\r\n \"EntityType.ID\": <string>filter.entityTypeId,\r\n Filter: filter\r\n },\r\n Type: MenuItem.EType.Entities,\r\n Caption: \"Rendering Filtered Entities\",\r\n CameraZoomSettings: [\r\n {\r\n DisplayType: ZoomControl.EDisplayType.Model3D,\r\n LODCategoryID: \"glb\",\r\n LODLevel: 0,\r\n MaxZoom: 100000,\r\n MinZoom: 0,\r\n StyleID: 0 // 0 = Attempt to get entity type's default.\r\n }\r\n ],\r\n id: ObjectUtils.UId(),\r\n Children: []\r\n };\r\n const renderedIds = await manager.RenderItem({\r\n apiGetter: apiGetter,\r\n item: item\r\n });\r\n return {\r\n menuItemIds: [renderedIds],\r\n menuItems: [item]\r\n };\r\n }\r\n\r\n export async function RenderMenuItems(params: {\r\n menuItems: MenuItem.IItem[]\r\n } & IParams): Promise<{\r\n menuItemIds: string[]\r\n }> {\r\n let {menuItems, apiGetter, manager, viewer} = params;\r\n if (!manager && viewer) {\r\n manager = ViewerUtils.GetManager({\r\n viewer,\r\n createIfMissing: true\r\n });\r\n }\r\n else if (manager && !viewer) {\r\n viewer = manager.Viewer;\r\n }\r\n\r\n const renderedItemIds: string[] = [];\r\n for (let i = 0; i < menuItems.length; i++) {\r\n const menuItem = menuItems[i];\r\n const itemId = await params.manager.RenderItem({\r\n apiGetter: apiGetter,\r\n item: menuItem\r\n });\r\n renderedItemIds.push(itemId);\r\n }\r\n return {\r\n menuItemIds: renderedItemIds\r\n };\r\n }\r\n\r\n export async function RenderTileset(params: {\r\n tilesetId?: string\r\n tileset?: Tileset.ITileset\r\n } & IParams): Promise<{\r\n menuItemIds: string[],\r\n menuItems: MenuItem.IItem[]\r\n }> {\r\n let {tilesetId, apiGetter, viewer, manager} = params;\r\n if (!apiGetter) {\r\n apiGetter = ENVIRONMENT.Api().GetBruceGetter();\r\n }\r\n if (!manager && viewer) {\r\n manager = ViewerUtils.GetManager({\r\n viewer,\r\n createIfMissing: true\r\n });\r\n }\r\n else if (manager && !viewer) {\r\n viewer = manager.Viewer;\r\n }\r\n\r\n const api = apiGetter.getApi();\r\n let tileset = params.tileset ? params.tileset : (await Tileset.Get({\r\n api,\r\n tilesetId\r\n })).tileset;\r\n\r\n let menuItem: MenuItem.IItem = null;\r\n if (tileset.type == Tileset.EType.Cad) {\r\n menuItem = {\r\n Caption: \"Rendering Tileset\",\r\n FlyTo: false,\r\n id: ObjectUtils.UId(),\r\n tileset: {\r\n TilesetID: tilesetId\r\n },\r\n Type: MenuItem.EType.CadTileset,\r\n styleId: 0,\r\n Children: []\r\n } as MenuItem.Item.ICadTileset;\r\n }\r\n else if (tileset.type == Tileset.EType.PointCloud) {\r\n menuItem = {\r\n Caption: \"Rendering Tileset\",\r\n FlyTo: false,\r\n id: ObjectUtils.UId(),\r\n tileset: {\r\n TilesetID: tilesetId\r\n },\r\n Type: MenuItem.EType.PointCloud,\r\n Children: []\r\n } as MenuItem.Item.IPointcloud;\r\n }\r\n else if (tileset.type == Tileset.EType.EntitiesSet) {\r\n menuItem = {\r\n Caption: \"Rendering Tileset\",\r\n FlyTo: false,\r\n id: ObjectUtils.UId(),\r\n tileset: {\r\n TilesetID: tilesetId\r\n },\r\n Type: MenuItem.EType.EntityTileset,\r\n Children: []\r\n } as MenuItem.Item.IEntitiesTileset;\r\n }\r\n else if (\r\n tileset.type == Tileset.EType.LegacyStatic ||\r\n tileset.type == Tileset.EType.LegacyExternal ||\r\n tileset.type == Tileset.EType.LegacyEntitiesSet\r\n ) {\r\n menuItem = {\r\n Caption: \"Rendering Tileset\",\r\n FlyTo: false,\r\n id: ObjectUtils.UId(),\r\n tileset: {\r\n TilesetID: tilesetId\r\n },\r\n Type: MenuItem.EType.ArbTileset,\r\n Children: []\r\n } as MenuItem.Item.IArbTileset;\r\n }\r\n if (menuItem) {\r\n const renderedIds = await manager.RenderItem({\r\n item: menuItem,\r\n apiGetter: apiGetter\r\n });\r\n return {\r\n menuItems: [menuItem],\r\n menuItemIds: [renderedIds]\r\n }\r\n }\r\n return {\r\n menuItemIds: [],\r\n menuItems: []\r\n }\r\n }\r\n\r\n export async function RenderBookmarkItems(params: {\r\n viewId?: string,\r\n view?: ProjectView.View\r\n bookmarkId?: string,\r\n bookmark?: ProjectViewBookmark.Bookmark\r\n } & IParams): Promise<{\r\n menuItemIds: string[],\r\n menuItems: MenuItem.IItem[]\r\n }> {\r\n let {viewId, bookmarkId, apiGetter, manager, viewer} = params;\r\n if (!apiGetter) {\r\n apiGetter = ENVIRONMENT.Api().GetBruceGetter();\r\n }\r\n if (!manager && viewer) {\r\n manager = ViewerUtils.GetManager({\r\n viewer,\r\n createIfMissing: true\r\n });\r\n }\r\n else if (manager && !viewer) {\r\n viewer = manager.Viewer;\r\n }\r\n\r\n const api = apiGetter.getApi();\r\n const view = params.view ? params.view : (await ProjectView.Get({\r\n api,\r\n viewId\r\n })).view;\r\n const bookmark = params.bookmark ? params.bookmark : (await ProjectViewBookmark.Get({\r\n api,\r\n viewId,\r\n bookmarkId\r\n })).bookmark;\r\n\r\n if (view.DataVersion != bookmark.DataVersion) {\r\n console.warn(\"View and bookmark settings version mismatch.\");\r\n }\r\n\r\n let enabledIds: string[] = [];\r\n let menuItems: MenuItem.IItem[] = [];\r\n\r\n const version = view.DataVersion;\r\n if (view.Settings && bookmark.Settings) {\r\n if (version === 2) {\r\n const vSettings = view.Settings as ProjectView.Navigator.ISettings;\r\n const bSettings = bookmark.Settings as ProjectViewBookmark.Navigator.ISettings;\r\n menuItems = vSettings.menuItems;\r\n enabledIds = bSettings.menuItemIds;\r\n }\r\n else {\r\n const vSettings = view.Settings as ProjectView.LegacyNavigator.ISettings;\r\n const bSettings = bookmark.Settings as ProjectViewBookmark.LegacyNavigator.ISettings;\r\n menuItems = vSettings.LayersMenu;\r\n enabledIds = bSettings.selectedItemIds;\r\n }\r\n }\r\n\r\n let alternations = bookmark.Settings?.menuItemAlternations;\r\n if (!alternations) {\r\n alternations = {};\r\n }\r\n\r\n const renderedItemIds: string[] = [];\r\n if (menuItems?.length && enabledIds?.length) {\r\n const traverseItems = async (item: MenuItem.IItem) => {\r\n if (alternations[item.id]) {\r\n // The only alternation we support right now is tag menu item ones.\r\n // The project view menu item contains the instruction to enable tags, the bookmark specifies which ones.\r\n if (item.Type == MenuItem.EType.Entities) {\r\n const eItem = item as MenuItem.Item.IEntities;\r\n if (eItem.BruceEntity.ExpandLayers) {\r\n const eItemAlt = alternations[item.id] as MenuItem.Item.IEntities;\r\n eItem.BruceEntity = {\r\n ...eItem.BruceEntity,\r\n SelectedExpandLayers: eItemAlt.BruceEntity?.SelectedExpandLayers,\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (enabledIds.includes(item.id)) {\r\n const itemId = await manager.RenderItem({\r\n item: item,\r\n apiGetter: apiGetter\r\n });\r\n renderedItemIds.push(itemId);\r\n }\r\n if (item.Children) {\r\n for (let i = 0; i < item.Children.length; i++) {\r\n await traverseItems(item.Children[i]);\r\n }\r\n }\r\n }\r\n for (let i = 0; i < menuItems.length; i++) {\r\n await traverseItems(menuItems[i]);\r\n }\r\n }\r\n return {\r\n menuItemIds: renderedItemIds,\r\n menuItems: menuItems\r\n };\r\n }\r\n}","import { ProjectViewTile, BruceApi, ProjectView, ProjectViewBookmark, ProjectViewLegacyTile, Tileset, ProgramKey, ENVIRONMENT } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { EnsureNumber } from \"../internal/js-utils\";\n\nconst DEFAULT_BING_KEY = \"AqL0uYT5T84jiJeX55_b9zJeeP3MX2p1WLOHH4ljIEPZ7ZL2M81bYLzyYeSwuzzl\";\nconst DEFAULT_MAPBOX_KEY = \"pk.eyJ1IjoiYWxleHRodW5kZXIiLCJhIjoiY2psbHJxbnN5MTBvbzNxczZwMHNpeTI0MCJ9.fdoj2QW_7n8RV4e0NCFgZA\";\n\nconst re = /[\\0-\\x1F\\x7F-\\x9F\\xAD\\u0378\\u0379\\u037F-\\u0383\\u038B\\u038D\\u03A2\\u0528-\\u0530\\u0557\\u0558\\u0560\\u0588\\u058B-\\u058E\\u0590\\u05C8-\\u05CF\\u05EB-\\u05EF\\u05F5-\\u0605\\u061C\\u061D\\u06DD\\u070E\\u070F\\u074B\\u074C\\u07B2-\\u07BF\\u07FB-\\u07FF\\u082E\\u082F\\u083F\\u085C\\u085D\\u085F-\\u089F\\u08A1\\u08AD-\\u08E3\\u08FF\\u0978\\u0980\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09FC-\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A76-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF2-\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B55\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B78-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BFB-\\u0C00\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C34\\u0C3A-\\u0C3C\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5A-\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C77\\u0C80\\u0C81\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDD\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0D01\\u0D04\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D45\\u0D49\\u0D4F-\\u0D56\\u0D58-\\u0D5F\\u0D64\\u0D65\\u0D76-\\u0D78\\u0D80\\u0D81\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DF1\\u0DF5-\\u0E00\\u0E3B-\\u0E3E\\u0E5C-\\u0E80\\u0E83\\u0E85\\u0E86\\u0E89\\u0E8B\\u0E8C\\u0E8E-\\u0E93\\u0E98\\u0EA0\\u0EA4\\u0EA6\\u0EA8\\u0EA9\\u0EAC\\u0EBA\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F48\\u0F6D-\\u0F70\\u0F98\\u0FBD\\u0FCD\\u0FDB-\\u0FFF\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u137D-\\u137F\\u139A-\\u139F\\u13F5-\\u13FF\\u169D-\\u169F\\u16F1-\\u16FF\\u170D\\u1715-\\u171F\\u1737-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17DE\\u17DF\\u17EA-\\u17EF\\u17FA-\\u17FF\\u180F\\u181A-\\u181F\\u1878-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191D-\\u191F\\u192C-\\u192F\\u193C-\\u193F\\u1941-\\u1943\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DB-\\u19DD\\u1A1C\\u1A1D\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1A9F\\u1AAE-\\u1AFF\\u1B4C-\\u1B4F\\u1B7D-\\u1B7F\\u1BF4-\\u1BFB\\u1C38-\\u1C3A\\u1C4A-\\u1C4C\\u1C80-\\u1CBF\\u1CC8-\\u1CCF\\u1CF7-\\u1CFF\\u1DE7-\\u1DFB\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FC5\\u1FD4\\u1FD5\\u1FDC\\u1FF0\\u1FF1\\u1FF5\\u1FFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u2072\\u2073\\u208F\\u209D-\\u209F\\u20BB-\\u20CF\\u20F1-\\u20FF\\u218A-\\u218F\\u23F4-\\u23FF\\u2427-\\u243F\\u244B-\\u245F\\u2700\\u2B4D-\\u2B4F\\u2B5A-\\u2BFF\\u2C2F\\u2C5F\\u2CF4-\\u2CF8\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D71-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E3C-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u2FFF\\u3040\\u3097\\u3098\\u3100-\\u3104\\u312E-\\u3130\\u318F\\u31BB-\\u31BF\\u31E4-\\u31EF\\u321F\\u32FF\\u4DB6-\\u4DBF\\u9FCD-\\u9FFF\\uA48D-\\uA48F\\uA4C7-\\uA4CF\\uA62C-\\uA63F\\uA698-\\uA69E\\uA6F8-\\uA6FF\\uA78F\\uA794-\\uA79F\\uA7AB-\\uA7F7\\uA82C-\\uA82F\\uA83A-\\uA83F\\uA878-\\uA87F\\uA8C5-\\uA8CD\\uA8DA-\\uA8DF\\uA8FC-\\uA8FF\\uA954-\\uA95E\\uA97D-\\uA97F\\uA9CE\\uA9DA-\\uA9DD\\uA9E0-\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A\\uAA5B\\uAA7C-\\uAA7F\\uAAC3-\\uAADA\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F-\\uABBF\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBC2-\\uFBD2\\uFD40-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFE\\uFDFF\\uFE1A-\\uFE1F\\uFE27-\\uFE2F\\uFE53\\uFE67\\uFE6C-\\uFE6F\\uFE75\\uFEFD-\\uFF00\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFDF\\uFFE7\\uFFEF-\\uFFFB\\uFFFE\\uFFFF]/g;\n\n/**\n * Prepares a legacy imagery name for comparison.\n * Legacy data did not have ids... we do what we can.\n * @param name\n * @returns\n */\nfunction prepLegacyName(name: string): string {\n if (!name) {\n return \"\";\n }\n name = name.replace(/\\s/g, \"\");\n name = name.replace(re, \"\")\n name = name.toLowerCase();\n if (name === \"cwt\") {\n name = \"cesiumworldterrain\";\n }\n return name;\n}\n\n/**\n * Constructs an terrain provider for a default terrain type.\n * Warning: This does not add it to the viewer.\n * @param id\n * @returns\n */\nasync function renderDefaultTerrTile(id: ProjectViewTile.EDefaultTerrain): Promise<Cesium.TerrainProvider> {\n const CESIUM = Cesium as any;\n let provider: Cesium.TerrainProvider;\n switch (id) {\n case ProjectViewTile.EDefaultTerrain.CesiumWorldTerrain:\n // Handling difference between old and new cesium versions.\n if (CESIUM.createWorldTerrainAsync) {\n provider = await CESIUM.createWorldTerrainAsync({\n requestVertexNormals: true,\n requestWaterMask: false\n });\n }\n else {\n provider = Cesium.createWorldTerrain({\n requestVertexNormals: true,\n requestWaterMask: false\n });\n }\n break;\n case ProjectViewTile.EDefaultTerrain.FlatTerrain:\n provider = <any>new Cesium.EllipsoidTerrainProvider();\n break;\n case ProjectViewTile.EDefaultTerrain.LINZ:\n provider = <any>new Cesium.CesiumTerrainProvider({\n url: \"https://s3-ap-southeast-2.amazonaws.com/digitalnewzealand/PROD/Tilesets/nz-dem\",\n requestVertexNormals: true,\n requestWaterMask: false,\n requestMetadata: false\n });\n break;\n }\n return provider;\n}\n\n/**\n * Maps a legacy terrain's name to a default terrain id.\n * @param name\n * @returns\n */\nfunction legacyTerrIdToDefaultId(name: string): ProjectViewTile.EDefaultTerrain {\n name = prepLegacyName(name);\n switch (name) {\n case \"cesiumworldterrain\":\n return ProjectViewTile.EDefaultTerrain.CesiumWorldTerrain;\n case \"linz\":\n return ProjectViewTile.EDefaultTerrain.LINZ;\n case \"flatterrain\":\n return ProjectViewTile.EDefaultTerrain.FlatTerrain;\n }\n}\n\n/**\n * Returns if a given legacy terrain's name correspondings to a default source.\n * @param name\n * @returns\n */\nfunction isLegacyTerrainDefault(name: string): boolean {\n name = legacyTerrIdToDefaultId(name);\n return ProjectViewTile.DefaultTerrains.find(x => x.id == name) != null;\n}\n\n/**\n * Returns a best attempt at a unique id from a given legacy terrain source.\n * @param source\n * @returns\n */\nfunction createLegacyTerrId(source: ProjectViewLegacyTile.ITerrainSource): string {\n if (!source) {\n return \"\";\n }\n if (isLegacyTerrainDefault(source.Name)) {\n return source.Name;\n }\n if (source.SourceUrl) {\n return source.SourceUrl;\n }\n return \"\";\n}\n\n/**\n * Returns a best attempt at a unique id from a given legacy imagery source.\n * @param source\n * @returns\n */\nfunction createLegacyImageryId(source: ProjectViewLegacyTile.IMapSource): string {\n if (!source) {\n return \"\";\n }\n if (isLegacyImageryDefault(source.Name)) {\n return source.Name;\n }\n if (source.SourceUrl) {\n return source.SourceUrl;\n }\n return \"\";\n}\n\n/**\n * Turns Cesium collection of enabled imageries into an array.\n * @param viewer\n * @returns\n */\nfunction gatherEnabledImageries(viewer: Cesium.Viewer): Cesium.ImageryLayer[] {\n const collection = viewer.imageryLayers;\n const layers: Cesium.ImageryLayer[] = [];\n for (let i = 0; i < collection.length; i++) {\n const layer = collection.get(i);\n layers.push(layer);\n }\n return layers;\n}\n\nasync function findKey(apiGetter: BruceApi.IGetter, keyId: string, defaultKey: string) {\n let key: string = null;\n try {\n const {programKey: pKey} = await ProgramKey.Get({\n api: apiGetter.getApi(),\n programId: keyId\n });\n key = pKey.Key;\n }\n catch (e) {\n let doLog = true;\n if (e && typeof e === \"object\") {\n if (e.Code == \"NotFound\") {\n doLog = false;\n }\n }\n if (doLog) {\n console.error(e);\n }\n }\n return key && key.length ? key : defaultKey;\n}\n\n/**\n * Constructs an imagery provider for a default imagery type.\n * Warning: This does not add it to the viewer.\n * @param apiGetter\n * @param id\n * @returns\n */\nasync function renderDefaultMapTile(apiGetter: BruceApi.IGetter, id: ProjectViewTile.EDefaultImagery): Promise<Cesium.ImageryProvider> {\n let provider: Cesium.ImageryProvider;\n switch (id) {\n case ProjectViewTile.EDefaultImagery.BingMapsAerial:\n provider = new Cesium.BingMapsImageryProvider({\n url: \"https://dev.virtualearth.net\",\n mapStyle: Cesium.BingMapsStyle.AERIAL,\n key: await findKey(apiGetter, ProgramKey.EProgramId.BingMaps, DEFAULT_BING_KEY)\n });\n break;\n case ProjectViewTile.EDefaultImagery.BingMapsAerialWithLabels:\n provider = new Cesium.BingMapsImageryProvider({\n url: \"https://dev.virtualearth.net\",\n mapStyle: Cesium.BingMapsStyle.AERIAL_WITH_LABELS,\n key: await findKey(apiGetter, ProgramKey.EProgramId.BingMaps, DEFAULT_BING_KEY)\n });\n break;\n case ProjectViewTile.EDefaultImagery.BingMapsRoads:\n provider = new Cesium.BingMapsImageryProvider({\n url: \"https://dev.virtualearth.net\",\n mapStyle: Cesium.BingMapsStyle.ROAD_ON_DEMAND,\n key: await findKey(apiGetter, ProgramKey.EProgramId.BingMaps, DEFAULT_BING_KEY)\n });\n break;\n case ProjectViewTile.EDefaultImagery.MapboxSatellite:\n provider = new Cesium.MapboxImageryProvider({\n mapId: \"mapbox.satellite\",\n accessToken: await findKey(apiGetter, ProgramKey.EProgramId.Mapbox, DEFAULT_MAPBOX_KEY)\n });\n break;\n case ProjectViewTile.EDefaultImagery.MapBoxStreets:\n provider = new Cesium.MapboxStyleImageryProvider({\n styleId: \"satellite-streets-v11\",\n accessToken: await findKey(apiGetter, ProgramKey.EProgramId.Mapbox, DEFAULT_MAPBOX_KEY)\n });\n break;\n case ProjectViewTile.EDefaultImagery.MapBoxStreetsClassic:\n provider = new Cesium.MapboxStyleImageryProvider({\n styleId: \"streets-v11\",\n accessToken: await findKey(apiGetter, ProgramKey.EProgramId.Mapbox, DEFAULT_MAPBOX_KEY)\n });\n break;\n case ProjectViewTile.EDefaultImagery.EsriWorldImagery:\n provider = new Cesium.ArcGisMapServerImageryProvider({\n url:\"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer\",\n enablePickFeatures: false\n });\n break;\n case ProjectViewTile.EDefaultImagery.EsriWorldStreetMap:\n provider = new Cesium.ArcGisMapServerImageryProvider({\n url:\"https://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer\",\n enablePickFeatures: false\n });\n break;\n case ProjectViewTile.EDefaultImagery.EsriNationalGeographic:\n provider = new Cesium.ArcGisMapServerImageryProvider({\n url:\"https://services.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/\",\n enablePickFeatures: false\n });\n break;\n case ProjectViewTile.EDefaultImagery.OpenStreetMap:\n provider = new Cesium.OpenStreetMapImageryProvider({\n url: \"https://a.tile.openstreetmap.org/\"\n });\n break;\n case ProjectViewTile.EDefaultImagery.LINZ:\n provider = new Cesium.OpenStreetMapImageryProvider({\n url: \"https://s3-ap-southeast-2.amazonaws.com/digitalnewzealand/PROD/Tilesets/nz-img\",\n fileExtension: \"jpg\"\n });\n break;\n case ProjectViewTile.EDefaultImagery.StamenWaterColor:\n provider = new Cesium.OpenStreetMapImageryProvider({\n url: \"https://stamen-tiles.a.ssl.fastly.net/watercolor/\"\n });\n break;\n case ProjectViewTile.EDefaultImagery.StamenToner:\n provider = new Cesium.OpenStreetMapImageryProvider({\n url: \"https://stamen-tiles.a.ssl.fastly.net/toner/\"\n });\n break;\n case ProjectViewTile.EDefaultImagery.Grid:\n provider = new Cesium.GridImageryProvider({\n tilingScheme: new Cesium.GeographicTilingScheme(),\n cells: 0,\n color: Cesium.Color.fromCssColorString(\"rgb(97, 151, 237)\"),\n glowColor: Cesium.Color.fromCssColorString(\"rgb(54, 54, 54)\"),\n glowWidth: 4,\n backgroundColor: Cesium.Color.TRANSPARENT,\n tileWidth: 256,\n tileHeight: 256,\n canvasSize: 256\n });\n break;\n }\n return provider;\n}\n\n/**\n * Maps a legacy imagery's name to a default imagery id.\n * @param name\n * @returns\n */\nfunction legacyMapIdToDefaultId(name: string): ProjectViewTile.EDefaultImagery {\n name = prepLegacyName(name);\n switch (name) {\n case \"bingmapsaerial\":\n return ProjectViewTile.EDefaultImagery.BingMapsAerial;\n case \"bingmapsaerialwithlabels\":\n return ProjectViewTile.EDefaultImagery.BingMapsAerialWithLabels;\n case \"bingmapsroads\":\n return ProjectViewTile.EDefaultImagery.BingMapsRoads;\n case \"mapboxsatellite\":\n return ProjectViewTile.EDefaultImagery.MapboxSatellite;\n case \"mapboxstreets\":\n return ProjectViewTile.EDefaultImagery.MapBoxStreets;\n case \"mapboxstreetsclassic\":\n return ProjectViewTile.EDefaultImagery.MapBoxStreetsClassic;\n case \"esriworldimagery\":\n return ProjectViewTile.EDefaultImagery.EsriWorldImagery;\n case \"esriworldstreetmap\":\n return ProjectViewTile.EDefaultImagery.EsriWorldStreetMap;\n case \"esrinationalgeographic\":\n return ProjectViewTile.EDefaultImagery.EsriNationalGeographic;\n case \"openstreetmap\":\n return ProjectViewTile.EDefaultImagery.OpenStreetMap;\n case \"stamenwatercolor\":\n return ProjectViewTile.EDefaultImagery.StamenWaterColor;\n case \"stamentoner\":\n return ProjectViewTile.EDefaultImagery.StamenToner;\n case \"linz\":\n return ProjectViewTile.EDefaultImagery.LINZ;\n case \"grid\":\n return ProjectViewTile.EDefaultImagery.Grid;\n }\n}\n\n/**\n * Returns if a given legacy imagery's name correspondings to a default source.\n * @param name\n * @returns\n */\nfunction isLegacyImageryDefault(name: string): boolean {\n name = legacyMapIdToDefaultId(name);\n return ProjectViewTile.DefaultImagery.find(x => x.id == name) != null;\n}\n\n/**\n * We don't need to provide the \".\" in the file extension to Cesium's providers.\n * @param ext\n * @returns\n */\nfunction prepareFileExt(ext: string) {\n if (!ext) {\n return null;\n }\n ext = ext.replace(\".\", \"\");\n return ext;\n}\n\n/**\n * Creates an imagery layer from a given provider.\n * This exists because the constructor for it has changed between cesium versions.\n * @param provider\n * @returns\n */\nfunction createImageryLayer(provider: Cesium.ImageryProvider): TileRenderEngine.Map.LegacyNavigator.ILayerExt {\n const CIL = Cesium.ImageryLayer as any;\n if (CIL.length == 2) {\n return new CIL(provider, {});\n }\n return new CIL(provider);\n}\n\nexport namespace TileRenderEngine {\n /**\n * Legacy data did name comparisons instead of ids.\n * We need to strip spacing, remove special characters, and make lowercase before comparison...\n * @param nameA\n * @param nameB\n */\n export function CompareLegacyNames(nameA: string, nameB: string): boolean {\n nameA = prepLegacyName(nameA);\n nameB = prepLegacyName(nameB);\n return nameA === nameB;\n }\n\n export namespace Map {\n export namespace LegacyNavigator {\n export interface ILayerExt extends Cesium.ImageryLayer {\n _bId?: string;\n _bName?: string;\n }\n\n export interface IViewParams {\n bookmarkId: string;\n viewId: string;\n apiGetter?: BruceApi.IGetter;\n viewer: Cesium.Viewer;\n\n // TODO: How is render engine supposed to know about this?\n // We need a generic way for this information be feed from clients.\n ignoreIds?: string[];\n }\n\n export interface IParams {\n data: ProjectViewLegacyTile.IMapSource;\n apiGetter?: BruceApi.IGetter;\n viewer: Cesium.Viewer;\n }\n\n export async function Render(params: IParams): Promise<ILayerExt> {\n if (!params.apiGetter) {\n params.apiGetter = ENVIRONMENT.Api().GetBruceGetter();\n }\n\n const enabled: ILayerExt[] = gatherEnabledImageries(params.viewer);\n const tile = params.data;\n const bId = createLegacyImageryId(tile);\n\n let layer: ILayerExt = <ILayerExt>enabled.find(x => x._bId == bId);\n if (layer) {\n // Already exists.\n }\n else if (isLegacyImageryDefault(tile.Name)) {\n const defaultId = legacyMapIdToDefaultId(tile.Name);\n const provider = await renderDefaultMapTile(params.apiGetter, defaultId);\n if (provider) {\n layer = createImageryLayer(provider);\n }\n }\n else if (tile.SourceUrl) {\n let provider: Cesium.ImageryProvider = <any>null;\n let min = tile.Minimum;\n let max = tile.Maximum;\n if (min != undefined && min <= -1) {\n min = undefined;\n }\n if (max != undefined && max <= -1) {\n max = undefined;\n }\n\n switch (tile.Type) {\n case \"BruceImagery\":\n provider = new Cesium.UrlTemplateImageryProvider({\n url: tile.SourceUrl,\n tileHeight: 256,\n tileWidth: 256\n });\n break;\n case \"ArcGisImagery\":\n provider = new Cesium.OpenStreetMapImageryProvider({\n url: tile.SourceUrl,\n fileExtension: prepareFileExt(tile.FileExtension),\n minimumLevel: min,\n maximumLevel: max\n });\n break;\n case \"TileMapImagery\":\n provider = new Cesium.TileMapServiceImageryProvider({\n url: tile.SourceUrl,\n fileExtension: prepareFileExt(tile.FileExtension),\n minimumLevel: min,\n maximumLevel: max\n });\n break;\n case \"OpenStreetMapImagery\":\n provider = new Cesium.OpenStreetMapImageryProvider({\n url: tile.SourceUrl,\n fileExtension: prepareFileExt(tile.FileExtension),\n minimumLevel: min,\n maximumLevel: max\n });\n break;\n case \"MapBoxImagery\":\n var mapboxKey = tile.ProgramKey ? tile.ProgramKey : await findKey(params.apiGetter, ProgramKey.EProgramId.Mapbox, null);\n provider = new Cesium.UrlTemplateImageryProvider({\n url: \"https://api.mapbox.com/styles/v1/\"\n + tile.MapBoxUsername + \"/\" + tile.MapBoxID +\n \"/tiles/256/{z}/{x}/{y}?access_token=\"\n + mapboxKey\n });\n break;\n }\n if (provider) {\n layer = createImageryLayer(provider);\n }\n }\n\n if (layer) {\n layer._bId = bId;\n layer._bName = tile.Name;\n if (!params.viewer.imageryLayers.contains(layer)) {\n params.viewer.imageryLayers.add(layer);\n }\n }\n return layer;\n }\n\n export async function RenderView(params: IViewParams): Promise<void> {\n if (!params.apiGetter) {\n params.apiGetter = ENVIRONMENT.Api().GetBruceGetter();\n }\n\n const api = params.apiGetter.getApi();\n\n const view = (await ProjectView.Get({\n api,\n viewId: params.viewId\n })).view as ProjectView.LegacyNavigator.IView;\n\n let bookmark: ProjectViewBookmark.LegacyNavigator.IBookmark = <any>null;\n if (params.bookmarkId) {\n bookmark = (await ProjectViewBookmark.Get({\n api,\n viewId: params.viewId,\n bookmarkId: params.bookmarkId\n })).bookmark as ProjectViewBookmark.LegacyNavigator.IBookmark;\n }\n\n const vSettings = view.Settings;\n const bSettings = bookmark?.Settings;\n\n const data: ProjectViewLegacyTile.IMapSource[] = [];\n const dataNames: string[] = [];\n if (bSettings?.imagery) {\n for (let i = 0; i < bSettings.imagery.length; i++) {\n const source = bSettings.imagery[i];\n dataNames.push(source.title);\n }\n }\n else if (vSettings?.DefaultMapTiles) {\n dataNames.push(vSettings.DefaultMapTiles);\n }\n const tiles = vSettings?.CesiumMapSources ?? [];\n await ProjectViewLegacyTile.MergeMapTemplateData({\n getter: params.apiGetter,\n sources: tiles,\n addIfMissing: vSettings?.CesiumMapSources == null\n });\n\n for (let i = 0; i < dataNames.length; i++) {\n const name = dataNames[i];\n for (let j = 0; j < tiles.length; j++) {\n const tile = tiles[j];\n if (CompareLegacyNames(tile.Name, name)) {\n data.push(tile);\n break;\n }\n }\n }\n\n let enabled: ILayerExt[] = gatherEnabledImageries(params.viewer);\n const layers: Cesium.ImageryLayer[] = [];\n\n // Gather layers we want to render.\n // Any new layer is added to viewer at the bottom.\n if (params.ignoreIds) {\n for (let i = 0; i < params.ignoreIds.length; i++) {\n const id = params.ignoreIds[i];\n const layer = enabled.find((x) => {\n const layer = x as ILayerExt;\n if (layer._bId === id) {\n return true;\n }\n });\n if (layer) {\n layers.push(layer);\n }\n }\n }\n\n for (let i = 0; i < data.length; i++) {\n const tile = data[i];\n const layer = await Render({\n apiGetter: params.apiGetter,\n viewer: params.viewer,\n data: tile,\n });\n if (layer) {\n layers.push(layer);\n }\n }\n\n // Sort currently enabled (after new ones added) to match desired order.\n enabled = gatherEnabledImageries(params.viewer);\n enabled.sort((a, b) => {\n const indexA = layers.indexOf(a);\n const indexB = layers.indexOf(b);\n if (indexA < 0 && indexB < 0) {\n return 0;\n }\n if (indexA < 0) {\n return 1;\n }\n if (indexB < 0) {\n return -1;\n }\n return indexA - indexB;\n });\n\n // Move enabled layers to match desired order.\n // Remove any layers that aren't in enabled list.\n for (let i = 0; i < enabled.length; i++) {\n const layer = enabled[i];\n if (layers.includes(layer)) {\n params.viewer.imageryLayers.raiseToTop(layer);\n }\n else {\n params.viewer.imageryLayers.remove(layer);\n }\n }\n }\n }\n\n export namespace Navigator {\n export interface IProviderExt extends Cesium.ImageryLayer {\n _bMeta?: ProjectViewTile.ITileMeta;\n }\n\n export interface IParams {\n apiGetter?: BruceApi.IGetter;\n viewer: Cesium.Viewer;\n tiles: ProjectViewTile.IBookmarkImagery[];\n }\n\n export async function GetOrCreateLayer(params: {\n viewer: Cesium.Viewer,\n apiGetter?: BruceApi.IGetter,\n meta: ProjectViewTile.ITileMeta\n }): Promise<Cesium.ImageryLayer> {\n let {viewer, apiGetter, meta} = params;\n if (!apiGetter) {\n apiGetter = ENVIRONMENT.Api().GetBruceGetter();\n }\n\n // Don't create a new layer if one already exists.\n const enabled = gatherEnabledImageries(viewer);\n for (let i = 0; i < enabled.length; i++) {\n const layer = enabled[i];\n const layerMeta = (layer as IProviderExt)._bMeta;\n if (layerMeta && layerMeta.tilesetId === meta.tilesetId && layerMeta.accountId === meta.accountId) {\n return layer;\n }\n }\n\n const defaultImg = meta.accountId ? null : ProjectViewTile.DefaultImagery.find(\n x => x.id === meta.tilesetId\n );\n\n let provider: Cesium.ImageryProvider = <any>null;\n if (defaultImg) {\n provider = await renderDefaultMapTile(apiGetter, defaultImg.id);\n }\n else {\n const api = apiGetter.getApi(meta.accountId);\n // Ensure regional url is loaded.\n // When loading stuff in the same account as the default it's likely already loaded,\n // but if we just made an API instance for some external account then it won't be loaded yet.\n await api.Loading;\n\n const {tileset} = await Tileset.Get({\n api,\n tilesetId: meta.tilesetId\n });\n\n let boundaries: Cesium.Rectangle = undefined;\n const settings = tileset?.settings as Tileset.Settings.IEntitiesMap;\n if (settings && settings.boundaries) {\n const minLat = settings.boundaries.minLatitude;\n const maxLat = settings.boundaries.maxLatitude;\n const minLon = settings.boundaries.minLongitude;\n const maxLon = settings.boundaries.maxLongitude;\n boundaries = Cesium.Rectangle.fromDegrees(minLon, minLat, maxLon, maxLat);\n }\n let minLevel = settings?.levelMin;\n let maxLevel = settings?.levelMax;\n const hasLevels = !isNaN(minLevel) && !isNaN(maxLevel);\n\n if (tileset.type === Tileset.EType.GeoMap) {\n provider = new Cesium.TileMapServiceImageryProvider({\n url: Tileset.GetPublicFileUrl({\n api,\n tilesetId: meta.tilesetId,\n file: \"\",\n viaCdn: true,\n viaCdnCacheToken: tileset.generateVersion\n }),\n fileExtension: \"png\",\n // Tested to not cause increased lag.\n rectangle: boundaries,\n maximumLevel: hasLevels ? maxLevel : undefined,\n minimumLevel: hasLevels ? minLevel : undefined,\n });\n }\n else if (tileset.type === Tileset.EType.ExternalGeoMap) {\n const settings = tileset.settings as Tileset.Settings.IExternalMap;\n switch (settings.mapType) {\n case Tileset.Settings.EExternalMapType.CesiumIon:\n var cesiumIonKey = settings.key ? settings.key : await findKey(apiGetter, ProgramKey.EProgramId.CesiumIon, null);\n provider = new Cesium.IonImageryProvider({\n assetId: Number(settings.externalId),\n accessToken: cesiumIonKey\n });\n break;\n case Tileset.Settings.EExternalMapType.MapBoxImagery:\n var mapboxKey = settings.key ? settings.key : await findKey(apiGetter, ProgramKey.EProgramId.Mapbox, null);\n provider = new Cesium.UrlTemplateImageryProvider({\n url: \"https://api.mapbox.com/styles/v1/\"\n + settings.account + \"/\" + settings.styleId +\n \"/tiles/256/{z}/{x}/{y}?access_token=\"\n + mapboxKey\n });\n break;\n case Tileset.Settings.EExternalMapType.OpenStreetMapImagery:\n provider = new Cesium.OpenStreetMapImageryProvider({\n url: settings.url,\n fileExtension: prepareFileExt(settings.fileExtension),\n // Unused until tested properly. In the past these settings caused large lag.\n // rectangle: boundaries,\n // maximumLevel: hasLevels ? maxLevel : undefined,\n // minimumLevel: hasLevels ? minLevel : undefined,\n });\n break;\n case Tileset.Settings.EExternalMapType.TileMapImagery:\n provider = new Cesium.TileMapServiceImageryProvider({\n url: settings.url,\n fileExtension: prepareFileExt(settings.fileExtension),\n // Unused until tested properly. In the past these settings caused large lag.\n // rectangle: boundaries,\n // maximumLevel: hasLevels ? maxLevel : undefined,\n // minimumLevel: hasLevels ? minLevel : undefined,\n });\n break;\n }\n }\n else if (tileset.type === Tileset.EType.EntitiesMap) {\n provider = new Cesium.UrlTemplateImageryProvider({\n url: Tileset.GetPublicFileUrl({\n api,\n tilesetId: meta.tilesetId,\n file: \"{z}/{x}/{y}.png\",\n viaCdn: true,\n viaCdnCacheToken: tileset.generateVersion\n }),\n tileHeight: 256,\n tileWidth: 256\n // Unused until tested properly. In the past these settings caused large lag.\n // rectangle: boundaries,\n // minimumLevel: hasLevels ? minLevel : undefined,\n // maximumLevel: hasLevels ? maxLevel : undefined,\n });\n }\n }\n if (provider) {\n // We need some way to add meta without appending to layers.\n // Adding to layers triggers an event, if meta is missing then we'll not know what imagery is enabled.\n // In the meantime we use \"lowerToBottom\" to trigger a secondary event with updated data...\n const layer: IProviderExt = viewer.imageryLayers.addImageryProvider(provider);\n layer._bMeta = meta;\n viewer.imageryLayers.lowerToBottom(layer);\n return layer;\n }\n return null;\n }\n\n export async function Render(params: IParams) {\n if (!params.apiGetter) {\n params.apiGetter = ENVIRONMENT.Api().GetBruceGetter();\n }\n\n // Ensure layers exist for all enabled sources.\n for (let i = 0; i < params.tiles.length; i++) {\n const enabled = params.tiles[i];\n await GetOrCreateLayer({\n viewer: params.viewer, \n apiGetter: params.apiGetter, \n meta: {\n accountId: enabled.accountId,\n tilesetId: enabled.tilesetId,\n }\n })\n }\n\n const curEnabled = params.viewer.imageryLayers;\n const toDisable: IProviderExt[] = [];\n const curEnabledArr: IProviderExt[] = [];\n\n for (let i = 0; i < curEnabled.length; i++) {\n const layer = curEnabled.get(i) as IProviderExt;\n const meta = layer?._bMeta;\n const disable = !params.tiles.find(x => x.accountId === meta?.accountId && x.tilesetId === meta?.tilesetId);\n if (disable) {\n toDisable.push(layer);\n }\n else {\n curEnabledArr.push(layer);\n }\n }\n for (let i = 0; i < toDisable.length; i++) {\n params.viewer.imageryLayers.remove(toDisable[i]);\n }\n\n for (let i = 0; i < params.tiles.length; i++) {\n const enabled = params.tiles[i];\n const layer = curEnabledArr.find(x => x._bMeta?.accountId === enabled.accountId && x._bMeta?.tilesetId === enabled.tilesetId);\n if (layer) {\n params.viewer.imageryLayers.raiseToTop(layer);\n layer.alpha = EnsureNumber(enabled.alpha == null ? 1 : enabled.alpha);\n layer.brightness = EnsureNumber(enabled.brightness == null ? 1 : enabled.brightness);\n layer.contrast = EnsureNumber(enabled.contrast == null ? 1 : enabled.contrast);\n layer.hue = EnsureNumber(enabled.hue == null ? 0 : enabled.hue);\n layer.saturation = EnsureNumber(enabled.saturation == null ? 1 : enabled.saturation);\n layer.gamma = EnsureNumber(enabled.gamma == null ? 1 : enabled.gamma);\n }\n }\n }\n }\n }\n\n export namespace Terrain {\n export namespace LegacyNavigator {\n export interface IProviderExt extends Cesium.CesiumTerrainProvider {\n _bId: string;\n _bName: string;\n }\n\n export interface IParams {\n data: ProjectViewLegacyTile.ITerrainSource;\n viewer: Cesium.Viewer;\n }\n\n export interface IViewParams {\n bookmarkId: string;\n viewId: string;\n apiGetter?: BruceApi.IGetter;\n viewer: Cesium.Viewer;\n }\n\n export async function Render(params: IParams): Promise<void> {\n const bId = createLegacyTerrId(params.data);\n const curProvider = params.viewer.terrainProvider as IProviderExt;\n if (curProvider._bId && curProvider._bId === bId) {\n return;\n }\n\n let provider: IProviderExt = <any>null;\n if (isLegacyTerrainDefault(params.data.Name)) {\n const id = legacyTerrIdToDefaultId(params.data.Name);\n provider = await renderDefaultTerrTile(id) as IProviderExt;\n }\n else if (params.data.SourceUrl) {\n provider = <any>new Cesium.CesiumTerrainProvider({\n url: <string>params.data.SourceUrl,\n requestWaterMask: params.data.RequestWaterMask,\n requestVertexNormals: true\n });\n }\n if (provider) {\n provider._bId = bId;\n provider._bName = params.data?.Name;\n params.viewer.terrainProvider = provider;\n }\n }\n\n export async function RenderView(params: IViewParams): Promise<void> {\n if (!params.apiGetter) {\n params.apiGetter = ENVIRONMENT.Api().GetBruceGetter();\n }\n\n const api = params.apiGetter.getApi();\n const view = (await ProjectView.Get({\n api,\n viewId: params.viewId\n })).view as ProjectView.LegacyNavigator.IView;\n let bookmark: ProjectViewBookmark.LegacyNavigator.IBookmark = <any>null;\n if (params.bookmarkId) {\n bookmark = (await ProjectViewBookmark.Get({\n api,\n viewId: params.viewId,\n bookmarkId: params.bookmarkId\n })).bookmark as ProjectViewBookmark.LegacyNavigator.IBookmark;\n }\n\n const vSettings = view.Settings;\n const bSettings = bookmark?.Settings;\n\n let terrainTiles = vSettings?.CesiumTerrainSources ?? [];\n let terrainTile: ProjectViewLegacyTile.ITerrainSource = <any>null;\n let terrainTileName: string = <any>null;\n if (bookmark?.Settings?.terrain) {\n terrainTileName = bSettings.terrain;\n }\n else {\n terrainTileName = <string>vSettings?.DefaultTerrain;\n }\n await ProjectViewLegacyTile.MergeTerrainTemplateData({\n getter: params.apiGetter,\n sources: terrainTiles,\n addIfMissing: vSettings?.CesiumTerrainSources == null\n });\n for (let i = 0; i < terrainTiles.length; i++) {\n const tile = terrainTiles[i];\n if (TileRenderEngine.CompareLegacyNames(tile.Name, terrainTileName)) {\n terrainTile = tile;\n break;\n }\n }\n if (terrainTile) {\n await Render({\n data: terrainTile,\n viewer: params.viewer,\n });\n }\n }\n }\n\n export namespace Navigator {\n export interface IProviderExt extends Cesium.CesiumTerrainProvider {\n _bMeta?: ProjectViewTile.ITileMeta;\n }\n\n export interface IParams {\n apiGetter?: BruceApi.IGetter;\n viewer: Cesium.Viewer;\n tile: ProjectViewTile.IBookmarkTerrain;\n }\n\n export async function Render(params: IParams): Promise<void> {\n if (!params.apiGetter) {\n params.apiGetter = ENVIRONMENT.Api().GetBruceGetter();\n }\n\n // Already enabled.\n const enabledMeta = (params.viewer.terrainProvider as IProviderExt)?._bMeta;\n if (\n enabledMeta?.tilesetId === params.tile.tilesetId &&\n enabledMeta?.accountId === params.tile.accountId\n ) {\n return;\n }\n // Known default that may have been enabled prior to utility doing it.\n if (!enabledMeta) {\n const provider = params.viewer.terrainProvider as IProviderExt;\n let leave = false;\n if (\n params.tile.tilesetId == ProjectViewTile.EDefaultTerrain.FlatTerrain &&\n provider instanceof Cesium.EllipsoidTerrainProvider\n ) {\n leave = true;\n }\n // TODO: Check for cesium world terrain if we can easily determine that it's enabled.\n if (leave) {\n provider._bMeta = {\n tilesetId: params.tile.tilesetId,\n accountId: params.tile.accountId\n }\n return;\n }\n }\n\n const defaultTerr = params.tile.accountId ? null : ProjectViewTile.DefaultTerrains.find(\n x => x.id === params.tile.tilesetId\n );\n\n let provider: IProviderExt = null;\n if (defaultTerr) {\n provider = await renderDefaultTerrTile(defaultTerr.id) as IProviderExt;\n }\n else {\n const api = params.apiGetter.getApi(params.tile.accountId);\n // Ensure regional url is loaded.\n // When loading stuff in the same account as the default it's likely already loaded,\n // but if we just made an API instance for some external account then it won't be loaded yet.\n await api.Loading;\n\n const {tileset} = await Tileset.Get({\n api,\n tilesetId: params.tile.tilesetId\n });\n\n let url: string;\n let vertexes: boolean = true;\n if (tileset.type === Tileset.EType.Terrain) {\n url = Tileset.GetPublicFileUrl({\n api,\n tilesetId: tileset.id,\n file: \"\",\n viaCdn: true,\n viaCdnCacheToken: tileset.generateVersion\n });\n }\n else if (tileset.type === Tileset.EType.ExternalTerrain) {\n const settings = tileset.settings as Tileset.Settings.IExternalTerrain;\n url = settings.url;\n vertexes = settings.requestVertexNormals == null ? true : settings.requestVertexNormals;\n }\n else {\n console.error(\"Invalid tileset type.\", tileset);\n }\n\n if (url) {\n provider = new Cesium.CesiumTerrainProvider({\n url: url,\n requestVertexNormals: vertexes\n });\n }\n }\n\n if (provider) {\n provider._bMeta = {\n accountId: params.tile.accountId,\n tilesetId: params.tile.tilesetId\n };\n params.viewer.terrainProvider = provider;\n }\n }\n }\n }\n}","import { ProjectViewBookmark, ProjectViewTile } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { TileRenderEngine } from \"../rendering/tile-render-engine\";\n\nexport const CESIUM_INSPECTOR_KEY = \"_nextspace_inspector\";\n\nexport namespace ViewUtils {\n export function GatherLegacyMapTiles(params: {\n viewer: Cesium.Viewer\n }): {\n imagery: ProjectViewBookmark.LegacyNavigator.IBookmarkImagery[]\n } {\n const viewer = params.viewer;\n const collection = viewer.imageryLayers;\n const tiles: ProjectViewBookmark.LegacyNavigator.IBookmarkImagery[] = [];\n for (let i = 0; i < collection.length; i++) {\n const layer = collection.get(i) as TileRenderEngine.Map.LegacyNavigator.ILayerExt;\n if (layer._bName) {\n tiles.push({\n alpha: layer.alpha,\n brightness: layer.brightness,\n contrast: layer.contrast,\n hue: layer.hue,\n saturation: layer.saturation,\n gamma: layer.gamma,\n title: layer._bName,\n });\n }\n }\n return {\n imagery: tiles.reverse()\n };\n }\n\n export function GatherLegacyTerrainTile(params: {\n viewer: Cesium.Viewer\n }): {\n terrain: string\n } {\n const viewer = params.viewer;\n const enabled = viewer.terrainProvider as TileRenderEngine.Terrain.LegacyNavigator.IProviderExt;\n if (enabled?._bName) {\n return {\n terrain: enabled._bName\n };\n }\n return {\n terrain: \"flatterrain\"\n };\n }\n\n export function GatherMapTiles(params: {\n viewer: Cesium.Viewer\n }): {\n imagery: ProjectViewTile.IBookmarkImagery[]\n } {\n const viewer = params.viewer;\n const imagery = viewer.imageryLayers;\n const tiles: ProjectViewTile.IBookmarkImagery[] = [];\n for (let i = 0; i < imagery.length; i++) {\n const provider = imagery.get(i) as TileRenderEngine.Map.Navigator.IProviderExt;\n if (provider._bMeta) {\n const idCombo = provider._bMeta.accountId + provider._bMeta.tilesetId;\n if (!tiles.find(x => x.accountId + x.tilesetId === idCombo)) {\n tiles.push({\n accountId: provider._bMeta.accountId,\n tilesetId: provider._bMeta.tilesetId,\n alpha: provider.alpha,\n brightness: provider.brightness,\n contrast: provider.contrast,\n hue: provider.hue,\n saturation: provider.saturation,\n gamma: provider.gamma\n });\n }\n }\n }\n return {\n imagery: tiles\n };\n }\n\n export function GatherTerrainTile(params: {\n viewer: Cesium.Viewer\n }): {\n terrain: ProjectViewTile.IBookmarkTerrain\n } {\n const viewer = params.viewer;\n const provider = viewer.terrainProvider as TileRenderEngine.Terrain.Navigator.IProviderExt;\n if (provider._bMeta) {\n return {\n terrain: {\n accountId: provider._bMeta.accountId,\n tilesetId: provider._bMeta.tilesetId,\n }\n };\n }\n return null;\n }\n\n export function SetTerrainWireframeStatus(params: {\n viewer: Cesium.Viewer,\n status: boolean\n }) {\n if (!params.viewer[CESIUM_INSPECTOR_KEY]) {\n const InspectorClass = Cesium.CesiumInspector as any;\n if (InspectorClass) {\n const inspector = new InspectorClass(document.createElement(\"div\"), params.viewer.scene);\n (inspector.container as HTMLElement).style.display = \"none\";\n params.viewer[CESIUM_INSPECTOR_KEY] = inspector;\n }\n }\n if (params.viewer[CESIUM_INSPECTOR_KEY]) {\n params.viewer[CESIUM_INSPECTOR_KEY].viewModel.wireframe = params.status;\n }\n }\n\n export function GetTerrainWireframeStatus(params: {\n viewer: Cesium.Viewer\n }) {\n if (!params.viewer[CESIUM_INSPECTOR_KEY]) {\n return false;\n }\n return params.viewer[CESIUM_INSPECTOR_KEY]?.viewModel?.wireframe;\n }\n}","import { ENVIRONMENT, BruceApi, Camera, Carto, MenuItem, ProjectView, ProjectViewBookmark, ProjectViewTile, } from \"bruce-models\";\nimport { MenuItemManager } from \"./menu-item-manager\";\nimport { MenuItemCreator } from \"./menu-item-creator\";\nimport * as Cesium from \"cesium\";\nimport { TileRenderEngine } from \"./tile-render-engine\";\nimport { EnsureNumber } from \"../internal/js-utils\";\nimport { ViewUtils } from \"../utils/view-utils\";\nimport { ViewerUtils } from \"../viewer/viewer-utils\";\n\n// TODO: Move these to the data model.\nconst MIN_SHADOW_SIZE = 2048;\nconst MAX_SHADOW_SIZE = 32768;\nconst RELATION_MENU_ITEM_ID = \"BOOKMARK_ENTITY_RELATIONS\";\n\n/**\n * Renders DATA_VERSION = 1 navigator.\n * @param params\n * @param bookmark\n * @param view\n */\nasync function renderLegacyNavigator(\n params: ViewRenderEngine.IRenderParams,\n bookmark: ProjectViewBookmark.LegacyNavigator.IBookmark,\n view: ProjectView.LegacyNavigator.IView\n) {\n const vSettings = view.Settings as ProjectView.LegacyNavigator.ISettings;\n const bSettings = bookmark?.Settings as ProjectViewBookmark.LegacyNavigator.ISettings;\n const manager = params.manager;\n const VR = manager.VisualsRegister;\n const scene = manager.Viewer.scene;\n\n await TileRenderEngine.Terrain.LegacyNavigator.RenderView({\n apiGetter: params.apiGetter,\n bookmarkId: <string>params.bookmarkId,\n viewer: manager.Viewer,\n viewId: params.viewId,\n });\n\n await TileRenderEngine.Map.LegacyNavigator.RenderView({\n apiGetter: params.apiGetter,\n bookmarkId: <string>params.bookmarkId,\n viewer: manager.Viewer,\n viewId: params.viewId,\n ignoreIds: []\n });\n\n let baseColor = bSettings?.globeColor;\n if (baseColor == null) {\n // TODO: Need global default.\n baseColor = \"#0326BE\";\n }\n scene.globe.baseColor = Cesium.Color.fromCssColorString(baseColor);\n\n // TODO: Other scene settings.\n // TODO: Rendered relationships.\n\n VR.ClearHidden();\n if (bSettings?.hiddenEntityIds?.length) {\n VR.SetHidden({\n entityIds: bSettings.hiddenEntityIds,\n hidden: true\n });\n }\n\n let frustum = bSettings?.cameraFrustum;\n if (frustum == null) {\n frustum = Camera.EFrustum.Perspective;\n }\n const curFrustum = scene.camera.frustum instanceof Cesium.OrthographicFrustum ? Camera.EFrustum.Orthographic : Camera.EFrustum.Perspective;\n if (curFrustum != frustum) {\n if (frustum == Camera.EFrustum.Perspective) {\n scene.camera.switchToPerspectiveFrustum();\n scene.screenSpaceCameraController.enableTilt = true;\n }\n else {\n scene.camera.switchToOrthographicFrustum();\n scene.screenSpaceCameraController.enableTilt = false;\n }\n params.skipTransition = true;\n }\n\n if (!params.skipCamera) {\n const camera = bookmark?.Camera;\n const pos = camera ? Cesium.Cartesian3.fromDegrees(\n +camera.position.longitude,\n +camera.position.latitude,\n +camera.position.height\n ) : null;\n if (pos?.x) {\n manager.Viewer.scene.camera.flyTo({\n destination: pos,\n orientation: {\n heading: +camera.heading,\n pitch: +camera.pitch,\n roll: +camera.roll\n },\n duration: params.skipTransition ? 0 : 2\n });\n }\n }\n\n let go = bookmark?.Settings?.groundOcclusion;\n if (go == null) {\n go = vSettings?.GroundOcclusion;\n }\n if (go == null) {\n go = false;\n }\n manager.Viewer.scene.globe.depthTestAgainstTerrain = go;\n\n const fxaa = manager.Viewer.scene.postProcessStages.fxaa;\n fxaa.enabled = true;\n\n let pointer = bSettings?.timelineSettings?.timelinePointer;\n if (pointer != null) {\n const clock = manager.Viewer.clock;\n // Back and forth conversion so we aren't feeding Cesium an object instead of class instance.\n // This is pretty blegh.\n const timeStr = Cesium.JulianDate.toIso8601(pointer)\n clock.currentTime = Cesium.JulianDate.fromIso8601(timeStr);\n }\n\n const enabledItems = manager.GetEnabledItemIds();\n const newItemIds = bSettings?.selectedItemIds ?? [];\n for (const id of enabledItems) {\n if (\n newItemIds.indexOf(id) === -1 ||\n id == RELATION_MENU_ITEM_ID\n ) {\n params.manager.RemoveItemById({\n menuItemId: id\n });\n }\n }\n\n if (bookmark) {\n await MenuItemCreator.RenderBookmarkItems({\n apiGetter: params.apiGetter,\n manager,\n view,\n bookmark\n });\n }\n if (bSettings?.drawnRelationEntityIDs?.length) {\n const menuItem = {\n id: RELATION_MENU_ITEM_ID,\n Caption: \"Entity relations\",\n BruceEntity: {\n EntityIds: bSettings.drawnRelationEntityIDs\n },\n Type: MenuItem.EType.Relations\n } as MenuItem.Item.IEntityRelations;\n await params.manager.RenderItem({\n apiGetter: params.apiGetter,\n item: menuItem\n });\n }\n}\n\n/**\n * Renders DATA_VERSION > 1 navigator.\n * @param params\n * @param bookmark\n * @param view\n */\nasync function renderNavigator(\n params: ViewRenderEngine.IRenderParams,\n bookmark: ProjectViewBookmark.Navigator.IBookmark,\n view: ProjectView.Navigator.IView\n) {\n const viewer = params.manager.Viewer;\n const scene = viewer.scene;\n\n const vSettings = view.Settings as ProjectView.Navigator.ISettings;\n const bSettings = (bookmark?.Settings ?? {}) as ProjectViewBookmark.Navigator.ISettings;\n const defaults = vSettings.defaults ?? {};\n\n let camera = (bookmark?.Camera ?? {}) as ProjectViewBookmark.Navigator.ICamera;\n if (!Carto.ValidateCarto(camera)) {\n camera = {\n ...camera,\n altitude: defaults.camera?.altitude,\n latitude: defaults.camera?.latitude,\n longitude: defaults.camera?.longitude,\n heading: defaults.camera?.heading,\n pitch: defaults.camera?.pitch,\n roll: defaults.camera?.roll\n }\n }\n\n let newLens = camera.cameraFrustum;\n if (newLens == null) {\n newLens = defaults.camera?.cameraFrustum;\n }\n if (newLens == null) {\n // TODO: Need global default.\n newLens = Camera.EFrustum.Perspective;\n }\n const modePicker = viewer?.sceneModePicker as any;\n const is2d = modePicker?.viewModel?.sceneMode === Cesium.SceneMode.SCENE2D;\n const curLens = is2d ? Camera.EFrustum.Orthographic : Camera.EFrustum.Perspective;\n if (newLens != curLens) {\n const modePicker = viewer?.sceneModePicker as any;\n if (modePicker) {\n modePicker.viewModel.duration = 0;\n if (newLens == Camera.EFrustum.Perspective) {\n modePicker.viewModel._morphTo3D();\n }\n else {\n modePicker.viewModel._morphTo2D();\n }\n }\n }\n\n if (!params.skipCamera) {\n let transition = params.skipTransition ? 0 : curLens === newLens ? camera.transition : 0;\n if (transition == null) {\n transition = defaults.camera?.transition;\n }\n if (transition == null) {\n // TODO: Need global default.\n transition = 2000;\n }\n\n if (Carto.ValidateCarto(camera)) {\n const pos = Cesium.Cartesian3.fromDegrees(\n +camera.longitude,\n +camera.latitude,\n +camera.altitude\n );\n scene.camera.flyTo({\n destination: pos,\n orientation: {\n heading: Cesium.Math.toRadians(+camera.heading),\n pitch: Cesium.Math.toRadians(+camera.pitch),\n roll: Cesium.Math.toRadians(+camera.roll)\n },\n duration: transition != 0 ? transition / 1000 : 0\n });\n }\n }\n\n const terrain = bSettings?.terrain != null ? bSettings?.terrain : defaults.settings?.terrain;\n if (terrain) {\n await TileRenderEngine.Terrain.Navigator.Render({\n apiGetter: params.apiGetter,\n tile: terrain,\n viewer: params.manager.Viewer,\n });\n }\n\n let gOcclusion = bSettings?.groundOcclusion;\n if (gOcclusion == null) {\n gOcclusion = defaults?.settings?.groundOcclusion;\n }\n if (gOcclusion == null) {\n // TODO: Need global default.\n gOcclusion = true;\n }\n scene.globe.depthTestAgainstTerrain = Boolean(gOcclusion);\n\n let hillShades = bookmark?.Settings?.hillShades;\n if (hillShades == null) {\n hillShades = defaults?.settings?.hillShades;\n }\n if (hillShades == null) {\n hillShades = true;\n }\n scene.globe.enableLighting = Boolean(hillShades);\n\n let baseColor = bSettings?.globeColor;\n if (baseColor == null) {\n baseColor = defaults.settings?.globeColor;\n }\n if (baseColor == null) {\n // TODO: Need global default.\n baseColor = \"#0326BE\";\n }\n scene.globe.baseColor = Cesium.Color.fromCssColorString(baseColor);\n\n let globeHidden = bSettings?.globeHidden;\n if (globeHidden == null) {\n globeHidden = defaults.settings?.globeHidden;\n }\n if (globeHidden == null) {\n globeHidden = false;\n }\n scene.globe.show = !globeHidden;\n\n let terrainWireframe = bSettings?.terrainWireframe;\n if (terrainWireframe == null) {\n terrainWireframe = defaults.settings?.terrainWireframe;\n }\n if (terrainWireframe == null) {\n terrainWireframe = false;\n }\n ViewUtils.SetTerrainWireframeStatus({\n status: terrainWireframe,\n viewer: viewer\n })\n\n let globeAlpha = +bSettings?.globeAlpha;\n if (isNaN(globeAlpha)) {\n globeAlpha = +defaults.settings?.globeAlpha;\n }\n if (!scene.globe.translucency.enabled) {\n scene.globe.translucency.enabled = true;\n scene.globe.translucency.frontFaceAlphaByDistance = new Cesium.NearFarScalar(\n 400.0,\n 0.0,\n 800.0,\n 1.0\n );\n scene.globe.translucency.frontFaceAlphaByDistance.farValue = 1;\n }\n scene.globe.translucency.frontFaceAlphaByDistance.nearValue = EnsureNumber(globeAlpha, 1);\n\n let shadows = bSettings?.shadows;\n if (shadows == null) {\n shadows = defaults?.settings?.shadows;\n }\n if (shadows == null) {\n // Experimenting with default on.\n shadows = {\n enabled: true\n } as ProjectViewBookmark.Navigator.IShadows;\n }\n if (shadows.enabled) {\n viewer.shadows = true;\n viewer.shadowMap.enabled = true;\n let size = EnsureNumber(shadows.pixelSize);\n if (size < MIN_SHADOW_SIZE) {\n size = MIN_SHADOW_SIZE;\n }\n else if (size > MAX_SHADOW_SIZE) {\n size = MAX_SHADOW_SIZE;\n }\n viewer.shadowMap.size = size;\n viewer.shadowMap.softShadows = Boolean(shadows.soften);\n viewer.shadowMap.darkness = EnsureNumber(shadows.darkness, 0.5);\n }\n else {\n viewer.shadows = false;\n viewer.shadowMap.enabled = false;\n }\n\n let ambientOcclusion = bSettings?.ambientOcclusion;\n if (ambientOcclusion == null) {\n ambientOcclusion = defaults?.settings?.ambientOcclusion;\n }\n if (ambientOcclusion == null) {\n ambientOcclusion = {\n enabled: false\n } as ProjectViewBookmark.Navigator.IAmbientOcclusion;\n }\n const AO = viewer.scene.postProcessStages.ambientOcclusion;\n if (ambientOcclusion.enabled) {\n AO.enabled = true;\n }\n else {\n AO.enabled = false;\n }\n if (AO.uniforms) {\n AO.uniforms.intensity = EnsureNumber(ambientOcclusion.intensity, 2.0);\n AO.uniforms.lengthCap = EnsureNumber(ambientOcclusion.lengthCap, 0.2);\n AO.uniforms.bias = EnsureNumber(ambientOcclusion.bias, 0.5);\n AO.uniforms.stepSize = EnsureNumber(ambientOcclusion.stepSize, 2.0);\n AO.uniforms.blurStepSize = EnsureNumber(ambientOcclusion.blurStepSize, 2.0);\n }\n\n let lighting = bSettings?.lighting;\n if (lighting == null) {\n lighting = defaults?.settings?.lighting;\n }\n if (lighting == null) {\n lighting = {\n color: Cesium.Color.WHITE.toCssColorString(),\n intensity: 2\n } as ProjectViewBookmark.Navigator.ILighting;\n }\n const light = viewer.scene.light;\n if (light) {\n light.color = Cesium.Color.fromCssColorString(lighting.color);\n light.intensity = EnsureNumber(lighting.intensity);\n }\n\n let quality = bSettings?.quality;\n if (quality == null) {\n quality = defaults?.settings?.quality;\n }\n if (quality == null) {\n quality = {\n fxaa: true\n } as ProjectViewBookmark.Navigator.IQuality;\n }\n const fxaa = viewer.scene.postProcessStages.fxaa;\n fxaa.enabled = Boolean(quality.fxaa);\n\n let dateTime = bSettings?.dateTime;\n if (dateTime == null) {\n dateTime = defaults?.settings?.dateTime;\n }\n if (dateTime != null) {\n const clock = viewer.clock;\n clock.currentTime = Cesium.JulianDate.fromIso8601(dateTime);\n }\n\n let selectedIds = bSettings?.selectedEntityIds;\n if (selectedIds == null) {\n selectedIds = defaults?.settings?.selectedEntityIds;\n }\n if (selectedIds != null) {\n params.manager.VisualsRegister.ClearSelected();\n params.manager.VisualsRegister.SetSelected({\n selected: true,\n entityIds: selectedIds,\n refreshIfSelected: false\n });\n }\n\n params.manager.VisualsRegister.ClearHidden();\n let hiddenIds = bSettings?.hiddenEntityIds;\n if (hiddenIds == null) {\n hiddenIds = defaults?.settings?.hiddenEntityIds;\n }\n if (hiddenIds != null) {\n params.manager.VisualsRegister.SetHidden({\n hidden: true,\n entityIds: hiddenIds\n });\n }\n\n params.manager.VisualsRegister.ClearIsolated();\n let isolatedIds = bSettings?.isolatedEntityIds;\n if (isolatedIds == null) {\n isolatedIds = defaults?.settings?.isolatedEntityIds;\n }\n if (isolatedIds != null) {\n params.manager.VisualsRegister.SetIsolated({\n isolated: true,\n entityIds: isolatedIds\n });\n }\n\n params.manager.VisualsRegister.ClearOpacity();\n let entityOpacityMap = bSettings?.entityOpacityMap;\n if (entityOpacityMap == null) {\n entityOpacityMap = defaults?.settings?.entityOpacityMap;\n }\n if (entityOpacityMap != null) {\n for (const entityId in entityOpacityMap) {\n const opacity = EnsureNumber(entityOpacityMap[entityId], 1);\n if (opacity != 1) {\n params.manager.VisualsRegister.SetOpacity({\n entityIds: [entityId],\n opacity: opacity\n });\n }\n }\n }\n\n let imagery = bSettings?.imagery != null ? bSettings.imagery : defaults.settings?.imagery;\n if (imagery == null) {\n // TODO: Need global default.\n imagery = [\n {\n accountId: null,\n tilesetId: ProjectViewTile.EDefaultImagery.MapboxSatellite,\n alpha: 1,\n brightness: 1,\n contrast: 1,\n gamma: 1,\n hue: 0,\n saturation: 1\n }\n ];\n }\n await TileRenderEngine.Map.Navigator.Render({\n apiGetter: params.apiGetter,\n tiles: imagery,\n viewer: params.manager.Viewer,\n });\n\n let renderedRelationEntityIds = bSettings?.renderedEntityRelations;\n if (!renderedRelationEntityIds) {\n renderedRelationEntityIds = [];\n }\n\n // Only disable menu items we don't want.\n // Otherwise we cause a flicker of rendered graphics.\n // Maybe TODO to such a function for menu item manager.\n const curEnabled = params.manager.GetEnabledItemIds();\n const newItemIds = bSettings?.menuItemIds ?? [];\n for (const id of curEnabled) {\n if (\n newItemIds.indexOf(id) === -1 ||\n id == RELATION_MENU_ITEM_ID\n ) {\n params.manager.RemoveItemById({\n menuItemId: id\n });\n }\n }\n if (bookmark) {\n await MenuItemCreator.RenderBookmarkItems({\n apiGetter: params.apiGetter,\n manager: params.manager,\n view: view,\n bookmark: bookmark\n });\n }\n if (renderedRelationEntityIds.length > 0) {\n const menuItem = {\n id: RELATION_MENU_ITEM_ID,\n Caption: \"Entity relations\",\n BruceEntity: {\n EntityIds: renderedRelationEntityIds\n },\n Type: MenuItem.EType.Relations\n } as MenuItem.Item.IEntityRelations;\n await params.manager.RenderItem({\n apiGetter: params.apiGetter,\n item: menuItem\n });\n }\n}\n\nexport namespace ViewRenderEngine {\n export interface IRenderParams {\n /// WHERE TO RENDER ///\n\n // Must be provided if manager is not provided.\n viewer?: Cesium.Viewer;\n // The viewer to render to.\n // If not provided a default instance will be created and stored within the Cesium viewer.\n manager?: MenuItemManager.Manager;\n\n /// WHAT TO RENDER ///\n\n // Used to request view if view is not provided.\n viewId?: string;\n // Takes priority over viewId.\n view?: ProjectView.View;\n // Used to request bookmark if bookmark is not provided.\n bookmarkId?: string;\n // Takes priority over bookmarkId.\n bookmark?: ProjectViewBookmark.Bookmark;\n\n /// OPTIONAL CONFIGURATION ///\n\n // Moves the camera but without transition time.\n // Ignored if skipCamera = true.\n skipTransition?: boolean;\n // Does not move the camera.\n skipCamera?: boolean;\n\n /// API COMMUNICATION ///\n\n // Getter for the API.\n // If not provided the global default instance will be used.\n apiGetter?: BruceApi.IGetter;\n }\n\n export async function Render(params: IRenderParams): Promise<void> {\n if (!params.manager && params.viewer) {\n params.manager = ViewerUtils.GetManager({\n viewer: params.viewer,\n createIfMissing: true\n });\n }\n else if (!params.viewer && params.manager) {\n params.viewer = params.manager.Viewer;\n }\n if (!params.apiGetter) {\n params.apiGetter = ENVIRONMENT.Api().GetBruceGetter();\n }\n\n const api = params.apiGetter.getApi();\n const view = params.view ? params.view : (await ProjectView.Get({\n api,\n viewId: params.viewId\n })).view;\n let bookmark = params.bookmark;\n if (!bookmark) {\n let bookmarkId = params.bookmarkId;\n if (!bookmarkId) {\n bookmarkId = view.DefaultUISlideID;\n }\n bookmark = bookmarkId ? (await ProjectViewBookmark.Get({\n api,\n viewId: params.viewId,\n bookmarkId: bookmarkId\n })).bookmark : null;\n }\n const version = view.DataVersion;\n if (version == 1) {\n await renderLegacyNavigator(\n params,\n bookmark as ProjectViewBookmark.LegacyNavigator.IBookmark,\n view as ProjectView.LegacyNavigator.IView\n );\n }\n else {\n await renderNavigator(\n params,\n bookmark as ProjectViewBookmark.Navigator.IBookmark,\n view as ProjectView.Navigator.IView\n );\n }\n }\n}","export * from \"./viewer/cesium-view-monitor\";\nexport * from \"./viewer/viewer-utils\";\nexport * from \"./rendering/menu-item-manager\";\nexport * from \"./rendering/entity-render-engine\";\nexport * from \"./rendering/menu-item-creator\";\nexport * from \"./rendering/visuals-register\";\nexport * from \"./rendering/render-managers/render-manager\";\nexport * from \"./rendering/render-managers/entities/entities-ids-render-manager\";\nexport * from \"./rendering/render-managers/entities/entities-loaded-render-manager\";\nexport * from \"./rendering/render-managers/entities/entities-render-manager\";\nexport * from \"./rendering/render-managers/entities/entity-render-manager\";\nexport * from \"./rendering/render-managers/tilesets/tileset-cad-render-manager\";\nexport * from \"./rendering/render-managers/tilesets/tileset-arb-render-manager\";\nexport * from \"./rendering/render-managers/tilesets/tileset-entities-render-manager\";\nexport * from \"./rendering/render-managers/tilesets/tileset-osm-render-manager\";\nexport * from \"./rendering/render-managers/tilesets/tileset-pointcloud-render-manager\";\nexport * from \"./rendering/render-managers/tilesets/tileset-google-photos-render-manager\";\nexport * from \"./rendering/render-managers/data-source/data-source-static-kml-manager\";\nexport * from \"./rendering/render-managers/other/relations-render-manager\";\nexport * from \"./rendering/render-managers/common/shared-getters\";\nexport * from \"./rendering/render-managers/common/cesium-parabola\";\nexport * from \"./rendering/view-render-engine\";\nexport * from \"./rendering/tile-render-engine\";\nexport * from \"./rendering/tileset-render-engine\";\nexport * from \"./utils/view-utils\";\nexport * from \"./utils/drawing-utils\";\nexport * from \"./utils/measure-utils\";\nexport * from \"./utils/entity-utils\";\n\nexport const VERSION = \"2.2.2\";"],"names":["Cesium.Cartesian2","Cesium.Cartographic","Cesium.CallbackProperty","Cesium.Cartesian3","Cesium.Color","Cesium.Rectangle","Cesium.Math","Cesium.PolygonPipeline","Cesium.EllipsoidGeodesic","Cesium.EllipsoidTerrainProvider","Cesium.sampleTerrainMostDetailed","Cesium.HeightReference","Cesium.Entity","Cesium.Primitive","Cesium.Cesium3DTileFeature","Cesium.ColorMaterialProperty","Entity","Cesium.Transforms","Cesium.HeadingPitchRoll","Cesium.Matrix3","Cesium.Matrix4","Cesium.EasingFunction","Cesium.GeometryInstance","Cesium.JulianDate","Cesium.SceneMode","Cesium.DistanceDisplayCondition","Cesium.HorizontalOrigin","Cesium.VerticalOrigin","Cesium.ClassificationType","Cesium.ArcType","Cesium.PolygonHierarchy","Cesium.ShadowMode","Cesium.PolylineGraphics","Cesium.ColorBlendMode","GetValue","Rectangle","Cesium.NearFarScalar","BATCH_SIZE","CHECK_BATCH_SIZE","colorToCColor","isAlive","Cesium.Cesium3DTileset","Cesium.Cesium3DTileStyle","Cesium.IonResource","Cesium.Cesium3DTileColorBlendMode","Cesium.HeadingPitchRange","Cesium.createOsmBuildings","Cesium.KmlDataSource","Cesium.createWorldTerrain","Cesium.CesiumTerrainProvider","Cesium.BingMapsImageryProvider","Cesium.BingMapsStyle","Cesium.MapboxImageryProvider","Cesium.MapboxStyleImageryProvider","Cesium.ArcGisMapServerImageryProvider","Cesium.OpenStreetMapImageryProvider","Cesium.GridImageryProvider","Cesium.GeographicTilingScheme","Cesium.ImageryLayer","Cesium.UrlTemplateImageryProvider","Cesium.TileMapServiceImageryProvider","Cesium.IonImageryProvider","Cesium.CesiumInspector","Cesium.OrthographicFrustum"],"mappings":"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"}
1
+ {"version":3,"file":"bruce-cesium.es5.js","sources":["../src/viewer/cesium-view-monitor.ts","../src/internal/js-utils.ts","../src/utils/measure-utils.ts","../src/utils/drawing-utils.ts","../src/utils/entity-utils.ts","../src/rendering/render-managers/render-manager.ts","../src/rendering/entity-render-engine.ts","../src/rendering/render-managers/common/point-clustering.ts","../src/rendering/render-managers/entities/entities-render-manager.ts","../src/rendering/render-managers/entities/entities-loaded-render-manager.ts","../src/rendering/render-managers/common/cesium-parabola.ts","../src/rendering/relation-render-engine.ts","../src/rendering/visuals-register.ts","../src/rendering/render-managers/entities/entities-ids-render-manager.ts","../src/rendering/render-managers/entities/entity-render-manager.ts","../src/rendering/tileset-render-engine.ts","../src/rendering/render-managers/tilesets/tileset-cad-render-manager.ts","../src/rendering/render-managers/common/shared-getters.ts","../src/rendering/render-managers/tilesets/tileset-osm-render-manager.ts","../src/rendering/render-managers/tilesets/tileset-entities-render-manager.ts","../src/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.ts","../src/rendering/render-managers/data-source/data-source-static-kml-manager.ts","../src/rendering/render-managers/tilesets/tileset-arb-render-manager.ts","../src/rendering/render-managers/other/relations-render-manager.ts","../src/rendering/render-managers/tilesets/tileset-google-photos-render-manager.ts","../src/rendering/menu-item-manager.ts","../src/viewer/viewer-utils.ts","../src/rendering/menu-item-creator.ts","../src/rendering/tile-render-engine.ts","../src/utils/view-utils.ts","../src/rendering/view-render-engine.ts","../src/bruce-cesium.ts"],"sourcesContent":["import { Bounds, BruceEvent, Carto, ViewMonitor } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\n\nconst TIME_LAG = 300;\nconst POSITION_CHECK_TIMER = 950;\nconst DEFAULT_GROUNDED_HEIGHT = 300;\nconst MINIMUM_VIEW_AREA_SIZE_DEGREES = 0.01;\nconst NET_STEP_PERCENT = 5;\nconst BORDER_STEPS = 3;\n\nenum ESearchStatus {\n LocationFound = 1,\n LocationChanged = 2,\n LocationMissing = 3\n}\n\nfunction netScanViewForBoundaries(viewer: Cesium.Viewer): Bounds.IReqBounds {\n let maxLong = - 2 * Math.PI;\n let minLong = 2 * Math.PI;\n let maxLat = -2 * Math.PI;\n let minLat = 2 * Math.PI;\n let found = 0;\n\n const updateMinMaxForPoint = (stepX: number, stepY: number) => {\n const x = Math.round(0 + (viewer.container.clientWidth / 100) * (stepX * NET_STEP_PERCENT));\n const y = Math.round(0 + (viewer.container.clientHeight / 100) * (stepY * NET_STEP_PERCENT));\n const winPos = new Cesium.Cartesian2(x, y);\n try {\n let intersection = getAdjustedGroundIntersectionOfCameraRay(viewer, winPos);\n if (intersection) {\n let point = (<any> Cesium.Cartographic).fromCartesian(intersection, viewer.scene.globe.ellipsoid);\n maxLong = Math.max(maxLong, point.longitude);\n maxLat = Math.max(maxLat, point.latitude);\n minLong = Math.min(minLong, point.longitude);\n minLat = Math.min(minLat, point.latitude);\n found++;\n }\n }\n catch {\n\n }\n };\n\n // Outer circle.\n updateMinMaxForPoint(BORDER_STEPS, BORDER_STEPS);\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS, BORDER_STEPS);\n updateMinMaxForPoint(BORDER_STEPS, (100 / NET_STEP_PERCENT) - BORDER_STEPS);\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS, (100 / NET_STEP_PERCENT) - BORDER_STEPS);\n\n // Inner circle.\n updateMinMaxForPoint(BORDER_STEPS * 2, BORDER_STEPS * 2);\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS * 2, BORDER_STEPS * 2);\n updateMinMaxForPoint(BORDER_STEPS * 2, (100 / NET_STEP_PERCENT) - BORDER_STEPS * 2);\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS * 2, (100 / NET_STEP_PERCENT) - BORDER_STEPS * 2);\n\n if (found > 0) {\n const viewRect: Bounds.IReqBounds = {\n east: maxLong,\n west: minLong,\n north: maxLat,\n south: minLat\n };\n return viewRect;\n }\n return <any>null;\n}\n\nfunction getAdjustedGroundIntersectionOfCameraRay(viewer: Cesium.Viewer, screenPos: Cesium.Cartesian2): Cesium.Cartesian3 {\n const ray = viewer.camera.getPickRay(screenPos);\n const intersection = ray ? viewer.scene.globe.pick(ray, viewer.scene) : null;\n if (intersection) {\n return intersection;\n }\n return <any>null;\n}\n\nfunction areBoundsEqual(a: Bounds.IReqBounds, b: Bounds.IReqBounds): boolean {\n return a.north == b.north && a.south == b.south && a.east == b.east && a.west == b.west;\n}\n\nfunction arePosEqual(a: Carto.ICarto, b: Carto.ICarto): boolean {\n return a.latitude == b.latitude && a.longitude == b.longitude;\n}\n\n/**\n * Monitors and emits events when the Cesium view changes.\n */\nexport class CesiumViewMonitor implements ViewMonitor.IMonitor {\n private viewer: Cesium.Viewer;\n private pendingTimeout: any;\n private checkInterval: any;\n private target: Carto.ICarto = <any>null;\n private bounds: Bounds.IReqBounds = <any>null;\n private disposed: boolean = false;\n private updatedEvent: BruceEvent<ViewMonitor.IArea> = <any>null;\n public get Disposed(): boolean {\n return this.disposed;\n }\n private entity: Cesium.Entity = <any>null;\n\n\n public constructor(viewer: Cesium.Viewer) {\n this.viewer = viewer;\n this.tryEmitUpdate();\n this.checkInterval = setInterval(() => {\n this.updateQueue();\n },\n POSITION_CHECK_TIMER);\n }\n\n private createEntity(): void {\n if (this.entity) {\n return;\n }\n this.entity = this.viewer.entities.add({\n position: new Cesium.CallbackProperty(() => {\n return this.target ? Cesium.Cartesian3.fromDegrees(this.target.longitude, this.target.latitude) : null;\n }, false) as any,\n point: {\n pixelSize: 8,\n color: Cesium.Color.ORANGE\n },\n rectangle: {\n coordinates: new Cesium.CallbackProperty(() => {\n return this.bounds ? Cesium.Rectangle.fromDegrees(this.bounds.west, this.bounds.south, this.bounds.east, this.bounds.north) : null;\n }, false) as any,\n material: Cesium.Color.fromCssColorString('#ff0000').withAlpha(0.4),\n zIndex: 1\n }\n });\n }\n\n private destroyEntity() {\n if (this.entity && this.viewer.entities.contains(this.entity)) {\n this.viewer.entities.remove(this.entity);\n }\n this.entity = null;\n }\n\n public Updated(): BruceEvent<ViewMonitor.IArea> {\n if (!this.updatedEvent) {\n this.updatedEvent = new BruceEvent();\n }\n return this.updatedEvent;\n }\n\n public GetBounds(): Bounds.IReqBounds {\n return this.bounds;\n }\n\n public GetTarget(): Carto.ICarto {\n return this.target;\n }\n\n public DoUpdate(): void {\n this.tryEmitUpdate();\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n clearInterval(this.checkInterval);\n this.destroyEntity();\n }\n\n private tryDoUpdate(): ESearchStatus {\n if (!this.viewer || this.viewer.isDestroyed()) {\n this.Dispose();\n return ESearchStatus.LocationMissing;\n }\n\n let viewRect: Bounds.IReqBounds = <any>null;\n let center: Carto.ICarto = <any>null;\n\n const camera = this.viewer.camera;\n const terrainHeight = this.viewer.scene.globe.getHeight(camera.positionCartographic);\n const cameraPosition = this.viewer.camera.positionCartographic;\n\n // We are almost at the ground, screw horizon, just load around.\n if (terrainHeight && ((cameraPosition.height - terrainHeight) < DEFAULT_GROUNDED_HEIGHT)) {\n\n // View area calculation.\n viewRect = <any>{};\n const viewRectRad: Bounds.IReqBounds = netScanViewForBoundaries(this.viewer);\n if\n (\n viewRectRad &&\n viewRectRad.east &&\n viewRectRad.west &&\n viewRectRad.north &&\n viewRectRad.south\n ) {\n viewRect.east = Cesium.Math.toDegrees(Math.max(viewRectRad.east, cameraPosition.longitude));\n viewRect.west = Cesium.Math.toDegrees(Math.min(viewRectRad.west, cameraPosition.longitude));\n viewRect.south = Cesium.Math.toDegrees(Math.min(viewRectRad.south, cameraPosition.latitude));\n viewRect.north = Cesium.Math.toDegrees(Math.max(viewRectRad.north, cameraPosition.latitude));\n }\n else {\n viewRect.east = cameraPosition.longitude;\n viewRect.west = cameraPosition.longitude;\n viewRect.south = cameraPosition.latitude;\n viewRect.north = cameraPosition.latitude;\n }\n center = <any>{};\n center.latitude = Cesium.Math.toDegrees(camera.positionCartographic.latitude);\n center.longitude = Cesium.Math.toDegrees(camera.positionCartographic.longitude);\n }\n else {\n // View area calculation.\n const windowPosition = new Cesium.Cartesian2(\n this.viewer.container.clientWidth / 2,\n this.viewer.container.clientHeight / 2\n );\n const intersection = getAdjustedGroundIntersectionOfCameraRay(this.viewer, windowPosition);\n\n let point = null;\n if (intersection) {\n point = (<any> Cesium.Cartographic).fromCartesian(intersection, this.viewer.scene.globe.ellipsoid);\n }\n if (point) {\n center = <any>{};\n center.latitude = Cesium.Math.toDegrees(point.latitude);\n center.longitude = Cesium.Math.toDegrees(point.longitude);\n\n let viewRectRad: Bounds.IReqBounds = netScanViewForBoundaries(this.viewer);\n if (viewRectRad) {\n viewRect = <any>{};\n viewRect.east = Cesium.Math.toDegrees(viewRectRad.east);\n viewRect.west = Cesium.Math.toDegrees(viewRectRad.west);\n viewRect.south = Cesium.Math.toDegrees(viewRectRad.south);\n viewRect.north = Cesium.Math.toDegrees(viewRectRad.north);\n }\n }\n }\n\n // Minimal field of view.\n if (viewRect) {\n const centerLong = (viewRect.east + viewRect.west) / 2;\n const centerLat = (viewRect.north + viewRect.south) / 2;\n viewRect.east = Math.max(viewRect.east, centerLong + (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\n viewRect.west = Math.min(viewRect.west, centerLong - (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\n viewRect.south = Math.min(viewRect.south, centerLat - (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\n viewRect.north = Math.max(viewRect.north, centerLat + (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\n viewRect.alt = this.viewer.scene.camera.positionCartographic?.height;\n }\n\n if (center && viewRect) {\n if (\n (!this.target || (this.target && !arePosEqual(this.target, center))) ||\n (!this.bounds || (this.bounds && !areBoundsEqual(this.bounds, viewRect)))\n ) {\n this.target = center;\n this.bounds = viewRect;\n return ESearchStatus.LocationChanged;\n }\n return ESearchStatus.LocationFound;\n }\n return ESearchStatus.LocationMissing;\n }\n\n private tryEmitUpdate() {\n const searchResult = this.tryDoUpdate();\n if (searchResult == ESearchStatus.LocationChanged) {\n const interest: ViewMonitor.IArea = {\n \tbounds: this.bounds,\n \ttarget: this.target\n };\n //this.createEntity();\n this.updatedEvent?.Trigger(interest);\n }\n else if (searchResult == ESearchStatus.LocationMissing) {\n this.updateQueue();\n }\n }\n\n private queuePosition(lag: number) {\n if (this.pendingTimeout) {\n clearTimeout(this.pendingTimeout);\n }\n this.pendingTimeout = setTimeout(() => {\n if (!this.disposed) {\n this.tryEmitUpdate();\n }\n }, lag);\n }\n\n private updateQueue() {\n this.queuePosition(TIME_LAG);\n }\n}","/**\n * Ensures a number is returned from a given value.\n * If given value cannot be parsed it will return defaultNum.\n * @param value \n * @param defaultNum default is 0.\n * @returns \n */\nexport function EnsureNumber(value: any, defaultNum?: number): number {\n if (!defaultNum) {\n defaultNum = 0;\n }\n value = Number(value);\n if (isNaN(value)) {\n return defaultNum;\n }\n return value;\n}","import { Cartes } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\n\nexport namespace MeasureUtils {\n /**\n * Returns the total distance in meters between an array of points.\n * This distance is NOT following the terrain.\n * @param posses \n * @returns \n */\n export function MeasurePolyline(params: {\n posses: Cesium.Cartesian3[]\n }): {\n totalLength: number\n } {\n const { posses } = params;\n if (posses.length < 2) {\n return {\n totalLength: 0\n };\n }\n let totalLength = 0;\n let pos1 = null;\n let pos2 = null;\n for (let i = 0; i < posses.length; i++) {\n if (pos1 == null) {\n pos1 = posses[i];\n }\n else if (pos2 == null) {\n pos2 = posses[i];\n totalLength += Cesium.Cartesian3.distance(pos1, pos2);\n pos1 = pos2;\n pos2 = null;\n }\n }\n return {\n totalLength\n };\n }\n\n export function MeasurePolygon(params: {\n posses: Cesium.Cartesian3[]\n }): {\n area: number,\n perimeter: number\n } {\n let { posses } = params;\n posses = [].concat(posses);\n if (!Cartes.IsRing3Closed(posses)) {\n posses.push(posses[0].clone());\n }\n if (posses.length < 3) {\n return {\n area: 0,\n perimeter: 0\n }; \n }\n\n let area = 0;\n const indices = (Cesium as any).PolygonPipeline.triangulate(posses, []);\n for (let i = 0; i < indices.length; i += 3) {\n const vector1 = posses[indices[i]];\n const vector2 = posses[indices[i + 1]];\n const vector3 = posses[indices[i + 2]];\n const vectorC = Cesium.Cartesian3.subtract(vector2, vector1, new Cesium.Cartesian3());\n const vectorD = Cesium.Cartesian3.subtract(vector3, vector1, new Cesium.Cartesian3());\n const areaVector = Cesium.Cartesian3.cross(vectorC, vectorD, new Cesium.Cartesian3());\n area += Cesium.Cartesian3.magnitude(areaVector) / 2.0;\n }\n const {totalLength: perimeter} = MeasurePolyline({\n posses: posses\n });\n return {\n area,\n perimeter\n };\n }\n}","import { Cartes } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { EnsureNumber } from \"../internal/js-utils\";\nimport { MeasureUtils } from \"./measure-utils\";\n\nexport namespace DrawingUtils {\n /**\n * Returns the point across a polyline at a given distance.\n * If the distance exceeds the length of the line, the point will be placed at the end of the line.\n * @param viewer\n * @param positions\n * @param distance\n * @returns\n */\n export function PointAcrossPolyline(params: {\n viewer: Cesium.Viewer,\n posses: Cesium.Cartesian3[],\n distance: number\n }): {\n point: Cesium.Cartesian3\n } {\n const { viewer, posses: positions, distance } = params;\n if (distance <= 0 && positions.length > 0) {\n return {\n point: positions[0]\n }\n }\n else if (positions.length > 1) {\n let currentDistance = 0;\n let {totalLength} = MeasureUtils.MeasurePolyline({\n posses: positions,\n })\n if (distance > totalLength) {\n return {\n point: positions[positions.length - 1]\n }\n }\n for (let i = 0; i < positions.length - 1; i++) {\n const length = Cesium.Cartesian3.distance(positions[i], positions[i + 1]);\n if (length + currentDistance >= distance) {\n const carto1 = Cesium.Cartographic.fromCartesian(positions[i]);\n const carto2 = Cesium.Cartographic.fromCartesian(positions[i + 1]);\n const geodesic = new Cesium.EllipsoidGeodesic(carto1, carto2, viewer.scene.globe.ellipsoid);\n //const position = geodesic.interpolateUsingSurfaceDistance(distance - currentDistance);\n const position = geodesic.interpolateUsingFraction((distance - currentDistance) / length);\n const height = (carto1.height + carto2.height) / 2;\n return {\n point: Cesium.Cartesian3.fromRadians(position.longitude, position.latitude, height)\n };\n }\n else {\n currentDistance += length;\n }\n }\n }\n return {\n point: positions.length ? positions[positions.length - 1] : null\n }\n }\n\n /**\n * Returns terrain height from current viewer's provider.\n * On error or flat terrain, it will return 0.\n * If an error occurred it will be attached to the result.\n * @param pos3d\n * @param viewer\n * @returns\n */\n export async function GetTerrainHeight(params: {\n pos3d: Cesium.Cartesian3,\n viewer: Cesium.Viewer\n }): Promise<{\n height: number,\n error?: any\n }> {\n const { pos3d, viewer } = params;\n try {\n if (viewer.scene.terrainProvider instanceof Cesium.EllipsoidTerrainProvider) {\n return {\n height: 0\n };\n }\n const sample = await Cesium.sampleTerrainMostDetailed(viewer.scene.terrainProvider, [Cesium.Cartographic.fromCartesian(pos3d)]);\n const height = sample?.length ? sample[0].height : null;\n if (isNaN(height)) {\n return {\n height: 0,\n error: \"NaN\"\n };\n }\n return {\n height: height\n };\n }\n catch (e) {\n return {\n height: 0,\n error: e\n };\n }\n }\n\n export function EnsurePosHeight(params: {\n pos3d: Cesium.Cartesian3,\n viewer: Cesium.Viewer,\n desiredHeightRef: Cesium.HeightReference,\n heightRef: Cesium.HeightReference\n }): Cesium.Cartesian3 {\n let { pos3d, viewer, desiredHeightRef, heightRef } = params;\n const carto = Cartes.ValidateCartes3(pos3d) ? Cesium.Cartographic.fromCartesian(pos3d) : null;\n if (heightRef == null) {\n heightRef = Cesium.HeightReference.CLAMP_TO_GROUND;\n }\n if (desiredHeightRef == null) {\n desiredHeightRef = Cesium.HeightReference.CLAMP_TO_GROUND;\n }\n if (heightRef == desiredHeightRef) {\n return pos3d;\n }\n if (heightRef == Cesium.HeightReference.NONE) {\n // Turn absolute into clamped.\n if (desiredHeightRef == Cesium.HeightReference.CLAMP_TO_GROUND) {\n return Cesium.Cartesian3.fromRadians(carto.longitude, carto.latitude, 0);\n }\n // Turn absolute into relative (remove terrain height).\n else if (desiredHeightRef == Cesium.HeightReference.RELATIVE_TO_GROUND) {\n const terrainHeight = EnsureNumber(viewer.scene.globe.getHeight(carto), 0);\n return Cesium.Cartesian3.fromRadians(carto.longitude, carto.latitude, carto.height - terrainHeight);\n }\n }\n else if (heightRef == Cesium.HeightReference.CLAMP_TO_GROUND) {\n const terrainHeight = EnsureNumber(viewer.scene.globe.getHeight(carto), 0);\n return Cesium.Cartesian3.fromRadians(carto.longitude, carto.latitude, terrainHeight);\n }\n else if (heightRef == Cesium.HeightReference.RELATIVE_TO_GROUND) {\n // Turn relative into absolute (add terrain height).\n if (desiredHeightRef == Cesium.HeightReference.NONE) {\n const terrainHeight = EnsureNumber(viewer.scene.globe.getHeight(carto), 0);\n return Cesium.Cartesian3.fromRadians(carto.longitude, carto.latitude, carto.height + terrainHeight);\n }\n // Turn relative into clamped.\n else if (desiredHeightRef == Cesium.HeightReference.CLAMP_TO_GROUND) {\n return Cesium.Cartesian3.fromRadians(carto.longitude, carto.latitude, 0);\n }\n }\n return pos3d;\n }\n}","import { BruceApi, Cartes, Carto, Entity as E, Entity, Geometry, Tileset } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { VisualsRegister } from \"../rendering/visuals-register\";\nimport { EntityRenderEngine } from \"../rendering/entity-render-engine\";\nimport { DrawingUtils } from \"./drawing-utils\";\nimport { MeasureUtils } from \"./measure-utils\";\nimport { EnsureNumber } from \"../internal/js-utils\";\n\n/**\n * Returns if a given visual is alive and in the scene.\n * @param viewer\n * @param visual\n * @returns\n */\nfunction isAlive(viewer: Cesium.Viewer, visual: VisualsRegister.Visual) {\n if (!viewer?.scene || viewer.isDestroyed()) {\n return false;\n }\n if (visual instanceof Cesium.Entity) {\n return viewer.entities.contains(visual);\n }\n else if (visual instanceof Cesium.Primitive) {\n return viewer.scene.primitives.contains(visual);\n }\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\n const cTileset = visual?.tileset;\n if (!cTileset) {\n return false;\n }\n if (cTileset.isDestroyed() || !viewer.scene.primitives.contains(cTileset)) {\n return false;\n }\n return true;\n }\n return false;\n}\n\nfunction traverseEntity(\n cEntity: EntityRenderEngine.ICesiumEntityExt,\n arr: EntityRenderEngine.ICesiumEntityExt[],\n ignoreParent: boolean\n): void {\n if (cEntity._parentEntity && !ignoreParent) {\n traverseEntity(cEntity._parentEntity, arr, false);\n }\n if (cEntity._siblingGraphics) {\n for (let i = 0; i < cEntity._siblingGraphics.length; i++) {\n const sibling = cEntity._siblingGraphics[i];\n traverseEntity(sibling, arr, true);\n }\n }\n arr.push(cEntity);\n}\n\nconst ORG_OPACITY_KEY = \"_org_opacity_\";\nconst NEW_OPACITY_KEY = \"_new_opacity_\";\n\nfunction getColor(viewer: Cesium.Viewer, material: Cesium.Property | Cesium.ColorMaterialProperty) {\n function findColor() {\n if (!material) {\n return Cesium.Color.WHITE;\n }\n if (material.getValue) {\n material = material.getValue(viewer.scene.lastRenderTime);\n }\n if (material instanceof Cesium.Color) {\n return material;\n }\n let tmp = (material as any)?.color;\n if (tmp?.getValue) {\n tmp = tmp.getValue(viewer.scene.lastRenderTime);\n }\n return tmp ? tmp : Cesium.Color.WHITE;\n }\n return findColor()?.clone?.();\n}\n\nfunction applyOpacityToColor(viewer: Cesium.Viewer, opacity: number, material: Cesium.Property | Cesium.ColorMaterialProperty) {\n const color = getColor(viewer, material);\n if (color) {\n color.alpha = opacity;\n }\n return color;\n}\n\nfunction applyOpacityToGraphic(viewer: Cesium.Viewer, entity: Cesium.Entity, graphicKey: string, materialKey: string, opacity: number) {\n const color = applyOpacityToColor(viewer, opacity, entity[graphicKey][materialKey]);\n if (color) {\n entity[graphicKey][materialKey] = materialKey == \"material\" ? new Cesium.ColorMaterialProperty(color) : color;\n }\n}\n\nfunction revertAppliedEntityOpacity(viewer: Cesium.Viewer, entity: VisualsRegister.Visual) {\n if (!isAlive(viewer, entity)) {\n return;\n }\n\n entity[NEW_OPACITY_KEY] = null;\n if (entity instanceof Cesium.Entity) {\n const processKey = (graphicKey: string, materialKey: string = \"material\") => {\n if (entity[graphicKey]) {\n const orgOpacity = entity[graphicKey][ORG_OPACITY_KEY];\n if (orgOpacity != null) {\n applyOpacityToGraphic(viewer, entity, graphicKey, materialKey, orgOpacity);\n }\n entity[graphicKey][ORG_OPACITY_KEY] = null;\n }\n }\n processKey(\"polygon\");\n processKey(\"polyline\");\n processKey(\"point\", \"color\");\n processKey(\"ellipse\");\n processKey(\"model\", \"color\");\n }\n else if (entity instanceof Cesium.Cesium3DTileFeature) {\n const orgOpacity = entity[ORG_OPACITY_KEY];\n if (orgOpacity != null) {\n const color = entity.color ? entity.color.clone() : new Cesium.Color();\n color.alpha = orgOpacity;\n entity.color = color;\n }\n entity[ORG_OPACITY_KEY] = null;\n }\n}\n\nfunction applyOpacityToEntity(viewer: Cesium.Viewer, opacity: number, entity: VisualsRegister.Visual) {\n if (!isAlive(viewer, entity)) {\n return;\n }\n\n entity[NEW_OPACITY_KEY] = opacity;\n if (entity instanceof Cesium.Entity) {\n const processKey = (graphicKey: string, materialKey: string = \"material\") => {\n if (entity[graphicKey]) {\n let orgOpacity = entity[graphicKey][ORG_OPACITY_KEY];\n if (orgOpacity == null) {\n entity[graphicKey][ORG_OPACITY_KEY] = getColor(viewer, entity[graphicKey][materialKey])?.alpha;\n }\n if (orgOpacity == null) {\n orgOpacity = 1;\n }\n applyOpacityToGraphic(viewer, entity, graphicKey, materialKey, opacity * orgOpacity);\n }\n }\n processKey(\"polygon\");\n processKey(\"polyline\");\n processKey(\"point\", \"color\");\n processKey(\"ellipse\");\n processKey(\"model\", \"color\");\n }\n else if (entity instanceof Cesium.Cesium3DTileFeature) {\n let orgOpacity = entity[ORG_OPACITY_KEY];\n if (orgOpacity == null) {\n entity[ORG_OPACITY_KEY] = entity.color ? entity.color.alpha : 1;\n }\n if (!orgOpacity) {\n orgOpacity = 1;\n }\n const color = entity.color ? entity.color.clone() : new Cesium.Color();\n color.alpha = opacity * orgOpacity;\n if (color.equals(Cesium.Color.WHITE)) {\n color.blue = 0.0001;\n }\n entity.color = color;\n }\n}\n\nfunction findOpacity(entity: VisualsRegister.Visual) {\n return entity ? entity[NEW_OPACITY_KEY] : null;\n}\n\nfunction GetValue<T>(viewer: Cesium.Viewer, obj: Cesium.Property | any): T {\n if ((obj as any)?.getValue) {\n return obj.getValue(viewer.scene.lastRenderTime);\n }\n return obj;\n}\n\nexport namespace EntityUtils {\n /**\n * Returns an entity's position.\n * This will attempt to calculate it from multiple sources of data.\n * @param params\n * @returns\n */\n export function GetPos(params: {\n viewer: Cesium.Viewer,\n entity: E.IEntity,\n // Optional register to try find currently rendered position from.\n visualRegister?: VisualsRegister.Register,\n // Will ensure returned position is at this height reference.\n // If no cesium visual is found, it will return it clamped to the ground.\n returnHeightRef?: Cesium.HeightReference,\n // Height reference of the record altitude.\n recordHeightRef?: Cesium.HeightReference,\n }): Cesium.Cartesian3 {\n const { viewer, entity, visualRegister } = params;\n\n function evaluateRendered() {\n const rego = visualRegister ? visualRegister.GetRego({\n entityId: entity.Bruce.ID,\n }) : null;\n\n if (rego?.visual instanceof Cesium.Entity) {\n const visual = rego.visual as Cesium.Entity;\n if (visual.position) {\n let pos3d = GetValue<Cesium.Cartesian3>(viewer, visual.position);\n // Fix height reference.\n if (pos3d?.x) {\n let visualHeightRef = Cesium.HeightReference.RELATIVE_TO_GROUND;\n if (visual.model) {\n visualHeightRef = GetValue<Cesium.HeightReference>(viewer, visual.model.heightReference);\n }\n else if (visual.polygon) {\n visualHeightRef = GetValue<Cesium.HeightReference>(viewer, visual.polygon.heightReference);\n }\n else if (visual.polyline) {\n visualHeightRef = GetValue<boolean>(viewer, visual.polyline.clampToGround) ?\n Cesium.HeightReference.CLAMP_TO_GROUND : Cesium.HeightReference.NONE;\n }\n else if (visual.billboard) {\n visualHeightRef = GetValue<Cesium.HeightReference>(viewer, visual.billboard.heightReference);\n }\n else if (visual.ellipse) {\n visualHeightRef = GetValue<Cesium.HeightReference>(viewer, visual.ellipse.heightReference);\n }\n else if (visual.point) {\n visualHeightRef = GetValue<Cesium.HeightReference>(viewer, visual.point.heightReference);\n }\n return DrawingUtils.EnsurePosHeight({\n desiredHeightRef: params.returnHeightRef,\n heightRef: visualHeightRef,\n pos3d: pos3d,\n viewer: viewer\n });\n }\n }\n }\n return null;\n }\n function evaluateRecord() {\n if (entity.location && Carto.ValidateCarto(entity.location)) {\n const location = entity.location;\n const latitude = EnsureNumber(location.latitude);\n const longitude = EnsureNumber(location.longitude);\n // Disallowing exact 0.\n if (latitude || longitude) {\n return Cesium.Cartesian3.fromDegrees(longitude, latitude, EnsureNumber(location.altitude));\n }\n }\n if (entity.geometry && typeof entity.geometry == \"object\") {\n const pointStr = entity.geometry.Point;\n if (pointStr && typeof pointStr == \"string\") {\n const points = Geometry.ParsePoints(pointStr);\n const point = points.length > 0 ? points[0] : null;\n if (point && Carto.ValidateCarto(point)) {\n return Cesium.Cartesian3.fromDegrees(EnsureNumber(point.longitude), EnsureNumber(point.latitude), EnsureNumber(point.altitude));\n }\n }\n const lineStr = entity.geometry.LineString;\n if (lineStr && typeof lineStr == \"string\") {\n const points = Geometry.ParsePoints(lineStr);\n if (points.length > 0) {\n const posses = points.map(x => Cesium.Cartesian3.fromDegrees(EnsureNumber(x.longitude), EnsureNumber(x.latitude), EnsureNumber(x.altitude)));\n const {totalLength: length} = MeasureUtils.MeasurePolyline({\n posses\n });\n if (length > 0) {\n const {point} = DrawingUtils.PointAcrossPolyline({\n viewer,\n posses: posses,\n distance: length / 2\n });\n if (point && Cartes.ValidateCartes3(point)) {\n return point;\n }\n }\n else {\n return posses[0];\n }\n }\n }\n const pRings = entity.geometry.Polygon;\n if (pRings && typeof pRings == \"object\") {\n const boundary = pRings.find(x => x.Facing == Geometry.EPolygonRingType.Boundaries)\n if (boundary?.LinearRing) {\n const points = Geometry.ParsePoints(boundary.LinearRing);\n const point = Carto.GetCenter(points);\n if (point && Carto.ValidateCarto(point)) {\n return Cesium.Cartesian3.fromDegrees(EnsureNumber(point.longitude), EnsureNumber(point.latitude), EnsureNumber(point.altitude));\n }\n }\n }\n }\n if (entity.boundaries) {\n const point: Carto.ICarto = {\n latitude: (EnsureNumber(entity.boundaries.minLatitude) + EnsureNumber(entity.boundaries.maxLatitude)) / 2,\n longitude: (EnsureNumber(entity.boundaries.minLongitude) + EnsureNumber(entity.boundaries.maxLongitude)) / 2,\n altitude: 0\n };\n // Disallowing exact 0.\n if (point.latitude || point.longitude) {\n if (Carto.ValidateCarto(point)) {\n return Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\n }\n }\n }\n }\n\n let pos3d = evaluateRendered();\n if (Cartes.ValidateCartes3(pos3d)) {\n return pos3d;\n }\n pos3d = evaluateRecord();\n return DrawingUtils.EnsurePosHeight({\n desiredHeightRef: params.returnHeightRef,\n heightRef: params.recordHeightRef,\n pos3d: pos3d,\n viewer: viewer\n });\n }\n\n /**\n * Returns the position of the entity.\n * This is an async variant that checks for related tilesets.\n * @param params\n * @returns\n */\n export async function GetPosAsync(params: {\n // Required if ids are passed instead of records.\n api?: BruceApi.Api,\n viewer: Cesium.Viewer,\n // Either entityId or entity is required.\n entityId?: string,\n entity?: Entity.IEntity,\n // (Optional) tileset to avoid check entity id for associated tilesets.\n tileset?: Tileset.ITileset,\n // (Optional) tileset id to avoid check entity id for associated tilesets.\n tilesetId?: string,\n // (Optional) Register to try find currently rendered position from.\n visualRegister?: VisualsRegister.Register,\n // Will ensure returned position is at this height reference.\n // If no cesium visual is found, it will return it clamped to the ground.\n returnHeightRef?: Cesium.HeightReference,\n // Height reference of the record altitude.\n recordHeightRef?: Cesium.HeightReference,\n }) {\n let { viewer, entityId, entity, tileset, tilesetId, visualRegister, returnHeightRef, recordHeightRef, api } = params;\n if (!entity) {\n try {\n entity = (await Entity.Get({\n api,\n entityId,\n expandLocation: true\n })).entity;\n }\n // Crashes for non tileset entities at the moment.\n catch (e) {\n console.warn(e);\n entity = (await Entity.Get({\n api,\n entityId,\n expandLocation: false\n })).entity;\n }\n }\n if (!entity) {\n return null;\n }\n if (!tilesetId) {\n tilesetId = entity.tilesetID?.length ? entity.tilesetID[0] : tilesetId;\n }\n let pos3d = tilesetId ? null : GetPos({\n viewer,\n entity,\n visualRegister,\n returnHeightRef,\n recordHeightRef\n });\n if (Cartes.ValidateCartes3(pos3d)) {\n return pos3d;\n }\n if (!tileset) {\n if (tilesetId) {\n tileset = (await Tileset.Get({\n api,\n tilesetId\n })).tileset;\n }\n }\n const tSettings = tileset?.settings as Tileset.Settings.ICad;\n if (entity.location?.longitude || tSettings?.location?.longitude) {\n if (entity?.location?.longitude) {\n let alt = +entity.location.altitude;\n if (isNaN(alt)) {\n alt = 0;\n }\n pos3d = Cesium.Cartesian3.fromDegrees(\n +entity.location.longitude,\n +entity.location.latitude,\n alt\n );\n }\n else {\n let alt = +tSettings.location.altitude;\n if (isNaN(alt)) {\n alt = 0;\n }\n pos3d = Cesium.Cartesian3.fromDegrees(\n +tSettings.location.longitude,\n +tSettings.location.latitude,\n alt\n );\n }\n // World position = we got lat/lon/alt from the tileset, now we need to apply relative movement.\n if (entity?.worldPosition) {\n let heading = 0;\n let pitch = 0;\n let roll = 0;\n if (entity?.transform?.heading) {\n heading = entity.transform.heading;\n }\n else if (tSettings?.transform?.heading) {\n heading = tSettings.transform.heading;\n }\n if (entity?.transform?.pitch) {\n pitch = entity.transform.pitch;\n }\n else if (tSettings?.transform?.pitch) {\n pitch = tSettings.transform.pitch;\n }\n if (entity?.transform?.roll) {\n roll = entity.transform.roll;\n }\n else if (tSettings?.transform?.roll) {\n roll = tSettings.transform.roll;\n }\n\n heading = +heading;\n if (isNaN(heading)) {\n heading = 0;\n }\n pitch = +pitch;\n if (isNaN(pitch)) {\n pitch = 0;\n }\n roll = +roll;\n if (isNaN(roll)) {\n roll = 0;\n }\n\n const matrix4 = entity.worldPosition as number[][];\n const offset = new Cesium.Cartesian3(+matrix4[0][3], +matrix4[1][3], +matrix4[2][3]);\n const m1 = Cesium.Transforms.eastNorthUpToFixedFrame(pos3d);\n const hpr = Cesium.HeadingPitchRoll.fromDegrees(heading, pitch, roll, new Cesium.HeadingPitchRoll());\n const transform = Cesium.Matrix3.fromHeadingPitchRoll(hpr);\n const transformedOffset = Cesium.Matrix3.multiplyByVector(transform, offset, new Cesium.Cartesian3());\n pos3d = Cesium.Matrix4.multiplyByPoint(m1, transformedOffset, new Cesium.Cartesian3());\n }\n }\n return DrawingUtils.EnsurePosHeight({\n desiredHeightRef: params.returnHeightRef,\n heightRef: params.recordHeightRef,\n pos3d: pos3d,\n viewer: viewer\n });\n }\n\n /**\n * Returns entity and any associated parent/sibling entities as a flat array.\n * @param entity\n */\n export function GatherEntity(params: {\n entity: Cesium.Entity\n }): Cesium.Entity[] {\n const { entity } = params;\n if (entity instanceof Cesium.Entity) {\n const cEntity = entity as EntityRenderEngine.ICesiumEntityExt;\n const items: EntityRenderEngine.ICesiumEntityExt[] = [];\n traverseEntity(cEntity, items, false);\n return items;\n }\n return [entity];\n }\n\n /**\n * Looks at given entities with least amount of movement.\n * @param viewer\n * @param entities\n */\n export function LookAtEntities(params: {\n viewer: Cesium.Viewer,\n entities: VisualsRegister.Visual[]\n }) {\n let { viewer, entities } = params;\n\n // Removing cesium tileset features for now as it's not accurate.\n entities = [].concat(entities).filter(x => !(x instanceof Cesium.Cesium3DTileFeature));\n if (!entities.length) {\n return;\n }\n\n const [ R, CT, C3, M3, M4, E ] = [ Cesium.Rectangle, Cesium.Cartographic, Cesium.Cartesian3, Cesium.Matrix3, Cesium.Matrix4, Cesium.EasingFunction ];\n const cutoffDistance = 2000;\n const hoverHeight = 2000;\n const duration = 0.5;\n\n const centers = (p: Cesium.Primitive): [Cesium.Cartesian3, number][] => {\n const PM = p.modelMatrix;\n const instances = ((i) => (i instanceof Cesium.GeometryInstance ? [i] : i))(p.geometryInstances);\n return instances.map((g) => {\n const _M = M4.multiply(PM, g.modelMatrix, new M4);\n const G = g.geometry;\n const _p = G.attributes.position;\n const b = G.boundingSphere;\n return [ b.center, b.radius ];\n });\n };\n\n const currentTime = Cesium.JulianDate.now();\n const target: [Cesium.Cartesian3, number][] = entities.flatMap((e) => {\n if (e instanceof Cesium.Cartesian3) {\n return [[ e, 0 ]];\n }\n if (e instanceof Cesium.Entity) {\n return [[ e.position?.getValue(currentTime)!, 0 ]];\n }\n if (e instanceof Cesium.Primitive) {\n return centers(e);\n }\n if (e instanceof Cesium.Cesium3DTileFeature) {\n const s = e.tileset.boundingSphere;\n return [[ s.center, s.radius ]];\n }\n });\n\n const bounds = (list: [Cesium.Cartesian3, number][]) => {\n let min = list[0][0];\n let max = min;\n for (const [ p, r ] of list) {\n const pMin = C3.subtract(p, new C3(r), new C3);\n const pMax = C3.add(p, new C3(r), new C3);\n min = C3.minimumByComponent(pMin, min, new C3);\n max = C3.maximumByComponent(pMax, max, new C3);\n }\n const c = C3.multiplyByScalar(C3.add(max, min, new C3), 0.5, new C3);\n\n return c;\n };\n\n const center = bounds(target);\n\n const orient = (p) => {\n const d = C3.subtract(center, p, new C3);\n const dir = C3.normalize(d, new C3);\n const up = viewer.scene.globe.ellipsoid.geodeticSurfaceNormal(center);\n return [ p, dir, up ];\n };\n\n const shorten = (v, l) => {\n const c = l / C3.magnitude(v);\n return C3.multiplyByScalar(v, c, new C3);\n };\n\n const camera = viewer.camera;\n const [ p, direction, up ] = orient(camera.position);\n const orientation = { direction, up };\n camera.flyTo({\n destination: p,\n orientation,\n duration,\n complete: () => {\n if (C3.distance(p, center) > cutoffDistance) {\n let d = C3.subtract(p, center, new C3);\n d = shorten(d, cutoffDistance);\n const h = C3.multiplyByScalar(C3.normalize(up, new C3), hoverHeight, new C3);\n d = C3.add(d, h, new C3);\n d = shorten(d, cutoffDistance);\n d = C3.add(d, center, new C3);\n\n const [ _p, direction, u ] = orient(d);\n camera.flyTo({\n destination: d,\n orientation: { direction, up: u }\n });\n }\n }\n });\n }\n\n /**\n * Sets opacity of given entity.\n * Opacity will be multiplied by original opacity.\n * Setting opacity puts original opacity into a temporary storage which can be reverted into.\n * @param viewer\n * @param entity\n * @param opacity\n */\n export function SetOpacity(params: {\n viewer: Cesium.Viewer,\n entity: VisualsRegister.Visual,\n opacity: number\n }) {\n const { viewer, entity, opacity } = params;\n applyOpacityToEntity(viewer, opacity, entity);\n }\n\n /**\n * Reverts opacity of given entity to original opacity.\n * If opacity was not updated using \"SetOpacity\" then nothing will happen.\n * @param viewer\n * @param entity\n */\n export function RevertOpacity(params: {\n viewer: Cesium.Viewer,\n entity: VisualsRegister.Visual\n }) {\n const { viewer, entity } = params;\n revertAppliedEntityOpacity(viewer, entity);\n }\n\n /**\n * Gets opacity of the entity.\n * This does not count opacity that it was rendered with.\n * This is the opacity that was set post-rendering.\n * @param viewer\n * @param entity\n */\n export function GetOpacity(params: {\n entity: VisualsRegister.Visual\n }) {\n const { entity } = params;\n return findOpacity(entity);\n }\n}","import { EntityUtils } from \"../../utils/entity-utils\";\nimport { Cartes, Carto, Entity, Geometry, MathUtils, ZoomControl, LRUCache } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { EnsureNumber } from \"../../internal/js-utils\";\n\nfunction distanceToSegment(fromPoint: Cesium.Cartesian3, toPoint1: Cesium.Cartesian3, toPoint2: Cesium.Cartesian3): number {\n const ab = Cesium.Cartesian3.subtract(toPoint2, toPoint1, new Cesium.Cartesian3());\n const ap = Cesium.Cartesian3.subtract(fromPoint, toPoint1, new Cesium.Cartesian3());\n\n const e = Cesium.Cartesian3.dot(ap, ab);\n if (e <= 0) {\n return Cesium.Cartesian3.distance(fromPoint, toPoint1);\n }\n const f = Cesium.Cartesian3.dot(ab, ab);\n if (e >= f) {\n return Cesium.Cartesian3.distance(fromPoint, toPoint2);\n }\n\n const proj = Cesium.Cartesian3.multiplyByScalar(ab, e / f, new Cesium.Cartesian3());\n const projECEF = Cesium.Cartesian3.add(toPoint1, proj, new Cesium.Cartesian3());\n return Cesium.Cartesian3.distance(fromPoint, projECEF);\n}\n\nfunction pointInsidePolygon(point: Carto.ICarto, polygon: Carto.ICarto[]): boolean {\n let inside = false;\n const x = point.latitude;\n const y = point.longitude;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const xi = +polygon[i].latitude;\n const yi = +polygon[i].longitude;\n const xj = +polygon[j].latitude;\n const yj = +polygon[j].longitude;\n if (isNaN(xi) || isNaN(yi) || isNaN(xj) || isNaN(yj)) {\n continue;\n }\n const intersect = (yi > y) !== (yj > y) && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi;\n if (intersect) {\n inside = !inside;\n }\n }\n return inside;\n}\n\nfunction distanceToPolygon(point: Carto.ICarto, polygon: Carto.ICarto[]): number {\n if (pointInsidePolygon(point, polygon)) {\n const avgAltitude = polygon.reduce((sum, vertex) => sum + vertex.altitude, 0) / polygon.length;\n return Math.abs(point.altitude - avgAltitude);\n }\n const pointECEF = Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\n let minDistance = Infinity;\n for (let i = 0; i < polygon.length; i++) {\n const point1 = polygon[i];\n const point1Latitude = EnsureNumber(point1.latitude);\n const point1Longitude = EnsureNumber(point1.longitude);\n if (!point1Latitude && !point1Longitude) {\n continue;\n }\n const point2 = polygon[(i + 1) % polygon.length];\n const point2Latitude = EnsureNumber(point2.latitude);\n const point2Longitude = EnsureNumber(point2.longitude);\n if (!point2Latitude && !point2Longitude) {\n continue;\n }\n const coord1ECEF = Cesium.Cartesian3.fromDegrees(\n point1Longitude,\n point1Latitude,\n EnsureNumber(point1.altitude)\n );\n const coord2ECEF = Cesium.Cartesian3.fromDegrees(\n point2Longitude,\n point2Latitude,\n EnsureNumber(point2.altitude)\n );\n const distance = distanceToSegment(pointECEF, coord1ECEF, coord2ECEF);\n minDistance = Math.min(minDistance, distance);\n }\n return minDistance;\n}\n\n// Cache for distance calculations.\n// It will keep only the most recent 3000 entries.\nconst distanceCache = new LRUCache<string, number>(3000);\nfunction createCacheKey(point: Carto.ICarto, entity: Entity.IEntity): string {\n try {\n const pointData = {\n latitude: MathUtils.Round(+point.latitude, 5),\n longitude: MathUtils.Round(+point.longitude, 5),\n altitude: MathUtils.Round(+point.altitude, 4)\n };\n const entityData = {\n ...entity.location,\n ...entity.geometry,\n ...entity.boundaries\n };\n return JSON.stringify(pointData) + '|' + JSON.stringify(entityData);\n }\n catch (e) {\n console.error(e);\n return null;\n }\n}\n\n/**\n * Calculates distance while accounting for polylines and polygons.\n * It does not account for multi-geometry.\n * @param point\n * @param entity\n * @returns\n */\nfunction calculateDistance(point: Carto.ICarto, entity: Entity.IEntity): number {\n const cacheKey = createCacheKey(point, entity);\n const cachedResult = cacheKey ? distanceCache.Get(cacheKey) : null;\n if (cachedResult || cachedResult == 0) {\n return cachedResult;\n }\n\n let minDistance = Infinity;\n const pointPos = Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\n\n // We'll start by using the entity location if it's available.\n let entityPos3d: Cesium.Cartesian3 = null;\n if (entity.location && entity.location.latitude) {\n const latitude = EnsureNumber(entity.location.latitude);\n const longitude = EnsureNumber(entity.location.longitude);\n // Disallowing exact 0.\n if (latitude || longitude) {\n const altitude = EnsureNumber(entity.location.altitude);\n entityPos3d = Cesium.Cartesian3.fromDegrees(longitude, latitude, altitude);\n }\n }\n if (!isNaN(entityPos3d.x)) {\n minDistance = Cesium.Cartesian3.distance(pointPos, entityPos3d);\n }\n // Check geometry if it's available.\n if (entity.geometry) {\n let passedGeometry = false;\n if (entity.geometry.Polygon) {\n const polygonRings = entity.geometry.Polygon;\n const polygon = typeof polygonRings == \"string\" ? String(polygonRings) : polygonRings.length ? polygonRings[0].LinearRing : \"\";\n let points = polygon ? Geometry.ParsePoints(polygon) : [];\n if (points.length > 2) {\n const distance = distanceToPolygon(point, points);\n if (!isNaN(distance)) {\n minDistance = Math.min(minDistance, distance);\n passedGeometry = true;\n }\n }\n }\n if (!passedGeometry && entity.geometry.LineString) {\n const points = Geometry.ParsePoints(entity.geometry.LineString);\n if (points.length > 1) {\n const pointsLen = points.length;\n for (let i = 0; i < pointsLen; i++) {\n const point1 = points[i];\n const point1Latitude = EnsureNumber(point1.latitude);\n const point1Longitude = EnsureNumber(point1.longitude);\n if (!point1Latitude && !point1Longitude) {\n continue;\n }\n const point2 = points[(i + 1) % pointsLen];\n const point2Latitude = EnsureNumber(point2.latitude);\n const point2Longitude = EnsureNumber(point2.longitude);\n if (!point2Latitude && !point2Longitude) {\n continue;\n }\n const coord1ECEF = Cesium.Cartesian3.fromDegrees(\n point1Longitude,\n point1Latitude,\n EnsureNumber(point1.altitude)\n );\n const coord2ECEF = Cesium.Cartesian3.fromDegrees(\n point2Longitude,\n point2Latitude,\n EnsureNumber(point2.altitude)\n );\n const distance = distanceToSegment(pointPos, coord1ECEF, coord2ECEF);\n if (!isNaN(distance)) {\n minDistance = Math.min(minDistance, distance);\n passedGeometry = true;\n }\n }\n }\n }\n }\n // Backup is using boundaries.\n if (minDistance === Infinity && entity.boundaries) {\n const point: Carto.ICarto = {\n latitude: (EnsureNumber(entity.boundaries.minLatitude) + EnsureNumber(entity.boundaries.maxLatitude)) / 2,\n longitude: (EnsureNumber(entity.boundaries.minLongitude) + EnsureNumber(entity.boundaries.maxLongitude)) / 2,\n altitude: 0\n };\n // Disallowing exact 0.\n if (point.latitude || point.longitude) {\n if (Carto.ValidateCarto(point)) {\n const boundsPoint = Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\n minDistance = Cesium.Cartesian3.distance(pointPos, boundsPoint);\n }\n }\n }\n\n if (cacheKey) {\n distanceCache.Set(cacheKey, minDistance);\n }\n return minDistance;\n}\n\nexport namespace RenderManager {\n export interface IManager {\n /**\n * Must be sync so that experience related to enabling/disabling is easier to manage.\n * If any async stuff needs to be loaded then it needs to be handled internally within the manager.\n */\n Init(): void;\n Dispose(): void;\n Disposed: boolean;\n ReRender(params: {\n entityIds?: string[],\n entities?: Entity.IEntity[],\n force?: boolean\n }): Promise<void>;\n }\n\n export function DetermineZoomItem(params: {\n viewer: Cesium.Viewer,\n entity: Entity.IEntity,\n zoomControl: ZoomControl.IItem[]\n }): ZoomControl.IItem {\n const {viewer, entity, zoomControl} = params;\n const pos = EntityUtils.GetPos({\n viewer,\n entity\n });\n if (!pos) {\n return null;\n }\n const is2d = viewer.scene.mode === Cesium.SceneMode.SCENE2D;\n const cameraPos = viewer.camera.positionCartographic;\n if (!cameraPos || !cameraPos.latitude) {\n return null;\n }\n const distance = calculateDistance({\n altitude: cameraPos.height,\n latitude: Cesium.Math.toDegrees(cameraPos.latitude),\n longitude: Cesium.Math.toDegrees(cameraPos.longitude)\n }, entity);\n let zoomItem = (!distance && distance != 0) ? null : GetZoomControlFromDistance({\n zoomControl,\n distance\n });\n // In 2d cesium gets camera position very wrong.\n // TODO: Need to check if lat/lon is correct and use that for distance calc instead.\n if (is2d && !zoomItem && zoomControl.length) {\n zoomItem = zoomControl[zoomControl.length - 1];\n }\n return zoomItem;\n }\n\n export function GetZoomControlFromDistance(params: {\n zoomControl: ZoomControl.IItem[],\n distance: number\n }): ZoomControl.IItem {\n const {zoomControl, distance} = params;\n for (let i = 0; i < zoomControl.length; i++) {\n let zoomItem = zoomControl[i];\n if ((distance >= EnsureNumber(zoomItem.MinZoom)) && (distance <= EnsureNumber(zoomItem.MaxZoom))) {\n return zoomItem;\n }\n }\n return <any>null;\n }\n\n export function GetZoomMinMax(params: {\n zoomControl: ZoomControl.IItem[]\n }): number[] {\n const {zoomControl} = params;\n let min = 0;\n let max = 100;\n for (let i = 0; i < zoomControl.length; i++) {\n const zoomItem = zoomControl[i];\n zoomItem.MinZoom = EnsureNumber(zoomItem.MinZoom);\n zoomItem.MaxZoom = EnsureNumber(zoomItem.MaxZoom);\n if (zoomItem.MinZoom != null) {\n if (zoomItem.MinZoom < min) {\n min = zoomItem.MinZoom;\n }\n }\n if (zoomItem.MaxZoom != null) {\n if (zoomItem.MaxZoom > max) {\n max = zoomItem.MaxZoom;\n }\n }\n }\n return [min, max];\n }\n}","import * as Cesium from \"cesium\";\nimport { Entity, BruceApi, ZoomControl, Style, EntityTag, Calculator, Color, Geometry, Carto, EntityLod, EntityType, IDictionary, ClientFile, ObjectUtils, Cartes } from \"bruce-models\";\nimport { EntityUtils } from \"../utils/entity-utils\";\nimport { RenderManager } from \"./render-managers/render-manager\";\nimport { VisualsRegister } from \"./visuals-register\";\nimport { EnsureNumber } from \"../internal/js-utils\";\n\nfunction colorToCColor(color: Color.IColor): Cesium.Color {\n return new Cesium.Color(\n color.red ? color.red/255 : 0,\n color.green ? color.green/255 : 0,\n color.blue ? color.blue/255 : 0,\n color.alpha\n );\n}\n\nfunction getPolygonStyleExtrusion(pStyle: any, entity: Entity.IEntity, tags: EntityTag.ITag[], heightRef: Cesium.HeightReference): number {\n const attrPath = pStyle.extrusionPath;\n if (!pStyle.useExtrusion || !attrPath) {\n return <any>null;\n }\n try {\n const extrusion = +Calculator.GetNumber(attrPath, entity, tags);\n if (!extrusion && extrusion != 0) {\n return <any>null;\n }\n /*\n Cesium extrudes in strange way.\n If you want something that is 50 meters above sea, and 5 meters tall,\n You need to extrude by 55 meters, if you extrude by 5 it will extrude from sea and look flat.\n */\n const height = <number>entity.location?.altitude;\n return heightRef != Cesium.HeightReference.CLAMP_TO_GROUND ? extrusion + height : extrusion;\n }\n catch (e) {\n console.error(e);\n }\n return 0;\n}\n\ninterface IExtrusionData {\n value: number;\n exHeightRef: Cesium.HeightReference;\n posses: Cesium.Cartesian3[];\n}\n\nfunction getPolygonExtrusion(\n entity: Entity.IEntity,\n tags: EntityTag.ITag[],\n ring: Geometry.IPolygonRing,\n posses: Cesium.Cartesian3[],\n heightRef: Cesium.HeightReference,\n pStyle: any\n): IExtrusionData {\n const data: IExtrusionData = {\n value: <any>undefined,\n exHeightRef: Cesium.HeightReference.RELATIVE_TO_GROUND,\n posses: <any>null\n }\n\n // Step 1. Try get using style.\n const extrusion = getPolygonStyleExtrusion(pStyle, entity, tags, heightRef);\n if (extrusion) {\n if (heightRef == Cesium.HeightReference.NONE) {\n // Let's normalize all point heights to be the same (at entity altitude).\n // This let's us have a consistent extrusion height, and be adjustable easier by user.\n let alt = <number>entity?.location?.altitude;\n if (!alt) {\n alt = 0;\n }\n\n const points = posses.map(x => Cesium.Cartographic.fromCartesian(x));\n points.forEach((point) => {\n point.height = alt;\n });\n posses = points.map(x => Cesium.Cartesian3.fromRadians(EnsureNumber(x.longitude), EnsureNumber(x.latitude), EnsureNumber(x.height)));\n }\n data.value = extrusion;\n }\n // Step 2. Try get using geometry data.\n else {\n data.exHeightRef = <any>undefined;\n if (ring.Height && ring.Height > 0) {\n const points = posses.map(x => Cesium.Cartographic.fromCartesian(x));\n if (points.length <= 0) {\n data.value = ring.Height;\n }\n else {\n let highest: number = <any>null;\n for (let i = 0; i < points.length; i++) {\n let pointHeight = points[i].height;\n if (pointHeight > highest || highest === null) {\n highest = pointHeight;\n }\n }\n highest = (highest === null ? 0 : highest) + ring.Height;\n data.value = highest;\n }\n data.exHeightRef = Cesium.HeightReference.NONE;\n }\n }\n\n data.posses = posses;\n if (data.value != undefined) {\n data.value = EnsureNumber(data.value);\n }\n return data;\n}\n\nfunction getHeightRef(style: any): Cesium.HeightReference {\n let heightRef = Cesium.HeightReference.CLAMP_TO_GROUND;\n const altOptionId = style?.altitudeOption?.id;\n if (altOptionId == 1) {\n heightRef = Cesium.HeightReference.NONE;\n }\n else if (altOptionId == 2) {\n heightRef = Cesium.HeightReference.RELATIVE_TO_GROUND;\n }\n return heightRef;\n}\n\nfunction getZIndex(style: any, entity: Entity.IEntity, tags: EntityTag.ITag[]): number {\n let zIndex = style?.zIndex ? +Calculator.GetNumber(style?.zIndex, entity, tags) : 0;\n if (zIndex == null) {\n zIndex = 0;\n }\n return EnsureNumber(zIndex);\n}\n\nfunction getValue<T>(viewer: Cesium.Viewer, obj: Cesium.Property | any): T {\n if ((obj as any)?.getValue) {\n return obj.getValue(viewer.scene.lastRenderTime);\n }\n return obj;\n}\n\nasync function getStyle(api: BruceApi.Api, entity: Entity.IEntity, styleId: number): Promise<Style.IStyle> {\n let style: Style.IStyle = <any>null;\n if (styleId) {\n style = (await Style.Get({\n api,\n styleId\n })).style;\n }\n if (!style) {\n const {entityType: type} = await EntityType.Get({\n api,\n entityTypeId: entity.Bruce[\"EntityType.ID\"]\n });\n if (type[\"DisplaySetting.ID\"]) {\n style = (await Style.Get({\n api,\n styleId: type[\"DisplaySetting.ID\"]\n })).style;\n }\n }\n return style;\n}\n\n/**\n * Height fix means while flat terrain is active we don't clamp-to-ground and instead place at alt=0.\n * This is currently breaking as the curvature of the earth makes larger polygons/polylines clip.\n * @param terrain \n * @returns \n */\nfunction shouldApplyFlatFix(terrain: Cesium.TerrainProvider) {\n //return terrain instanceof Cesium.EllipsoidTerrainProvider;\n return false;\n}\n\nfunction getRenderGroupId(zoomItem: ZoomControl.IItem, terrain: Cesium.TerrainProvider): string {\n if (!zoomItem) {\n return <any>null;\n }\n return zoomItem.MinZoom + \"-\" + zoomItem.MaxZoom + \"-\" + shouldApplyFlatFix(terrain);\n}\n\nlet _fileValidationCache: IDictionary<boolean> = {};\n\nfunction getDisplayCondition(min: number, max: number): Cesium.DistanceDisplayCondition {\n // Max is required.\n if (isNaN(+max)) {\n return undefined;\n }\n // Min is optional.\n if (isNaN(+min)) {\n min = 0;\n }\n // Adjusting slightly because I distrust our initial calculation vs Cesium's one.\n max = (+max) * 1.2;\n min = +min;\n if (min > 0) {\n min = (+min) * 0.8;\n }\n return new Cesium.DistanceDisplayCondition(min, max);\n}\n\nfunction getTranslucencyByDistance(min: number, max: number): Cesium.NearFarScalar {\n // Max is required.\n if (isNaN(+max)) {\n return undefined;\n }\n // Min is optional.\n if (isNaN(+min)) {\n min = 0;\n }\n // Adjusting slightly because I distrust our initial calculation vs Cesium's one.\n max = (+max) * 1.2;\n min = +min;\n if (min > 0) {\n min = (+min) * 0.8;\n }\n return new Cesium.NearFarScalar(min, 1, max, 0);\n}\n\nexport namespace EntityRenderEngine {\n export interface ICesiumEntityExt extends Cesium.Entity {\n _siblingGraphics?: Cesium.Entity[];\n _parentEntity?: Cesium.Entity;\n _renderGroup?: string;\n }\n\n export interface ICesiumModelExt extends Cesium.ModelGraphics {\n _clientFileId?: string;\n _entityScale?: {\n record?: number;\n style?: number;\n }\n }\n\n export interface IParams {\n apiGetter: BruceApi.IGetter,\n viewer: Cesium.Viewer;\n visualRegister: VisualsRegister.Register;\n menuItemId: string;\n zoomControl: ZoomControl.IItem[];\n entities: Entity.IEntity[];\n force?: boolean;\n }\n\n export async function Render(params: IParams): Promise<IDictionary<ICesiumEntityExt>> {\n const groupRenderParams = {\n apiGetter: params.apiGetter,\n viewer: params.viewer,\n entities: [],\n zoomItems: <IDictionary<ZoomControl.IItem>>{},\n menuItemId: params.menuItemId,\n visualRegister: params.visualRegister\n }\n // Flatten multi-geometry if it's only got 1 piece.\n for (let i = 0; i < params.entities.length; i++) {\n const entity = params.entities[i];\n const geometry = entity.geometry;\n if (geometry?.MultiGeometry?.length == 1) {\n entity.geometry = {\n ...entity.geometry,\n ...geometry.MultiGeometry[0],\n MultiGeometry: []\n };\n }\n }\n\n const cEntities: IDictionary<ICesiumEntityExt> = {};\n const models: Entity.IEntity[] = [];\n const multiGeometry: Entity.IEntity[] = [];\n const polygons: Entity.IEntity[] = [];\n const polylines: Entity.IEntity[] = [];\n const points: Entity.IEntity[] = [];\n\n // Initial sorting.\n for (let i = 0; i < params.entities.length; i++) {\n const entity = params.entities[i];\n const id = <string>entity.Bruce.ID;\n\n const zoomItem = RenderManager.DetermineZoomItem({\n viewer: params.viewer,\n entity,\n zoomControl: params.zoomControl\n });\n let displayType = zoomItem?.DisplayType;\n if (!displayType) {\n displayType = ZoomControl.EDisplayType.Hidden;\n }\n // Backwards compatibility.\n else if (<string>displayType == \"polygon\") {\n displayType = ZoomControl.EDisplayType.Geometry;\n }\n\n if (displayType != ZoomControl.EDisplayType.Hidden) {\n const newRenderId = getRenderGroupId(zoomItem, params.viewer?.terrainProvider);\n const existingRego = params.visualRegister.GetRego({\n entityId: id,\n menuItemId: params.menuItemId\n });\n const oldRenderId = (existingRego?.visual as ICesiumEntityExt)?._renderGroup;\n if (!params.force && newRenderId == oldRenderId && !existingRego?.stale) {\n cEntities[id] = existingRego.visual as ICesiumEntityExt;\n }\n else {\n if (displayType == ZoomControl.EDisplayType.Model3D) {\n models.push(entity);\n }\n else if (displayType == ZoomControl.EDisplayType.Geometry) {\n if (entity.geometry?.MultiGeometry?.length) {\n multiGeometry.push(entity);\n }\n else {\n polygons.push(entity);\n }\n }\n else {\n points.push(entity);\n }\n groupRenderParams.zoomItems[id] = zoomItem;\n }\n }\n }\n\n // Keep trying to render things in order of hard-coded priority system.\n if (models.length > 0) {\n const mParams: Model3d.IGroupParams = {\n ...groupRenderParams,\n entities: models\n };\n const mEntities = await Model3d.RenderGroup(mParams);\n for (let i = 0; i < mParams.entities.length; i++) {\n const entity = mParams.entities[i];\n const id = <string>entity.Bruce.ID;\n const cEntity = mEntities[id];\n if (cEntity) {\n cEntities[id] = cEntity;\n }\n else {\n multiGeometry.push(entity);\n }\n }\n }\n if (multiGeometry.length > 0) {\n for (let i = 0; i < multiGeometry.length; i++) {\n const entity = multiGeometry[i];\n if (!entity.geometry?.MultiGeometry?.length) {\n polygons.push(entity);\n continue;\n }\n const pParams: Polygon.IGroupParams | Polyline.IGroupParams = {\n ...groupRenderParams,\n entities: []\n };\n const zoomItem = pParams.zoomItems[entity.Bruce.ID];\n for (let j = 0; j < entity.geometry.MultiGeometry.length; j++) {\n const subEntity = {\n ...entity,\n geometry: entity.geometry.MultiGeometry[j],\n Bruce: {\n ...entity.Bruce,\n ID: ObjectUtils.UId()\n }\n };\n pParams.zoomItems[subEntity.Bruce.ID] = zoomItem;\n pParams.entities.push(subEntity);\n }\n const cPoly = await Polygon.RenderGroup(pParams);\n Object.keys(cPoly).forEach((key) => {\n if (cPoly[key]) {\n pParams.entities = pParams.entities.filter((e) => e.Bruce.ID != key);\n }\n });\n let rendered = Object.values(cPoly);\n const cLines = await Polyline.RenderGroup(pParams);\n Object.keys(cLines).forEach((key) => {\n if (cLines[key]) {\n pParams.entities = pParams.entities.filter((e) => e.Bruce.ID != key);\n }\n });\n rendered = rendered.concat(Object.values(cLines));\n const cPoints = await Point.RenderGroup(pParams);\n rendered = rendered.concat(Object.values(cPoints));\n rendered = rendered.filter(x => x != null);\n if (rendered.length) {\n const rootEntity = new Cesium.Entity({}) as ICesiumEntityExt;\n params.viewer.entities.add(rootEntity);\n rootEntity._siblingGraphics = [];\n rootEntity._renderGroup = getRenderGroupId(zoomItem, params.viewer?.terrainProvider);\n rootEntity._siblingGraphics = rootEntity._siblingGraphics.concat(rendered);\n cEntities[<string>entity.Bruce.ID] = rootEntity;\n const firstEntity = rendered[0];\n if (firstEntity) {\n rootEntity.position = getValue(params.viewer, firstEntity.position);\n }\n rendered.forEach((child) => {\n child._parentEntity = rootEntity;\n });\n }\n else {\n polygons.push(entity);\n }\n }\n }\n if (polygons.length > 0) {\n const pParams: Polygon.IGroupParams = {\n ...groupRenderParams,\n entities: polygons\n };\n const pEntities = await Polygon.RenderGroup(pParams);\n for (let i = 0; i < pParams.entities.length; i++) {\n const entity = pParams.entities[i];\n const cEntity = pEntities[<string>entity.Bruce.ID];\n if (cEntity) {\n cEntities[<string>entity.Bruce.ID] = cEntity;\n }\n else {\n polylines.push(entity);\n }\n }\n }\n if (polylines.length > 0) {\n const pParams: Polyline.IGroupParams = {\n ...groupRenderParams,\n entities: polylines\n };\n const pEntities = await Polyline.RenderGroup(pParams);\n for (let i = 0; i < pParams.entities.length; i++) {\n const entity = pParams.entities[i];\n const cEntity = pEntities[<string>entity.Bruce.ID];\n if (cEntity) {\n cEntities[<string>entity.Bruce.ID] = cEntity;\n }\n else {\n points.push(entity);\n }\n }\n }\n if (points.length > 0) {\n const pParams: Point.IGroupParams = {\n ...groupRenderParams,\n entities: points\n };\n const pEntities = await Point.RenderGroup(pParams);\n for (let i = 0; i < pParams.entities.length; i++) {\n const entity = pParams.entities[i];\n const cEntity = pEntities[<string>entity.Bruce.ID];\n if (cEntity) {\n cEntities[<string>entity.Bruce.ID] = cEntity;\n }\n }\n }\n\n return cEntities;\n }\n\n export function Remove(params: {\n viewer: Cesium.Viewer,\n entity: ICesiumEntityExt,\n }): void {\n function doRemove(params: {\n viewer: Cesium.Viewer,\n entity: ICesiumEntityExt,\n ignoreParent: boolean\n }) {\n const { viewer, entity, ignoreParent } = params;\n if (viewer.isDestroyed()) {\n return;\n }\n if (entity._parentEntity && !ignoreParent) {\n doRemove({\n viewer,\n entity: entity._parentEntity,\n ignoreParent: false\n });\n }\n if (entity._siblingGraphics) {\n for (let i = 0; i < entity._siblingGraphics.length; i++) {\n const sibling = entity._siblingGraphics[i];\n doRemove({\n viewer,\n entity: sibling,\n ignoreParent: true\n });\n }\n }\n if (viewer.entities.contains(entity)) {\n viewer.entities.remove(entity);\n }\n }\n doRemove({\n viewer: params.viewer,\n entity: params.entity,\n ignoreParent: false\n });\n }\n\n export namespace Point {\n export interface IParams {\n api: BruceApi.Api;\n style: Style.IPointSettings;\n entity: Entity.IEntity;\n tags: EntityTag.ITag[];\n viewer: Cesium.Viewer;\n // The min and max distance to display the entity.\n maxDistance?: number;\n minDistance?: number;\n }\n\n export interface IGroupParams {\n apiGetter: BruceApi.IGetter,\n menuItemId: string;\n entities: Entity.IEntity[];\n zoomItems: IDictionary<ZoomControl.IItem>;\n visualRegister: VisualsRegister.Register;\n viewer: Cesium.Viewer;\n }\n\n export async function Render(params: IParams): Promise<ICesiumEntityExt> {\n const entity = params.entity;\n const style = params.style;\n let type = style.Type;\n if (type == null) {\n // Very old backward compatibility.\n if ((style as any).useIcon == true) {\n type = Style.EPointType.Icon;\n }\n }\n\n let cEntity: ICesiumEntityExt = <any>null;\n let siblings: ICesiumEntityExt[] = [];\n\n if (type == Style.EPointType.Icon) {\n // Fixing poor data.\n let iconUrlRows = style.iconUrl == null ? [] : style.iconUrl;\n iconUrlRows.forEach((row) => {\n if (row.type == Calculator.EValueType.Color) {\n row.type = Calculator.EValueType.Input;\n }\n });\n\n const icon = Calculator.GetString(iconUrlRows, entity, params.tags);\n let iconUrl: string = <any>null;\n if (typeof icon == \"string\") {\n iconUrl = icon;\n }\n if (!iconUrl && style.iconId) {\n iconUrl = ClientFile.GetUrl({\n api: params.api,\n fileId: style.iconId\n });\n }\n\n // ND-1640 - Tags not appearing.\n // Validate file, else user will see nothing.\n // Pray we aren't loading some giant file.\n if (iconUrl) {\n try {\n if (_fileValidationCache[iconUrl] == null) {\n const res = await fetch(iconUrl);\n if (res.status != 200) {\n iconUrl = null;\n }\n _fileValidationCache[iconUrl] = Boolean(iconUrl);\n }\n else if (!_fileValidationCache[iconUrl]) {\n iconUrl = null;\n }\n }\n catch (e) {\n iconUrl = null;\n }\n }\n\n if (iconUrl) {\n let iconScale = EnsureNumber(Calculator.GetNumber(style.iconScale, entity, params.tags));\n if (!iconScale && iconScale != 0) {\n iconScale = 1;\n }\n if (iconScale > 0) {\n const heightRef = getHeightRef(style);\n cEntity = new Cesium.Entity({\n billboard: {\n horizontalOrigin: Cesium.HorizontalOrigin.CENTER,\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n image: iconUrl,\n heightReference: getHeightRef(style),\n scale: iconScale,\n distanceDisplayCondition: getDisplayCondition(params.minDistance, params.maxDistance),\n // Would be great once we have a setting for this.\n // translucencyByDistance: getTranslucencyByDistance(params.minDistance, params.maxDistance),\n },\n position: EntityUtils.GetPos({\n viewer: params.viewer,\n entity,\n recordHeightRef: heightRef,\n returnHeightRef: heightRef\n }),\n show: false\n });\n }\n }\n }\n if (type == Style.EPointType.Cylinder) {\n const radius = EnsureNumber(Calculator.GetNumber(style.CylinderRadius, entity, params.tags));\n if (radius <= 0) {\n return null;\n }\n const bFill: Color.IColor = style.CylinderFillColor ? Calculator.GetColor(style.CylinderFillColor, entity, params.tags) : null;\n const cFill = bFill ? colorToCColor(bFill) : Cesium.Color.RED;\n const outline = Boolean(style.CylinderBorderEnabled);\n let cOutline: Cesium.Color = null;\n let outlineWidth = 1;\n let outlineHeight = 0;\n if (outline) {\n const bOutline: Color.IColor = style.CylinderBorderColor ? Calculator.GetColor(style.CylinderBorderColor, entity, params.tags) : null;\n cOutline = bOutline ? colorToCColor(bOutline) : Cesium.Color.BLACK;\n outlineWidth = EnsureNumber(Calculator.GetNumber(style.CylinderBorderWidth, entity, params.tags), 1);\n outlineHeight = EnsureNumber(Calculator.GetNumber(style.CylinderBorderExtrusion, entity, params.tags), 0);\n }\n let fillHeight = EnsureNumber(Calculator.GetNumber(style.CylinderFillExtrusion, entity, params.tags));\n let exHeightRef: Cesium.HeightReference = undefined;\n if (fillHeight > 0) {\n exHeightRef = Cesium.HeightReference.RELATIVE_TO_GROUND;\n }\n\n const pos = EntityUtils.GetPos({\n viewer: params.viewer,\n entity,\n recordHeightRef: Cesium.HeightReference.CLAMP_TO_GROUND,\n returnHeightRef: Cesium.HeightReference.CLAMP_TO_GROUND\n });\n\n cEntity = new Cesium.Entity({\n ellipse: {\n semiMajorAxis: radius,\n semiMinorAxis: radius,\n material: cFill,\n outlineWidth: null,\n extrudedHeight: fillHeight,\n heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,\n extrudedHeightReference: exHeightRef,\n zIndex: 1,\n distanceDisplayCondition: getDisplayCondition(params.minDistance, params.maxDistance)\n },\n position: pos?.clone(),\n show: false\n });\n if (outline && outlineWidth > 0) {\n if (!exHeightRef && outlineHeight > 0) {\n exHeightRef = Cesium.HeightReference.RELATIVE_TO_GROUND;\n // We need height reference to match between rings.\n cEntity.ellipse.extrudedHeightReference = <Cesium.Property><any>exHeightRef;\n }\n siblings.push(new Cesium.Entity({\n ellipse: {\n semiMajorAxis: radius + outlineWidth,\n semiMinorAxis: radius + outlineWidth,\n material: cOutline,\n outlineWidth: undefined,\n extrudedHeight: outlineHeight,\n heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,\n extrudedHeightReference: exHeightRef,\n zIndex: 2,\n distanceDisplayCondition: getDisplayCondition(params.minDistance, params.maxDistance)\n },\n position: pos?.clone()\n }));\n }\n }\n if (!cEntity) {\n const bColor: Color.IColor = style.color ? Calculator.GetColor(style.color, entity, params.tags) : null;\n const cColor = bColor ? colorToCColor(bColor) : Cesium.Color.RED;\n\n let size = style.size ? <number>Calculator.GetNumber(style.size, entity, params.tags) : null;\n if (size == null) {\n size = 30;\n }\n size = EnsureNumber(size);\n if (size <= 0) {\n return <any>null;\n }\n const heightRef = getHeightRef(style);\n cEntity = new Cesium.Entity({\n point: {\n pixelSize: size,\n color: cColor,\n heightReference: getHeightRef(style),\n distanceDisplayCondition: getDisplayCondition(params.minDistance, params.maxDistance)\n },\n position: EntityUtils.GetPos({\n viewer: params.viewer,\n entity,\n recordHeightRef: heightRef,\n returnHeightRef: heightRef\n }),\n show: false\n });\n }\n if (cEntity) {\n params.viewer.entities.add(cEntity);\n if (siblings) {\n siblings.forEach((sibling) => {\n params.viewer.entities.add(sibling);\n });\n }\n cEntity._siblingGraphics = siblings;\n }\n return cEntity;\n }\n\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\n const api = params.apiGetter.getApi();\n\n const cEntities: IDictionary<ICesiumEntityExt> = {};\n for (let i = 0; i < params.entities.length; i++) {\n const entity = params.entities[i];\n\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\n let tags: EntityTag.ITag[] = [];\n if (tagIds && tagIds.length > 0) {\n tags = (await EntityTag.GetListByIds({\n api,\n tagIds\n })).tags;\n }\n const pStyle = (style?.Settings as Style.IEntitySettings)?.pointStyle ?? <any>{};\n const cEntity = await Render({\n entity: entity,\n style: pStyle,\n tags: tags,\n viewer: params.viewer,\n api: api,\n maxDistance: zoomItem.MaxZoom,\n minDistance: zoomItem.MinZoom\n });\n if (cEntity) {\n cEntity._renderGroup = getRenderGroupId(zoomItem, params.viewer?.terrainProvider);\n }\n\n cEntities[<string>entity.Bruce.ID] = cEntity;\n }\n\n return cEntities;\n }\n }\n\n export namespace Polyline {\n export interface IParams {\n style: Style.IPolylineSettings;\n entity: Entity.IEntity;\n tags: EntityTag.ITag[];\n viewer: Cesium.Viewer;\n // The min and max distance to display the entity.\n maxDistance?: number;\n minDistance?: number;\n }\n\n export interface IGroupParams {\n apiGetter: BruceApi.IGetter,\n menuItemId: string;\n entities: Entity.IEntity[];\n zoomItems: IDictionary<ZoomControl.IItem>;\n visualRegister: VisualsRegister.Register;\n viewer: Cesium.Viewer;\n }\n\n export function Render(params: IParams): ICesiumEntityExt {\n const entity = params.entity;\n\n const line = entity.geometry?.LineString;\n const points: Carto.ICarto[] = line && typeof line == \"string\" ? Geometry.ParsePoints(line) : [];\n if (!points || points.length < 2) {\n return <any>null;\n }\n let isValid = true;\n for (let i = 0; i < points.length; i++) {\n if (!Carto.ValidateCarto(points[i])) {\n isValid = false;\n break;\n }\n }\n if (!isValid) {\n return <any>null;\n }\n\n const style = params.style;\n let heightRef = getHeightRef(style);\n let flattenPoints = false;\n // We gain a lot of performance when not clamping.\n // If there is no terrain we can safely not clamp.\n if (\n heightRef == Cesium.HeightReference.CLAMP_TO_GROUND && shouldApplyFlatFix(params.viewer?.terrainProvider)\n ) {\n heightRef = Cesium.HeightReference.NONE;\n flattenPoints = true;\n }\n const posses = points.map(\n x => Cesium.Cartesian3.fromDegrees(\n EnsureNumber(x.longitude),\n EnsureNumber(x.latitude),\n EnsureNumber(\n flattenPoints ? 0 : x.altitude\n )\n )\n );\n\n // 5 points should be enough to tell most bad data.\n const CHECK_POINTS = 5;\n const MIN_LEN = 0.001;\n const MAX_LEN = 4500000;\n let totalLength = 0;\n for (let i = 0; i < posses.length; i++) {\n if (i > CHECK_POINTS) {\n break;\n }\n let pos1 = posses[i];\n let pos2 = posses[i + 1];\n if (pos1 && pos2) {\n totalLength += Cesium.Cartesian3.distance(pos1, pos2);\n }\n }\n if (totalLength < MIN_LEN || totalLength > MAX_LEN) {\n return <any>null;\n }\n\n const bColor: Color.IColor = style.lineColor ? <any>Calculator.GetColor(style.lineColor, entity, params.tags) : null;\n const cColor = bColor ? colorToCColor(bColor) : Cesium.Color.RED;\n if (cColor.alpha <= 0) {\n return <any>null;\n }\n\n let width = style.lineWidth ? <number>Calculator.GetNumber(style.lineWidth, entity, params.tags) : null;\n if (width == null) {\n width = 4;\n }\n width = EnsureNumber(width);\n if (width < 0.01) {\n width = 0;\n }\n if (width <= 0) {\n return <any>null;\n }\n\n const cEntity: ICesiumEntityExt = new Cesium.Entity({\n polyline: {\n positions: posses,\n material: <Cesium.MaterialProperty><any>cColor,\n width: width,\n classificationType: Cesium.ClassificationType.TERRAIN,\n arcType: Cesium.ArcType.GEODESIC,\n zIndex: getZIndex(style, entity, params.tags),\n clampToGround: heightRef == Cesium.HeightReference.CLAMP_TO_GROUND,\n distanceDisplayCondition: getDisplayCondition(params.minDistance, params.maxDistance)\n },\n position: EntityUtils.GetPos({\n viewer: params.viewer,\n entity,\n recordHeightRef: heightRef,\n returnHeightRef: heightRef\n }),\n show: false\n });\n\n params.viewer.entities.add(cEntity);\n return cEntity;\n }\n\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\n const api = params.apiGetter.getApi();\n const cEntities: IDictionary<ICesiumEntityExt> = {};\n for (let i = 0; i < params.entities.length; i++) {\n const entity = params.entities[i];\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\n let tags: EntityTag.ITag[] = [];\n if (tagIds && tagIds.length > 0) {\n tags = (await EntityTag.GetListByIds({\n api,\n tagIds\n })).tags;\n }\n const lStyle = (style?.Settings as Style.IEntitySettings)?.polylineStyle ?? <any>{};\n\n const cEntity = Render({\n entity: entity,\n style: lStyle,\n tags: tags,\n viewer: params.viewer,\n maxDistance: zoomItem.MaxZoom,\n minDistance: zoomItem.MinZoom\n });\n if (cEntity) {\n cEntity._renderGroup = getRenderGroupId(zoomItem, params.viewer?.terrainProvider);\n cEntities[<string>entity.Bruce.ID] = cEntity;\n }\n }\n return cEntities;\n }\n }\n\n export namespace Polygon {\n export interface IParams {\n style: Style.IPolygonSettings;\n entity: Entity.IEntity;\n tags: EntityTag.ITag[];\n viewer: Cesium.Viewer;\n // The min and max distance to display the entity.\n maxDistance?: number;\n minDistance?: number;\n }\n\n export interface IGroupParams {\n apiGetter: BruceApi.IGetter,\n menuItemId: string;\n entities: Entity.IEntity[];\n zoomItems: IDictionary<ZoomControl.IItem>;\n visualRegister: VisualsRegister.Register;\n viewer: Cesium.Viewer;\n }\n\n export function Render(params: IParams): ICesiumEntityExt {\n const entity = params.entity;\n const pRings = entity.geometry?.Polygon;\n if (pRings == null || pRings.length <= 0) {\n return <any>null;\n }\n const style = params.style;\n\n const bFillColor = Calculator.GetColor(style.fillColor, entity, params.tags);\n const cFillColor = bFillColor ? colorToCColor(bFillColor) : Cesium.Color.RED;\n\n const bLineColor = Calculator.GetColor(style.lineColor, entity, params.tags);\n const cLineColor = bLineColor ? colorToCColor(bLineColor) : Cesium.Color.RED;\n\n let width = style.lineWidth ? <number>Calculator.GetNumber(style.lineWidth, entity, params.tags) : null;\n if (width == null) {\n width = 4;\n }\n width = EnsureNumber(width);\n if (width < 0.01) {\n width = 0;\n }\n\n // If both outline and fill is not available then don't render anything.\n if (\n (width <= 0 || cLineColor.alpha <= 0) && \n cFillColor.alpha <= 0\n ) {\n return <any>null;\n }\n\n let heightRef = getHeightRef(style);\n\n const outerRing = <Geometry.IPolygonRing>pRings.find(x => x.Facing == Geometry.EPolygonRingType.Boundaries);\n const points = Geometry.ParsePoints(outerRing?.LinearRing);\n let posses = points.map(x => Cesium.Cartesian3.fromDegrees(EnsureNumber(x.longitude), EnsureNumber(x.latitude), EnsureNumber(x.altitude)));\n Cartes.CloseRing3(posses);\n const extrusion = getPolygonExtrusion(\n entity,\n params.tags,\n outerRing,\n posses,\n heightRef,\n style\n );\n posses = extrusion.posses;\n\n let flattenPoints = false;\n if (\n heightRef == Cesium.HeightReference.CLAMP_TO_GROUND && shouldApplyFlatFix(params.viewer?.terrainProvider)\n ) {\n heightRef = Cesium.HeightReference.NONE;\n flattenPoints = true;\n }\n\n const holeRings = pRings.filter(x => x.Facing == Geometry.EPolygonRingType.Hole);\n const holePosses = holeRings.map((x) => {\n const points = Geometry.ParsePoints(x.LinearRing);\n return points.map(x => Cesium.Cartesian3.fromDegrees(\n EnsureNumber(x.longitude),\n EnsureNumber(x.latitude),\n EnsureNumber(flattenPoints ? 0 : x.altitude)\n ));\n });\n\n const zIndex = getZIndex(style, entity, params.tags);\n\n const cEntity: ICesiumEntityExt = new Cesium.Entity({\n polygon: {\n hierarchy: new Cesium.PolygonHierarchy(posses, holePosses.map(x => new Cesium.PolygonHierarchy(x))),\n material: cFillColor,\n extrudedHeight: extrusion.value,\n extrudedHeightReference: extrusion.exHeightRef,\n shadows: Cesium.ShadowMode.ENABLED,\n heightReference: heightRef,\n classificationType: Cesium.ClassificationType.BOTH,\n perPositionHeight: heightRef == Cesium.HeightReference.CLAMP_TO_GROUND ? false : true,\n zIndex: zIndex,\n distanceDisplayCondition: getDisplayCondition(params.minDistance, params.maxDistance)\n },\n position: EntityUtils.GetPos({\n viewer: params.viewer,\n entity,\n recordHeightRef: heightRef,\n returnHeightRef: heightRef\n }),\n show: false\n });\n cEntity._siblingGraphics = [];\n\n if (width > 0 && cLineColor) {\n let borderPosses = posses;\n if (flattenPoints) {\n borderPosses = points.map(x => Cesium.Cartesian3.fromDegrees(\n EnsureNumber(x.longitude),\n EnsureNumber(x.latitude),\n EnsureNumber(0))\n );\n Cartes.CloseRing3(borderPosses);\n }\n const cEntityBorder: ICesiumEntityExt = new Cesium.Entity({\n polyline: new Cesium.PolylineGraphics({\n positions: borderPosses,\n material: <Cesium.MaterialProperty><any>cLineColor,\n width: width,\n clampToGround: heightRef == Cesium.HeightReference.CLAMP_TO_GROUND,\n classificationType: Cesium.ClassificationType.TERRAIN,\n arcType: Cesium.ArcType.GEODESIC,\n zIndex: zIndex,\n distanceDisplayCondition: getDisplayCondition(params.minDistance, params.maxDistance)\n }),\n show: false\n });\n params.viewer.entities.add(cEntityBorder);\n cEntityBorder._parentEntity = cEntity;\n cEntity._siblingGraphics.push(cEntityBorder);\n\n for (let i = 0; i < holePosses.length; i++) {\n const posses = holePosses[i];\n Cartes.CloseRing3(posses);\n const cEntityHole: ICesiumEntityExt = new Cesium.Entity({\n polyline: new Cesium.PolylineGraphics({\n positions: posses,\n material: <Cesium.MaterialProperty><any>cLineColor,\n width: width,\n clampToGround: heightRef == Cesium.HeightReference.CLAMP_TO_GROUND,\n classificationType: Cesium.ClassificationType.TERRAIN,\n arcType: Cesium.ArcType.GEODESIC,\n zIndex: zIndex,\n distanceDisplayCondition: getDisplayCondition(params.minDistance, params.maxDistance)\n }),\n show: false\n });\n cEntity._siblingGraphics.push(cEntityHole);\n cEntityHole._parentEntity = cEntity;\n params.viewer.entities.add(cEntityHole);\n }\n }\n\n params.viewer.entities.add(cEntity);\n return cEntity;\n }\n\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\n const api = params.apiGetter.getApi();\n const cEntities: IDictionary<ICesiumEntityExt> = {};\n for (let i = 0; i < params.entities.length; i++) {\n const entity = params.entities[i];\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\n\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\n let tags: EntityTag.ITag[] = [];\n if (tagIds && tagIds.length > 0) {\n tags = (await EntityTag.GetListByIds({\n api,\n tagIds\n })).tags;\n }\n const pStyle = (style?.Settings as Style.IEntitySettings)?.polygonStyle ?? <any>{};\n\n const cEntity = Render({\n entity: entity,\n style: pStyle,\n tags: tags,\n viewer: params.viewer,\n maxDistance: zoomItem.MaxZoom,\n minDistance: zoomItem.MinZoom\n });\n if (cEntity) {\n cEntity._renderGroup = getRenderGroupId(zoomItem, params.viewer?.terrainProvider);\n cEntities[<string>entity.Bruce.ID] = cEntity;\n }\n }\n return cEntities;\n }\n }\n\n export namespace Model3d {\n export interface IParams {\n lodUrl: string;\n lodClientFileId?: string;\n style: Style.IModelSettings;\n entity: Entity.IEntity;\n tags: EntityTag.ITag[];\n viewer: Cesium.Viewer;\n // The min and max distance to display the entity.\n maxDistance?: number;\n minDistance?: number;\n }\n\n export interface IGroupParams {\n apiGetter: BruceApi.IGetter,\n menuItemId: string;\n entities: Entity.IEntity[];\n zoomItems: IDictionary<ZoomControl.IItem>;\n visualRegister: VisualsRegister.Register;\n viewer: Cesium.Viewer;\n }\n\n export function Render(params: IParams): ICesiumEntityExt {\n const entity = params.entity;\n\n const transform = entity?.transform;\n let heading = EnsureNumber(transform?.heading);\n heading = (heading + 90) % 360;\n const pitch = EnsureNumber(transform?.pitch);\n const roll = EnsureNumber(transform?.roll);\n\n let scale = EnsureNumber(transform?.scale, 1);\n if (scale <= 0) {\n scale = 1;\n }\n\n const style = params.style;\n let styleScale = style?.scale ? Calculator.GetNumber(style?.scale, entity, params.tags) : null;\n styleScale = EnsureNumber(styleScale ? styleScale : 1);\n if (styleScale <= 0) {\n styleScale = 1;\n }\n\n const hpr = new Cesium.HeadingPitchRoll(\n Cesium.Math.toRadians(heading),\n Cesium.Math.toRadians(pitch),\n Cesium.Math.toRadians(roll)\n );\n\n let heightRef = getHeightRef(style);\n let pos = EntityUtils.GetPos({\n viewer: params.viewer,\n entity,\n recordHeightRef: heightRef,\n returnHeightRef: heightRef\n });\n if (heightRef == Cesium.HeightReference.CLAMP_TO_GROUND) {\n const carto = Cesium.Cartographic.fromCartesian(pos);\n pos = Cesium.Cartesian3.fromRadians(EnsureNumber(carto.longitude), EnsureNumber(carto.latitude), 0);\n heightRef = Cesium.HeightReference.RELATIVE_TO_GROUND;\n }\n const orientation = Cesium.Transforms.headingPitchRollQuaternion(pos, hpr);\n\n let blendMode: number = <any>null;\n let blendAmount: number = <any>null;\n let color: Cesium.Color = <any>null;\n if (style?.customize) {\n blendMode = style.fillColorBlendMode;\n if (!blendMode) {\n blendMode = Cesium.ColorBlendMode.HIGHLIGHT;\n }\n if (blendMode == Cesium.ColorBlendMode.MIX) {\n blendAmount = <any>style.fillColorBlendAmount;\n if (!blendAmount) {\n blendAmount = 0.5;\n }\n }\n const bColor = Calculator.GetColor(style.fillColor, entity, params.tags);\n if (bColor) {\n color = colorToCColor(bColor);\n }\n }\n\n const cEntity: ICesiumEntityExt = new Cesium.Entity({\n model: {\n uri: params.lodUrl,\n heightReference: heightRef,\n scale: scale * styleScale,\n shadows: Cesium.ShadowMode.ENABLED,\n colorBlendAmount: blendAmount,\n colorBlendMode: blendMode,\n color: color,\n distanceDisplayCondition: getDisplayCondition(params.minDistance, params.maxDistance)\n },\n orientation: <Cesium.Property><any>orientation,\n position: pos,\n show: false\n });\n const model = cEntity.model as ICesiumModelExt;\n model._clientFileId = params.lodClientFileId;\n model._entityScale = {\n record: scale,\n style: styleScale\n };\n\n params.viewer.entities.add(cEntity);\n return cEntity;\n }\n\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\n const api = params.apiGetter.getApi();\n const cEntities: IDictionary<ICesiumEntityExt> = {};\n const reqBody: EntityLod.Filter.IListParams = {\n \"strict\": false,\n \"externalSources\": false,\n \"Items\": []\n };\n\n for (let i = 0; i < params.entities.length; i++) {\n const entity = params.entities[i];\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\n let tags: EntityTag.ITag[] = [];\n if (tagIds && tagIds.length > 0) {\n tags = (await EntityTag.GetListByIds({\n api,\n tagIds\n })).tags;\n }\n const mStyle = (style?.Settings as Style.IEntitySettings)?.modelStyle ?? <any>{};\n let group = mStyle.lodGroup ? Calculator.GetString(mStyle.lodGroup, entity, tags) : null;\n if (!group) {\n group = \"DEFAULT\";\n }\n let level = <number>+<any>zoomItem.LODLevel;\n if (!level) {\n level = 0;\n }\n let catId = <string>zoomItem.LODCategoryID;\n if (!catId) {\n catId = \"glb\";\n }\n reqBody.Items.push({\n \"entityId\": <string>entity.Bruce.ID,\n \"categoryId\": catId,\n \"group\": <string>group,\n \"level\": level\n });\n }\n\n const {lods: lodData} = await EntityLod.GetLods({\n api,\n filter: reqBody\n });\n\n for (let i = 0; i < params.entities.length; i++) {\n const entity = params.entities[i];\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\n let tags: EntityTag.ITag[] = [];\n if (tagIds && tagIds.length > 0) {\n tags = (await EntityTag.GetListByIds({\n api,\n tagIds\n })).tags;\n }\n\n const lod = lodData.find(x => x.entityId == entity.Bruce.ID);\n if (!lod?.clientFileId) {\n continue;\n }\n const mStyle = (style?.Settings as Style.IEntitySettings)?.modelStyle ?? <any>{};\n const cEntity = Render({\n entity: entity,\n style: mStyle,\n tags: tags,\n viewer: params.viewer,\n lodUrl: ClientFile.GetUrl({\n api,\n fileId: lod.clientFileId\n }),\n lodClientFileId: lod.clientFileId,\n maxDistance: zoomItem.MaxZoom,\n minDistance: zoomItem.MinZoom\n })\n if (cEntity) {\n cEntity._renderGroup = getRenderGroupId(zoomItem, params.viewer?.terrainProvider);\n cEntities[<string>entity.Bruce.ID] = cEntity;\n }\n }\n\n return cEntities;\n }\n }\n}","import { DelayQueue, LRUCache } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\n\r\nfunction GetValue<T>(viewer: Cesium.Viewer, obj: Cesium.Property | any): T {\r\n if ((obj as any)?.getValue) {\r\n return obj.getValue(viewer.scene.lastRenderTime);\r\n }\r\n return obj;\r\n}\r\n\r\ninterface Shape {\r\n x: number;\r\n y: number;\r\n width: number;\r\n height: number;\r\n Contains(point: Point): boolean;\r\n}\r\n\r\nclass Point {\r\n public lon: number;\r\n public lat: number;\r\n public id: string;\r\n\r\n constructor(lon, lat, id) {\r\n this.lon = lon;\r\n this.lat = lat;\r\n this.id = id;\r\n }\r\n}\r\n\r\nclass Circle implements Shape {\r\n public x: number;\r\n public y: number;\r\n public radius: number;\r\n public width: number;\r\n public height: number;\r\n\r\n constructor(x: number, y: number, radius: number) {\r\n this.x = x;\r\n this.y = y;\r\n this.radius = radius;\r\n this.width = 2 * radius;\r\n this.height = 2 * radius;\r\n }\r\n\r\n public Intersects(range: Circle | Rectangle) {\r\n let xDist = Math.abs(range.x - this.x);\r\n let yDist = Math.abs(range.y - this.y);\r\n\r\n let r = this.radius;\r\n let w = range.width;\r\n let h = range.height;\r\n\r\n if (xDist > (w + r) || yDist > (h + r)) {\r\n return false;\r\n }\r\n\r\n if (xDist <= w || yDist <= h) {\r\n return true;\r\n }\r\n\r\n let dx = xDist - w;\r\n let dy = yDist - h;\r\n return (dx * dx + dy * dy <= this.radius * this.radius);\r\n }\r\n\r\n public Contains(point: Point): boolean {\r\n const dx = this.x - point.lon;\r\n const dy = this.y - point.lat;\r\n const distance = Math.sqrt(dx * dx + dy * dy);\r\n return distance <= this.radius;\r\n }\r\n}\r\n\r\nclass Rectangle implements Shape {\r\n public x: number;\r\n public y: number;\r\n // Actual width.\r\n public w: number;\r\n // Actual height.\r\n public h: number;\r\n // for compatibility with Shape.\r\n public width: number;\r\n // for compatibility with Shape.\r\n public height: number;\r\n\r\n constructor(x: number, y: number, w: number, h: number) {\r\n this.x = x;\r\n this.y = y;\r\n this.w = w;\r\n this.h = h;\r\n this.width = 2 * w;\r\n this.height = 2 * h;\r\n }\r\n\r\n public Contains(point: Point) {\r\n return (point.lon >= this.x - this.w &&\r\n point.lon < this.x + this.w &&\r\n point.lat >= this.y - this.h &&\r\n point.lat < this.y + this.h);\r\n }\r\n\r\n public Intersects(range: Rectangle) {\r\n return !(range.x - range.w > this.x + this.w ||\r\n range.x + range.w < this.x - this.w ||\r\n range.y - range.h > this.y + this.h ||\r\n range.y + range.h < this.y - this.h);\r\n }\r\n}\r\n\r\nclass Quad {\r\n public boundary: Rectangle;\r\n public capacity: number;\r\n public points: Point[];\r\n public divided: boolean;\r\n public northeast: Quad;\r\n public northwest: Quad;\r\n public southeast: Quad;\r\n public southwest: Quad;\r\n\r\n constructor(boundary: Rectangle, capacity: number) {\r\n this.boundary = boundary;\r\n this.capacity = capacity;\r\n this.points = [];\r\n this.divided = false;\r\n }\r\n\r\n public Subdivide() {\r\n let x = this.boundary.x;\r\n let y = this.boundary.y;\r\n let w = this.boundary.w / 2;\r\n let h = this.boundary.h / 2;\r\n\r\n let ne = new Rectangle(x + w / 2, y - h / 2, w, h);\r\n this.northeast = new Quad(ne, this.capacity);\r\n let nw = new Rectangle(x - w / 2, y - h / 2, w, h);\r\n this.northwest = new Quad(nw, this.capacity);\r\n let se = new Rectangle(x + w / 2, y + h / 2, w, h);\r\n this.southeast = new Quad(se, this.capacity);\r\n let sw = new Rectangle(x - w / 2, y + h / 2, w, h);\r\n this.southwest = new Quad(sw, this.capacity);\r\n\r\n this.divided = true;\r\n }\r\n\r\n public Insert(point: Point) {\r\n if (!this.boundary.Contains(point)) {\r\n return false;\r\n }\r\n\r\n if (this.points.length < this.capacity) {\r\n this.points.push(point);\r\n return true;\r\n }\r\n\r\n if (!this.divided) {\r\n this.Subdivide();\r\n }\r\n\r\n return (this.northeast.Insert(point) || this.northwest.Insert(point) ||\r\n this.southeast.Insert(point) || this.southwest.Insert(point));\r\n }\r\n\r\n public Query(range: Circle | Rectangle, found: Point[]): Point[] {\r\n if (!found) {\r\n found = [];\r\n }\r\n if (!range.Intersects(this.boundary)) {\r\n return found;\r\n }\r\n\r\n for (let p of this.points) {\r\n if (range.Contains(p)) {\r\n found.push(p);\r\n }\r\n }\r\n\r\n if (this.divided) {\r\n this.northwest.Query(range, found);\r\n this.northeast.Query(range, found);\r\n this.southwest.Query(range, found);\r\n this.southeast.Query(range, found);\r\n }\r\n\r\n return found;\r\n }\r\n\r\n public Find(id: string): Point | null {\r\n for (let point of this.points) {\r\n if (point.id === id) {\r\n return point;\r\n }\r\n }\r\n\r\n if (this.divided) {\r\n return this.northwest.Find(id) || this.northeast.Find(id) ||\r\n this.southwest.Find(id) || this.southeast.Find(id);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public Remove(point: Point): void {\r\n let index = this.points.indexOf(point);\r\n\r\n if (index !== -1) {\r\n this.points.splice(index, 1);\r\n }\r\n\r\n if (this.divided) {\r\n this.northwest.Remove(point);\r\n this.northeast.Remove(point);\r\n this.southwest.Remove(point);\r\n this.southeast.Remove(point);\r\n }\r\n }\r\n\r\n public GetDistanceToQuad(pos3d: Cesium.Cartesian3) {\r\n const minLat = this.boundary.y - this.boundary.h;\r\n const maxLat = this.boundary.y + this.boundary.h;\r\n const minLon = this.boundary.x - this.boundary.w;\r\n const maxLon = this.boundary.x + this.boundary.w;\r\n const points = [\r\n // Corners.\r\n new Cesium.Cartesian3(minLon, minLat, 0),\r\n new Cesium.Cartesian3(minLon, maxLat, 0),\r\n new Cesium.Cartesian3(maxLon, minLat, 0),\r\n new Cesium.Cartesian3(maxLon, maxLat, 0),\r\n // Center.\r\n new Cesium.Cartesian3(this.boundary.x, this.boundary.y, 0)\r\n ];\r\n let shortest = Number.MAX_VALUE;\r\n for (let point of points) {\r\n const distance = Cesium.Cartesian3.distance(pos3d, point);\r\n if (distance < shortest) {\r\n shortest = distance;\r\n }\r\n }\r\n return shortest;\r\n }\r\n}\r\n\r\ntype Cluster = {\r\n center: Point;\r\n points: Point[];\r\n};\r\n\r\ntype ClusterResult = {\r\n clusters: Cluster[];\r\n noLongerClustered: Set<string>;\r\n};\r\n\r\nconst _clusterImageCache = new LRUCache(500);\r\nconst _clusterImageLoadedCache = new LRUCache(500);\r\nasync function _loadClusterImage(params: {\r\n size: number,\r\n txtColor: string,\r\n bgColor: string,\r\n text: string,\r\n iconUrl?: string\r\n}) {\r\n const { size, txtColor, bgColor, text, iconUrl } = params;\r\n const key = `${size}-${txtColor}-${bgColor}-${text}-${iconUrl}`;\r\n const cacheData = _clusterImageCache.Get(key);\r\n if (cacheData) {\r\n return await cacheData;\r\n }\r\n\r\n const prom = new Promise((res, rej) => {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = size;\r\n canvas.height = size;\r\n const ctx = canvas.getContext(\"2d\");\r\n\r\n const WHITESPACE_PADDING_PERCENT = 0.05;\r\n const radius = (size / 2) - (size * WHITESPACE_PADDING_PERCENT);\r\n \r\n const drawWithoutImage = (img?: HTMLImageElement) => {\r\n ctx.beginPath();\r\n ctx.arc(size / 2, size / 2, radius, 0, 2 * Math.PI, false);\r\n \r\n let fill = null;\r\n let txt = null;\r\n if (img) {\r\n const brightness = calculateImageBrightness(img);\r\n fill = brightness < 128 ? \"white\" : \"#114d78\";\r\n txt = brightness < 128 ? \"black\" : \"white\";\r\n } \r\n else {\r\n fill = bgColor ? bgColor : \"#114d78\";\r\n txt = txtColor ? txtColor : \"white\";\r\n }\r\n ctx.fillStyle = fill;\r\n ctx.fill();\r\n \r\n const maxTextWidth = size * 0.7;\r\n const maxTextHeight = size * 0.7;\r\n const minTextSize = Math.floor(size / 12);\r\n const textSize = findOptimalFontSize(text, maxTextWidth, maxTextHeight, minTextSize);\r\n \r\n ctx.font = `bold ${textSize}px Arial`;\r\n ctx.fillStyle = txt;\r\n ctx.textAlign = \"center\";\r\n ctx.textBaseline = \"middle\";\r\n ctx.fillText(text, size / 2, size / 2);\r\n };\r\n \r\n const drawWithImage = (img) => {\r\n const aspectRatio = img.width / img.height;\r\n let imageSize = Math.min(radius, img.width, img.height);\r\n if (imageSize / aspectRatio > radius) {\r\n imageSize = radius * aspectRatio;\r\n }\r\n const imageX = (size - imageSize) / 2;\r\n const imageY = (size - imageSize) / 2 - imageSize / 3;\r\n \r\n ctx.beginPath();\r\n ctx.arc(size / 2, size / 2, radius, 0, 2 * Math.PI, false);\r\n \r\n const brightness = calculateImageBrightness(img);\r\n const bgColor = brightness < 128 ? \"white\" : \"#114d78\";\r\n const txtColor = brightness < 128 ? \"black\" : \"white\";\r\n \r\n ctx.fillStyle = bgColor;\r\n ctx.fill();\r\n \r\n ctx.shadowColor = \"rgba(0, 0, 0, 0.3)\";\r\n ctx.shadowOffsetX = 3;\r\n ctx.shadowOffsetY = 3;\r\n ctx.shadowBlur = 5;\r\n ctx.drawImage(img, imageX, imageY, imageSize, imageSize);\r\n \r\n const padding = imageSize / 7;\r\n const maxTextWidth = imageSize;\r\n const maxTextHeight = imageSize - padding;\r\n const minTextSize = Math.floor(imageSize / 5);\r\n const textSize = findOptimalFontSize(text, maxTextWidth, maxTextHeight, minTextSize);\r\n \r\n ctx.font = `bold ${textSize}px Arial`;\r\n ctx.fillStyle = txtColor;\r\n ctx.textAlign = \"center\";\r\n ctx.textBaseline = \"top\";\r\n ctx.shadowColor = \"rgba(0, 0, 0, 0)\";\r\n ctx.shadowOffsetX = 0;\r\n ctx.shadowOffsetY = 0;\r\n ctx.shadowBlur = 0;\r\n \r\n ctx.fillText(text, size / 2, imageY + imageSize + padding);\r\n };\r\n \r\n const findOptimalFontSize = (text, maxWidth, maxHeight, minSize) => {\r\n let fontSize = maxHeight;\r\n const tempCanvas = document.createElement(\"canvas\");\r\n const tempCtx = tempCanvas.getContext(\"2d\");\r\n \r\n while (fontSize > minSize) {\r\n tempCtx.font = `bold ${fontSize}px Arial`;\r\n const measuredWidth = tempCtx.measureText(text).width;\r\n const measuredHeight = fontSize * 1.2;\r\n if (measuredWidth <= maxWidth && measuredHeight <= maxHeight) {\r\n break;\r\n }\r\n fontSize--;\r\n }\r\n \r\n return fontSize;\r\n };\r\n \r\n \r\n const calculateImageBrightness = (img: HTMLImageElement) => {\r\n let brightness = 0;\r\n const tempCanvas = document.createElement(\"canvas\");\r\n tempCanvas.width = img.width;\r\n tempCanvas.height = img.height;\r\n const tempCtx = tempCanvas.getContext(\"2d\");\r\n tempCtx.drawImage(img, 0, 0);\r\n const imageData = tempCtx.getImageData(0, 0, img.width, img.height).data;\r\n for (let i = 0; i < imageData.length; i += 4) {\r\n const r = imageData[i];\r\n const g = imageData[i + 1];\r\n const b = imageData[i + 2];\r\n brightness += (r + g + b) / 3;\r\n }\r\n return Math.round(brightness / (img.width * img.height));\r\n };\r\n \r\n if (iconUrl) {\r\n const img = new Image();\r\n img.crossOrigin = \"anonymous\";\r\n img.src = iconUrl;\r\n img.onload = () => {\r\n if (size > 50) {\r\n drawWithImage(img);\r\n }\r\n else {\r\n drawWithoutImage(img);\r\n }\r\n res(canvas);\r\n };\r\n img.onerror = () => {\r\n drawWithoutImage();\r\n res(canvas);\r\n };\r\n }\r\n else {\r\n drawWithoutImage();\r\n res(canvas);\r\n }\r\n }) as Promise<HTMLCanvasElement>;\r\n\r\n _clusterImageCache.Set(key, prom);\r\n prom.then((canvas) => {\r\n _clusterImageLoadedCache.Set(key, canvas);\r\n _clusterImageCache.Set(key, null);\r\n });\r\n\r\n return await prom;\r\n}\r\n\r\nfunction getClusterImage(params: {\r\n size: number,\r\n txtColor: string,\r\n bgColor: string,\r\n text: string,\r\n iconUrl?: string\r\n}): HTMLCanvasElement {\r\n const { size, txtColor, bgColor, text, iconUrl } = params;\r\n const key = `${size}-${txtColor}-${bgColor}-${text}-${iconUrl}`;\r\n const cacheData = _clusterImageLoadedCache.Get(key);\r\n // If available then return.\r\n if (cacheData) {\r\n return cacheData as HTMLCanvasElement;\r\n }\r\n // If not available then queue for it to cook.\r\n else {\r\n _loadClusterImage(params);\r\n }\r\n return null;\r\n}\r\n\r\nconst FORCE_UPDATE_BATCH_SIZE = 1000;\r\nconst FORCE_UPDATE_BATCH_DELAY = 100;\r\n\r\nexport class PointClustering {\r\n private quadTree: Quad;\r\n private prevClusteredEntities: Set<string>;\r\n private currClusteredEntities: Set<string>;\r\n private viewer: Cesium.Viewer;\r\n private register: VisualsRegister.Register;\r\n private updateQueue: DelayQueue;\r\n private clusterEntities: Map<string, Cesium.Entity>;\r\n private disposed: boolean = false;\r\n private listenCameraRemoval: () => void;\r\n private menuItemId: string;\r\n private registeredEntityIds: Set<string> = new Set();\r\n\r\n // Style of the first point added so we can make cluster points look similar.\r\n private pointColorBg: string;\r\n private pointColorTxt: string;\r\n private iconUrl: string;\r\n\r\n // Queue to force update entities.\r\n private updateEntityQueue: string[] = [];\r\n private queueInterval: any;\r\n\r\n constructor(register: VisualsRegister.Register, menuItemId: string) {\r\n this.register = register;\r\n this.viewer = register.Viewer;\r\n this.menuItemId = menuItemId;\r\n let boundary = new Rectangle(0, 0, 360, 180);\r\n this.quadTree = new Quad(boundary, 30);\r\n this.prevClusteredEntities = new Set();\r\n this.currClusteredEntities = new Set();\r\n this.clusterEntities = new Map();\r\n this.updateQueue = new DelayQueue(() => {\r\n this.doUpdate();\r\n }, 1000);\r\n this.listenCamera();\r\n }\r\n\r\n private queueForceUpdate(entityIds: string[]) {\r\n for (let i = 0; i < entityIds.length; i++) {\r\n if (this.updateEntityQueue.includes(entityIds[i])) {\r\n continue;\r\n }\r\n this.updateEntityQueue.push(entityIds[i]);\r\n }\r\n this.runForceUpdateQueue();\r\n }\r\n\r\n private runForceUpdateQueue() {\r\n if (!this.updateEntityQueue.length) {\r\n return;\r\n }\r\n if (this.queueInterval) {\r\n return;\r\n }\r\n this.queueInterval = setInterval(() => {\r\n if (this.disposed) {\r\n clearInterval(this.queueInterval);\r\n this.queueInterval = null;\r\n return;\r\n }\r\n const ids = this.updateEntityQueue.splice(0, FORCE_UPDATE_BATCH_SIZE);\r\n this.register.ForceUpdate({\r\n entityIds: ids\r\n });\r\n if (!this.updateEntityQueue.length) {\r\n clearInterval(this.queueInterval);\r\n this.queueInterval = null;\r\n }\r\n }, FORCE_UPDATE_BATCH_DELAY);\r\n }\r\n\r\n /**\r\n * Starts listening to camera changes.\r\n * This will trigger the clustering update whenever camera is moved.\r\n */\r\n private listenCamera() {\r\n const viewer = this.viewer;\r\n let lastPos3d: Cesium.Cartesian3;\r\n const hasMoved = (): boolean => {\r\n const cameraPos = viewer?.camera?.positionCartographic;\r\n if (!cameraPos) {\r\n return false;\r\n }\r\n const pos3d = Cesium.Cartographic.toCartesian(cameraPos);\r\n if (!lastPos3d) {\r\n lastPos3d = pos3d;\r\n return false;\r\n }\r\n const distance = Cesium.Cartesian3.distance(pos3d, lastPos3d);\r\n lastPos3d = pos3d;\r\n // 50 meter movement at least.\r\n return distance > 50;\r\n };\r\n this.listenCameraRemoval = viewer.scene.camera.changed.addEventListener(() => {\r\n if (hasMoved()) {\r\n this.updateQueue.Call();\r\n }\r\n }); \r\n }\r\n\r\n /**\r\n * Stops listening to camera changes.\r\n */\r\n private unlistenCamera() {\r\n if (this.listenCameraRemoval) {\r\n this.listenCameraRemoval();\r\n this.listenCameraRemoval = null;\r\n }\r\n }\r\n\r\n /**\r\n * Removes all clusters and updates entities to no longer be suppressed.\r\n * @returns \r\n */\r\n public Dispose() {\r\n if (this.disposed) {\r\n return;\r\n }\r\n for (let [,entity] of Array.from(this.clusterEntities)) {\r\n this.viewer.entities.remove(entity);\r\n }\r\n this.clusterEntities.clear();\r\n this.unlistenCamera();\r\n this.disposed = true;\r\n this.updateEntityQueue = [];\r\n // Restore entities.\r\n const toUpdateIds: string[] = [];\r\n for (let id of Array.from(this.registeredEntityIds)) {\r\n const rego = this.register.GetRego({\r\n entityId: id,\r\n menuItemId: this.menuItemId\r\n });\r\n if (rego && rego.suppressShow) {\r\n rego.suppressShow = false;\r\n toUpdateIds.push(id);\r\n }\r\n }\r\n if (toUpdateIds.length) {\r\n this.register.ForceUpdate({\r\n entityIds: toUpdateIds,\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * Calculates center of given points.\r\n * @param points \r\n * @returns \r\n */\r\n private calculateCentroid(points: Point[]): Point {\r\n let lonSum = 0;\r\n let latSum = 0;\r\n for (let point of points) {\r\n lonSum += point.lon;\r\n latSum += point.lat;\r\n }\r\n const lonAvg = lonSum / points.length;\r\n const latAvg = latSum / points.length;\r\n return new Point(lonAvg, latAvg, \"\");\r\n }\r\n\r\n /**\r\n * Gathers current clusters and renders them.\r\n * @returns \r\n */\r\n private doUpdate() {\r\n if (this.disposed) {\r\n return;\r\n }\r\n\r\n // 1: Update precision.\r\n // This defines how far apart these clusters can be.\r\n const cameraHeight = this.viewer.camera.positionCartographic.height;\r\n this.getClusterSpacing(cameraHeight);\r\n\r\n // 2: Get clusters.\r\n const { clusters, noLongerClustered } = this.getClusters();\r\n const entitiesToUpdate: string[] = [];\r\n\r\n // 3: Remove all cesium cluster entities that are no longer clustered.\r\n for (let id of Array.from(noLongerClustered)) {\r\n this.removeClusterEntity(id);\r\n }\r\n\r\n // 4: Stop hiding entities that are no longer clustered.\r\n const previousEntityIds = new Set(this.registeredEntityIds);\r\n for (let id of Array.from(previousEntityIds)) {\r\n if (!this.currClusteredEntities.has(id)) {\r\n const rego = this.register.GetRego({\r\n entityId: id,\r\n menuItemId: this.menuItemId\r\n });\r\n if (rego && rego.suppressShow) {\r\n rego.suppressShow = false;\r\n entitiesToUpdate.push(id);\r\n }\r\n }\r\n }\r\n\r\n const getScale = (count: number) => {\r\n // const MIN_SCALE = 15;\r\n // const MAX_SCALE = 80;\r\n // const SCALE_PER_POINT = 1.01;\r\n // let scale = MIN_SCALE + (count * SCALE_PER_POINT);\r\n // scale = Math.min(scale, MAX_SCALE);\r\n // return scale;\r\n if (count >= 10000) {\r\n return 140;\r\n }\r\n if (count >= 1000) {\r\n return 120;\r\n }\r\n if (count >= 100) {\r\n return 90;\r\n }\r\n if (count >= 10) {\r\n return 80;\r\n }\r\n return 70;\r\n };\r\n\r\n /**\r\n * Generate circle with label in center.\r\n * @param count \r\n * @returns \r\n */\r\n const getCanvas = (count: number): HTMLElement => {\r\n const params = {\r\n size: getScale(count),\r\n txtColor: this.pointColorTxt,\r\n bgColor: this.pointColorBg,\r\n text: String(count),\r\n iconUrl: this.iconUrl\r\n };\r\n return getClusterImage(params);\r\n };\r\n\r\n // 5: iterate over clusters and add/update them as Cesium entities.\r\n for (let cluster of clusters) {\r\n const clusterId = cluster.center.id;\r\n let clusterEntity = this.clusterEntities.get(clusterId);\r\n\r\n const centroid = this.calculateCentroid(cluster.points);\r\n const count = cluster.points.length;\r\n if (clusterEntity) {\r\n clusterEntity.position = Cesium.Cartesian3.fromDegrees(centroid.lon, centroid.lat, 150) as any;\r\n clusterEntity.billboard.image = new Cesium.CallbackProperty(() => {\r\n return getCanvas(count);\r\n }, false),\r\n clusterEntity.billboard.width = getScale(cluster.points.length) as any;\r\n clusterEntity.billboard.height = getScale(cluster.points.length) as any;\r\n } \r\n else {\r\n clusterEntity = this.viewer.entities.add({\r\n position: Cesium.Cartesian3.fromDegrees(centroid.lon, centroid.lat, 150),\r\n billboard: {\r\n heightReference: Cesium.HeightReference.NONE,\r\n image: new Cesium.CallbackProperty(() => {\r\n return getCanvas(count);\r\n }, false),\r\n width: getScale(count),\r\n height: getScale(count),\r\n verticalOrigin: Cesium.VerticalOrigin.CENTER,\r\n horizontalOrigin: Cesium.HorizontalOrigin.CENTER,\r\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\r\n scaleByDistance: new Cesium.NearFarScalar(1.5e2, 0.5, 3.0e7, 0.1),\r\n }\r\n });\r\n this.clusterEntities.set(clusterId, clusterEntity);\r\n }\r\n\r\n for (let i = 0; i < cluster.points.length; i++) {\r\n const entityId = cluster.points[i].id;\r\n const rego = this.register.GetRego({\r\n entityId: entityId,\r\n menuItemId: this.menuItemId\r\n });\r\n if (rego && !rego.suppressShow) {\r\n rego.suppressShow = true;\r\n entitiesToUpdate.push(entityId);\r\n }\r\n }\r\n }\r\n this.queueForceUpdate(entitiesToUpdate);\r\n\r\n // 6: Iterate over existing cluster entities and remove those that are no longer clustered.\r\n for (let [clusterId, clusterEntity] of Array.from(this.clusterEntities)) {\r\n if (!clusters.find(x => x.center.id == clusterId)) {\r\n this.viewer.entities.remove(clusterEntity);\r\n this.clusterEntities.delete(clusterId);\r\n }\r\n }\r\n }\r\n\r\n private getClusterSpacing(distanceFromCluster?: number) {\r\n // Distance thresholds in meters from the cluster.\r\n const distanceThresholds = [3000, 4000, 5300, 6000, 7000];\r\n // Distance increments in degrees.\r\n const distanceIncrements = [0.001, 0.002, 0.01, 0.03, 0.09];\r\n \r\n let index = 0;\r\n if (distanceFromCluster) {\r\n for (let i = 0; i < distanceThresholds.length; i++) {\r\n if (distanceFromCluster > distanceThresholds[i]) {\r\n index = i;\r\n }\r\n }\r\n }\r\n return distanceIncrements[index];\r\n } \r\n \r\n private getClusters(): ClusterResult {\r\n this.currClusteredEntities.clear();\r\n let clusters: Cluster[] = [];\r\n let processedPoints: Set<string> = new Set();\r\n const cameraPosition = this.viewer.camera.position;\r\n \r\n const MIN_CAMERA_DISTANCE = 5000;\r\n const processQuad = (quad: Quad) => {\r\n // Distance to quad.\r\n // TODO: Needs improvement.\r\n const distanceToQuad = quad.GetDistanceToQuad(cameraPosition);\r\n\r\n // Skip quads that are too close.\r\n if (distanceToQuad >= MIN_CAMERA_DISTANCE) {\r\n for (let point of quad.points) {\r\n // Skip points already processed in previous clusters.\r\n if (processedPoints.has(point.id)) {\r\n continue;\r\n }\r\n // Skip points closer than MIN_CAMERA_DISTANCE meters to the camera.\r\n const cartesian3 = Cesium.Cartesian3.fromDegrees(point.lon, point.lat);\r\n const distanceFromCluster = Cesium.Cartesian3.distance(\r\n cartesian3,\r\n cameraPosition\r\n );\r\n if (distanceFromCluster <= MIN_CAMERA_DISTANCE) {\r\n continue;\r\n }\r\n \r\n let found: Point[] = [];\r\n let nearbyPoints: Point[] = quad.Query(\r\n new Circle(point.lon, point.lat, this.getClusterSpacing(distanceFromCluster)),\r\n found\r\n );\r\n if (nearbyPoints.length > 1) {\r\n let cluster: Cluster = { center: point, points: [] };\r\n for (let nearby of nearbyPoints) {\r\n if (!processedPoints.has(nearby.id) && !cluster.points.includes(nearby)) {\r\n cluster.points.push(nearby);\r\n processedPoints.add(nearby.id);\r\n this.currClusteredEntities.add(nearby.id);\r\n }\r\n }\r\n clusters.push(cluster);\r\n }\r\n }\r\n }\r\n if (quad.divided) {\r\n processQuad(quad.northwest);\r\n processQuad(quad.northeast);\r\n processQuad(quad.southwest);\r\n processQuad(quad.southeast);\r\n }\r\n };\r\n \r\n processQuad(this.quadTree);\r\n \r\n // Filter out clusters with only one point.\r\n const validClusters = clusters.filter((cluster) => cluster.points.length > 1);\r\n // Get the entity IDs that are no longer clustered\r\n let noLongerClustered = new Set(\r\n Array.from(this.prevClusteredEntities).filter(\r\n (id) => !this.currClusteredEntities.has(id)\r\n )\r\n );\r\n // Update the previous clustered entities ref.\r\n this.prevClusteredEntities = new Set(this.currClusteredEntities);\r\n return { clusters: validClusters, noLongerClustered };\r\n }\r\n \r\n /**\r\n * Removes Cesium cluster entity.\r\n * @param clusterId \r\n */\r\n private removeClusterEntity(clusterId: string) {\r\n const clusterEntity = this.clusterEntities.get(clusterId);\r\n if (clusterEntity) {\r\n this.viewer.entities.remove(clusterEntity);\r\n this.clusterEntities.delete(clusterId);\r\n }\r\n }\r\n \r\n private convertCartesianToCartographic(cartesian3: Cesium.Cartesian3) {\r\n const carto = Cesium.Cartographic.fromCartesian(cartesian3);\r\n const lon = Cesium.Math.toDegrees(carto.longitude);\r\n const lat = Cesium.Math.toDegrees(carto.latitude);\r\n const id = lon + ',' + lat;\r\n return new Point(lon, lat, id);\r\n }\r\n\r\n /**\r\n * Adds new entity to the clustering logic.\r\n * @param id Bruce entity ID.\r\n * @param cartesian3 entity's position.\r\n */\r\n private addPoint(id: string, cartesian3: Cesium.Cartesian3) {\r\n let point = this.convertCartesianToCartographic(cartesian3);\r\n point.id = id;\r\n return this.quadTree.Insert(point);\r\n }\r\n\r\n /**\r\n * Adds entity to clustering logic.\r\n * Will return false if entity could not be clustered and therefor should not be hidden.\r\n * @param id \r\n * @param entity \r\n * @returns \r\n */\r\n public AddEntity(id: string, entity: Cesium.Entity): boolean {\r\n if (this.disposed) {\r\n return false;\r\n }\r\n if (!entity) {\r\n return false;\r\n }\r\n if (entity.polygon || entity.polyline) {\r\n return false;\r\n }\r\n const pos3d: Cesium.Cartesian3 = GetValue(this.viewer, entity.position);\r\n if (!pos3d?.x) {\r\n return false;\r\n }\r\n\r\n if (!this.pointColorBg && entity.point) {\r\n const pointColorBg: any = GetValue(this.viewer, entity.point.color);\r\n if (pointColorBg) {\r\n let cColor: Cesium.Color = null;\r\n if (pointColorBg instanceof Object) {\r\n cColor = new Cesium.Color(\r\n pointColorBg.red, \r\n pointColorBg.green, \r\n pointColorBg.blue, \r\n pointColorBg.alpha\r\n );\r\n }\r\n else if (typeof pointColorBg === \"string\") {\r\n cColor = Cesium.Color.fromCssColorString(pointColorBg);\r\n }\r\n // Determine if text color should instead be black based on background.\r\n // cColor contains r,g,b,a values where r,g,b are in the range [0,1].\r\n if (cColor) {\r\n const brightness = (cColor.red * 299 + cColor.green * 587 + cColor.blue * 114) / 1000;\r\n if (brightness > 0.5) {\r\n this.pointColorTxt = \"black\";\r\n }\r\n else {\r\n this.pointColorTxt = \"white\";\r\n }\r\n this.pointColorBg = cColor.toCssColorString();\r\n }\r\n }\r\n }\r\n if (!this.iconUrl && entity.billboard) {\r\n const iconUrl: string = GetValue(this.viewer, entity.billboard.image);\r\n if (typeof iconUrl == \"string\") {\r\n this.iconUrl = iconUrl;\r\n }\r\n }\r\n const added = this.addPoint(id, pos3d);\r\n if (!added) {\r\n return false;\r\n }\r\n this.registeredEntityIds.add(id);\r\n this.updateQueue.Call();\r\n return true;\r\n }\r\n\r\n /**\r\n * Removes entity from clustering logic.\r\n * Warning: This will not reveal the entity, suppressShow will remain true.\r\n * This is made with the assumption that the entity is being removed from viewer.\r\n * @param id \r\n * @returns \r\n */\r\n public RemoveEntity(id: string) {\r\n if (this.disposed) {\r\n return;\r\n }\r\n\r\n let pointToRemove = this.quadTree.Find(id);\r\n if (pointToRemove) {\r\n this.quadTree.Remove(pointToRemove);\r\n this.updateQueue.Call();\r\n }\r\n this.registeredEntityIds.delete(id);\r\n }\r\n}\r\n","import { BruceApi, DelayQueue, Entity, EntityFilterGetter, IDictionary, MenuItem } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\r\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\nimport { SharedGetters } from \"../common/shared-getters\";\r\nimport { PointClustering } from \"../common/point-clustering\";\r\n\r\nconst BATCH_SIZE = 500;\r\nconst CHECK_BATCH_SIZE = 250;\r\n\r\n/**\r\n * Manager for rendering Bruce entities.\r\n * This will request entities based on setup menu item filter.\r\n */\r\nexport namespace EntitiesRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private sharedGetters: SharedGetters.Cache;\r\n private monitor: CesiumViewMonitor;\r\n private item: MenuItem.Item.IEntities;\r\n private getter: EntityFilterGetter.Getter = <any>null;\r\n private getterSub: () => void = <any>null;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private renderedEntities: IDictionary<boolean> = {};\r\n private visualsManager: VisualsRegister.Register;\r\n private entityCheckQueue: DelayQueue = <any>null;\r\n private entityCheckQueueIds: string[] = [];\r\n private entityCheckRemoval: () => void = <any>null;\r\n private isRunningCheck = false;\r\n private viewMonitorRemoval: () => void = <any>null;\r\n private renderQueue: Entity.IEntity[] = [];\r\n private renderQueueInterval: any = null;\r\n private clustering: PointClustering;\r\n\r\n constructor(params: {\r\n viewer: Cesium.Viewer,\r\n register: VisualsRegister.Register,\r\n apiGetter: BruceApi.IGetter,\r\n monitor: CesiumViewMonitor,\r\n item: MenuItem.Item.IEntities,\r\n sharedGetters: SharedGetters.Cache\r\n }) {\r\n const { viewer, apiGetter, monitor, item, register: visualsManager, sharedGetters } = params;\r\n this.viewer = viewer;\r\n this.sharedGetters = sharedGetters;\r\n this.monitor = monitor;\r\n this.apiGetter = apiGetter;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n if (item.enableClustering) {\r\n this.clustering = new PointClustering(this.visualsManager, this.item.id);\r\n }\r\n }\r\n\r\n public Init(params?: {\r\n item: MenuItem.Item.IEntities\r\n }) {\r\n if (this.disposed) {\r\n throw(new Error(\"This item is disposed.\"));\r\n }\r\n if (params?.item) {\r\n this.item = params.item;\r\n }\r\n\r\n const isTagItem = Boolean(this.item.BruceEntity.ExpandLayers);\r\n let tagsToRender = isTagItem ? this.item.BruceEntity.SelectedExpandLayers : null;\r\n if (!tagsToRender) {\r\n tagsToRender = [];\r\n }\r\n tagsToRender = [].concat(tagsToRender);\r\n const shouldRender = !isTagItem || tagsToRender.length > 0;\r\n this.getter?.ExcludeMenuItem(this.item.id);\r\n this.getter = null;\r\n this.getterSub?.();\r\n this.getterSub = null;\r\n this.viewMonitorRemoval?.();\r\n this.viewMonitorRemoval = null;\r\n this.entityCheckQueue?.Dispose();\r\n this.entityCheckQueue = null;\r\n clearInterval(this.renderQueueInterval);\r\n this.renderQueueInterval = null;\r\n this.renderQueue = [];\r\n // Remove just the ones that shouldn't be rendered.\r\n // Eg: for a tag menu item we can see what tags are selected and only render those.\r\n if (shouldRender) {\r\n this.visualsManager.RemoveRegos({\r\n menuItemId: this.item.id,\r\n retainTagIds: tagsToRender\r\n });\r\n this.clustering?.Dispose();\r\n }\r\n else {\r\n this.visualsManager.RemoveRegos({\r\n menuItemId: this.item.id\r\n });\r\n this.clustering?.Dispose();\r\n return;\r\n }\r\n if (this.item.enableClustering) { \r\n this.clustering = new PointClustering(this.visualsManager, this.item.id);\r\n }\r\n const api = this.apiGetter.getApi();\r\n this.getter = this.sharedGetters.GetOrCreateFilterGetter({\r\n api: api,\r\n attrFilter: this.item.BruceEntity.Filter ?? {},\r\n batchSize: BATCH_SIZE,\r\n typeId: this.item.BruceEntity[\"EntityType.ID\"],\r\n monitor: this.monitor,\r\n viewer: this.viewer,\r\n debugShowBounds: Boolean((window as any)?.ENTITIES_RENDER_MANAGER_SHOW_BOUNDS),\r\n cdn: this.item.cdnEnabled\r\n });\r\n const minMax = RenderManager.GetZoomMinMax({\r\n zoomControl: this.item.CameraZoomSettings\r\n });\r\n this.getter.IncludeMenuItem(this.item.id, [], minMax[0], minMax[1]);\r\n this.getterSub = this.getter.OnUpdate.Subscribe((entities) => {\r\n if (isTagItem) {\r\n this.distributeForRender(entities.filter((entity) => {\r\n let entityTags = entity.Bruce[\"Layer.ID\"];\r\n if (!entityTags) {\r\n entityTags = [];\r\n }\r\n return entityTags.some((tag) => {\r\n return tagsToRender.indexOf(tag) !== -1;\r\n });\r\n }));\r\n }\r\n else {\r\n this.distributeForRender(entities);\r\n }\r\n });\r\n this.viewMonitorRemoval = this.monitor.Updated().Subscribe(() => {\r\n this.entityCheckQueue.Call();\r\n });\r\n this.entityCheckQueue = new DelayQueue(() => {\r\n // Don't bother checking for zoom control changes if we only have 1 item.\r\n // We'll let Cesium handle hide/show at max zoom range. \r\n const shouldCheck = this.item?.CameraZoomSettings && this.item.CameraZoomSettings.length > 1;\r\n if (shouldCheck) {\r\n this.doEntityCheck(Object.keys(this.renderedEntities));\r\n }\r\n }, 3000);\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.doDispose();\r\n }\r\n\r\n private doDispose() {\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n if (this.getter) {\r\n this.getter.ExcludeMenuItem(this.item.id);\r\n }\r\n this.disposed = true;\r\n this.visualsManager.RemoveRegos({\r\n menuItemId: this.item.id\r\n });\r\n this.entityCheckRemoval?.();\r\n this.viewMonitorRemoval?.();\r\n clearInterval(this.renderQueueInterval);\r\n this.renderQueue = [];\r\n this.clustering?.Dispose();\r\n }\r\n\r\n public async ReRender(params: {\r\n entityIds?: string[],\r\n entities?: Entity.IEntity[],\r\n force?: boolean\r\n }) {\r\n let { entityIds, force, entities } = params;\r\n if (entities && !entityIds) {\r\n entityIds = entities.map(x => x.Bruce?.ID);\r\n }\r\n if (entityIds == null) {\r\n entityIds = Object.keys(this.renderedEntities);\r\n }\r\n this.visualsManager.MarkStale({\r\n entityIds: entityIds,\r\n menuItemIds: [this.item.id]\r\n });\r\n if (entities?.length) {\r\n entities = [].concat(entities).filter(x => entityIds.includes(x.Bruce?.ID));\r\n }\r\n\r\n // Forcing to skip queue and to render immediately.\r\n if (force) {\r\n if (entities?.length) {\r\n this.renderEntities(entities, true);\r\n }\r\n else {\r\n try {\r\n const data = await Entity.GetListByIds({\r\n api: this.apiGetter.getApi(),\r\n entityIds\r\n });\r\n this.renderEntities(data.entities, true);\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n else {\r\n if (entities?.length) {\r\n this.distributeForRender(entities);\r\n }\r\n else {\r\n await this.doEntityCheck(entityIds);\r\n }\r\n }\r\n }\r\n\r\n private async doEntityCheck(ids: string[]): Promise<void> {\r\n if (this.isRunningCheck) {\r\n this.entityCheckQueueIds = this.entityCheckQueueIds.concat(ids);\r\n this.entityCheckQueue.Call();\r\n return;\r\n }\r\n ids.concat(this.entityCheckQueueIds);\r\n this.entityCheckQueueIds = [];\r\n ids = ids.filter((id, index) => {\r\n return ids.indexOf(id) === index;\r\n });\r\n\r\n this.isRunningCheck = true;\r\n const api = this.apiGetter.getApi();\r\n try {\r\n if (this.disposed) {\r\n return;\r\n }\r\n if (ids.length > 0) {\r\n const checkBatch = async() => {\r\n const entityIds = ids.splice(0, CHECK_BATCH_SIZE);\r\n const {entities} = await Entity.GetListByIds({\r\n api,\r\n entityIds\r\n });\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.distributeForRender(entities);\r\n };\r\n while (ids.length > 0) {\r\n await checkBatch();\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n this.isRunningCheck = false;\r\n }\r\n\r\n private distributeForRender(entities: Entity.IEntity[]): void {\r\n this.renderQueue = this.renderQueue.concat(entities);\r\n if (!this.renderQueueInterval && this.renderQueue.length) {\r\n this.renderQueueInterval = setInterval(() => {\r\n const batch = this.renderQueue.splice(0, BATCH_SIZE);\r\n this.renderEntities(batch);\r\n if (this.renderQueue.length <= 0) {\r\n clearInterval(this.renderQueueInterval);\r\n this.renderQueueInterval = null;\r\n }\r\n }, 50);\r\n }\r\n }\r\n\r\n private async renderEntities(entities: Entity.IEntity[], force: boolean = false): Promise<void> {\r\n try {\r\n if (this.disposed || this.viewer.isDestroyed()) {\r\n return;\r\n }\r\n // Ensuring a re-render call with improper entity ids doesn't cause them to render here.\r\n const typeId = this.item.BruceEntity?.[\"EntityType.ID\"];\r\n if (typeId) {\r\n entities = entities.filter(x => x.Bruce?.[\"EntityType.ID\"] == typeId);\r\n }\r\n\r\n const cEntities = await EntityRenderEngine.Render({\r\n viewer: this.viewer,\r\n apiGetter: this.apiGetter,\r\n entities: entities,\r\n menuItemId: this.item.id,\r\n visualRegister: this.visualsManager,\r\n zoomControl: this.item.CameraZoomSettings,\r\n force\r\n });\r\n if (this.disposed) {\r\n this.doDispose();\r\n return;\r\n }\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n const id = entity.Bruce.ID;\r\n const cEntity = cEntities[id];\r\n this.renderedEntities[id] = !!cEntity;\r\n if (cEntity) {\r\n let visual = this.visualsManager.GetRego({\r\n entityId: id,\r\n menuItemId: this.item.id\r\n })?.visual;\r\n if (!visual || visual != cEntity) {\r\n const wasClustered = this.clustering ? this.clustering.AddEntity(id, cEntity) : false;\r\n const tagIds = entity.Bruce?.[\"Layer.ID\"];\r\n const rego: VisualsRegister.IVisualRego = {\r\n entityId: id,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0,\r\n entityTypeId: entity.Bruce[\"EntityType.ID\"],\r\n accountId: this.apiGetter.accountId,\r\n tagIds: tagIds ? [].concat(tagIds) : [],\r\n suppressShow: wasClustered\r\n };\r\n this.visualsManager.AddRego({\r\n rego\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.RemoveRegos({\r\n entityId: id,\r\n menuItemId: this.item.id\r\n });\r\n this.clustering?.RemoveEntity(id);\r\n }\r\n }\r\n this.viewer.scene.requestRender();\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n}","import { BatchedDataGetter, BruceApi, Entity, IDictionary, ZoomControl, MenuItem } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\r\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\n\r\nconst BATCH_SIZE = 500;\r\nconst CHECK_BATCH_SIZE = 250;\r\n\r\n/**\r\n * Render manager for a group of pre-loaded entities.\r\n * The entities may or may not have records.\r\n * If the entities DON'T have records, it is recommended to avoid using the 3dmodel visualization as it will fail to locate LODs.\r\n */\r\nexport namespace EntitiesLoadedRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private item: MenuItem.Item.IEntitiesLoaded;\r\n private getter: BatchedDataGetter.Getter<Entity.IEntity> = <any>null;\r\n private monitor: CesiumViewMonitor;\r\n private getterSub: () => void = <any>null;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private renderedEntities: IDictionary<boolean> = {};\r\n private visualsManager: VisualsRegister.Register;\r\n private updatedEntities: IDictionary<Entity.IEntity> = {};\r\n\r\n constructor(params: {\r\n viewer: Cesium.Viewer,\r\n register: VisualsRegister.Register,\r\n apiGetter: BruceApi.IGetter,\r\n monitor: CesiumViewMonitor,\r\n item: MenuItem.Item.IEntitiesLoaded\r\n }) {\r\n const { viewer, apiGetter, monitor, item, register: visualsManager } = params;\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.monitor = monitor;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public Init() {\r\n if (this.disposed) {\r\n throw(new Error(\"This item is disposed.\"));\r\n }\r\n this.getter = new BatchedDataGetter.Getter<Entity.IEntity>(\r\n this.item.BruceEntity.Entities,\r\n this.monitor,\r\n BATCH_SIZE\r\n );\r\n this.getterSub = this.getter.OnUpdate.Subscribe((entities) => {\r\n const latest = [];\r\n for (const entity of entities) {\r\n if (this.renderedEntities[entity?.Bruce?.ID]) {\r\n latest.push(entity);\r\n continue;\r\n }\r\n latest.push(entity);\r\n }\r\n this.onGetterUpdate(entities);\r\n });\r\n this.getter.Start();\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n this.disposed = true;\r\n this.visualsManager.RemoveRegos({\r\n menuItemId: this.item.id\r\n });\r\n }\r\n\r\n public async ReRender(params: {\r\n entityIds?: string[],\r\n entities?: Entity.IEntity[],\r\n force?: boolean\r\n }) {\r\n let { entityIds, force, entities } = params;\r\n if (entities && !entityIds) {\r\n entityIds = entities.map(x => x.Bruce?.ID);\r\n }\r\n if (entityIds == null) {\r\n entityIds = Object.keys(this.renderedEntities);\r\n }\r\n else {\r\n // ensure entity ids are part of menu item.\r\n entityIds = entityIds.filter(x => {\r\n return this.item.BruceEntity?.Entities?.find(y => y?.Bruce?.ID == x);\r\n })\r\n }\r\n if (entities?.length) {\r\n entities = [].concat(entities).filter(x => entityIds.includes(x.Bruce?.ID))\r\n entities.forEach((x) => {\r\n this.updatedEntities[x.Bruce?.ID] = x;\r\n });\r\n }\r\n this.visualsManager.MarkStale({\r\n entityIds: entityIds,\r\n menuItemIds: [this.item.id]\r\n });\r\n if (entities?.length) {\r\n this.onGetterUpdate(entities, force);\r\n }\r\n else {\r\n this.doEntityCheck(entityIds, force);\r\n }\r\n }\r\n\r\n private async doEntityCheck(ids: string[], force: boolean = false): Promise<void> {\r\n const api = this.apiGetter.getApi();\r\n try {\r\n if (this.disposed) {\r\n return;\r\n }\r\n if (ids.length > 0) {\r\n const checkBatch = async() => {\r\n const entityIds = ids.splice(0, CHECK_BATCH_SIZE);\r\n const {entities} = await Entity.GetListByIds({\r\n api,\r\n entityIds\r\n });\r\n if (this.disposed) {\r\n return;\r\n }\r\n entities.forEach((x) => {\r\n this.updatedEntities[x.Bruce?.ID] = x;\r\n });\r\n this.onGetterUpdate(entities, force);\r\n };\r\n while (ids.length > 0) {\r\n await checkBatch();\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n private async onGetterUpdate(entities: Entity.IEntity[], force: boolean = false): Promise<void> {\r\n try {\r\n if (this.disposed || this.viewer.isDestroyed()) {\r\n return;\r\n }\r\n const cEntities = await EntityRenderEngine.Render({\r\n viewer: this.viewer,\r\n apiGetter: this.apiGetter,\r\n entities: entities,\r\n menuItemId: this.item.id,\r\n visualRegister: this.visualsManager,\r\n zoomControl: this.item.CameraZoomSettings,\r\n force\r\n });\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n const id = <string>entity.Bruce.ID;\r\n const cEntity = cEntities[id];\r\n this.renderedEntities[id] = !!cEntity;\r\n if (cEntity) {\r\n const visual = this.visualsManager.GetRego({\r\n entityId: id,\r\n menuItemId: this.item.id\r\n })?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.AddRego({\r\n rego: {\r\n entityId: <string>id,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0,\r\n entityTypeId: entity.Bruce[\"EntityType.ID\"],\r\n accountId: this.apiGetter.accountId\r\n }\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.RemoveRegos({\r\n entityId: id,\r\n menuItemId: this.item.id\r\n });\r\n }\r\n }\r\n this.viewer.scene.requestRender();\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n}","import { Cartes } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { DrawingUtils } from \"../../../utils/drawing-utils\";\n\n/**\n * Utility for rendering parabolas between two points on the map.\n */\nexport class CesiumParabola {\n private viewer: Cesium.Viewer;\n private pos1: Cesium.Cartesian3 | (() => Cesium.Cartesian3);\n private pos2: Cesium.Cartesian3 | (() => Cesium.Cartesian3);\n private color = \"white\";\n private width = 2;\n private duration = 10;\n private heightDistanceRatio = 0.25;\n\n private curPoints = [];\n private animateInterval = null;\n private retryTimeout = null;\n private parabola: Cesium.Entity;\n private siblings: Cesium.Entity[];\n\n private get curPos1() {\n return this.pos1 instanceof Function ? this.pos1() : this.pos1;\n }\n private get curPos2() {\n return this.pos2 instanceof Function ? this.pos2() : this.pos2;\n }\n\n\n constructor(params: {\n viewer: Cesium.Viewer,\n // Direct position or a callback to get one.\n pos1: Cesium.Cartesian3 | (() => Cesium.Cartesian3),\n pos2: Cesium.Cartesian3 | (() => Cesium.Cartesian3),\n color?: string,\n width?: number,\n duration?: number,\n heightDistanceRatio?: number\n }) {\n this.viewer = params.viewer;\n this.pos1 = params.pos1;\n this.pos2 = params.pos2;\n if (params.color) {\n this.color = params.color;\n }\n if (!isNaN(params.width)) {\n this.width = params.width;\n }\n if (!isNaN(params.duration)) {\n this.duration = params.duration;\n }\n if (!isNaN(params.heightDistanceRatio)) {\n this.heightDistanceRatio = params.heightDistanceRatio;\n }\n this.prepareEntities();\n }\n\n private prepareEntities() {\n const parabola = new Cesium.Entity({\n polyline: {\n positions: new Cesium.CallbackProperty(() => {\n return this.curPoints;\n }, false) as any,\n width: this.width,\n material: Cesium.Color.fromCssColorString(this.color)\n }\n });\n const p1Entity = new Cesium.Entity({\n position: new Cesium.CallbackProperty(() => {\n return this.curPoints.length ? this.curPoints[0] : new Cesium.Cartesian3();\n }, false) as any,\n point: {\n heightReference: Cesium.HeightReference.NONE,\n pixelSize: this.width * 1.3,\n color: Cesium.Color.fromCssColorString(this.color),\n outlineColor: Cesium.Color.WHITE,\n outlineWidth: 2\n }\n });\n const p2Entity = new Cesium.Entity({\n position: new Cesium.CallbackProperty(() => {\n return this.curPoints.length ? this.curPoints[this.curPoints.length - 1] : new Cesium.Cartesian3();\n }, false) as any,\n point: {\n heightReference: Cesium.HeightReference.NONE,\n pixelSize: this.width * 1.8,\n color: Cesium.Color.fromCssColorString(this.color),\n outlineColor: Cesium.Color.WHITE,\n outlineWidth: 2\n }\n });\n p1Entity.parent = parabola;\n p2Entity.parent = parabola;\n const siblings = [p1Entity, p2Entity];\n this.parabola = parabola;\n this.siblings = siblings;\n }\n\n public Animate(): {\n parabola: Cesium.Entity,\n siblings: Cesium.Entity[]\n } {\n if (this.parabola && !this.viewer.entities.contains(this.parabola)) {\n this.viewer.entities.add(this.parabola);\n }\n\n let retry = false;\n if (!this.curPos1 || !this.curPos2 || !Cartes.ValidateCartes3(this.curPos1) || !Cartes.ValidateCartes3(this.curPos2)) {\n retry = true;\n }\n let TOTAL_LENGTH = retry ? 0 : Cesium.Cartesian3.distance(this.curPos1, this.curPos2);\n if (TOTAL_LENGTH <= 0) {\n retry = true;\n }\n if (retry) {\n this.retryTimeout = setTimeout(() => {\n this.Animate();\n }, 2000);\n return {\n parabola: this.parabola,\n siblings: this.siblings\n };\n }\n\n const cEntities = [\n this.parabola\n ].concat(this.siblings);\n cEntities.forEach(e => {\n if (e && !this.viewer.entities.contains(e)) {\n this.viewer.entities.add(e);\n }\n });\n\n const RATE_PER_SECOND = 1000 / 40;\n const SEC_DURATION = this.duration;\n const HEIGHT_DISTANCE_RATIO = this.heightDistanceRatio;\n let TOTAL_POINTS = Math.max(50, Math.min(1000, TOTAL_LENGTH * 0.1));\n let POINT_LENGTH = TOTAL_LENGTH / TOTAL_POINTS;\n let TICK_LENGTH_INC = SEC_DURATION == 0 ? TOTAL_LENGTH : TOTAL_POINTS / (RATE_PER_SECOND * SEC_DURATION);\n\n let curPoint = 0;\n let quadraticKey = null;\n let quadratic: { a: number, b: number, c: number } = null;\n let quadraticPreparing = false;\n\n const prepareQuadratic = async () => {\n if (quadraticPreparing) {\n return;\n }\n quadraticPreparing = true;\n try {\n const p1 = this.curPos1;\n const p2 = this.curPos2;\n if (!p1 || !p2 || !Cartes.ValidateCartes3(p1) || !Cartes.ValidateCartes3(p2)) {\n return;\n }\n const height1 = Cesium.Cartographic.fromCartesian(p1).height;\n const height2 = Cesium.Cartographic.fromCartesian(p2).height;\n if (isNaN(height1) || isNaN(height2)) {\n return;\n }\n const totalHeight = height2 + height1;\n const curQuadraticKey = `${height1}-${height2}-${TOTAL_LENGTH}`;\n if (quadraticKey == curQuadraticKey) {\n return;\n }\n \n const points2d = [\n new Cesium.Cartesian2(0, height1),\n new Cesium.Cartesian2(TOTAL_LENGTH, height2)\n ];\n let vertexHeight = 0;\n // Flat line.\n if (HEIGHT_DISTANCE_RATIO == 0) {\n vertexHeight = totalHeight * 0.5;\n }\n else {\n const largestHeight = Math.max(height1, height2);\n vertexHeight = largestHeight + (TOTAL_LENGTH * HEIGHT_DISTANCE_RATIO);\n }\n points2d.push(new Cesium.Cartesian2(\n TOTAL_LENGTH * 0.5,\n vertexHeight\n ));\n const calcQuadratic = (points: Cesium.Cartesian2[]) => {\n // Swaps position of two rows in matrix.\n function swapRows(matrix, rowAIndex, rowBIndex) {\n const rowAVal = matrix[rowAIndex];\n matrix[rowAIndex] = matrix[rowBIndex];\n matrix[rowBIndex] = rowAVal;\n return matrix;\n }\n \n // Zeros rowA at colIndex by subtracting a multiplied rowB from it.\n function reduceMatrixRowByRow(matrix, zeroingIndex, parentIndex, colIndex) {\n const zeroRow = matrix[zeroingIndex];\n const parentRow = matrix[parentIndex];\n \n if (zeroRow[colIndex] == 0) {\n return matrix;\n }\n else if (parentRow[colIndex] == 0) {\n matrix = swapRows(matrix, parentIndex, zeroingIndex); \n return divideMatrixRow(matrix, parentIndex, colIndex);\n }\n \n // rowAIndex colIndex / rowBIndex colIndex = factor;\n let factor = zeroRow[colIndex] / parentRow[colIndex];\n for (let i = 0; i < zeroRow.length; i++) {\n if (i >= colIndex) {\n zeroRow[i] -= parentRow[i] * factor;\n }\n }\n return matrix;\n }\n \n // Makes a given row column equal 1 by diving while row by that column.\n function divideMatrixRow(matrix, rowIndex, colIndex) {\n const row = matrix[rowIndex];\n const colValue = row[colIndex];\n for (let i = 0; i < row.length; i++) {\n if (i >= colIndex) {\n row[i] /= colValue;\n }\n }\n return matrix;\n }\n \n // Returns initial matrix for calculating a, b and c for quadratic formula from given points.\n function matrixFromPoints(points) {\n const rows = [];\n const constructRow = (point) => {\n rows.push([\n -Math.pow(point.x, 2),\n point.x,\n 1,\n point.y\n ]);\n };\n for (let i = 0; i < points.length; i++) {\n constructRow(points[i]);\n }\n return rows;\n }\n \n const initialMatrix = matrixFromPoints(points);\n const step1Matrix = reduceMatrixRowByRow(initialMatrix, 1, 0, 0);\n const step2Matrix = reduceMatrixRowByRow(step1Matrix, 2, 0, 0);\n const step3Matrix = reduceMatrixRowByRow(step2Matrix, 2, 1, 1);\n const step4Matrix = reduceMatrixRowByRow(step3Matrix, 0, 1, 1);\n const step5Matrix = reduceMatrixRowByRow(step4Matrix, 0, 2, 2);\n const step6Matrix = reduceMatrixRowByRow(step5Matrix, 1, 2, 2);\n const a = step6Matrix[0][3];\n const b = step6Matrix[1][3];\n const c = step6Matrix[2][3];\n return { a: a, b: b, c: c };\n };\n quadratic = calcQuadratic(points2d);\n }\n catch (e) {\n console.error(e);\n }\n finally {\n quadraticPreparing = false;\n }\n };\n\n const getPosition = (increment: number): Cesium.Cartesian3 => {\n if (!quadratic) {\n return null;\n }\n\n let lengthAcross = POINT_LENGTH * increment;\n if (lengthAcross > TOTAL_LENGTH) {\n lengthAcross = TOTAL_LENGTH;\n }\n\n const getParabolaYFromX = (x: number, quadLetters: { a: number, b: number, c: number }): number => {\n let a = quadLetters.a;\n let b = quadLetters.b;\n let c = quadLetters.c;\n return (-a * Math.pow(x, 2)) + (b * x) + c;\n }\n\n const {point: pos3d} = DrawingUtils.PointAcrossPolyline({\n viewer: this.viewer,\n distance: lengthAcross,\n posses: [this.curPos1, this.curPos2]\n })\n const point = Cesium.Cartographic.fromCartesian(pos3d);\n const posHeight = getParabolaYFromX(lengthAcross, quadratic);\n return Cesium.Cartesian3.fromRadians(point.longitude, point.latitude, posHeight);\n };\n\n const updatePoints = () => {\n if (!quadratic) {\n return;\n }\n const increment = Math.floor(curPoint);\n const chips = curPoint - Math.floor(curPoint);\n const posses: Cesium.Cartesian3[] = [];\n posses.push(getPosition(0));\n const addLast = increment >= TOTAL_POINTS;\n const totalCycles = addLast ? increment + 1 : increment;\n for (let i = 0; i < totalCycles; i++) {\n posses.push(getPosition(i));\n }\n posses.push(getPosition(increment + chips));\n if (posses.find(x => !x || !Cartes.ValidateCartes3(x))) {\n return;\n }\n this.curPoints = posses;\n };\n\n const doTick = () => {\n const p1 = this.curPos1;\n const p2 = this.curPos2;\n const newLength = p1 && p2 ? Cesium.Cartesian3.distance(p1, p2) : -1;\n if (newLength > 0 && newLength != TOTAL_LENGTH) {\n TOTAL_LENGTH = newLength;\n TOTAL_POINTS = Math.max(50, Math.min(1000, TOTAL_LENGTH * 0.1));\n POINT_LENGTH = TOTAL_LENGTH / TOTAL_POINTS;\n TICK_LENGTH_INC = SEC_DURATION == 0 ? TOTAL_LENGTH : TOTAL_POINTS / (RATE_PER_SECOND * SEC_DURATION);\n }\n prepareQuadratic();\n if (quadratic) {\n if (curPoint < TOTAL_POINTS) {\n curPoint += TICK_LENGTH_INC;\n }\n updatePoints();\n }\n };\n this.animateInterval = setInterval(doTick, RATE_PER_SECOND);\n\n return {\n parabola: this.parabola,\n siblings: this.siblings\n };\n }\n\n public Dispose() {\n clearTimeout(this.retryTimeout);\n clearInterval(this.animateInterval);\n const cEntities = [\n this.parabola\n ].concat(this.siblings);\n cEntities.forEach(e => {\n if (e && this.viewer.entities.contains(e)) {\n this.viewer.entities.remove(e);\n }\n });\n }\n}","import { BruceApi, Calculator, Color, Entity, EntityRelation, EntityRelationType, EntityType, IDictionary, Style } from \"bruce-models\";\nimport { VisualsRegister } from \"./visuals-register\";\nimport * as Cesium from \"cesium\";\nimport { CesiumParabola } from \"./render-managers/common/cesium-parabola\";\nimport { EnsureNumber } from \"../internal/js-utils\";\nimport { EntityUtils } from \"../utils/entity-utils\";\n\nfunction colorToCColor(color: Color.IColor): Cesium.Color {\n return new Cesium.Color(\n color.red ? color.red/255 : 0,\n color.green ? color.green/255 : 0,\n color.blue ? color.blue/255 : 0,\n color.alpha\n );\n}\n\nexport namespace RelationRenderEngine {\n export interface ICesiumEntityExt extends Cesium.Entity {\n _siblingGraphics?: Cesium.Entity[];\n _parentEntity?: Cesium.Entity;\n _renderGroup?: string;\n }\n\n export function GetRenderGroupId(relation: EntityRelation.IRelation) {\n return `${relation[\"Related.Entity.ID\"]}-${relation[\"Principal.Entity.ID\"]}-${relation[\"Relation.Type.ID\"]}`;\n }\n\n export async function Render(params: {\n apiGetter: BruceApi.IGetter,\n viewer: Cesium.Viewer;\n visualRegister: VisualsRegister.Register;\n menuItemId: string;\n relations: EntityRelation.IRelation[]\n }): Promise<IDictionary<ICesiumEntityExt>> {\n const { apiGetter, viewer, visualRegister, menuItemId, relations } = params;\n const api = apiGetter.getApi(apiGetter.accountId);\n const rendered: IDictionary<ICesiumEntityExt> = {};\n for (let i = 0; i < relations.length; i++) {\n const relation = relations[i];\n const {entity: fromEntity} = await Entity.Get({\n api,\n entityId: relation[\"Principal.Entity.ID\"],\n });\n const {entity: toEntity} = await Entity.Get({\n api,\n entityId: relation[\"Related.Entity.ID\"],\n });\n const dataEntity = relation[\"Data.Entity.ID\"] ? (await Entity.Get({\n api,\n entityId: relation[\"Data.Entity.ID\"]\n })).entity : null;\n const {relationType} = await EntityRelationType.Get({\n api,\n relationTypeId: relation[\"Relation.Type.ID\"]\n });\n let styleId = Number(relationType?.EntityDisplaySettingID);\n if (!styleId) {\n const typeId = relationType?.[\"Relation.EntityType.ID\"];\n const entityType = typeId ? (await EntityType.Get({\n api,\n entityTypeId: typeId\n })).entityType : null;\n styleId = entityType?.[\"DisplaySetting.ID\"];\n }\n const style = styleId ? (await Style.Get({\n api,\n styleId: styleId\n })).style : null;\n const cEntity = await Parabola.Render({\n dataEntity,\n fromEntity,\n relation,\n style,\n toEntity,\n viewer,\n visualRegister,\n apiGetter\n });\n cEntity._renderGroup = GetRenderGroupId(relation);\n rendered[GetRenderGroupId(relation)] = cEntity;\n }\n return rendered;\n }\n\n export namespace Parabola {\n export interface IParabola {\n viewer: Cesium.Viewer;\n relation: EntityRelation.IRelation;\n fromEntity: Entity.IEntity;\n toEntity: Entity.IEntity;\n dataEntity: Entity.IEntity;\n style: Style.IStyle;\n visualRegister?: VisualsRegister.Register;\n apiGetter: BruceApi.IGetter;\n }\n\n export async function Render(params: IParabola): Promise<ICesiumEntityExt> {\n const style = params.style?.Settings as Style.IRelationSettings;\n\n const entity = params.dataEntity;\n const bColor: Color.IColor = style?.lineColor ? Calculator.GetColor(style?.lineColor, entity, []) : null;\n const cColor = bColor ? colorToCColor(bColor) : Cesium.Color.WHITE;\n let width = EnsureNumber(style?.lineWidth ? Calculator.GetNumber(style?.lineWidth, entity, []) : 4, 4);\n if (width < 1) {\n width = 1;\n }\n const duration = EnsureNumber(style?.duration ? Calculator.GetNumber(style?.duration, entity, []) : 2, 2);\n const hDistanceRatio = EnsureNumber(style?.heightDistanceRatio ? Calculator.GetNumber(style?.heightDistanceRatio, entity, []) : 0.25, 0.25);\n\n let fromPos = null;\n let toPos = null;\n let updatingPosses = false;\n const updatePosses = async () => {\n if (updatingPosses) {\n return;\n }\n updatingPosses = true;\n try {\n fromPos = await EntityUtils.GetPosAsync({\n // Not passing it so it requests entity with expanded tileset information instead.\n //entity: params.fromEntity,\n viewer: params.viewer,\n visualRegister: params.visualRegister,\n returnHeightRef: Cesium.HeightReference.NONE,\n recordHeightRef: Cesium.HeightReference.CLAMP_TO_GROUND,\n api: params.apiGetter.getApi(),\n entityId: params.fromEntity.Bruce.ID\n });\n toPos = await EntityUtils.GetPosAsync({\n // Not passing it so it requests entity with expanded tileset information instead.\n //entity: params.toEntity,\n viewer: params.viewer,\n visualRegister: params.visualRegister,\n returnHeightRef: Cesium.HeightReference.NONE,\n recordHeightRef: Cesium.HeightReference.CLAMP_TO_GROUND,\n api: params.apiGetter.getApi(),\n entityId: params.toEntity.Bruce.ID\n });\n }\n catch (e) {\n console.error(e);\n }\n updatingPosses = false;\n };\n updatePosses();\n const parabola = new CesiumParabola({\n viewer: params.viewer,\n pos1: () => fromPos,\n pos2: () => toPos,\n color: cColor.toCssColorString(),\n width: width,\n duration: duration,\n heightDistanceRatio: hDistanceRatio\n });\n const cEntities = parabola.Animate();\n const cEntity = cEntities.parabola as ICesiumEntityExt;\n cEntity._siblingGraphics = [];\n for (let i = 0; i < cEntities.siblings.length; i++) {\n const sibling = cEntities.siblings[i];\n cEntity._siblingGraphics.push(sibling);\n }\n let updateInterval = setInterval(() => {\n if (\n !params.viewer?.scene ||\n params.viewer.isDestroyed() ||\n !params.viewer.entities.contains(cEntity)\n ) {\n clearInterval(updateInterval);\n parabola.Dispose();\n return;\n }\n updatePosses();\n }, 1000);\n return cEntity;\n }\n }\n}","import { BruceEvent, Cartes, EntityRelation, IDictionary, ObjectUtils } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EnsureNumber } from \"../internal/js-utils\";\r\nimport { EntityUtils } from \"../utils/entity-utils\";\r\nimport { EntityRenderEngine } from \"./entity-render-engine\";\r\nimport { RelationRenderEngine } from \"./relation-render-engine\";\r\n\r\ninterface IVisualExt {//extends Visual {\r\n _register?: VisualsRegister.Register;\r\n _rego?: VisualsRegister.IVisualRego;\r\n}\r\n\r\n/**\r\n * Returns if a given visual is alive and in the scene.\r\n * @param viewer\r\n * @param visual\r\n * @returns\r\n */\r\nfunction isAlive(viewer: Cesium.Viewer, visual: VisualsRegister.Visual) {\r\n if (!viewer?.scene || viewer.isDestroyed()) {\r\n return false;\r\n }\r\n if (visual instanceof Cesium.Entity) {\r\n return viewer.entities.contains(visual);\r\n }\r\n else if (visual instanceof Cesium.Primitive) {\r\n return viewer.scene.primitives.contains(visual);\r\n }\r\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\r\n const cTileset = visual?.tileset;\r\n if (!cTileset) {\r\n return false;\r\n }\r\n if (cTileset.isDestroyed() || !viewer.scene.primitives.contains(cTileset)) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction removeEntity(viewer: Cesium.Viewer, visual: VisualsRegister.Visual): void {\r\n unmarkEntity(visual, false);\r\n if (visual instanceof Cesium.Entity) {\r\n EntityRenderEngine.Remove({\r\n viewer,\r\n entity: visual\r\n });\r\n }\r\n else if (visual instanceof Cesium.Primitive) {\r\n if (viewer.scene.primitives.contains(visual)) {\r\n viewer.scene.primitives.remove(visual);\r\n }\r\n }\r\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\r\n try {\r\n const tileset = visual?.tileset;\r\n if (tileset && viewer.scene.primitives.contains(tileset)) {\r\n visual.show = false;\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n}\r\n\r\nfunction updateCEntityShow(viewer: Cesium.Viewer, visual: EntityRenderEngine.ICesiumEntityExt, show: boolean, ignoreParent: boolean) {\r\n if (visual._parentEntity && !ignoreParent) {\r\n updateCEntityShow(viewer, visual._parentEntity, show, false);\r\n }\r\n if (visual._siblingGraphics) {\r\n for (let i = 0; i < visual._siblingGraphics.length; i++) {\r\n const sibling = visual._siblingGraphics[i];\r\n updateCEntityShow(viewer, sibling, show, true);\r\n }\r\n }\r\n if (viewer.entities.contains(visual)) {\r\n visual.show = show;\r\n }\r\n}\r\n\r\nfunction updateEntityShow(\r\n viewer: Cesium.Viewer,\r\n visual: VisualsRegister.Visual,\r\n show: boolean\r\n): void {\r\n if (!isAlive(viewer, visual)) {\r\n return;\r\n }\r\n if (visual instanceof Cesium.Entity) {\r\n updateCEntityShow(viewer, visual, show, false);\r\n }\r\n else if (visual instanceof Cesium.Primitive) {\r\n if (viewer.scene.primitives.contains(visual)) {\r\n visual.show = show;\r\n }\r\n }\r\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\r\n // No way to tell if changing show will crash it!\r\n try {\r\n visual.show = show;\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n}\r\n\r\nfunction updateEntity(viewer: Cesium.Viewer, entityId: string, register: VisualsRegister.Register): void {\r\n const isolatedIds = register.GetIsolated();\r\n const isIsolated = isolatedIds.includes(entityId);\r\n const isHidden = register.GetIsHidden({\r\n entityId\r\n });\r\n const regos = register.GetRegos({\r\n entityId\r\n });\r\n let highestPriority: VisualsRegister.IVisualRego = <any>null;\r\n for (let i = 0; i < regos.length; i++) {\r\n const rego = regos[i];\r\n if (highestPriority === null || rego.priority > highestPriority.priority) {\r\n highestPriority = rego;\r\n }\r\n }\r\n\r\n function getShowState(rego: VisualsRegister.IVisualRego) {\r\n if (isHidden) {\r\n return false;\r\n }\r\n if (!isIsolated && isolatedIds.length > 0) {\r\n return false;\r\n }\r\n return rego === highestPriority;\r\n }\r\n\r\n for (let i = 0; i < regos.length; i++) {\r\n const rego = regos[i];\r\n rego.best = rego === highestPriority;\r\n updateEntityShow(viewer, rego.visual, rego.suppressShow ? false : getShowState(rego));\r\n }\r\n}\r\n\r\nfunction markEntity(register: VisualsRegister.Register, rego: VisualsRegister.IVisualRego, visual: VisualsRegister.Visual, ignoreParent: boolean): void {\r\n const vis = <IVisualExt>visual;\r\n vis._register = register;\r\n vis._rego = rego;\r\n if (visual instanceof Cesium.Entity) {\r\n const visEnt = <EntityRenderEngine.ICesiumEntityExt>visual;\r\n if (visEnt._parentEntity && !ignoreParent) {\r\n markEntity(register, rego, visEnt._parentEntity, false);\r\n }\r\n if (visEnt._siblingGraphics) {\r\n for (let i = 0; i < visEnt._siblingGraphics.length; i++) {\r\n markEntity(register, rego, visEnt._siblingGraphics[i], true);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction unmarkEntity(visual: VisualsRegister.Visual, ignoreParent: boolean): void {\r\n const vis = <IVisualExt>visual;\r\n vis._register = <any>null;\r\n if (visual instanceof Cesium.Entity) {\r\n const visEnt = <EntityRenderEngine.ICesiumEntityExt>visual;\r\n if (visEnt._parentEntity && !ignoreParent) {\r\n unmarkEntity(visEnt._parentEntity, false);\r\n }\r\n if (visEnt._siblingGraphics) {\r\n for (let i = 0; i < visEnt._siblingGraphics.length; i++) {\r\n unmarkEntity(visEnt._siblingGraphics[i], true);\r\n }\r\n }\r\n }\r\n}\r\n\r\nconst ORG_COLOR_KEY = \"_org_color_\";\r\n\r\nfunction select(viewer: Cesium.Viewer, visual: VisualsRegister.Visual, color: Cesium.Color): void {\r\n if (!isAlive(viewer, visual)) {\r\n return;\r\n }\r\n if (!color) {\r\n color = Cesium.Color.fromAlpha(Cesium.Color.YELLOW, 0.5);\r\n }\r\n if (visual instanceof Cesium.Entity) {\r\n const entities = EntityUtils.GatherEntity({\r\n entity: visual\r\n });\r\n const keyMapping = {\r\n \"point\": \"color\",\r\n \"polygon\": \"material\",\r\n \"polyline\": \"material\",\r\n \"model\": \"color\",\r\n \"billboard\": \"color\",\r\n \"ellipse\": \"material\"\r\n };\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n const processGraphic = (graphicKey: string, materialKey: string) => {\r\n if (entity[graphicKey]) {\r\n if (entity[graphicKey][ORG_COLOR_KEY] == null) {\r\n let orgColor = entity[graphicKey][materialKey];\r\n if (!orgColor) {\r\n orgColor = Cesium.Color.WHITE;\r\n }\r\n entity[graphicKey][ORG_COLOR_KEY] = orgColor.clone ? orgColor.clone() : orgColor;\r\n }\r\n entity[graphicKey][materialKey] = color.clone();\r\n }\r\n };\r\n for (let key in keyMapping) {\r\n const map = keyMapping[key];\r\n processGraphic(key, map);\r\n }\r\n }\r\n }\r\n else if (visual instanceof Cesium.Primitive) {\r\n // TODO.\r\n }\r\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\r\n let orgColor = visual[ORG_COLOR_KEY];\r\n if (orgColor == null) {\r\n orgColor = visual.color;\r\n visual[ORG_COLOR_KEY] = orgColor?.clone?.();\r\n }\r\n visual.color = color.clone();\r\n }\r\n const opacity = EntityUtils.GetOpacity({\r\n entity: visual\r\n });\r\n if (opacity != null) {\r\n EntityUtils.SetOpacity({\r\n viewer,\r\n entity: visual,\r\n opacity\r\n });\r\n }\r\n}\r\n\r\nfunction deselect(viewer: Cesium.Viewer, visual: VisualsRegister.Visual): void {\r\n if (!isAlive(viewer, visual)) {\r\n return;\r\n }\r\n if (visual instanceof Cesium.Entity) {\r\n const entities = EntityUtils.GatherEntity({\r\n entity: visual\r\n });\r\n const keyMapping = {\r\n \"point\": \"color\",\r\n \"polygon\": \"material\",\r\n \"polyline\": \"material\",\r\n \"model\": \"color\",\r\n \"billboard\": \"color\",\r\n \"ellipse\": \"material\"\r\n };\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n const processGraphic = (graphicKey: string, materialKey: string) => {\r\n if (entity[graphicKey]?.[ORG_COLOR_KEY]) {\r\n entity[graphicKey][materialKey] = entity[graphicKey][ORG_COLOR_KEY];\r\n }\r\n };\r\n for (let key in keyMapping) {\r\n const map = keyMapping[key];\r\n processGraphic(key, map);\r\n }\r\n }\r\n }\r\n else if (visual instanceof Cesium.Primitive) {\r\n // TODO.\r\n }\r\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\r\n const orgColor = visual[ORG_COLOR_KEY];\r\n if (orgColor != null) {\r\n visual.color = orgColor;\r\n }\r\n }\r\n const opacity = EntityUtils.GetOpacity({\r\n entity: visual\r\n });\r\n if (opacity != null) {\r\n EntityUtils.SetOpacity({\r\n viewer,\r\n entity: visual,\r\n opacity\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Manages a registry of all Bruce visuals being rendered by menu items.\r\n * If multiple stuff is registered with the same entity id, only the \"best\" one is left visible.\r\n */\r\nexport namespace VisualsRegister {\r\n export type Visual = Cesium.Entity | Cesium.Primitive | Cesium.Cesium3DTileFeature;\r\n\r\n export interface IVisualRego {\r\n // Bruce entity id.\r\n entityId: string;\r\n // Source bruce account id.\r\n accountId?: string;\r\n // Relationship if this is a rendered relationship.\r\n relation?: EntityRelation.IRelation;\r\n // Bruce entity type id - if known while menu item was loading the visual.\r\n entityTypeId?: string;\r\n // Bruce data-source id.\r\n // Used to store source-entity-id mapping to entity-id.\r\n sourceId?: number\r\n // External entity id.\r\n sourceEntityId?: string;\r\n // Root entity id for entities that are loaded as part of a hierarchy.\r\n // For CAD this will correspond to the tileset's entity id as well.\r\n rootId?: string;\r\n // Tileset id from which this visual was loaded from.\r\n tilesetId?: string;\r\n // Entity tag ids if known during rendering.\r\n tagIds?: number[];\r\n // Menu item id from which this visual was loaded from.\r\n menuItemId: string;\r\n // The visual itself.\r\n visual: Visual;\r\n // The visual's render priority. The highest priority is rendered, lower ones are hidden.\r\n priority: number;\r\n // Indicates if this is the best visual for the entity.\r\n // If multiple visuals are registered for the same entity, only the best one is left visible.\r\n // Warning: Don't assign, the register will do it.\r\n best?: boolean;\r\n // Optional indicator that this visual is stale,\r\n // This means the next re-render of the menu item will update this visual.\r\n stale?: boolean;\r\n // Last updated opacity value. Null = 100% opacity.\r\n // Warning: Don't assign, the register will do it.\r\n opacity?: number;\r\n // Don't update the visual's show=true.\r\n suppressShow?: boolean;\r\n }\r\n\r\n export enum EVisualUpdateType {\r\n Add = \"ADD\",\r\n Remove = \"REMOVE\",\r\n Update = \"UPDATE\"\r\n }\r\n\r\n export interface IVisualUpdate {\r\n type: EVisualUpdateType;\r\n entityId?: string;\r\n rego?: IVisualRego;\r\n hidden?: boolean;\r\n isolated?: boolean;\r\n selected?: boolean;\r\n opacity?: number;\r\n }\r\n\r\n export class Register {\r\n private id = ObjectUtils.UId();\r\n public get Id(): string {\r\n return this.id;\r\n }\r\n private viewer: Cesium.Viewer;\r\n public get Viewer(): Cesium.Viewer {\r\n return this.viewer;\r\n }\r\n private rego: IDictionary<IVisualRego[]> = {};\r\n private onUpdate: BruceEvent<IVisualUpdate> = <any>null;\r\n public get OnUpdate(): BruceEvent<IVisualUpdate> {\r\n if (!this.onUpdate) {\r\n this.onUpdate = new BruceEvent<IVisualUpdate>();\r\n }\r\n return this.onUpdate;\r\n }\r\n private selectedIds: string[] = [];\r\n private isolatedIds: string[] = [];\r\n private hiddenIds: string[] = [];\r\n // Entity id -> opacity for visual.\r\n private opacity: IDictionary<number> = {};\r\n private selectionColor: Cesium.Color;\r\n\r\n\r\n constructor(viewer: Cesium.Viewer) {\r\n this.viewer = viewer;\r\n }\r\n\r\n public ForceUpdate(params: {\r\n entityIds: string[]\r\n }) {\r\n const { entityIds } = params;\r\n for (let i = 0; i < entityIds.length; i++) {\r\n const entityId = entityIds[i];\r\n updateEntity(this.viewer, entityId, this);\r\n this.OnUpdate.Trigger({\r\n type: EVisualUpdateType.Update,\r\n entityId\r\n });\r\n }\r\n }\r\n\r\n public SetSelectionColor(color: Cesium.Color): void {\r\n this.selectionColor = color;\r\n }\r\n\r\n public SetSelected(params: {\r\n selected: boolean,\r\n entityIds: string[],\r\n refreshIfSelected?: boolean\r\n }): void {\r\n let { entityIds, selected, refreshIfSelected } = params;\r\n if (refreshIfSelected == null) {\r\n refreshIfSelected = true;\r\n }\r\n for (let i = 0; i < entityIds.length; i++) {\r\n const id = entityIds[i];\r\n if (selected) {\r\n let doSelect = refreshIfSelected;\r\n if (this.selectedIds.indexOf(id) === -1) {\r\n this.selectedIds.push(id);\r\n doSelect = true;\r\n }\r\n if (doSelect) {\r\n const regos = this.rego[id];\r\n if (regos) {\r\n for (let i = 0; i < regos.length; i++) {\r\n const rego = regos[i];\r\n select(this.viewer, rego.visual, this.selectionColor);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n const index = this.selectedIds.indexOf(id);\r\n if (index !== -1) {\r\n this.selectedIds.splice(index, 1);\r\n const regos = this.rego[id];\r\n if (regos) {\r\n for (let i = 0; i < regos.length; i++) {\r\n const rego = regos[i];\r\n deselect(this.viewer, rego.visual);\r\n }\r\n }\r\n }\r\n }\r\n this.onUpdate?.Trigger({\r\n entityId: id,\r\n type: EVisualUpdateType.Update,\r\n selected: selected\r\n });\r\n }\r\n }\r\n\r\n public GetIsSelected(params: {\r\n entityId: string\r\n }): boolean {\r\n const { entityId: id } = params;\r\n return this.selectedIds.indexOf(id) !== -1;\r\n }\r\n\r\n public ClearSelected(): void {\r\n for (let i = 0; i < this.selectedIds.length; i++) {\r\n const id = this.selectedIds[i];\r\n const regos = this.rego[id];\r\n if (regos) {\r\n for (let i = 0; i < regos.length; i++) {\r\n const rego = regos[i];\r\n deselect(this.viewer, rego.visual);\r\n }\r\n }\r\n }\r\n this.selectedIds = [];\r\n }\r\n\r\n public GetSelected() {\r\n return this.selectedIds;\r\n }\r\n\r\n public SetIsolated(params: {\r\n entityIds: string[],\r\n isolated: boolean\r\n }): void {\r\n const { entityIds, isolated: isolate } = params;\r\n for (let i = 0; i < entityIds.length; i++) {\r\n const id = entityIds[i];\r\n if (isolate) {\r\n if (this.isolatedIds.indexOf(id) === -1) {\r\n this.isolatedIds.push(id);\r\n }\r\n }\r\n else {\r\n const index = this.isolatedIds.indexOf(id);\r\n if (index !== -1) {\r\n this.isolatedIds.splice(index, 1);\r\n }\r\n }\r\n this.onUpdate?.Trigger({\r\n entityId: id,\r\n type: EVisualUpdateType.Update,\r\n isolated: isolate\r\n });\r\n }\r\n this.updateAllEntities();\r\n }\r\n\r\n public GetIsIsolated(params: {\r\n entityId: string\r\n }): boolean {\r\n const { entityId: id } = params;\r\n return this.isolatedIds.indexOf(id) !== -1;\r\n }\r\n\r\n public GetIsolated() {\r\n return this.isolatedIds;\r\n }\r\n\r\n public ClearIsolated(): void {\r\n this.isolatedIds = [];\r\n this.updateAllEntities();\r\n }\r\n\r\n public SetHidden(params: {\r\n hidden: boolean,\r\n entityIds: string[]\r\n }): void {\r\n const { entityIds, hidden } = params;\r\n for (let i = 0; i < entityIds.length; i++) {\r\n const id = entityIds[i];\r\n if (hidden) {\r\n if (this.hiddenIds.indexOf(id) === -1) {\r\n this.hiddenIds.push(id);\r\n }\r\n updateEntity(this.viewer, id, this);\r\n }\r\n else {\r\n const index = this.hiddenIds.indexOf(id);\r\n if (index !== -1) {\r\n this.hiddenIds.splice(index, 1);\r\n }\r\n updateEntity(this.viewer, id, this);\r\n }\r\n this.onUpdate?.Trigger({\r\n entityId: id,\r\n type: EVisualUpdateType.Update,\r\n hidden: hidden\r\n });\r\n }\r\n }\r\n\r\n public GetIsHidden(params: {\r\n entityId: string\r\n }): boolean {\r\n const { entityId: id } = params;\r\n return this.hiddenIds.indexOf(id) !== -1;\r\n }\r\n\r\n public GetHidden() {\r\n return this.hiddenIds;\r\n }\r\n\r\n public ClearHidden(): void {\r\n this.hiddenIds = [];\r\n this.updateAllEntities();\r\n this.onUpdate?.Trigger({\r\n type: EVisualUpdateType.Update,\r\n hidden: false\r\n });\r\n }\r\n\r\n public AddRego(params: {\r\n rego: IVisualRego\r\n }): void {\r\n const { rego } = params;\r\n // ND-2078\r\n // Tilesets will often add -> remove -> add because of how tiles load in and out of the scene.\r\n // To avoid flickering, we'll just replace rather than remove -> add.\r\n if (!rego.tilesetId) {\r\n this.RemoveRegos({\r\n entityId: rego.entityId,\r\n menuItemId: rego.menuItemId,\r\n doUpdate: false\r\n });\r\n }\r\n const entityId = rego.entityId;\r\n const entityRegos = this.rego[entityId] ?? [];\r\n entityRegos.push(rego);\r\n this.rego[entityId] = entityRegos;\r\n markEntity(this, rego, rego.visual, false);\r\n updateEntity(this.viewer, entityId, this);\r\n\r\n const selected = this.selectedIds.includes(entityId);\r\n if (selected) {\r\n select(this.viewer, rego.visual, this.selectionColor);\r\n }\r\n const opacity = this.opacity[entityId];\r\n if (opacity != null && opacity != 1) {\r\n EntityUtils.SetOpacity({\r\n entity: rego.visual,\r\n opacity: opacity,\r\n viewer: this.viewer\r\n });\r\n }\r\n\r\n this.onUpdate?.Trigger({\r\n rego: rego,\r\n type: EVisualUpdateType.Add,\r\n entityId: rego.entityId,\r\n opacity: opacity,\r\n selected: selected\r\n });\r\n }\r\n\r\n /**\r\n * Locates a visual corresponding to a given entity id.\r\n * If no menu item id is provided, then it will pick the \"best\" one.\r\n * @param entityId\r\n * @param menuItemId\r\n * @returns\r\n */\r\n public GetRego(params: {\r\n entityId: string,\r\n menuItemId?: string\r\n }): IVisualRego {\r\n const { entityId, menuItemId } = params;\r\n const entityRegos = this.rego[entityId];\r\n if (!entityRegos) {\r\n return <any>[];\r\n }\r\n if (menuItemId) {\r\n return <any>entityRegos.find(r => r.menuItemId === menuItemId);\r\n }\r\n return entityRegos.find(x => x.best);\r\n }\r\n\r\n /**\r\n * Returns regos matching given criteria.\r\n * Either entityId or menuItemId must be provided.\r\n * @param params\r\n * @returns\r\n */\r\n public GetRegos(params: {\r\n entityId?: string,\r\n menuItemId?: string\r\n }): IVisualRego[] {\r\n // TODO: refactor.\r\n // Currently this was made by merging two functions.\r\n\r\n const { entityId, menuItemId } = params;\r\n if (entityId) {\r\n const entityId = params.entityId;\r\n const entityRegos = this.rego[entityId];\r\n if (!entityRegos) {\r\n return <any>[];\r\n }\r\n return menuItemId ? entityRegos.filter(x => x.menuItemId == menuItemId) : entityRegos;\r\n }\r\n else if (menuItemId) {\r\n const menuItemId = params.menuItemId;\r\n const visuals: IVisualRego[] = [];\r\n for (const entityId in this.rego) {\r\n const entityRegos = this.rego[entityId];\r\n if (entityRegos) {\r\n const rego = entityRegos.find(r => r.menuItemId === menuItemId);\r\n if (rego) {\r\n visuals.push(rego);\r\n }\r\n }\r\n }\r\n return visuals;\r\n }\r\n }\r\n\r\n /**\r\n * Removes regos matching given criteria.\r\n * Either entityId or menuItemId must be provided.\r\n * @param params\r\n * @returns\r\n */\r\n public RemoveRegos(params: {\r\n entityId?: string,\r\n menuItemId?: string,\r\n relation?: EntityRelation.IRelation,\r\n doUpdate?: boolean,\r\n // If a menu item is being removed, you can specify what tags to retain.\r\n // This means only regos with tags that don't match any retained ones will be removed.\r\n retainTagIds?: (string | number)[]\r\n }): void {\r\n let { entityId, menuItemId, doUpdate, relation, retainTagIds } = params;\r\n if (doUpdate == null) {\r\n doUpdate = true;\r\n }\r\n if (retainTagIds == null) {\r\n retainTagIds = [];\r\n }\r\n\r\n // TODO: refactor.\r\n // Currently this was made by merging two functions.\r\n\r\n if (menuItemId && !entityId) {\r\n for (const entityId in this.rego) {\r\n const entityRegos = this.rego[entityId];\r\n if (entityRegos) {\r\n const rego = entityRegos.find(r => r.menuItemId === menuItemId);\r\n if (!rego) {\r\n continue;\r\n }\r\n const regoTagIds = rego.tagIds ? rego.tagIds : [];\r\n const shouldRetain = regoTagIds.some(tagId => retainTagIds.includes(tagId));\r\n if (shouldRetain) {\r\n continue;\r\n }\r\n removeEntity(this.viewer, rego.visual);\r\n const doesInclude = this.rego[entityId].find(r => r.menuItemId === menuItemId);\r\n if (doesInclude) {\r\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== menuItemId);\r\n }\r\n this.onUpdate?.Trigger({\r\n type: EVisualUpdateType.Remove,\r\n entityId: rego.entityId,\r\n rego: rego\r\n });\r\n if (doesInclude) {\r\n updateEntity(this.viewer, entityId, this);\r\n }\r\n }\r\n }\r\n }\r\n else if (entityId) {\r\n const entityRegos = this.rego[entityId];\r\n if (!entityRegos) {\r\n return;\r\n }\r\n const menuItems = menuItemId ? [menuItemId] : entityRegos.map(x => x.menuItemId);\r\n for (let i = 0; i < menuItems.length; i++) {\r\n const menuItemId = menuItems[i];\r\n const rego = entityRegos.find(r => r.menuItemId === menuItemId);\r\n if (!rego) {\r\n return;\r\n }\r\n removeEntity(this.viewer, rego.visual);\r\n this.onUpdate?.Trigger({\r\n type: EVisualUpdateType.Remove,\r\n entityId: rego.entityId,\r\n rego: rego\r\n });\r\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== menuItemId);\r\n if (doUpdate && menuItemId) {\r\n updateEntity(this.viewer, entityId, this);\r\n }\r\n }\r\n }\r\n else if (relation) {\r\n const relationKey = RelationRenderEngine.GetRenderGroupId(relation);\r\n for (const entityId in this.rego) {\r\n const entityRegos = this.rego[entityId];\r\n if (entityRegos) {\r\n const rego = entityRegos.find(r => r.relation && RelationRenderEngine.GetRenderGroupId(r.relation) == relationKey);\r\n if (!rego) {\r\n continue;\r\n }\r\n removeEntity(this.viewer, rego.visual);\r\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== menuItemId);\r\n this.onUpdate?.Trigger({\r\n type: EVisualUpdateType.Remove,\r\n entityId: rego.entityId,\r\n rego: rego\r\n });\r\n if (doUpdate && menuItemId) {\r\n updateEntity(this.viewer, entityId, this);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Returns an array of drilled visuals associated with this register.\r\n * The top array item is the first found.\r\n * @param cursor\r\n * @returns\r\n */\r\n public GetRegosFromCursor(params: {\r\n cursor: Cartes.ICartes2,\r\n // Pixel width/height. Default is 5x5 pixels.\r\n width?: number,\r\n height?: number,\r\n // Default is 5.\r\n pickLimit?: number\r\n }): {\r\n regos: IVisualRego[]\r\n } {\r\n const { cursor } = params;\r\n const found: IVisualRego[] = [];\r\n\r\n const width = Math.ceil(EnsureNumber(params.width, 5));\r\n const height = Math.ceil(EnsureNumber(params.height, 5));\r\n const x = Math.ceil(cursor.x - width / 2);\r\n const y = Math.ceil(cursor.y - height / 2);\r\n const pickLimit = Math.ceil(EnsureNumber(params.pickLimit, 5));\r\n\r\n const picked = this.viewer.scene.drillPick(new Cesium.Cartesian2(x, y), pickLimit, width, height);\r\n for (let i = 0; i < picked.length; i++) {\r\n const object = picked[i];\r\n const entity = <Visual>(object && object.id && object.id instanceof Cesium.Entity ? object.id : object);\r\n const visual = <IVisualExt>entity;\r\n if (visual?._register?.Id == this.id) {\r\n found.push(<IVisualRego>visual._rego);\r\n }\r\n }\r\n return {\r\n regos: found\r\n };\r\n }\r\n\r\n /**\r\n * Returns all registered entity ids.\r\n */\r\n public GetEntityIds(): string[] {\r\n const ids: string[] = [];\r\n for (const entityId in this.rego) {\r\n const regos = this.rego[entityId];\r\n if (regos && regos.length) {\r\n ids.push(entityId);\r\n }\r\n }\r\n return ids;\r\n }\r\n\r\n /**\r\n * Marks regos corresponding to given entity ids as stale.\r\n * This will cause them to be updated on the next update cycle.\r\n * Optionally include menu item ids to restrict the filter.\r\n * @param params\r\n */\r\n public MarkStale(params: {\r\n entityIds: string[],\r\n menuItemIds?: string[]\r\n }) {\r\n const { entityIds, menuItemIds } = params;\r\n for (const entityId of entityIds) {\r\n const regos = this.rego[entityId];\r\n if (regos && regos.length) {\r\n for (const rego of regos) {\r\n if (!menuItemIds || menuItemIds.includes(rego.menuItemId)) {\r\n rego.stale = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private updateAllEntities() {\r\n for (const entityId in this.rego) {\r\n const regos = this.rego[entityId];\r\n if (regos && regos.length) {\r\n updateEntity(this.viewer, entityId, this);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets opacity for given set of entities.\r\n * 100% opacity is treated as \"use original\".\r\n * @param params\r\n */\r\n public SetOpacity(params: {\r\n opacity: number,\r\n entityIds: string[],\r\n menuItemId?: string\r\n }) {\r\n const { entityIds, menuItemId: menuItemIds } = params;\r\n for (const entityId of entityIds) {\r\n const regos = this.rego[entityId];\r\n if (regos && regos.length) {\r\n for (const rego of regos) {\r\n if (\r\n rego.visual &&\r\n (!menuItemIds || menuItemIds.includes(rego.menuItemId))\r\n ) {\r\n if (params.opacity == 1) {\r\n EntityUtils.RevertOpacity({\r\n entity: rego.visual,\r\n viewer: this.viewer\r\n });\r\n }\r\n else {\r\n EntityUtils.SetOpacity({\r\n entity: rego.visual,\r\n opacity: params.opacity,\r\n viewer: this.viewer\r\n });\r\n }\r\n this.opacity[rego.entityId] = params.opacity;\r\n this.onUpdate?.Trigger({\r\n rego: rego,\r\n type: EVisualUpdateType.Update,\r\n entityId: rego.entityId,\r\n opacity: params.opacity\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Returns opacity for given entity/s.\r\n * If multiple entities are supplied, then the average is returned.\r\n * Unknown opacity is treated as 100% opacity.\r\n * @param params\r\n * @returns\r\n */\r\n public GetOpacity(params: {\r\n entityIds: string[],\r\n menuItemIds?: string\r\n }) {\r\n let totalOpacity = null;\r\n let totalTicks = 0;\r\n const { entityIds, menuItemIds } = params;\r\n for (const entityId of entityIds) {\r\n const regos = this.rego[entityId];\r\n if (regos && regos.length) {\r\n for (const rego of regos) {\r\n if (\r\n rego.visual &&\r\n (!menuItemIds || menuItemIds.includes(rego.menuItemId))\r\n ) {\r\n const opacity = this.opacity[rego.entityId];\r\n if (opacity != null) {\r\n totalOpacity += opacity;\r\n totalTicks += 1;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return totalOpacity ? totalOpacity / totalTicks : 1;\r\n }\r\n\r\n public ClearOpacity() {\r\n for (const entityId in this.opacity) {\r\n const regos = this.rego[entityId];\r\n if (regos && regos.length) {\r\n for (const rego of regos) {\r\n if (rego?.visual) {\r\n EntityUtils.RevertOpacity({\r\n entity: rego.visual,\r\n viewer: this.viewer\r\n });\r\n }\r\n }\r\n }\r\n }\r\n this.opacity = {};\r\n }\r\n\r\n /**\r\n * Returns a dictionary containing entityId -> opacity values.\r\n * Opacity 1 = 100%.\r\n * @returns\r\n */\r\n public GetOpacityMap(): IDictionary<number> {\r\n return this.opacity ? JSON.parse(JSON.stringify(this.opacity)) : {};\r\n }\r\n }\r\n}","import { BatchedDataGetter, BruceApi, Entity, IDictionary, MenuItem } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\nimport { VisualsRegister } from \"../../visuals-register\";\nimport { RenderManager } from \"../render-manager\";\nimport { PointClustering } from \"../common/point-clustering\";\n\nconst BATCH_SIZE = 500;\n\n/**\n * Render manager for rendering an array of entity ids.\n * This will render them in batches to avoid overloading the viewer.\n */\nexport namespace EntitiesIdsRenderManager {\n export class Manager implements RenderManager.IManager {\n private viewer: Cesium.Viewer;\n private apiGetter: BruceApi.IGetter;\n private monitor: CesiumViewMonitor;\n private item: MenuItem.Item.IEntityIds;\n private getter: BatchedDataGetter.Getter<string> = <any>null;\n private getterSub: () => void = <any>null;\n private disposed: boolean = false;\n public get Disposed(): boolean {\n return this.disposed;\n }\n private renderedEntities: IDictionary<boolean> = {};\n private visualsManager: VisualsRegister.Register;\n private clustering: PointClustering;\n\n constructor(params: {\n viewer: Cesium.Viewer,\n register: VisualsRegister.Register,\n apiGetter: BruceApi.IGetter,\n monitor: CesiumViewMonitor,\n item: MenuItem.Item.IEntityIds\n }) {\n const { viewer, apiGetter, monitor, item, register: visualsManager } = params;\n this.viewer = viewer;\n this.apiGetter = apiGetter;\n this.monitor = monitor;\n this.item = item;\n this.visualsManager = visualsManager;\n if (this.item.enableClustering) {\n this.clustering = new PointClustering(visualsManager, this.item.id);\n }\n }\n\n public Init() {\n if (this.disposed) {\n throw(new Error(\"This item is disposed.\"));\n }\n this.getter = new BatchedDataGetter.Getter<string>(\n this.item.BruceEntity.EntityIds,\n this.monitor,\n BATCH_SIZE\n );\n this.getterSub = this.getter.OnUpdate.Subscribe((ids) => {\n this.onGetterUpdate(ids);\n });\n this.getter.Start();\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.getterSub?.();\n this.getterSub = <any>null;\n this.disposed = true;\n this.visualsManager.RemoveRegos({\n menuItemId: this.item.id\n });\n this.clustering?.Dispose();\n }\n\n public async ReRender(params: {\n entityIds?: string[],\n entities?: Entity.IEntity[],\n force: boolean\n }) {\n let { entityIds, force, entities } = params;\n if (entities && !entityIds) {\n entityIds = entities.map(x => x.Bruce?.ID);\n }\n if (entityIds == null) {\n entityIds = Object.keys(this.renderedEntities);\n }\n else {\n // ensure entity ids are part of menu item.\n entityIds = entityIds.filter(x => {\n return this.item.BruceEntity?.EntityIds.includes(x);\n })\n }\n this.visualsManager.MarkStale({\n entityIds: entityIds,\n menuItemIds: [this.item.id]\n });\n if (entities?.length) {\n this.renderEntities([].concat(entities).filter(x => entityIds.includes(x.Bruce?.ID)), force);\n }\n else {\n this.onGetterUpdate(entityIds, force);\n }\n }\n\n private async onGetterUpdate(entityIds: string[], force: boolean = false): Promise<void> {\n if (this.disposed || this.viewer.isDestroyed()) {\n return;\n }\n try {\n const api = this.apiGetter.getApi();\n const {entities} = await Entity.GetListByIds({\n api,\n entityIds\n });\n await this.renderEntities(entities, force);\n }\n catch (e) {\n console.error(e);\n }\n }\n\n private async renderEntities(entities: Entity.IEntity[], force: boolean = false) {\n if (this.disposed || this.viewer.isDestroyed()) {\n return;\n }\n try {\n const cEntities = await EntityRenderEngine.Render({\n viewer: this.viewer,\n apiGetter: this.apiGetter,\n entities: entities,\n menuItemId: this.item.id,\n visualRegister: this.visualsManager,\n zoomControl: this.item.CameraZoomSettings,\n force\n });\n for (let i = 0; i < entities.length; i++) {\n const entity = entities[i];\n const id = <string>entity.Bruce.ID;\n const cEntity = cEntities[id];\n this.renderedEntities[id] = !!cEntity;\n if (cEntity) {\n const visual = this.visualsManager.GetRego({\n entityId: id,\n menuItemId: this.item.id\n })?.visual;\n if (!visual || visual != cEntity) {\n const clustered = this.clustering ? this.clustering.AddEntity(id, cEntity) : false;\n this.visualsManager.AddRego({\n rego: {\n entityId: id,\n menuItemId: this.item.id,\n visual: cEntity,\n priority: 0,\n entityTypeId: entity.Bruce[\"EntityType.ID\"],\n accountId: this.apiGetter.accountId,\n suppressShow: clustered\n }\n });\n }\n }\n else {\n this.visualsManager.RemoveRegos({\n entityId: id,\n menuItemId: this.item.id\n });\n this.clustering?.RemoveEntity(id);\n }\n }\n this.viewer.scene.requestRender();\n }\n catch (e) {\n console.error(e);\n }\n }\n }\n}","import { BatchedDataGetter, BruceApi, Entity, IDictionary, MenuItem, ZoomControl } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\nimport { VisualsRegister } from \"../../visuals-register\";\nimport { RenderManager } from \"../render-manager\";\n\n/**\n * Manager for rendering a single Bruce entity.\n */\nexport namespace EntityRenderManager {\n export class Manager implements RenderManager.IManager {\n private viewer: Cesium.Viewer;\n private apiGetter: BruceApi.IGetter;\n private item: MenuItem.Item.IEntity;\n private getter: BatchedDataGetter.Getter<string> = <any>null;\n private monitor: CesiumViewMonitor;\n private getterSub: () => void = <any>null;\n private disposed: boolean = false;\n public get Disposed(): boolean {\n return this.disposed;\n }\n private visualsManager: VisualsRegister.Register;\n\n\n constructor(params: {\n viewer: Cesium.Viewer,\n register: VisualsRegister.Register,\n apiGetter: BruceApi.IGetter,\n monitor: CesiumViewMonitor,\n item: MenuItem.Item.IEntity\n }) {\n const { viewer, apiGetter, monitor, item, register: visualsManager } = params;\n this.viewer = viewer;\n this.apiGetter = apiGetter;\n this.monitor = monitor;\n this.item = item;\n this.visualsManager = visualsManager;\n }\n\n public Init() {\n if (this.disposed) {\n throw(new Error(\"This item is disposed.\"));\n }\n this.getter = new BatchedDataGetter.Getter<string>(\n [this.item.BruceEntity.EntityId],\n this.monitor,\n 1\n );\n this.getterSub = this.getter.OnUpdate.Subscribe((ids) => {\n this.onGetterUpdate(ids[0]);\n });\n this.getter.Start();\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n this.getterSub?.();\n this.getterSub = <any>null;\n this.visualsManager.RemoveRegos({\n menuItemId: this.item.id\n });\n }\n\n public async ReRender(params: {\n entityIds?: string[],\n entities?: Entity.IEntity[],\n force?: boolean\n }) {\n let {entityIds, force, entities} = params;\n if (entities && !entityIds) {\n entityIds = entities.map(x => x.Bruce?.ID);\n }\n if (entityIds && !entityIds.includes(this.item.BruceEntity.EntityId)) {\n return;\n }\n this.visualsManager.MarkStale({\n entityIds: entityIds,\n menuItemIds: [this.item.id]\n });\n if (entities?.length) {\n await this.renderEntity(entities.find(x => x.Bruce?.ID == this.item.BruceEntity.EntityId), force);\n }\n else {\n await this.onGetterUpdate(this.item.BruceEntity.EntityId, force);\n }\n }\n\n private async onGetterUpdate(id: string, force: boolean = false): Promise<void> {\n try {\n if (this.disposed || this.viewer.isDestroyed()) {\n return;\n }\n\n const api = this.apiGetter.getApi();\n const {entity} = await Entity.Get({\n api,\n entityId: id\n });\n this.renderEntity(entity, force);\n }\n catch (e) {\n console.error(e);\n }\n }\n\n private async renderEntity(entity: Entity.IEntity, force: boolean = false) {\n try {\n if (this.disposed || this.viewer.isDestroyed()) {\n return;\n }\n const id = entity.Bruce.ID;\n const cEntities = await EntityRenderEngine.Render({\n viewer: this.viewer,\n apiGetter: this.apiGetter,\n entities: [entity],\n menuItemId: this.item.id,\n visualRegister: this.visualsManager,\n zoomControl: this.item.CameraZoomSettings,\n force\n });\n const cEntity = cEntities[id];\n if (cEntity) {\n const visual = this.visualsManager.GetRego({\n entityId: id,\n menuItemId: this.item.id\n })?.visual;\n if (!visual || visual != cEntity) {\n this.visualsManager.AddRego({\n rego: {\n entityId: <string>entity.Bruce.ID,\n menuItemId: this.item.id,\n visual: cEntity,\n priority: 0,\n entityTypeId: entity.Bruce[\"EntityType.ID\"],\n accountId: this.apiGetter.accountId\n }\n });\n }\n }\n else {\n this.visualsManager.RemoveRegos({\n entityId: id,\n menuItemId: this.item.id\n });\n }\n this.viewer.scene.requestRender();\n }\n catch (e) {\n console.error(e);\n }\n }\n }\n}","import { BruceApi, Calculator, Cartes, Carto, Color, Entity, EntityCoords, EntityType, IDictionary, ObjectUtils, Style, Tileset, Transform } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { VisualsRegister } from \"./visuals-register\";\nimport { EnsureNumber } from \"../internal/js-utils\";\n\nfunction colorToCColor(color: Color.IColor): Cesium.Color {\n return new Cesium.Color(\n color.red ? color.red/255 : 0,\n color.green ? color.green/255 : 0,\n color.blue ? color.blue/255 : 0,\n color.alpha\n );\n}\n\n/**\n * Returns if a given tileset is alive and in the scene.\n * @param viewer\n * @param cTileset\n * @returns\n */\nfunction isAlive(viewer: Cesium.Viewer, cTileset: Cesium.Cesium3DTileset) {\n if (!viewer?.scene) {\n return false;\n }\n if (viewer.isDestroyed()) {\n return false;\n }\n if (cTileset.isDestroyed()) {\n return false;\n }\n return viewer.scene.primitives.contains(cTileset);\n}\n\n// ND-1641. BOOKMARKS - (DEMO) View does not match bookmark.\n// We have some evil hard-coded style mappings that need to be fixed.\n// These exist within legacy project views.\nfunction correctStyle(style: Style.IStyle | any) {\n if (style && !style.Settings && !style.ID) {\n return {\n ID: 0,\n Name: \"Unknown\",\n Settings: {\n ...style as Style.IEntitySettings\n },\n Type: Style.EType.Entity\n }\n }\n return style;\n}\n\nconst VIEWER_WATCH_KEY = \"bruce-viewer-watch\";\nconst WATCH_KEY = \"bruce-tileset-watch\";\ninterface IWatchedTileset extends Cesium.Cesium3DTileset {\n [WATCH_KEY]?: string;\n}\n\n/**\n * Creates and returns a tileset instance from a given url.\n * This is made to handle the difference between old and new cesium versions.\n * New versions use fromUrl whereas old versions pass the url as a property.\n * @param url\n * @param props\n * @returns\n */\nasync function createTileset(url: string, props?: any): Promise<Cesium.Cesium3DTileset> {\n const defaultProps = {\n // \"Optimization option. Reduce the screen space error for tiles that are further away from the camera.\".\n dynamicScreenSpaceError: true,\n // \"The maximum amount of memory in MB that can be used by the tileset.\".\n maximumMemoryUsage: 512\n };\n\n const C3DT = Cesium.Cesium3DTileset as any;\n if (C3DT.fromUrl) {\n // New cesium is running.\n return C3DT.fromUrl(url, {\n ...defaultProps,\n ...props\n } as any);\n }\n // Old cesium is running.\n return new C3DT({\n url: url,\n ...defaultProps,\n ...props\n });\n}\n\nexport namespace TilesetRenderEngine {\n export interface IPositionParams {\n ucs?: {\n location?: Carto.ICarto;\n transform?: Transform.ITransform;\n },\n location?: Carto.ICarto;\n transform?: Transform.ITransform;\n isLegacy?: boolean;\n legacyProps?: {\n usingBoundingBox?: boolean;\n transform?: boolean;\n rotate?: boolean;\n }\n }\n\n export interface ISettingsParams {\n maxScreenSpaceError?: number;\n attenuation?: boolean;\n maximumAttenuation?: number;\n colorMask?: string;\n }\n\n export interface ITilesetExt extends Cesium.Cesium3DTileset {\n _bruceCoords?: IPositionParams;\n _bruceSettings?: ISettingsParams;\n }\n\n export interface IParams {\n accountId: string;\n apiGetter: BruceApi.IGetter;\n tileset: Tileset.ITileset;\n viewer: Cesium.Viewer;\n coords?: EntityCoords.IEntityCoords;\n // Default false. Requires cdn base url within api to be set.\n viaCdn?: boolean;\n }\n\n export function ApplyPosition(params: {\n cTileset: Cesium.Cesium3DTileset\n position: IPositionParams\n }): void {\n const cTileset = params.cTileset;\n const root = cTileset.root;\n const position = params.position;\n const location = position.ucs?.location ? position.ucs.location : position.location;\n let transform = position.transform;\n transform = {\n heading: 0,\n pitch: 0,\n roll: 0,\n scale: 1,\n x: 0,\n y: 0,\n z: 0,\n ...transform\n }\n transform.scale = EnsureNumber(transform.scale);\n if (transform.scale <= 0) {\n transform.scale = 0.000001;\n }\n\n /**\n * Very cursed.\n */\n if (position.isLegacy) {\n const legacy = position.legacyProps;\n if (legacy.usingBoundingBox == null) {\n legacy.usingBoundingBox = true;\n }\n if (legacy.transform) {\n const offsetPoint = (pos: Cesium.Cartographic, distance: number, bearing: number): Cesium.Cartographic => {\n // radius of earth\n let radius: number = 6371e3;\n let δ = distance / radius;\n let θ = Cesium.Math.toRadians(bearing);\n let φ1 = Cesium.Math.toRadians(pos.latitude);\n let λ1 = Cesium.Math.toRadians(pos.longitude);\n let sinφ2 = Math.sin(φ1) * Math.cos(δ) + Math.cos(φ1) * Math.sin(δ) * Math.cos(θ);\n let φ2 = Math.asin(sinφ2);\n let y = Math.sin(θ) * Math.sin(δ) * Math.cos(φ1);\n let x = Math.cos(δ) - Math.sin(φ1) * sinφ2;\n let λ2 = λ1 + Math.atan2(y, x);\n let finalPos: Cesium.Cartographic = new Cesium.Cartographic(λ2, φ2, pos.height);\n finalPos.latitude = Cesium.Math.toDegrees(finalPos.latitude);\n finalPos.longitude = Cesium.Math.toDegrees(finalPos.longitude);\n return finalPos;\n }\n\n const getOffset = (pos: Cesium.Cartesian3, n: number, e: number, alt: number): Cesium.Cartesian3 => {\n if (n == 0 && e == 0 && alt == 0) {\n return new Cesium.Cartesian3(0, 0, 0);\n }\n let carto: Cesium.Cartographic = Cesium.Cartographic.fromCartesian(pos);\n carto.latitude = Cesium.Math.toDegrees(carto.latitude);\n carto.longitude = Cesium.Math.toDegrees(carto.longitude);\n // North\n if (n != 0) {\n carto = offsetPoint(carto, Number(n), 0);\n }\n // East\n if (e != 0) {\n carto = offsetPoint(carto, Number(e), 90);\n }\n // Altitude\n carto.height += Number(alt);\n let finalOffset: Cesium.Cartesian3 = Cesium.Cartesian3.fromDegrees(carto.longitude, carto.latitude, carto.height);\n finalOffset.x -= pos.x;\n finalOffset.y -= pos.y;\n finalOffset.z -= pos.z;\n return finalOffset;\n }\n\n const getCurPos3d = () => {\n if (legacy.usingBoundingBox == false) {\n return Cesium.Matrix4.getTranslation(root.transform, new Cesium.Cartesian3());\n }\n else {\n return Cesium.Cartesian3.clone(root.boundingSphere.center);\n }\n };\n\n let pos3d: Cesium.Cartesian3;\n if (location?.latitude != null && location?.longitude != null) {\n pos3d = Cesium.Cartesian3.fromDegrees(\n EnsureNumber(location.longitude),\n EnsureNumber(location.latitude),\n EnsureNumber(location.altitude)\n );\n }\n if (!pos3d) {\n pos3d = getCurPos3d();\n }\n const offset = getOffset(pos3d, transform.x, transform.y, transform.z);\n if (Cartes.ValidateCartes3(offset)) {\n pos3d.x += offset.x;\n pos3d.y += offset.y;\n pos3d.z += offset.z;\n }\n\n if (legacy.rotate) {\n const hpr = Cesium.HeadingPitchRoll.fromDegrees(\n EnsureNumber(transform.heading),\n EnsureNumber(transform.pitch),\n EnsureNumber(transform.roll),\n new Cesium.HeadingPitchRoll());\n root.transform = Cesium.Transforms.headingPitchRollToFixedFrame(pos3d, hpr);\n (<any>root).updateTransform();\n }\n\n const curPos3d = getCurPos3d();\n const newTransform = Cesium.Matrix4.pack(root.transform.clone(new Cesium.Matrix4()), []);\n newTransform[12] += pos3d.x - curPos3d.x;\n newTransform[13] += pos3d.y - curPos3d.y;\n newTransform[14] += pos3d.z - curPos3d.z;\n root.transform = Cesium.Matrix4.unpack(newTransform);\n (<any>root).updateTransform();\n }\n }\n else {\n if (!location?.latitude) {\n return;\n }\n const translationMatrix = Cesium.Matrix4.fromTranslation(new Cesium.Cartesian3(\n EnsureNumber(transform.x),\n EnsureNumber(transform.y),\n EnsureNumber(transform.z)\n ), new Cesium.Matrix4());\n const pos3d = Cesium.Cartesian3.fromDegrees(\n EnsureNumber(location.longitude),\n EnsureNumber(location.latitude),\n EnsureNumber(location.altitude)\n );\n const m1 = Cesium.Transforms.eastNorthUpToFixedFrame(pos3d);\n const hpr = Cesium.HeadingPitchRoll.fromDegrees(\n EnsureNumber(transform.heading),\n EnsureNumber(transform.pitch),\n EnsureNumber(transform.roll),\n new Cesium.HeadingPitchRoll()\n );\n const hprRotation = Cesium.Matrix3.fromHeadingPitchRoll(hpr);\n const scaleMatrix = Cesium.Matrix4.fromUniformScale(EnsureNumber(transform.scale), new Cesium.Matrix4());\n\n let combinedMatrix = Cesium.Matrix4.multiply(m1, translationMatrix, new Cesium.Matrix4());\n combinedMatrix = Cesium.Matrix4.multiply(combinedMatrix, Cesium.Matrix4.fromRotation(hprRotation), new Cesium.Matrix4());\n combinedMatrix = Cesium.Matrix4.multiply(combinedMatrix, scaleMatrix, new Cesium.Matrix4());\n\n root.transform = combinedMatrix;\n\n // Force matrix to update\n (<any>root).updateTransform();\n }\n\n // Store data in the tileset as we can't interpret it using the cesium primitive later.\n const cTilesetExt = cTileset as ITilesetExt;\n cTilesetExt._bruceCoords = {\n ...position\n };\n }\n\n export function ApplySettings(params: {\n cTileset: Cesium.Cesium3DTileset,\n settings: ISettingsParams\n }): void {\n const { cTileset, settings } = params;\n cTileset.maximumScreenSpaceError = EnsureNumber(settings.maxScreenSpaceError, 5);\n cTileset.pointCloudShading.attenuation = Boolean(settings.attenuation);\n cTileset.pointCloudShading.maximumAttenuation = EnsureNumber(settings.maximumAttenuation, 4);\n if (settings.colorMask) {\n cTileset.style = new Cesium.Cesium3DTileStyle({\n color: settings.colorMask\n });\n }\n\n const cTilesetExt = cTileset as ITilesetExt;\n cTilesetExt._bruceSettings = {\n ...settings\n }\n }\n\n export async function Render(params: IParams): Promise<Cesium.Cesium3DTileset> {\n const api = params.apiGetter.getApi(params.apiGetter.accountId);\n // Ensure regional url is loaded.\n await api.Loading;\n\n let loadUrl = params.tileset.loadUrl;\n // CDN url must match the api getter account id.\n if (!params.accountId || params.accountId == params.apiGetter.accountId) {\n // CDN enabled and tileset url template is available.\n if (params.viaCdn && api.TilesetCdnUrl) {\n loadUrl = api.TilesetCdnUrl.replace(\"<TILESETID>\", params.tileset.id).replace(\"<FILEPATH>\", \"files/tileset.json\");\n // First url param reserved for accountId. This is set within the API instance.\n loadUrl += \"&generation=\" + params.tileset.generateVersion;\n }\n }\n\n if (params.tileset.type == Tileset.EType.Cad) {\n const cTileset = await createTileset(loadUrl ? loadUrl : Tileset.GetPublicFileUrl({\n api,\n tilesetId: params.tileset.id,\n file: \"tileset.json\"\n }) + \"?generation=\" + params.tileset.generateVersion, null);\n params.viewer.scene.primitives.add(cTileset);\n cTileset.readyPromise.then(() => {\n try {\n if (!isAlive(params.viewer, cTileset)) {\n return;\n }\n GetMemoryWatcher(params.viewer)?.Watch(cTileset);\n const settings = params.tileset.settings as Tileset.Settings.ICad;\n ApplySettings({\n cTileset,\n settings: {\n maxScreenSpaceError: settings.maximumScreenSpaceError\n }\n });\n ApplyPosition({\n cTileset,\n position: {\n ucs: params.coords?.ucs,\n location: params.coords?.location == null ? settings.location : params.coords.location,\n transform: params.coords?.transform == null ? settings.transform : params.coords.transform\n }\n });\n }\n catch (e) {\n console.error(e);\n }\n });\n return cTileset;\n }\n else if (params.tileset.type === Tileset.EType.EntitiesSet) {\n const cTileset = await createTileset(loadUrl ? loadUrl : Tileset.GetPublicFileUrl({\n api,\n tilesetId: params.tileset.id,\n file: \"tileset.json\"\n }) + \"?generation=\" + params.tileset.generateVersion, null);\n params.viewer.scene.primitives.add(cTileset);\n return cTileset;\n }\n else if (params.tileset.type == Tileset.EType.PointCloud) {\n const cTileset = await createTileset(loadUrl ? loadUrl : Tileset.GetPublicFileUrl({\n api,\n tilesetId: params.tileset.id,\n file: \"tileset.json\"\n }) + \"?generation=\" + params.tileset.generateVersion, null);\n params.viewer.scene.primitives.add(cTileset);\n cTileset.readyPromise.then(() => {\n try {\n if (!isAlive(params.viewer, cTileset)) {\n return;\n }\n GetMemoryWatcher(params.viewer)?.Watch(cTileset);\n const settings = params.tileset.settings as Tileset.Settings.IPointcloud;\n ApplySettings({\n cTileset,\n settings: {\n attenuation: settings.attenuation,\n maximumAttenuation: settings.attenuationMax,\n maxScreenSpaceError: settings.maximumScreenSpaceError\n }\n });\n ApplyPosition({\n cTileset,\n position: {\n location: settings.location,\n transform: settings.transform\n }\n });\n }\n catch (e) {\n console.error(e);\n }\n });\n return cTileset;\n }\n else {\n throw(\"Not implemented.\");\n }\n }\n\n export async function RenderLegacy(params: {\n apiGetter: BruceApi.IGetter,\n // With legacy we don't know if the default account id will match the apiGetter default.\n // ND-1731. 3D tileset not showing after project upgrade.\n accountId: string,\n viewer: Cesium.Viewer,\n ionId?: string | number,\n tileset?: any,\n loadUrl?: string,\n // Default false. Requires cdn base url within api to be set.\n viaCdn?: boolean\n }) {\n let { apiGetter, viewer, tileset, ionId, loadUrl, viaCdn, accountId } = params;\n\n let settings = tileset?.Settings;\n settings = {\n ...settings\n };\n let visual = settings.visual;\n visual = {\n ...visual\n };\n let etc = settings.etc;\n etc = {\n ...etc\n };\n\n if (ionId) {\n loadUrl = (await Cesium.IonResource.fromAssetId(EnsureNumber(ionId))) as any;\n }\n else if (etc?.ExternalTilesetURL) {\n loadUrl = etc.ExternalTilesetURL;\n }\n\n if (!loadUrl && tileset) {\n const api = apiGetter.getApi(accountId);\n const rootFile = tileset.RootFileName ? tileset.RootFileName : \"tileset.json\";\n loadUrl = api.GetBaseUrl() + `ui.tileset/${tileset.ID}/file/${rootFile}`;\n }\n\n if (viaCdn && tileset?.ID) {\n const api = apiGetter.getApi(accountId);\n if (api.LegacyTilesetCdnUrl) {\n const rootFile = tileset.RootFileName ? tileset.RootFileName : \"tileset.json\";\n loadUrl = api.LegacyTilesetCdnUrl\n .replace(\"<TILESETID>\", tileset.ID)\n .replace(\"<FILEPATH>\", rootFile)\n .replace(\"<ACCOUNT>\", accountId);\n }\n }\n\n const cTileset = await createTileset(loadUrl, null);\n viewer.scene.primitives.add(cTileset);\n\n cTileset.readyPromise.then(() => {\n try {\n if (!isAlive(viewer, cTileset)) {\n return;\n }\n GetMemoryWatcher(params.viewer)?.Watch(cTileset);\n if (tileset) {\n let settings = tileset.Settings;\n settings = {\n ...settings\n };\n let origin = settings.origin;\n origin = {\n ...origin\n };\n let etc = settings.etc;\n etc = {\n ...etc\n };\n let positionOffset = settings.positionOffset;\n positionOffset = {\n ...positionOffset\n };\n const rotation = settings.rotation;\n\n ApplySettings({\n cTileset,\n settings: {\n attenuation: visual.attenuation != false,\n colorMask: visual.colorMask,\n maximumAttenuation: visual.attenuationMax,\n maxScreenSpaceError: visual.maximumScreenSpaceError\n }\n });\n\n ApplyPosition({\n cTileset: cTileset,\n position: {\n transform: rotation ? {\n heading: rotation.z,\n pitch: rotation.x,\n roll: rotation.y,\n scale: 1,\n z: EnsureNumber(positionOffset?.altitude),\n x: EnsureNumber(positionOffset?.latitude),\n y: EnsureNumber(positionOffset?.longitude)\n } : null,\n location: origin?.latitude ? {\n latitude: origin.latitude,\n longitude: origin.longitude,\n altitude: origin.altitude\n } : null,\n isLegacy: true,\n legacyProps: {\n rotate: etc.dontRotate != true,\n transform: etc.dontTransform != true,\n usingBoundingBox: etc.usingBoundingBox != false\n }\n }\n });\n }\n }\n catch (e) {\n console.error(e);\n }\n });\n return cTileset;\n }\n\n export class Styler {\n private api: BruceApi.Api;\n\n private disposed: boolean = false;\n public get Disposed(): boolean {\n return this.disposed;\n }\n\n private register: VisualsRegister.Register;\n private menuItemId: string;\n\n private cTileset: Cesium.Cesium3DTileset;\n private styleMapping: {\n EntityTypeID: string,\n StyleID: number,\n style: Style.IStyle\n }[];\n private styleMappingLoaded: boolean = false;\n private styleMappingsLoaded: IDictionary<boolean> = {};\n private fallbackStyleId: number;\n private fallbackStyle: Style.IStyle = <any>null;\n\n private runningQueues: number = 0;\n private queueLoadInterval: any;\n private recordLoadQueue: string[] = [];\n private recordCheckQueue: string[] = [];\n private queueCheckInterval: any;\n\n\n constructor(\n api: BruceApi.Api,\n cTileset: Cesium.Cesium3DTileset,\n fallbackStyleId: number,\n styleMapping: any[],\n menuItemId: string,\n register: VisualsRegister.Register,\n ) {\n this.api = api;\n this.cTileset = cTileset;\n this.fallbackStyleId = fallbackStyleId;\n this.styleMapping = styleMapping;\n\n // ND-1641. BOOKMARKS - (DEMO) View does not match bookmark.\n // We have some evil hard-coded style mappings that need to be fixed.\n // These exist within legacy project views.\n if (this.styleMapping?.length) {\n for (let i = 0; i < this.styleMapping.length; i++) {\n const mapItem = this.styleMapping[i];\n this.styleMapping[i].style = correctStyle(mapItem?.style);\n }\n }\n\n this.register = register;\n this.menuItemId = menuItemId;\n this.loadStyles();\n }\n\n public QueueEntities(entities: VisualsRegister.IVisualRego[]): void {\n for (let i = 0; i < entities.length; i++) {\n const entity = entities[i];\n this.queueTilesetFeatureStyle(entity);\n }\n if (this.recordLoadQueue.length > 0) {\n this.processQueue();\n }\n }\n\n private async processQueue(): Promise<void> {\n const MAX_BATCHES = 2;\n const BATCH_DELAY = 200;\n\n if (this.runningQueues >= MAX_BATCHES) {\n return;\n }\n else if (this.disposed) {\n return;\n }\n this.runningQueues += 1;\n\n let batch: string[] = [];\n let rerun: boolean = false;\n try {\n batch = this.getEntityIdsForQueue();\n\n if (batch.length > 0) {\n const {entities} = await Entity.GetListByIds({\n api: this.api,\n entityIds: batch\n });\n for (let i = 0; i < batch.length; i++) {\n const entityId = batch[i];\n const record = entities.find(e => e.Bruce?.ID == entityId);\n const feature = this.getEntityRego(entityId);\n if (feature) {\n this.styleTilesetFeatureFullData(feature, record);\n }\n }\n rerun = batch.length > 0;\n }\n }\n finally {\n setTimeout(() => {\n this.runningQueues -= 1;\n if (rerun) {\n this.processQueue();\n }\n }, BATCH_DELAY);\n }\n }\n\n private getEntityIdsForQueue(): string[] {\n const BATCH_SIZE = 30;\n return this.recordLoadQueue.splice(0, BATCH_SIZE);\n }\n\n private getEntityRego(entityId: string): VisualsRegister.IVisualRego {\n return this.register.GetRego({\n entityId,\n menuItemId: this.menuItemId\n })\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n clearInterval(this.queueLoadInterval);\n clearInterval(this.queueCheckInterval);\n }\n\n private async loadStyles(): Promise<void> {\n let fallbackStyleId = this.fallbackStyleId;\n if (fallbackStyleId && fallbackStyleId > 0) {\n try {\n let {style: data} = await Style.Get({\n api: this.api,\n styleId: fallbackStyleId\n });\n this.fallbackStyle = data;\n }\n catch (e) {\n console.error(e);\n }\n }\n\n // Load styles in the style mapping\n let styleMapping = this.styleMapping;\n if (!styleMapping) {\n styleMapping = [];\n }\n this.styleMapping = styleMapping;\n\n // It is default style.\n // We have to get all possible entity type ids and append them to mapping.\n if (!fallbackStyleId) {\n try {\n const modelTree = this.cTileset?.extensions?.modelTree;\n if (modelTree) {\n const entityTypeIds = this.getEntityTypeIdsFromModelTree(modelTree);\n for (let i = 0; i < entityTypeIds.length; i++) {\n const entityTypeId = entityTypeIds[i];\n if (styleMapping.findIndex(x => x.EntityTypeID == entityTypeId) <= -1) {\n styleMapping.push({\n EntityTypeID: entityTypeId,\n StyleID: null,\n style: <any>null\n });\n }\n }\n }\n }\n catch (e) {\n console.error(e);\n }\n }\n\n for (let i = 0; i < styleMapping.length; i++) {\n if (this.disposed) {\n break;\n }\n\n let styleMap = styleMapping[i];\n if (!styleMap.style) {\n let styleId = styleMap.StyleID;\n\n // Get default style of the entity type.\n if (!styleId) {\n try {\n let {entityType} = await EntityType.Get({\n api: this.api,\n entityTypeId: styleMap.EntityTypeID\n });\n styleId = entityType?.[\"DisplaySetting.ID\"];\n }\n catch (e) {\n console.error(e);\n }\n }\n\n if (styleId) {\n try {\n let {style: data} = await Style.Get({\n api: this.api,\n styleId\n });\n if (data) {\n styleMap.style = data;\n styleMap.StyleID = styleId;\n }\n }\n catch (e) {\n console.error(e);\n }\n }\n }\n\n if (styleMap.EntityTypeID && styleMap.style) {\n this.styleMappingsLoaded[styleMap.EntityTypeID] = true;\n this.processTilesetFeatureCheckQueue();\n this.processQueue();\n }\n }\n this.styleMappingLoaded = true;\n\n if (!this.disposed) {\n await this.processTilesetFeatureCheckQueue();\n this.processQueue();\n }\n }\n\n private getEntityTypeIdsFromModelTree(modelTree: any): string[] {\n const entityTypeIds: string[] = [];\n this.digEntityTypeIdsFromModelTreeBranch(modelTree, entityTypeIds);\n return entityTypeIds;\n }\n\n private digEntityTypeIdsFromModelTreeBranch(branch: any, arr: string[]): void {\n if (branch) {\n // Does not yet include this entity type id.\n if (branch.typeId && !arr.includes(branch.typeId)) {\n arr.push(branch.typeId);\n }\n\n if (branch.children) {\n for (let i = 0; i < branch.children.length; i++) {\n let child = branch.children[i];\n this.digEntityTypeIdsFromModelTreeBranch(child, arr);\n }\n }\n }\n }\n\n private async processTilesetFeatureCheckQueue(): Promise<void> {\n const BATCH_CHECK_SIZE = 1000;\n\n return new Promise((res) => {\n clearInterval(this.queueCheckInterval);\n this.queueCheckInterval = setInterval(() => {\n if (this.disposed) {\n clearInterval(this.queueCheckInterval);\n res();\n return;\n }\n\n // Construct batch for loaded styles.\n let batch = [];\n\n if (this.styleMappingLoaded) {\n batch = this.recordCheckQueue.splice(0, BATCH_CHECK_SIZE);\n }\n else {\n for (let i = 0; i < this.recordCheckQueue.length; i++) {\n let entityId = this.recordCheckQueue[i];\n let entity = this.getEntityRego(entityId);\n if (entity) {\n let entityTypeId = entity.entityTypeId;\n if (entityTypeId) {\n if (this.styleMappingsLoaded[entityTypeId] == true) {\n batch.push(entityId);\n }\n }\n }\n\n if (batch.length >= BATCH_CHECK_SIZE) {\n break;\n }\n }\n\n for (let i = 0; i < batch.length; i++) {\n let hash = batch[i];\n let index = this.recordCheckQueue.findIndex(x => x == hash);\n if (index > -1) {\n this.recordCheckQueue.splice(index, 1);\n }\n }\n }\n\n if (batch.length) {\n for (let i = 0; i < batch.length; i++) {\n let entityId = batch[i];\n let entity = this.getEntityRego(entityId);\n if (entity) {\n this.queueTilesetFeatureStyle(entity);\n }\n }\n }\n else {\n clearInterval(this.queueCheckInterval);\n res();\n }\n }, 50);\n });\n }\n\n private queueTilesetFeatureStyle(entity: VisualsRegister.IVisualRego): void {\n if (this.styleMappingLoaded || this.styleMappingsLoaded[<string>entity.entityTypeId] == true) {\n const needsData = this.getTilesetFeatureNeedsFullData(entity.entityId, <string>entity.entityTypeId);\n if (needsData) {\n if (!this.recordLoadQueue.find(x => x == entity.entityId)) {\n this.recordLoadQueue.push(entity.entityId);\n }\n }\n else {\n this.styleTilesetFeature(entity);\n }\n }\n else {\n this.recordCheckQueue.push(entity.entityId);\n }\n }\n\n private styleTilesetFeature(entity: VisualsRegister.IVisualRego): void {\n this.styleTilesetFeatureFullData(entity, <any>null);\n }\n\n private styleTilesetFeatureFullData(entity: VisualsRegister.IVisualRego, data: Entity.IEntity): void {\n const style = <Style.IEntitySettings>this.getTilesetFeatureStyle(entity.entityId, <string>entity.entityTypeId);\n if (!style) {\n return;\n }\n const bColor = style.modelStyle?.fillColor ? Calculator.GetColor(style.modelStyle.fillColor, data, []) : null;\n if (bColor != null) {\n const cColor = colorToCColor(bColor);\n const visual = entity.visual;\n if (visual && visual instanceof Cesium.Cesium3DTileFeature) {\n visual.color = cColor;\n }\n }\n }\n\n private getTilesetFeatureStyle(entityId: string, entityTypeId: string): Style.IEntitySettings {\n // Locate what style is applicable to the feature.\n let style: Style.IEntitySettings = null;\n if (entityTypeId) {\n style = (this.styleMapping.find(x => x.EntityTypeID == entityTypeId)?.style?.Settings) as Style.IEntitySettings;\n }\n if (!style) {\n style = (this.fallbackStyle?.Settings) as Style.IEntitySettings;\n }\n if (!style || !style?.modelStyle?.customize) {\n return null;\n }\n return style;\n }\n\n private getTilesetFeatureNeedsFullData(entityId: string, entityTypeId: string): boolean {\n const style = this.getTilesetFeatureStyle(entityId, entityTypeId);\n if (!style) {\n return false;\n }\n const fill = style?.modelStyle?.fillColor;\n if (!fill || fill.length <= 0) {\n return false;\n }\n return fill[0].type != 0;\n }\n }\n\n /**\n * The maximum memory in MB that can be used by all tilesets.\n * This is distributed evenly between all loaded tilesets.\n */\n export let MAX_TILESET_MEMORY = 1024;\n\n /**\n * Watches tilesets in the viewer.\n * This will regulate their max memory param.\n * As more get watched their memory will be reduced.\n */\n export class MemoryWatcher {\n private viewer: Cesium.Viewer;\n private watched: IWatchedTileset[] = [];\n\n constructor(viewer: Cesium.Viewer) {\n this.viewer = viewer;\n }\n\n private distributeMemory() {\n this.clean();\n\n // Total 1gb as default.\n // We'll need to allow user to change this somehow.\n const maxMemory = MAX_TILESET_MEMORY;\n // Minimum memory in MB per tileset.\n const minMemory = 80;\n\n const totalPerTileset = Math.max(this.watched.length ? maxMemory / this.watched.length : maxMemory, minMemory);\n this.watched.forEach(x => {\n x.maximumMemoryUsage = totalPerTileset;\n });\n }\n\n public destroy() {\n this.watched = [];\n }\n\n /**\n * Remove all dead tilesets.\n */\n private clean() {\n // Remove all dead tilesets.\n this.watched = this.watched.filter(x => isAlive(this.viewer, x));\n // Check if viewer is destroyed.\n if (!this.viewer || this.viewer.isDestroyed()) {\n this.destroy();\n }\n }\n\n public Watch(tileset: IWatchedTileset) {\n if (!tileset) {\n return;\n }\n if (!tileset[WATCH_KEY]) {\n tileset[WATCH_KEY] = ObjectUtils.UId();\n }\n const index = this.watched.findIndex(x => x[WATCH_KEY] === tileset[WATCH_KEY]);\n if (index >= 0) {\n return;\n }\n this.watched.push(tileset);\n this.distributeMemory();\n }\n\n public Unwatch(tileset: IWatchedTileset) {\n if (!tileset) {\n return;\n }\n if (!tileset[WATCH_KEY]) {\n tileset[WATCH_KEY] = ObjectUtils.UId();\n }\n const index = this.watched.findIndex(x => x?.[WATCH_KEY] === tileset[WATCH_KEY]);\n if (index > -1) {\n this.watched.splice(index, 1);\n }\n this.distributeMemory();\n }\n }\n\n export function GetMemoryWatcher(viewer: Cesium.Viewer): MemoryWatcher {\n // If viewer is dead return nothing.\n if (!viewer || viewer.isDestroyed()) {\n return null;\n }\n if (!viewer[VIEWER_WATCH_KEY]) {\n viewer[VIEWER_WATCH_KEY] = new MemoryWatcher(viewer);\n }\n return viewer[VIEWER_WATCH_KEY]; \n }\n}","import { BruceApi, EntityCoords, MenuItem, Tileset } from \"bruce-models\";\nimport { VisualsRegister } from \"../../visuals-register\";\nimport { RenderManager } from \"../render-manager\";\nimport * as Cesium from \"cesium\";\nimport { TilesetRenderEngine } from \"../../tileset-render-engine\";\nimport { EnsureNumber } from \"../../../internal/js-utils\";\n\n/**\n * Manager for rendering CAD tilesets.\n * CAD tilesets are referred to as \"MODEL\" tilesets in some other areas of Bruce code.\n */\nexport namespace TilesetCadRenderManager {\n export class Manager implements RenderManager.IManager {\n private viewer: Cesium.Viewer;\n private apiGetter: BruceApi.IGetter;\n private item: MenuItem.Item.ICadTileset;\n private disposed: boolean = false;\n public get Disposed(): boolean {\n return this.disposed;\n }\n private visualsManager: VisualsRegister.Register;\n private cTileset: Cesium.Cesium3DTileset = <any>null;\n public get Tileset(): Cesium.Cesium3DTileset {\n return this.cTileset;\n }\n private styler: TilesetRenderEngine.Styler = <any>null;\n // Indicates the hierarchy depth limit has been hit.\n // This likely means poor data so we have to disable drilling otherwise lag would be too bad.\n // The result is no entity type IDs are known so most styles fail.\n private hasHitDepthLimit = false;\n private rootId: string;\n\n constructor(params: {\n viewer: Cesium.Viewer,\n register: VisualsRegister.Register,\n apiGetter: BruceApi.IGetter,\n item: MenuItem.Item.ICadTileset\n }) {\n const { viewer, register: visualsManager, apiGetter, item } = params;\n this.viewer = viewer;\n this.apiGetter = apiGetter;\n this.item = item;\n this.visualsManager = visualsManager;\n }\n\n public Init() {\n const tilesetId = this.item.tileset?.TilesetID;\n if (!tilesetId) {\n return;\n }\n\n (async () => {\n const api = this.apiGetter.getApi();\n const {tileset} = await Tileset.Get({\n api,\n tilesetId\n });\n if (!tileset || this.disposed) {\n return;\n }\n\n const settings = <Tileset.Settings.ICad>tileset.settings;\n const rootId = settings.rootEntityId;\n this.rootId = rootId;\n const {coords} = await EntityCoords.GetEntityCoords({\n api,\n rootEntityId: rootId\n });\n if (this.disposed) {\n return;\n }\n\n const cTileset = this.cTileset = await TilesetRenderEngine.Render({\n apiGetter: this.apiGetter,\n tileset: tileset,\n viewer: this.viewer,\n coords: coords,\n accountId: this.item.tileset?.ClientAccountID ?? this.apiGetter.accountId,\n viaCdn: this.item.cdnEnabled\n });\n\n if (this.disposed) {\n this.doDispose();\n return;\n }\n\n cTileset.readyPromise.then(() => {\n try {\n if (this.disposed || cTileset.isDestroyed()) {\n return;\n }\n\n this.onCTilesetLoad();\n this.styler = new TilesetRenderEngine.Styler(\n api, this.cTileset,\n <number>this.item.styleId,\n <any[]>this.item.StyleMapping,\n this.item.id,\n this.visualsManager\n );\n }\n catch (e) {\n console.error(e);\n }\n });\n cTileset.tileLoad.addEventListener((tile) => {\n try {\n this.mapCTile(tile);\n }\n catch (e) {\n console.error(e);\n }\n });\n })();\n }\n\n private onCTilesetLoad(): void {\n if (this.item.StyleBlending) {\n let blending = this.item.StyleBlending;\n this.cTileset.colorBlendMode = EnsureNumber(blending?.blendMode, Cesium.Cesium3DTileColorBlendMode.MIX);\n this.cTileset.colorBlendAmount = EnsureNumber(blending?.blendPercent, 0.9);\n }\n if (this.item.FlyTo) {\n this.viewer.zoomTo(\n this.cTileset,\n new Cesium.HeadingPitchRange(0.0, -0.5, this.cTileset.boundingSphere.radius / 4.0)\n );\n }\n }\n\n private mapCTile(tile: Cesium.Cesium3DTile): void {\n const content = tile?.content;\n if (!content) {\n return;\n }\n for (let i = 0; i < content.featuresLength; i++) {\n const feature = content.getFeature(i);\n\n let rego = this.mapTilesetFeature(feature);\n if (rego?.entityId && this.styler) {\n this.styler.QueueEntities([rego]);\n }\n }\n }\n\n private mapTilesetFeature(feature: Cesium.Cesium3DTileFeature): VisualsRegister.IVisualRego {\n let rego: VisualsRegister.IVisualRego = {\n entityId: <any>null,\n entityTypeId: <any>null,\n menuItemId: this.item.id,\n priority: 0,\n visual: feature,\n accountId: this.item.tileset?.ClientAccountID ?? this.apiGetter.accountId,\n tilesetId: this.item.tileset?.TilesetID,\n rootId: this.rootId\n };\n\n const featureAny = feature as any;\n const propertyNames = featureAny.getPropertyNames ? featureAny.getPropertyNames() : featureAny.getPropertyIds?.();\n if (!propertyNames) {\n return null;\n }\n\n const setByGeomId = () => {\n const geomIdProp = propertyNames.find(x => String(x).toLowerCase() == \"geomid\");\n if (geomIdProp) {\n const geomId = +feature.getProperty(geomIdProp);\n if (geomId != null && (!!geomId || geomId == 0)) {\n const meta = this.getMetaByGeomId(geomId, feature.tileset);\n if (meta) {\n rego.entityId = meta.id;\n rego.entityTypeId = meta.typeId;\n }\n }\n }\n }\n const setByEntityId = () => {\n const bruceIdProp = propertyNames.find(x => String(x).toLowerCase() == \"bruceid\");\n if (bruceIdProp) {\n rego.entityId = feature.getProperty(bruceIdProp);\n }\n }\n const setByPath = () => {\n const brucePathProp = propertyNames.find(x => String(x).toLowerCase() == \"brucepath\");\n if (brucePathProp) {\n const pathStr = feature.getProperty(brucePathProp);\n if (pathStr) {\n let path = pathStr.split(\"|\");\n let entityTypeId = this.getEntityTypeByPath(path);\n rego.entityTypeId = entityTypeId;\n rego.entityId = path[path.length - 1];\n }\n }\n }\n\n setByGeomId();\n if (!rego.entityId) {\n setByEntityId();\n }\n if (!rego.entityId) {\n setByPath();\n }\n if (!rego.entityId) {\n return null;\n }\n // Optional menu item restriction.\n // Allows only showing certain entities from a tileset.\n const onlyIds = this.item.BruceEntity?.EntityIds;\n if (onlyIds?.length && !onlyIds.includes(rego.entityId)) {\n if (this.item.BruceEntity.Ghosts) {\n feature.color = Cesium.Color.WHITE.clone().withAlpha(0.5);\n }\n else {\n feature.show = false;\n }\n return null;\n }\n\n this.visualsManager.AddRego({\n rego\n });\n return rego;\n }\n\n private getMetaByGeomId(geomId: number, tileset: Cesium.Cesium3DTileset): { id: string, typeId: string } {\n let modelTree: any = tileset?.extensions?.modelTree;\n return this.digMetaByGeomId(geomId, modelTree, [], 0);\n }\n\n private digMetaByGeomId(\n geomId: number,\n branch: any,\n path: string[],\n depth: number\n ): { id: string, typeId: string } {\n if (this.hasHitDepthLimit || depth > 10) {\n if (!this.hasHitDepthLimit) {\n console.error(\"digMetaByGeomId: depth > 10. Disabling further attempts.\");\n this.hasHitDepthLimit = true;\n }\n return null;\n }\n path = [].concat(path);\n path.push(branch.id);\n if (branch.geomId == geomId) {\n return { id: path[path.length - 1], typeId: branch.typeId };\n }\n else if (branch.children) {\n for (let i = 0; i < branch.children.length; i++) {\n let meta = this.digMetaByGeomId(geomId, branch.children[i], path, depth + 1);\n if (meta) {\n return meta;\n }\n }\n }\n return null;\n }\n\n private getEntityTypeByPath(path: string[]): string {\n let modelTree: any = this.cTileset?.extensions?.modelTree;\n if (modelTree) {\n let data = this.digModelTreeByPath(modelTree, path);\n if (data) {\n return data.typeId;\n }\n }\n return <any>null;\n }\n\n private digModelTreeByPath(branch: any, path: string[]): any {\n // Dereference.\n path = JSON.parse(JSON.stringify(path));\n\n if (path.length <= 0) {\n return null;\n }\n let pathTop = path.splice(0, 1)[0];\n if (pathTop != branch.id) {\n return null;\n }\n else if (path.length == 0 && pathTop == branch.id) {\n return branch;\n }\n else if (branch.children) {\n for (let i = 0; i < branch.children.length; i++) {\n let foundPath = this.digModelTreeByPath(branch.children[i], path);\n if (foundPath) {\n return foundPath;\n }\n }\n }\n return null;\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n this.doDispose();\n }\n\n private doDispose() {\n if (this.cTileset) {\n const viewer = this.viewer;\n if (!viewer?.isDestroyed() && this.viewer.scene.primitives.contains(this.cTileset)) {\n this.cTileset.show = false;\n this.viewer.scene.primitives.remove(this.cTileset);\n TilesetRenderEngine.GetMemoryWatcher(viewer)?.Unwatch(this.cTileset);\n }\n this.cTileset = null;\n }\n this.styler?.Dispose();\n this.visualsManager.RemoveRegos({\n menuItemId: this.item.id\n });\n }\n\n public async ReRender(params: {\n entityIds?: string[],\n force?: boolean\n }) {\n const { entityIds, force } = params;\n if (!this.styler) {\n return;\n }\n let regos: VisualsRegister.IVisualRego[] = this.visualsManager.GetRegos({\n menuItemId: this.item.id\n });\n if (entityIds != null) {\n regos = regos.filter(r => entityIds.indexOf(r.entityId) >= 0);\n }\n this.styler.QueueEntities(regos);\n }\n }\n}","import { Entity, EntityFilterGetter } from \"bruce-models\";\nimport { BruceApi } from \"bruce-models/dist/types/api/bruce-api\";\nimport { IDictionary } from \"bruce-models/dist/types/common/dictionary\";\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\nimport * as Cesium from \"cesium\";\n\nfunction createFilterGetterCacheKey(params: SharedGetters.IFilterGetterParams): string {\n let cacheKey = \"\";\n cacheKey += params.api.GetBaseUrl();\n cacheKey += params.typeId;\n cacheKey += params.batchSize;\n cacheKey += String(params.cdn);\n // This could potentially crash, but if it crashes here then it would crash during API request anyways.\n cacheKey += JSON.stringify(params.attrFilter ? params.attrFilter : {});\n return cacheKey;\n}\n\nexport namespace SharedGetters {\n export interface IFilterGetterParams {\n api: BruceApi.Api;\n typeId: string;\n batchSize: number;\n attrFilter: IDictionary<string>;\n monitor: CesiumViewMonitor;\n // Debug options.\n viewer?: Cesium.Viewer;\n debugShowBounds?: boolean;\n cdn?: boolean;\n }\n\n export class Cache {\n private data: IDictionary<EntityFilterGetter.Getter> = {};\n\n public GetOrCreateFilterGetter(params: IFilterGetterParams): EntityFilterGetter.Getter {\n params.cdn = Boolean(params.cdn);\n const cacheKey = createFilterGetterCacheKey(params);\n let getter = this.data[cacheKey];\n if (!getter) {\n getter = new EntityFilterGetter.Getter(\n params.api,\n params.monitor,\n params.typeId,\n params.batchSize,\n params.attrFilter,\n params.cdn\n );\n this.data[cacheKey] = getter;\n if (params.viewer && params.debugShowBounds) {\n // Cell id -> entity.\n const cellCache = {};\n getter.OnScanUpdate.Subscribe((cells) => {\n if ((window as any).ON_SCAN_UPDATE_PAUSED == true) {\n return;\n }\n const curCellIds = [];\n let fetchingCellId = null;\n const fetchedCells = {};\n cells.forEach((cell) => {\n const bounds = cell.GetBounds();\n const id = bounds.east + \"_\" + bounds.north + \"_\" + bounds.south + \"_\" + bounds.west;\n curCellIds.push(id);\n fetchedCells[id] = cell.IsFetched();\n fetchingCellId = (cell as any).Fetching ? id : fetchingCellId;\n\n let material = null;\n if (fetchedCells[id]) {\n material = Cesium.Color.LIGHTGREEN.clone().withAlpha(0.3);\n }\n else if (fetchingCellId == id) {\n material = Cesium.Color.LIGHTBLUE.clone().withAlpha(0.3);\n }\n else {\n material = Cesium.Color.GOLD.clone().withAlpha(0.3);\n }\n\n if (cellCache[id]) {\n const rect = cellCache[id]?.rectangle;\n if (rect) {\n rect.material = material;\n }\n return;\n }\n const rect = new Cesium.Rectangle(\n Cesium.Math.toRadians(bounds.west),\n Cesium.Math.toRadians(bounds.south),\n Cesium.Math.toRadians(bounds.east),\n Cesium.Math.toRadians(bounds.north)\n );\n const entity = params.viewer.entities.add(new Cesium.Entity({\n id: id,\n rectangle: {\n coordinates: rect,\n fill: true,\n //material: Cesium.Color.fromRandom().withAlpha(0.3),\n material: material,\n zIndex: 0\n },\n // point: {\n // pixelSize: 15,\n // outlineColor: Cesium.Color.WHITE,\n // outlineWidth: 2,\n // color: Cesium.Color.fromRandom().withAlpha(0.5),\n // heightReference: Cesium.HeightReference.CLAMP_TO_GROUND\n // },\n position: Cesium.Cartesian3.fromRadians(\n (rect.east + rect.west) / 2,\n (rect.north + rect.south) / 2\n )\n }));\n cellCache[id] = entity;\n });\n Object.keys(cellCache).forEach((id) => {\n if (curCellIds.indexOf(id) == -1) {\n const entity = cellCache[id];\n if (entity && params.viewer.entities.contains(entity)) {\n params.viewer.entities.remove(entity);\n }\n delete cellCache[id];\n }\n });\n });\n }\n }\n return getter;\n }\n }\n}","import { BruceApi, Cartes, EntitySource, IDictionary, MenuItem, ObjectUtils } from \"bruce-models\";\nimport { VisualsRegister } from \"../../visuals-register\";\nimport { RenderManager } from \"../render-manager\";\nimport * as Cesium from \"cesium\";\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\n\ninterface ICesiumFeatureExtended extends Cesium.Cesium3DTileFeature {\n _orgColor: Cesium.Color;\n _counter: number;\n}\n\nconst MAX_BATCHES = 2;\nconst BATCH_SIZE = 30;\nconst BATCH_DELAY = 200;\nconst MAX_RANGE = 3000;\n\nexport namespace TilesetOsmRenderManager {\n export class Manager implements RenderManager.IManager {\n private viewer: Cesium.Viewer;\n private apiGetter: BruceApi.IGetter;\n private item: MenuItem.Item.IOsm;\n private monitor: CesiumViewMonitor;\n private disposed: boolean = false;\n public get Disposed(): boolean {\n return this.disposed;\n }\n private visualsManager: VisualsRegister.Register;\n private cTileset: Cesium.Cesium3DTileset = <any>null;\n public get Tileset(): Cesium.Cesium3DTileset {\n return this.cTileset;\n }\n\n private counter: number = 0;\n private get count(): number {\n return ++this.counter;\n }\n\n private _loadedCesiumEntities: IDictionary<VisualsRegister.IVisualRego> = {};\n private totalLoaded: number = 0;\n private featureQueue: ICesiumFeatureExtended[] = [];\n private sourceId: number = <any>null;\n private entityTypeId: string = <any>null;\n private queueCheckInterval: any = null;\n private processingQueue: number = 0;\n\n\n constructor(params: {\n viewer: Cesium.Viewer,\n register: VisualsRegister.Register,\n apiGetter: BruceApi.IGetter,\n monitor: CesiumViewMonitor,\n item: MenuItem.Item.IOsm\n }) {\n const { viewer, register: visualsManager, apiGetter, monitor, item } = params;\n this.viewer = viewer;\n this.apiGetter = apiGetter;\n this.item = item;\n this.visualsManager = visualsManager;\n this.monitor = monitor;\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n clearInterval(this.queueCheckInterval);\n if (this.cTileset) {\n const viewer = this.viewer;\n if (!viewer?.isDestroyed() && this.viewer.scene.primitives.contains(this.cTileset)) {\n this.cTileset.show = false;\n this.viewer.scene.primitives.remove(this.cTileset);\n }\n this.cTileset = null;\n }\n this.visualsManager.RemoveRegos({\n menuItemId: this.item.id\n });\n this.featureQueue = [];\n }\n\n public Init() {\n const menuItem = this.item;\n this.sourceId = <number><any>menuItem.BruceEntity?.SourceId;\n this.entityTypeId = <string>menuItem.BruceEntity?.[\"EntityType.ID\"];\n\n this.cTileset = Cesium.createOsmBuildings();\n this.cTileset.show = true;\n\n if (this.sourceId) {\n if (menuItem.ghostLoading == true) {\n this.cTileset.style = new Cesium.Cesium3DTileStyle({\n color: \"rgba(255, 255, 250, 0.98)\"\n });\n }\n\n this.viewer.scene.primitives.add(this.cTileset);\n this.cTileset.tileLoad.addEventListener((tile) => {\n try {\n this.mapCTile(tile);\n }\n catch (e) {\n console.error(e);\n }\n });\n\n this.queueCheckInterval = setInterval(() => {\n if (this.featureQueue.length > 0) {\n this.processQueue();\n }\n }, 5000);\n }\n else {\n this.viewer.scene.primitives.add(this.cTileset);\n }\n }\n\n private async mapCTile(tile: Cesium.Cesium3DTile): Promise<void> {\n if (this.sourceId) {\n let content = tile?.content;\n if (!content) {\n return;\n }\n for (let i = 0; i < content.featuresLength; i++) {\n let feature: ICesiumFeatureExtended = <ICesiumFeatureExtended>content.getFeature(i);\n if (feature._counter == null) {\n feature._counter = this.count;\n }\n if (feature._orgColor == null) {\n feature._orgColor = feature.color;\n }\n this.featureQueue.push(feature);\n }\n this.processQueue();\n }\n }\n\n private async processQueue(): Promise<void> {\n if (this.processingQueue >= MAX_BATCHES) {\n return;\n }\n else if (this.Disposed) {\n return;\n }\n this.processingQueue += 1;\n\n let batch: ICesiumFeatureExtended[] = [];\n let rerun: boolean = false;\n\n try {\n batch = this.getVisualsForBatch();\n\n if (batch.length > 0) {\n await this.mapTileBatch(batch);\n }\n\n if (this.totalLoaded > 8000) {\n rerun = this.removeFarAwayBatch();\n }\n else {\n rerun = this.featureQueue.length > 0 && batch.length > 0;\n }\n }\n catch (e) {\n console.error(e);\n }\n finally {\n setTimeout(() => {\n this.processingQueue -= 1;\n if (rerun) {\n this.processQueue();\n }\n }, BATCH_DELAY);\n }\n }\n\n private getVisualsForBatch(): ICesiumFeatureExtended[] {\n const batch: ICesiumFeatureExtended[] = [];\n const features = this.featureQueue;\n const bounds = this.monitor.GetBounds();\n const rect = bounds?.east ? new Cesium.Rectangle(\n Cesium.Math.toRadians(bounds.west),\n Cesium.Math.toRadians(bounds.south),\n Cesium.Math.toRadians(bounds.east),\n Cesium.Math.toRadians(bounds.north)\n ) : null;\n\n if (rect) {\n for (let i = 0; i < features.length; i++) {\n const feature = features[i];\n if (feature) {\n const featureLon = feature.getProperty(\"cesium#longitude\");\n const featureLat = feature.getProperty(\"cesium#latitude\");\n if (featureLon && featureLat) {\n const carto = Cesium.Cartographic.fromDegrees(featureLon, featureLat, 0);\n const isIn = Cesium.Rectangle.contains(rect, carto);\n if (isIn) {\n const isClose = this.getIsVisualWithinRange(feature, MAX_RANGE);\n if (isClose) {\n batch.push(feature);\n if (batch.length >= BATCH_SIZE) {\n return batch;\n }\n }\n }\n }\n }\n }\n }\n return batch;\n }\n\n private getIsVisualWithinRange(visual: ICesiumFeatureExtended, range: number): boolean {\n const featureLon = visual.getProperty(\"cesium#longitude\");\n const featureLat = visual.getProperty(\"cesium#latitude\");\n if (featureLon && featureLat) {\n const pos = Cesium.Cartesian3.fromDegrees(featureLon, featureLat, 0);\n const camPoint = this.monitor.GetTarget();\n const camPos = camPoint?.latitude ? Cesium.Cartesian3.fromDegrees(camPoint.longitude, camPoint.latitude, camPoint.altitude) : null;\n if (camPos && Cartes.ValidateCartes3(camPos) && Cartes.ValidateCartes3(pos)) {\n let distance = Cesium.Cartesian3.distance(pos, camPos);\n if (distance != null && distance <= range) {\n return true;\n }\n }\n }\n return false;\n }\n\n private async mapTileBatch(features: ICesiumFeatureExtended[]): Promise<void> {\n const featureIds: string[] = [];\n const featureMap: ICesiumFeatureExtended[] = [];\n\n for (let i = 0; i < features.length; i++) {\n const feature = features[i];\n const featureId = feature.getProperty(\"elementId\");\n if (featureId) {\n featureMap.push(feature);\n featureIds.push(featureId + \"\");\n }\n\n const index = this.featureQueue.findIndex(x => x._counter == feature._counter);\n if (index > -1) {\n this.featureQueue.splice(index, 1);\n }\n }\n\n const api = this.apiGetter.getApi();\n const {idMapping: bIds} = await EntitySource.GetEntityIdsBySourceKeys({\n api,\n sourceId: this.sourceId,\n sourceKeys: featureIds\n });\n\n for (let i = 0; i < featureIds.length; i++) {\n const osmId = featureIds[i];\n let bruceId = bIds[osmId];\n if (!bruceId) {\n bruceId = ObjectUtils.UId();\n }\n const feature = featureMap[i];\n if (this.item.ghostLoading == true) {\n feature.color = feature._orgColor;\n }\n const rego = {\n entityId: bruceId,\n menuItemId: this.item.id,\n priority: 0,\n visual: feature,\n entityTypeId: this.entityTypeId,\n sourceId: this.sourceId,\n sourceEntityId: osmId,\n accountId: this.apiGetter.accountId\n } as VisualsRegister.IVisualRego;\n this.visualsManager.AddRego({\n rego\n });\n this._loadedCesiumEntities[bruceId] = rego;\n }\n }\n\n private removeFarAwayBatch(): boolean {\n let removed = 0;\n let keys = Object.keys(this._loadedCesiumEntities);\n for (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n let rego = this._loadedCesiumEntities[key];\n if (rego) {\n if (!this.getIsVisualWithinRange(rego.visual as ICesiumFeatureExtended, MAX_RANGE)) {\n this.visualsManager.RemoveRegos({\n entityId: rego.entityId,\n menuItemId: this.item.id\n });\n this._loadedCesiumEntities[key] = <any>null;\n delete this._loadedCesiumEntities[key];\n this.totalLoaded -= 1;\n removed += 1;\n\n if (removed >= BATCH_SIZE) {\n return true;\n }\n }\n }\n }\n\n return removed > 0;\n }\n\n public async ReRender(params: {\n entityIds?: string[],\n force?: boolean\n }) {\n const {entityIds, force} = params;\n if (entityIds == null) {\n\n }\n else {\n\n }\n }\n }\n}","import { BruceApi, MenuItem, Tileset } from \"bruce-models\";\nimport { VisualsRegister } from \"../../visuals-register\";\nimport { RenderManager } from \"../render-manager\";\nimport * as Cesium from \"cesium\";\nimport { TilesetRenderEngine } from \"../../tileset-render-engine\";\n\nexport namespace TilesetEntitiesRenderManager {\n export class Manager implements RenderManager.IManager {\n private viewer: Cesium.Viewer;\n private apiGetter: BruceApi.IGetter;\n private item: MenuItem.Item.ICadTileset;\n private disposed: boolean = false;\n public get Disposed(): boolean {\n return this.disposed;\n }\n private visualsManager: VisualsRegister.Register;\n private cTileset: Cesium.Cesium3DTileset = <any>null;\n public get Tileset(): Cesium.Cesium3DTileset {\n return this.cTileset;\n }\n private typeId: string;\n\n constructor(params: {\n viewer: Cesium.Viewer,\n register: VisualsRegister.Register,\n apiGetter: BruceApi.IGetter,\n item: MenuItem.Item.ICadTileset\n }) {\n const { viewer, register: visualsManager, apiGetter, item } = params;\n this.viewer = viewer;\n this.apiGetter = apiGetter;\n this.item = item;\n this.visualsManager = visualsManager;\n }\n\n public async Init(): Promise<void> {\n const tilesetId = this.item.tileset?.TilesetID;\n if (!tilesetId) {\n return;\n }\n\n (async () => {\n const api = this.apiGetter.getApi();\n const {tileset} = await Tileset.Get({\n api,\n tilesetId\n });\n if (!tileset || this.disposed) {\n return;\n }\n this.typeId = (tileset.settings as Tileset.Settings.IEntities).entityTypeId;\n\n const cTileset = this.cTileset = await TilesetRenderEngine.Render({\n apiGetter: this.apiGetter,\n tileset: tileset,\n viewer: this.viewer,\n accountId: this.item.tileset?.ClientAccountID ?? this.apiGetter.accountId,\n viaCdn: this.item.cdnEnabled\n });\n if (this.disposed) {\n this.doDispose();\n return;\n }\n\n cTileset.readyPromise.then(() => {\n try {\n if (this.disposed || this.viewer.isDestroyed()) {\n return;\n }\n this.onCTilesetLoad();\n }\n catch (e) {\n console.error(e);\n }\n });\n cTileset.tileLoad.addEventListener((tile) => {\n this.mapCTile(tile);\n });\n })();\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n this.doDispose();\n }\n\n private doDispose() {\n if (this.cTileset) {\n const viewer = this.viewer;\n if (!viewer?.isDestroyed() && this.viewer.scene.primitives.contains(this.cTileset)) {\n this.cTileset.show = false;\n this.viewer.scene.primitives.remove(this.cTileset);\n TilesetRenderEngine.GetMemoryWatcher(viewer)?.Unwatch(this.cTileset);\n }\n this.cTileset = null;\n }\n this.visualsManager.RemoveRegos({\n menuItemId: this.item.id\n });\n }\n\n private onCTilesetLoad(): void {\n if (this.item.FlyTo) {\n this.viewer.zoomTo(\n this.cTileset,\n new Cesium.HeadingPitchRange(0.0, -0.5, this.cTileset.boundingSphere.radius / 4.0)\n );\n }\n }\n\n private mapCTile(tile: Cesium.Cesium3DTile): void {\n const content = tile?.content;\n if (!content) {\n return;\n }\n for (let i = 0; i < content.featuresLength; i++) {\n const feature = content.getFeature(i);\n this.mapTilesetFeature(feature);\n }\n }\n\n private mapTilesetFeature(feature: Cesium.Cesium3DTileFeature): void {\n const id = feature.getProperty(\"BruceId\");\n if (id) {\n const rego: VisualsRegister.IVisualRego = {\n entityId: id,\n entityTypeId: this.typeId,\n menuItemId: this.item.id,\n priority: 0,\n visual: feature,\n tilesetId: this.item.tileset?.TilesetID,\n accountId: this.item.tileset?.ClientAccountID ?? this.apiGetter.accountId\n };\n this.visualsManager.AddRego({\n rego\n });\n }\n }\n\n public async ReRender(params: {\n entityIds?: string[],\n force?: boolean\n }) {\n const { entityIds, force } = params;\n if (entityIds == null) {\n\n }\n else {\n\n }\n }\n }\n}","import { BruceApi, MenuItem, Tileset } from \"bruce-models\";\nimport { RenderManager } from \"../render-manager\";\nimport * as Cesium from \"cesium\";\nimport { TilesetRenderEngine } from \"../../tileset-render-engine\";\n\nexport namespace TilesetPointcloudRenderManager {\n export class Manager implements RenderManager.IManager {\n private viewer: Cesium.Viewer;\n private apiGetter: BruceApi.IGetter;\n private item: MenuItem.Item.IPointcloud;\n private disposed: boolean = false;\n public get Disposed(): boolean {\n return this.disposed;\n }\n private cTileset: Cesium.Cesium3DTileset = <any>null;\n public get Tileset(): Cesium.Cesium3DTileset {\n return this.cTileset;\n }\n\n constructor(params: {\n viewer: Cesium.Viewer,\n apiGetter: BruceApi.IGetter,\n item: MenuItem.Item.IPointcloud\n }) {\n const { viewer, apiGetter, item } = params;\n this.viewer = viewer;\n this.apiGetter = apiGetter;\n this.item = item;\n }\n\n public Init() {\n const tilesetId = this.item.tileset?.TilesetID;\n if (!tilesetId) {\n return;\n }\n\n (async () => {\n const api = this.apiGetter.getApi();\n const {tileset} = await Tileset.Get({\n api,\n tilesetId\n });\n if (!tileset || this.disposed) {\n return;\n }\n\n const cTileset = this.cTileset = await TilesetRenderEngine.Render({\n apiGetter: this.apiGetter,\n tileset: tileset,\n viewer: this.viewer,\n coords: null,\n accountId: this.item.tileset?.ClientAccountID ?? this.apiGetter.accountId,\n viaCdn: this.item.cdnEnabled\n });\n if (this.disposed) {\n this.doDispose();\n return;\n }\n\n cTileset.readyPromise.then(() => {\n try {\n if (this.disposed || this.viewer.isDestroyed()) {\n return;\n }\n this.onCTilesetLoad();\n }\n catch (e) {\n console.error(e);\n }\n });\n })();\n }\n\n private onCTilesetLoad(): void {\n if (this.item.FlyTo) {\n this.viewer.zoomTo(\n this.cTileset,\n new Cesium.HeadingPitchRange(0.0, -0.5, this.cTileset.boundingSphere.radius / 4.0)\n );\n }\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n this.doDispose();\n }\n\n private doDispose() {\n if (this.cTileset) {\n const viewer = this.viewer;\n if (!viewer?.isDestroyed() && this.viewer.scene.primitives.contains(this.cTileset)) {\n this.cTileset.show = false;\n this.viewer.scene.primitives.remove(this.cTileset);\n TilesetRenderEngine.GetMemoryWatcher(viewer)?.Unwatch(this.cTileset);\n }\n this.cTileset = null;\n }\n }\n\n public async ReRender(params: {\n entityIds?: string[],\n force?: boolean\n }) {\n const { entityIds, force } = params;\n if (entityIds == null) {\n\n }\n else {\n\n }\n }\n }\n}","import { BruceApi, ClientFile, MenuItem } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { RenderManager } from \"../render-manager\";\n\nexport namespace DataSourceStaticKmlManager {\n export class Manager implements RenderManager.IManager {\n private viewer: Cesium.Viewer;\n private apiGetter: BruceApi.IGetter;\n private item: MenuItem.Item.IKml;\n private disposed: boolean = false;\n public get Disposed(): boolean {\n return this.disposed;\n }\n private dataSources: Cesium.KmlDataSource[] = [];\n\n constructor(params: {\n viewer: Cesium.Viewer,\n apiGetter: BruceApi.IGetter,\n item: MenuItem.Item.IKml\n }) {\n const { viewer, apiGetter, item } = params;\n this.viewer = viewer;\n this.apiGetter = apiGetter;\n this.item = item;\n }\n\n public Init() {\n let files = this.item.KML;\n if (!files) {\n return;\n }\n if (!Array.isArray(files)) {\n files = [files];\n }\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n const fileId = file?.ClientFile?.ID;\n const externalURL = file?.fileUrl\n if (!fileId && !externalURL) {\n continue;\n }\n\n const api = this.apiGetter.getApi();\n let fileUrl: string;\n if (fileId){\n fileUrl = ClientFile.GetUrl({\n api,\n fileId\n });\n }\n else if (externalURL) {\n fileUrl = externalURL;\n }\n\n const source = new Cesium.KmlDataSource();\n source.load(fileUrl);\n this.viewer.dataSources.add(source);\n this.dataSources.push(source);\n }\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n if (!this.viewer?.isDestroyed()) {\n for (let i = 0; i < this.dataSources.length; i++) {\n const source = this.dataSources[i];\n if (\n source &&\n this.viewer.dataSources.contains(source)\n ) {\n this.viewer.dataSources.remove(source);\n }\n }\n }\n this.dataSources = [];\n }\n\n public async ReRender(params: {\n entityIds?: string[],\n force?: boolean\n }) {\n const { entityIds, force } = params;\n if (entityIds == null) {\n\n }\n else {\n\n }\n }\n }\n}","import { RenderManager } from \"../render-manager\";\nimport * as Cesium from \"cesium\";\nimport { BruceApi, MenuItem, Tileset } from \"bruce-models\";\nimport { TilesetRenderEngine } from \"../../tileset-render-engine\";\nimport { VisualsRegister } from \"../../visuals-register\";\n\nasync function getLegacyTileset(params: {\n apiGetter: BruceApi.IGetter,\n menuItem: MenuItem.Item.IArbTileset,\n tileset: Tileset.ITileset\n}): Promise<any> {\n const { apiGetter, menuItem, tileset } = params;\n try {\n const api = apiGetter.getApi(menuItem.tileset.ClientAccountID);\n const legacyTileset = await api.GET(`ui.tileset/${tileset.id}`);\n return legacyTileset;\n }\n catch (e) {\n console.error(e);\n }\n}\n\nasync function getTileset(params: {\n apiGetter: BruceApi.IGetter,\n menuItem: MenuItem.Item.IArbTileset\n}): Promise<{\n tileset: Tileset.ITileset,\n type: Tileset.EType\n}> {\n const { apiGetter, menuItem } = params;\n try {\n const api = apiGetter.getApi(menuItem.tileset.ClientAccountID);\n const { tileset } = await Tileset.Get({\n api,\n tilesetId: menuItem.tileset.TilesetID\n });\n const {typeMapping} = await Tileset.GetTypes({\n api,\n tilesetIds: [menuItem.tileset.TilesetID]\n });\n return {\n tileset,\n type: typeMapping[menuItem.tileset.TilesetID]\n };\n }\n catch (e) {\n console.error(e);\n }\n}\n\nexport namespace TilesetArbRenderManager {\n export class Manager implements RenderManager.IManager {\n private viewer: Cesium.Viewer;\n private apiGetter: BruceApi.IGetter;\n private item: MenuItem.Item.IArbTileset;\n private disposed: boolean = false;\n public get Disposed(): boolean {\n return this.disposed;\n }\n private visualsManager: VisualsRegister.Register;\n private cTileset: Cesium.Cesium3DTileset = null;\n public get Tileset(): Cesium.Cesium3DTileset {\n return this.cTileset;\n }\n private styler: TilesetRenderEngine.Styler = null;\n\n\n public constructor(params: {\n viewer: Cesium.Viewer,\n item: MenuItem.Item.IArbTileset,\n apiGetter: BruceApi.IGetter,\n register: VisualsRegister.Register\n }) {\n this.viewer = params.viewer;\n this.apiGetter = params.apiGetter;\n this.visualsManager = params.register;\n // We modify the object due to a lot of backwards compatibility.\n try {\n this.item = params.item ? JSON.parse(JSON.stringify(params.item)) : {};\n }\n catch (e) {\n console.error(e);\n }\n }\n\n public Init() {\n // Horrid backwards compatibility.\n let loadUrlOverride = null;\n if (this.item.tileset) {\n const itemUrl = this.item.tileset?.TilesetURL;\n if (itemUrl && itemUrl.includes(\"cc3d.api\")) {\n this.item.tileset.ClientAccountID = \"cc3d\";\n }\n else if (this.item.IonResource?.AssetID) {\n this.item.tileset.ClientAccountID = \"cc3d\";\n }\n\n // Try fix a legacy record.\n // Eg: https://my3dcity.api.nextspace-uat-us.net/ui.tileset/0838d707-38af-4592-a2d4-5028997cab85/file/tileset.json\n if (!this.item.tileset.TilesetID && this.item.tileset.TilesetURL) {\n loadUrlOverride = this.item.tileset.TilesetURL;\n const url = this.item.tileset.TilesetURL;\n const urlParts = url.split(\"/\");\n if (urlParts.length > 5) {\n const tilesetId = urlParts[urlParts.length - 3];\n const accountId = urlParts[urlParts.length - 5].split(\".\")[0];\n this.item.tileset.TilesetID = tilesetId;\n this.item.tileset.ClientAccountID = accountId;\n }\n }\n }\n const tilesetId = this.item.tileset?.TilesetID;\n (async () => {\n const {tileset, type} = tilesetId ? await getTileset({\n apiGetter: this.apiGetter,\n menuItem: this.item\n }) : { tileset: null, type: null };\n if (this.disposed) {\n return;\n }\n\n if (tileset && loadUrlOverride) {\n tileset.loadUrl = loadUrlOverride;\n }\n\n const LEGACY_TYPES = [\n Tileset.EType.LegacyEntitiesSet,\n Tileset.EType.LegacyExternal,\n Tileset.EType.LegacyStatic\n ];\n if (!type || LEGACY_TYPES.includes(type)) {\n // Legacy type. We re-request using ui.tileset endpoint.\n const legacyTileset = tileset ? await getLegacyTileset({\n apiGetter: this.apiGetter,\n menuItem: this.item as MenuItem.Item.IArbTileset,\n tileset\n }) : null;\n if (this.disposed) {\n return;\n }\n\n let accountId = this.item?.tileset?.ClientAccountID;\n if (!accountId) {\n accountId = this.apiGetter.accountId;\n }\n this.cTileset = await TilesetRenderEngine.RenderLegacy({\n apiGetter: this.apiGetter,\n tileset: legacyTileset,\n viewer: this.viewer,\n ionId: this.item.IonResource?.AssetID,\n loadUrl: loadUrlOverride,\n accountId: accountId,\n viaCdn: true\n });\n }\n else if (tileset) {\n this.cTileset = await TilesetRenderEngine.Render({\n apiGetter: this.apiGetter,\n tileset: tileset,\n viewer: this.viewer,\n coords: null,\n accountId: this.item.tileset?.ClientAccountID ?? this.apiGetter.accountId,\n // Not doing viaCDN here because I fear it'll break something since this is a legacy menu item type.\n viaCdn: false\n });\n }\n if (this.disposed) {\n this.doDispose();\n return;\n }\n this.cTileset.readyPromise.then(() => {\n try {\n if (\n this.item.ApplyStyles ||\n this.item.Type == MenuItem.EType.IonTileset\n ) {\n const api = this.apiGetter.getApi();\n this.styler = new TilesetRenderEngine.Styler(\n api,\n this.cTileset,\n <number>this.item.styleId,\n <any[]>this.item.StyleMapping,\n this.item.id,\n this.visualsManager\n );\n }\n this.onCTilesetLoad();\n }\n catch (e) {\n console.error(e);\n }\n });\n this.cTileset.tileLoad.addEventListener((tile) => {\n try {\n this.mapCTile(tile);\n }\n catch (e) {\n console.error(e);\n }\n });\n })();\n }\n\n private onCTilesetLoad(): void {\n if (this.item.FlyTo) {\n this.viewer.zoomTo(\n this.cTileset,\n new Cesium.HeadingPitchRange(0.0, -0.5, this.cTileset.boundingSphere.radius / 4.0)\n );\n }\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n this.doDispose();\n }\n\n private doDispose() {\n if (this.cTileset) {\n const viewer = this.viewer;\n if (!viewer?.isDestroyed() && this.viewer.scene.primitives.contains(this.cTileset)) {\n this.cTileset.show = false;\n this.viewer.scene.primitives.remove(this.cTileset);\n TilesetRenderEngine.GetMemoryWatcher(viewer)?.Unwatch(this.cTileset);\n }\n this.cTileset = null;\n }\n this.styler?.Dispose();\n this.visualsManager.RemoveRegos({\n menuItemId: this.item.id\n });\n }\n\n public async ReRender(params: {\n entityIds?: string[],\n force?: boolean\n }): Promise<void> {\n const {entityIds, force} = params;\n if (!this.styler) {\n return;\n }\n let regos: VisualsRegister.IVisualRego[] = this.visualsManager.GetRegos({\n menuItemId: this.item.id\n });\n if (entityIds != null) {\n regos = regos.filter(r => entityIds.indexOf(r.entityId) >= 0);\n }\n this.styler.QueueEntities(regos);\n }\n\n private mapCTile(tile: Cesium.Cesium3DTile): void {\n const content = tile?.content;\n if (!content) {\n return;\n }\n for (let i = 0; i < content.featuresLength; i++) {\n const feature = content.getFeature(i);\n let rego = this.mapTilesetFeature(feature);\n if (rego?.entityId && this.styler) {\n this.styler.QueueEntities([rego]);\n }\n }\n }\n\n private mapTilesetFeature(feature: Cesium.Cesium3DTileFeature): VisualsRegister.IVisualRego {\n let rego: VisualsRegister.IVisualRego = {\n entityId: <any>null,\n entityTypeId: <any>null,\n menuItemId: this.item.id,\n priority: 0,\n visual: feature,\n accountId: this.item.tileset?.ClientAccountID ?? this.apiGetter.accountId,\n tilesetId: this.item.tileset?.TilesetID\n };\n\n // Two different methods for two different Cesium versions...\n const props = (feature as any).getPropertyNames ? (feature as any).getPropertyNames([]) :\n (feature as any).getPropertyIds ? (feature as any).getPropertyIds() : [];\n\n if (props.find(x => x == \"BrucePath\")) {\n const path = feature.getProperty(\"BrucePath\")?.split(\"|\");\n if (path?.length) {\n rego.entityId = path[path.length - 1];\n }\n }\n if (!rego.entityId) {\n const ACCEPTABLE_PROPS = [\n \"Building_ID\", \"BuildingID\", \"BruceId\"\n ];\n for (let acceptableId of ACCEPTABLE_PROPS) {\n if (props.indexOf(acceptableId) > -1) {\n rego.entityId = feature.getProperty(acceptableId);\n if (rego.entityId) {\n break;\n }\n }\n }\n }\n if (!rego.entityId) {\n return null;\n }\n\n this.visualsManager.AddRego({\n rego\n });\n return rego;\n }\n }\n}","import { BruceApi, EntityRelation, MenuItem, ObjectUtils } from \"bruce-models\";\nimport { RenderManager } from \"../render-manager\";\nimport { VisualsRegister } from \"../../visuals-register\";\nimport * as Cesium from \"cesium\";\nimport { RelationRenderEngine } from \"../../relation-render-engine\";\n\nexport namespace RelationsRenderManager {\n export class Manager implements RenderManager.IManager {\n private disposed = false;\n public get Disposed() {\n return this.disposed;\n };\n private apiGetter: BruceApi.IGetter;\n private item: MenuItem.Item.IEntityRelations;\n private register: VisualsRegister.Register;\n private viewer: Cesium.Viewer;\n\n\n public constructor(params: {\n apiGetter: BruceApi.IGetter,\n item: MenuItem.Item.IEntityRelations,\n register: VisualsRegister.Register,\n viewer: Cesium.Viewer\n }) {\n const { apiGetter, item, register, viewer } = params;\n this.apiGetter = apiGetter;\n this.item = item;\n this.register = register;\n this.viewer = viewer;\n }\n\n public Init() {\n const drawn: string[] = [];\n const api = this.apiGetter.getApi(this.apiGetter.accountId);\n const BATCH_SIZE = 5;\n let drawBatch = [];\n let pending = this.item.BruceEntity.EntityIds.length;\n\n const onResolve = () => {\n pending -= 1;\n if (pending <= 0) {\n if (drawBatch?.length) {\n this.onGetterUpdate(drawBatch);\n }\n }\n };\n\n for (let i = 0; i < this.item.BruceEntity.EntityIds.length; i++) {\n const entityId = this.item.BruceEntity.EntityIds[i];\n EntityRelation.GetList({\n api,\n entityId,\n filter: {\n oneWayOnly: false,\n loadEntityData: false\n }\n }).then((data) => {\n const relations = data.relations;\n for (let j = 0; j < relations.length; j++) {\n const relation = relations[j];\n if (this.item.relationTypeIds?.length && !this.item.relationTypeIds.includes(relation[\"Relation.Type.ID\"])) {\n continue;\n }\n const key = RelationRenderEngine.GetRenderGroupId(relation);\n if (!drawn.find(x => x == key)) {\n drawn.push(key);\n drawBatch.push(relation);\n if (drawBatch.length >= BATCH_SIZE) {\n this.onGetterUpdate(drawBatch);\n drawBatch = [];\n }\n }\n }\n onResolve();\n }).catch((e) => {\n onResolve();\n });\n }\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n this.register.RemoveRegos({\n menuItemId: this.item.id\n });\n }\n\n public async ReRender(params: {\n entityIds?: string[],\n force?: boolean\n }): Promise<void> {\n let { entityIds, force } = params;\n if (entityIds == null) {\n\n }\n else {\n\n }\n }\n\n private async onGetterUpdate(relations: EntityRelation.IRelation[]): Promise<void> {\n try {\n if (this.disposed || this.viewer.isDestroyed()) {\n return;\n }\n const cEntities = await RelationRenderEngine.Render({\n apiGetter: this.apiGetter,\n menuItemId: this.item.id,\n relations: relations,\n viewer: this.viewer,\n visualRegister: this.register\n });\n for (let i = 0; i < relations.length; i++) {\n const relation = relations[i];\n const key = RelationRenderEngine.GetRenderGroupId(relation);\n const cEntity = cEntities[key];\n if (cEntity) {\n const visual = this.register.GetRego({\n entityId: key,\n menuItemId: this.item.id\n })?.visual;\n if (!visual || visual != cEntity) {\n this.register.AddRego({\n rego: {\n entityId: relation[\"Data.Entity.ID\"] ?? ObjectUtils.UId(),\n menuItemId: this.item.id,\n relation: relation,\n visual: cEntity,\n priority: 0,\n accountId: this.apiGetter.accountId\n }\n });\n }\n }\n else {\n this.register.RemoveRegos({\n entityId: relation[\"Data.Entity.ID\"],\n relation: relation,\n menuItemId: this.item.id\n });\n }\n }\n }\n catch (e) {\n console.error(e);\n }\n }\n }\n}","import { MenuItem } from \"bruce-models\";\nimport { RenderManager } from \"../render-manager\";\nimport * as Cesium from \"cesium\";\n\nexport namespace TilesetGooglePhotosRenderManager {\n export class Manager implements RenderManager.IManager {\n private viewer: Cesium.Viewer;\n private item: MenuItem.Item.IGooglePhotoTileset;\n private disposed: boolean = false;\n public get Disposed(): boolean {\n return this.disposed;\n }\n private cTileset: Cesium.Cesium3DTileset = <any>null;\n public get Tileset(): Cesium.Cesium3DTileset {\n return this.cTileset;\n }\n\n\n constructor(params: {\n viewer: Cesium.Viewer,\n item: MenuItem.Item.IGooglePhotoTileset\n }) {\n const { viewer, item } = params;\n this.viewer = viewer;\n this.item = item;\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.doDispose();\n }\n\n private doDispose() {\n if (this.cTileset) {\n const viewer = this.viewer;\n if (!viewer?.isDestroyed() && this.viewer.scene.primitives.contains(this.cTileset)) {\n this.cTileset.show = false;\n this.viewer.scene.primitives.remove(this.cTileset);\n }\n this.cTileset = null;\n }\n }\n\n public Init() {\n (async () => {\n // Using as any to be OK with older versions.\n this.cTileset = await (Cesium as any).createGooglePhotorealistic3DTileset?.();\n if (this.disposed) {\n this.doDispose();\n return;\n }\n this.viewer.scene.primitives.add(this.cTileset);\n const colorCss = this.item.colorMask;\n if (colorCss) {\n this.cTileset.style = new Cesium.Cesium3DTileStyle({\n color: {\n conditions: [\n [ \"true\", `color(\"${colorCss}\")` ]\n ]\n }\n });\n }\n })();\n }\n\n public async ReRender(params: {\n entityIds?: string[],\n force?: boolean\n }) {\n const { entityIds, force } = params;\n if (entityIds == null) {\n\n }\n else {\n\n }\n }\n }\n}","import { BruceApi, BruceEvent, ENVIRONMENT, Entity, MenuItem, ObjectUtils } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntitiesRenderManager } from \"./render-managers/entities/entities-render-manager\";\r\nimport { EntitiesLoadedRenderManager } from \"./render-managers/entities/entities-loaded-render-manager\";\r\nimport { RenderManager } from \"./render-managers/render-manager\";\r\nimport { VisualsRegister } from \"./visuals-register\";\r\nimport { EntitiesIdsRenderManager } from \"./render-managers/entities/entities-ids-render-manager\";\r\nimport { EntityRenderManager } from \"./render-managers/entities/entity-render-manager\";\r\nimport { TilesetCadRenderManager } from \"./render-managers/tilesets/tileset-cad-render-manager\";\r\nimport { SharedGetters } from \"./render-managers/common/shared-getters\";\r\nimport { CesiumViewMonitor } from \"../viewer/cesium-view-monitor\";\r\nimport { TilesetOsmRenderManager } from \"./render-managers/tilesets/tileset-osm-render-manager\";\r\nimport { TilesetEntitiesRenderManager } from \"./render-managers/tilesets/tileset-entities-render-manager\";\r\nimport { TilesetPointcloudRenderManager } from \"./render-managers/tilesets/tileset-pointcloud-render-manager\";\r\nimport { DataSourceStaticKmlManager } from \"./render-managers/data-source/data-source-static-kml-manager\";\r\nimport { TilesetArbRenderManager } from \"./render-managers/tilesets/tileset-arb-render-manager\";\r\nimport { RelationsRenderManager } from \"./render-managers/other/relations-render-manager\";\r\nimport { TilesetGooglePhotosRenderManager } from \"./render-managers/tilesets/tileset-google-photos-render-manager\";\r\n\r\ninterface IRenderedItem {\r\n id: string;\r\n type: MenuItem.EType;\r\n childIds: string[];\r\n item: MenuItem.IItem;\r\n renderManager: RenderManager.IManager;\r\n // Array of exceptions during the menu item's rendering.\r\n // Eg: Failed to enable as the item's tileset was deleted.\r\n errors?: (string | any)[];\r\n}\r\n\r\n/**\r\n * Utility to keep track of enabled menu items within a Cesium viewer.\r\n */\r\nexport namespace MenuItemManager {\r\n export interface IMenuItemUpdate {\r\n itemId: string;\r\n isEnabling: boolean;\r\n }\r\n\r\n export class Manager {\r\n private viewer: Cesium.Viewer;\r\n public get Viewer(): Cesium.Viewer {\r\n return this.viewer;\r\n }\r\n private items: IRenderedItem[] = [];\r\n private visualsRegister: VisualsRegister.Register;\r\n public get VisualsRegister(): VisualsRegister.Register {\r\n return this.visualsRegister;\r\n }\r\n private onUpdate: BruceEvent<IMenuItemUpdate> = <any>null;\r\n public get OnUpdate(): BruceEvent<IMenuItemUpdate> {\r\n if (!this.onUpdate) {\r\n this.onUpdate = new BruceEvent<IMenuItemUpdate>();\r\n }\r\n return this.onUpdate;\r\n }\r\n private sharedGetters: SharedGetters.Cache;\r\n private sharedMonitor: CesiumViewMonitor;\r\n public get Monitor(): CesiumViewMonitor {\r\n return this.sharedMonitor;\r\n }\r\n\r\n public constructor(params: {\r\n viewer: Cesium.Viewer,\r\n visualsRegister?: VisualsRegister.Register\r\n }) {\r\n let { viewer, visualsRegister } = params;\r\n this.viewer = viewer;\r\n if (!visualsRegister) {\r\n visualsRegister = new VisualsRegister.Register(viewer);\r\n }\r\n this.visualsRegister = visualsRegister;\r\n this.sharedGetters = new SharedGetters.Cache();\r\n this.sharedMonitor = new CesiumViewMonitor(this.viewer);\r\n }\r\n\r\n /**\r\n * Renders a given menu item and all its children.\r\n * Will return the enabled item id.\r\n * @param params\r\n * @returns\r\n */\r\n public RenderItem(params: {\r\n item: MenuItem.IItem;\r\n // Default = true.\r\n recursive?: boolean\r\n apiGetter?: BruceApi.IGetter;\r\n }): string {\r\n if (this.viewer.isDestroyed()) {\r\n return null;\r\n }\r\n if (!params.apiGetter) {\r\n params.apiGetter = ENVIRONMENT.Api().GetBruceGetter();\r\n }\r\n\r\n let rItem = this.items.find(x => x.id == params.item.id);\r\n if (rItem) {\r\n // This means we're updating a tag menu item.\r\n // Tag menu items have alternative states based on bookmark settings.\r\n // Eg: different tags that were enabled.\r\n if (rItem.type == MenuItem.EType.Entities && params.item.Type == MenuItem.EType.Entities) {\r\n const eItem = rItem.item as MenuItem.Item.IEntities;\r\n if (eItem?.BruceEntity?.ExpandLayers) {\r\n (rItem.renderManager as EntitiesRenderManager.Manager).Init({\r\n item: params.item as MenuItem.Item.IEntities,\r\n });\r\n rItem.item = params.item;\r\n }\r\n }\r\n }\r\n else {\r\n rItem = {\r\n id: params.item.id ?? ObjectUtils.UId(),\r\n childIds: [],\r\n item: params.item,\r\n renderManager: <any>null,\r\n type: params.item.Type,\r\n errors: []\r\n }\r\n this.items.push(rItem);\r\n\r\n if (!params.item.Type) {\r\n params.item.Type = MenuItem.EType.None;\r\n }\r\n switch (params.item.Type) {\r\n case MenuItem.EType.Entities:\r\n rItem.renderManager = new EntitiesRenderManager.Manager({\r\n viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n monitor: this.sharedMonitor,\r\n item: <MenuItem.Item.IEntities>params.item,\r\n sharedGetters: this.sharedGetters\r\n });\r\n break;\r\n case MenuItem.EType.EntitiesLoaded:\r\n rItem.renderManager = new EntitiesLoadedRenderManager.Manager({\r\n viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n monitor: this.sharedMonitor,\r\n item: <MenuItem.Item.IEntitiesLoaded>params.item\r\n });\r\n break;\r\n case MenuItem.EType.EntitiesIds:\r\n rItem.renderManager = new EntitiesIdsRenderManager.Manager({\r\n viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n monitor: this.sharedMonitor,\r\n item: <MenuItem.Item.IEntityIds>params.item\r\n });\r\n break;\r\n case MenuItem.EType.Entity:\r\n rItem.renderManager = new EntityRenderManager.Manager({\r\n viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n monitor: this.sharedMonitor,\r\n item: <MenuItem.Item.IEntity>params.item\r\n });\r\n break;\r\n case MenuItem.EType.CadTileset:\r\n rItem.renderManager = new TilesetCadRenderManager.Manager({\r\n viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n item: <MenuItem.Item.ICadTileset>params.item\r\n });\r\n break;\r\n case MenuItem.EType.Osm:\r\n rItem.renderManager = new TilesetOsmRenderManager.Manager({\r\n viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n monitor: this.sharedMonitor,\r\n item: <MenuItem.Item.IOsm>params.item\r\n });\r\n break;\r\n case MenuItem.EType.PointCloud:\r\n rItem.renderManager = new TilesetPointcloudRenderManager.Manager({\r\n viewer: this.viewer,\r\n apiGetter: params.apiGetter,\r\n item: <MenuItem.Item.IPointcloud>params.item\r\n });\r\n break;\r\n case MenuItem.EType.EntityTileset:\r\n rItem.renderManager = new TilesetEntitiesRenderManager.Manager({\r\n viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n item: <MenuItem.Item.IEntitiesTileset>params.item\r\n });\r\n break;\r\n case MenuItem.EType.Kml:\r\n rItem.renderManager = new DataSourceStaticKmlManager.Manager({\r\n viewer: this.viewer,\r\n apiGetter: params.apiGetter,\r\n item: <MenuItem.Item.IKml>params.item\r\n });\r\n break;\r\n case MenuItem.EType.IonTileset:\r\n case MenuItem.EType.ArbTileset:\r\n rItem.renderManager = new TilesetArbRenderManager.Manager({\r\n apiGetter: params.apiGetter,\r\n item: <MenuItem.Item.IArbTileset>params.item,\r\n viewer: this.viewer,\r\n register: this.visualsRegister\r\n });\r\n break;\r\n case MenuItem.EType.Relations:\r\n rItem.renderManager = new RelationsRenderManager.Manager({\r\n apiGetter: params.apiGetter,\r\n item: params.item as any,\r\n register: this.visualsRegister,\r\n viewer: this.viewer\r\n });\r\n break;\r\n case MenuItem.EType.GooglePhotoTileset:\r\n rItem.renderManager = new TilesetGooglePhotosRenderManager.Manager({\r\n item: params.item as any,\r\n viewer: this.viewer,\r\n });\r\n break;\r\n // Any \"none\" type can be ignored. These are just containers for other items.\r\n case MenuItem.EType.None:\r\n break;\r\n default:\r\n console.error(\"Menu item type is not implemented.\", params.item.Type);\r\n }\r\n\r\n if (rItem.renderManager && !rItem.renderManager.Disposed) {\r\n try {\r\n rItem.renderManager.Init();\r\n }\r\n catch (e) {\r\n rItem.errors.push(e);\r\n }\r\n }\r\n }\r\n // We no longer support folder items being both a folder and an action.\r\n // Now an item must have no action to be a folder.\r\n const isFolder = !params.item.Type || params.item.Type == MenuItem.EType.None;\r\n if (params.item.Children && params.recursive != false && isFolder) {\r\n for (let i = 0; i < params.item.Children.length; i++) {\r\n const childId = this.RenderItem({\r\n ...params,\r\n item: params.item.Children[i]\r\n });\r\n rItem.childIds.push(childId);\r\n }\r\n }\r\n if (rItem.renderManager && !rItem.renderManager?.Disposed) {\r\n this.onUpdate?.Trigger({ isEnabling: true, itemId: rItem.id });\r\n }\r\n rItem.id;\r\n }\r\n\r\n /**\r\n * Disables a menu item by its id.\r\n * This will disable all children as well.\r\n * @param id\r\n * @param recursive\r\n */\r\n public RemoveItemById(params: {\r\n menuItemId: string,\r\n // Default = true.\r\n recursive?: boolean\r\n }): Promise<void> {\r\n let { menuItemId: id, recursive } = params;\r\n if (this.viewer.isDestroyed()) {\r\n return;\r\n }\r\n if (recursive == null) {\r\n recursive = true;\r\n }\r\n const item = this.items.find(x => x.id === id);\r\n if (item) {\r\n if (recursive) {\r\n for (let i = 0; i < item.childIds.length; i++) {\r\n const child = this.items.find(x => x.id === item.childIds[i]);\r\n if (child) {\r\n this.RemoveItemById({\r\n menuItemId: child.id\r\n });\r\n }\r\n }\r\n }\r\n try {\r\n item.renderManager?.Dispose();\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n this.items = this.items.filter(x => x.id !== id);\r\n this.onUpdate?.Trigger({ isEnabling: false, itemId: item.id });\r\n }\r\n }\r\n\r\n public GetEnabledItemIds(): string[] {\r\n return this.items.map(x => x.id);\r\n }\r\n\r\n public GetEnabledItem(id: string): IRenderedItem {\r\n return this.items.find(x => x.id === id);\r\n }\r\n\r\n /**\r\n * Rerenders given entities.\r\n * If no menu items are specified then the rerender is called on all enabled menu items.\r\n * It is highly recommended to supply menu item ids.\r\n * @param params\r\n */\r\n public async ReRender(params: {\r\n entityIds?: string[],\r\n entities?: Entity.IEntity[],\r\n menuItemIds?: string[]\r\n // Skips queues and renders immediately.\r\n force?: boolean\r\n }) {\r\n let { entityIds, entities, menuItemIds, force } = params;\r\n if (!entityIds?.length && !entities?.length) {\r\n return;\r\n }\r\n if (!entityIds && entities) {\r\n entityIds = entities.map(x => x.Bruce?.ID);\r\n }\r\n const items = menuItemIds?.length ? this.items.filter(x => menuItemIds.includes(x.id)) : this.items;\r\n for (let i = 0; i < items.length; i++) {\r\n const item = items[i];\r\n if (item.renderManager) {\r\n await item.renderManager.ReRender({\r\n entityIds,\r\n entities,\r\n force\r\n });\r\n }\r\n }\r\n }\r\n }\r\n}","import * as Cesium from \"cesium\";\nimport { MenuItemManager } from \"../rendering/menu-item-manager\";\n\ninterface IWidget {\n isDestroyed: () => boolean;\n destroy: () => void;\n}\n\nconst CESIUM_VIEWER_MANAGER_KEY = \"_cesiumViewerManager\";\n\nexport namespace ViewerUtils {\n /**\n * Destroys all the junk that cesium viewer ships with.\n * @param viewer \n */\n export function InitViewer(params: {\n viewer: Cesium.Viewer\n // Default = true.\n destroyWidgets?: boolean;\n // Default = true.\n styleContainer?: boolean;\n }) {\n const { viewer, destroyWidgets, styleContainer } = params;\n if (destroyWidgets != false) {\n ViewerUtils.DestroyWidget(viewer.timeline);\n ViewerUtils.DestroyWidget(viewer.vrButton);\n ViewerUtils.DestroyWidget(viewer.sceneModePicker);\n ViewerUtils.DestroyWidget(viewer.homeButton);\n ViewerUtils.DestroyWidget(viewer.fullscreenButton);\n ViewerUtils.DestroyWidget(viewer.baseLayerPicker);\n }\n if (styleContainer != false) {\n ViewerUtils.StyleContainer({ viewer });\n }\n }\n\n export function DestroyWidget(widget: IWidget): void {\n if (widget && !widget.isDestroyed()) {\n widget.destroy();\n }\n }\n\n /**\n * Hides all unnecessary elements from the Cesium viewer container.\n * @param viewer \n */\n export function StyleContainer(params: {\n viewer: Cesium.Viewer\n }) {\n const { viewer } = params;\n const container = viewer.container;\n const genContainer = container.getElementsByClassName(\"cesium-viewer\")?.[0];\n if (genContainer) {\n const children = genContainer.children;\n for (let i = 0; i < children.length; i++) {\n const child = children[i] as HTMLElement;\n if (!child.classList.contains(\"cesium-viewer-cesiumWidgetContainer\")) {\n child.style.display = \"none\";\n }\n }\n }\n\n const canvas = viewer.canvas as HTMLElement;\n canvas.style.width = \"100%\";\n canvas.style.height = \"100%\";\n\n const widget = canvas.parentElement as HTMLElement;\n widget.style.width = \"100%\";\n widget.style.height = \"100%\";\n widget.style.touchAction = \"none\";\n\n const widgetContainer = widget.parentElement as HTMLElement;\n widgetContainer.style.width = \"100%\";\n widgetContainer.style.height = \"100%\";\n\n const viewerContainer = widgetContainer.parentElement as HTMLElement;\n viewerContainer.style.fontFamily = \"sans-serif\";\n viewerContainer.style.fontSize = \"16px\";\n viewerContainer.style.overflow = \"hidden\";\n viewerContainer.style.display = \"block\";\n viewerContainer.style.position = \"relative\";\n viewerContainer.style.top = \"0\";\n viewerContainer.style.left = \"0\";\n viewerContainer.style.width = \"100%\";\n viewerContainer.style.height = \"100%\";\n }\n\n /**\n * Returns a given Cesium viewer's menu item manager.\n * If one is missing then it'll optionally create one before returning it.\n * @param params \n * @returns \n */\n export function GetManager(params: {\n viewer: Cesium.Viewer,\n // Default is true.\n createIfMissing?: boolean\n }): MenuItemManager.Manager {\n const { viewer, createIfMissing } = params;\n if (viewer[CESIUM_VIEWER_MANAGER_KEY]) {\n return viewer[CESIUM_VIEWER_MANAGER_KEY];\n }\n else if (createIfMissing != false) {\n const manager = new MenuItemManager.Manager({ viewer });\n viewer[CESIUM_VIEWER_MANAGER_KEY] = manager;\n return manager;\n }\n return null;\n }\n}","import { BruceApi, ENVIRONMENT, Entity, IDictionary, MenuItem, ObjectUtils, ProjectView, ProjectViewBookmark, Tileset, ZoomControl } from \"bruce-models\";\r\nimport { MenuItemManager } from \"./menu-item-manager\";\r\nimport * as Cesium from \"cesium\";\r\nimport { ViewerUtils } from \"../viewer/viewer-utils\";\r\n\r\n/**\r\n * Utility to help generate menu items for rendering various data.\r\n */\r\nexport namespace MenuItemCreator {\r\n export interface IParams {\r\n apiGetter?: BruceApi.IGetter;\r\n // Either viewer or manager must be provided.\r\n // If manager is not provided then a default instance for the viewer will be used.\r\n viewer?: Cesium.Viewer;\r\n manager?: MenuItemManager.Manager;\r\n }\r\n\r\n export async function RenderEntities(params: {\r\n entityIds: string[]\r\n } & IParams): Promise<{\r\n menuItemIds: string[],\r\n menuItems: MenuItem.IItem[]\r\n }> {\r\n let {entityIds, apiGetter, manager, viewer} = params;\r\n if (!manager && viewer) {\r\n manager = ViewerUtils.GetManager({\r\n viewer,\r\n createIfMissing: true\r\n });\r\n }\r\n else if (manager && !viewer) {\r\n viewer = manager.Viewer;\r\n }\r\n\r\n const item: MenuItem.Item.IEntityIds = {\r\n Caption: \"Rendering Loaded Entities\",\r\n Type: <MenuItem.EType><any>MenuItem.EType.EntitiesIds,\r\n id: ObjectUtils.UId(),\r\n Children: [],\r\n BruceEntity: {\r\n EntityIds: entityIds\r\n },\r\n CameraZoomSettings: [\r\n {\r\n DisplayType: ZoomControl.EDisplayType.Model3D,\r\n LODCategoryID: \"glb\",\r\n LODLevel: 0,\r\n MaxZoom: 100000,\r\n MinZoom: 0,\r\n StyleID: 0 // 0 = Attempt to get entity type's default.\r\n }\r\n ]\r\n };\r\n const renderedId = await manager.RenderItem({\r\n apiGetter: apiGetter,\r\n item: item\r\n });\r\n return {\r\n menuItemIds: [renderedId],\r\n menuItems: [item]\r\n }\r\n }\r\n\r\n export async function RenderEntityTypes(params: {\r\n entityTypeIds: string[]\r\n } & IParams): Promise<{\r\n menuItemIds: string[],\r\n menuItems: MenuItem.IItem[]\r\n }> {\r\n let {entityTypeIds: typeIds, apiGetter, manager, viewer} = params;\r\n if (!manager && viewer) {\r\n manager = ViewerUtils.GetManager({\r\n viewer,\r\n createIfMissing: true\r\n });\r\n }\r\n else if (manager && !viewer) {\r\n viewer = manager.Viewer;\r\n }\r\n\r\n const renderedItemIds: string[] = [];\r\n const menuItems = [];\r\n for (let i = 0; i < typeIds.length; i++) {\r\n const typeId = typeIds[i];\r\n const menuItem = MenuItem.CreateFromTypeId(typeId, 0);\r\n menuItems.push(menuItem);\r\n const itemId = await manager.RenderItem({\r\n apiGetter: apiGetter,\r\n item: menuItem\r\n });\r\n renderedItemIds.push(itemId);\r\n }\r\n return {\r\n menuItemIds: renderedItemIds,\r\n menuItems: menuItems\r\n };\r\n }\r\n\r\n export async function RenderEntityFilter(params: {\r\n attrFilter: IDictionary<string>\r\n } & IParams): Promise<{\r\n menuItemIds: string[],\r\n menuItems: MenuItem.IItem[]\r\n }> {\r\n let {attrFilter: filter, apiGetter, manager, viewer} = params;\r\n if (!manager && viewer) {\r\n manager = ViewerUtils.GetManager({\r\n viewer,\r\n createIfMissing: true\r\n });\r\n }\r\n else if (manager && !viewer) {\r\n viewer = manager.Viewer;\r\n }\r\n\r\n const item: MenuItem.Item.IEntities = {\r\n BruceEntity: {\r\n \"EntityType.ID\": <string>filter.entityTypeId,\r\n Filter: filter\r\n },\r\n Type: MenuItem.EType.Entities,\r\n Caption: \"Rendering Filtered Entities\",\r\n CameraZoomSettings: [\r\n {\r\n DisplayType: ZoomControl.EDisplayType.Model3D,\r\n LODCategoryID: \"glb\",\r\n LODLevel: 0,\r\n MaxZoom: 100000,\r\n MinZoom: 0,\r\n StyleID: 0 // 0 = Attempt to get entity type's default.\r\n }\r\n ],\r\n id: ObjectUtils.UId(),\r\n Children: []\r\n };\r\n const renderedIds = await manager.RenderItem({\r\n apiGetter: apiGetter,\r\n item: item\r\n });\r\n return {\r\n menuItemIds: [renderedIds],\r\n menuItems: [item]\r\n };\r\n }\r\n\r\n export async function RenderMenuItems(params: {\r\n menuItems: MenuItem.IItem[]\r\n } & IParams): Promise<{\r\n menuItemIds: string[]\r\n }> {\r\n let {menuItems, apiGetter, manager, viewer} = params;\r\n if (!manager && viewer) {\r\n manager = ViewerUtils.GetManager({\r\n viewer,\r\n createIfMissing: true\r\n });\r\n }\r\n else if (manager && !viewer) {\r\n viewer = manager.Viewer;\r\n }\r\n\r\n const renderedItemIds: string[] = [];\r\n for (let i = 0; i < menuItems.length; i++) {\r\n const menuItem = menuItems[i];\r\n const itemId = await params.manager.RenderItem({\r\n apiGetter: apiGetter,\r\n item: menuItem\r\n });\r\n renderedItemIds.push(itemId);\r\n }\r\n return {\r\n menuItemIds: renderedItemIds\r\n };\r\n }\r\n\r\n export async function RenderTileset(params: {\r\n tilesetId?: string\r\n tileset?: Tileset.ITileset\r\n } & IParams): Promise<{\r\n menuItemIds: string[],\r\n menuItems: MenuItem.IItem[]\r\n }> {\r\n let {tilesetId, apiGetter, viewer, manager} = params;\r\n if (!apiGetter) {\r\n apiGetter = ENVIRONMENT.Api().GetBruceGetter();\r\n }\r\n if (!manager && viewer) {\r\n manager = ViewerUtils.GetManager({\r\n viewer,\r\n createIfMissing: true\r\n });\r\n }\r\n else if (manager && !viewer) {\r\n viewer = manager.Viewer;\r\n }\r\n\r\n const api = apiGetter.getApi();\r\n let tileset = params.tileset ? params.tileset : (await Tileset.Get({\r\n api,\r\n tilesetId\r\n })).tileset;\r\n\r\n let menuItem: MenuItem.IItem = null;\r\n if (tileset.type == Tileset.EType.Cad) {\r\n menuItem = {\r\n Caption: \"Rendering Tileset\",\r\n FlyTo: false,\r\n id: ObjectUtils.UId(),\r\n tileset: {\r\n TilesetID: tilesetId\r\n },\r\n Type: MenuItem.EType.CadTileset,\r\n styleId: 0,\r\n Children: []\r\n } as MenuItem.Item.ICadTileset;\r\n }\r\n else if (tileset.type == Tileset.EType.PointCloud) {\r\n menuItem = {\r\n Caption: \"Rendering Tileset\",\r\n FlyTo: false,\r\n id: ObjectUtils.UId(),\r\n tileset: {\r\n TilesetID: tilesetId\r\n },\r\n Type: MenuItem.EType.PointCloud,\r\n Children: []\r\n } as MenuItem.Item.IPointcloud;\r\n }\r\n else if (tileset.type == Tileset.EType.EntitiesSet) {\r\n menuItem = {\r\n Caption: \"Rendering Tileset\",\r\n FlyTo: false,\r\n id: ObjectUtils.UId(),\r\n tileset: {\r\n TilesetID: tilesetId\r\n },\r\n Type: MenuItem.EType.EntityTileset,\r\n Children: []\r\n } as MenuItem.Item.IEntitiesTileset;\r\n }\r\n else if (\r\n tileset.type == Tileset.EType.LegacyStatic ||\r\n tileset.type == Tileset.EType.LegacyExternal ||\r\n tileset.type == Tileset.EType.LegacyEntitiesSet\r\n ) {\r\n menuItem = {\r\n Caption: \"Rendering Tileset\",\r\n FlyTo: false,\r\n id: ObjectUtils.UId(),\r\n tileset: {\r\n TilesetID: tilesetId\r\n },\r\n Type: MenuItem.EType.ArbTileset,\r\n Children: []\r\n } as MenuItem.Item.IArbTileset;\r\n }\r\n if (menuItem) {\r\n const renderedIds = await manager.RenderItem({\r\n item: menuItem,\r\n apiGetter: apiGetter\r\n });\r\n return {\r\n menuItems: [menuItem],\r\n menuItemIds: [renderedIds]\r\n }\r\n }\r\n return {\r\n menuItemIds: [],\r\n menuItems: []\r\n }\r\n }\r\n\r\n export async function RenderBookmarkItems(params: {\r\n viewId?: string,\r\n view?: ProjectView.View\r\n bookmarkId?: string,\r\n bookmark?: ProjectViewBookmark.Bookmark\r\n } & IParams): Promise<{\r\n menuItemIds: string[],\r\n menuItems: MenuItem.IItem[]\r\n }> {\r\n let {viewId, bookmarkId, apiGetter, manager, viewer} = params;\r\n if (!apiGetter) {\r\n apiGetter = ENVIRONMENT.Api().GetBruceGetter();\r\n }\r\n if (!manager && viewer) {\r\n manager = ViewerUtils.GetManager({\r\n viewer,\r\n createIfMissing: true\r\n });\r\n }\r\n else if (manager && !viewer) {\r\n viewer = manager.Viewer;\r\n }\r\n\r\n const api = apiGetter.getApi();\r\n const view = params.view ? params.view : (await ProjectView.Get({\r\n api,\r\n viewId\r\n })).view;\r\n const bookmark = params.bookmark ? params.bookmark : (await ProjectViewBookmark.Get({\r\n api,\r\n viewId,\r\n bookmarkId\r\n })).bookmark;\r\n\r\n if (view.DataVersion != bookmark.DataVersion) {\r\n console.warn(\"View and bookmark settings version mismatch.\");\r\n }\r\n\r\n let enabledIds: string[] = [];\r\n let menuItems: MenuItem.IItem[] = [];\r\n\r\n const version = view.DataVersion;\r\n if (view.Settings && bookmark.Settings) {\r\n if (version === 2) {\r\n const vSettings = view.Settings as ProjectView.Navigator.ISettings;\r\n const bSettings = bookmark.Settings as ProjectViewBookmark.Navigator.ISettings;\r\n menuItems = vSettings.menuItems;\r\n enabledIds = bSettings.menuItemIds;\r\n }\r\n else {\r\n const vSettings = view.Settings as ProjectView.LegacyNavigator.ISettings;\r\n const bSettings = bookmark.Settings as ProjectViewBookmark.LegacyNavigator.ISettings;\r\n menuItems = vSettings.LayersMenu;\r\n enabledIds = bSettings.selectedItemIds;\r\n }\r\n }\r\n\r\n let alternations = bookmark.Settings?.menuItemAlternations;\r\n if (!alternations) {\r\n alternations = {};\r\n }\r\n\r\n const renderedItemIds: string[] = [];\r\n if (menuItems?.length && enabledIds?.length) {\r\n const traverseItems = async (item: MenuItem.IItem) => {\r\n if (alternations[item.id]) {\r\n // The only alternation we support right now is tag menu item ones.\r\n // The project view menu item contains the instruction to enable tags, the bookmark specifies which ones.\r\n if (item.Type == MenuItem.EType.Entities) {\r\n const eItem = item as MenuItem.Item.IEntities;\r\n if (eItem.BruceEntity.ExpandLayers) {\r\n const eItemAlt = alternations[item.id] as MenuItem.Item.IEntities;\r\n eItem.BruceEntity = {\r\n ...eItem.BruceEntity,\r\n SelectedExpandLayers: eItemAlt.BruceEntity?.SelectedExpandLayers,\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (enabledIds.includes(item.id)) {\r\n const itemId = await manager.RenderItem({\r\n item: item,\r\n apiGetter: apiGetter\r\n });\r\n renderedItemIds.push(itemId);\r\n }\r\n if (item.Children) {\r\n for (let i = 0; i < item.Children.length; i++) {\r\n await traverseItems(item.Children[i]);\r\n }\r\n }\r\n }\r\n for (let i = 0; i < menuItems.length; i++) {\r\n await traverseItems(menuItems[i]);\r\n }\r\n }\r\n return {\r\n menuItemIds: renderedItemIds,\r\n menuItems: menuItems\r\n };\r\n }\r\n}","import { ProjectViewTile, BruceApi, ProjectView, ProjectViewBookmark, ProjectViewLegacyTile, Tileset, ProgramKey, ENVIRONMENT } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EnsureNumber } from \"../internal/js-utils\";\r\n\r\nconst DEFAULT_BING_KEY = \"AqL0uYT5T84jiJeX55_b9zJeeP3MX2p1WLOHH4ljIEPZ7ZL2M81bYLzyYeSwuzzl\";\r\nconst DEFAULT_MAPBOX_KEY = \"pk.eyJ1IjoiYWxleHRodW5kZXIiLCJhIjoiY2psbHJxbnN5MTBvbzNxczZwMHNpeTI0MCJ9.fdoj2QW_7n8RV4e0NCFgZA\";\r\n\r\nconst re = /[\\0-\\x1F\\x7F-\\x9F\\xAD\\u0378\\u0379\\u037F-\\u0383\\u038B\\u038D\\u03A2\\u0528-\\u0530\\u0557\\u0558\\u0560\\u0588\\u058B-\\u058E\\u0590\\u05C8-\\u05CF\\u05EB-\\u05EF\\u05F5-\\u0605\\u061C\\u061D\\u06DD\\u070E\\u070F\\u074B\\u074C\\u07B2-\\u07BF\\u07FB-\\u07FF\\u082E\\u082F\\u083F\\u085C\\u085D\\u085F-\\u089F\\u08A1\\u08AD-\\u08E3\\u08FF\\u0978\\u0980\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09FC-\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A76-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF2-\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B55\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B78-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BFB-\\u0C00\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C34\\u0C3A-\\u0C3C\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5A-\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C77\\u0C80\\u0C81\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDD\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0D01\\u0D04\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D45\\u0D49\\u0D4F-\\u0D56\\u0D58-\\u0D5F\\u0D64\\u0D65\\u0D76-\\u0D78\\u0D80\\u0D81\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DF1\\u0DF5-\\u0E00\\u0E3B-\\u0E3E\\u0E5C-\\u0E80\\u0E83\\u0E85\\u0E86\\u0E89\\u0E8B\\u0E8C\\u0E8E-\\u0E93\\u0E98\\u0EA0\\u0EA4\\u0EA6\\u0EA8\\u0EA9\\u0EAC\\u0EBA\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F48\\u0F6D-\\u0F70\\u0F98\\u0FBD\\u0FCD\\u0FDB-\\u0FFF\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u137D-\\u137F\\u139A-\\u139F\\u13F5-\\u13FF\\u169D-\\u169F\\u16F1-\\u16FF\\u170D\\u1715-\\u171F\\u1737-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17DE\\u17DF\\u17EA-\\u17EF\\u17FA-\\u17FF\\u180F\\u181A-\\u181F\\u1878-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191D-\\u191F\\u192C-\\u192F\\u193C-\\u193F\\u1941-\\u1943\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DB-\\u19DD\\u1A1C\\u1A1D\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1A9F\\u1AAE-\\u1AFF\\u1B4C-\\u1B4F\\u1B7D-\\u1B7F\\u1BF4-\\u1BFB\\u1C38-\\u1C3A\\u1C4A-\\u1C4C\\u1C80-\\u1CBF\\u1CC8-\\u1CCF\\u1CF7-\\u1CFF\\u1DE7-\\u1DFB\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FC5\\u1FD4\\u1FD5\\u1FDC\\u1FF0\\u1FF1\\u1FF5\\u1FFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u2072\\u2073\\u208F\\u209D-\\u209F\\u20BB-\\u20CF\\u20F1-\\u20FF\\u218A-\\u218F\\u23F4-\\u23FF\\u2427-\\u243F\\u244B-\\u245F\\u2700\\u2B4D-\\u2B4F\\u2B5A-\\u2BFF\\u2C2F\\u2C5F\\u2CF4-\\u2CF8\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D71-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E3C-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u2FFF\\u3040\\u3097\\u3098\\u3100-\\u3104\\u312E-\\u3130\\u318F\\u31BB-\\u31BF\\u31E4-\\u31EF\\u321F\\u32FF\\u4DB6-\\u4DBF\\u9FCD-\\u9FFF\\uA48D-\\uA48F\\uA4C7-\\uA4CF\\uA62C-\\uA63F\\uA698-\\uA69E\\uA6F8-\\uA6FF\\uA78F\\uA794-\\uA79F\\uA7AB-\\uA7F7\\uA82C-\\uA82F\\uA83A-\\uA83F\\uA878-\\uA87F\\uA8C5-\\uA8CD\\uA8DA-\\uA8DF\\uA8FC-\\uA8FF\\uA954-\\uA95E\\uA97D-\\uA97F\\uA9CE\\uA9DA-\\uA9DD\\uA9E0-\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A\\uAA5B\\uAA7C-\\uAA7F\\uAAC3-\\uAADA\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F-\\uABBF\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBC2-\\uFBD2\\uFD40-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFE\\uFDFF\\uFE1A-\\uFE1F\\uFE27-\\uFE2F\\uFE53\\uFE67\\uFE6C-\\uFE6F\\uFE75\\uFEFD-\\uFF00\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFDF\\uFFE7\\uFFEF-\\uFFFB\\uFFFE\\uFFFF]/g;\r\n\r\n/**\r\n * Prepares a legacy imagery name for comparison.\r\n * Legacy data did not have ids... we do what we can.\r\n * @param name\r\n * @returns\r\n */\r\nfunction prepLegacyName(name: string): string {\r\n if (!name) {\r\n return \"\";\r\n }\r\n name = name.replace(/\\s/g, \"\");\r\n name = name.replace(re, \"\")\r\n name = name.toLowerCase();\r\n if (name === \"cwt\") {\r\n name = \"cesiumworldterrain\";\r\n }\r\n return name;\r\n}\r\n\r\n/**\r\n * Constructs an terrain provider for a default terrain type.\r\n * Warning: This does not add it to the viewer.\r\n * @param id\r\n * @returns\r\n */\r\nasync function renderDefaultTerrTile(id: ProjectViewTile.EDefaultTerrain): Promise<Cesium.TerrainProvider> {\r\n const CESIUM = Cesium as any;\r\n let provider: Cesium.TerrainProvider;\r\n switch (id) {\r\n case ProjectViewTile.EDefaultTerrain.CesiumWorldTerrain:\r\n // Handling difference between old and new cesium versions.\r\n if (CESIUM.createWorldTerrainAsync) {\r\n provider = await CESIUM.createWorldTerrainAsync({\r\n requestVertexNormals: true,\r\n requestWaterMask: false\r\n });\r\n }\r\n else {\r\n provider = Cesium.createWorldTerrain({\r\n requestVertexNormals: true,\r\n requestWaterMask: false\r\n });\r\n }\r\n break;\r\n case ProjectViewTile.EDefaultTerrain.FlatTerrain:\r\n provider = <any>new Cesium.EllipsoidTerrainProvider();\r\n break;\r\n case ProjectViewTile.EDefaultTerrain.LINZ:\r\n provider = <any>new Cesium.CesiumTerrainProvider({\r\n url: \"https://s3-ap-southeast-2.amazonaws.com/digitalnewzealand/PROD/Tilesets/nz-dem\",\r\n requestVertexNormals: true,\r\n requestWaterMask: false,\r\n requestMetadata: false\r\n });\r\n break;\r\n }\r\n return provider;\r\n}\r\n\r\n/**\r\n * Maps a legacy terrain's name to a default terrain id.\r\n * @param name\r\n * @returns\r\n */\r\nfunction legacyTerrIdToDefaultId(name: string): ProjectViewTile.EDefaultTerrain {\r\n name = prepLegacyName(name);\r\n switch (name) {\r\n case \"cesiumworldterrain\":\r\n return ProjectViewTile.EDefaultTerrain.CesiumWorldTerrain;\r\n case \"linz\":\r\n return ProjectViewTile.EDefaultTerrain.LINZ;\r\n case \"flatterrain\":\r\n return ProjectViewTile.EDefaultTerrain.FlatTerrain;\r\n }\r\n}\r\n\r\n/**\r\n * Returns if a given legacy terrain's name correspondings to a default source.\r\n * @param name\r\n * @returns\r\n */\r\nfunction isLegacyTerrainDefault(name: string): boolean {\r\n name = legacyTerrIdToDefaultId(name);\r\n return ProjectViewTile.DefaultTerrains.find(x => x.id == name) != null;\r\n}\r\n\r\n/**\r\n * Returns a best attempt at a unique id from a given legacy terrain source.\r\n * @param source\r\n * @returns\r\n */\r\nfunction createLegacyTerrId(source: ProjectViewLegacyTile.ITerrainSource): string {\r\n if (!source) {\r\n return \"\";\r\n }\r\n if (isLegacyTerrainDefault(source.Name)) {\r\n return source.Name;\r\n }\r\n if (source.SourceUrl) {\r\n return source.SourceUrl;\r\n }\r\n return \"\";\r\n}\r\n\r\n/**\r\n * Returns a best attempt at a unique id from a given legacy imagery source.\r\n * @param source\r\n * @returns\r\n */\r\nfunction createLegacyImageryId(source: ProjectViewLegacyTile.IMapSource): string {\r\n if (!source) {\r\n return \"\";\r\n }\r\n if (isLegacyImageryDefault(source.Name)) {\r\n return source.Name;\r\n }\r\n if (source.SourceUrl) {\r\n return source.SourceUrl;\r\n }\r\n return \"\";\r\n}\r\n\r\n/**\r\n * Turns Cesium collection of enabled imageries into an array.\r\n * @param viewer\r\n * @returns\r\n */\r\nfunction gatherEnabledImageries(viewer: Cesium.Viewer): Cesium.ImageryLayer[] {\r\n const collection = viewer.imageryLayers;\r\n const layers: Cesium.ImageryLayer[] = [];\r\n for (let i = 0; i < collection.length; i++) {\r\n const layer = collection.get(i);\r\n layers.push(layer);\r\n }\r\n return layers;\r\n}\r\n\r\nasync function findKey(apiGetter: BruceApi.IGetter, keyId: string, defaultKey: string) {\r\n let key: string = null;\r\n try {\r\n const {programKey: pKey} = await ProgramKey.Get({\r\n api: apiGetter.getApi(),\r\n programId: keyId\r\n });\r\n key = pKey.Key;\r\n }\r\n catch (e) {\r\n let doLog = true;\r\n if (e && typeof e === \"object\") {\r\n if (e.Code == \"NotFound\") {\r\n doLog = false;\r\n }\r\n }\r\n if (doLog) {\r\n console.error(e);\r\n }\r\n }\r\n return key && key.length ? key : defaultKey;\r\n}\r\n\r\n/**\r\n * Constructs an imagery provider for a default imagery type.\r\n * Warning: This does not add it to the viewer.\r\n * @param apiGetter\r\n * @param id\r\n * @returns\r\n */\r\nasync function renderDefaultMapTile(apiGetter: BruceApi.IGetter, id: ProjectViewTile.EDefaultImagery): Promise<Cesium.ImageryProvider> {\r\n let provider: Cesium.ImageryProvider;\r\n switch (id) {\r\n case ProjectViewTile.EDefaultImagery.BingMapsAerial:\r\n provider = new Cesium.BingMapsImageryProvider({\r\n url: \"https://dev.virtualearth.net\",\r\n mapStyle: Cesium.BingMapsStyle.AERIAL,\r\n key: await findKey(apiGetter, ProgramKey.EProgramId.BingMaps, DEFAULT_BING_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.BingMapsAerialWithLabels:\r\n provider = new Cesium.BingMapsImageryProvider({\r\n url: \"https://dev.virtualearth.net\",\r\n mapStyle: Cesium.BingMapsStyle.AERIAL_WITH_LABELS,\r\n key: await findKey(apiGetter, ProgramKey.EProgramId.BingMaps, DEFAULT_BING_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.BingMapsRoads:\r\n provider = new Cesium.BingMapsImageryProvider({\r\n url: \"https://dev.virtualearth.net\",\r\n mapStyle: Cesium.BingMapsStyle.ROAD_ON_DEMAND,\r\n key: await findKey(apiGetter, ProgramKey.EProgramId.BingMaps, DEFAULT_BING_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.MapboxSatellite:\r\n provider = new Cesium.MapboxImageryProvider({\r\n mapId: \"mapbox.satellite\",\r\n accessToken: await findKey(apiGetter, ProgramKey.EProgramId.Mapbox, DEFAULT_MAPBOX_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.MapBoxStreets:\r\n provider = new Cesium.MapboxStyleImageryProvider({\r\n styleId: \"satellite-streets-v11\",\r\n accessToken: await findKey(apiGetter, ProgramKey.EProgramId.Mapbox, DEFAULT_MAPBOX_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.MapBoxStreetsClassic:\r\n provider = new Cesium.MapboxStyleImageryProvider({\r\n styleId: \"streets-v11\",\r\n accessToken: await findKey(apiGetter, ProgramKey.EProgramId.Mapbox, DEFAULT_MAPBOX_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.EsriWorldImagery:\r\n provider = new Cesium.ArcGisMapServerImageryProvider({\r\n url:\"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer\",\r\n enablePickFeatures: false\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.EsriWorldStreetMap:\r\n provider = new Cesium.ArcGisMapServerImageryProvider({\r\n url:\"https://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer\",\r\n enablePickFeatures: false\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.EsriNationalGeographic:\r\n provider = new Cesium.ArcGisMapServerImageryProvider({\r\n url:\"https://services.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/\",\r\n enablePickFeatures: false\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.OpenStreetMap:\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: \"https://a.tile.openstreetmap.org/\"\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.LINZ:\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: \"https://s3-ap-southeast-2.amazonaws.com/digitalnewzealand/PROD/Tilesets/nz-img\",\r\n fileExtension: \"jpg\"\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.StamenWaterColor:\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: \"https://stamen-tiles.a.ssl.fastly.net/watercolor/\"\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.StamenToner:\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: \"https://stamen-tiles.a.ssl.fastly.net/toner/\"\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.Grid:\r\n provider = new Cesium.GridImageryProvider({\r\n tilingScheme: new Cesium.GeographicTilingScheme(),\r\n cells: 0,\r\n color: Cesium.Color.fromCssColorString(\"rgb(97, 151, 237)\"),\r\n glowColor: Cesium.Color.fromCssColorString(\"rgb(54, 54, 54)\"),\r\n glowWidth: 4,\r\n backgroundColor: Cesium.Color.TRANSPARENT,\r\n tileWidth: 256,\r\n tileHeight: 256,\r\n canvasSize: 256\r\n });\r\n break;\r\n }\r\n return provider;\r\n}\r\n\r\n/**\r\n * Maps a legacy imagery's name to a default imagery id.\r\n * @param name\r\n * @returns\r\n */\r\nfunction legacyMapIdToDefaultId(name: string): ProjectViewTile.EDefaultImagery {\r\n name = prepLegacyName(name);\r\n switch (name) {\r\n case \"bingmapsaerial\":\r\n return ProjectViewTile.EDefaultImagery.BingMapsAerial;\r\n case \"bingmapsaerialwithlabels\":\r\n return ProjectViewTile.EDefaultImagery.BingMapsAerialWithLabels;\r\n case \"bingmapsroads\":\r\n return ProjectViewTile.EDefaultImagery.BingMapsRoads;\r\n case \"mapboxsatellite\":\r\n return ProjectViewTile.EDefaultImagery.MapboxSatellite;\r\n case \"mapboxstreets\":\r\n return ProjectViewTile.EDefaultImagery.MapBoxStreets;\r\n case \"mapboxstreetsclassic\":\r\n return ProjectViewTile.EDefaultImagery.MapBoxStreetsClassic;\r\n case \"esriworldimagery\":\r\n return ProjectViewTile.EDefaultImagery.EsriWorldImagery;\r\n case \"esriworldstreetmap\":\r\n return ProjectViewTile.EDefaultImagery.EsriWorldStreetMap;\r\n case \"esrinationalgeographic\":\r\n return ProjectViewTile.EDefaultImagery.EsriNationalGeographic;\r\n case \"openstreetmap\":\r\n return ProjectViewTile.EDefaultImagery.OpenStreetMap;\r\n case \"stamenwatercolor\":\r\n return ProjectViewTile.EDefaultImagery.StamenWaterColor;\r\n case \"stamentoner\":\r\n return ProjectViewTile.EDefaultImagery.StamenToner;\r\n case \"linz\":\r\n return ProjectViewTile.EDefaultImagery.LINZ;\r\n case \"grid\":\r\n return ProjectViewTile.EDefaultImagery.Grid;\r\n }\r\n}\r\n\r\n/**\r\n * Returns if a given legacy imagery's name correspondings to a default source.\r\n * @param name\r\n * @returns\r\n */\r\nfunction isLegacyImageryDefault(name: string): boolean {\r\n name = legacyMapIdToDefaultId(name);\r\n return ProjectViewTile.DefaultImagery.find(x => x.id == name) != null;\r\n}\r\n\r\n/**\r\n * We don't need to provide the \".\" in the file extension to Cesium's providers.\r\n * @param ext\r\n * @returns\r\n */\r\nfunction prepareFileExt(ext: string) {\r\n if (!ext) {\r\n return null;\r\n }\r\n ext = ext.replace(\".\", \"\");\r\n return ext;\r\n}\r\n\r\n/**\r\n * Creates an imagery layer from a given provider.\r\n * This exists because the constructor for it has changed between cesium versions.\r\n * @param provider\r\n * @returns\r\n */\r\nfunction createImageryLayer(provider: Cesium.ImageryProvider): TileRenderEngine.Map.LegacyNavigator.ILayerExt {\r\n const CIL = Cesium.ImageryLayer as any;\r\n if (CIL.length == 2) {\r\n return new CIL(provider, {});\r\n }\r\n return new CIL(provider);\r\n}\r\n\r\nexport namespace TileRenderEngine {\r\n /**\r\n * Legacy data did name comparisons instead of ids.\r\n * We need to strip spacing, remove special characters, and make lowercase before comparison...\r\n * @param nameA\r\n * @param nameB\r\n */\r\n export function CompareLegacyNames(nameA: string, nameB: string): boolean {\r\n nameA = prepLegacyName(nameA);\r\n nameB = prepLegacyName(nameB);\r\n return nameA === nameB;\r\n }\r\n\r\n export namespace Map {\r\n export namespace LegacyNavigator {\r\n export interface ILayerExt extends Cesium.ImageryLayer {\r\n _bId?: string;\r\n _bName?: string;\r\n }\r\n\r\n export interface IViewParams {\r\n bookmarkId: string;\r\n viewId: string;\r\n apiGetter?: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n\r\n // TODO: How is render engine supposed to know about this?\r\n // We need a generic way for this information be feed from clients.\r\n ignoreIds?: string[];\r\n }\r\n\r\n export interface IParams {\r\n data: ProjectViewLegacyTile.IMapSource;\r\n apiGetter?: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export async function Render(params: IParams): Promise<ILayerExt> {\r\n if (!params.apiGetter) {\r\n params.apiGetter = ENVIRONMENT.Api().GetBruceGetter();\r\n }\r\n\r\n const enabled: ILayerExt[] = gatherEnabledImageries(params.viewer);\r\n const tile = params.data;\r\n const bId = createLegacyImageryId(tile);\r\n\r\n let layer: ILayerExt = <ILayerExt>enabled.find(x => x._bId == bId);\r\n if (layer) {\r\n // Already exists.\r\n }\r\n else if (isLegacyImageryDefault(tile.Name)) {\r\n const defaultId = legacyMapIdToDefaultId(tile.Name);\r\n const provider = await renderDefaultMapTile(params.apiGetter, defaultId);\r\n if (provider) {\r\n layer = createImageryLayer(provider);\r\n }\r\n }\r\n else if (tile.SourceUrl) {\r\n let provider: Cesium.ImageryProvider = <any>null;\r\n let min = tile.Minimum;\r\n let max = tile.Maximum;\r\n if (min != undefined && min <= -1) {\r\n min = undefined;\r\n }\r\n if (max != undefined && max <= -1) {\r\n max = undefined;\r\n }\r\n\r\n switch (tile.Type) {\r\n case \"BruceImagery\":\r\n provider = new Cesium.UrlTemplateImageryProvider({\r\n url: tile.SourceUrl,\r\n tileHeight: 256,\r\n tileWidth: 256\r\n });\r\n break;\r\n case \"ArcGisImagery\":\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: tile.SourceUrl,\r\n fileExtension: prepareFileExt(tile.FileExtension),\r\n minimumLevel: min,\r\n maximumLevel: max\r\n });\r\n break;\r\n case \"TileMapImagery\":\r\n provider = new Cesium.TileMapServiceImageryProvider({\r\n url: tile.SourceUrl,\r\n fileExtension: prepareFileExt(tile.FileExtension),\r\n minimumLevel: min,\r\n maximumLevel: max\r\n });\r\n break;\r\n case \"OpenStreetMapImagery\":\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: tile.SourceUrl,\r\n fileExtension: prepareFileExt(tile.FileExtension),\r\n minimumLevel: min,\r\n maximumLevel: max\r\n });\r\n break;\r\n case \"MapBoxImagery\":\r\n var mapboxKey = tile.ProgramKey ? tile.ProgramKey : await findKey(params.apiGetter, ProgramKey.EProgramId.Mapbox, null);\r\n provider = new Cesium.UrlTemplateImageryProvider({\r\n url: \"https://api.mapbox.com/styles/v1/\"\r\n + tile.MapBoxUsername + \"/\" + tile.MapBoxID +\r\n \"/tiles/256/{z}/{x}/{y}?access_token=\"\r\n + mapboxKey\r\n });\r\n break;\r\n }\r\n if (provider) {\r\n layer = createImageryLayer(provider);\r\n }\r\n }\r\n\r\n if (layer) {\r\n layer._bId = bId;\r\n layer._bName = tile.Name;\r\n if (!params.viewer.imageryLayers.contains(layer)) {\r\n params.viewer.imageryLayers.add(layer);\r\n }\r\n }\r\n return layer;\r\n }\r\n\r\n export async function RenderView(params: IViewParams): Promise<void> {\r\n if (!params.apiGetter) {\r\n params.apiGetter = ENVIRONMENT.Api().GetBruceGetter();\r\n }\r\n\r\n const api = params.apiGetter.getApi();\r\n\r\n const view = (await ProjectView.Get({\r\n api,\r\n viewId: params.viewId\r\n })).view as ProjectView.LegacyNavigator.IView;\r\n\r\n let bookmark: ProjectViewBookmark.LegacyNavigator.IBookmark = <any>null;\r\n if (params.bookmarkId) {\r\n bookmark = (await ProjectViewBookmark.Get({\r\n api,\r\n viewId: params.viewId,\r\n bookmarkId: params.bookmarkId\r\n })).bookmark as ProjectViewBookmark.LegacyNavigator.IBookmark;\r\n }\r\n\r\n const vSettings = view.Settings;\r\n const bSettings = bookmark?.Settings;\r\n\r\n const data: ProjectViewLegacyTile.IMapSource[] = [];\r\n const dataNames: string[] = [];\r\n if (bSettings?.imagery) {\r\n for (let i = 0; i < bSettings.imagery.length; i++) {\r\n const source = bSettings.imagery[i];\r\n dataNames.push(source.title);\r\n }\r\n }\r\n else if (vSettings?.DefaultMapTiles) {\r\n dataNames.push(vSettings.DefaultMapTiles);\r\n }\r\n const tiles = vSettings?.CesiumMapSources ?? [];\r\n await ProjectViewLegacyTile.MergeMapTemplateData({\r\n getter: params.apiGetter,\r\n sources: tiles,\r\n addIfMissing: vSettings?.CesiumMapSources == null\r\n });\r\n\r\n for (let i = 0; i < dataNames.length; i++) {\r\n const name = dataNames[i];\r\n for (let j = 0; j < tiles.length; j++) {\r\n const tile = tiles[j];\r\n if (CompareLegacyNames(tile.Name, name)) {\r\n data.push(tile);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let enabled: ILayerExt[] = gatherEnabledImageries(params.viewer);\r\n const layers: Cesium.ImageryLayer[] = [];\r\n\r\n // Gather layers we want to render.\r\n // Any new layer is added to viewer at the bottom.\r\n if (params.ignoreIds) {\r\n for (let i = 0; i < params.ignoreIds.length; i++) {\r\n const id = params.ignoreIds[i];\r\n const layer = enabled.find((x) => {\r\n const layer = x as ILayerExt;\r\n if (layer._bId === id) {\r\n return true;\r\n }\r\n });\r\n if (layer) {\r\n layers.push(layer);\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < data.length; i++) {\r\n const tile = data[i];\r\n const layer = await Render({\r\n apiGetter: params.apiGetter,\r\n viewer: params.viewer,\r\n data: tile,\r\n });\r\n if (layer) {\r\n layers.push(layer);\r\n }\r\n }\r\n\r\n // Sort currently enabled (after new ones added) to match desired order.\r\n enabled = gatherEnabledImageries(params.viewer);\r\n enabled.sort((a, b) => {\r\n const indexA = layers.indexOf(a);\r\n const indexB = layers.indexOf(b);\r\n if (indexA < 0 && indexB < 0) {\r\n return 0;\r\n }\r\n if (indexA < 0) {\r\n return 1;\r\n }\r\n if (indexB < 0) {\r\n return -1;\r\n }\r\n return indexA - indexB;\r\n });\r\n\r\n // Move enabled layers to match desired order.\r\n // Remove any layers that aren't in enabled list.\r\n for (let i = 0; i < enabled.length; i++) {\r\n const layer = enabled[i];\r\n if (layers.includes(layer)) {\r\n params.viewer.imageryLayers.raiseToTop(layer);\r\n }\r\n else {\r\n params.viewer.imageryLayers.remove(layer);\r\n }\r\n }\r\n }\r\n }\r\n\r\n export namespace Navigator {\r\n export interface IProviderExt extends Cesium.ImageryLayer {\r\n _bMeta?: ProjectViewTile.ITileMeta;\r\n }\r\n\r\n export interface IParams {\r\n apiGetter?: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n tiles: ProjectViewTile.IBookmarkImagery[];\r\n }\r\n\r\n export async function GetOrCreateLayer(params: {\r\n viewer: Cesium.Viewer,\r\n apiGetter?: BruceApi.IGetter,\r\n meta: ProjectViewTile.ITileMeta\r\n }): Promise<Cesium.ImageryLayer> {\r\n let {viewer, apiGetter, meta} = params;\r\n if (!apiGetter) {\r\n apiGetter = ENVIRONMENT.Api().GetBruceGetter();\r\n }\r\n\r\n // Don't create a new layer if one already exists.\r\n const enabled = gatherEnabledImageries(viewer);\r\n for (let i = 0; i < enabled.length; i++) {\r\n const layer = enabled[i];\r\n const layerMeta = (layer as IProviderExt)._bMeta;\r\n if (layerMeta && layerMeta.tilesetId === meta.tilesetId && layerMeta.accountId === meta.accountId) {\r\n return layer;\r\n }\r\n }\r\n\r\n const defaultImg = meta.accountId ? null : ProjectViewTile.DefaultImagery.find(\r\n x => x.id === meta.tilesetId\r\n );\r\n\r\n let provider: Cesium.ImageryProvider = <any>null;\r\n if (defaultImg) {\r\n provider = await renderDefaultMapTile(apiGetter, defaultImg.id);\r\n }\r\n else {\r\n const api = apiGetter.getApi(meta.accountId);\r\n // Ensure regional url is loaded.\r\n // When loading stuff in the same account as the default it's likely already loaded,\r\n // but if we just made an API instance for some external account then it won't be loaded yet.\r\n await api.Loading;\r\n\r\n const {tileset} = await Tileset.Get({\r\n api,\r\n tilesetId: meta.tilesetId\r\n });\r\n\r\n let boundaries: Cesium.Rectangle = undefined;\r\n const settings = tileset?.settings as Tileset.Settings.IEntitiesMap;\r\n if (settings && settings.boundaries) {\r\n const minLat = settings.boundaries.minLatitude;\r\n const maxLat = settings.boundaries.maxLatitude;\r\n const minLon = settings.boundaries.minLongitude;\r\n const maxLon = settings.boundaries.maxLongitude;\r\n boundaries = Cesium.Rectangle.fromDegrees(minLon, minLat, maxLon, maxLat);\r\n }\r\n let minLevel = settings?.levelMin;\r\n let maxLevel = settings?.levelMax;\r\n const hasLevels = !isNaN(minLevel) && !isNaN(maxLevel);\r\n\r\n if (tileset.type === Tileset.EType.GeoMap) {\r\n provider = new Cesium.TileMapServiceImageryProvider({\r\n url: Tileset.GetPublicFileUrl({\r\n api,\r\n tilesetId: meta.tilesetId,\r\n file: \"\",\r\n viaCdn: true,\r\n viaCdnCacheToken: tileset.generateVersion\r\n }),\r\n fileExtension: \"png\",\r\n // Tested to not cause increased lag.\r\n rectangle: boundaries,\r\n maximumLevel: hasLevels ? maxLevel : undefined,\r\n minimumLevel: hasLevels ? minLevel : undefined,\r\n });\r\n }\r\n else if (tileset.type === Tileset.EType.ExternalGeoMap) {\r\n const settings = tileset.settings as Tileset.Settings.IExternalMap;\r\n switch (settings.mapType) {\r\n case Tileset.Settings.EExternalMapType.CesiumIon:\r\n var cesiumIonKey = settings.key ? settings.key : await findKey(apiGetter, ProgramKey.EProgramId.CesiumIon, null);\r\n provider = new Cesium.IonImageryProvider({\r\n assetId: Number(settings.externalId),\r\n accessToken: cesiumIonKey\r\n });\r\n break;\r\n case Tileset.Settings.EExternalMapType.MapBoxImagery:\r\n var mapboxKey = settings.key ? settings.key : await findKey(apiGetter, ProgramKey.EProgramId.Mapbox, null);\r\n provider = new Cesium.UrlTemplateImageryProvider({\r\n url: \"https://api.mapbox.com/styles/v1/\"\r\n + settings.account + \"/\" + settings.styleId +\r\n \"/tiles/256/{z}/{x}/{y}?access_token=\"\r\n + mapboxKey\r\n });\r\n break;\r\n case Tileset.Settings.EExternalMapType.OpenStreetMapImagery:\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: settings.url,\r\n fileExtension: prepareFileExt(settings.fileExtension),\r\n // Unused until tested properly. In the past these settings caused large lag.\r\n // rectangle: boundaries,\r\n // maximumLevel: hasLevels ? maxLevel : undefined,\r\n // minimumLevel: hasLevels ? minLevel : undefined,\r\n });\r\n break;\r\n case Tileset.Settings.EExternalMapType.TileMapImagery:\r\n provider = new Cesium.TileMapServiceImageryProvider({\r\n url: settings.url,\r\n fileExtension: prepareFileExt(settings.fileExtension),\r\n // Unused until tested properly. In the past these settings caused large lag.\r\n // rectangle: boundaries,\r\n // maximumLevel: hasLevels ? maxLevel : undefined,\r\n // minimumLevel: hasLevels ? minLevel : undefined,\r\n });\r\n break;\r\n }\r\n }\r\n else if (tileset.type === Tileset.EType.EntitiesMap) {\r\n provider = new Cesium.UrlTemplateImageryProvider({\r\n url: Tileset.GetPublicFileUrl({\r\n api,\r\n tilesetId: meta.tilesetId,\r\n file: \"{z}/{x}/{y}.png\",\r\n viaCdn: true,\r\n viaCdnCacheToken: tileset.generateVersion\r\n }),\r\n tileHeight: 256,\r\n tileWidth: 256\r\n // Unused until tested properly. In the past these settings caused large lag.\r\n // rectangle: boundaries,\r\n // minimumLevel: hasLevels ? minLevel : undefined,\r\n // maximumLevel: hasLevels ? maxLevel : undefined,\r\n });\r\n }\r\n }\r\n if (provider) {\r\n // We need some way to add meta without appending to layers.\r\n // Adding to layers triggers an event, if meta is missing then we'll not know what imagery is enabled.\r\n // In the meantime we use \"lowerToBottom\" to trigger a secondary event with updated data...\r\n const layer: IProviderExt = viewer.imageryLayers.addImageryProvider(provider);\r\n layer._bMeta = meta;\r\n viewer.imageryLayers.lowerToBottom(layer);\r\n return layer;\r\n }\r\n return null;\r\n }\r\n\r\n export async function Render(params: IParams) {\r\n if (!params.apiGetter) {\r\n params.apiGetter = ENVIRONMENT.Api().GetBruceGetter();\r\n }\r\n\r\n // Ensure layers exist for all enabled sources.\r\n for (let i = 0; i < params.tiles.length; i++) {\r\n const enabled = params.tiles[i];\r\n await GetOrCreateLayer({\r\n viewer: params.viewer, \r\n apiGetter: params.apiGetter, \r\n meta: {\r\n accountId: enabled.accountId,\r\n tilesetId: enabled.tilesetId,\r\n }\r\n })\r\n }\r\n\r\n const curEnabled = params.viewer.imageryLayers;\r\n const toDisable: IProviderExt[] = [];\r\n const curEnabledArr: IProviderExt[] = [];\r\n\r\n for (let i = 0; i < curEnabled.length; i++) {\r\n const layer = curEnabled.get(i) as IProviderExt;\r\n const meta = layer?._bMeta;\r\n const disable = !params.tiles.find(x => x.accountId === meta?.accountId && x.tilesetId === meta?.tilesetId);\r\n if (disable) {\r\n toDisable.push(layer);\r\n }\r\n else {\r\n curEnabledArr.push(layer);\r\n }\r\n }\r\n for (let i = 0; i < toDisable.length; i++) {\r\n params.viewer.imageryLayers.remove(toDisable[i]);\r\n }\r\n\r\n for (let i = 0; i < params.tiles.length; i++) {\r\n const enabled = params.tiles[i];\r\n const layer = curEnabledArr.find(x => x._bMeta?.accountId === enabled.accountId && x._bMeta?.tilesetId === enabled.tilesetId);\r\n if (layer) {\r\n params.viewer.imageryLayers.raiseToTop(layer);\r\n layer.alpha = EnsureNumber(enabled.alpha == null ? 1 : enabled.alpha);\r\n layer.brightness = EnsureNumber(enabled.brightness == null ? 1 : enabled.brightness);\r\n layer.contrast = EnsureNumber(enabled.contrast == null ? 1 : enabled.contrast);\r\n layer.hue = EnsureNumber(enabled.hue == null ? 0 : enabled.hue);\r\n layer.saturation = EnsureNumber(enabled.saturation == null ? 1 : enabled.saturation);\r\n layer.gamma = EnsureNumber(enabled.gamma == null ? 1 : enabled.gamma);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n export namespace Terrain {\r\n export namespace LegacyNavigator {\r\n export interface IProviderExt extends Cesium.CesiumTerrainProvider {\r\n _bId: string;\r\n _bName: string;\r\n }\r\n\r\n export interface IParams {\r\n data: ProjectViewLegacyTile.ITerrainSource;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export interface IViewParams {\r\n bookmarkId: string;\r\n viewId: string;\r\n apiGetter?: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export async function Render(params: IParams): Promise<void> {\r\n const bId = createLegacyTerrId(params.data);\r\n const curProvider = params.viewer.terrainProvider as IProviderExt;\r\n if (curProvider._bId && curProvider._bId === bId) {\r\n return;\r\n }\r\n\r\n let provider: IProviderExt = <any>null;\r\n if (isLegacyTerrainDefault(params.data.Name)) {\r\n const id = legacyTerrIdToDefaultId(params.data.Name);\r\n provider = await renderDefaultTerrTile(id) as IProviderExt;\r\n }\r\n else if (params.data.SourceUrl) {\r\n provider = <any>new Cesium.CesiumTerrainProvider({\r\n url: <string>params.data.SourceUrl,\r\n requestWaterMask: params.data.RequestWaterMask,\r\n requestVertexNormals: true\r\n });\r\n }\r\n if (provider) {\r\n provider._bId = bId;\r\n provider._bName = params.data?.Name;\r\n params.viewer.terrainProvider = provider;\r\n }\r\n }\r\n\r\n export async function RenderView(params: IViewParams): Promise<void> {\r\n if (!params.apiGetter) {\r\n params.apiGetter = ENVIRONMENT.Api().GetBruceGetter();\r\n }\r\n\r\n const api = params.apiGetter.getApi();\r\n const view = (await ProjectView.Get({\r\n api,\r\n viewId: params.viewId\r\n })).view as ProjectView.LegacyNavigator.IView;\r\n let bookmark: ProjectViewBookmark.LegacyNavigator.IBookmark = <any>null;\r\n if (params.bookmarkId) {\r\n bookmark = (await ProjectViewBookmark.Get({\r\n api,\r\n viewId: params.viewId,\r\n bookmarkId: params.bookmarkId\r\n })).bookmark as ProjectViewBookmark.LegacyNavigator.IBookmark;\r\n }\r\n\r\n const vSettings = view.Settings;\r\n const bSettings = bookmark?.Settings;\r\n\r\n let terrainTiles = vSettings?.CesiumTerrainSources ?? [];\r\n let terrainTile: ProjectViewLegacyTile.ITerrainSource = <any>null;\r\n let terrainTileName: string = <any>null;\r\n if (bookmark?.Settings?.terrain) {\r\n terrainTileName = bSettings.terrain;\r\n }\r\n else {\r\n terrainTileName = <string>vSettings?.DefaultTerrain;\r\n }\r\n await ProjectViewLegacyTile.MergeTerrainTemplateData({\r\n getter: params.apiGetter,\r\n sources: terrainTiles,\r\n addIfMissing: vSettings?.CesiumTerrainSources == null\r\n });\r\n for (let i = 0; i < terrainTiles.length; i++) {\r\n const tile = terrainTiles[i];\r\n if (TileRenderEngine.CompareLegacyNames(tile.Name, terrainTileName)) {\r\n terrainTile = tile;\r\n break;\r\n }\r\n }\r\n if (terrainTile) {\r\n await Render({\r\n data: terrainTile,\r\n viewer: params.viewer,\r\n });\r\n }\r\n }\r\n }\r\n\r\n export namespace Navigator {\r\n export interface IProviderExt extends Cesium.CesiumTerrainProvider {\r\n _bMeta?: ProjectViewTile.ITileMeta;\r\n }\r\n\r\n export interface IParams {\r\n apiGetter?: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n tile: ProjectViewTile.IBookmarkTerrain;\r\n }\r\n\r\n export async function Render(params: IParams): Promise<void> {\r\n if (!params.apiGetter) {\r\n params.apiGetter = ENVIRONMENT.Api().GetBruceGetter();\r\n }\r\n\r\n // Already enabled.\r\n const enabledMeta = (params.viewer.terrainProvider as IProviderExt)?._bMeta;\r\n if (\r\n enabledMeta?.tilesetId === params.tile.tilesetId &&\r\n enabledMeta?.accountId === params.tile.accountId\r\n ) {\r\n return;\r\n }\r\n // Known default that may have been enabled prior to utility doing it.\r\n if (!enabledMeta) {\r\n const provider = params.viewer.terrainProvider as IProviderExt;\r\n let leave = false;\r\n if (\r\n params.tile.tilesetId == ProjectViewTile.EDefaultTerrain.FlatTerrain &&\r\n provider instanceof Cesium.EllipsoidTerrainProvider\r\n ) {\r\n leave = true;\r\n }\r\n // TODO: Check for cesium world terrain if we can easily determine that it's enabled.\r\n if (leave) {\r\n provider._bMeta = {\r\n tilesetId: params.tile.tilesetId,\r\n accountId: params.tile.accountId\r\n }\r\n return;\r\n }\r\n }\r\n\r\n const defaultTerr = params.tile.accountId ? null : ProjectViewTile.DefaultTerrains.find(\r\n x => x.id === params.tile.tilesetId\r\n );\r\n\r\n let provider: IProviderExt = null;\r\n if (defaultTerr) {\r\n provider = await renderDefaultTerrTile(defaultTerr.id) as IProviderExt;\r\n }\r\n else {\r\n const api = params.apiGetter.getApi(params.tile.accountId);\r\n // Ensure regional url is loaded.\r\n // When loading stuff in the same account as the default it's likely already loaded,\r\n // but if we just made an API instance for some external account then it won't be loaded yet.\r\n await api.Loading;\r\n\r\n const {tileset} = await Tileset.Get({\r\n api,\r\n tilesetId: params.tile.tilesetId\r\n });\r\n\r\n let url: string;\r\n let vertexes: boolean = true;\r\n if (tileset.type === Tileset.EType.Terrain) {\r\n url = Tileset.GetPublicFileUrl({\r\n api,\r\n tilesetId: tileset.id,\r\n file: \"\",\r\n viaCdn: true,\r\n viaCdnCacheToken: tileset.generateVersion\r\n });\r\n }\r\n else if (tileset.type === Tileset.EType.ExternalTerrain) {\r\n const settings = tileset.settings as Tileset.Settings.IExternalTerrain;\r\n url = settings.url;\r\n vertexes = settings.requestVertexNormals == null ? true : settings.requestVertexNormals;\r\n }\r\n else {\r\n console.error(\"Invalid tileset type.\", tileset);\r\n }\r\n\r\n if (url) {\r\n provider = new Cesium.CesiumTerrainProvider({\r\n url: url,\r\n requestVertexNormals: vertexes\r\n });\r\n }\r\n }\r\n\r\n if (provider) {\r\n provider._bMeta = {\r\n accountId: params.tile.accountId,\r\n tilesetId: params.tile.tilesetId\r\n };\r\n params.viewer.terrainProvider = provider;\r\n }\r\n }\r\n }\r\n }\r\n}","import { ProjectViewBookmark, ProjectViewTile } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { TileRenderEngine } from \"../rendering/tile-render-engine\";\n\nexport const CESIUM_INSPECTOR_KEY = \"_nextspace_inspector\";\n\nexport namespace ViewUtils {\n export function GatherLegacyMapTiles(params: {\n viewer: Cesium.Viewer\n }): {\n imagery: ProjectViewBookmark.LegacyNavigator.IBookmarkImagery[]\n } {\n const viewer = params.viewer;\n const collection = viewer.imageryLayers;\n const tiles: ProjectViewBookmark.LegacyNavigator.IBookmarkImagery[] = [];\n for (let i = 0; i < collection.length; i++) {\n const layer = collection.get(i) as TileRenderEngine.Map.LegacyNavigator.ILayerExt;\n if (layer._bName) {\n tiles.push({\n alpha: layer.alpha,\n brightness: layer.brightness,\n contrast: layer.contrast,\n hue: layer.hue,\n saturation: layer.saturation,\n gamma: layer.gamma,\n title: layer._bName,\n });\n }\n }\n return {\n imagery: tiles.reverse()\n };\n }\n\n export function GatherLegacyTerrainTile(params: {\n viewer: Cesium.Viewer\n }): {\n terrain: string\n } {\n const viewer = params.viewer;\n const enabled = viewer.terrainProvider as TileRenderEngine.Terrain.LegacyNavigator.IProviderExt;\n if (enabled?._bName) {\n return {\n terrain: enabled._bName\n };\n }\n return {\n terrain: \"flatterrain\"\n };\n }\n\n export function GatherMapTiles(params: {\n viewer: Cesium.Viewer\n }): {\n imagery: ProjectViewTile.IBookmarkImagery[]\n } {\n const viewer = params.viewer;\n const imagery = viewer.imageryLayers;\n const tiles: ProjectViewTile.IBookmarkImagery[] = [];\n for (let i = 0; i < imagery.length; i++) {\n const provider = imagery.get(i) as TileRenderEngine.Map.Navigator.IProviderExt;\n if (provider._bMeta) {\n const idCombo = provider._bMeta.accountId + provider._bMeta.tilesetId;\n if (!tiles.find(x => x.accountId + x.tilesetId === idCombo)) {\n tiles.push({\n accountId: provider._bMeta.accountId,\n tilesetId: provider._bMeta.tilesetId,\n alpha: provider.alpha,\n brightness: provider.brightness,\n contrast: provider.contrast,\n hue: provider.hue,\n saturation: provider.saturation,\n gamma: provider.gamma\n });\n }\n }\n }\n return {\n imagery: tiles\n };\n }\n\n export function GatherTerrainTile(params: {\n viewer: Cesium.Viewer\n }): {\n terrain: ProjectViewTile.IBookmarkTerrain\n } {\n const viewer = params.viewer;\n const provider = viewer.terrainProvider as TileRenderEngine.Terrain.Navigator.IProviderExt;\n if (provider._bMeta) {\n return {\n terrain: {\n accountId: provider._bMeta.accountId,\n tilesetId: provider._bMeta.tilesetId,\n }\n };\n }\n return null;\n }\n\n export function SetTerrainWireframeStatus(params: {\n viewer: Cesium.Viewer,\n status: boolean\n }) {\n if (!params.viewer[CESIUM_INSPECTOR_KEY]) {\n const InspectorClass = Cesium.CesiumInspector as any;\n if (InspectorClass) {\n const inspector = new InspectorClass(document.createElement(\"div\"), params.viewer.scene);\n (inspector.container as HTMLElement).style.display = \"none\";\n params.viewer[CESIUM_INSPECTOR_KEY] = inspector;\n }\n }\n if (params.viewer[CESIUM_INSPECTOR_KEY]) {\n params.viewer[CESIUM_INSPECTOR_KEY].viewModel.wireframe = params.status;\n }\n }\n\n export function GetTerrainWireframeStatus(params: {\n viewer: Cesium.Viewer\n }) {\n if (!params.viewer[CESIUM_INSPECTOR_KEY]) {\n return false;\n }\n return params.viewer[CESIUM_INSPECTOR_KEY]?.viewModel?.wireframe;\n }\n}","import { ENVIRONMENT, BruceApi, Camera, Carto, MenuItem, ProjectView, ProjectViewBookmark, ProjectViewTile, } from \"bruce-models\";\nimport { MenuItemManager } from \"./menu-item-manager\";\nimport { MenuItemCreator } from \"./menu-item-creator\";\nimport * as Cesium from \"cesium\";\nimport { TileRenderEngine } from \"./tile-render-engine\";\nimport { EnsureNumber } from \"../internal/js-utils\";\nimport { ViewUtils } from \"../utils/view-utils\";\nimport { ViewerUtils } from \"../viewer/viewer-utils\";\n\n// TODO: Move these to the data model.\nconst MIN_SHADOW_SIZE = 2048;\nconst MAX_SHADOW_SIZE = 32768;\nconst RELATION_MENU_ITEM_ID = \"BOOKMARK_ENTITY_RELATIONS\";\n\n/**\n * Renders DATA_VERSION = 1 navigator.\n * @param params\n * @param bookmark\n * @param view\n */\nasync function renderLegacyNavigator(\n params: ViewRenderEngine.IRenderParams,\n bookmark: ProjectViewBookmark.LegacyNavigator.IBookmark,\n view: ProjectView.LegacyNavigator.IView\n) {\n const vSettings = view.Settings as ProjectView.LegacyNavigator.ISettings;\n const bSettings = bookmark?.Settings as ProjectViewBookmark.LegacyNavigator.ISettings;\n const manager = params.manager;\n const VR = manager.VisualsRegister;\n const scene = manager.Viewer.scene;\n\n await TileRenderEngine.Terrain.LegacyNavigator.RenderView({\n apiGetter: params.apiGetter,\n bookmarkId: <string>params.bookmarkId,\n viewer: manager.Viewer,\n viewId: params.viewId,\n });\n\n await TileRenderEngine.Map.LegacyNavigator.RenderView({\n apiGetter: params.apiGetter,\n bookmarkId: <string>params.bookmarkId,\n viewer: manager.Viewer,\n viewId: params.viewId,\n ignoreIds: []\n });\n\n let baseColor = bSettings?.globeColor;\n if (baseColor == null) {\n // TODO: Need global default.\n baseColor = \"#0326BE\";\n }\n scene.globe.baseColor = Cesium.Color.fromCssColorString(baseColor);\n\n // TODO: Other scene settings.\n // TODO: Rendered relationships.\n\n VR.ClearHidden();\n if (bSettings?.hiddenEntityIds?.length) {\n VR.SetHidden({\n entityIds: bSettings.hiddenEntityIds,\n hidden: true\n });\n }\n\n let frustum = bSettings?.cameraFrustum;\n if (frustum == null) {\n frustum = Camera.EFrustum.Perspective;\n }\n const curFrustum = scene.camera.frustum instanceof Cesium.OrthographicFrustum ? Camera.EFrustum.Orthographic : Camera.EFrustum.Perspective;\n if (curFrustum != frustum) {\n if (frustum == Camera.EFrustum.Perspective) {\n scene.camera.switchToPerspectiveFrustum();\n scene.screenSpaceCameraController.enableTilt = true;\n }\n else {\n scene.camera.switchToOrthographicFrustum();\n scene.screenSpaceCameraController.enableTilt = false;\n }\n params.skipTransition = true;\n }\n\n if (!params.skipCamera) {\n const camera = bookmark?.Camera;\n const pos = camera ? Cesium.Cartesian3.fromDegrees(\n +camera.position.longitude,\n +camera.position.latitude,\n +camera.position.height\n ) : null;\n if (pos?.x) {\n manager.Viewer.scene.camera.flyTo({\n destination: pos,\n orientation: {\n heading: +camera.heading,\n pitch: +camera.pitch,\n roll: +camera.roll\n },\n duration: params.skipTransition ? 0 : 2\n });\n }\n }\n\n let go = bookmark?.Settings?.groundOcclusion;\n if (go == null) {\n go = vSettings?.GroundOcclusion;\n }\n if (go == null) {\n go = false;\n }\n manager.Viewer.scene.globe.depthTestAgainstTerrain = go;\n\n const fxaa = manager.Viewer.scene.postProcessStages.fxaa;\n fxaa.enabled = true;\n\n let pointer = bSettings?.timelineSettings?.timelinePointer;\n if (pointer != null) {\n const clock = manager.Viewer.clock;\n // Back and forth conversion so we aren't feeding Cesium an object instead of class instance.\n // This is pretty blegh.\n const timeStr = Cesium.JulianDate.toIso8601(pointer)\n clock.currentTime = Cesium.JulianDate.fromIso8601(timeStr);\n }\n\n const enabledItems = manager.GetEnabledItemIds();\n const newItemIds = bSettings?.selectedItemIds ?? [];\n for (const id of enabledItems) {\n if (\n newItemIds.indexOf(id) === -1 ||\n id == RELATION_MENU_ITEM_ID\n ) {\n params.manager.RemoveItemById({\n menuItemId: id\n });\n }\n }\n\n if (bookmark) {\n await MenuItemCreator.RenderBookmarkItems({\n apiGetter: params.apiGetter,\n manager,\n view,\n bookmark\n });\n }\n if (bSettings?.drawnRelationEntityIDs?.length) {\n const menuItem = {\n id: RELATION_MENU_ITEM_ID,\n Caption: \"Entity relations\",\n BruceEntity: {\n EntityIds: bSettings.drawnRelationEntityIDs\n },\n Type: MenuItem.EType.Relations\n } as MenuItem.Item.IEntityRelations;\n await params.manager.RenderItem({\n apiGetter: params.apiGetter,\n item: menuItem\n });\n }\n}\n\n/**\n * Renders DATA_VERSION > 1 navigator.\n * @param params\n * @param bookmark\n * @param view\n */\nasync function renderNavigator(\n params: ViewRenderEngine.IRenderParams,\n bookmark: ProjectViewBookmark.Navigator.IBookmark,\n view: ProjectView.Navigator.IView\n) {\n const viewer = params.manager.Viewer;\n const scene = viewer.scene;\n\n const vSettings = view.Settings as ProjectView.Navigator.ISettings;\n const bSettings = (bookmark?.Settings ?? {}) as ProjectViewBookmark.Navigator.ISettings;\n const defaults = vSettings.defaults ?? {};\n\n let camera = (bookmark?.Camera ?? {}) as ProjectViewBookmark.Navigator.ICamera;\n if (!Carto.ValidateCarto(camera)) {\n camera = {\n ...camera,\n altitude: defaults.camera?.altitude,\n latitude: defaults.camera?.latitude,\n longitude: defaults.camera?.longitude,\n heading: defaults.camera?.heading,\n pitch: defaults.camera?.pitch,\n roll: defaults.camera?.roll\n }\n }\n\n let newLens = camera.cameraFrustum;\n if (newLens == null) {\n newLens = defaults.camera?.cameraFrustum;\n }\n if (newLens == null) {\n // TODO: Need global default.\n newLens = Camera.EFrustum.Perspective;\n }\n const modePicker = viewer?.sceneModePicker as any;\n const is2d = modePicker?.viewModel?.sceneMode === Cesium.SceneMode.SCENE2D;\n const curLens = is2d ? Camera.EFrustum.Orthographic : Camera.EFrustum.Perspective;\n if (newLens != curLens) {\n const modePicker = viewer?.sceneModePicker as any;\n if (modePicker) {\n modePicker.viewModel.duration = 0;\n if (newLens == Camera.EFrustum.Perspective) {\n modePicker.viewModel._morphTo3D();\n }\n else {\n modePicker.viewModel._morphTo2D();\n }\n }\n }\n\n if (!params.skipCamera) {\n let transition = params.skipTransition ? 0 : curLens === newLens ? camera.transition : 0;\n if (transition == null) {\n transition = defaults.camera?.transition;\n }\n if (transition == null) {\n // TODO: Need global default.\n transition = 2000;\n }\n\n if (Carto.ValidateCarto(camera)) {\n const pos = Cesium.Cartesian3.fromDegrees(\n +camera.longitude,\n +camera.latitude,\n +camera.altitude\n );\n scene.camera.flyTo({\n destination: pos,\n orientation: {\n heading: Cesium.Math.toRadians(+camera.heading),\n pitch: Cesium.Math.toRadians(+camera.pitch),\n roll: Cesium.Math.toRadians(+camera.roll)\n },\n duration: transition != 0 ? transition / 1000 : 0\n });\n }\n }\n\n const terrain = bSettings?.terrain != null ? bSettings?.terrain : defaults.settings?.terrain;\n if (terrain) {\n await TileRenderEngine.Terrain.Navigator.Render({\n apiGetter: params.apiGetter,\n tile: terrain,\n viewer: params.manager.Viewer,\n });\n }\n\n let hillShades = bookmark?.Settings?.hillShades;\n if (hillShades == null) {\n hillShades = defaults?.settings?.hillShades;\n }\n if (hillShades == null) {\n hillShades = true;\n }\n scene.globe.enableLighting = Boolean(hillShades);\n\n let baseColor = bSettings?.globeColor;\n if (baseColor == null) {\n baseColor = defaults.settings?.globeColor;\n }\n if (baseColor == null) {\n // TODO: Need global default.\n baseColor = \"#0326BE\";\n }\n scene.globe.baseColor = Cesium.Color.fromCssColorString(baseColor);\n\n let globeHidden = bSettings?.globeHidden;\n if (globeHidden == null) {\n globeHidden = defaults.settings?.globeHidden;\n }\n if (globeHidden == null) {\n globeHidden = false;\n }\n scene.globe.show = !globeHidden;\n\n let terrainWireframe = bSettings?.terrainWireframe;\n if (terrainWireframe == null) {\n terrainWireframe = defaults.settings?.terrainWireframe;\n }\n if (terrainWireframe == null) {\n terrainWireframe = false;\n }\n ViewUtils.SetTerrainWireframeStatus({\n status: terrainWireframe,\n viewer: viewer\n });\n\n let globeAlpha = +bSettings?.globeAlpha;\n if (isNaN(globeAlpha)) {\n globeAlpha = +defaults.settings?.globeAlpha;\n }\n if (!scene.globe.translucency.enabled) {\n scene.globe.translucency.enabled = true;\n scene.globe.translucency.frontFaceAlphaByDistance = new Cesium.NearFarScalar(\n 400.0,\n 0.0,\n 800.0,\n 1.0\n );\n scene.globe.translucency.frontFaceAlphaByDistance.farValue = 1;\n }\n scene.globe.translucency.frontFaceAlphaByDistance.nearValue = EnsureNumber(globeAlpha, 1);\n\n let shadows = bSettings?.shadows;\n if (shadows == null) {\n shadows = defaults?.settings?.shadows;\n }\n if (shadows == null) {\n // Experimenting with default on.\n shadows = {\n enabled: true\n } as ProjectViewBookmark.Navigator.IShadows;\n }\n if (shadows.enabled) {\n viewer.shadows = true;\n viewer.shadowMap.enabled = true;\n let size = EnsureNumber(shadows.pixelSize);\n if (size < MIN_SHADOW_SIZE) {\n size = MIN_SHADOW_SIZE;\n }\n else if (size > MAX_SHADOW_SIZE) {\n size = MAX_SHADOW_SIZE;\n }\n viewer.shadowMap.size = size;\n viewer.shadowMap.softShadows = Boolean(shadows.soften);\n viewer.shadowMap.darkness = EnsureNumber(shadows.darkness, 0.5);\n }\n else {\n viewer.shadows = false;\n viewer.shadowMap.enabled = false;\n }\n\n let ambientOcclusion = bSettings?.ambientOcclusion;\n if (ambientOcclusion == null) {\n ambientOcclusion = defaults?.settings?.ambientOcclusion;\n }\n if (ambientOcclusion == null) {\n ambientOcclusion = {\n enabled: false\n } as ProjectViewBookmark.Navigator.IAmbientOcclusion;\n }\n const AO = viewer.scene.postProcessStages.ambientOcclusion;\n if (ambientOcclusion.enabled) {\n AO.enabled = true;\n }\n else {\n AO.enabled = false;\n }\n if (AO.uniforms) {\n AO.uniforms.intensity = EnsureNumber(ambientOcclusion.intensity, 2.0);\n AO.uniforms.lengthCap = EnsureNumber(ambientOcclusion.lengthCap, 0.2);\n AO.uniforms.bias = EnsureNumber(ambientOcclusion.bias, 0.5);\n AO.uniforms.stepSize = EnsureNumber(ambientOcclusion.stepSize, 2.0);\n AO.uniforms.blurStepSize = EnsureNumber(ambientOcclusion.blurStepSize, 2.0);\n }\n\n let lighting = bSettings?.lighting;\n if (lighting == null) {\n lighting = defaults?.settings?.lighting;\n }\n if (lighting == null) {\n lighting = {\n color: Cesium.Color.WHITE.toCssColorString(),\n intensity: 2\n } as ProjectViewBookmark.Navigator.ILighting;\n }\n const light = viewer.scene.light;\n if (light) {\n light.color = Cesium.Color.fromCssColorString(lighting.color);\n light.intensity = EnsureNumber(lighting.intensity);\n }\n\n let quality = bSettings?.quality;\n if (quality == null) {\n quality = defaults?.settings?.quality;\n }\n if (quality == null) {\n quality = {\n fxaa: true\n } as ProjectViewBookmark.Navigator.IQuality;\n }\n const fxaa = viewer.scene.postProcessStages.fxaa;\n fxaa.enabled = Boolean(quality.fxaa);\n\n let dateTime = bSettings?.dateTime;\n if (dateTime == null) {\n dateTime = defaults?.settings?.dateTime;\n }\n if (dateTime != null) {\n const clock = viewer.clock;\n clock.currentTime = Cesium.JulianDate.fromIso8601(dateTime);\n }\n\n let selectedIds = bSettings?.selectedEntityIds;\n if (selectedIds == null) {\n selectedIds = defaults?.settings?.selectedEntityIds;\n }\n if (selectedIds != null) {\n params.manager.VisualsRegister.ClearSelected();\n params.manager.VisualsRegister.SetSelected({\n selected: true,\n entityIds: selectedIds,\n refreshIfSelected: false\n });\n }\n\n params.manager.VisualsRegister.ClearHidden();\n let hiddenIds = bSettings?.hiddenEntityIds;\n if (hiddenIds == null) {\n hiddenIds = defaults?.settings?.hiddenEntityIds;\n }\n if (hiddenIds != null) {\n params.manager.VisualsRegister.SetHidden({\n hidden: true,\n entityIds: hiddenIds\n });\n }\n\n params.manager.VisualsRegister.ClearIsolated();\n let isolatedIds = bSettings?.isolatedEntityIds;\n if (isolatedIds == null) {\n isolatedIds = defaults?.settings?.isolatedEntityIds;\n }\n if (isolatedIds != null) {\n params.manager.VisualsRegister.SetIsolated({\n isolated: true,\n entityIds: isolatedIds\n });\n }\n\n params.manager.VisualsRegister.ClearOpacity();\n let entityOpacityMap = bSettings?.entityOpacityMap;\n if (entityOpacityMap == null) {\n entityOpacityMap = defaults?.settings?.entityOpacityMap;\n }\n if (entityOpacityMap != null) {\n for (const entityId in entityOpacityMap) {\n const opacity = EnsureNumber(entityOpacityMap[entityId], 1);\n if (opacity != 1) {\n params.manager.VisualsRegister.SetOpacity({\n entityIds: [entityId],\n opacity: opacity\n });\n }\n }\n }\n\n let imagery = bSettings?.imagery != null ? bSettings.imagery : defaults.settings?.imagery;\n if (imagery == null) {\n // TODO: Need global default.\n imagery = [\n {\n accountId: null,\n tilesetId: ProjectViewTile.EDefaultImagery.MapboxSatellite,\n alpha: 1,\n brightness: 1,\n contrast: 1,\n gamma: 1,\n hue: 0,\n saturation: 1\n }\n ];\n }\n await TileRenderEngine.Map.Navigator.Render({\n apiGetter: params.apiGetter,\n tiles: imagery,\n viewer: params.manager.Viewer,\n });\n\n let renderedRelationEntityIds = bSettings?.renderedEntityRelations;\n if (!renderedRelationEntityIds) {\n renderedRelationEntityIds = [];\n }\n\n // Only disable menu items we don't want.\n // Otherwise we cause a flicker of rendered graphics.\n // Maybe TODO to such a function for menu item manager.\n const curEnabled = params.manager.GetEnabledItemIds();\n const newItemIds = bSettings?.menuItemIds ?? [];\n for (const id of curEnabled) {\n if (\n newItemIds.indexOf(id) === -1 ||\n id == RELATION_MENU_ITEM_ID\n ) {\n params.manager.RemoveItemById({\n menuItemId: id\n });\n }\n }\n if (bookmark) {\n await MenuItemCreator.RenderBookmarkItems({\n apiGetter: params.apiGetter,\n manager: params.manager,\n view: view,\n bookmark: bookmark\n });\n }\n if (renderedRelationEntityIds.length > 0) {\n const menuItem = {\n id: RELATION_MENU_ITEM_ID,\n Caption: \"Entity relations\",\n BruceEntity: {\n EntityIds: renderedRelationEntityIds\n },\n Type: MenuItem.EType.Relations\n } as MenuItem.Item.IEntityRelations;\n await params.manager.RenderItem({\n apiGetter: params.apiGetter,\n item: menuItem\n });\n }\n\n let gOcclusion = bSettings?.groundOcclusion;\n if (gOcclusion == null) {\n gOcclusion = defaults?.settings?.groundOcclusion;\n }\n if (gOcclusion == null) {\n // TODO: Need global default.\n gOcclusion = true;\n }\n console.log(\"Applying Ground Occlusion\", Boolean(gOcclusion))\n scene.globe.depthTestAgainstTerrain = Boolean(gOcclusion);\n}\n\nexport namespace ViewRenderEngine {\n export interface IRenderParams {\n /// WHERE TO RENDER ///\n\n // Must be provided if manager is not provided.\n viewer?: Cesium.Viewer;\n // The viewer to render to.\n // If not provided a default instance will be created and stored within the Cesium viewer.\n manager?: MenuItemManager.Manager;\n\n /// WHAT TO RENDER ///\n\n // Used to request view if view is not provided.\n viewId?: string;\n // Takes priority over viewId.\n view?: ProjectView.View;\n // Used to request bookmark if bookmark is not provided.\n bookmarkId?: string;\n // Takes priority over bookmarkId.\n bookmark?: ProjectViewBookmark.Bookmark;\n\n /// OPTIONAL CONFIGURATION ///\n\n // Moves the camera but without transition time.\n // Ignored if skipCamera = true.\n skipTransition?: boolean;\n // Does not move the camera.\n skipCamera?: boolean;\n\n /// API COMMUNICATION ///\n\n // Getter for the API.\n // If not provided the global default instance will be used.\n apiGetter?: BruceApi.IGetter;\n }\n\n export async function Render(params: IRenderParams): Promise<void> {\n if (!params.manager && params.viewer) {\n params.manager = ViewerUtils.GetManager({\n viewer: params.viewer,\n createIfMissing: true\n });\n }\n else if (!params.viewer && params.manager) {\n params.viewer = params.manager.Viewer;\n }\n if (!params.apiGetter) {\n params.apiGetter = ENVIRONMENT.Api().GetBruceGetter();\n }\n\n const api = params.apiGetter.getApi();\n const view = params.view ? params.view : (await ProjectView.Get({\n api,\n viewId: params.viewId\n })).view;\n let bookmark = params.bookmark;\n if (!bookmark) {\n let bookmarkId = params.bookmarkId;\n if (!bookmarkId) {\n bookmarkId = view.DefaultUISlideID;\n }\n bookmark = bookmarkId ? (await ProjectViewBookmark.Get({\n api,\n viewId: params.viewId,\n bookmarkId: bookmarkId\n })).bookmark : null;\n }\n const version = view.DataVersion;\n if (version == 1) {\n await renderLegacyNavigator(\n params,\n bookmark as ProjectViewBookmark.LegacyNavigator.IBookmark,\n view as ProjectView.LegacyNavigator.IView\n );\n }\n else {\n await renderNavigator(\n params,\n bookmark as ProjectViewBookmark.Navigator.IBookmark,\n view as ProjectView.Navigator.IView\n );\n }\n }\n}","export * from \"./viewer/cesium-view-monitor\";\nexport * from \"./viewer/viewer-utils\";\nexport * from \"./rendering/menu-item-manager\";\nexport * from \"./rendering/entity-render-engine\";\nexport * from \"./rendering/menu-item-creator\";\nexport * from \"./rendering/visuals-register\";\nexport * from \"./rendering/render-managers/render-manager\";\nexport * from \"./rendering/render-managers/entities/entities-ids-render-manager\";\nexport * from \"./rendering/render-managers/entities/entities-loaded-render-manager\";\nexport * from \"./rendering/render-managers/entities/entities-render-manager\";\nexport * from \"./rendering/render-managers/entities/entity-render-manager\";\nexport * from \"./rendering/render-managers/tilesets/tileset-cad-render-manager\";\nexport * from \"./rendering/render-managers/tilesets/tileset-arb-render-manager\";\nexport * from \"./rendering/render-managers/tilesets/tileset-entities-render-manager\";\nexport * from \"./rendering/render-managers/tilesets/tileset-osm-render-manager\";\nexport * from \"./rendering/render-managers/tilesets/tileset-pointcloud-render-manager\";\nexport * from \"./rendering/render-managers/tilesets/tileset-google-photos-render-manager\";\nexport * from \"./rendering/render-managers/data-source/data-source-static-kml-manager\";\nexport * from \"./rendering/render-managers/other/relations-render-manager\";\nexport * from \"./rendering/render-managers/common/shared-getters\";\nexport * from \"./rendering/render-managers/common/cesium-parabola\";\nexport * from \"./rendering/view-render-engine\";\nexport * from \"./rendering/tile-render-engine\";\nexport * from \"./rendering/tileset-render-engine\";\nexport * from \"./utils/view-utils\";\nexport * from \"./utils/drawing-utils\";\nexport * from \"./utils/measure-utils\";\nexport * from \"./utils/entity-utils\";\n\nexport const VERSION = \"2.2.4\";"],"names":["Cesium.Cartesian2","Cesium.Cartographic","Cesium.CallbackProperty","Cesium.Cartesian3","Cesium.Color","Cesium.Rectangle","Cesium.Math","Cesium.PolygonPipeline","Cesium.EllipsoidGeodesic","Cesium.EllipsoidTerrainProvider","Cesium.sampleTerrainMostDetailed","Cesium.HeightReference","Cesium.Entity","Cesium.Primitive","Cesium.Cesium3DTileFeature","Cesium.ColorMaterialProperty","Entity","Cesium.Transforms","Cesium.HeadingPitchRoll","Cesium.Matrix3","Cesium.Matrix4","Cesium.EasingFunction","Cesium.GeometryInstance","Cesium.JulianDate","Cesium.SceneMode","Cesium.DistanceDisplayCondition","Cesium.HorizontalOrigin","Cesium.VerticalOrigin","Cesium.ClassificationType","Cesium.ArcType","Cesium.PolygonHierarchy","Cesium.ShadowMode","Cesium.PolylineGraphics","Cesium.ColorBlendMode","GetValue","Rectangle","Cesium.NearFarScalar","BATCH_SIZE","CHECK_BATCH_SIZE","colorToCColor","isAlive","Cesium.Cesium3DTileset","Cesium.Cesium3DTileStyle","Cesium.IonResource","Cesium.Cesium3DTileColorBlendMode","Cesium.HeadingPitchRange","Cesium.createOsmBuildings","Cesium.KmlDataSource","Cesium.createWorldTerrain","Cesium.CesiumTerrainProvider","Cesium.BingMapsImageryProvider","Cesium.BingMapsStyle","Cesium.MapboxImageryProvider","Cesium.MapboxStyleImageryProvider","Cesium.ArcGisMapServerImageryProvider","Cesium.OpenStreetMapImageryProvider","Cesium.GridImageryProvider","Cesium.GeographicTilingScheme","Cesium.ImageryLayer","Cesium.UrlTemplateImageryProvider","Cesium.TileMapServiceImageryProvider","Cesium.IonImageryProvider","Cesium.CesiumInspector","Cesium.OrthographicFrustum"],"mappings":"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"}