bruce-cesium 2.0.2 → 2.0.3

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.umd.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/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"],"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 \"src/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\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 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 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[NEW_OPACITY_KEY];\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\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 }\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 },\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 },\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 },\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 },\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 });\n cEntity._renderGroup = getRenderGroupId(zoomItem, params.viewer?.terrainProvider);\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 }\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\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) {\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 },\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 });\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 }\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) {\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 },\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 }),\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 }),\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 });\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 }\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 },\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 })\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 { BruceApi, DelayQueue, Entity, EntityFilterGetter, IDictionary, MenuItem, ZoomControl } 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\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\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 }\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 }\r\n else {\r\n this.visualsManager.RemoveRegos({\r\n menuItemId: this.item.id\r\n });\r\n return;\r\n }\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 this.doEntityCheck(Object.keys(this.renderedEntities));\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 }\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 = <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 const tagIds = entity.Bruce?.[\"Layer.ID\"];\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 tagIds: tagIds ? [].concat(tagIds) : []\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 { BatchedDataGetter, BruceApi, Entity, IDictionary, ZoomControl, 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\";\n\nconst BATCH_SIZE = 500;\nconst CHECK_BATCH_SIZE = 250;\n\n/**\n * Render manager for a group of pre-loaded entities.\n * The entities may or may not have records.\n * If the entities DON'T have records, it is recommended to avoid using the 3dmodel visualization as it will fail to locate LODs.\n */\nexport namespace EntitiesLoadedRenderManager {\n export class Manager implements RenderManager.IManager {\n private viewer: Cesium.Viewer;\n private apiGetter: BruceApi.IGetter;\n private item: MenuItem.Item.IEntitiesLoaded;\n private getter: BatchedDataGetter.Getter<Entity.IEntity> = <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 renderedEntities: IDictionary<boolean> = {};\n private visualsManager: VisualsRegister.Register;\n private updatedEntities: IDictionary<Entity.IEntity> = {};\n\n constructor(params: {\n viewer: Cesium.Viewer,\n register: VisualsRegister.Register,\n apiGetter: BruceApi.IGetter,\n monitor: CesiumViewMonitor,\n item: MenuItem.Item.IEntitiesLoaded\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<Entity.IEntity>(\n this.item.BruceEntity.Entities,\n this.monitor,\n BATCH_SIZE\n );\n this.getterSub = this.getter.OnUpdate.Subscribe((entities) => {\n const latest = [];\n for (const entity of entities) {\n if (this.renderedEntities[entity?.Bruce?.ID]) {\n latest.push(entity);\n continue;\n }\n latest.push(entity);\n }\n this.onGetterUpdate(entities);\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 }\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?.Entities?.find(y => y?.Bruce?.ID == x);\n })\n }\n if (entities?.length) {\n entities = [].concat(entities).filter(x => entityIds.includes(x.Bruce?.ID))\n entities.forEach((x) => {\n this.updatedEntities[x.Bruce?.ID] = x;\n });\n }\n this.visualsManager.MarkStale({\n entityIds: entityIds,\n menuItemIds: [this.item.id]\n });\n if (entities?.length) {\n this.onGetterUpdate(entities, force);\n }\n else {\n this.doEntityCheck(entityIds, force);\n }\n }\n\n private async doEntityCheck(ids: string[], force: boolean = false): Promise<void> {\n const api = this.apiGetter.getApi();\n try {\n if (this.disposed) {\n return;\n }\n if (ids.length > 0) {\n const checkBatch = async() => {\n const entityIds = ids.splice(0, CHECK_BATCH_SIZE);\n const {entities} = await Entity.GetListByIds({\n api,\n entityIds\n });\n if (this.disposed) {\n return;\n }\n entities.forEach((x) => {\n this.updatedEntities[x.Bruce?.ID] = x;\n });\n this.onGetterUpdate(entities, force);\n };\n while (ids.length > 0) {\n await checkBatch();\n }\n }\n }\n catch (e) {\n console.error(e);\n }\n }\n\n private async onGetterUpdate(entities: Entity.IEntity[], force: boolean = false): Promise<void> {\n try {\n if (this.disposed || this.viewer.isDestroyed()) {\n return;\n }\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 this.visualsManager.AddRego({\n rego: {\n entityId: <string>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 }\n this.viewer.scene.requestRender();\n }\n catch (e) {\n console.error(e);\n }\n }\n }\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\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 (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, 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 (!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 (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 }\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 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\";\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\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 }\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 }\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 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 }\n });\n }\n }\n else {\n this.visualsManager.RemoveRegos({\n entityId: id,\n menuItemId: this.item.id\n });\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, 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\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 C3DT = Cesium.Cesium3DTileset as any;\n if (C3DT.fromUrl) {\n // New cesium is running.\n return C3DT.fromUrl(url, {\n ...props\n } as any);\n }\n // Old cesium is running.\n return new C3DT({\n url: url,\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\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 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 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 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}","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 }\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 }\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 }\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 }\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.GetGetters().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 \"src/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, Entity, IDictionary, MenuItem, ObjectUtils, ProjectView, ProjectViewBookmark, Tileset, ZoomControl } from \"bruce-models\";\r\nimport { MenuItemManager } from \"./menu-item-manager\";\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 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 const {entityIds} = params;\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 params.manager.RenderItem({\r\n apiGetter: params.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 const {entityTypeIds: typeIds} = params;\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 params.manager.RenderItem({\r\n apiGetter: params.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 const {attrFilter: filter} = params;\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 params.manager.RenderItem({\r\n apiGetter: params.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 const {menuItems} = params;\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: params.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 const {tilesetId} = params;\r\n const api = params.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: true,\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: true,\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: true,\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: true,\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 params.manager.RenderItem({\r\n item: menuItem,\r\n apiGetter: params.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 const {viewId, bookmarkId} = params;\r\n const api = params.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 throw new Error(\"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 params.manager.RenderItem({\r\n item: item,\r\n apiGetter: params.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\r\n export async function RenderRelations(params: {\r\n entityIds: string[],\r\n relationTypeIds?: string[],\r\n forwardOnly?: boolean\r\n } & IParams) {\r\n\r\n }\r\n}","import { ProjectViewTile, BruceApi, ProjectView, ProjectViewBookmark, ProjectViewLegacyTile, Tileset, ProgramKey } 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 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 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(\n viewer: Cesium.Viewer,\n apiGetter: BruceApi.IGetter,\n meta: ProjectViewTile.ITileMeta\n ): Promise<Cesium.ImageryLayer> {\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 const {tileset} = await Tileset.Get({\n api,\n tilesetId: meta.tilesetId\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 }),\n fileExtension: \"png\"\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 provider = new Cesium.IonImageryProvider({\n assetId: settings.ionId,\n accessToken: await findKey(apiGetter, ProgramKey.EProgramId.CesiumIon, null)\n });\n break;\n case Tileset.Settings.EExternalMapType.MapBoxImagery:\n var mapboxKey = settings.mapBoxKey ? settings.mapBoxKey : await findKey(apiGetter, ProgramKey.EProgramId.Mapbox, null);\n provider = new Cesium.UrlTemplateImageryProvider({\n url: \"https://api.mapbox.com/styles/v1/\"\n + settings.mapBoxAccount + \"/\" + settings.mapBoxStyleId +\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.sourceExt)\n });\n break;\n case Tileset.Settings.EExternalMapType.TileMapImagery:\n provider = new Cesium.TileMapServiceImageryProvider({\n url: settings.url,\n fileExtension: prepareFileExt(settings.sourceExt)\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 }),\n tileHeight: 256,\n tileWidth: 256\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 // 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(params.viewer, params.apiGetter, {\n accountId: enabled.accountId,\n tilesetId: enabled.tilesetId,\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 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 // 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 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 });\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 \"src/utils/view-utils\";\nimport { ViewerUtils } from \"src/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.GetGetters().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}"],"names":["Cesium.Cartesian2","Cesium.Cartographic","Cesium.CallbackProperty","Cesium.Cartesian3","Cesium.Color","Cesium.Rectangle","BruceEvent","Cesium.Math","Cartes","Cesium.PolygonPipeline","MeasureUtils","Cesium.EllipsoidGeodesic","Cesium.EllipsoidTerrainProvider","Cesium.sampleTerrainMostDetailed","Cesium.HeightReference","DrawingUtils","Cesium.ColorMaterialProperty","Cesium.Entity","Cesium.Cesium3DTileFeature","Carto","Geometry","Entity","Tileset","Cesium.Transforms","Cesium.HeadingPitchRoll","Cesium.Matrix3","Cesium.Matrix4","Cesium.EasingFunction","Cesium.GeometryInstance","Cesium.JulianDate","Cesium.Primitive","EntityUtils","LRUCache","MathUtils","Cesium.SceneMode","RenderManager","Calculator","Style","EntityType","ZoomControl","ObjectUtils","ClientFile","Cesium.HorizontalOrigin","Cesium.VerticalOrigin","EntityTag","Cesium.ClassificationType","Cesium.ArcType","Cesium.PolygonHierarchy","Cesium.ShadowMode","Cesium.PolylineGraphics","Cesium.ColorBlendMode","EntityLod","EntityRenderEngine","DelayQueue","EntitiesRenderManager","BATCH_SIZE","CHECK_BATCH_SIZE","BatchedDataGetter","EntitiesLoadedRenderManager","colorToCColor","EntityRelationType","VisualsRegister","EntitiesIdsRenderManager","EntityRenderManager","Cesium.Cesium3DTileset","Cesium.Cesium3DTileStyle","Cesium.IonResource","TilesetRenderEngine","EntityCoords","Cesium.Cesium3DTileColorBlendMode","Cesium.HeadingPitchRange","TilesetCadRenderManager","EntityFilterGetter","SharedGetters","Cesium.createOsmBuildings","EntitySource","TilesetOsmRenderManager","TilesetEntitiesRenderManager","TilesetPointcloudRenderManager","Cesium.KmlDataSource","DataSourceStaticKmlManager","MenuItem","TilesetArbRenderManager","EntityRelation","RelationsRenderManager","TilesetGooglePhotosRenderManager","ENVIRONMENT","MenuItemManager","ViewerUtils","ProjectView","ProjectViewBookmark","MenuItemCreator","ProjectViewTile","Cesium.createWorldTerrain","Cesium.CesiumTerrainProvider","ProgramKey","Cesium.BingMapsImageryProvider","Cesium.BingMapsStyle","Cesium.MapboxImageryProvider","Cesium.MapboxStyleImageryProvider","Cesium.ArcGisMapServerImageryProvider","Cesium.OpenStreetMapImageryProvider","Cesium.GridImageryProvider","Cesium.GeographicTilingScheme","Cesium.ImageryLayer","Cesium.UrlTemplateImageryProvider","Cesium.TileMapServiceImageryProvider","ProjectViewLegacyTile","Cesium.IonImageryProvider","TileRenderEngine","Cesium.CesiumInspector","ViewUtils","Camera","Cesium.OrthographicFrustum","Cesium.NearFarScalar","ViewRenderEngine"],"mappings":"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"}
1
+ {"version":3,"file":"bruce-cesium.umd.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/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"],"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 \"src/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\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 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 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[NEW_OPACITY_KEY];\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\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 }\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 },\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 },\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 },\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 },\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 });\n cEntity._renderGroup = getRenderGroupId(zoomItem, params.viewer?.terrainProvider);\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 }\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\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) {\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 },\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 });\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 }\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) {\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 },\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 }),\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 }),\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 });\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 }\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 },\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 })\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 { BruceApi, DelayQueue, Entity, EntityFilterGetter, IDictionary, MenuItem, ZoomControl } 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\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\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 }\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 }\r\n else {\r\n this.visualsManager.RemoveRegos({\r\n menuItemId: this.item.id\r\n });\r\n return;\r\n }\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 this.doEntityCheck(Object.keys(this.renderedEntities));\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 }\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 = <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 const tagIds = entity.Bruce?.[\"Layer.ID\"];\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 tagIds: tagIds ? [].concat(tagIds) : []\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 { BatchedDataGetter, BruceApi, Entity, IDictionary, ZoomControl, 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\";\n\nconst BATCH_SIZE = 500;\nconst CHECK_BATCH_SIZE = 250;\n\n/**\n * Render manager for a group of pre-loaded entities.\n * The entities may or may not have records.\n * If the entities DON'T have records, it is recommended to avoid using the 3dmodel visualization as it will fail to locate LODs.\n */\nexport namespace EntitiesLoadedRenderManager {\n export class Manager implements RenderManager.IManager {\n private viewer: Cesium.Viewer;\n private apiGetter: BruceApi.IGetter;\n private item: MenuItem.Item.IEntitiesLoaded;\n private getter: BatchedDataGetter.Getter<Entity.IEntity> = <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 renderedEntities: IDictionary<boolean> = {};\n private visualsManager: VisualsRegister.Register;\n private updatedEntities: IDictionary<Entity.IEntity> = {};\n\n constructor(params: {\n viewer: Cesium.Viewer,\n register: VisualsRegister.Register,\n apiGetter: BruceApi.IGetter,\n monitor: CesiumViewMonitor,\n item: MenuItem.Item.IEntitiesLoaded\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<Entity.IEntity>(\n this.item.BruceEntity.Entities,\n this.monitor,\n BATCH_SIZE\n );\n this.getterSub = this.getter.OnUpdate.Subscribe((entities) => {\n const latest = [];\n for (const entity of entities) {\n if (this.renderedEntities[entity?.Bruce?.ID]) {\n latest.push(entity);\n continue;\n }\n latest.push(entity);\n }\n this.onGetterUpdate(entities);\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 }\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?.Entities?.find(y => y?.Bruce?.ID == x);\n })\n }\n if (entities?.length) {\n entities = [].concat(entities).filter(x => entityIds.includes(x.Bruce?.ID))\n entities.forEach((x) => {\n this.updatedEntities[x.Bruce?.ID] = x;\n });\n }\n this.visualsManager.MarkStale({\n entityIds: entityIds,\n menuItemIds: [this.item.id]\n });\n if (entities?.length) {\n this.onGetterUpdate(entities, force);\n }\n else {\n this.doEntityCheck(entityIds, force);\n }\n }\n\n private async doEntityCheck(ids: string[], force: boolean = false): Promise<void> {\n const api = this.apiGetter.getApi();\n try {\n if (this.disposed) {\n return;\n }\n if (ids.length > 0) {\n const checkBatch = async() => {\n const entityIds = ids.splice(0, CHECK_BATCH_SIZE);\n const {entities} = await Entity.GetListByIds({\n api,\n entityIds\n });\n if (this.disposed) {\n return;\n }\n entities.forEach((x) => {\n this.updatedEntities[x.Bruce?.ID] = x;\n });\n this.onGetterUpdate(entities, force);\n };\n while (ids.length > 0) {\n await checkBatch();\n }\n }\n }\n catch (e) {\n console.error(e);\n }\n }\n\n private async onGetterUpdate(entities: Entity.IEntity[], force: boolean = false): Promise<void> {\n try {\n if (this.disposed || this.viewer.isDestroyed()) {\n return;\n }\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 this.visualsManager.AddRego({\n rego: {\n entityId: <string>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 }\n this.viewer.scene.requestRender();\n }\n catch (e) {\n console.error(e);\n }\n }\n }\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\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 (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, 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 (!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 (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 }\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 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\";\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\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 }\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 }\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 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 }\n });\n }\n }\n else {\n this.visualsManager.RemoveRegos({\n entityId: id,\n menuItemId: this.item.id\n });\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, 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\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 C3DT = Cesium.Cesium3DTileset as any;\n if (C3DT.fromUrl) {\n // New cesium is running.\n return C3DT.fromUrl(url, {\n ...props\n } as any);\n }\n // Old cesium is running.\n return new C3DT({\n url: url,\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\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 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 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 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}","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 }\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 }\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 }\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 }\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 \"src/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, Entity, IDictionary, MenuItem, ObjectUtils, ProjectView, ProjectViewBookmark, Tileset, ZoomControl } from \"bruce-models\";\r\nimport { MenuItemManager } from \"./menu-item-manager\";\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 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 const {entityIds} = params;\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 params.manager.RenderItem({\r\n apiGetter: params.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 const {entityTypeIds: typeIds} = params;\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 params.manager.RenderItem({\r\n apiGetter: params.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 const {attrFilter: filter} = params;\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 params.manager.RenderItem({\r\n apiGetter: params.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 const {menuItems} = params;\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: params.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 const {tilesetId} = params;\r\n const api = params.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: true,\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: true,\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: true,\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: true,\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 params.manager.RenderItem({\r\n item: menuItem,\r\n apiGetter: params.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 const {viewId, bookmarkId} = params;\r\n const api = params.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 throw new Error(\"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 params.manager.RenderItem({\r\n item: item,\r\n apiGetter: params.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\r\n export async function RenderRelations(params: {\r\n entityIds: string[],\r\n relationTypeIds?: string[],\r\n forwardOnly?: boolean\r\n } & IParams) {\r\n\r\n }\r\n}","import { ProjectViewTile, BruceApi, ProjectView, ProjectViewBookmark, ProjectViewLegacyTile, Tileset, ProgramKey } 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 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 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(\n viewer: Cesium.Viewer,\n apiGetter: BruceApi.IGetter,\n meta: ProjectViewTile.ITileMeta\n ): Promise<Cesium.ImageryLayer> {\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 const {tileset} = await Tileset.Get({\n api,\n tilesetId: meta.tilesetId\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 }),\n fileExtension: \"png\"\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 provider = new Cesium.IonImageryProvider({\n assetId: settings.ionId,\n accessToken: await findKey(apiGetter, ProgramKey.EProgramId.CesiumIon, null)\n });\n break;\n case Tileset.Settings.EExternalMapType.MapBoxImagery:\n var mapboxKey = settings.mapBoxKey ? settings.mapBoxKey : await findKey(apiGetter, ProgramKey.EProgramId.Mapbox, null);\n provider = new Cesium.UrlTemplateImageryProvider({\n url: \"https://api.mapbox.com/styles/v1/\"\n + settings.mapBoxAccount + \"/\" + settings.mapBoxStyleId +\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.sourceExt)\n });\n break;\n case Tileset.Settings.EExternalMapType.TileMapImagery:\n provider = new Cesium.TileMapServiceImageryProvider({\n url: settings.url,\n fileExtension: prepareFileExt(settings.sourceExt)\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 }),\n tileHeight: 256,\n tileWidth: 256\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 // 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(params.viewer, params.apiGetter, {\n accountId: enabled.accountId,\n tilesetId: enabled.tilesetId,\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 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 // 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 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 });\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 \"src/utils/view-utils\";\nimport { ViewerUtils } from \"src/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}"],"names":["Cesium.Cartesian2","Cesium.Cartographic","Cesium.CallbackProperty","Cesium.Cartesian3","Cesium.Color","Cesium.Rectangle","BruceEvent","Cesium.Math","Cartes","Cesium.PolygonPipeline","MeasureUtils","Cesium.EllipsoidGeodesic","Cesium.EllipsoidTerrainProvider","Cesium.sampleTerrainMostDetailed","Cesium.HeightReference","DrawingUtils","Cesium.ColorMaterialProperty","Cesium.Entity","Cesium.Cesium3DTileFeature","Carto","Geometry","Entity","Tileset","Cesium.Transforms","Cesium.HeadingPitchRoll","Cesium.Matrix3","Cesium.Matrix4","Cesium.EasingFunction","Cesium.GeometryInstance","Cesium.JulianDate","Cesium.Primitive","EntityUtils","LRUCache","MathUtils","Cesium.SceneMode","RenderManager","Calculator","Style","EntityType","ZoomControl","ObjectUtils","ClientFile","Cesium.HorizontalOrigin","Cesium.VerticalOrigin","EntityTag","Cesium.ClassificationType","Cesium.ArcType","Cesium.PolygonHierarchy","Cesium.ShadowMode","Cesium.PolylineGraphics","Cesium.ColorBlendMode","EntityLod","EntityRenderEngine","DelayQueue","EntitiesRenderManager","BATCH_SIZE","CHECK_BATCH_SIZE","BatchedDataGetter","EntitiesLoadedRenderManager","colorToCColor","EntityRelationType","VisualsRegister","EntitiesIdsRenderManager","EntityRenderManager","Cesium.Cesium3DTileset","Cesium.Cesium3DTileStyle","Cesium.IonResource","TilesetRenderEngine","EntityCoords","Cesium.Cesium3DTileColorBlendMode","Cesium.HeadingPitchRange","TilesetCadRenderManager","EntityFilterGetter","SharedGetters","Cesium.createOsmBuildings","EntitySource","TilesetOsmRenderManager","TilesetEntitiesRenderManager","TilesetPointcloudRenderManager","Cesium.KmlDataSource","DataSourceStaticKmlManager","MenuItem","TilesetArbRenderManager","EntityRelation","RelationsRenderManager","TilesetGooglePhotosRenderManager","ENVIRONMENT","MenuItemManager","ViewerUtils","ProjectView","ProjectViewBookmark","MenuItemCreator","ProjectViewTile","Cesium.createWorldTerrain","Cesium.CesiumTerrainProvider","ProgramKey","Cesium.BingMapsImageryProvider","Cesium.BingMapsStyle","Cesium.MapboxImageryProvider","Cesium.MapboxStyleImageryProvider","Cesium.ArcGisMapServerImageryProvider","Cesium.OpenStreetMapImageryProvider","Cesium.GridImageryProvider","Cesium.GeographicTilingScheme","Cesium.ImageryLayer","Cesium.UrlTemplateImageryProvider","Cesium.TileMapServiceImageryProvider","ProjectViewLegacyTile","Cesium.IonImageryProvider","TileRenderEngine","Cesium.CesiumInspector","ViewUtils","Camera","Cesium.OrthographicFrustum","Cesium.NearFarScalar","ViewRenderEngine"],"mappings":"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"}