bruce-cesium 0.7.0 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"bruce-cesium.es5.js","sources":["../src/viewer/cesium-view-monitor.ts","../src/viewer/viewer-utils.ts","../src/utils/drawing-utils.ts","../src/utils/measure-utils.ts","../src/utils/js-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/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/menu-item-manager.ts","../src/rendering/render-helper.ts","../src/rendering/tile-render-engine.ts","../src/rendering/view-render-engine.ts","../src/utils/view-utils.ts"],"sourcesContent":["import { Bounds, BruceEvent, Carto, ViewMonitor } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\n\r\nconst TIME_LAG = 300;\r\nconst POSITION_CHECK_TIMER = 950;\r\nconst DEFAULT_GROUNDED_HEIGHT = 300;\r\nconst MINIMUM_VIEW_AREA_SIZE_DEGREES = 0.01;\r\nconst NET_STEP_PERCENT = 5;\r\nconst BORDER_STEPS = 3;\r\n\r\nenum ESearchStatus {\r\n LocationFound = 1,\r\n LocationChanged = 2,\r\n LocationMissing = 3\r\n}\r\n\r\nfunction netScanViewForBoundaries(viewer: Cesium.Viewer): Bounds.IReqBounds {\r\n let maxLong = - 2 * Math.PI;\r\n let minLong = 2 * Math.PI;\r\n let maxLat = -2 * Math.PI;\r\n let minLat = 2 * Math.PI;\r\n let found = 0;\r\n\r\n const updateMinMaxForPoint = (stepX: number, stepY: number) => {\r\n const x = Math.round(0 + (viewer.container.clientWidth / 100) * (stepX * NET_STEP_PERCENT));\r\n const y = Math.round(0 + (viewer.container.clientHeight / 100) * (stepY * NET_STEP_PERCENT));\r\n const winPos = new Cesium.Cartesian2(x, y);\r\n try {\r\n let intersection = getAdjustedGroundIntersectionOfCameraRay(viewer, winPos);\r\n if (intersection) {\r\n let point = (<any> Cesium.Cartographic).fromCartesian(intersection, viewer.scene.globe.ellipsoid);\r\n maxLong = Math.max(maxLong, point.longitude);\r\n maxLat = Math.max(maxLat, point.latitude);\r\n minLong = Math.min(minLong, point.longitude);\r\n minLat = Math.min(minLat, point.latitude);\r\n found++;\r\n }\r\n }\r\n catch {\r\n\r\n }\r\n };\r\n\r\n // Outer circle.\r\n updateMinMaxForPoint(BORDER_STEPS, BORDER_STEPS);\r\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS, BORDER_STEPS);\r\n updateMinMaxForPoint(BORDER_STEPS, (100 / NET_STEP_PERCENT) - BORDER_STEPS);\r\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS, (100 / NET_STEP_PERCENT) - BORDER_STEPS);\r\n\r\n // Inner circle.\r\n updateMinMaxForPoint(BORDER_STEPS * 2, BORDER_STEPS * 2);\r\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS * 2, BORDER_STEPS * 2);\r\n updateMinMaxForPoint(BORDER_STEPS * 2, (100 / NET_STEP_PERCENT) - BORDER_STEPS * 2);\r\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS * 2, (100 / NET_STEP_PERCENT) - BORDER_STEPS * 2);\r\n\r\n if (found > 0) {\r\n const viewRect: Bounds.IReqBounds = {\r\n east: maxLong,\r\n west: minLong,\r\n north: maxLat,\r\n south: minLat\r\n };\r\n return viewRect;\r\n }\r\n return <any>null;\r\n}\r\n\r\nfunction getAdjustedGroundIntersectionOfCameraRay(viewer: Cesium.Viewer, screenPos: Cesium.Cartesian2): Cesium.Cartesian3 {\r\n const ray = viewer.camera.getPickRay(screenPos);\r\n const intersection = ray ? viewer.scene.globe.pick(ray, viewer.scene) : null;\r\n if (intersection) {\r\n return intersection;\r\n }\r\n return <any>null;\r\n}\r\n\r\nfunction areBoundsEqual(a: Bounds.IReqBounds, b: Bounds.IReqBounds): boolean {\r\n return a.north == b.north && a.south == b.south && a.east == b.east && a.west == b.west;\r\n}\r\n\r\nfunction arePosEqual(a: Carto.ICarto, b: Carto.ICarto): boolean {\r\n return a.latitude == b.latitude && a.longitude == b.longitude;\r\n}\r\n\r\n/**\r\n * Monitors and emits events when the Cesium view changes.\r\n */\r\nexport class CesiumViewMonitor implements ViewMonitor.IMonitor {\r\n private viewer: Cesium.Viewer;\r\n private pendingTimeout: any;\r\n private checkInterval: any;\r\n private target: Carto.ICarto = <any>null;\r\n private bounds: Bounds.IReqBounds = <any>null;\r\n private disposed: boolean = false;\r\n private updatedEvent: BruceEvent<ViewMonitor.IArea> = <any>null;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n\r\n\r\n public constructor(viewer: Cesium.Viewer) {\r\n this.viewer = viewer;\r\n this.tryEmitUpdate();\r\n this.checkInterval = setInterval(() => {\r\n this.updateQueue();\r\n },\r\n POSITION_CHECK_TIMER);\r\n }\r\n\r\n public Updated(): BruceEvent<ViewMonitor.IArea> {\r\n if (!this.updatedEvent) {\r\n this.updatedEvent = new BruceEvent();\r\n }\r\n return this.updatedEvent;\r\n }\r\n\r\n public GetBounds(): Bounds.IReqBounds {\r\n return this.bounds;\r\n }\r\n\r\n public GetTarget(): Carto.ICarto {\r\n return this.target;\r\n }\r\n\r\n public DoUpdate(): void {\r\n this.tryEmitUpdate();\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.disposed = true;\r\n clearInterval(this.checkInterval);\r\n }\r\n\r\n private tryDoUpdate(): ESearchStatus {\r\n if (!this.viewer || this.viewer.isDestroyed()) {\r\n this.Dispose();\r\n return ESearchStatus.LocationMissing;\r\n }\r\n\r\n let viewRect: Bounds.IReqBounds = <any>null;\r\n let center: Carto.ICarto = <any>null;\r\n\r\n const camera = this.viewer.camera;\r\n const terrainHeight = this.viewer.scene.globe.getHeight(camera.positionCartographic);\r\n const cameraPosition = this.viewer.camera.positionCartographic;\r\n\r\n // We are almost at the ground, screw horizon, just load around.\r\n if (terrainHeight && ((cameraPosition.height - terrainHeight) < DEFAULT_GROUNDED_HEIGHT)) {\r\n\r\n // View area calculation.\r\n viewRect = <any>{};\r\n const viewRectRad: Bounds.IReqBounds = netScanViewForBoundaries(this.viewer);\r\n if\r\n (\r\n viewRectRad &&\r\n viewRectRad.east &&\r\n viewRectRad.west &&\r\n viewRectRad.north &&\r\n viewRectRad.south\r\n ) {\r\n viewRect.east = Cesium.Math.toDegrees(Math.max(viewRectRad.east, cameraPosition.longitude));\r\n viewRect.west = Cesium.Math.toDegrees(Math.min(viewRectRad.west, cameraPosition.longitude));\r\n viewRect.south = Cesium.Math.toDegrees(Math.min(viewRectRad.south, cameraPosition.latitude));\r\n viewRect.north = Cesium.Math.toDegrees(Math.max(viewRectRad.north, cameraPosition.latitude));\r\n }\r\n else {\r\n viewRect.east = cameraPosition.longitude;\r\n viewRect.west = cameraPosition.longitude;\r\n viewRect.south = cameraPosition.latitude;\r\n viewRect.north = cameraPosition.latitude;\r\n }\r\n center = <any>{};\r\n center.latitude = Cesium.Math.toDegrees(camera.positionCartographic.latitude);\r\n center.longitude = Cesium.Math.toDegrees(camera.positionCartographic.longitude);\r\n }\r\n else {\r\n // View area calculation.\r\n const windowPosition = new Cesium.Cartesian2(\r\n this.viewer.container.clientWidth / 2,\r\n this.viewer.container.clientHeight / 2\r\n );\r\n const intersection = getAdjustedGroundIntersectionOfCameraRay(this.viewer, windowPosition);\r\n\r\n let point = null;\r\n if (intersection) {\r\n point = (<any> Cesium.Cartographic).fromCartesian(intersection, this.viewer.scene.globe.ellipsoid);\r\n }\r\n if (point) {\r\n center = <any>{};\r\n center.latitude = Cesium.Math.toDegrees(point.latitude);\r\n center.longitude = Cesium.Math.toDegrees(point.longitude);\r\n\r\n let viewRectRad: Bounds.IReqBounds = netScanViewForBoundaries(this.viewer);\r\n if (viewRectRad) {\r\n viewRect = <any>{};\r\n viewRect.east = Cesium.Math.toDegrees(viewRectRad.east);\r\n viewRect.west = Cesium.Math.toDegrees(viewRectRad.west);\r\n viewRect.south = Cesium.Math.toDegrees(viewRectRad.south);\r\n viewRect.north = Cesium.Math.toDegrees(viewRectRad.north);\r\n }\r\n }\r\n }\r\n\r\n // Minimal field of view.\r\n if (viewRect) {\r\n const centerLong = (viewRect.east + viewRect.west) / 2;\r\n const centerLat = (viewRect.north + viewRect.south) / 2;\r\n viewRect.east = Math.max(viewRect.east, centerLong + (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\r\n viewRect.west = Math.min(viewRect.west, centerLong - (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\r\n viewRect.south = Math.min(viewRect.south, centerLat - (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\r\n viewRect.north = Math.max(viewRect.north, centerLat + (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\r\n viewRect.alt = this.viewer.scene.camera.positionCartographic?.height;\r\n }\r\n\r\n if (center && viewRect) {\r\n if (\r\n (!this.target || (this.target && !arePosEqual(this.target, center))) ||\r\n (!this.bounds || (this.bounds && !areBoundsEqual(this.bounds, viewRect)))\r\n ) {\r\n this.target = center;\r\n this.bounds = viewRect;\r\n return ESearchStatus.LocationChanged;\r\n }\r\n return ESearchStatus.LocationFound;\r\n }\r\n return ESearchStatus.LocationMissing;\r\n }\r\n\r\n private tryEmitUpdate() {\r\n const searchResult = this.tryDoUpdate();\r\n if (searchResult == ESearchStatus.LocationChanged) {\r\n const interest: ViewMonitor.IArea = {\r\n \tbounds: this.bounds,\r\n \ttarget: this.target\r\n };\r\n this.updatedEvent?.Trigger(interest);\r\n }\r\n else if (searchResult == ESearchStatus.LocationMissing) {\r\n this.updateQueue();\r\n }\r\n }\r\n\r\n private queuePosition(lag: number) {\r\n if (this.pendingTimeout) {\r\n clearTimeout(this.pendingTimeout);\r\n }\r\n this.pendingTimeout = setTimeout(() => {\r\n if (!this.disposed) {\r\n this.tryEmitUpdate();\r\n }\r\n }, lag);\r\n }\r\n\r\n private updateQueue() {\r\n this.queuePosition(TIME_LAG);\r\n }\r\n}","import * as Cesium from \"cesium\";\r\n\r\ninterface IWidget {\r\n isDestroyed: () => boolean;\r\n destroy: () => void;\r\n}\r\n\r\nexport namespace ViewerUtils {\r\n /**\r\n * Destroys all the junk that cesium viewer ships with.\r\n * @param viewer \r\n */\r\n export function InitViewer(viewer: Cesium.Viewer) {\r\n ViewerUtils.DestroyWidget(viewer.timeline);\r\n ViewerUtils.DestroyWidget(viewer.vrButton);\r\n ViewerUtils.DestroyWidget(viewer.sceneModePicker);\r\n ViewerUtils.DestroyWidget(viewer.homeButton);\r\n ViewerUtils.DestroyWidget(viewer.fullscreenButton);\r\n ViewerUtils.DestroyWidget(viewer.baseLayerPicker);\r\n ViewerUtils.StyleContainer(viewer);\r\n }\r\n\r\n export function DestroyWidget(widget: IWidget): void {\r\n if (widget && !widget.isDestroyed()) {\r\n widget.destroy();\r\n }\r\n }\r\n\r\n /**\r\n * Hides all unnecessary elements from the Cesium viewer container.\r\n * @param viewer \r\n */\r\n export function StyleContainer(viewer: Cesium.Viewer) {\r\n const container = viewer.container;\r\n const genContainer = container.getElementsByClassName(\"cesium-viewer\")?.[0];\r\n if (genContainer) {\r\n const children = genContainer.children;\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i] as HTMLElement;\r\n if (!child.classList.contains(\"cesium-viewer-cesiumWidgetContainer\")) {\r\n child.style.display = \"none\";\r\n }\r\n }\r\n }\r\n\r\n const canvas = viewer.canvas as HTMLElement;\r\n canvas.style.width = \"100%\";\r\n canvas.style.height = \"100%\";\r\n\r\n const widget = canvas.parentElement as HTMLElement;\r\n widget.style.width = \"100%\";\r\n widget.style.height = \"100%\";\r\n widget.style.touchAction = \"none\";\r\n\r\n const widgetContainer = widget.parentElement as HTMLElement;\r\n widgetContainer.style.width = \"100%\";\r\n widgetContainer.style.height = \"100%\";\r\n\r\n const viewerContainer = widgetContainer.parentElement as HTMLElement;\r\n viewerContainer.style.fontFamily = \"sans-serif\";\r\n viewerContainer.style.fontSize = \"16px\";\r\n viewerContainer.style.overflow = \"hidden\";\r\n viewerContainer.style.display = \"block\";\r\n viewerContainer.style.position = \"relative\";\r\n viewerContainer.style.top = \"0\";\r\n viewerContainer.style.left = \"0\";\r\n viewerContainer.style.width = \"100%\";\r\n viewerContainer.style.height = \"100%\";\r\n }\r\n}","import * as Cesium from \"cesium\";\r\n\r\nexport namespace DrawingUtils {\r\n /**\r\n * Returns the point across a polyline at a given distance.\r\n * If the distance exceeds the length of the line, the point will be placed at the end of the line.\r\n * @param viewer \r\n * @param positions \r\n * @param distance \r\n * @returns \r\n */\r\n export function PointAcrossPolyline(viewer: Cesium.Viewer, positions: Cesium.Cartesian3[], distance: number): Cesium.Cartesian3 {\r\n if (positions.length > 1) {\r\n let currentDistance = 0;\r\n for (let i = 0; i < positions.length - 1; i++) {\r\n const length = Cesium.Cartesian3.distance(positions[i], positions[i + 1]);\r\n if (length + currentDistance >= distance) {\r\n const carto1 = Cesium.Cartographic.fromCartesian(positions[i]);\r\n const carto2 = Cesium.Cartographic.fromCartesian(positions[i + 1]);\r\n const geodesic = new Cesium.EllipsoidGeodesic(carto1, carto2, viewer.scene.globe.ellipsoid);\r\n const position = geodesic.interpolateUsingSurfaceDistance(distance - currentDistance);\r\n const height = (carto1.height + carto2.height) / 2;\r\n return Cesium.Cartesian3.fromRadians(position.longitude, position.latitude, height);\r\n }\r\n else {\r\n currentDistance += length;\r\n }\r\n }\r\n }\r\n else if (positions.length > 0) {\r\n return positions[0];\r\n }\r\n else {\r\n return <any>null;\r\n }\r\n return positions[positions.length - 1];\r\n }\r\n}","import * as Cesium from \"cesium\";\r\n\r\nexport namespace MeasureUtils {\r\n /**\r\n * Returns the total distance in meters between an array of points.\r\n * This distance is NOT following the terrain.\r\n * @param posses \r\n * @returns \r\n */\r\n export function MeasurePolyline(posses: Cesium.Cartesian3[]): number {\r\n if (posses.length < 2) {\r\n return 0;\r\n }\r\n let totalLength = 0;\r\n let pos1 = null;\r\n let pos2 = null;\r\n for (let i = 0; i < posses.length; i++) {\r\n if (pos1 == null) {\r\n pos1 = posses[i];\r\n }\r\n else if (pos2 == null) {\r\n pos2 = posses[i];\r\n totalLength += Cesium.Cartesian3.distance(pos1, pos2);\r\n pos1 = pos2;\r\n pos2 = null;\r\n }\r\n }\r\n return totalLength;\r\n }\r\n}","/**\r\n * Ensures a number is returned from a given value.\r\n * If given value cannot be parsed it will return defaultNum.\r\n * @param value \r\n * @param defaultNum default is 0.\r\n * @returns \r\n */\r\nexport function EnsureNumber(value: any, defaultNum?: number): number {\r\n if (!defaultNum) {\r\n defaultNum = 0;\r\n }\r\n value = Number(value);\r\n if (isNaN(value)) {\r\n return defaultNum;\r\n }\r\n return value;\r\n}","import { Cartes, Carto, Entity as E, Geometry } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { VisualsRegister } from \"src/bruce-cesium\";\r\nimport { EntityRenderEngine } from \"../rendering/entity-render-engine\";\r\nimport { DrawingUtils } from \"./drawing-utils\";\r\nimport { MeasureUtils } from \"./measure-utils\";\r\nimport { EnsureNumber } from \"./js-utils\";\r\n\r\nfunction traverseEntity(cEntity: EntityRenderEngine.ICesiumEntityExt, arr: EntityRenderEngine.ICesiumEntityExt[]): void {\r\n if (cEntity._parentEntity) {\r\n traverseEntity(cEntity._parentEntity, arr);\r\n }\r\n if (cEntity._siblingGraphics) {\r\n for (let i = 0; i < cEntity._siblingGraphics.length; i++) {\r\n const sibling = cEntity._siblingGraphics[i];\r\n traverseEntity(sibling, arr);\r\n }\r\n }\r\n arr.push(cEntity);\r\n}\r\n\r\nconst ORG_OPACITY_KEY = \"_org_opacity_\";\r\nconst NEW_OPACITY_KEY = \"_new_opacity_\";\r\n\r\nfunction getColor(viewer: Cesium.Viewer, material: Cesium.Property | Cesium.ColorMaterialProperty) {\r\n function findColor() {\r\n if (!material) {\r\n return Cesium.Color.WHITE;\r\n }\r\n if (material.getValue) {\r\n material = material.getValue(viewer.scene.lastRenderTime);\r\n }\r\n if (material instanceof Cesium.Color) {\r\n return material;\r\n }\r\n let tmp = (material as any)?.color;\r\n if (tmp?.getValue) {\r\n tmp = tmp.getValue(viewer.scene.lastRenderTime);\r\n }\r\n return tmp ? tmp : Cesium.Color.WHITE;\r\n }\r\n return findColor()?.clone?.();\r\n}\r\n\r\nfunction applyOpacityToColor(viewer: Cesium.Viewer, opacity: number, material: Cesium.Property | Cesium.ColorMaterialProperty) {\r\n const color = getColor(viewer, material);\r\n if (color) {\r\n color.alpha = opacity;\r\n }\r\n return color;\r\n}\r\n\r\nfunction applyOpacityToGraphic(viewer: Cesium.Viewer, entity: Cesium.Entity, graphicKey: string, materialKey: string, opacity: number) {\r\n const color = applyOpacityToColor(viewer, opacity, entity[graphicKey][materialKey]);\r\n if (color) {\r\n entity[graphicKey][materialKey] = materialKey == \"material\" ? new Cesium.ColorMaterialProperty(color) : color;\r\n }\r\n}\r\n\r\nfunction revertAppliedEntityOpacity(viewer: Cesium.Viewer, entity: VisualsRegister.Visual) {\r\n entity[NEW_OPACITY_KEY] = null;\r\n if (entity instanceof Cesium.Entity) {\r\n const processKey = (graphicKey: string, materialKey: string = \"material\") => {\r\n if (entity[graphicKey]) {\r\n const orgOpacity = entity[graphicKey][ORG_OPACITY_KEY];\r\n if (orgOpacity != null) {\r\n applyOpacityToGraphic(viewer, entity, graphicKey, materialKey, orgOpacity);\r\n }\r\n entity[graphicKey][ORG_OPACITY_KEY] = null;\r\n }\r\n }\r\n processKey(\"polygon\");\r\n processKey(\"polyline\");\r\n processKey(\"point\", \"color\");\r\n processKey(\"ellipse\");\r\n processKey(\"model\", \"color\");\r\n }\r\n else if (entity instanceof Cesium.Cesium3DTileFeature) {\r\n const orgOpacity = entity[ORG_OPACITY_KEY];\r\n if (orgOpacity != null) {\r\n const color = entity.color ? entity.color.clone() : new Cesium.Color();\r\n color.alpha = orgOpacity;\r\n entity.color = color;\r\n }\r\n entity[ORG_OPACITY_KEY] = null;\r\n }\r\n}\r\n\r\nfunction applyOpacityToEntity(viewer: Cesium.Viewer, opacity: number, entity: VisualsRegister.Visual) {\r\n entity[NEW_OPACITY_KEY] = opacity;\r\n if (entity instanceof Cesium.Entity) {\r\n const processKey = (graphicKey: string, materialKey: string = \"material\") => {\r\n if (entity[graphicKey]) {\r\n let orgOpacity = entity[graphicKey][ORG_OPACITY_KEY];\r\n if (orgOpacity == null) {\r\n entity[graphicKey][ORG_OPACITY_KEY] = getColor(viewer, entity[graphicKey][materialKey])?.alpha;\r\n }\r\n if (orgOpacity == null) {\r\n orgOpacity = 1;\r\n }\r\n applyOpacityToGraphic(viewer, entity, graphicKey, materialKey, opacity * orgOpacity);\r\n }\r\n }\r\n processKey(\"polygon\");\r\n processKey(\"polyline\");\r\n processKey(\"point\", \"color\");\r\n processKey(\"ellipse\");\r\n processKey(\"model\", \"color\");\r\n }\r\n else if (entity instanceof Cesium.Cesium3DTileFeature) {\r\n let orgOpacity = entity[ORG_OPACITY_KEY];\r\n if (orgOpacity == null) {\r\n entity[ORG_OPACITY_KEY] = entity.color ? entity.color.alpha : 1;\r\n }\r\n if (!orgOpacity) {\r\n orgOpacity = 1;\r\n }\r\n const color = entity.color ? entity.color.clone() : new Cesium.Color();\r\n color.alpha = opacity * orgOpacity;\r\n if (color.equals(Cesium.Color.WHITE)) {\r\n color.blue = 0.0001;\r\n }\r\n entity.color = color;\r\n }\r\n}\r\n\r\nfunction findOpacity(entity: VisualsRegister.Visual) {\r\n return entity[NEW_OPACITY_KEY];\r\n}\r\n\r\nexport namespace EntityUtils {\r\n /**\r\n * Returns an entity's position.\r\n * This will attempt to calculate it from multiple sources of data.\r\n * @param viewer \r\n * @param entity \r\n * @returns \r\n */\r\n export function GetPos(viewer: Cesium.Viewer, entity: E.IEntity): Cesium.Cartesian3 {\r\n function evaluate() {\r\n if (entity.location && Carto.ValidateCarto(entity.location)) {\r\n const location = entity.location;\r\n return Cesium.Cartesian3.fromDegrees(EnsureNumber(location.longitude), EnsureNumber(location.latitude), EnsureNumber(location.altitude));\r\n }\r\n if (entity.geometry && typeof entity.geometry == \"object\") {\r\n const pointStr = entity.geometry.Point;\r\n if (pointStr && typeof pointStr == \"string\") {\r\n const points = Geometry.ParsePoints(pointStr);\r\n const point = points.length > 0 ? points[0] : null;\r\n if (point && Carto.ValidateCarto(point)) {\r\n return Cesium.Cartesian3.fromDegrees(EnsureNumber(point.longitude), EnsureNumber(point.latitude), EnsureNumber(point.altitude));\r\n }\r\n }\r\n const lineStr = entity.geometry.LineString;\r\n if (lineStr && typeof lineStr == \"string\") {\r\n const points = Geometry.ParsePoints(lineStr);\r\n if (points.length > 0) {\r\n const posses = points.map(x => Cesium.Cartesian3.fromDegrees(EnsureNumber(x.longitude), EnsureNumber(x.latitude), EnsureNumber(x.altitude)));\r\n const length = MeasureUtils.MeasurePolyline(posses);\r\n if (length > 0) {\r\n const point = DrawingUtils.PointAcrossPolyline(viewer, posses, length / 2);\r\n if (point && Cartes.ValidateCartes3(point)) {\r\n return point;\r\n }\r\n }\r\n else {\r\n return posses[0];\r\n }\r\n }\r\n }\r\n const pRings = entity.geometry.Polygon;\r\n if (pRings && typeof pRings == \"object\") {\r\n const boundary = pRings.find(x => x.Facing == Geometry.EPolygonRingType.Boundaries)\r\n if (boundary?.LinearRing) {\r\n const points = Geometry.ParsePoints(boundary.LinearRing);\r\n const point = Carto.GetCenter(points);\r\n if (point && Carto.ValidateCarto(point)) {\r\n return Cesium.Cartesian3.fromDegrees(EnsureNumber(point.longitude), EnsureNumber(point.latitude), EnsureNumber(point.altitude));\r\n }\r\n }\r\n }\r\n }\r\n if (entity.boundaries) {\r\n const point: Carto.ICarto = {\r\n latitude: (EnsureNumber(entity.boundaries.minLatitude) + EnsureNumber(entity.boundaries.maxLatitude)) / 2, \r\n longitude: (EnsureNumber(entity.boundaries.minLongitude) + EnsureNumber(entity.boundaries.maxLongitude)) / 2, \r\n altitude: 0\r\n };\r\n if (point && Carto.ValidateCarto(point)) {\r\n return Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\r\n }\r\n }\r\n }\r\n const pos3d = evaluate();\r\n return Cartes.ValidateCartes3(pos3d) ? pos3d : null;\r\n }\r\n\r\n /**\r\n * Returns entity and any associated parent/sibling entities as a flat array.\r\n * @param entity \r\n */\r\n export function GatherEntity(entity: Cesium.Entity): Cesium.Entity[] {\r\n if (entity instanceof Cesium.Entity) {\r\n const cEntity = entity as EntityRenderEngine.ICesiumEntityExt;\r\n const items: EntityRenderEngine.ICesiumEntityExt[] = [];\r\n traverseEntity(cEntity, items);\r\n return items;\r\n }\r\n return [entity];\r\n }\r\n\r\n /**\r\n * Looks at given entities with least amount of movement.\r\n * @param viewer \r\n * @param entities \r\n */\r\n export function LookAtEntities(viewer: Cesium.Viewer, entities: VisualsRegister.Visual[]) {\r\n const [ R, CT, C3, M3, M4, E ] = [ Cesium.Rectangle, Cesium.Cartographic, Cesium.Cartesian3, Cesium.Matrix3, Cesium.Matrix4, Cesium.EasingFunction ];\r\n const cutoffDistance = 2000;\r\n const hoverHeight = 2000;\r\n const duration = 0.5;\r\n\r\n const centers = (p: Cesium.Primitive): [Cesium.Cartesian3, number][] => {\r\n const PM = p.modelMatrix;\r\n const instances = ((i) => (i instanceof Cesium.GeometryInstance ? [i] : i))(p.geometryInstances);\r\n return instances.map((g) => {\r\n const _M = M4.multiply(PM, g.modelMatrix, new M4);\r\n const G = g.geometry;\r\n const _p = G.attributes.position;\r\n const b = G.boundingSphere;\r\n return [ b.center, b.radius ];\r\n });\r\n };\r\n\r\n const currentTime = Cesium.JulianDate.now();\r\n const target: [Cesium.Cartesian3, number][] = entities.flatMap((e) => {\r\n if (e instanceof Cesium.Cartesian3) {\r\n return [[ e, 0 ]];\r\n }\r\n if (e instanceof Cesium.Entity) {\r\n return [[ e.position?.getValue(currentTime)!, 0 ]];\r\n }\r\n if (e instanceof Cesium.Primitive) {\r\n return centers(e);\r\n }\r\n if (e instanceof Cesium.Cesium3DTileFeature) {\r\n const s = e.tileset.boundingSphere;\r\n return [[ s.center, s.radius ]];\r\n }\r\n });\r\n\r\n const bounds = (list: [Cesium.Cartesian3, number][]) => {\r\n let min = list[0][0];\r\n let max = min;\r\n for (const [ p, r ] of list) {\r\n const pMin = C3.subtract(p, new C3(r), new C3);\r\n const pMax = C3.add(p, new C3(r), new C3);\r\n min = C3.minimumByComponent(pMin, min, new C3);\r\n max = C3.maximumByComponent(pMax, max, new C3);\r\n }\r\n const c = C3.multiplyByScalar(C3.add(max, min, new C3), 0.5, new C3);\r\n\r\n return c;\r\n };\r\n\r\n const center = bounds(target);\r\n\r\n const orient = (p) => {\r\n const d = C3.subtract(center, p, new C3);\r\n const dir = C3.normalize(d, new C3);\r\n const up = viewer.scene.globe.ellipsoid.geodeticSurfaceNormal(center);\r\n return [ p, dir, up ];\r\n };\r\n\r\n const shorten = (v, l) => {\r\n const c = l / C3.magnitude(v);\r\n return C3.multiplyByScalar(v, c, new C3);\r\n };\r\n\r\n const camera = viewer.camera;\r\n const [ p, direction, up ] = orient(camera.position);\r\n const orientation = { direction, up };\r\n camera.flyTo({\r\n destination: p,\r\n orientation,\r\n duration,\r\n complete: () => {\r\n if (C3.distance(p, center) > cutoffDistance) {\r\n let d = C3.subtract(p, center, new C3);\r\n d = shorten(d, cutoffDistance);\r\n const h = C3.multiplyByScalar(C3.normalize(up, new C3), hoverHeight, new C3);\r\n d = C3.add(d, h, new C3);\r\n d = shorten(d, cutoffDistance);\r\n d = C3.add(d, center, new C3);\r\n\r\n const [ _p, direction, u ] = orient(d);\r\n camera.flyTo({\r\n destination: d,\r\n orientation: { direction, up: u }\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Sets opacity of given entity.\r\n * Opacity will be multiplied by original opacity.\r\n * Setting opacity puts original opacity into a temporary storage which can be reverted into.\r\n * @param viewer \r\n * @param entity \r\n * @param opacity \r\n */\r\n export function SetOpacity(viewer: Cesium.Viewer, entity: VisualsRegister.Visual, opacity: number) {\r\n applyOpacityToEntity(viewer, opacity, entity);\r\n }\r\n\r\n /**\r\n * Reverts opacity of given entity to original opacity.\r\n * If opacity was not updated using \"SetOpacity\" then nothing will happen.\r\n * @param viewer \r\n * @param entity \r\n */\r\n export function RevertOpacity(viewer: Cesium.Viewer, entity: VisualsRegister.Visual) {\r\n revertAppliedEntityOpacity(viewer, entity);\r\n }\r\n\r\n /**\r\n * Gets opacity of the entity.\r\n * This does not count opacity that it was rendered with.\r\n * This is the opacity that was set post-rendering.\r\n * @param viewer \r\n * @param entity \r\n */\r\n export function GetOpacity(entity: VisualsRegister.Visual) {\r\n return findOpacity(entity);\r\n }\r\n}","import { EntitiesRenderManager } from \"./entities/entities-render-manager\";\r\nimport { EntitiesLoadedRenderManager } from \"./entities/entities-loaded-render-manager\";\r\nimport { EntitiesIdsRenderManager } from \"./entities/entities-ids-render-manager\";\r\nimport { EntityRenderManager } from \"./entities/entity-render-manager\";\r\nimport { EntityUtils } from \"../../utils/entity-utils\";\r\nimport { Cartes, Entity, ZoomControl } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { TilesetCadRenderManager } from \"./tilesets/tileset-cad-render-manager\";\r\nimport { TilesetOsmRenderManager } from \"./tilesets/tileset-osm-render-manager\";\r\nimport { TilesetEntitiesRenderManager } from \"./tilesets/tileset-entities-render-manager\";\r\nimport { TilesetPointcloudRenderManager } from \"./tilesets/tileset-pointcloud-render-manager\";\r\nimport { DataSourceStaticKmlManager } from \"./data-source/data-source-static-kml-manager\";\r\nimport { EnsureNumber } from \"../../utils/js-utils\";\r\n\r\nexport namespace RenderManager {\r\n export interface IManager {\r\n Init(): Promise<void>;\r\n Dispose(): void;\r\n Disposed: boolean;\r\n }\r\n\r\n export type Type = EntitiesRenderManager.Manager | \r\n EntitiesLoadedRenderManager.Manager | \r\n EntitiesIdsRenderManager.Manager | \r\n EntityRenderManager.Manager |\r\n TilesetCadRenderManager.Manager |\r\n TilesetOsmRenderManager.Manager | \r\n TilesetEntitiesRenderManager.Manager |\r\n TilesetPointcloudRenderManager.Manager |\r\n DataSourceStaticKmlManager.Manager;\r\n\r\n export namespace Utils {\r\n export function DetermineZoomItem(viewer: Cesium.Viewer, entity: Entity.IEntity, zoomControl: ZoomControl.IItem[]): ZoomControl.IItem {\r\n const pos = EntityUtils.GetPos(viewer, entity);\r\n if (!pos) {\r\n return null;\r\n }\r\n const cameraPos = viewer.camera.position;\r\n if (!Cartes.ValidateCartes3(cameraPos)) {\r\n return null;\r\n }\r\n const distance = Cesium.Cartesian3.distance(pos, cameraPos);\r\n return (!distance && distance != 0) ? null : GetZoomControlFromDistance(zoomControl, distance);\r\n }\r\n \r\n export function GetZoomControlFromDistance(zoomControl: ZoomControl.IItem[], distance: number): ZoomControl.IItem {\r\n for (let i = 0; i < zoomControl.length; i++) {\r\n let zoomItem = zoomControl[i];\r\n if ((distance >= EnsureNumber(zoomItem.MinZoom)) && (distance <= EnsureNumber(zoomItem.MaxZoom))) {\r\n return zoomItem;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n export function GetZoomMinMax(zoomControl: ZoomControl.IItem[]): number[] {\r\n let min = 0;\r\n let max = 100;\r\n for (let i = 0; i < zoomControl.length; i++) {\r\n const zoomItem = zoomControl[i];\r\n zoomItem.MinZoom = EnsureNumber(zoomItem.MinZoom);\r\n zoomItem.MaxZoom = EnsureNumber(zoomItem.MaxZoom);\r\n if (zoomItem.MinZoom != null) {\r\n if (zoomItem.MinZoom < min) {\r\n min = zoomItem.MinZoom;\r\n }\r\n }\r\n if (zoomItem.MaxZoom != null) {\r\n if (zoomItem.MaxZoom > max) {\r\n max = zoomItem.MaxZoom;\r\n }\r\n }\r\n }\r\n return [min, max];\r\n }\r\n }\r\n}","import * as Cesium from \"cesium\";\r\nimport { Entity, BruceApi, ZoomControl, Style, EntityTag, Calculator, Color, Geometry, Carto, EntityLod, EntityType, IDictionary, ClientFile } from \"bruce-models\";\r\nimport { EntityUtils } from \"../utils/entity-utils\";\r\nimport { RenderManager } from \"./render-managers/render-manager\";\r\nimport { VisualsRegister } from \"./visuals-register\";\r\nimport { EnsureNumber } from \"../utils/js-utils\";\r\n\r\nfunction colorToCColor(color: Color.IColor): Cesium.Color {\r\n return new Cesium.Color(\r\n color.red ? color.red/255 : 0, \r\n color.green ? color.green/255 : 0, \r\n color.blue ? color.blue/255 : 0, \r\n color.alpha\r\n );\r\n}\r\n\r\nfunction getPolygonStyleExtrusion(pStyle: any, entity: Entity.IEntity, tags: EntityTag.ITag[], heightRef: Cesium.HeightReference): number {\r\n const attrPath = pStyle.extrusionPath;\r\n if (!pStyle.useExtrusion || !attrPath) {\r\n return <any>null;\r\n }\r\n try {\r\n const extrusion = +Calculator.GetValue(attrPath, entity, tags);\r\n if (!extrusion && extrusion != 0) {\r\n return <any>null;\r\n }\r\n /* \r\n Cesium extrudes in strange way.\r\n If you want something that is 50 meters above sea, and 5 meters tall,\r\n You need to extrude by 55 meters, if you extrude by 5 it will extrude from sea and look flat.\r\n */\r\n const height = <number>entity.location?.altitude;\r\n return heightRef == Cesium.HeightReference.RELATIVE_TO_GROUND ? extrusion + height : extrusion;\r\n } \r\n catch (e) {\r\n console.error(e);\r\n }\r\n return 0;\r\n}\r\n\r\ninterface IExtrusionData {\r\n value: number;\r\n exHeightRef: Cesium.HeightReference;\r\n posses: Cesium.Cartesian3[];\r\n}\r\n\r\nfunction getPolygonExtrusion(\r\n entity: Entity.IEntity, \r\n tags: EntityTag.ITag[], \r\n ring: Geometry.IPolygonRing,\r\n posses: Cesium.Cartesian3[], \r\n heightRef: Cesium.HeightReference, \r\n pStyle: any\r\n): IExtrusionData {\r\n const data: IExtrusionData = {\r\n value: <any>undefined,\r\n exHeightRef: Cesium.HeightReference.RELATIVE_TO_GROUND,\r\n posses: <any>null\r\n }\r\n\r\n // Step 1. Try get using style.\r\n const extrusion = getPolygonStyleExtrusion(pStyle, entity, tags, heightRef);\r\n if (extrusion) {\r\n if (heightRef == Cesium.HeightReference.NONE) {\r\n // Let's normalize all point heights to be the same (at entity altitude).\r\n // This let's us have a consistent extrusion height, and be adjustable easier by user.\r\n let alt = <number>entity?.location?.altitude;\r\n if (!alt) {\r\n alt = 0;\r\n }\r\n\r\n const points = posses.map(x => Cesium.Cartographic.fromCartesian(x));\r\n points.forEach((point) => {\r\n point.height = alt;\r\n });\r\n posses = points.map(x => Cesium.Cartesian3.fromRadians(EnsureNumber(x.longitude), EnsureNumber(x.latitude), EnsureNumber(x.height)));\r\n }\r\n }\r\n // Step 2. Try get using geometry data.\r\n else {\r\n data.exHeightRef = <any>undefined;\r\n if (ring.Height && ring.Height > 0) {\r\n const points = posses.map(x => Cesium.Cartographic.fromCartesian(x));\r\n if (points.length <= 0) {\r\n data.value = ring.Height;\r\n }\r\n else {\r\n let highest: number = <any>null; \r\n for (let i = 0; i < points.length; i++) {\r\n let pointHeight = points[i].height;\r\n if (pointHeight > highest || highest === null) {\r\n highest = pointHeight;\r\n }\r\n }\r\n highest = (highest === null ? 0 : highest) + ring.Height;\r\n data.value = highest;\r\n }\r\n data.exHeightRef = Cesium.HeightReference.NONE;\r\n }\r\n }\r\n\r\n data.posses = posses;\r\n if (data.value != undefined) {\r\n data.value = EnsureNumber(data.value);\r\n }\r\n return data;\r\n}\r\n\r\nfunction getHeightRef(style: any): Cesium.HeightReference {\r\n let heightRef = Cesium.HeightReference.CLAMP_TO_GROUND;\r\n const altOptionId = style?.altitudeOption?.id;\r\n if (altOptionId == 1) {\r\n heightRef = Cesium.HeightReference.NONE;\r\n }\r\n else if (altOptionId == 2) {\r\n heightRef = Cesium.HeightReference.RELATIVE_TO_GROUND;\r\n }\r\n return heightRef;\r\n}\r\n\r\nfunction getZIndex(style: any, entity: Entity.IEntity, tags: EntityTag.ITag[]): number {\r\n let zIndex = style?.zIndex ? +Calculator.GetValue(style?.zIndex, entity, tags) : 0;\r\n if (zIndex == null) {\r\n zIndex = 0;\r\n }\r\n return EnsureNumber(zIndex);\r\n}\r\n\r\nasync function getStyle(api: BruceApi.Api, entity: Entity.IEntity, styleId: number): Promise<Style.IStyle> {\r\n let style: Style.IStyle = <any>null;\r\n if (styleId) {\r\n style = await Style.Get(api, styleId);\r\n }\r\n if (!style) {\r\n const type = await EntityType.Get(api, entity.Bruce[\"EntityType.ID\"]);\r\n if (type[\"DisplaySetting.ID\"]) {\r\n style = await Style.Get(api, type[\"DisplaySetting.ID\"]);\r\n }\r\n }\r\n return style;\r\n}\r\n\r\nfunction getExistingCEntity(entityId: string, menuItemId: string, item: ZoomControl.IItem, visualRegister: VisualsRegister.Register): EntityRenderEngine.ICesiumEntityExt {\r\n return <any>visualRegister.GetRego(entityId, menuItemId)?.visual;\r\n}\r\n\r\nfunction getRenderGroupId(zoomItem: ZoomControl.IItem): string {\r\n if (!zoomItem) {\r\n return <any>null;\r\n }\r\n return zoomItem.MinZoom + \"-\" + zoomItem.MaxZoom;\r\n}\r\n\r\nexport namespace EntityRenderEngine {\r\n export interface ICesiumEntityExt extends Cesium.Entity {\r\n _siblingGraphics?: Cesium.Entity[];\r\n _parentEntity?: Cesium.Entity;\r\n _renderGroup?: string;\r\n }\r\n\r\n export interface IParams {\r\n apiGetter: BruceApi.IGetter,\r\n viewer: Cesium.Viewer; \r\n visualRegister: VisualsRegister.Register;\r\n menuItemId: string;\r\n zoomControl: ZoomControl.IItem[];\r\n entities: Entity.IEntity[];\r\n }\r\n\r\n export async function Render(params: IParams): Promise<IDictionary<ICesiumEntityExt>> {\r\n const groupRenderParams = {\r\n apiGetter: params.apiGetter,\r\n viewer: params.viewer,\r\n entities: [],\r\n zoomItems: <IDictionary<ZoomControl.IItem>>{},\r\n menuItemId: params.menuItemId,\r\n visualRegister: params.visualRegister\r\n }\r\n\r\n const cEntities: IDictionary<ICesiumEntityExt> = {};\r\n const models: Entity.IEntity[] = [];\r\n const polygons: Entity.IEntity[] = [];\r\n const polylines: Entity.IEntity[] = [];\r\n const points: Entity.IEntity[] = [];\r\n\r\n // Initial sorting.\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n const id = <string>entity.Bruce.ID;\r\n\r\n const zoomItem = RenderManager.Utils.DetermineZoomItem(params.viewer, entity, params.zoomControl);\r\n let displayType = zoomItem?.DisplayType;\r\n if (!displayType) {\r\n displayType = ZoomControl.EDisplayType.Hidden;\r\n }\r\n // Backwards compatibility.\r\n else if (<string>displayType == \"polygon\") {\r\n displayType = ZoomControl.EDisplayType.Geometry;\r\n }\r\n\r\n if (displayType != ZoomControl.EDisplayType.Hidden) {\r\n const newRenderId = getRenderGroupId(zoomItem);\r\n const existing = getExistingCEntity(id, params.menuItemId, zoomItem, params.visualRegister);\r\n const oldRenderId = existing?._renderGroup;\r\n \r\n if (newRenderId == oldRenderId) {\r\n cEntities[id] = existing;\r\n }\r\n else {\r\n if (displayType == ZoomControl.EDisplayType.Model3D) {\r\n models.push(entity);\r\n }\r\n else if (displayType == ZoomControl.EDisplayType.Geometry) {\r\n polygons.push(entity);\r\n }\r\n else {\r\n points.push(entity);\r\n }\r\n groupRenderParams.zoomItems[id] = zoomItem;\r\n }\r\n }\r\n }\r\n\r\n // Keep trying to render things in order of hard-coded priority system.\r\n if (models.length > 0) {\r\n const mParams: Model3d.IGroupParams = {\r\n ...groupRenderParams,\r\n entities: models\r\n };\r\n const mEntities = await Model3d.RenderGroup(mParams);\r\n for (let i = 0; i < mParams.entities.length; i++) {\r\n const entity = mParams.entities[i];\r\n const id = <string>entity.Bruce.ID;\r\n const cEntity = mEntities[id];\r\n if (cEntity) {\r\n cEntities[id] = cEntity;\r\n }\r\n else {\r\n polygons.push(entity);\r\n }\r\n }\r\n }\r\n if (polygons.length > 0) {\r\n const pParams: Polygon.IGroupParams = {\r\n ...groupRenderParams,\r\n entities: polygons\r\n };\r\n const pEntities = await Polygon.RenderGroup(pParams);\r\n for (let i = 0; i < pParams.entities.length; i++) {\r\n const entity = pParams.entities[i];\r\n const cEntity = pEntities[<string>entity.Bruce.ID];\r\n if (cEntity) {\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n else {\r\n polylines.push(entity);\r\n }\r\n }\r\n }\r\n if (polylines.length > 0) {\r\n const pParams: Polyline.IGroupParams = {\r\n ...groupRenderParams,\r\n entities: polylines\r\n };\r\n const pEntities = await Polyline.RenderGroup(pParams);\r\n for (let i = 0; i < pParams.entities.length; i++) {\r\n const entity = pParams.entities[i];\r\n const cEntity = pEntities[<string>entity.Bruce.ID];\r\n if (cEntity) {\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n else {\r\n points.push(entity);\r\n }\r\n }\r\n }\r\n if (points.length > 0) {\r\n const pParams: Point.IGroupParams = {\r\n ...groupRenderParams,\r\n entities: points\r\n };\r\n const pEntities = await Point.RenderGroup(pParams);\r\n for (let i = 0; i < pParams.entities.length; i++) {\r\n const entity = pParams.entities[i];\r\n const cEntity = pEntities[<string>entity.Bruce.ID];\r\n if (cEntity) {\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n }\r\n }\r\n\r\n return cEntities;\r\n }\r\n\r\n export function Remove(viewer: Cesium.Viewer, entity: ICesiumEntityExt): void {\r\n if (viewer.isDestroyed()) {\r\n return;\r\n }\r\n if (entity._parentEntity) {\r\n Remove(viewer, entity._parentEntity);\r\n }\r\n if (entity._siblingGraphics) {\r\n for (let i = 0; i < entity._siblingGraphics.length; i++) {\r\n const sibling = entity._siblingGraphics[i];\r\n Remove(viewer, sibling);\r\n }\r\n }\r\n if (viewer.entities.contains(entity)) {\r\n viewer.entities.remove(entity);\r\n }\r\n }\r\n\r\n export namespace Point {\r\n export interface IParams {\r\n api: BruceApi.Api;\r\n style: Style.IPointSettings;\r\n entity: Entity.IEntity;\r\n tags: EntityTag.ITag[];\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export interface IGroupParams {\r\n apiGetter: BruceApi.IGetter,\r\n menuItemId: string;\r\n entities: Entity.IEntity[];\r\n zoomItems: IDictionary<ZoomControl.IItem>;\r\n visualRegister: VisualsRegister.Register;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export function Render(params: IParams): ICesiumEntityExt {\r\n const entity = params.entity;\r\n const style = params.style;\r\n const type = style.Type;\r\n\r\n let cEntity: Cesium.Entity = <any>null;\r\n if (type == Style.EPointType.Icon) {\r\n const icon = Calculator.GetValue(style.iconUrl, entity, params.tags);\r\n let iconUrl: string = <any>null;\r\n if (typeof icon == \"string\") {\r\n iconUrl = icon;\r\n }\r\n if (!iconUrl && style.iconId) {\r\n iconUrl = ClientFile.GetUrl(params.api, style.iconId);\r\n }\r\n if (iconUrl) {\r\n let iconScale = EnsureNumber(Calculator.GetValue(style.iconScale, entity, params.tags));\r\n if (!iconScale && iconScale != 0) {\r\n iconScale = 1;\r\n }\r\n if (iconScale > 0) {\r\n cEntity = new Cesium.Entity({\r\n billboard: {\r\n horizontalOrigin: Cesium.HorizontalOrigin.CENTER,\r\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\r\n image: iconUrl,\r\n heightReference: getHeightRef(style),\r\n scale: iconScale\r\n },\r\n position: EntityUtils.GetPos(params.viewer, entity),\r\n show: false\r\n });\r\n }\r\n }\r\n }\r\n if (type == Style.EPointType.Cylinder) {\r\n // TODO: Cylinder.\r\n }\r\n if (!cEntity) {\r\n const bColor: Color.IColor = style.color ? <any>Calculator.GetValue(style.color, entity, params.tags) : null;\r\n const cColor = bColor ? colorToCColor(bColor) : Cesium.Color.RED;\r\n \r\n let size = style.size ? <number>Calculator.GetValue(style.size, entity, params.tags) : null;\r\n if (size == null) {\r\n size = 30;\r\n }\r\n size = EnsureNumber(size);\r\n if (size <= 0) {\r\n return <any>null;\r\n }\r\n cEntity = new Cesium.Entity({\r\n point: {\r\n pixelSize: size,\r\n color: cColor,\r\n heightReference: getHeightRef(style)\r\n },\r\n position: EntityUtils.GetPos(params.viewer, entity),\r\n show: false\r\n });\r\n }\r\n if (cEntity) {\r\n params.viewer.entities.add(cEntity);\r\n }\r\n return cEntity;\r\n }\r\n\r\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\r\n const api = params.apiGetter.getApi();\r\n\r\n const cEntities: IDictionary<ICesiumEntityExt> = {};\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n\r\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\r\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\r\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\r\n let tags: EntityTag.ITag[] = [];\r\n if (tagIds && tagIds.length > 0) {\r\n tags = await EntityTag.GetListByIds(api, tagIds);\r\n }\r\n const pStyle = (style?.Settings as Style.IEntitySettings)?.pointStyle ?? <any>{};\r\n \r\n const cEntity = Render({\r\n entity: entity,\r\n style: pStyle,\r\n tags: tags,\r\n viewer: params.viewer,\r\n api: api\r\n });\r\n cEntity._renderGroup = getRenderGroupId(zoomItem);\r\n\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n \r\n return cEntities;\r\n }\r\n }\r\n\r\n export namespace Polyline {\r\n export interface IParams {\r\n style: Style.IPolylineSettings;\r\n entity: Entity.IEntity;\r\n tags: EntityTag.ITag[];\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export interface IGroupParams {\r\n apiGetter: BruceApi.IGetter,\r\n menuItemId: string;\r\n entities: Entity.IEntity[];\r\n zoomItems: IDictionary<ZoomControl.IItem>;\r\n visualRegister: VisualsRegister.Register;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export function Render(params: IParams): ICesiumEntityExt {\r\n const entity = params.entity;\r\n\r\n const line = entity.geometry?.LineString;\r\n const points: Carto.ICarto[] = line && typeof line == \"string\" ? Geometry.ParsePoints(line) : [];\r\n if (!points || points.length < 2) {\r\n return <any>null;\r\n }\r\n let isValid = true;\r\n for (let i = 0; i < points.length; i++) {\r\n if (!Carto.ValidateCarto(points[i])) {\r\n isValid = false;\r\n break;\r\n }\r\n }\r\n if (!isValid) {\r\n return <any>null;\r\n }\r\n const posses = points.map(x => Cesium.Cartesian3.fromDegrees(EnsureNumber(x.longitude), EnsureNumber(x.latitude), EnsureNumber(x.altitude)));\r\n\r\n // Making sure no 0 length lines coming through.\r\n // Ideally we would measure the full line but I fear that's too expensive.\r\n if (posses.length == 2 || posses.length == 3) {\r\n let totalDistance = 0;\r\n for (let i = 0; i < posses.length; i++) {\r\n let pos1 = posses[i];\r\n let pos2 = posses[i + 1];\r\n if (pos1 && pos2) {\r\n totalDistance += Cesium.Cartesian3.distance(pos1, pos2);\r\n }\r\n }\r\n if (totalDistance < 0.001) {\r\n return <any>null;\r\n }\r\n }\r\n\r\n const style = params.style;\r\n const bColor: Color.IColor = style.lineColor ? <any>Calculator.GetValue(style.lineColor, entity, params.tags) : null;\r\n const cColor = bColor ? colorToCColor(bColor) : Cesium.Color.RED;\r\n\r\n let width = style.lineWidth ? <number>Calculator.GetValue(style.lineWidth, entity, params.tags) : null;\r\n if (width == null) {\r\n width = 4;\r\n }\r\n width = EnsureNumber(width);\r\n if (width <= 0) {\r\n return <any>null;\r\n }\r\n \r\n const heightRef = getHeightRef(style);\r\n const cEntity: ICesiumEntityExt = new Cesium.Entity({\r\n polyline: {\r\n positions: posses,\r\n material: <Cesium.MaterialProperty><any>cColor,\r\n width: width,\r\n classificationType: Cesium.ClassificationType.TERRAIN,\r\n arcType: Cesium.ArcType.GEODESIC,\r\n zIndex: getZIndex(style, entity, params.tags),\r\n clampToGround: heightRef == Cesium.HeightReference.CLAMP_TO_GROUND\r\n },\r\n position: EntityUtils.GetPos(params.viewer, entity),\r\n show: false\r\n });\r\n\r\n params.viewer.entities.add(cEntity);\r\n return cEntity;\r\n }\r\n\r\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\r\n const api = params.apiGetter.getApi();\r\n const cEntities: IDictionary<ICesiumEntityExt> = {};\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\r\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\r\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\r\n let tags: EntityTag.ITag[] = [];\r\n if (tagIds && tagIds.length > 0) {\r\n tags = await EntityTag.GetListByIds(api, tagIds);\r\n }\r\n const lStyle = (style?.Settings as Style.IEntitySettings)?.polylineStyle ?? <any>{};\r\n\r\n const cEntity = Render({\r\n entity: entity,\r\n style: lStyle,\r\n tags: tags,\r\n viewer: params.viewer\r\n });\r\n if (cEntity) {\r\n cEntity._renderGroup = getRenderGroupId(zoomItem);\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n }\r\n return cEntities;\r\n }\r\n }\r\n\r\n export namespace Polygon {\r\n export interface IParams {\r\n style: Style.IPolygonSettings;\r\n entity: Entity.IEntity;\r\n tags: EntityTag.ITag[];\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export interface IGroupParams {\r\n apiGetter: BruceApi.IGetter,\r\n menuItemId: string;\r\n entities: Entity.IEntity[];\r\n zoomItems: IDictionary<ZoomControl.IItem>;\r\n visualRegister: VisualsRegister.Register;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export function Render(params: IParams): ICesiumEntityExt {\r\n const entity = params.entity;\r\n const pRings = entity.geometry?.Polygon;\r\n if (pRings == null || pRings.length <= 0) {\r\n return <any>null;\r\n }\r\n const style = params.style;\r\n\r\n const bFillColor = <Color.IColor>Calculator.GetValue(style.fillColor, entity, params.tags);\r\n const cFillColor = bFillColor ? colorToCColor(bFillColor) : Cesium.Color.RED;\r\n\r\n const bLineColor = <Color.IColor>Calculator.GetValue(style.lineColor, entity, params.tags);\r\n const cLineColor = bLineColor ? colorToCColor(bLineColor) : Cesium.Color.RED;\r\n\r\n let width = style.lineWidth ? <number>Calculator.GetValue(style.lineWidth, entity, params.tags) : null;\r\n if (width == null) {\r\n width = 4;\r\n }\r\n width = EnsureNumber(width);\r\n if (width <= 0) {\r\n return <any>null;\r\n }\r\n\r\n const heightRef = getHeightRef(style);\r\n\r\n const outerRing = <Geometry.IPolygonRing>pRings.find(x => x.Facing == Geometry.EPolygonRingType.Boundaries);\r\n const points = Geometry.ParsePoints(outerRing?.LinearRing);\r\n let posses = points.map(x => Cesium.Cartesian3.fromDegrees(EnsureNumber(x.longitude), EnsureNumber(x.latitude), EnsureNumber(x.altitude)));\r\n const extrusion = getPolygonExtrusion(\r\n entity,\r\n params.tags,\r\n outerRing,\r\n posses,\r\n heightRef,\r\n style\r\n );\r\n posses = extrusion.posses;\r\n\r\n const holeRings = pRings.filter(x => x.Facing == Geometry.EPolygonRingType.Hole);\r\n const holePosses = holeRings.map((x) => {\r\n const points = Geometry.ParsePoints(x.LinearRing);\r\n return points.map(x => Cesium.Cartesian3.fromDegrees(EnsureNumber(x.longitude), EnsureNumber(x.latitude), EnsureNumber(x.altitude)));\r\n });\r\n\r\n const zIndex = getZIndex(style, entity, params.tags);\r\n\r\n const cEntity: ICesiumEntityExt = new Cesium.Entity({\r\n polygon: {\r\n hierarchy: new Cesium.PolygonHierarchy(posses, holePosses.map(x => new Cesium.PolygonHierarchy(x))),\r\n material: cFillColor,\r\n extrudedHeight: extrusion.value,\r\n extrudedHeightReference: extrusion.exHeightRef,\r\n shadows: Cesium.ShadowMode.ENABLED,\r\n heightReference: heightRef,\r\n classificationType: Cesium.ClassificationType.BOTH,\r\n perPositionHeight: heightRef == Cesium.HeightReference.CLAMP_TO_GROUND ? false : true,\r\n zIndex: zIndex\r\n },\r\n position: EntityUtils.GetPos(params.viewer, entity),\r\n show: false\r\n });\r\n cEntity._siblingGraphics = [];\r\n\r\n for (let i = 0; i < holePosses.length; i++) {\r\n const posses = holePosses[i];\r\n const cEntityHole: ICesiumEntityExt = new Cesium.Entity({\r\n polyline: new Cesium.PolylineGraphics({\r\n positions: posses,\r\n material: <Cesium.MaterialProperty><any>cLineColor,\r\n width: width,\r\n clampToGround: heightRef == Cesium.HeightReference.CLAMP_TO_GROUND,\r\n classificationType: Cesium.ClassificationType.TERRAIN,\r\n arcType: Cesium.ArcType.GEODESIC,\r\n zIndex: zIndex\r\n }),\r\n show: false\r\n });\r\n cEntity._siblingGraphics.push(cEntityHole);\r\n cEntityHole._parentEntity = cEntity;\r\n params.viewer.entities.add(cEntityHole);\r\n }\r\n\r\n params.viewer.entities.add(cEntity);\r\n return cEntity;\r\n }\r\n\r\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\r\n const api = params.apiGetter.getApi();\r\n const cEntities: IDictionary<ICesiumEntityExt> = {};\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\r\n \r\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\r\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\r\n let tags: EntityTag.ITag[] = [];\r\n if (tagIds && tagIds.length > 0) {\r\n tags = await EntityTag.GetListByIds(api, tagIds);\r\n }\r\n const pStyle = (style?.Settings as Style.IEntitySettings)?.polygonStyle ?? <any>{};\r\n \r\n const cEntity = Render({\r\n entity: entity,\r\n style: pStyle,\r\n tags: tags,\r\n viewer: params.viewer\r\n });\r\n if (cEntity) {\r\n cEntity._renderGroup = getRenderGroupId(zoomItem);\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n }\r\n return cEntities;\r\n }\r\n }\r\n\r\n export namespace Model3d {\r\n export interface IParams {\r\n lodUrl: string;\r\n style: Style.IModelSettings;\r\n entity: Entity.IEntity;\r\n tags: EntityTag.ITag[];\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export interface IGroupParams {\r\n apiGetter: BruceApi.IGetter,\r\n menuItemId: string;\r\n entities: Entity.IEntity[];\r\n zoomItems: IDictionary<ZoomControl.IItem>;\r\n visualRegister: VisualsRegister.Register;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export function Render(params: IParams): ICesiumEntityExt {\r\n const entity = params.entity;\r\n\r\n const transform = entity?.transform;\r\n let heading = EnsureNumber(transform?.heading);\r\n heading = (heading + 90) % 360;\r\n const pitch = EnsureNumber(transform?.pitch);\r\n const roll = EnsureNumber(transform?.roll);\r\n\r\n let scale = EnsureNumber(transform.scale, 1);\r\n if (scale <= 0) {\r\n scale = 1;\r\n }\r\n\r\n const style = params.style;\r\n let styleScale = style?.scale ? Calculator.GetValue(style?.scale, entity, params.tags) : null;\r\n styleScale = EnsureNumber(styleScale ? styleScale : 1);\r\n if (styleScale <= 0) {\r\n styleScale = 1;\r\n }\r\n scale *= styleScale;\r\n\r\n const hpr = new Cesium.HeadingPitchRoll(\r\n Cesium.Math.toRadians(heading), \r\n Cesium.Math.toRadians(pitch), \r\n Cesium.Math.toRadians(roll)\r\n );\r\n\r\n let heightRef = getHeightRef(style);\r\n let pos = EntityUtils.GetPos(params.viewer, entity);\r\n if (heightRef == Cesium.HeightReference.CLAMP_TO_GROUND) {\r\n const carto = Cesium.Cartographic.fromCartesian(pos);\r\n pos = Cesium.Cartesian3.fromRadians(EnsureNumber(carto.longitude), EnsureNumber(carto.latitude), 0);\r\n heightRef = Cesium.HeightReference.RELATIVE_TO_GROUND;\r\n }\r\n\r\n const orientation = Cesium.Transforms.headingPitchRollQuaternion(pos, hpr);\r\n\r\n let blendMode: number = <any>null;\r\n let blendAmount: number = <any>null;\r\n let color: Cesium.Color = <any>null;\r\n if (style?.customize) {\r\n blendMode = style.fillColorBlendMode;\r\n if (!blendMode) {\r\n blendMode = Cesium.ColorBlendMode.HIGHLIGHT;\r\n }\r\n if (blendMode == Cesium.ColorBlendMode.MIX) {\r\n blendAmount = <any>style.fillColorBlendAmount;\r\n if (!blendAmount) {\r\n blendAmount = 0.5;\r\n }\r\n }\r\n const bColor = <Color.IColor>Calculator.GetValue(style.fillColor, entity, params.tags);\r\n if (bColor) {\r\n color = colorToCColor(bColor);\r\n }\r\n }\r\n\r\n const cEntity: ICesiumEntityExt = new Cesium.Entity({\r\n model: {\r\n uri: params.lodUrl,\r\n heightReference: heightRef,\r\n scale: scale,\r\n shadows: Cesium.ShadowMode.ENABLED,\r\n colorBlendAmount: blendAmount,\r\n colorBlendMode: blendMode,\r\n color: color\r\n },\r\n orientation: <Cesium.Property><any>orientation,\r\n position: pos,\r\n show: false\r\n });\r\n\r\n params.viewer.entities.add(cEntity);\r\n return cEntity;\r\n }\r\n\r\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\r\n const api = params.apiGetter.getApi();\r\n const cEntities: IDictionary<ICesiumEntityExt> = {};\r\n const reqBody: EntityLod.Filter.IListParams = {\r\n \"strict\": false,\r\n \"externalSources\": false,\r\n \"Items\": []\r\n };\r\n\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\r\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\r\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\r\n let tags: EntityTag.ITag[] = [];\r\n if (tagIds && tagIds.length > 0) {\r\n tags = await EntityTag.GetListByIds(api, tagIds);\r\n }\r\n const mStyle = (style?.Settings as Style.IEntitySettings)?.polygonStyle ?? <any>{};\r\n let group = mStyle.lodGroup ? Calculator.GetValue(mStyle.lodGroup, entity, tags) : null;\r\n if (!group) {\r\n group = \"DEFAULT\";\r\n }\r\n let level = <number>+<any>zoomItem.LODLevel;\r\n if (!level) {\r\n level = 0;\r\n }\r\n let catId = <string>zoomItem.LODCategoryID;\r\n if (!catId) {\r\n catId = \"glb\";\r\n }\r\n reqBody.Items.push({\r\n \"entityId\": <string>entity.Bruce.ID,\r\n \"categoryId\": catId,\r\n \"group\": <string>group,\r\n \"level\": level\r\n });\r\n }\r\n\r\n const lodData = await EntityLod.GetLods(api, reqBody);\r\n\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\r\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\r\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\r\n let tags: EntityTag.ITag[] = [];\r\n if (tagIds && tagIds.length > 0) {\r\n tags = await EntityTag.GetListByIds(api, tagIds);\r\n }\r\n\r\n const lod = lodData.find(x => x.entityId == entity.Bruce.ID);\r\n if (!lod?.clientFileId) {\r\n continue;\r\n }\r\n const mStyle = (style?.Settings as Style.IEntitySettings)?.polygonStyle ?? <any>{};\r\n const cEntity = Render({\r\n entity: entity,\r\n style: mStyle,\r\n tags: tags,\r\n viewer: params.viewer,\r\n lodUrl: ClientFile.GetUrl(api, lod.clientFileId)\r\n })\r\n if (cEntity) {\r\n cEntity._renderGroup = getRenderGroupId(zoomItem);\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n }\r\n\r\n return cEntities;\r\n }\r\n }\r\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\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.IBruceEntities;\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 entityCheckRemoval: () => void = <any>null;\r\n private isRunningCheck = false;\r\n private viewMonitorRemoval: () => void = <any>null;\r\n\r\n\r\n constructor(\r\n viewer: Cesium.Viewer, \r\n visualsManager: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n monitor: CesiumViewMonitor,\r\n item: MenuItem.Item.IBruceEntities,\r\n sharedGetters: SharedGetters.Cache\r\n ) {\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 async Init(): Promise<void> {\r\n if (this.disposed) {\r\n throw(new Error(\"This item is disposed.\"));\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: 500,\r\n typeId: this.item.BruceEntity[\"EntityType.ID\"],\r\n monitor: this.monitor\r\n });\r\n const minMax = RenderManager.Utils.GetZoomMinMax(this.item.CameraZoomSettings);\r\n this.getter.IncludeMenuItem(this.item.id, [], minMax[0], minMax[1]);\r\n this.getterSub = this.getter.OnUpdate.Subscribe((entities) => {\r\n this.onGetterUpdate(entities);\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();\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.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.RemoveByMenuItemId(this.item.id);\r\n this.entityCheckRemoval?.();\r\n this.viewMonitorRemoval?.();\r\n }\r\n\r\n private async doEntityCheck(): Promise<void> {\r\n if (this.isRunningCheck) {\r\n this.entityCheckQueue.Call();\r\n return;\r\n }\r\n this.isRunningCheck = true;\r\n const api = this.apiGetter.getApi();\r\n try {\r\n const ids = Object.keys(this.renderedEntities);\r\n if (this.disposed) {\r\n return;\r\n }\r\n if (ids.length > 0) { \r\n const CHECK_BATCH_SIZE = 150;\r\n const checkBatch = async() => {\r\n const entityIds = ids.splice(0, CHECK_BATCH_SIZE);\r\n const entities = await Entity.GetListByIds(api, entityIds);\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.distributeGenerateBatches(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 distributeGenerateBatches(entities: Entity.IEntity[]): void {\r\n const BATCH_SIZE = 50;\r\n while (entities.length > 0) {\r\n const batch = entities.splice(0, BATCH_SIZE);\r\n this.onGetterUpdate(batch);\r\n }\r\n }\r\n\r\n private async onGetterUpdate(entities: Entity.IEntity[]): Promise<void> {\r\n try {\r\n if (this.disposed || this.viewer.isDestroyed()) {\r\n return;\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 });\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(id, this.item.id)?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.Add({\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 });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n}","import { BatchedDataGetter, BruceApi, Entity, IDictionary, ZoomControl, MenuItem } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\r\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\n\r\n/**\r\n * Render manager for a group of pre-loaded entities.\r\n * The entities may or may not have records.\r\n * If the entities DON'T have records, it is recommended to avoid using the 3dmodel visualization as it will fail to locate LODs.\r\n */\r\nexport namespace EntitiesLoadedRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private item: MenuItem.Item.IEntitiesLoaded;\r\n private getter: BatchedDataGetter.Getter<Entity.IEntity> = <any>null;\r\n private monitor: CesiumViewMonitor;\r\n private getterSub: () => void = <any>null;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private renderedEntities: IDictionary<boolean> = {};\r\n private visualsManager: VisualsRegister.Register;\r\n\r\n\r\n constructor(\r\n viewer: Cesium.Viewer, \r\n visualsManager: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n monitor: CesiumViewMonitor,\r\n item: MenuItem.Item.IEntitiesLoaded\r\n ) {\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.monitor = monitor;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public async Init(): Promise<void> {\r\n if (this.disposed) {\r\n throw(new Error(\"This item is disposed.\"));\r\n }\r\n this.getter = new BatchedDataGetter.Getter<Entity.IEntity>(\r\n this.item.BruceEntity.Entities,\r\n this.monitor,\r\n 500\r\n );\r\n this.getterSub = this.getter.OnUpdate.Subscribe((entities) => {\r\n this.onGetterUpdate(entities);\r\n });\r\n this.getter.Start();\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n this.disposed = true;\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n }\r\n\r\n private async onGetterUpdate(entities: Entity.IEntity[]): Promise<void> {\r\n try {\r\n if (this.disposed || this.viewer.isDestroyed()) {\r\n return;\r\n }\r\n const cEntities = await EntityRenderEngine.Render({\r\n viewer: this.viewer, \r\n apiGetter: this.apiGetter, \r\n entities: entities,\r\n menuItemId: this.item.id,\r\n visualRegister: this.visualsManager,\r\n zoomControl: this.item.CameraZoomSettings\r\n });\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(id, this.item.id)?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.Add({\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 });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n}","import { BruceEvent, Cartes, IDictionary, ObjectUtils } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityUtils } from \"../utils/entity-utils\";\r\nimport { EntityRenderEngine } from \"./entity-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);\r\n if (visual instanceof Cesium.Entity) {\r\n EntityRenderEngine.Remove(viewer, visual);\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 // No way to tell if changing show will crash it!\r\n try {\r\n visual.show = false;\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) {\r\n if (visual._parentEntity) {\r\n updateCEntityShow(viewer, visual._parentEntity, show);\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);\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);\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.IsHidden(entityId);\r\n\r\n const regos = register.GetRegos(entityId);\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): 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) {\r\n markEntity(register, rego, visEnt._parentEntity);\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]);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction unmarkEntity(visual: VisualsRegister.Visual): 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) {\r\n unmarkEntity(visEnt._parentEntity);\r\n }\r\n if (visEnt._siblingGraphics) {\r\n for (let i = 0; i < visEnt._siblingGraphics.length; i++) {\r\n unmarkEntity(visEnt._siblingGraphics[i]);\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): void {\r\n const color = Cesium.Color.fromAlpha(Cesium.Color.YELLOW, 0.5);\r\n if (visual instanceof Cesium.Entity) {\r\n const entities = EntityUtils.GatherEntity(visual);\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 };\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(visual);\r\n if (opacity != null) {\r\n EntityUtils.SetOpacity(viewer, visual, opacity);\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(visual);\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 };\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(visual);\r\n if (opacity != null) {\r\n EntityUtils.SetOpacity(viewer, visual, opacity);\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 entityId: string;\r\n entityTypeId?: string;\r\n menuItemId: string;\r\n visual: Visual;\r\n priority: number;\r\n sourceId?: 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 }\r\n \r\n export interface IVisualUpdate {\r\n rego: IVisualRego;\r\n isAdding: boolean;\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 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 \r\n \r\n constructor(viewer: Cesium.Viewer) {\r\n this.viewer = viewer;\r\n }\r\n\r\n public Select(id: string, refreshIfSelected: boolean = false): void {\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);\r\n }\r\n }\r\n }\r\n }\r\n\r\n public Deselect(id: string): void {\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\r\n public IsSelected(id: string): boolean {\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 Isolate(id: string): void {\r\n if (this.isolatedIds.indexOf(id) === -1) {\r\n this.isolatedIds.push(id);\r\n }\r\n this.updateAllEntities();\r\n }\r\n\r\n public Deisolate(id: string): void {\r\n const index = this.isolatedIds.indexOf(id);\r\n if (index !== -1) {\r\n this.isolatedIds.splice(index, 1);\r\n }\r\n this.updateAllEntities();\r\n }\r\n\r\n public IsIsolated(id: string): boolean {\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 Hide(id: string): void {\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\r\n public Show(id: string): void {\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\r\n public IsHidden(id: string): boolean {\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 }\r\n \r\n public Add(rego: IVisualRego): void {\r\n this.Remove(rego.entityId, rego.menuItemId, false);\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);\r\n updateEntity(this.viewer, entityId, this);\r\n if (this.selectedIds.includes(entityId)) {\r\n select(this.viewer, rego.visual);\r\n }\r\n this.onUpdate?.Trigger({ rego: rego, isAdding: true });\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(entityId: string, menuItemId?: string): IVisualRego {\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 public GetRegos(entityId: string): IVisualRego[] {\r\n const entityRegos = this.rego[entityId];\r\n if (!entityRegos) {\r\n return <any>[];\r\n }\r\n return entityRegos;\r\n }\r\n\r\n public GetMenuItemRegos(menuItemId: string): IVisualRego[] {\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 public RemoveByEntityId(id: string): void {\r\n const entityRegos = this.rego[id];\r\n if (!entityRegos) {\r\n return;\r\n }\r\n for (let i = 0; i < entityRegos.length; i++) {\r\n const rego = entityRegos[i];\r\n this.onUpdate?.Trigger({ rego: rego, isAdding: false });\r\n removeEntity(this.viewer, rego.visual);\r\n }\r\n this.rego[id] = [];\r\n delete this.rego[id];\r\n }\r\n \r\n public RemoveByMenuItemId(id: string): void {\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 === id);\r\n if (!rego) {\r\n continue;\r\n }\r\n this.onUpdate?.Trigger({ rego: rego, isAdding: false });\r\n removeEntity(this.viewer, rego.visual);\r\n const doesInclude = this.rego[entityId].find(r => r.menuItemId === id);\r\n if (doesInclude) {\r\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== id);\r\n updateEntity(this.viewer, entityId, this);\r\n }\r\n }\r\n }\r\n }\r\n \r\n public Remove(entityId: string, menuItemId: string, _doUpdate: boolean = true): void {\r\n const entityRegos = this.rego[entityId];\r\n if (!entityRegos) {\r\n return;\r\n }\r\n const rego = entityRegos.find(r => r.menuItemId === menuItemId);\r\n if (!rego) {\r\n return;\r\n }\r\n this.onUpdate?.Trigger({ rego: rego, isAdding: false });\r\n removeEntity(this.viewer, rego.visual);\r\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== menuItemId);\r\n if (_doUpdate) {\r\n updateEntity(this.viewer, entityId, this);\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 GetFromCursor(cursor: Cartes.ICartes2): IVisualRego[] {\r\n const found: IVisualRego[] = [];\r\n const picked = this.viewer.scene.drillPick(new Cesium.Cartesian2(cursor.x, cursor.y), 5);\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 found;\r\n }\r\n\r\n /**\r\n * Returns all registered entity ids.\r\n */\r\n public GetIds() {\r\n const ids = [];\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 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}","import { BatchedDataGetter, BruceApi, Entity, IDictionary, MenuItem } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\r\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\n\r\n/**\r\n * Render manager for rendering an array of entity ids.\r\n * This will render them in batches to avoid overloading the viewer.\r\n */\r\nexport namespace EntitiesIdsRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private monitor: CesiumViewMonitor;\r\n private item: MenuItem.Item.IEntityIds;\r\n private getter: BatchedDataGetter.Getter<string> = <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\r\n\r\n constructor(\r\n viewer: Cesium.Viewer, \r\n visualsManager: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n monitor: CesiumViewMonitor,\r\n item: MenuItem.Item.IEntityIds\r\n ) {\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.monitor = monitor;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public async Init(): Promise<void> {\r\n if (this.disposed) {\r\n throw(new Error(\"This item is disposed.\"));\r\n }\r\n this.getter = new BatchedDataGetter.Getter<string>(\r\n this.item.BruceEntity.EntityIds,\r\n this.monitor,\r\n 500\r\n );\r\n this.getterSub = this.getter.OnUpdate.Subscribe((ids) => {\r\n this.onGetterUpdate(ids);\r\n });\r\n this.getter.Start();\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n this.disposed = true;\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n }\r\n\r\n private async onGetterUpdate(entityIds: string[]): Promise<void> {\r\n if (this.disposed || this.viewer.isDestroyed()) {\r\n return;\r\n }\r\n try {\r\n const api = this.apiGetter.getApi();\r\n const entities = await Entity.GetListByIds(api, entityIds);\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 });\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(id, this.item.id)?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.Add({\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 });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n}","import { BatchedDataGetter, BruceApi, Entity, 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\n\r\n/**\r\n * Manager for rendering a single Bruce entity.\r\n */\r\nexport namespace EntityRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private item: MenuItem.Item.IBruceEntity;\r\n private getter: BatchedDataGetter.Getter<string> = <any>null;\r\n private monitor: CesiumViewMonitor;\r\n private getterSub: () => void = <any>null;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private visualsManager: VisualsRegister.Register;\r\n\r\n\r\n constructor(\r\n viewer: Cesium.Viewer, \r\n visualsManager: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n monitor: CesiumViewMonitor, \r\n item: MenuItem.Item.IBruceEntity\r\n ) {\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.monitor = monitor;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public async Init(): Promise<void> {\r\n if (this.disposed) {\r\n throw(new Error(\"This item is disposed.\"));\r\n }\r\n this.getter = new BatchedDataGetter.Getter<string>(\r\n [this.item.BruceEntity.EntityId],\r\n this.monitor,\r\n 1\r\n );\r\n this.getterSub = this.getter.OnUpdate.Subscribe((ids) => {\r\n this.onGetterUpdate(ids[0]);\r\n });\r\n this.getter.Start();\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.disposed = true;\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n }\r\n\r\n private async onGetterUpdate(id: string): Promise<void> {\r\n try {\r\n if (this.disposed || this.viewer.isDestroyed()) {\r\n return;\r\n }\r\n\r\n const api = this.apiGetter.getApi();\r\n const entity = await Entity.Get(api, id);\r\n const cEntities = await EntityRenderEngine.Render({\r\n viewer: this.viewer, \r\n apiGetter: this.apiGetter,\r\n entities: [entity],\r\n menuItemId: this.item.id,\r\n visualRegister: this.visualsManager,\r\n zoomControl: this.item.CameraZoomSettings\r\n });\r\n\r\n const cEntity = cEntities[id];\r\n if (cEntity) {\r\n const visual = this.visualsManager.GetRego(id, this.item.id)?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.Add({\r\n entityId: <string>entity.Bruce.ID,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0,\r\n entityTypeId: entity.Bruce[\"EntityType.ID\"]\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n}","import { BruceApi, Calculator, Cartes, Carto, Color, Entity, EntityCoords, EntityType, IDictionary, Style, Tileset, TilesetCad, TilesetPointcloud, Transform } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { VisualsRegister } from \"./visuals-register\";\r\nimport { EnsureNumber } from \"../utils/js-utils\";\r\n\r\nfunction colorToCColor(color: Color.IColor): Cesium.Color {\r\n return new Cesium.Color(\r\n color.red ? color.red/255 : 0, \r\n color.green ? color.green/255 : 0, \r\n color.blue ? color.blue/255 : 0, \r\n color.alpha\r\n );\r\n}\r\n\r\n/**\r\n * Returns if a given tileset is alive and in the scene.\r\n * @param viewer \r\n * @param cTileset \r\n * @returns \r\n */\r\nfunction isAlive(viewer: Cesium.Viewer, cTileset: Cesium.Cesium3DTileset) {\r\n if (viewer.isDestroyed()) {\r\n return false;\r\n }\r\n if (!viewer?.scene) {\r\n return false;\r\n }\r\n if (cTileset.isDestroyed()) {\r\n return false;\r\n }\r\n return viewer.scene.primitives.contains(cTileset);\r\n}\r\n\r\nexport namespace TilesetRenderEngine {\r\n export interface IParams {\r\n apiGetter: BruceApi.IGetter;\r\n tileset: Tileset.ITileset;\r\n viewer: Cesium.Viewer;\r\n coords?: EntityCoords.IEntityCoords;\r\n }\r\n\r\n export function ApplyPosition(\r\n cTileset: Cesium.Cesium3DTileset, \r\n tileset: Tileset.ITileset, \r\n coords: EntityCoords.IEntityCoords\r\n ): void {\r\n let location: Carto.ICarto;\r\n let transform: Transform.ITransform;\r\n\r\n if (tileset.type == Tileset.EType.Cad) {\r\n const settings = tileset.settings as TilesetCad.ISettings;\r\n\r\n // Position using root entity + ucs.\r\n if (coords?.ucs) {\r\n location = coords.ucs.location;\r\n transform = coords.transform as Transform.ITransform;\r\n }\r\n // Position using tileset.\r\n else {\r\n transform = settings.transform as Transform.ITransform;\r\n location = settings.location as Carto.ICarto;\r\n }\r\n }\r\n else if (tileset.type == Tileset.EType.PointCloud) {\r\n const settings = tileset.settings as TilesetPointcloud.ISettings;\r\n transform = settings.transform as Transform.ITransform;\r\n location = settings.location as Carto.ICarto;\r\n }\r\n \r\n if (!location?.latitude) {\r\n return;\r\n }\r\n\r\n transform = {\r\n heading: 0,\r\n pitch: 0,\r\n roll: 0,\r\n scale: 1,\r\n x: 0,\r\n y: 0,\r\n z: 0,\r\n ...transform\r\n }\r\n transform.scale = EnsureNumber(transform.scale);\r\n if (transform.scale <= 0) {\r\n transform.scale = 0.000001;\r\n }\r\n\r\n const pos = Cesium.Cartesian3.fromDegrees(\r\n EnsureNumber(location.longitude),\r\n EnsureNumber(location.latitude),\r\n EnsureNumber(location.altitude)\r\n );\r\n const hpr = Cesium.HeadingPitchRoll.fromDegrees(\r\n EnsureNumber(transform.heading), \r\n EnsureNumber(transform.pitch), \r\n EnsureNumber(transform.roll), \r\n new Cesium.HeadingPitchRoll()\r\n );\r\n\r\n const root = cTileset.root;\r\n root.transform = Cesium.Transforms.headingPitchRollToFixedFrame(pos, hpr);\r\n\r\n const scaleMatrix = Cesium.Matrix4.fromScale(new Cesium.Cartesian3(\r\n transform.scale, \r\n transform.scale,\r\n transform.scale\r\n ), new Cesium.Matrix4());\r\n root.transform = Cesium.Matrix4.multiply(root.transform, scaleMatrix, root.transform);\r\n\r\n root.transform = Cesium.Matrix4.multiplyByTranslation(root.transform, new Cesium.Cartesian3(\r\n EnsureNumber(transform.x),\r\n EnsureNumber(transform.y),\r\n EnsureNumber(transform.z)\r\n ), root.transform);\r\n\r\n // Force matrix to update\r\n (<any>root).updateTransform();\r\n }\r\n\r\n export function ApplySettings(cTileset: Cesium.Cesium3DTileset, tileset: Tileset.ITileset): void {\r\n if (tileset.type == Tileset.EType.Cad) {\r\n const settings = tileset.settings as TilesetCad.ISettings;\r\n const maxScreenSpaceError = settings.maximumScreenSpaceError;\r\n if (maxScreenSpaceError || maxScreenSpaceError == 0) {\r\n cTileset.maximumScreenSpaceError = EnsureNumber(maxScreenSpaceError);\r\n }\r\n }\r\n else if (tileset.type == Tileset.EType.PointCloud) {\r\n const settings = tileset.settings as TilesetPointcloud.ISettings;\r\n const maxScreenSpaceError = settings.maximumScreenSpaceError;\r\n if (maxScreenSpaceError || maxScreenSpaceError == 0) {\r\n cTileset.maximumScreenSpaceError = EnsureNumber(maxScreenSpaceError);\r\n }\r\n const attenuation = settings.attenuation;\r\n if (attenuation != null) {\r\n cTileset.pointCloudShading.attenuation = Boolean(attenuation);\r\n }\r\n const attenuationMax = settings.attenuationMax;\r\n if (attenuationMax || attenuationMax == 0) {\r\n cTileset.pointCloudShading.maximumAttenuation = EnsureNumber(attenuationMax);\r\n }\r\n }\r\n else {\r\n console.warn(\"Not implemented.\");\r\n }\r\n }\r\n\r\n export function Render(params: IParams): Cesium.Cesium3DTileset {\r\n const api = params.apiGetter.getApi(params.apiGetter.accountId);\r\n if (params.tileset.type == Tileset.EType.Cad) {\r\n const cTileset = new Cesium.Cesium3DTileset({\r\n url: Tileset.GetPublicFileUrl(api, params.tileset.id, \"tileset.json\") + \"?generation=\" + params.tileset.generateVersion\r\n });\r\n params.viewer.scene.primitives.add(cTileset);\r\n cTileset.readyPromise.then(() => {\r\n try {\r\n if (!isAlive(params.viewer, cTileset)) {\r\n return;\r\n }\r\n ApplySettings(cTileset, params.tileset);\r\n ApplyPosition(cTileset, params.tileset, params.coords as EntityCoords.IEntityCoords);\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n });\r\n return cTileset;\r\n }\r\n else if (params.tileset.type === Tileset.EType.EntitiesSet) {\r\n const cTileset = new Cesium.Cesium3DTileset({\r\n url: Tileset.GetPublicFileUrl(api, params.tileset.id, \"tileset.json\") + \"?generation=\" + params.tileset.generateVersion\r\n });\r\n params.viewer.scene.primitives.add(cTileset);\r\n return cTileset;\r\n }\r\n else if (params.tileset.type == Tileset.EType.PointCloud) {\r\n const cTileset = new Cesium.Cesium3DTileset({\r\n url: Tileset.GetPublicFileUrl(api, params.tileset.id, \"tileset.json\") + \"?generation=\" + params.tileset.generateVersion\r\n });\r\n params.viewer.scene.primitives.add(cTileset);\r\n cTileset.readyPromise.then(() => {\r\n try {\r\n if (!isAlive(params.viewer, cTileset)) {\r\n return;\r\n }\r\n ApplySettings(cTileset, params.tileset);\r\n ApplyPosition(cTileset, params.tileset, null);\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n });\r\n return cTileset;\r\n }\r\n else {\r\n throw(\"Not implemented.\");\r\n }\r\n }\r\n\r\n export class CadStyler {\r\n private api: BruceApi.Api;\r\n\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n\r\n private loadedEntities: IDictionary<VisualsRegister.IVisualRego> = {};\r\n private cTileset: Cesium.Cesium3DTileset;\r\n private styleMapping: any[];\r\n private styleMappingLoaded: boolean = false;\r\n private styleMappingsLoaded: IDictionary<boolean> = {};\r\n private fallbackStyleId: number;\r\n private fallbackStyle: Style.IStyle = <any>null;\r\n\r\n private runningQueues: number = 0;\r\n private queueLoadInterval: any;\r\n private recordLoadQueue: string[] = [];\r\n private recordCheckQueue: string[] = [];\r\n private queueCheckInterval: any;\r\n\r\n\r\n constructor(api: BruceApi.Api, cTileset: Cesium.Cesium3DTileset, fallbackStyleId: number, styleMapping: any[]) {\r\n this.api = api;\r\n this.cTileset = cTileset;\r\n this.fallbackStyleId = fallbackStyleId;\r\n this.styleMapping = styleMapping;\r\n this.loadStyles();\r\n }\r\n\r\n public QueueEntities(entities: VisualsRegister.IVisualRego[]): void {\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n this.queueTilesetFeatureStyle(entity);\r\n }\r\n if (this.recordLoadQueue.length > 0) {\r\n this.processQueue();\r\n }\r\n }\r\n\r\n private async processQueue(): Promise<void> {\r\n const MAX_BATCHES = 2;\r\n const BATCH_DELAY = 200;\r\n\r\n if (this.runningQueues >= MAX_BATCHES) {\r\n return;\r\n }\r\n else if (this.disposed) {\r\n return;\r\n }\r\n this.runningQueues += 1;\r\n \r\n let batch: VisualsRegister.IVisualRego[] = [];\r\n let rerun: boolean = false;\r\n try {\r\n batch = this.getEntitiesForQueue();\r\n\r\n const entityIds = batch.map(x => x.entityId);\r\n if (entityIds.length > 0) {\r\n const entities = await Entity.GetListByIds(this.api, entityIds);\r\n for (let i = 0; i < entities.length; i++) {\r\n const record = entities[i];\r\n const feature = batch.find(x => x?.entityId == record?.Bruce?.ID);\r\n if (feature) {\r\n this.styleTilesetFeatureFullData(feature, record);\r\n }\r\n }\r\n rerun = batch.length > 0;\r\n }\r\n }\r\n finally {\r\n setTimeout(() => {\r\n this.runningQueues -= 1;\r\n if (rerun) {\r\n this.processQueue();\r\n }\r\n }, BATCH_DELAY);\r\n }\r\n }\r\n\r\n private getEntitiesForQueue(): VisualsRegister.IVisualRego[] {\r\n const BATCH_SIZE = 30;\r\n const batchHashes = this.recordLoadQueue.splice(0, BATCH_SIZE);\r\n const entities: VisualsRegister.IVisualRego[] = [];\r\n for (let i = 0; i < batchHashes.length; i++) {\r\n const id = batchHashes[i];\r\n const entity = this.loadedEntities[id];\r\n if (entity) {\r\n entities.push(entity);\r\n }\r\n }\r\n return entities;\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.disposed = true;\r\n clearInterval(this.queueLoadInterval);\r\n clearInterval(this.queueCheckInterval);\r\n }\r\n\r\n private async loadStyles(): Promise<void> {\r\n let fallbackStyleId = this.fallbackStyleId;\r\n if (fallbackStyleId && fallbackStyleId > 0) {\r\n try {\r\n let data = await Style.Get(this.api, fallbackStyleId);\r\n this.fallbackStyle = data;\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n \r\n // Load styles in the style mapping\r\n let styleMapping = this.styleMapping;\r\n if (!styleMapping) {\r\n styleMapping = [];\r\n }\r\n this.styleMapping = styleMapping;\r\n \r\n // It is default style.\r\n // We have to get all possible entity type ids and append them to mapping.\r\n if (!fallbackStyleId) {\r\n try {\r\n const modelTree = this.cTileset?.extensions?.modelTree;\r\n if (modelTree) {\r\n const entityTypeIds = this.getEntityTypeIdsFromModelTree(modelTree);\r\n for (let i = 0; i < entityTypeIds.length; i++) {\r\n const entityTypeId = entityTypeIds[i];\r\n if (styleMapping.findIndex(x => x.EntityTypeID == entityTypeId) <= -1) {\r\n styleMapping.push({\r\n EntityTypeID: entityTypeId,\r\n StyleID: null,\r\n style: <any>null\r\n });\r\n }\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n \r\n for (let i = 0; i < styleMapping.length; i++) {\r\n if (this.disposed) {\r\n break;\r\n }\r\n \r\n let styleMap = styleMapping[i];\r\n if (!styleMap.style) {\r\n let styleId = styleMap.StyleID;\r\n \r\n // Get default style of the entity type.\r\n if (!styleId) {\r\n try {\r\n let entityType = await EntityType.Get(this.api, styleMap.EntityTypeID);\r\n styleId = entityType?.[\"DisplaySetting.ID\"];\r\n }\r\n catch (e) {\r\n console.error(e); \r\n }\r\n }\r\n \r\n if (styleId) {\r\n try {\r\n let data = await Style.Get(this.api, styleId);\r\n if (data) {\r\n styleMap.style = data;\r\n styleMap.StyleID = styleId;\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n \r\n if (styleMap.EntityTypeID && styleMap.style) {\r\n this.styleMappingsLoaded[styleMap.EntityTypeID] = true;\r\n this.processTilesetFeatureCheckQueue();\r\n this.processQueue();\r\n }\r\n }\r\n this.styleMappingLoaded = true;\r\n\r\n if (!this.disposed) {\r\n await this.processTilesetFeatureCheckQueue();\r\n this.processQueue();\r\n }\r\n }\r\n\r\n private getEntityTypeIdsFromModelTree(modelTree: any): string[] {\r\n const entityTypeIds: string[] = [];\r\n this.digEntityTypeIdsFromModelTreeBranch(modelTree, entityTypeIds);\r\n return entityTypeIds;\r\n }\r\n \r\n private digEntityTypeIdsFromModelTreeBranch(branch: any, arr: string[]): void {\r\n if (branch) {\r\n // Does not yet include this entity type id.\r\n if (branch.typeId && !arr.includes(branch.typeId)) {\r\n arr.push(branch.typeId);\r\n }\r\n \r\n if (branch.children) {\r\n for (let i = 0; i < branch.children.length; i++) {\r\n let child = branch.children[i];\r\n this.digEntityTypeIdsFromModelTreeBranch(child, arr);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private async processTilesetFeatureCheckQueue(): Promise<void> {\r\n const BATCH_CHECK_SIZE = 1000;\r\n\r\n return new Promise((res) => {\r\n clearInterval(this.queueCheckInterval);\r\n this.queueCheckInterval = setInterval(() => {\r\n if (this.disposed) {\r\n clearInterval(this.queueCheckInterval);\r\n res();\r\n return;\r\n }\r\n \r\n // Construct batch for loaded styles.\r\n let batch = [];\r\n \r\n if (this.styleMappingLoaded) {\r\n batch = this.recordCheckQueue.splice(0, BATCH_CHECK_SIZE);\r\n }\r\n else {\r\n for (let i = 0; i < this.recordCheckQueue.length; i++) {\r\n let hash = this.recordCheckQueue[i];\r\n let entity = this.loadedEntities[hash];\r\n if (entity) {\r\n let entityTypeId = entity.entityTypeId;\r\n if (entityTypeId) {\r\n if (this.styleMappingsLoaded[entityTypeId] == true) {\r\n batch.push(hash);\r\n }\r\n }\r\n }\r\n \r\n if (batch.length >= BATCH_CHECK_SIZE) {\r\n break;\r\n }\r\n }\r\n \r\n for (let i = 0; i < batch.length; i++) {\r\n let hash = batch[i];\r\n let index = this.recordCheckQueue.findIndex(x => x == hash);\r\n if (index > -1) {\r\n this.recordCheckQueue.splice(index, 1);\r\n }\r\n }\r\n }\r\n \r\n if (batch.length) {\r\n for (let i = 0; i < batch.length; i++) {\r\n let item = batch[i];\r\n let entity = this.loadedEntities[item];\r\n if (entity) {\r\n this.queueTilesetFeatureStyle(entity);\r\n }\r\n }\r\n }\r\n else {\r\n clearInterval(this.queueCheckInterval);\r\n res();\r\n }\r\n }, 50);\r\n });\r\n }\r\n\r\n private queueTilesetFeatureStyle(entity: VisualsRegister.IVisualRego): void {\r\n if (this.styleMappingLoaded || this.styleMappingsLoaded[<string>entity.entityTypeId] == true) {\r\n const needsData = this.getTilesetFeatureNeedsFullData(entity.entityId, <string>entity.entityTypeId);\r\n if (needsData) {\r\n if (this.recordLoadQueue.findIndex(x => x == entity.entityId)) {\r\n this.recordLoadQueue.push(entity.entityId);\r\n }\r\n }\r\n else {\r\n this.styleTilesetFeature(entity);\r\n }\r\n }\r\n else {\r\n this.recordCheckQueue.push(entity.entityId);\r\n }\r\n }\r\n\r\n private styleTilesetFeature(entity: VisualsRegister.IVisualRego): void {\r\n this.styleTilesetFeatureFullData(entity, <any>null); \r\n }\r\n\r\n private styleTilesetFeatureFullData(entity: VisualsRegister.IVisualRego, data: Entity.IEntity): void {\r\n const style = <Style.IEntitySettings>this.getTilesetFeatureStyle(entity.entityId, <string>entity.entityTypeId);\r\n if (!style) {\r\n return;\r\n }\r\n const bColor = style.modelStyle?.fillColor ? Calculator.GetColor(style.modelStyle.fillColor, data, []) : null;\r\n if (bColor != null) {\r\n const cColor = colorToCColor(bColor);\r\n const visual = entity.visual;\r\n if (visual && visual instanceof Cesium.Cesium3DTileFeature) {\r\n visual.color = cColor;\r\n }\r\n }\r\n }\r\n\r\n private getTilesetFeatureStyle(entityId: string, entityTypeId: string): Style.IEntitySettings {\r\n // Locate what style is applicable to the feature.\r\n let style: Style.IStyle = <any>null;\r\n if (entityTypeId) {\r\n style = <Style.IStyle>this.styleMapping.find(x => x.EntityTypeID == entityTypeId)?.style;\r\n }\r\n if (!style) {\r\n style = this.fallbackStyle;\r\n }\r\n if (!style) {\r\n return <any>null;\r\n }\r\n if (!(<Style.IEntitySettings>style.Settings)?.modelStyle?.customize) {\r\n return <any>null;\r\n }\r\n return <Style.IEntitySettings>style.Settings;\r\n }\r\n\r\n private getTilesetFeatureNeedsFullData(entityId: string, entityTypeId: string): boolean {\r\n const style = this.getTilesetFeatureStyle(entityId, entityTypeId);\r\n if (!style) {\r\n return false;\r\n }\r\n const fill = style?.modelStyle?.fillColor;\r\n if (!fill || fill.length <= 0) {\r\n return false;\r\n }\r\n return fill[0].type != 0;\r\n }\r\n }\r\n}","import { BruceApi, EntityCoords, MenuItem, Tileset, TilesetCad } from \"bruce-models\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\nimport * as Cesium from \"cesium\";\r\nimport { TilesetRenderEngine } from \"../../tileset-render-engine\";\r\n\r\n/**\r\n * Manager for rendering CAD tilesets.\r\n * CAD tilesets are referred to as \"MODEL\" tilesets in some other areas of Bruce code.\r\n */\r\nexport namespace TilesetCadRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private item: MenuItem.Item.ICadTileset;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private visualsManager: VisualsRegister.Register;\r\n private cTileset: Cesium.Cesium3DTileset = <any>null;\r\n private styler: TilesetRenderEngine.CadStyler = <any>null;\r\n\r\n \r\n constructor(viewer: Cesium.Viewer, visualsManager: VisualsRegister.Register, apiGetter: BruceApi.IGetter, item: MenuItem.Item.ICadTileset) {\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n \r\n public async Init(): Promise<void> {\r\n const tilesetId = this.item.tileset?.TilesetID;\r\n if (!tilesetId) {\r\n return;\r\n }\r\n\r\n const api = this.apiGetter.getApi();\r\n const tileset = await Tileset.Get(api, tilesetId);\r\n if (!tileset) {\r\n return;\r\n }\r\n\r\n const settings = <TilesetCad.ISettings>tileset.settings;\r\n const rootId = settings.rootEntityId;\r\n const coords: EntityCoords.IEntityCoords = await EntityCoords.GetEntityCoords(api, rootId);\r\n\r\n const cTileset = this.cTileset = TilesetRenderEngine.Render({\r\n apiGetter: this.apiGetter,\r\n tileset: tileset,\r\n viewer: this.viewer,\r\n coords: coords\r\n });\r\n cTileset.readyPromise.then(() => {\r\n try {\r\n if (this.disposed || cTileset.isDestroyed()) {\r\n return;\r\n }\r\n this.onCTilesetLoad();\r\n this.styler = new TilesetRenderEngine.CadStyler(api, this.cTileset, <number>this.item.styleId, <any[]>this.item.StyleMapping);\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n });\r\n cTileset.tileLoad.addEventListener((tile) => {\r\n try {\r\n this.mapCTile(tile);\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n });\r\n }\r\n\r\n private onCTilesetLoad(): void {\r\n if (this.item.FlyTo) {\r\n this.viewer.zoomTo(\r\n this.cTileset,\r\n new Cesium.HeadingPitchRange(0.0, -0.5, this.cTileset.boundingSphere.radius / 4.0)\r\n );\r\n }\r\n }\r\n\r\n private mapCTile(tile: Cesium.Cesium3DTile): void {\r\n const content = tile?.content;\r\n if (!content) {\r\n return;\r\n }\r\n for (let i = 0; i < content.featuresLength; i++) {\r\n const feature = content.getFeature(i);\r\n \r\n let rego = this.mapTilesetFeature(feature);\r\n if (rego?.entityId) {\r\n this.styler.QueueEntities([rego]);\r\n }\r\n }\r\n }\r\n\r\n private mapTilesetFeature(feature: Cesium.Cesium3DTileFeature): VisualsRegister.IVisualRego {\r\n let version = feature?.tileset?.extensions?.modelTree?.version;\r\n if (!version) {\r\n version = 1;\r\n }\r\n \r\n let rego: VisualsRegister.IVisualRego = {\r\n entityId: <any>null,\r\n entityTypeId: <any>null,\r\n menuItemId: this.item.id,\r\n priority: 0,\r\n visual: feature\r\n };\r\n if (version == 1) {\r\n const pathStr = (<Cesium.Cesium3DTileFeature><any>feature).getProperty(\"BrucePath\");\r\n if (pathStr != undefined) {\r\n let path = pathStr.split(\"|\");\r\n let entityTypeId = this.getEntityTypeByPath(path);\r\n rego.entityTypeId = entityTypeId;\r\n rego.entityId = path[path.length - 1];\r\n }\r\n }\r\n else if (version == 2) {\r\n const geomId = +feature.getProperty(\"GeomId\");\r\n if (geomId != null && (!!geomId || geomId == 0)) {\r\n const meta = this.getMetaByGeomId(geomId, feature.tileset);\r\n if (meta) {\r\n rego.entityId = meta.id;\r\n rego.entityTypeId = meta.typeId;\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"Unhandled tileset tree version = \" + version);\r\n }\r\n if (rego?.entityId) {\r\n this.visualsManager.Add(rego);\r\n return rego;\r\n }\r\n return <any>null;\r\n }\r\n\r\n private getMetaByGeomId(geomId: number, tileset: Cesium.Cesium3DTileset): { id: string, typeId: string } {\r\n let modelTree: any = tileset?.extensions?.modelTree;\r\n return this.digMetaByGeomId(geomId, modelTree, []);\r\n }\r\n \r\n private digMetaByGeomId(geomId: number, branch: any, path: string[]): { id: string, typeId: string } {\r\n path = [].concat(<any>path);\r\n path.push(branch.id);\r\n\r\n if (branch.geomId == geomId) {\r\n return { id: path[path.length - 1], typeId: branch.typeId };\r\n }\r\n else if (branch.children) {\r\n for (let i = 0; i < branch.children.length; i++) {\r\n let meta = this.digMetaByGeomId(geomId, branch.children[i], path);\r\n if (meta) {\r\n return meta;\r\n }\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n private getEntityTypeByPath(path: string[]): string {\r\n let modelTree: any = this.cTileset?.extensions?.modelTree;\r\n if (modelTree) {\r\n let data = this.digModelTreeByPath(modelTree, path);\r\n if (data) {\r\n return data.typeId;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n \r\n private digModelTreeByPath(branch: any, path: string[]): any {\r\n // Dereference.\r\n path = JSON.parse(JSON.stringify(path));\r\n \r\n if (path.length <= 0) {\r\n return null;\r\n }\r\n let pathTop = path.splice(0, 1)[0];\r\n if (pathTop != branch.id) {\r\n return null;\r\n }\r\n else if (path.length == 0 && pathTop == branch.id) {\r\n return branch;\r\n }\r\n else if (branch.children) {\r\n for (let i = 0; i < branch.children.length; i++) {\r\n let foundPath = this.digModelTreeByPath(branch.children[i], path);\r\n if (foundPath) {\r\n return foundPath;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.disposed = true;\r\n if (this.cTileset) {\r\n const viewer = this.viewer;\r\n if (!viewer?.isDestroyed() && this.viewer.scene.primitives.contains(this.cTileset)) {\r\n this.cTileset.show = false;\r\n this.viewer.scene.primitives.remove(this.cTileset);\r\n }\r\n this.cTileset = null;\r\n }\r\n this.styler?.Dispose();\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n }\r\n }\r\n}","import { Entity, EntityFilterGetter } from \"bruce-models\";\r\nimport { BruceApi } from \"bruce-models/dist/types/api/bruce-api\";\r\nimport { IDictionary } from \"bruce-models/dist/types/common/dictionary\";\r\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\r\n\r\nfunction createFilterGetterCacheKey(params: SharedGetters.IFilterGetterParams): string {\r\n let cacheKey = \"\";\r\n cacheKey += params.api.GetBaseUrl();\r\n cacheKey += params.typeId;\r\n cacheKey += params.batchSize;\r\n cacheKey += JSON.stringify(params.attrFilter);\r\n return cacheKey;\r\n}\r\n\r\nexport namespace SharedGetters {\r\n export interface IFilterGetterParams {\r\n api: BruceApi.Api;\r\n typeId: string;\r\n batchSize: number;\r\n attrFilter: Entity.Filter.V1.AttrFilter;\r\n monitor: CesiumViewMonitor;\r\n }\r\n\r\n export class Cache {\r\n private data: IDictionary<EntityFilterGetter.Getter> = {};\r\n\r\n\r\n public GetOrCreateFilterGetter(params: IFilterGetterParams): EntityFilterGetter.Getter {\r\n const cacheKey = createFilterGetterCacheKey(params);\r\n let getter = this.data[cacheKey];\r\n if (!getter) {\r\n getter = new EntityFilterGetter.Getter(\r\n params.api,\r\n params.monitor,\r\n params.typeId,\r\n params.batchSize,\r\n params.attrFilter\r\n );\r\n this.data[cacheKey] = getter;\r\n }\r\n return getter;\r\n }\r\n }\r\n}","import { BruceApi, Cartes, EntitySource, IDictionary, MenuItem, ObjectUtils } from \"bruce-models\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\nimport * as Cesium from \"cesium\";\r\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\r\n\r\ninterface ICesiumFeatureExtended extends Cesium.Cesium3DTileFeature {\r\n _orgColor: Cesium.Color;\r\n _counter: number;\r\n}\r\n\r\nconst MAX_BATCHES = 2;\r\nconst BATCH_SIZE = 30;\r\nconst BATCH_DELAY = 200;\r\nconst MAX_RANGE = 3000;\r\n\r\nexport namespace TilesetOsmRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private item: MenuItem.Item.IOsm;\r\n private monitor: CesiumViewMonitor;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private visualsManager: VisualsRegister.Register;\r\n private cTileset: Cesium.Cesium3DTileset = <any>null;\r\n\r\n private counter: number = 0;\r\n private get count(): number {\r\n return ++this.counter;\r\n }\r\n\r\n private _loadedCesiumEntities: IDictionary<VisualsRegister.IVisualRego> = {};\r\n private totalLoaded: number = 0;\r\n private featureQueue: ICesiumFeatureExtended[] = [];\r\n private sourceId: number = <any>null;\r\n private entityTypeId: string = <any>null;\r\n private queueCheckInterval: any = null;\r\n private processingQueue: number = 0;\r\n\r\n\r\n constructor(viewer: Cesium.Viewer, visualsManager: VisualsRegister.Register, apiGetter: BruceApi.IGetter, monitor: CesiumViewMonitor, item: MenuItem.Item.IOsm) {\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n this.monitor = monitor;\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n clearInterval(this.queueCheckInterval);\r\n if (this.cTileset) {\r\n const viewer = this.viewer;\r\n if (!viewer?.isDestroyed() && this.viewer.scene.primitives.contains(this.cTileset)) {\r\n this.cTileset.show = false;\r\n this.viewer.scene.primitives.remove(this.cTileset);\r\n }\r\n this.cTileset = null;\r\n }\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n this.featureQueue = [];\r\n }\r\n\r\n public async Init(): Promise<void> {\r\n const menuItem = this.item;\r\n this.sourceId = <number><any>menuItem.BruceEntity?.SourceId;\r\n this.entityTypeId = <string>menuItem.BruceEntity?.[\"EntityType.ID\"];\r\n\r\n this.cTileset = Cesium.createOsmBuildings();\r\n this.cTileset.show = true;\r\n\r\n if (this.sourceId) {\r\n if (menuItem.ghostLoading == true) {\r\n this.cTileset.style = new Cesium.Cesium3DTileStyle({\r\n color: \"rgba(255, 255, 250, 0.98)\"\r\n });\r\n }\r\n \r\n this.viewer.scene.primitives.add(this.cTileset);\r\n this.cTileset.tileLoad.addEventListener((tile) => {\r\n try {\r\n this.mapCTile(tile);\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n });\r\n \r\n this.queueCheckInterval = setInterval(() => {\r\n if (this.featureQueue.length > 0) {\r\n this.processQueue();\r\n }\r\n }, 5000);\r\n }\r\n else {\r\n this.viewer.scene.primitives.add(this.cTileset);\r\n }\r\n }\r\n\r\n private async mapCTile(tile: Cesium.Cesium3DTile): Promise<void> {\r\n if (this.sourceId) {\r\n let content = tile?.content;\r\n if (!content) {\r\n return;\r\n }\r\n for (let i = 0; i < content.featuresLength; i++) {\r\n let feature: ICesiumFeatureExtended = <ICesiumFeatureExtended>content.getFeature(i);\r\n if (feature._counter == null) {\r\n feature._counter = this.count;\r\n }\r\n if (feature._orgColor == null) {\r\n feature._orgColor = feature.color;\r\n }\r\n this.featureQueue.push(feature);\r\n }\r\n this.processQueue();\r\n }\r\n }\r\n\r\n private async processQueue(): Promise<void> {\r\n if (this.processingQueue >= MAX_BATCHES) {\r\n return;\r\n }\r\n else if (this.Disposed) {\r\n return;\r\n }\r\n this.processingQueue += 1;\r\n \r\n let batch: ICesiumFeatureExtended[] = [];\r\n let rerun: boolean = false;\r\n \r\n try {\r\n batch = this.getVisualsForBatch();\r\n \r\n if (batch.length > 0) {\r\n await this.mapTileBatch(batch);\r\n }\r\n \r\n if (this.totalLoaded > 8000) {\r\n rerun = this.removeFarAwayBatch();\r\n }\r\n else {\r\n rerun = this.featureQueue.length > 0 && batch.length > 0;\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n finally {\r\n setTimeout(() => {\r\n this.processingQueue -= 1;\r\n if (rerun) {\r\n this.processQueue();\r\n }\r\n }, BATCH_DELAY);\r\n }\r\n }\r\n\r\n private getVisualsForBatch(): ICesiumFeatureExtended[] {\r\n const batch: ICesiumFeatureExtended[] = [];\r\n const features = this.featureQueue;\r\n const bounds = this.monitor.GetBounds();\r\n const rect = bounds?.east ? new Cesium.Rectangle(\r\n Cesium.Math.toRadians(bounds.west), \r\n Cesium.Math.toRadians(bounds.south), \r\n Cesium.Math.toRadians(bounds.east), \r\n Cesium.Math.toRadians(bounds.north)\r\n ) : null;\r\n\r\n if (rect) {\r\n for (let i = 0; i < features.length; i++) {\r\n const feature = features[i];\r\n if (feature) {\r\n const featureLon = feature.getProperty(\"cesium#longitude\");\r\n const featureLat = feature.getProperty(\"cesium#latitude\");\r\n if (featureLon && featureLat) {\r\n const carto = Cesium.Cartographic.fromDegrees(featureLon, featureLat, 0);\r\n const isIn = Cesium.Rectangle.contains(rect, carto);\r\n if (isIn) {\r\n const isClose = this.getIsVisualWithinRange(feature, MAX_RANGE);\r\n if (isClose) {\r\n batch.push(feature);\r\n if (batch.length >= BATCH_SIZE) {\r\n return batch;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return batch;\r\n }\r\n\r\n private getIsVisualWithinRange(visual: ICesiumFeatureExtended, range: number): boolean {\r\n const featureLon = visual.getProperty(\"cesium#longitude\");\r\n const featureLat = visual.getProperty(\"cesium#latitude\");\r\n if (featureLon && featureLat) {\r\n const pos = Cesium.Cartesian3.fromDegrees(featureLon, featureLat, 0);\r\n const camPoint = this.monitor.GetTarget();\r\n const camPos = camPoint?.latitude ? Cesium.Cartesian3.fromDegrees(camPoint.longitude, camPoint.latitude, camPoint.altitude) : null;\r\n if (camPos && Cartes.ValidateCartes3(camPos) && Cartes.ValidateCartes3(pos)) {\r\n let distance = Cesium.Cartesian3.distance(pos, camPos);\r\n if (distance != null && distance <= range) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private async mapTileBatch(features: ICesiumFeatureExtended[]): Promise<void> {\r\n const featureIds: string[] = [];\r\n const featureMap: ICesiumFeatureExtended[] = [];\r\n \r\n for (let i = 0; i < features.length; i++) {\r\n const feature = features[i];\r\n const featureId = feature.getProperty(\"elementId\");\r\n if (featureId) {\r\n featureMap.push(feature);\r\n featureIds.push(featureId + \"\");\r\n }\r\n\r\n const index = this.featureQueue.findIndex(x => x._counter == feature._counter);\r\n if (index > -1) {\r\n this.featureQueue.splice(index, 1);\r\n }\r\n }\r\n\r\n const api = this.apiGetter.getApi();\r\n const bIds = await EntitySource.GetEntityIdsBySourceKeys(api, this.sourceId, featureIds);\r\n\r\n for (let i = 0; i < featureIds.length; i++) {\r\n const id = featureIds[i];\r\n let bId = bIds[id];\r\n if (!bId) {\r\n bId = ObjectUtils.UId();\r\n }\r\n const feature = featureMap[i];\r\n if (this.item.ghostLoading == true) {\r\n feature.color = feature._orgColor;\r\n }\r\n const rego = {\r\n entityId: bId,\r\n menuItemId: this.item.id,\r\n priority: 0,\r\n visual: feature,\r\n entityTypeId: this.entityTypeId,\r\n sourceId: this.sourceId\r\n };\r\n this.visualsManager.Add(rego);\r\n this._loadedCesiumEntities[bId] = rego;\r\n }\r\n }\r\n\r\n private removeFarAwayBatch(): boolean {\r\n let removed = 0;\r\n let keys = Object.keys(this._loadedCesiumEntities);\r\n for (let i = 0; i < keys.length; i++) {\r\n let key = keys[i];\r\n let rego = this._loadedCesiumEntities[key];\r\n if (rego) {\r\n if (!this.getIsVisualWithinRange(rego.visual as ICesiumFeatureExtended, MAX_RANGE)) {\r\n this.visualsManager.Remove(rego.entityId, this.item.id);\r\n this._loadedCesiumEntities[key] = <any>null;\r\n delete this._loadedCesiumEntities[key];\r\n this.totalLoaded -= 1;\r\n removed += 1;\r\n \r\n if (removed >= BATCH_SIZE) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n \r\n return removed > 0;\r\n }\r\n }\r\n}","import { BruceApi, MenuItem, Tileset, TilesetEntities } from \"bruce-models\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\nimport * as Cesium from \"cesium\";\r\nimport { TilesetRenderEngine } from \"../../tileset-render-engine\";\r\n\r\nexport namespace TilesetEntitiesRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private item: MenuItem.Item.ICadTileset;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private visualsManager: VisualsRegister.Register;\r\n private cTileset: Cesium.Cesium3DTileset = <any>null;\r\n private typeId: string;\r\n \r\n constructor(\r\n viewer: Cesium.Viewer, \r\n visualsManager: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n item: MenuItem.Item.ICadTileset\r\n ) {\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public async Init(): Promise<void> {\r\n const tilesetId = this.item.tileset?.TilesetID;\r\n if (!tilesetId) {\r\n return;\r\n }\r\n\r\n const api = this.apiGetter.getApi();\r\n const tileset = await Tileset.Get(api, tilesetId);\r\n if (!tileset) {\r\n return;\r\n }\r\n this.typeId = (tileset.settings as TilesetEntities.ISettings).entityTypeId;\r\n\r\n const cTileset = this.cTileset = TilesetRenderEngine.Render({\r\n apiGetter: this.apiGetter,\r\n tileset: tileset,\r\n viewer: this.viewer\r\n });\r\n cTileset.readyPromise.then(() => {\r\n try {\r\n if (this.disposed || this.viewer.isDestroyed()) {\r\n return;\r\n }\r\n this.onCTilesetLoad();\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n });\r\n cTileset.tileLoad.addEventListener((tile) => {\r\n this.mapCTile(tile);\r\n });\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.disposed = true;\r\n if (this.cTileset) {\r\n const viewer = this.viewer;\r\n if (!viewer?.isDestroyed() && this.viewer.scene.primitives.contains(this.cTileset)) {\r\n this.cTileset.show = false;\r\n this.viewer.scene.primitives.remove(this.cTileset);\r\n }\r\n this.cTileset = null;\r\n }\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n }\r\n\r\n private onCTilesetLoad(): void {\r\n if (this.item.FlyTo) {\r\n this.viewer.zoomTo(\r\n this.cTileset,\r\n new Cesium.HeadingPitchRange(0.0, -0.5, this.cTileset.boundingSphere.radius / 4.0)\r\n );\r\n }\r\n }\r\n \r\n private mapCTile(tile: Cesium.Cesium3DTile): void {\r\n const content = tile?.content;\r\n if (!content) {\r\n return;\r\n }\r\n for (let i = 0; i < content.featuresLength; i++) {\r\n const feature = content.getFeature(i);\r\n this.mapTilesetFeature(feature);\r\n }\r\n }\r\n\r\n private mapTilesetFeature(feature: Cesium.Cesium3DTileFeature): void {\r\n const id = feature.getProperty(\"BruceId\");\r\n if (id) {\r\n const rego: VisualsRegister.IVisualRego = {\r\n entityId: id,\r\n entityTypeId: this.typeId,\r\n menuItemId: this.item.id,\r\n priority: 0,\r\n visual: feature\r\n };\r\n this.visualsManager.Add(rego);\r\n }\r\n }\r\n }\r\n}","import { BruceApi, MenuItem, Tileset } from \"bruce-models\";\r\nimport { RenderManager } from \"../render-manager\";\r\nimport * as Cesium from \"cesium\";\r\nimport { TilesetRenderEngine } from \"../../tileset-render-engine\";\r\n\r\nexport namespace TilesetPointcloudRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private item: MenuItem.Item.IPointcloud;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private cTileset: Cesium.Cesium3DTileset = <any>null;\r\n\r\n \r\n constructor(viewer: Cesium.Viewer, apiGetter: BruceApi.IGetter, item: MenuItem.Item.IPointcloud) {\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.item = item;\r\n }\r\n \r\n public async Init(): Promise<void> {\r\n const tilesetId = this.item.tileset?.TilesetID;\r\n if (!tilesetId) {\r\n return;\r\n }\r\n\r\n const api = this.apiGetter.getApi();\r\n const tileset = await Tileset.Get(api, tilesetId);\r\n if (!tileset) {\r\n return;\r\n }\r\n\r\n const cTileset = this.cTileset = TilesetRenderEngine.Render({\r\n apiGetter: this.apiGetter,\r\n tileset: tileset,\r\n viewer: this.viewer,\r\n coords: null\r\n });\r\n cTileset.readyPromise.then(() => {\r\n try {\r\n if (this.disposed || this.viewer.isDestroyed()) {\r\n return;\r\n }\r\n this.onCTilesetLoad();\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n });\r\n }\r\n\r\n private onCTilesetLoad(): void {\r\n if (this.item.FlyTo) {\r\n this.viewer.zoomTo(\r\n this.cTileset,\r\n new Cesium.HeadingPitchRange(0.0, -0.5, this.cTileset.boundingSphere.radius / 4.0)\r\n );\r\n }\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.disposed = true;\r\n if (this.cTileset) {\r\n const viewer = this.viewer;\r\n if (!viewer?.isDestroyed() && this.viewer.scene.primitives.contains(this.cTileset)) {\r\n this.cTileset.show = false;\r\n this.viewer.scene.primitives.remove(this.cTileset);\r\n }\r\n this.cTileset = null;\r\n }\r\n }\r\n }\r\n}","import { BruceApi, ClientFile, MenuItem } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { RenderManager } from \"../render-manager\";\r\n\r\nexport namespace DataSourceStaticKmlManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private item: MenuItem.Item.IKml;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private dataSource: Cesium.KmlDataSource = null;\r\n\r\n constructor(viewer: Cesium.Viewer, apiGetter: BruceApi.IGetter, item: MenuItem.Item.IKml) {\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.item = item;\r\n }\r\n\r\n public async Init(): Promise<void> {\r\n const fileId = this.item.KML?.ClientFile?.ID;\r\n if (!fileId) {\r\n return;\r\n }\r\n const api = this.apiGetter.getApi();\r\n const fileUrl = ClientFile.GetUrl(api, fileId);\r\n this.dataSource = new Cesium.KmlDataSource();\r\n this.dataSource.load(fileUrl);\r\n this.viewer.dataSources.add(this.dataSource);\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.disposed = true;\r\n if (\r\n this.dataSource && \r\n !this.viewer?.isDestroyed() && \r\n this.viewer.dataSources.contains(this.dataSource)\r\n ) {\r\n this.viewer.dataSources.remove(this.dataSource);\r\n }\r\n }\r\n }\r\n}","import { BruceApi, BruceEvent, 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\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.Type;\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 interface IRenderParams {\r\n apiGetter: BruceApi.IGetter;\r\n item: MenuItem.IItem;\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\r\n \r\n public constructor(viewer: Cesium.Viewer, visualsRegister?: VisualsRegister.Register) {\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 ids children.\r\n * Will return the enabled item id.\r\n * @param params\r\n * @param recursive\r\n * @returns \r\n */\r\n public async RenderItem(params: IRenderParams, recursive: boolean = true): Promise<string> {\r\n if (this.viewer.isDestroyed()) {\r\n return null;\r\n }\r\n let rItem = this.items.find(x => x.id == params.item.id);\r\n if (!rItem) {\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 }\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 this.viewer, \r\n this.visualsRegister, \r\n params.apiGetter, \r\n this.sharedMonitor,\r\n <MenuItem.Item.IBruceEntities>params.item,\r\n this.sharedGetters\r\n );\r\n break;\r\n case MenuItem.EType.EntitiesLoaded:\r\n rItem.renderManager = new EntitiesLoadedRenderManager.Manager(\r\n this.viewer, \r\n this.visualsRegister, \r\n params.apiGetter, \r\n this.sharedMonitor, \r\n <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 this.viewer, \r\n this.visualsRegister, \r\n params.apiGetter, \r\n this.sharedMonitor,\r\n <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 this.viewer, \r\n this.visualsRegister, \r\n params.apiGetter, \r\n this.sharedMonitor, \r\n <MenuItem.Item.IBruceEntity>params.item\r\n );\r\n break;\r\n case MenuItem.EType.CadTileset:\r\n rItem.renderManager = new TilesetCadRenderManager.Manager(this.viewer, this.visualsRegister, params.apiGetter, <MenuItem.Item.ICadTileset>params.item);\r\n break;\r\n case MenuItem.EType.Osm:\r\n rItem.renderManager = new TilesetOsmRenderManager.Manager(this.viewer, this.visualsRegister, params.apiGetter, this.sharedMonitor, <MenuItem.Item.IOsm>params.item);\r\n break;\r\n case MenuItem.EType.PointCloud:\r\n rItem.renderManager = new TilesetPointcloudRenderManager.Manager(this.viewer, params.apiGetter, <MenuItem.Item.IPointcloud>params.item);\r\n break;\r\n case MenuItem.EType.EntityTileset:\r\n rItem.renderManager = new TilesetEntitiesRenderManager.Manager(this.viewer, this.visualsRegister, params.apiGetter, <MenuItem.Item.IEntitiesTileset>params.item);\r\n break;\r\n case MenuItem.EType.Kml:\r\n rItem.renderManager = new DataSourceStaticKmlManager.Manager(this.viewer, params.apiGetter, <MenuItem.Item.IKml>params.item);\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 await rItem.renderManager.Init();\r\n }\r\n }\r\n if (params.item.Children && recursive) {\r\n for (let i = 0; i < params.item.Children.length; i++) {\r\n const childId = await 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 return rItem.id;\r\n }\r\n \r\n /**\r\n * Disables a menu item by ids id.\r\n * This will disable all children as well.\r\n * @param id \r\n * @param recursive\r\n */\r\n public async RemoveItemById(id: string, recursive: boolean = true): Promise<void> {\r\n if (this.viewer.isDestroyed()) {\r\n return;\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 await this.RemoveItemById(child.id);\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}","import { BruceApi, Entity, 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 RenderHelper {\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: IParams, entityIds: string[]): Promise<string> {\r\n const item: MenuItem.Item.IEntityIds = {\r\n Caption: \"Rendering Loaded Entities\",\r\n Type: <MenuItem.EType><any>MenuItem.EType.EntitiesLoaded,\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 return await params.manager.RenderItem({\r\n apiGetter: params.apiGetter,\r\n item: item\r\n });\r\n }\r\n\r\n export async function RenderEntityTypes(params: IParams, typeIds: string[]): Promise<string[]> {\r\n const renderedItemIds: string[] = [];\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 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 renderedItemIds;\r\n }\r\n\r\n export async function RenderEntityFilter(params: IParams, filter: Entity.Filter.V1.IFilter): Promise<string> {\r\n const item: MenuItem.Item.IBruceEntities = {\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 showAllLayers: true,\r\n showAllLayersExcludeBelow: false,\r\n tagIds: []\r\n };\r\n return await params.manager.RenderItem({\r\n apiGetter: params.apiGetter,\r\n item: item\r\n });\r\n }\r\n\r\n export async function RenderMenuItems(params: IParams, menuItems: MenuItem.IItem[]): Promise<string[]> {\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 renderedItemIds;\r\n }\r\n\r\n export async function RenderTileset(params: IParams, tilesetId: string): Promise<string> {\r\n const api = params.apiGetter.getApi();\r\n const tileset = await Tileset.Get(api, tilesetId);\r\n if (tileset.type == Tileset.EType.Cad) {\r\n const menuItem: MenuItem.Item.ICadTileset = {\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 };\r\n return await params.manager.RenderItem({\r\n item: menuItem,\r\n apiGetter: params.apiGetter\r\n });\r\n }\r\n else {\r\n throw(new Error(\"Tileset type not supported.\"));\r\n }\r\n }\r\n\r\n export async function RenderBookmarkItems(params: IParams, viewId: string, bookmarkId: string): Promise<string[]> {\r\n const api = params.apiGetter.getApi();\r\n const view = await ProjectView.Get(api, viewId);\r\n const bookmark = await ProjectViewBookmark.Get(api, viewId, bookmarkId);\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.V2.ISettings;\r\n const bSettings = bookmark.Settings as ProjectViewBookmark.V2.ISettings;\r\n menuItems = vSettings.menuItems;\r\n enabledIds = bSettings.menuItemIds;\r\n }\r\n else {\r\n const vSettings = view.Settings as ProjectView.V1.ISettings;\r\n const bSettings = bookmark.Settings as ProjectViewBookmark.V1.ISettings;\r\n menuItems = vSettings.LayersMenu;\r\n enabledIds = bSettings.selectedItemIds;\r\n }\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 (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 renderedItemIds;\r\n }\r\n}","import { ProjectViewTile, BruceApi, ProjectView, ProjectViewBookmark, ProjectViewLegacyTile, Tileset, TilesetExtTerrainTiles, TilesetMapTiles, TilesetExtMapTiles, ProgramKey } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EnsureNumber } from \"../utils/js-utils\";\r\n\r\nconst DEFAULT_BING_KEY = \"AqL0uYT5T84jiJeX55_b9zJeeP3MX2p1WLOHH4ljIEPZ7ZL2M81bYLzyYeSwuzzl\";\r\nconst DEFAULT_MAPBOX_KEY = \"pk.eyJ1IjoiYWxleHRodW5kZXIiLCJhIjoiY2psbHJxbnN5MTBvbzNxczZwMHNpeTI0MCJ9.fdoj2QW_7n8RV4e0NCFgZA\";\r\n\r\nconst re = /[\\0-\\x1F\\x7F-\\x9F\\xAD\\u0378\\u0379\\u037F-\\u0383\\u038B\\u038D\\u03A2\\u0528-\\u0530\\u0557\\u0558\\u0560\\u0588\\u058B-\\u058E\\u0590\\u05C8-\\u05CF\\u05EB-\\u05EF\\u05F5-\\u0605\\u061C\\u061D\\u06DD\\u070E\\u070F\\u074B\\u074C\\u07B2-\\u07BF\\u07FB-\\u07FF\\u082E\\u082F\\u083F\\u085C\\u085D\\u085F-\\u089F\\u08A1\\u08AD-\\u08E3\\u08FF\\u0978\\u0980\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09FC-\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A76-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF2-\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B55\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B78-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BFB-\\u0C00\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C34\\u0C3A-\\u0C3C\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5A-\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C77\\u0C80\\u0C81\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDD\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0D01\\u0D04\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D45\\u0D49\\u0D4F-\\u0D56\\u0D58-\\u0D5F\\u0D64\\u0D65\\u0D76-\\u0D78\\u0D80\\u0D81\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DF1\\u0DF5-\\u0E00\\u0E3B-\\u0E3E\\u0E5C-\\u0E80\\u0E83\\u0E85\\u0E86\\u0E89\\u0E8B\\u0E8C\\u0E8E-\\u0E93\\u0E98\\u0EA0\\u0EA4\\u0EA6\\u0EA8\\u0EA9\\u0EAC\\u0EBA\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F48\\u0F6D-\\u0F70\\u0F98\\u0FBD\\u0FCD\\u0FDB-\\u0FFF\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u137D-\\u137F\\u139A-\\u139F\\u13F5-\\u13FF\\u169D-\\u169F\\u16F1-\\u16FF\\u170D\\u1715-\\u171F\\u1737-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17DE\\u17DF\\u17EA-\\u17EF\\u17FA-\\u17FF\\u180F\\u181A-\\u181F\\u1878-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191D-\\u191F\\u192C-\\u192F\\u193C-\\u193F\\u1941-\\u1943\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DB-\\u19DD\\u1A1C\\u1A1D\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1A9F\\u1AAE-\\u1AFF\\u1B4C-\\u1B4F\\u1B7D-\\u1B7F\\u1BF4-\\u1BFB\\u1C38-\\u1C3A\\u1C4A-\\u1C4C\\u1C80-\\u1CBF\\u1CC8-\\u1CCF\\u1CF7-\\u1CFF\\u1DE7-\\u1DFB\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FC5\\u1FD4\\u1FD5\\u1FDC\\u1FF0\\u1FF1\\u1FF5\\u1FFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u2072\\u2073\\u208F\\u209D-\\u209F\\u20BB-\\u20CF\\u20F1-\\u20FF\\u218A-\\u218F\\u23F4-\\u23FF\\u2427-\\u243F\\u244B-\\u245F\\u2700\\u2B4D-\\u2B4F\\u2B5A-\\u2BFF\\u2C2F\\u2C5F\\u2CF4-\\u2CF8\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D71-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E3C-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u2FFF\\u3040\\u3097\\u3098\\u3100-\\u3104\\u312E-\\u3130\\u318F\\u31BB-\\u31BF\\u31E4-\\u31EF\\u321F\\u32FF\\u4DB6-\\u4DBF\\u9FCD-\\u9FFF\\uA48D-\\uA48F\\uA4C7-\\uA4CF\\uA62C-\\uA63F\\uA698-\\uA69E\\uA6F8-\\uA6FF\\uA78F\\uA794-\\uA79F\\uA7AB-\\uA7F7\\uA82C-\\uA82F\\uA83A-\\uA83F\\uA878-\\uA87F\\uA8C5-\\uA8CD\\uA8DA-\\uA8DF\\uA8FC-\\uA8FF\\uA954-\\uA95E\\uA97D-\\uA97F\\uA9CE\\uA9DA-\\uA9DD\\uA9E0-\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A\\uAA5B\\uAA7C-\\uAA7F\\uAAC3-\\uAADA\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F-\\uABBF\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBC2-\\uFBD2\\uFD40-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFE\\uFDFF\\uFE1A-\\uFE1F\\uFE27-\\uFE2F\\uFE53\\uFE67\\uFE6C-\\uFE6F\\uFE75\\uFEFD-\\uFF00\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFDF\\uFFE7\\uFFEF-\\uFFFB\\uFFFE\\uFFFF]/g;\r\n\r\n/**\r\n * Prepares a legacy imagery name for comparison.\r\n * Legacy data did not have ids... we do what we can.\r\n * @param name \r\n * @returns \r\n */\r\nfunction prepLegacyName(name: string): string {\r\n if (!name) {\r\n return \"\";\r\n }\r\n name = name.replace(/\\s/g, \"\");\r\n name = name.replace(re, \"\")\r\n name = name.toLowerCase();\r\n if (name === \"cwt\") {\r\n name = \"cesiumworldterrain\";\r\n }\r\n return name;\r\n}\r\n\r\n/**\r\n * Constructs an terrain provider for a default terrain type.\r\n * Warning: This does not add it to the viewer.\r\n * @param id \r\n * @returns \r\n */\r\nfunction renderDefaultTerrTile(id: ProjectViewTile.EDefaultTerrain): Cesium.TerrainProvider {\r\n let provider: Cesium.TerrainProvider;\r\n switch (id) {\r\n case ProjectViewTile.EDefaultTerrain.CesiumWorldTerrain:\r\n provider = Cesium.createWorldTerrain({\r\n requestVertexNormals: true,\r\n requestWaterMask: false\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultTerrain.FlatTerrain:\r\n provider = <any>new Cesium.EllipsoidTerrainProvider();\r\n break;\r\n case ProjectViewTile.EDefaultTerrain.LINZ:\r\n provider = <any>new Cesium.CesiumTerrainProvider({\r\n url: \"https://s3-ap-southeast-2.amazonaws.com/digitalnewzealand/PROD/Tilesets/nz-dem\",\r\n requestVertexNormals: true,\r\n });\r\n break;\r\n }\r\n return provider;\r\n}\r\n\r\n/**\r\n * Maps a legacy terrain's name to a default terrain id.\r\n * @param name \r\n * @returns \r\n */\r\nfunction legacyTerrIdToDefaultId(name: string): ProjectViewTile.EDefaultTerrain {\r\n name = prepLegacyName(name);\r\n switch (name) {\r\n case \"cesiumworldterrain\":\r\n return ProjectViewTile.EDefaultTerrain.CesiumWorldTerrain;\r\n case \"linz\":\r\n return ProjectViewTile.EDefaultTerrain.LINZ;\r\n case \"flatterrain\":\r\n return ProjectViewTile.EDefaultTerrain.FlatTerrain;\r\n }\r\n}\r\n\r\n/**\r\n * Returns if a given legacy terrain's name correspondings to a default source.\r\n * @param name \r\n * @returns \r\n */\r\nfunction isLegacyTerrainDefault(name: string): boolean {\r\n name = legacyTerrIdToDefaultId(name);\r\n return ProjectViewTile.DefaultTerrains.find(x => x.id == name) != null;\r\n}\r\n\r\n/**\r\n * Returns a best attempt at a unique id from a given legacy terrain source.\r\n * @param source \r\n * @returns \r\n */\r\nfunction createLegacyTerrId(source: ProjectViewLegacyTile.ITerrainSource): string {\r\n if (!source) {\r\n return \"\";\r\n }\r\n if (isLegacyTerrainDefault(source.Name)) {\r\n return source.Name;\r\n }\r\n if (source.SourceUrl) {\r\n return source.SourceUrl;\r\n }\r\n return \"\";\r\n}\r\n\r\n/**\r\n * Returns a best attempt at a unique id from a given legacy imagery source.\r\n * @param source \r\n * @returns \r\n */\r\nfunction createLegacyImageryId(source: ProjectViewLegacyTile.IMapSource): string {\r\n if (!source) {\r\n return \"\";\r\n }\r\n if (isLegacyImageryDefault(source.Name)) {\r\n return source.Name;\r\n }\r\n if (source.SourceUrl) {\r\n return source.SourceUrl;\r\n }\r\n return \"\";\r\n}\r\n\r\n/**\r\n * Turns Cesium collection of enabled imageries into an array.\r\n * @param viewer \r\n * @returns \r\n */\r\nfunction gatherEnabledImageries(viewer: Cesium.Viewer): Cesium.ImageryLayer[] {\r\n const collection = viewer.imageryLayers;\r\n const layers: Cesium.ImageryLayer[] = [];\r\n for (let i = 0; i < collection.length; i++) {\r\n const layer = collection.get(i);\r\n layers.push(layer);\r\n }\r\n return layers;\r\n}\r\n\r\nasync function findKey(apiGetter: BruceApi.IGetter, keyId: string, defaultKey: string) {\r\n let key: string = null;\r\n try {\r\n const pKey = await ProgramKey.Get(apiGetter.getApi(), keyId);\r\n key = pKey.Key;\r\n }\r\n catch (e) {\r\n let doLog = true;\r\n if (e && typeof e === \"object\") {\r\n if (e.Code == \"NotFound\") {\r\n doLog = false;\r\n }\r\n }\r\n if (doLog) {\r\n console.error(e);\r\n }\r\n }\r\n return key && key.length ? key : defaultKey;\r\n}\r\n\r\n/**\r\n * Constructs an imagery provider for a default imagery type.\r\n * Warning: This does not add it to the viewer.\r\n * @param apiGetter\r\n * @param id \r\n * @returns \r\n */\r\nasync function renderDefaultMapTile(apiGetter: BruceApi.IGetter, id: ProjectViewTile.EDefaultImagery): Promise<Cesium.ImageryProvider> {\r\n let provider: Cesium.ImageryProvider;\r\n switch (id) {\r\n case ProjectViewTile.EDefaultImagery.BingMapsAerial:\r\n provider = new Cesium.BingMapsImageryProvider({\r\n url: \"https://dev.virtualearth.net\",\r\n mapStyle: Cesium.BingMapsStyle.AERIAL,\r\n key: await findKey(apiGetter, ProgramKey.EProgramId.BingMaps, DEFAULT_BING_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.BingMapsAerialWithLabels:\r\n provider = new Cesium.BingMapsImageryProvider({\r\n url: \"https://dev.virtualearth.net\",\r\n mapStyle: Cesium.BingMapsStyle.AERIAL_WITH_LABELS,\r\n key: await findKey(apiGetter, ProgramKey.EProgramId.BingMaps, DEFAULT_BING_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.BingMapsRoads:\r\n provider = new Cesium.BingMapsImageryProvider({\r\n url: \"https://dev.virtualearth.net\",\r\n mapStyle: Cesium.BingMapsStyle.ROAD_ON_DEMAND,\r\n key: await findKey(apiGetter, ProgramKey.EProgramId.BingMaps, DEFAULT_BING_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.MapboxSatellite:\r\n provider = new Cesium.MapboxImageryProvider({\r\n mapId: \"mapbox.satellite\",\r\n accessToken: await findKey(apiGetter, ProgramKey.EProgramId.Mapbox, DEFAULT_MAPBOX_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.MapBoxStreets:\r\n provider = new Cesium.MapboxStyleImageryProvider({\r\n styleId: \"satellite-streets-v11\",\r\n accessToken: await findKey(apiGetter, ProgramKey.EProgramId.Mapbox, DEFAULT_MAPBOX_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.MapBoxStreetsClassic:\r\n provider = new Cesium.MapboxStyleImageryProvider({\r\n styleId: \"streets-v11\",\r\n accessToken: await findKey(apiGetter, ProgramKey.EProgramId.Mapbox, DEFAULT_MAPBOX_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.EsriWorldImagery:\r\n provider = new Cesium.ArcGisMapServerImageryProvider({\r\n url:\"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer\",\r\n enablePickFeatures: false\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.EsriWorldStreetMap:\r\n provider = new Cesium.ArcGisMapServerImageryProvider({\r\n url:\"https://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer\",\r\n enablePickFeatures: false\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.EsriNationalGeographic:\r\n provider = new Cesium.ArcGisMapServerImageryProvider({\r\n url:\"https://services.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/\",\r\n enablePickFeatures: false\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.OpenStreetMap:\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: \"https://a.tile.openstreetmap.org/\"\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.StamenWaterColor:\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: \"https://stamen-tiles.a.ssl.fastly.net/watercolor/\"\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.StamenToner:\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: \"https://stamen-tiles.a.ssl.fastly.net/toner/\"\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.Grid:\r\n provider = new Cesium.GridImageryProvider({\r\n tilingScheme: new Cesium.GeographicTilingScheme(),\r\n cells: 0,\r\n color: Cesium.Color.fromCssColorString(\"rgb(97, 151, 237)\"),\r\n glowColor: Cesium.Color.fromCssColorString(\"rgb(54, 54, 54)\"),\r\n glowWidth: 4,\r\n backgroundColor: Cesium.Color.TRANSPARENT,\r\n tileWidth: 256,\r\n tileHeight: 256,\r\n canvasSize: 256\r\n });\r\n break;\r\n }\r\n return provider;\r\n}\r\n\r\n/**\r\n * Maps a legacy imagery's name to a default imagery id.\r\n * @param name \r\n * @returns \r\n */\r\nfunction legacyMapIdToDefaultId(name: string): ProjectViewTile.EDefaultImagery {\r\n name = prepLegacyName(name);\r\n switch (name) {\r\n case \"bingmapsaerial\":\r\n return ProjectViewTile.EDefaultImagery.BingMapsAerial;\r\n case \"bingmapsaerialwithlabels\":\r\n return ProjectViewTile.EDefaultImagery.BingMapsAerialWithLabels;\r\n case \"bingmapsroads\":\r\n return ProjectViewTile.EDefaultImagery.BingMapsRoads;\r\n case \"mapboxsatellite\":\r\n return ProjectViewTile.EDefaultImagery.MapboxSatellite;\r\n case \"mapboxstreets\":\r\n return ProjectViewTile.EDefaultImagery.MapBoxStreets;\r\n case \"mapboxstreetsclassic\":\r\n return ProjectViewTile.EDefaultImagery.MapBoxStreetsClassic;\r\n case \"esriworldimagery\":\r\n return ProjectViewTile.EDefaultImagery.EsriWorldImagery;\r\n case \"esriworldstreetmap\":\r\n return ProjectViewTile.EDefaultImagery.EsriWorldStreetMap;\r\n case \"esrinationalgeographic\":\r\n return ProjectViewTile.EDefaultImagery.EsriNationalGeographic;\r\n case \"openstreetmap\":\r\n return ProjectViewTile.EDefaultImagery.OpenStreetMap;\r\n case \"stamenwatercolor\":\r\n return ProjectViewTile.EDefaultImagery.StamenWaterColor;\r\n case \"stamentoner\":\r\n return ProjectViewTile.EDefaultImagery.StamenToner;\r\n case \"grid\":\r\n return ProjectViewTile.EDefaultImagery.Grid;\r\n }\r\n}\r\n\r\n/**\r\n * Returns if a given legacy imagery's name correspondings to a default source.\r\n * @param name \r\n * @returns \r\n */\r\nfunction isLegacyImageryDefault(name: string): boolean {\r\n name = legacyMapIdToDefaultId(name);\r\n return ProjectViewTile.DefaultImagery.find(x => x.id == name) != null;\r\n}\r\n\r\n/**\r\n * We don't need to provide the \".\" in the file extension to Cesium's providers.\r\n * @param ext \r\n * @returns \r\n */\r\nfunction prepareFileExt(ext: string) {\r\n if (!ext) {\r\n return null;\r\n }\r\n ext = ext.replace(\".\", \"\");\r\n return ext;\r\n}\r\n\r\nexport namespace TileRenderEngine {\r\n /**\r\n * Legacy data did name comparisons instead of ids.\r\n * We need to strip spacing, remove special characters, and make lowercase before comparison...\r\n * @param nameA \r\n * @param nameB \r\n */\r\n export function CompareLegacyNames(nameA: string, nameB: string): boolean {\r\n nameA = prepLegacyName(nameA);\r\n nameB = prepLegacyName(nameB);\r\n return nameA === nameB;\r\n }\r\n\r\n export namespace Map {\r\n export namespace V1 {\r\n export interface ILayerExt extends Cesium.ImageryLayer {\r\n _bId?: string;\r\n _bName?: string;\r\n }\r\n \r\n export interface IViewParams {\r\n bookmarkId: string;\r\n viewId: string;\r\n apiGetter: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n \r\n // TODO: How is render engine supposed to know about this?\r\n // We need a generic way for this information be feed from clients.\r\n ignoreIds?: string[];\r\n }\r\n \r\n export interface IParams {\r\n data: ProjectViewLegacyTile.IMapSource;\r\n apiGetter: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n }\r\n \r\n export async function Render(params: IParams): Promise<ILayerExt> {\r\n const enabled: ILayerExt[] = gatherEnabledImageries(params.viewer);\r\n const tile = params.data;\r\n const bId = createLegacyImageryId(tile);\r\n \r\n let layer: ILayerExt = <ILayerExt>enabled.find(x => x._bId == bId);\r\n if (layer) {\r\n // Already exists.\r\n }\r\n else if (isLegacyImageryDefault(tile.Name)) {\r\n const defaultId = legacyMapIdToDefaultId(tile.Name);\r\n const provider = await renderDefaultMapTile(params.apiGetter, defaultId);\r\n if (provider) {\r\n layer = <ILayerExt>new Cesium.ImageryLayer(provider);\r\n }\r\n }\r\n else if (tile.SourceUrl) {\r\n let provider: Cesium.ImageryProvider = <any>null;\r\n let min = tile.Minimum;\r\n let max = tile.Maximum;\r\n if (min != undefined && min <= -1) {\r\n min = undefined;\r\n }\r\n if (max != undefined && max <= -1) {\r\n max = undefined;\r\n }\r\n \r\n switch (tile.Type) {\r\n case \"BruceImagery\":\r\n provider = new Cesium.UrlTemplateImageryProvider({\r\n url: tile.SourceUrl,\r\n tileHeight: 256,\r\n tileWidth: 256\r\n });\r\n break;\r\n case \"ArcGisImagery\":\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: tile.SourceUrl,\r\n fileExtension: prepareFileExt(tile.FileExtension),\r\n minimumLevel: min,\r\n maximumLevel: max\r\n });\r\n break;\r\n case \"TileMapImagery\":\r\n provider = new Cesium.TileMapServiceImageryProvider({\r\n url: tile.SourceUrl,\r\n fileExtension: prepareFileExt(tile.FileExtension),\r\n minimumLevel: min,\r\n maximumLevel: max\r\n });\r\n break;\r\n case \"OpenStreetMapImagery\":\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: tile.SourceUrl,\r\n fileExtension: prepareFileExt(tile.FileExtension),\r\n minimumLevel: min,\r\n maximumLevel: max\r\n });\r\n break;\r\n case \"MapBoxImagery\":\r\n var mapboxKey = tile.ProgramKey ? tile.ProgramKey : await findKey(params.apiGetter, ProgramKey.EProgramId.Mapbox, null);\r\n provider = new Cesium.UrlTemplateImageryProvider({\r\n url: \"https://api.mapbox.com/styles/v1/\"\r\n + tile.MapBoxUsername + \"/\" + tile.MapBoxID +\r\n \"/tiles/256/{z}/{x}/{y}?access_token=\"\r\n + mapboxKey\r\n });\r\n break;\r\n }\r\n if (provider) {\r\n layer = <ILayerExt>new Cesium.ImageryLayer(provider);\r\n }\r\n }\r\n \r\n if (layer) {\r\n layer._bId = bId;\r\n layer._bName = tile.Name;\r\n if (!params.viewer.imageryLayers.contains(layer)) {\r\n params.viewer.imageryLayers.add(layer);\r\n }\r\n }\r\n return layer;\r\n }\r\n \r\n export async function RenderView(params: IViewParams): Promise<void> {\r\n const api = params.apiGetter.getApi();\r\n \r\n const view = await ProjectView.Get(api, params.viewId) as ProjectView.V1.IView;\r\n let bookmark: ProjectViewBookmark.V1.IBookmark = <any>null;\r\n if (params.bookmarkId) {\r\n bookmark = await ProjectViewBookmark.Get(api, params.viewId, params.bookmarkId) as ProjectViewBookmark.V1.IBookmark;\r\n }\r\n \r\n const vSettings = view.Settings;\r\n const bSettings = bookmark?.Settings;\r\n \r\n const data: ProjectViewLegacyTile.IMapSource[] = [];\r\n const dataNames: string[] = [];\r\n if (bSettings?.imagery) {\r\n for (let i = 0; i < bSettings.imagery.length; i++) {\r\n const source = bSettings.imagery[i];\r\n dataNames.push(source.title);\r\n }\r\n }\r\n else if (vSettings?.DefaultMapTiles) {\r\n dataNames.push(vSettings.DefaultMapTiles);\r\n }\r\n const tiles = vSettings?.CesiumMapSources ?? [];\r\n await ProjectViewLegacyTile.MergeMapTemplateData(params.apiGetter, tiles, vSettings?.CesiumMapSources == null);\r\n \r\n for (let i = 0; i < dataNames.length; i++) {\r\n const name = dataNames[i];\r\n for (let j = 0; j < tiles.length; j++) {\r\n const tile = tiles[j];\r\n if (CompareLegacyNames(tile.Name, name)) {\r\n data.push(tile);\r\n break;\r\n }\r\n } \r\n }\r\n \r\n let enabled: ILayerExt[] = gatherEnabledImageries(params.viewer);\r\n const layers: Cesium.ImageryLayer[] = [];\r\n \r\n // Gather layers we want to render.\r\n // Any new layer is added to viewer at the bottom.\r\n if (params.ignoreIds) {\r\n for (let i = 0; i < params.ignoreIds.length; i++) {\r\n const id = params.ignoreIds[i];\r\n const layer = enabled.find((x) => {\r\n const layer = x as ILayerExt;\r\n if (layer._bId === id) {\r\n return true;\r\n }\r\n });\r\n if (layer) {\r\n layers.push(layer);\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < data.length; i++) {\r\n const tile = data[i];\r\n const layer = await Render({\r\n apiGetter: params.apiGetter,\r\n viewer: params.viewer,\r\n data: tile,\r\n });\r\n if (layer) {\r\n layers.push(layer);\r\n }\r\n }\r\n \r\n // Sort currently enabled (after new ones added) to match desired order.\r\n enabled = gatherEnabledImageries(params.viewer);\r\n enabled.sort((a, b) => {\r\n const indexA = layers.indexOf(a);\r\n const indexB = layers.indexOf(b);\r\n if (indexA < 0 && indexB < 0) {\r\n return 0;\r\n }\r\n if (indexA < 0) {\r\n return 1;\r\n }\r\n if (indexB < 0) {\r\n return -1;\r\n }\r\n return indexA - indexB;\r\n });\r\n \r\n // Move enabled layers to match desired order.\r\n // Remove any layers that aren't in enabled list.\r\n for (let i = 0; i < enabled.length; i++) {\r\n const layer = enabled[i];\r\n if (layers.includes(layer)) {\r\n params.viewer.imageryLayers.raiseToTop(layer);\r\n }\r\n else {\r\n params.viewer.imageryLayers.remove(layer);\r\n }\r\n }\r\n }\r\n }\r\n\r\n export namespace V2 {\r\n export interface IProviderExt extends Cesium.ImageryLayer {\r\n _bMeta?: ProjectViewTile.ITileMeta;\r\n }\r\n\r\n export interface IParams {\r\n apiGetter: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n tiles: ProjectViewTile.IBookmarkImagery[];\r\n }\r\n\r\n export async function GetOrCreateLayer(\r\n viewer: Cesium.Viewer, \r\n apiGetter: BruceApi.IGetter, \r\n meta: ProjectViewTile.ITileMeta\r\n ): Promise<Cesium.ImageryLayer> {\r\n // Don't create a new layer if one already exists.\r\n const enabled = gatherEnabledImageries(viewer);\r\n for (let i = 0; i < enabled.length; i++) {\r\n const layer = enabled[i];\r\n const layerMeta = (layer as IProviderExt)._bMeta;\r\n if (layerMeta && layerMeta.tilesetId === meta.tilesetId && layerMeta.accountId === meta.accountId) {\r\n return layer;\r\n }\r\n }\r\n\r\n const defaultImg = meta.accountId ? null : ProjectViewTile.DefaultImagery.find(\r\n x => x.id === meta.tilesetId\r\n );\r\n\r\n let provider: Cesium.ImageryProvider = <any>null;\r\n if (defaultImg) {\r\n provider = await renderDefaultMapTile(apiGetter, defaultImg.id);\r\n }\r\n else {\r\n const api = apiGetter.getApi(meta.accountId);\r\n const tileset = await Tileset.Get(api, meta.tilesetId);\r\n if (tileset.type === Tileset.EType.GeoMap) {\r\n provider = new Cesium.TileMapServiceImageryProvider({\r\n url: Tileset.GetPublicFileUrl(api, meta.tilesetId, \"\"),\r\n fileExtension: \"png\"\r\n });\r\n }\r\n else if (tileset.type === Tileset.EType.ExternalGeoMap) {\r\n const settings = tileset.settings as TilesetExtMapTiles.ISettings;\r\n switch (settings.mapType) {\r\n case TilesetExtMapTiles.EType.CesiumIon:\r\n provider = new Cesium.IonImageryProvider({\r\n assetId: settings.ionId,\r\n accessToken: await findKey(apiGetter, ProgramKey.EProgramId.CesiumIon, null)\r\n });\r\n break;\r\n case TilesetExtMapTiles.EType.MapBoxImagery:\r\n var mapboxKey = settings.mapBoxKey ? settings.mapBoxKey : await findKey(apiGetter, ProgramKey.EProgramId.Mapbox, null);\r\n provider = new Cesium.UrlTemplateImageryProvider({\r\n url: \"https://api.mapbox.com/styles/v1/\"\r\n + settings.mapBoxAccount + \"/\" + settings.mapBoxStyleId +\r\n \"/tiles/256/{z}/{x}/{y}?access_token=\"\r\n + mapboxKey\r\n });\r\n break;\r\n case TilesetExtMapTiles.EType.OpenStreetMapImagery:\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: settings.url,\r\n fileExtension: prepareFileExt(settings.sourceExt)\r\n });\r\n break;\r\n case TilesetExtMapTiles.EType.TileMapImagery:\r\n provider = new Cesium.TileMapServiceImageryProvider({\r\n url: settings.url,\r\n fileExtension: prepareFileExt(settings.sourceExt)\r\n });\r\n break;\r\n }\r\n }\r\n else if (tileset.type === Tileset.EType.EntitiesMap) {\r\n provider = new Cesium.UrlTemplateImageryProvider({\r\n url: Tileset.GetPublicFileUrl(api, meta.tilesetId, \"{z}/{x}/{y}.png\"),\r\n tileHeight: 256,\r\n tileWidth: 256\r\n });\r\n }\r\n }\r\n if (provider) {\r\n // We need some way to add meta without appending to layers.\r\n // Adding to layers triggers an event, if meta is missing then we'll not know what imagery is enabled.\r\n // In the meantime we use \"lowerToBottom\" to trigger a secondary event with updated data...\r\n const layer: IProviderExt = viewer.imageryLayers.addImageryProvider(provider);\r\n layer._bMeta = meta;\r\n viewer.imageryLayers.lowerToBottom(layer);\r\n return layer;\r\n }\r\n return null;\r\n }\r\n\r\n export async function Render(params: IParams) {\r\n // Ensure layers exist for all enabled sources.\r\n for (let i = 0; i < params.tiles.length; i++) {\r\n const enabled = params.tiles[i];\r\n await GetOrCreateLayer(params.viewer, params.apiGetter, {\r\n accountId: enabled.accountId,\r\n tilesetId: enabled.tilesetId,\r\n })\r\n }\r\n\r\n const curEnabled = params.viewer.imageryLayers;\r\n const toDisable: IProviderExt[] = [];\r\n const curEnabledArr: IProviderExt[] = [];\r\n\r\n for (let i = 0; i < curEnabled.length; i++) {\r\n const layer = curEnabled.get(i) as IProviderExt;\r\n const meta = layer?._bMeta;\r\n const disable = !params.tiles.find(x => x.accountId === meta?.accountId && x.tilesetId === meta?.tilesetId);\r\n if (disable) {\r\n toDisable.push(layer);\r\n }\r\n else {\r\n curEnabledArr.push(layer);\r\n }\r\n }\r\n for (let i = 0; i < toDisable.length; i++) {\r\n params.viewer.imageryLayers.remove(toDisable[i]);\r\n }\r\n\r\n for (let i = 0; i < params.tiles.length; i++) {\r\n const enabled = params.tiles[i];\r\n const layer = curEnabledArr.find(x => x._bMeta?.accountId === enabled.accountId && x._bMeta?.tilesetId === enabled.tilesetId);\r\n if (layer) {\r\n params.viewer.imageryLayers.raiseToTop(layer);\r\n layer.alpha = EnsureNumber(enabled.alpha == null ? 1 : enabled.alpha);\r\n layer.brightness = EnsureNumber(enabled.brightness == null ? 1 : enabled.brightness);\r\n layer.contrast = EnsureNumber(enabled.contrast == null ? 1 : enabled.contrast);\r\n layer.hue = EnsureNumber(enabled.hue == null ? 0 : enabled.hue);\r\n layer.saturation = EnsureNumber(enabled.saturation == null ? 1 : enabled.saturation);\r\n layer.gamma = EnsureNumber(enabled.gamma == null ? 1 : enabled.gamma);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n export namespace Terrain {\r\n export namespace V1 {\r\n export interface IProviderExt extends Cesium.CesiumTerrainProvider {\r\n _bId: string;\r\n _bName: string;\r\n }\r\n\r\n export interface IParams {\r\n data: ProjectViewLegacyTile.ITerrainSource;\r\n viewer: Cesium.Viewer;\r\n }\r\n \r\n export interface IViewParams {\r\n bookmarkId: string;\r\n viewId: string;\r\n apiGetter: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export function Render(params: IParams): void {\r\n const bId = createLegacyTerrId(params.data);\r\n const curProvider = params.viewer.terrainProvider as IProviderExt;\r\n if (curProvider._bId && curProvider._bId === bId) {\r\n return;\r\n }\r\n \r\n let provider: IProviderExt = <any>null;\r\n if (isLegacyTerrainDefault(params.data.Name)) {\r\n const id = legacyTerrIdToDefaultId(params.data.Name);\r\n provider = renderDefaultTerrTile(id) as IProviderExt;\r\n }\r\n else if (params.data.SourceUrl) {\r\n provider = <any>new Cesium.CesiumTerrainProvider({\r\n url: <string>params.data.SourceUrl,\r\n requestWaterMask: params.data.RequestWaterMask,\r\n requestVertexNormals: true\r\n });\r\n }\r\n if (provider) {\r\n provider._bId = bId;\r\n provider._bName = params.data?.Name;\r\n params.viewer.terrainProvider = provider;\r\n }\r\n }\r\n \r\n export async function RenderView(params: IViewParams): Promise<void> {\r\n const api = params.apiGetter.getApi();\r\n const view = await ProjectView.Get(api, params.viewId) as ProjectView.V1.IView;\r\n let bookmark: ProjectViewBookmark.V1.IBookmark = <any>null;\r\n if (params.bookmarkId) {\r\n bookmark = await ProjectViewBookmark.Get(api, params.viewId, params.bookmarkId) as ProjectViewBookmark.V1.IBookmark;\r\n }\r\n \r\n const vSettings = view.Settings;\r\n const bSettings = bookmark?.Settings;\r\n\r\n let terrainTiles = vSettings?.CesiumTerrainSources ?? [];\r\n let terrainTile: ProjectViewLegacyTile.ITerrainSource = <any>null;\r\n let terrainTileName: string = <any>null;\r\n if (bookmark?.Settings?.terrain) {\r\n terrainTileName = bSettings.terrain;\r\n }\r\n else {\r\n terrainTileName = <string>vSettings?.DefaultTerrain;\r\n }\r\n await ProjectViewLegacyTile.MergeTerrainTemplateData(params.apiGetter, terrainTiles, vSettings?.CesiumTerrainSources == null);\r\n for (let i = 0; i < terrainTiles.length; i++) {\r\n const tile = terrainTiles[i];\r\n if (TileRenderEngine.CompareLegacyNames(tile.Name, terrainTileName)) {\r\n terrainTile = tile;\r\n break;\r\n }\r\n }\r\n if (terrainTile) {\r\n Render({\r\n data: terrainTile,\r\n viewer: params.viewer,\r\n });\r\n }\r\n }\r\n }\r\n\r\n export namespace V2 {\r\n export interface IProviderExt extends Cesium.CesiumTerrainProvider {\r\n _bMeta?: ProjectViewTile.ITileMeta;\r\n }\r\n\r\n export interface IParams {\r\n apiGetter: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n tile: ProjectViewTile.IBookmarkTerrain;\r\n }\r\n\r\n export async function Render(params: IParams): Promise<void> {\r\n // Already enabled.\r\n const enabledMeta = (params.viewer.terrainProvider as IProviderExt)?._bMeta;\r\n if (\r\n enabledMeta?.tilesetId === params.tile.tilesetId &&\r\n enabledMeta?.accountId === params.tile.accountId\r\n ) {\r\n return;\r\n }\r\n\r\n const defaultTerr = params.tile.accountId ? null : ProjectViewTile.DefaultTerrains.find(\r\n x => x.id === params.tile.tilesetId\r\n );\r\n\r\n let provider: IProviderExt = null;\r\n if (defaultTerr) {\r\n provider = renderDefaultTerrTile(defaultTerr.id) as IProviderExt;\r\n }\r\n else {\r\n const api = params.apiGetter.getApi(params.tile.accountId);\r\n const tileset = await Tileset.Get(api, params.tile.tilesetId);\r\n\r\n let url: string;\r\n let vertexes: boolean = true;\r\n if (tileset.type === Tileset.EType.Terrain) {\r\n url = Tileset.GetPublicFileUrl(api, tileset.id, \"\");\r\n }\r\n else if (tileset.type === Tileset.EType.ExternalTerrain) {\r\n const settings = tileset.settings as TilesetExtTerrainTiles.ISettings;\r\n url = settings.url;\r\n vertexes = settings.requestVertexNormals == null ? true : settings.requestVertexNormals;\r\n }\r\n else {\r\n console.error(\"Invalid tileset type.\", tileset);\r\n }\r\n \r\n if (url) {\r\n provider = new Cesium.CesiumTerrainProvider({\r\n url: url,\r\n requestVertexNormals: vertexes\r\n });\r\n }\r\n }\r\n\r\n if (provider) {\r\n provider._bMeta = {\r\n accountId: params.tile.accountId,\r\n tilesetId: params.tile.tilesetId\r\n };\r\n params.viewer.terrainProvider = provider;\r\n }\r\n }\r\n }\r\n }\r\n}","import { BruceApi, Camera, Carto, ProjectView, ProjectViewBookmark, ProjectViewTile, } from \"bruce-models\";\r\nimport { MenuItemManager } from \"./menu-item-manager\";\r\nimport { RenderHelper } from \"./render-helper\";\r\nimport * as Cesium from \"cesium\";\r\nimport { TileRenderEngine } from \"./tile-render-engine\";\r\nimport { EnsureNumber } from \"../utils/js-utils\";\r\n\r\n// TODO: Move these to the data model.\r\nconst MIN_SHADOW_SIZE = 1024;\r\nconst MAX_SHADOW_SIZE = 32768;\r\n\r\nasync function renderV1(\r\n params: ViewRenderEngine.IRenderParams,\r\n bookmark: ProjectViewBookmark.V1.IBookmark,\r\n view: ProjectView.V1.IView\r\n) {\r\n const vSettings = view.Settings as ProjectView.V1.ISettings;\r\n const bSettings = bookmark?.Settings as ProjectViewBookmark.V1.ISettings;\r\n\r\n await TileRenderEngine.Terrain.V1.RenderView({\r\n apiGetter: params.apiGetter,\r\n bookmarkId: <string>params.bookmarkId,\r\n viewer: params.manager.Viewer,\r\n viewId: params.viewId,\r\n });\r\n\r\n await TileRenderEngine.Map.V1.RenderView({\r\n apiGetter: params.apiGetter,\r\n bookmarkId: <string>params.bookmarkId,\r\n viewer: params.manager.Viewer,\r\n viewId: params.viewId,\r\n ignoreIds: []\r\n });\r\n\r\n // TODO: Other scene settings.\r\n // TODO: Hidden entities.\r\n // TODO: Rendered relationships.\r\n\r\n let frustum = bSettings?.cameraFrustum;\r\n if (frustum == null) {\r\n frustum = Camera.EFrustum.Perspective;\r\n }\r\n const scene = params.manager.Viewer.scene;\r\n const curFrustum = scene.camera.frustum instanceof Cesium.OrthographicFrustum ? Camera.EFrustum.Orthographic : Camera.EFrustum.Perspective;\r\n if (curFrustum != frustum) {\r\n if (frustum == Camera.EFrustum.Perspective) {\r\n scene.camera.switchToPerspectiveFrustum();\r\n scene.screenSpaceCameraController.enableTilt = true;\r\n }\r\n else {\r\n scene.camera.switchToOrthographicFrustum();\r\n scene.screenSpaceCameraController.enableTilt = false;\r\n }\r\n params.skipTransition = true;\r\n }\r\n\r\n const camera = bookmark.Camera;\r\n const pos = Cesium.Cartesian3.fromDegrees(\r\n +camera.position.longitude, \r\n +camera.position.latitude, \r\n +camera.position.height\r\n );\r\n params.manager.Viewer.scene.camera.flyTo({\r\n destination: pos,\r\n orientation: {\r\n heading: +camera.heading,\r\n pitch: +camera.pitch,\r\n roll: +camera.roll\r\n },\r\n duration: params.skipTransition ? 0 : 2\r\n });\r\n\r\n let go = bookmark?.Settings?.groundOcclusion;\r\n if (go == null) {\r\n go = vSettings?.GroundOcclusion;\r\n }\r\n if (go == null) {\r\n go = false;\r\n }\r\n params.manager.Viewer.scene.globe.depthTestAgainstTerrain = go;\r\n\r\n const enabledItems = params.manager.GetEnabledItemIds();\r\n const newItemIds = bSettings?.selectedItemIds ?? [];\r\n for (const id of enabledItems) {\r\n if (newItemIds.indexOf(id) === -1) {\r\n params.manager.RemoveItemById(id);\r\n }\r\n }\r\n if (params.bookmarkId) {\r\n await RenderHelper.RenderBookmarkItems({\r\n apiGetter: params.apiGetter,\r\n manager: params.manager,\r\n }, params.viewId, params.bookmarkId);\r\n }\r\n}\r\n\r\nasync function renderV2(\r\n params: ViewRenderEngine.IRenderParams,\r\n bookmark: ProjectViewBookmark.V2.IBookmark,\r\n view: ProjectView.V2.IView\r\n) {\r\n const viewer = params.manager.Viewer;\r\n const scene = viewer.scene;\r\n\r\n const vSettings = view.Settings as ProjectView.V2.ISettings;\r\n const bSettings = (bookmark?.Settings ?? {}) as ProjectViewBookmark.V2.ISettings;\r\n const defaults = vSettings.defaults ?? {};\r\n\r\n let camera = (bookmark.Camera ?? {}) as ProjectViewBookmark.V2.ICamera;\r\n if (!Carto.ValidateCarto(camera)) {\r\n camera = {\r\n ...camera,\r\n altitude: defaults.camera?.altitude,\r\n latitude: defaults.camera?.latitude,\r\n longitude: defaults.camera?.longitude,\r\n heading: defaults.camera?.heading,\r\n pitch: defaults.camera?.pitch,\r\n roll: defaults.camera?.roll\r\n }\r\n }\r\n\r\n let newLens = camera.cameraFrustum;\r\n if (newLens == null) {\r\n newLens = defaults.camera?.cameraFrustum;\r\n }\r\n if (newLens == null) {\r\n // TODO: Need global default.\r\n newLens = Camera.EFrustum.Perspective;\r\n }\r\n const curLens = scene.camera.frustum instanceof Cesium.OrthographicFrustum ? \r\n Camera.EFrustum.Orthographic : \r\n Camera.EFrustum.Perspective;\r\n\r\n if (newLens != curLens) {\r\n if (newLens == Camera.EFrustum.Perspective) {\r\n scene.camera.switchToPerspectiveFrustum();\r\n scene.screenSpaceCameraController.enableTilt = true;\r\n }\r\n else {\r\n scene.camera.switchToOrthographicFrustum();\r\n scene.screenSpaceCameraController.enableTilt = false;\r\n }\r\n }\r\n\r\n let transition = params.skipTransition ? 0 : curLens === newLens ? camera.transition : 0;\r\n if (transition == null) {\r\n transition = defaults.camera?.transition;\r\n }\r\n if (transition == null) {\r\n // TODO: Need global default.\r\n transition = 2000;\r\n }\r\n\r\n if (Carto.ValidateCarto(camera)) {\r\n const pos = Cesium.Cartesian3.fromDegrees(\r\n +camera.longitude, \r\n +camera.latitude, \r\n +camera.altitude\r\n );\r\n scene.camera.flyTo({\r\n destination: pos,\r\n orientation: {\r\n heading: Cesium.Math.toRadians(+camera.heading),\r\n pitch: Cesium.Math.toRadians(+camera.pitch),\r\n roll: Cesium.Math.toRadians(+camera.roll)\r\n },\r\n duration: transition != 0 ? transition / 1000 : 0\r\n });\r\n }\r\n\r\n let gOcclusion = bSettings?.groundOcclusion;\r\n if (gOcclusion == null) {\r\n gOcclusion = defaults?.settings?.groundOcclusion;\r\n }\r\n if (gOcclusion == null) {\r\n // TODO: Need global default.\r\n gOcclusion = true;\r\n }\r\n scene.globe.depthTestAgainstTerrain = Boolean(gOcclusion);\r\n\r\n let shadows = bSettings?.shadows;\r\n if (shadows == null) {\r\n shadows = defaults?.settings?.shadows;\r\n }\r\n if (shadows == null) {\r\n shadows = {\r\n enabled: false\r\n } as ProjectViewBookmark.V2.IShadows;\r\n }\r\n if (shadows.enabled) {\r\n viewer.shadows = true;\r\n viewer.shadowMap.enabled = true;\r\n let size = EnsureNumber(shadows.pixelSize);\r\n if (size < MIN_SHADOW_SIZE) {\r\n size = MIN_SHADOW_SIZE;\r\n } \r\n else if (size > MAX_SHADOW_SIZE) {\r\n size = MAX_SHADOW_SIZE;\r\n }\r\n viewer.shadowMap.size = size;\r\n viewer.shadowMap.softShadows = Boolean(shadows.soften);\r\n }\r\n else {\r\n viewer.shadows = false;\r\n viewer.shadowMap.enabled = false;\r\n }\r\n\r\n let ambientOcclusion = bSettings?.ambientOcclusion;\r\n if (ambientOcclusion == null) {\r\n ambientOcclusion = defaults?.settings?.ambientOcclusion;\r\n }\r\n if (ambientOcclusion == null) {\r\n ambientOcclusion = {\r\n enabled: false\r\n } as ProjectViewBookmark.V2.IAmbientOcclusion;\r\n }\r\n const AO = viewer.scene.postProcessStages.ambientOcclusion;\r\n if (ambientOcclusion.enabled) {\r\n AO.enabled = true;\r\n AO.uniforms.intensity = EnsureNumber(ambientOcclusion.intensity);\r\n AO.uniforms.lengthCap = EnsureNumber(ambientOcclusion.lengthCap);\r\n AO.uniforms.bias = EnsureNumber(ambientOcclusion.bias);\r\n AO.uniforms.stepSize = EnsureNumber(ambientOcclusion.stepSize);\r\n AO.uniforms.blurStepSize = EnsureNumber(ambientOcclusion.blurStepSize);\r\n }\r\n else {\r\n AO.enabled = false;\r\n }\r\n\r\n let lighting = bSettings?.lighting;\r\n if (lighting == null) {\r\n lighting = defaults?.settings?.lighting;\r\n }\r\n if (lighting == null) {\r\n lighting = {\r\n color: Cesium.Color.WHITE.toCssColorString(),\r\n intensity: 2\r\n } as ProjectViewBookmark.V2.ILighting;\r\n }\r\n const light = viewer.scene.light;\r\n if (light) {\r\n light.color = Cesium.Color.fromCssColorString(lighting.color);\r\n light.intensity = EnsureNumber(lighting.intensity);\r\n }\r\n\r\n let quality = bSettings?.quality;\r\n if (quality == null) {\r\n quality = defaults?.settings?.quality;\r\n }\r\n if (quality == null) {\r\n quality = {\r\n fxaa: true\r\n } as ProjectViewBookmark.V2.IQuality;\r\n }\r\n const fxaa = viewer.scene.postProcessStages.fxaa;\r\n fxaa.enabled = Boolean(quality.fxaa);\r\n\r\n let dateTime = bSettings?.dateTime;\r\n if (dateTime == null) {\r\n dateTime = defaults?.settings?.dateTime;\r\n }\r\n if (dateTime != null) {\r\n const clock = viewer.clock;\r\n clock.currentTime = Cesium.JulianDate.fromIso8601(dateTime);\r\n }\r\n\r\n const terrain = bSettings?.terrain ?? defaults.settings?.terrain;\r\n if (terrain) {\r\n await TileRenderEngine.Terrain.V2.Render({\r\n apiGetter: params.apiGetter,\r\n tile: terrain,\r\n viewer: params.manager.Viewer,\r\n });\r\n }\r\n\r\n let selectedIds = bSettings?.selectedEntityIds;\r\n if (selectedIds == null) {\r\n selectedIds = defaults?.settings?.selectedEntityIds;\r\n }\r\n if (selectedIds != null) {\r\n params.manager.VisualsRegister.ClearSelected();\r\n for (let i = 0; i < selectedIds.length; i++) {\r\n const id = selectedIds[i];\r\n params.manager.VisualsRegister.Select(id, false);\r\n }\r\n }\r\n\r\n let imagery = bSettings.imagery ?? defaults.settings?.imagery;\r\n if (imagery == null) {\r\n // TODO: Need global default.\r\n imagery = [\r\n {\r\n accountId: null,\r\n tilesetId: ProjectViewTile.EDefaultImagery.MapboxSatellite,\r\n alpha: 1,\r\n brightness: 1,\r\n contrast: 1,\r\n gamma: 1,\r\n hue: 0,\r\n saturation: 1\r\n }\r\n ];\r\n }\r\n await TileRenderEngine.Map.V2.Render({\r\n apiGetter: params.apiGetter,\r\n tiles: imagery,\r\n viewer: params.manager.Viewer,\r\n });\r\n\r\n // Only disable menu items we don't want.\r\n // Otherwise we cause a flicker of rendered graphics.\r\n // Maybe TODO to such a function for menu item manager.\r\n const curEnabled = params.manager.GetEnabledItemIds();\r\n const newItemIds = bSettings?.menuItemIds ?? [];\r\n for (const id of curEnabled) {\r\n if (newItemIds.indexOf(id) === -1) {\r\n await params.manager.RemoveItemById(id);\r\n }\r\n }\r\n if (params.bookmarkId) {\r\n await RenderHelper.RenderBookmarkItems({\r\n apiGetter: params.apiGetter,\r\n manager: params.manager,\r\n }, params.viewId, params.bookmarkId);\r\n }\r\n}\r\n\r\nexport namespace ViewRenderEngine {\r\n export interface IRenderParams {\r\n viewId: string;\r\n bookmarkId?: string;\r\n skipTransition: boolean;\r\n apiGetter: BruceApi.IGetter;\r\n manager: MenuItemManager.Manager;\r\n }\r\n\r\n export async function Render(params: IRenderParams): Promise<void> {\r\n const api = params.apiGetter.getApi();\r\n const view = await ProjectView.Get(api, params.viewId);\r\n let bookmark = <any>null;\r\n if (params.bookmarkId) {\r\n bookmark = await ProjectViewBookmark.Get(api, params.viewId, params.bookmarkId);\r\n }\r\n if (bookmark && view.DataVersion != bookmark.DataVersion) {\r\n throw new Error(\"View and bookmark settings version mismatch.\");\r\n }\r\n const version = view.DataVersion;\r\n if (version === 2) {\r\n await renderV2(params, bookmark as ProjectViewBookmark.V2.IBookmark, view as ProjectView.V2.IView);\r\n }\r\n else {\r\n await renderV1(params, bookmark as ProjectViewBookmark.V1.IBookmark, view as ProjectView.V1.IView);\r\n }\r\n }\r\n}","import { ProjectViewBookmark, ProjectViewTile } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { TileRenderEngine } from \"../rendering/tile-render-engine\";\r\n\r\nexport namespace ViewUtils {\r\n export function GatherLegacyMapTiles(viewer: Cesium.Viewer): ProjectViewBookmark.V1.IBookmarkImagery[] {\r\n const collection = viewer.imageryLayers;\r\n const tiles: ProjectViewBookmark.V1.IBookmarkImagery[] = [];\r\n for (let i = 0; i < collection.length; i++) {\r\n const layer = collection.get(i) as TileRenderEngine.Map.V1.ILayerExt;\r\n if (layer._bName) {\r\n tiles.push({\r\n alpha: layer.alpha,\r\n brightness: layer.brightness,\r\n contrast: layer.contrast,\r\n hue: layer.hue,\r\n saturation: layer.saturation,\r\n gamma: layer.gamma,\r\n title: layer._bName,\r\n });\r\n }\r\n }\r\n return tiles.reverse();\r\n }\r\n\r\n export function GatherLegacyTerrainTile(viewer: Cesium.Viewer): string {\r\n const enabled = viewer.terrainProvider as TileRenderEngine.Terrain.V1.IProviderExt;\r\n if (enabled?._bName) {\r\n return enabled._bName;\r\n }\r\n return \"flatterrain\";\r\n }\r\n\r\n export function GatherMapTiles(viewer: Cesium.Viewer): ProjectViewTile.IBookmarkImagery[] {\r\n const imagery = viewer.imageryLayers;\r\n const tiles: ProjectViewTile.IBookmarkImagery[] = [];\r\n for (let i = 0; i < imagery.length; i++) {\r\n const provider = imagery.get(i) as TileRenderEngine.Map.V2.IProviderExt;\r\n if (provider._bMeta) {\r\n const idCombo = provider._bMeta.accountId + provider._bMeta.tilesetId;\r\n if (!tiles.find(x => x.accountId + x.tilesetId === idCombo)) {\r\n tiles.push({\r\n accountId: provider._bMeta.accountId,\r\n tilesetId: provider._bMeta.tilesetId,\r\n alpha: provider.alpha,\r\n brightness: provider.brightness,\r\n contrast: provider.contrast,\r\n hue: provider.hue,\r\n saturation: provider.saturation,\r\n gamma: provider.gamma\r\n });\r\n }\r\n }\r\n }\r\n return tiles;\r\n }\r\n\r\n export function GatherTerrainTile(viewer: Cesium.Viewer): ProjectViewTile.IBookmarkTerrain {\r\n const provider = viewer.terrainProvider as TileRenderEngine.Terrain.V2.IProviderExt;\r\n if (provider._bMeta) {\r\n return {\r\n accountId: provider._bMeta.accountId,\r\n tilesetId: provider._bMeta.tilesetId,\r\n };\r\n }\r\n return null;\r\n }\r\n}"],"names":["Cesium.Cartesian2","Cesium.Cartographic","Cesium.Math","Cesium.Cartesian3","Cesium.EllipsoidGeodesic","Cesium.Color","Cesium.ColorMaterialProperty","Cesium.Entity","Cesium.Cesium3DTileFeature","Cesium.Rectangle","Cesium.Matrix3","Cesium.Matrix4","Cesium.EasingFunction","Cesium.GeometryInstance","Cesium.JulianDate","Cesium.Primitive","Cesium.HeightReference","Cesium.HorizontalOrigin","Cesium.VerticalOrigin","Cesium.ClassificationType","Cesium.ArcType","Cesium.PolygonHierarchy","Cesium.ShadowMode","Cesium.PolylineGraphics","Cesium.HeadingPitchRoll","Cesium.Transforms","Cesium.ColorBlendMode","Entity","colorToCColor","Cesium.Cesium3DTileset","Cesium.HeadingPitchRange","Cesium.createOsmBuildings","Cesium.Cesium3DTileStyle","Cesium.KmlDataSource","Cesium.createWorldTerrain","Cesium.EllipsoidTerrainProvider","Cesium.CesiumTerrainProvider","Cesium.BingMapsImageryProvider","Cesium.BingMapsStyle","Cesium.MapboxImageryProvider","Cesium.MapboxStyleImageryProvider","Cesium.ArcGisMapServerImageryProvider","Cesium.OpenStreetMapImageryProvider","Cesium.GridImageryProvider","Cesium.GeographicTilingScheme","Cesium.ImageryLayer","Cesium.UrlTemplateImageryProvider","Cesium.TileMapServiceImageryProvider","Cesium.IonImageryProvider","Cesium.OrthographicFrustum"],"mappings":"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"}
1
+ {"version":3,"file":"bruce-cesium.es5.js","sources":["../src/viewer/cesium-view-monitor.ts","../src/viewer/viewer-utils.ts","../src/utils/drawing-utils.ts","../src/utils/measure-utils.ts","../src/internal/js-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/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/menu-item-manager.ts","../src/rendering/render-helper.ts","../src/rendering/tile-render-engine.ts","../src/rendering/view-render-engine.ts","../src/utils/view-utils.ts"],"sourcesContent":["import { Bounds, BruceEvent, Carto, ViewMonitor } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\n\r\nconst TIME_LAG = 300;\r\nconst POSITION_CHECK_TIMER = 950;\r\nconst DEFAULT_GROUNDED_HEIGHT = 300;\r\nconst MINIMUM_VIEW_AREA_SIZE_DEGREES = 0.01;\r\nconst NET_STEP_PERCENT = 5;\r\nconst BORDER_STEPS = 3;\r\n\r\nenum ESearchStatus {\r\n LocationFound = 1,\r\n LocationChanged = 2,\r\n LocationMissing = 3\r\n}\r\n\r\nfunction netScanViewForBoundaries(viewer: Cesium.Viewer): Bounds.IReqBounds {\r\n let maxLong = - 2 * Math.PI;\r\n let minLong = 2 * Math.PI;\r\n let maxLat = -2 * Math.PI;\r\n let minLat = 2 * Math.PI;\r\n let found = 0;\r\n\r\n const updateMinMaxForPoint = (stepX: number, stepY: number) => {\r\n const x = Math.round(0 + (viewer.container.clientWidth / 100) * (stepX * NET_STEP_PERCENT));\r\n const y = Math.round(0 + (viewer.container.clientHeight / 100) * (stepY * NET_STEP_PERCENT));\r\n const winPos = new Cesium.Cartesian2(x, y);\r\n try {\r\n let intersection = getAdjustedGroundIntersectionOfCameraRay(viewer, winPos);\r\n if (intersection) {\r\n let point = (<any> Cesium.Cartographic).fromCartesian(intersection, viewer.scene.globe.ellipsoid);\r\n maxLong = Math.max(maxLong, point.longitude);\r\n maxLat = Math.max(maxLat, point.latitude);\r\n minLong = Math.min(minLong, point.longitude);\r\n minLat = Math.min(minLat, point.latitude);\r\n found++;\r\n }\r\n }\r\n catch {\r\n\r\n }\r\n };\r\n\r\n // Outer circle.\r\n updateMinMaxForPoint(BORDER_STEPS, BORDER_STEPS);\r\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS, BORDER_STEPS);\r\n updateMinMaxForPoint(BORDER_STEPS, (100 / NET_STEP_PERCENT) - BORDER_STEPS);\r\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS, (100 / NET_STEP_PERCENT) - BORDER_STEPS);\r\n\r\n // Inner circle.\r\n updateMinMaxForPoint(BORDER_STEPS * 2, BORDER_STEPS * 2);\r\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS * 2, BORDER_STEPS * 2);\r\n updateMinMaxForPoint(BORDER_STEPS * 2, (100 / NET_STEP_PERCENT) - BORDER_STEPS * 2);\r\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS * 2, (100 / NET_STEP_PERCENT) - BORDER_STEPS * 2);\r\n\r\n if (found > 0) {\r\n const viewRect: Bounds.IReqBounds = {\r\n east: maxLong,\r\n west: minLong,\r\n north: maxLat,\r\n south: minLat\r\n };\r\n return viewRect;\r\n }\r\n return <any>null;\r\n}\r\n\r\nfunction getAdjustedGroundIntersectionOfCameraRay(viewer: Cesium.Viewer, screenPos: Cesium.Cartesian2): Cesium.Cartesian3 {\r\n const ray = viewer.camera.getPickRay(screenPos);\r\n const intersection = ray ? viewer.scene.globe.pick(ray, viewer.scene) : null;\r\n if (intersection) {\r\n return intersection;\r\n }\r\n return <any>null;\r\n}\r\n\r\nfunction areBoundsEqual(a: Bounds.IReqBounds, b: Bounds.IReqBounds): boolean {\r\n return a.north == b.north && a.south == b.south && a.east == b.east && a.west == b.west;\r\n}\r\n\r\nfunction arePosEqual(a: Carto.ICarto, b: Carto.ICarto): boolean {\r\n return a.latitude == b.latitude && a.longitude == b.longitude;\r\n}\r\n\r\n/**\r\n * Monitors and emits events when the Cesium view changes.\r\n */\r\nexport class CesiumViewMonitor implements ViewMonitor.IMonitor {\r\n private viewer: Cesium.Viewer;\r\n private pendingTimeout: any;\r\n private checkInterval: any;\r\n private target: Carto.ICarto = <any>null;\r\n private bounds: Bounds.IReqBounds = <any>null;\r\n private disposed: boolean = false;\r\n private updatedEvent: BruceEvent<ViewMonitor.IArea> = <any>null;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n\r\n\r\n public constructor(viewer: Cesium.Viewer) {\r\n this.viewer = viewer;\r\n this.tryEmitUpdate();\r\n this.checkInterval = setInterval(() => {\r\n this.updateQueue();\r\n },\r\n POSITION_CHECK_TIMER);\r\n }\r\n\r\n public Updated(): BruceEvent<ViewMonitor.IArea> {\r\n if (!this.updatedEvent) {\r\n this.updatedEvent = new BruceEvent();\r\n }\r\n return this.updatedEvent;\r\n }\r\n\r\n public GetBounds(): Bounds.IReqBounds {\r\n return this.bounds;\r\n }\r\n\r\n public GetTarget(): Carto.ICarto {\r\n return this.target;\r\n }\r\n\r\n public DoUpdate(): void {\r\n this.tryEmitUpdate();\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.disposed = true;\r\n clearInterval(this.checkInterval);\r\n }\r\n\r\n private tryDoUpdate(): ESearchStatus {\r\n if (!this.viewer || this.viewer.isDestroyed()) {\r\n this.Dispose();\r\n return ESearchStatus.LocationMissing;\r\n }\r\n\r\n let viewRect: Bounds.IReqBounds = <any>null;\r\n let center: Carto.ICarto = <any>null;\r\n\r\n const camera = this.viewer.camera;\r\n const terrainHeight = this.viewer.scene.globe.getHeight(camera.positionCartographic);\r\n const cameraPosition = this.viewer.camera.positionCartographic;\r\n\r\n // We are almost at the ground, screw horizon, just load around.\r\n if (terrainHeight && ((cameraPosition.height - terrainHeight) < DEFAULT_GROUNDED_HEIGHT)) {\r\n\r\n // View area calculation.\r\n viewRect = <any>{};\r\n const viewRectRad: Bounds.IReqBounds = netScanViewForBoundaries(this.viewer);\r\n if\r\n (\r\n viewRectRad &&\r\n viewRectRad.east &&\r\n viewRectRad.west &&\r\n viewRectRad.north &&\r\n viewRectRad.south\r\n ) {\r\n viewRect.east = Cesium.Math.toDegrees(Math.max(viewRectRad.east, cameraPosition.longitude));\r\n viewRect.west = Cesium.Math.toDegrees(Math.min(viewRectRad.west, cameraPosition.longitude));\r\n viewRect.south = Cesium.Math.toDegrees(Math.min(viewRectRad.south, cameraPosition.latitude));\r\n viewRect.north = Cesium.Math.toDegrees(Math.max(viewRectRad.north, cameraPosition.latitude));\r\n }\r\n else {\r\n viewRect.east = cameraPosition.longitude;\r\n viewRect.west = cameraPosition.longitude;\r\n viewRect.south = cameraPosition.latitude;\r\n viewRect.north = cameraPosition.latitude;\r\n }\r\n center = <any>{};\r\n center.latitude = Cesium.Math.toDegrees(camera.positionCartographic.latitude);\r\n center.longitude = Cesium.Math.toDegrees(camera.positionCartographic.longitude);\r\n }\r\n else {\r\n // View area calculation.\r\n const windowPosition = new Cesium.Cartesian2(\r\n this.viewer.container.clientWidth / 2,\r\n this.viewer.container.clientHeight / 2\r\n );\r\n const intersection = getAdjustedGroundIntersectionOfCameraRay(this.viewer, windowPosition);\r\n\r\n let point = null;\r\n if (intersection) {\r\n point = (<any> Cesium.Cartographic).fromCartesian(intersection, this.viewer.scene.globe.ellipsoid);\r\n }\r\n if (point) {\r\n center = <any>{};\r\n center.latitude = Cesium.Math.toDegrees(point.latitude);\r\n center.longitude = Cesium.Math.toDegrees(point.longitude);\r\n\r\n let viewRectRad: Bounds.IReqBounds = netScanViewForBoundaries(this.viewer);\r\n if (viewRectRad) {\r\n viewRect = <any>{};\r\n viewRect.east = Cesium.Math.toDegrees(viewRectRad.east);\r\n viewRect.west = Cesium.Math.toDegrees(viewRectRad.west);\r\n viewRect.south = Cesium.Math.toDegrees(viewRectRad.south);\r\n viewRect.north = Cesium.Math.toDegrees(viewRectRad.north);\r\n }\r\n }\r\n }\r\n\r\n // Minimal field of view.\r\n if (viewRect) {\r\n const centerLong = (viewRect.east + viewRect.west) / 2;\r\n const centerLat = (viewRect.north + viewRect.south) / 2;\r\n viewRect.east = Math.max(viewRect.east, centerLong + (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\r\n viewRect.west = Math.min(viewRect.west, centerLong - (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\r\n viewRect.south = Math.min(viewRect.south, centerLat - (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\r\n viewRect.north = Math.max(viewRect.north, centerLat + (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\r\n viewRect.alt = this.viewer.scene.camera.positionCartographic?.height;\r\n }\r\n\r\n if (center && viewRect) {\r\n if (\r\n (!this.target || (this.target && !arePosEqual(this.target, center))) ||\r\n (!this.bounds || (this.bounds && !areBoundsEqual(this.bounds, viewRect)))\r\n ) {\r\n this.target = center;\r\n this.bounds = viewRect;\r\n return ESearchStatus.LocationChanged;\r\n }\r\n return ESearchStatus.LocationFound;\r\n }\r\n return ESearchStatus.LocationMissing;\r\n }\r\n\r\n private tryEmitUpdate() {\r\n const searchResult = this.tryDoUpdate();\r\n if (searchResult == ESearchStatus.LocationChanged) {\r\n const interest: ViewMonitor.IArea = {\r\n \tbounds: this.bounds,\r\n \ttarget: this.target\r\n };\r\n this.updatedEvent?.Trigger(interest);\r\n }\r\n else if (searchResult == ESearchStatus.LocationMissing) {\r\n this.updateQueue();\r\n }\r\n }\r\n\r\n private queuePosition(lag: number) {\r\n if (this.pendingTimeout) {\r\n clearTimeout(this.pendingTimeout);\r\n }\r\n this.pendingTimeout = setTimeout(() => {\r\n if (!this.disposed) {\r\n this.tryEmitUpdate();\r\n }\r\n }, lag);\r\n }\r\n\r\n private updateQueue() {\r\n this.queuePosition(TIME_LAG);\r\n }\r\n}","import * as Cesium from \"cesium\";\r\n\r\ninterface IWidget {\r\n isDestroyed: () => boolean;\r\n destroy: () => void;\r\n}\r\n\r\nexport namespace ViewerUtils {\r\n /**\r\n * Destroys all the junk that cesium viewer ships with.\r\n * @param viewer \r\n */\r\n export function InitViewer(viewer: Cesium.Viewer) {\r\n ViewerUtils.DestroyWidget(viewer.timeline);\r\n ViewerUtils.DestroyWidget(viewer.vrButton);\r\n ViewerUtils.DestroyWidget(viewer.sceneModePicker);\r\n ViewerUtils.DestroyWidget(viewer.homeButton);\r\n ViewerUtils.DestroyWidget(viewer.fullscreenButton);\r\n ViewerUtils.DestroyWidget(viewer.baseLayerPicker);\r\n ViewerUtils.StyleContainer(viewer);\r\n }\r\n\r\n export function DestroyWidget(widget: IWidget): void {\r\n if (widget && !widget.isDestroyed()) {\r\n widget.destroy();\r\n }\r\n }\r\n\r\n /**\r\n * Hides all unnecessary elements from the Cesium viewer container.\r\n * @param viewer \r\n */\r\n export function StyleContainer(viewer: Cesium.Viewer) {\r\n const container = viewer.container;\r\n const genContainer = container.getElementsByClassName(\"cesium-viewer\")?.[0];\r\n if (genContainer) {\r\n const children = genContainer.children;\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i] as HTMLElement;\r\n if (!child.classList.contains(\"cesium-viewer-cesiumWidgetContainer\")) {\r\n child.style.display = \"none\";\r\n }\r\n }\r\n }\r\n\r\n const canvas = viewer.canvas as HTMLElement;\r\n canvas.style.width = \"100%\";\r\n canvas.style.height = \"100%\";\r\n\r\n const widget = canvas.parentElement as HTMLElement;\r\n widget.style.width = \"100%\";\r\n widget.style.height = \"100%\";\r\n widget.style.touchAction = \"none\";\r\n\r\n const widgetContainer = widget.parentElement as HTMLElement;\r\n widgetContainer.style.width = \"100%\";\r\n widgetContainer.style.height = \"100%\";\r\n\r\n const viewerContainer = widgetContainer.parentElement as HTMLElement;\r\n viewerContainer.style.fontFamily = \"sans-serif\";\r\n viewerContainer.style.fontSize = \"16px\";\r\n viewerContainer.style.overflow = \"hidden\";\r\n viewerContainer.style.display = \"block\";\r\n viewerContainer.style.position = \"relative\";\r\n viewerContainer.style.top = \"0\";\r\n viewerContainer.style.left = \"0\";\r\n viewerContainer.style.width = \"100%\";\r\n viewerContainer.style.height = \"100%\";\r\n }\r\n}","import * as Cesium from \"cesium\";\r\n\r\nexport namespace DrawingUtils {\r\n /**\r\n * Returns the point across a polyline at a given distance.\r\n * If the distance exceeds the length of the line, the point will be placed at the end of the line.\r\n * @param viewer \r\n * @param positions \r\n * @param distance \r\n * @returns \r\n */\r\n export function PointAcrossPolyline(viewer: Cesium.Viewer, positions: Cesium.Cartesian3[], distance: number): Cesium.Cartesian3 {\r\n if (positions.length > 1) {\r\n let currentDistance = 0;\r\n for (let i = 0; i < positions.length - 1; i++) {\r\n const length = Cesium.Cartesian3.distance(positions[i], positions[i + 1]);\r\n if (length + currentDistance >= distance) {\r\n const carto1 = Cesium.Cartographic.fromCartesian(positions[i]);\r\n const carto2 = Cesium.Cartographic.fromCartesian(positions[i + 1]);\r\n const geodesic = new Cesium.EllipsoidGeodesic(carto1, carto2, viewer.scene.globe.ellipsoid);\r\n const position = geodesic.interpolateUsingSurfaceDistance(distance - currentDistance);\r\n const height = (carto1.height + carto2.height) / 2;\r\n return Cesium.Cartesian3.fromRadians(position.longitude, position.latitude, height);\r\n }\r\n else {\r\n currentDistance += length;\r\n }\r\n }\r\n }\r\n else if (positions.length > 0) {\r\n return positions[0];\r\n }\r\n else {\r\n return <any>null;\r\n }\r\n return positions[positions.length - 1];\r\n }\r\n}","import * as Cesium from \"cesium\";\r\n\r\nexport namespace MeasureUtils {\r\n /**\r\n * Returns the total distance in meters between an array of points.\r\n * This distance is NOT following the terrain.\r\n * @param posses \r\n * @returns \r\n */\r\n export function MeasurePolyline(posses: Cesium.Cartesian3[]): number {\r\n if (posses.length < 2) {\r\n return 0;\r\n }\r\n let totalLength = 0;\r\n let pos1 = null;\r\n let pos2 = null;\r\n for (let i = 0; i < posses.length; i++) {\r\n if (pos1 == null) {\r\n pos1 = posses[i];\r\n }\r\n else if (pos2 == null) {\r\n pos2 = posses[i];\r\n totalLength += Cesium.Cartesian3.distance(pos1, pos2);\r\n pos1 = pos2;\r\n pos2 = null;\r\n }\r\n }\r\n return totalLength;\r\n }\r\n}","/**\r\n * Ensures a number is returned from a given value.\r\n * If given value cannot be parsed it will return defaultNum.\r\n * @param value \r\n * @param defaultNum default is 0.\r\n * @returns \r\n */\r\nexport function EnsureNumber(value: any, defaultNum?: number): number {\r\n if (!defaultNum) {\r\n defaultNum = 0;\r\n }\r\n value = Number(value);\r\n if (isNaN(value)) {\r\n return defaultNum;\r\n }\r\n return value;\r\n}","import { Cartes, Carto, Entity as E, Geometry } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { VisualsRegister } from \"src/bruce-cesium\";\r\nimport { EntityRenderEngine } from \"../rendering/entity-render-engine\";\r\nimport { DrawingUtils } from \"./drawing-utils\";\r\nimport { MeasureUtils } from \"./measure-utils\";\r\nimport { EnsureNumber } from \"../internal/js-utils\";\r\n\r\nfunction traverseEntity(cEntity: EntityRenderEngine.ICesiumEntityExt, arr: EntityRenderEngine.ICesiumEntityExt[]): void {\r\n if (cEntity._parentEntity) {\r\n traverseEntity(cEntity._parentEntity, arr);\r\n }\r\n if (cEntity._siblingGraphics) {\r\n for (let i = 0; i < cEntity._siblingGraphics.length; i++) {\r\n const sibling = cEntity._siblingGraphics[i];\r\n traverseEntity(sibling, arr);\r\n }\r\n }\r\n arr.push(cEntity);\r\n}\r\n\r\nconst ORG_OPACITY_KEY = \"_org_opacity_\";\r\nconst NEW_OPACITY_KEY = \"_new_opacity_\";\r\n\r\nfunction getColor(viewer: Cesium.Viewer, material: Cesium.Property | Cesium.ColorMaterialProperty) {\r\n function findColor() {\r\n if (!material) {\r\n return Cesium.Color.WHITE;\r\n }\r\n if (material.getValue) {\r\n material = material.getValue(viewer.scene.lastRenderTime);\r\n }\r\n if (material instanceof Cesium.Color) {\r\n return material;\r\n }\r\n let tmp = (material as any)?.color;\r\n if (tmp?.getValue) {\r\n tmp = tmp.getValue(viewer.scene.lastRenderTime);\r\n }\r\n return tmp ? tmp : Cesium.Color.WHITE;\r\n }\r\n return findColor()?.clone?.();\r\n}\r\n\r\nfunction applyOpacityToColor(viewer: Cesium.Viewer, opacity: number, material: Cesium.Property | Cesium.ColorMaterialProperty) {\r\n const color = getColor(viewer, material);\r\n if (color) {\r\n color.alpha = opacity;\r\n }\r\n return color;\r\n}\r\n\r\nfunction applyOpacityToGraphic(viewer: Cesium.Viewer, entity: Cesium.Entity, graphicKey: string, materialKey: string, opacity: number) {\r\n const color = applyOpacityToColor(viewer, opacity, entity[graphicKey][materialKey]);\r\n if (color) {\r\n entity[graphicKey][materialKey] = materialKey == \"material\" ? new Cesium.ColorMaterialProperty(color) : color;\r\n }\r\n}\r\n\r\nfunction revertAppliedEntityOpacity(viewer: Cesium.Viewer, entity: VisualsRegister.Visual) {\r\n entity[NEW_OPACITY_KEY] = null;\r\n if (entity instanceof Cesium.Entity) {\r\n const processKey = (graphicKey: string, materialKey: string = \"material\") => {\r\n if (entity[graphicKey]) {\r\n const orgOpacity = entity[graphicKey][ORG_OPACITY_KEY];\r\n if (orgOpacity != null) {\r\n applyOpacityToGraphic(viewer, entity, graphicKey, materialKey, orgOpacity);\r\n }\r\n entity[graphicKey][ORG_OPACITY_KEY] = null;\r\n }\r\n }\r\n processKey(\"polygon\");\r\n processKey(\"polyline\");\r\n processKey(\"point\", \"color\");\r\n processKey(\"ellipse\");\r\n processKey(\"model\", \"color\");\r\n }\r\n else if (entity instanceof Cesium.Cesium3DTileFeature) {\r\n const orgOpacity = entity[ORG_OPACITY_KEY];\r\n if (orgOpacity != null) {\r\n const color = entity.color ? entity.color.clone() : new Cesium.Color();\r\n color.alpha = orgOpacity;\r\n entity.color = color;\r\n }\r\n entity[ORG_OPACITY_KEY] = null;\r\n }\r\n}\r\n\r\nfunction applyOpacityToEntity(viewer: Cesium.Viewer, opacity: number, entity: VisualsRegister.Visual) {\r\n entity[NEW_OPACITY_KEY] = opacity;\r\n if (entity instanceof Cesium.Entity) {\r\n const processKey = (graphicKey: string, materialKey: string = \"material\") => {\r\n if (entity[graphicKey]) {\r\n let orgOpacity = entity[graphicKey][ORG_OPACITY_KEY];\r\n if (orgOpacity == null) {\r\n entity[graphicKey][ORG_OPACITY_KEY] = getColor(viewer, entity[graphicKey][materialKey])?.alpha;\r\n }\r\n if (orgOpacity == null) {\r\n orgOpacity = 1;\r\n }\r\n applyOpacityToGraphic(viewer, entity, graphicKey, materialKey, opacity * orgOpacity);\r\n }\r\n }\r\n processKey(\"polygon\");\r\n processKey(\"polyline\");\r\n processKey(\"point\", \"color\");\r\n processKey(\"ellipse\");\r\n processKey(\"model\", \"color\");\r\n }\r\n else if (entity instanceof Cesium.Cesium3DTileFeature) {\r\n let orgOpacity = entity[ORG_OPACITY_KEY];\r\n if (orgOpacity == null) {\r\n entity[ORG_OPACITY_KEY] = entity.color ? entity.color.alpha : 1;\r\n }\r\n if (!orgOpacity) {\r\n orgOpacity = 1;\r\n }\r\n const color = entity.color ? entity.color.clone() : new Cesium.Color();\r\n color.alpha = opacity * orgOpacity;\r\n if (color.equals(Cesium.Color.WHITE)) {\r\n color.blue = 0.0001;\r\n }\r\n entity.color = color;\r\n }\r\n}\r\n\r\nfunction findOpacity(entity: VisualsRegister.Visual) {\r\n return entity[NEW_OPACITY_KEY];\r\n}\r\n\r\nexport namespace EntityUtils {\r\n /**\r\n * Returns an entity's position.\r\n * This will attempt to calculate it from multiple sources of data.\r\n * @param viewer \r\n * @param entity \r\n * @returns \r\n */\r\n export function GetPos(viewer: Cesium.Viewer, entity: E.IEntity): Cesium.Cartesian3 {\r\n function evaluate() {\r\n if (entity.location && Carto.ValidateCarto(entity.location)) {\r\n const location = entity.location;\r\n return Cesium.Cartesian3.fromDegrees(EnsureNumber(location.longitude), EnsureNumber(location.latitude), EnsureNumber(location.altitude));\r\n }\r\n if (entity.geometry && typeof entity.geometry == \"object\") {\r\n const pointStr = entity.geometry.Point;\r\n if (pointStr && typeof pointStr == \"string\") {\r\n const points = Geometry.ParsePoints(pointStr);\r\n const point = points.length > 0 ? points[0] : null;\r\n if (point && Carto.ValidateCarto(point)) {\r\n return Cesium.Cartesian3.fromDegrees(EnsureNumber(point.longitude), EnsureNumber(point.latitude), EnsureNumber(point.altitude));\r\n }\r\n }\r\n const lineStr = entity.geometry.LineString;\r\n if (lineStr && typeof lineStr == \"string\") {\r\n const points = Geometry.ParsePoints(lineStr);\r\n if (points.length > 0) {\r\n const posses = points.map(x => Cesium.Cartesian3.fromDegrees(EnsureNumber(x.longitude), EnsureNumber(x.latitude), EnsureNumber(x.altitude)));\r\n const length = MeasureUtils.MeasurePolyline(posses);\r\n if (length > 0) {\r\n const point = DrawingUtils.PointAcrossPolyline(viewer, posses, length / 2);\r\n if (point && Cartes.ValidateCartes3(point)) {\r\n return point;\r\n }\r\n }\r\n else {\r\n return posses[0];\r\n }\r\n }\r\n }\r\n const pRings = entity.geometry.Polygon;\r\n if (pRings && typeof pRings == \"object\") {\r\n const boundary = pRings.find(x => x.Facing == Geometry.EPolygonRingType.Boundaries)\r\n if (boundary?.LinearRing) {\r\n const points = Geometry.ParsePoints(boundary.LinearRing);\r\n const point = Carto.GetCenter(points);\r\n if (point && Carto.ValidateCarto(point)) {\r\n return Cesium.Cartesian3.fromDegrees(EnsureNumber(point.longitude), EnsureNumber(point.latitude), EnsureNumber(point.altitude));\r\n }\r\n }\r\n }\r\n }\r\n if (entity.boundaries) {\r\n const point: Carto.ICarto = {\r\n latitude: (EnsureNumber(entity.boundaries.minLatitude) + EnsureNumber(entity.boundaries.maxLatitude)) / 2, \r\n longitude: (EnsureNumber(entity.boundaries.minLongitude) + EnsureNumber(entity.boundaries.maxLongitude)) / 2, \r\n altitude: 0\r\n };\r\n if (point && Carto.ValidateCarto(point)) {\r\n return Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\r\n }\r\n }\r\n }\r\n const pos3d = evaluate();\r\n return Cartes.ValidateCartes3(pos3d) ? pos3d : null;\r\n }\r\n\r\n /**\r\n * Returns entity and any associated parent/sibling entities as a flat array.\r\n * @param entity \r\n */\r\n export function GatherEntity(entity: Cesium.Entity): Cesium.Entity[] {\r\n if (entity instanceof Cesium.Entity) {\r\n const cEntity = entity as EntityRenderEngine.ICesiumEntityExt;\r\n const items: EntityRenderEngine.ICesiumEntityExt[] = [];\r\n traverseEntity(cEntity, items);\r\n return items;\r\n }\r\n return [entity];\r\n }\r\n\r\n /**\r\n * Looks at given entities with least amount of movement.\r\n * @param viewer \r\n * @param entities \r\n */\r\n export function LookAtEntities(viewer: Cesium.Viewer, entities: VisualsRegister.Visual[]) {\r\n const [ R, CT, C3, M3, M4, E ] = [ Cesium.Rectangle, Cesium.Cartographic, Cesium.Cartesian3, Cesium.Matrix3, Cesium.Matrix4, Cesium.EasingFunction ];\r\n const cutoffDistance = 2000;\r\n const hoverHeight = 2000;\r\n const duration = 0.5;\r\n\r\n const centers = (p: Cesium.Primitive): [Cesium.Cartesian3, number][] => {\r\n const PM = p.modelMatrix;\r\n const instances = ((i) => (i instanceof Cesium.GeometryInstance ? [i] : i))(p.geometryInstances);\r\n return instances.map((g) => {\r\n const _M = M4.multiply(PM, g.modelMatrix, new M4);\r\n const G = g.geometry;\r\n const _p = G.attributes.position;\r\n const b = G.boundingSphere;\r\n return [ b.center, b.radius ];\r\n });\r\n };\r\n\r\n const currentTime = Cesium.JulianDate.now();\r\n const target: [Cesium.Cartesian3, number][] = entities.flatMap((e) => {\r\n if (e instanceof Cesium.Cartesian3) {\r\n return [[ e, 0 ]];\r\n }\r\n if (e instanceof Cesium.Entity) {\r\n return [[ e.position?.getValue(currentTime)!, 0 ]];\r\n }\r\n if (e instanceof Cesium.Primitive) {\r\n return centers(e);\r\n }\r\n if (e instanceof Cesium.Cesium3DTileFeature) {\r\n const s = e.tileset.boundingSphere;\r\n return [[ s.center, s.radius ]];\r\n }\r\n });\r\n\r\n const bounds = (list: [Cesium.Cartesian3, number][]) => {\r\n let min = list[0][0];\r\n let max = min;\r\n for (const [ p, r ] of list) {\r\n const pMin = C3.subtract(p, new C3(r), new C3);\r\n const pMax = C3.add(p, new C3(r), new C3);\r\n min = C3.minimumByComponent(pMin, min, new C3);\r\n max = C3.maximumByComponent(pMax, max, new C3);\r\n }\r\n const c = C3.multiplyByScalar(C3.add(max, min, new C3), 0.5, new C3);\r\n\r\n return c;\r\n };\r\n\r\n const center = bounds(target);\r\n\r\n const orient = (p) => {\r\n const d = C3.subtract(center, p, new C3);\r\n const dir = C3.normalize(d, new C3);\r\n const up = viewer.scene.globe.ellipsoid.geodeticSurfaceNormal(center);\r\n return [ p, dir, up ];\r\n };\r\n\r\n const shorten = (v, l) => {\r\n const c = l / C3.magnitude(v);\r\n return C3.multiplyByScalar(v, c, new C3);\r\n };\r\n\r\n const camera = viewer.camera;\r\n const [ p, direction, up ] = orient(camera.position);\r\n const orientation = { direction, up };\r\n camera.flyTo({\r\n destination: p,\r\n orientation,\r\n duration,\r\n complete: () => {\r\n if (C3.distance(p, center) > cutoffDistance) {\r\n let d = C3.subtract(p, center, new C3);\r\n d = shorten(d, cutoffDistance);\r\n const h = C3.multiplyByScalar(C3.normalize(up, new C3), hoverHeight, new C3);\r\n d = C3.add(d, h, new C3);\r\n d = shorten(d, cutoffDistance);\r\n d = C3.add(d, center, new C3);\r\n\r\n const [ _p, direction, u ] = orient(d);\r\n camera.flyTo({\r\n destination: d,\r\n orientation: { direction, up: u }\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Sets opacity of given entity.\r\n * Opacity will be multiplied by original opacity.\r\n * Setting opacity puts original opacity into a temporary storage which can be reverted into.\r\n * @param viewer \r\n * @param entity \r\n * @param opacity \r\n */\r\n export function SetOpacity(viewer: Cesium.Viewer, entity: VisualsRegister.Visual, opacity: number) {\r\n applyOpacityToEntity(viewer, opacity, entity);\r\n }\r\n\r\n /**\r\n * Reverts opacity of given entity to original opacity.\r\n * If opacity was not updated using \"SetOpacity\" then nothing will happen.\r\n * @param viewer \r\n * @param entity \r\n */\r\n export function RevertOpacity(viewer: Cesium.Viewer, entity: VisualsRegister.Visual) {\r\n revertAppliedEntityOpacity(viewer, entity);\r\n }\r\n\r\n /**\r\n * Gets opacity of the entity.\r\n * This does not count opacity that it was rendered with.\r\n * This is the opacity that was set post-rendering.\r\n * @param viewer \r\n * @param entity \r\n */\r\n export function GetOpacity(entity: VisualsRegister.Visual) {\r\n return findOpacity(entity);\r\n }\r\n}","import { EntitiesRenderManager } from \"./entities/entities-render-manager\";\r\nimport { EntitiesLoadedRenderManager } from \"./entities/entities-loaded-render-manager\";\r\nimport { EntitiesIdsRenderManager } from \"./entities/entities-ids-render-manager\";\r\nimport { EntityRenderManager } from \"./entities/entity-render-manager\";\r\nimport { EntityUtils } from \"../../utils/entity-utils\";\r\nimport { Cartes, Entity, ZoomControl } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { TilesetCadRenderManager } from \"./tilesets/tileset-cad-render-manager\";\r\nimport { TilesetOsmRenderManager } from \"./tilesets/tileset-osm-render-manager\";\r\nimport { TilesetEntitiesRenderManager } from \"./tilesets/tileset-entities-render-manager\";\r\nimport { TilesetPointcloudRenderManager } from \"./tilesets/tileset-pointcloud-render-manager\";\r\nimport { DataSourceStaticKmlManager } from \"./data-source/data-source-static-kml-manager\";\r\nimport { EnsureNumber } from \"../../internal/js-utils\";\r\n\r\nexport namespace RenderManager {\r\n export interface IManager {\r\n Init(): Promise<void>;\r\n Dispose(): void;\r\n Disposed: boolean;\r\n }\r\n\r\n export type Type = EntitiesRenderManager.Manager | \r\n EntitiesLoadedRenderManager.Manager | \r\n EntitiesIdsRenderManager.Manager | \r\n EntityRenderManager.Manager |\r\n TilesetCadRenderManager.Manager |\r\n TilesetOsmRenderManager.Manager | \r\n TilesetEntitiesRenderManager.Manager |\r\n TilesetPointcloudRenderManager.Manager |\r\n DataSourceStaticKmlManager.Manager;\r\n\r\n export namespace Utils {\r\n export function DetermineZoomItem(viewer: Cesium.Viewer, entity: Entity.IEntity, zoomControl: ZoomControl.IItem[]): ZoomControl.IItem {\r\n const pos = EntityUtils.GetPos(viewer, entity);\r\n if (!pos) {\r\n return null;\r\n }\r\n const cameraPos = viewer.camera.position;\r\n if (!Cartes.ValidateCartes3(cameraPos)) {\r\n return null;\r\n }\r\n const distance = Cesium.Cartesian3.distance(pos, cameraPos);\r\n return (!distance && distance != 0) ? null : GetZoomControlFromDistance(zoomControl, distance);\r\n }\r\n \r\n export function GetZoomControlFromDistance(zoomControl: ZoomControl.IItem[], distance: number): ZoomControl.IItem {\r\n for (let i = 0; i < zoomControl.length; i++) {\r\n let zoomItem = zoomControl[i];\r\n if ((distance >= EnsureNumber(zoomItem.MinZoom)) && (distance <= EnsureNumber(zoomItem.MaxZoom))) {\r\n return zoomItem;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n export function GetZoomMinMax(zoomControl: ZoomControl.IItem[]): number[] {\r\n let min = 0;\r\n let max = 100;\r\n for (let i = 0; i < zoomControl.length; i++) {\r\n const zoomItem = zoomControl[i];\r\n zoomItem.MinZoom = EnsureNumber(zoomItem.MinZoom);\r\n zoomItem.MaxZoom = EnsureNumber(zoomItem.MaxZoom);\r\n if (zoomItem.MinZoom != null) {\r\n if (zoomItem.MinZoom < min) {\r\n min = zoomItem.MinZoom;\r\n }\r\n }\r\n if (zoomItem.MaxZoom != null) {\r\n if (zoomItem.MaxZoom > max) {\r\n max = zoomItem.MaxZoom;\r\n }\r\n }\r\n }\r\n return [min, max];\r\n }\r\n }\r\n}","import * as Cesium from \"cesium\";\r\nimport { Entity, BruceApi, ZoomControl, Style, EntityTag, Calculator, Color, Geometry, Carto, EntityLod, EntityType, IDictionary, ClientFile } from \"bruce-models\";\r\nimport { EntityUtils } from \"../utils/entity-utils\";\r\nimport { RenderManager } from \"./render-managers/render-manager\";\r\nimport { VisualsRegister } from \"./visuals-register\";\r\nimport { EnsureNumber } from \"../internal/js-utils\";\r\n\r\nfunction colorToCColor(color: Color.IColor): Cesium.Color {\r\n return new Cesium.Color(\r\n color.red ? color.red/255 : 0, \r\n color.green ? color.green/255 : 0, \r\n color.blue ? color.blue/255 : 0, \r\n color.alpha\r\n );\r\n}\r\n\r\nfunction getPolygonStyleExtrusion(pStyle: any, entity: Entity.IEntity, tags: EntityTag.ITag[], heightRef: Cesium.HeightReference): number {\r\n const attrPath = pStyle.extrusionPath;\r\n if (!pStyle.useExtrusion || !attrPath) {\r\n return <any>null;\r\n }\r\n try {\r\n const extrusion = +Calculator.GetValue(attrPath, entity, tags);\r\n if (!extrusion && extrusion != 0) {\r\n return <any>null;\r\n }\r\n /* \r\n Cesium extrudes in strange way.\r\n If you want something that is 50 meters above sea, and 5 meters tall,\r\n You need to extrude by 55 meters, if you extrude by 5 it will extrude from sea and look flat.\r\n */\r\n const height = <number>entity.location?.altitude;\r\n return heightRef == Cesium.HeightReference.RELATIVE_TO_GROUND ? extrusion + height : extrusion;\r\n } \r\n catch (e) {\r\n console.error(e);\r\n }\r\n return 0;\r\n}\r\n\r\ninterface IExtrusionData {\r\n value: number;\r\n exHeightRef: Cesium.HeightReference;\r\n posses: Cesium.Cartesian3[];\r\n}\r\n\r\nfunction getPolygonExtrusion(\r\n entity: Entity.IEntity, \r\n tags: EntityTag.ITag[], \r\n ring: Geometry.IPolygonRing,\r\n posses: Cesium.Cartesian3[], \r\n heightRef: Cesium.HeightReference, \r\n pStyle: any\r\n): IExtrusionData {\r\n const data: IExtrusionData = {\r\n value: <any>undefined,\r\n exHeightRef: Cesium.HeightReference.RELATIVE_TO_GROUND,\r\n posses: <any>null\r\n }\r\n\r\n // Step 1. Try get using style.\r\n const extrusion = getPolygonStyleExtrusion(pStyle, entity, tags, heightRef);\r\n if (extrusion) {\r\n if (heightRef == Cesium.HeightReference.NONE) {\r\n // Let's normalize all point heights to be the same (at entity altitude).\r\n // This let's us have a consistent extrusion height, and be adjustable easier by user.\r\n let alt = <number>entity?.location?.altitude;\r\n if (!alt) {\r\n alt = 0;\r\n }\r\n\r\n const points = posses.map(x => Cesium.Cartographic.fromCartesian(x));\r\n points.forEach((point) => {\r\n point.height = alt;\r\n });\r\n posses = points.map(x => Cesium.Cartesian3.fromRadians(EnsureNumber(x.longitude), EnsureNumber(x.latitude), EnsureNumber(x.height)));\r\n }\r\n }\r\n // Step 2. Try get using geometry data.\r\n else {\r\n data.exHeightRef = <any>undefined;\r\n if (ring.Height && ring.Height > 0) {\r\n const points = posses.map(x => Cesium.Cartographic.fromCartesian(x));\r\n if (points.length <= 0) {\r\n data.value = ring.Height;\r\n }\r\n else {\r\n let highest: number = <any>null; \r\n for (let i = 0; i < points.length; i++) {\r\n let pointHeight = points[i].height;\r\n if (pointHeight > highest || highest === null) {\r\n highest = pointHeight;\r\n }\r\n }\r\n highest = (highest === null ? 0 : highest) + ring.Height;\r\n data.value = highest;\r\n }\r\n data.exHeightRef = Cesium.HeightReference.NONE;\r\n }\r\n }\r\n\r\n data.posses = posses;\r\n if (data.value != undefined) {\r\n data.value = EnsureNumber(data.value);\r\n }\r\n return data;\r\n}\r\n\r\nfunction getHeightRef(style: any): Cesium.HeightReference {\r\n let heightRef = Cesium.HeightReference.CLAMP_TO_GROUND;\r\n const altOptionId = style?.altitudeOption?.id;\r\n if (altOptionId == 1) {\r\n heightRef = Cesium.HeightReference.NONE;\r\n }\r\n else if (altOptionId == 2) {\r\n heightRef = Cesium.HeightReference.RELATIVE_TO_GROUND;\r\n }\r\n return heightRef;\r\n}\r\n\r\nfunction getZIndex(style: any, entity: Entity.IEntity, tags: EntityTag.ITag[]): number {\r\n let zIndex = style?.zIndex ? +Calculator.GetValue(style?.zIndex, entity, tags) : 0;\r\n if (zIndex == null) {\r\n zIndex = 0;\r\n }\r\n return EnsureNumber(zIndex);\r\n}\r\n\r\nasync function getStyle(api: BruceApi.Api, entity: Entity.IEntity, styleId: number): Promise<Style.IStyle> {\r\n let style: Style.IStyle = <any>null;\r\n if (styleId) {\r\n style = await Style.Get(api, styleId);\r\n }\r\n if (!style) {\r\n const type = await EntityType.Get(api, entity.Bruce[\"EntityType.ID\"]);\r\n if (type[\"DisplaySetting.ID\"]) {\r\n style = await Style.Get(api, type[\"DisplaySetting.ID\"]);\r\n }\r\n }\r\n return style;\r\n}\r\n\r\nfunction getExistingCEntity(entityId: string, menuItemId: string, item: ZoomControl.IItem, visualRegister: VisualsRegister.Register): EntityRenderEngine.ICesiumEntityExt {\r\n return <any>visualRegister.GetRego(entityId, menuItemId)?.visual;\r\n}\r\n\r\nfunction getRenderGroupId(zoomItem: ZoomControl.IItem): string {\r\n if (!zoomItem) {\r\n return <any>null;\r\n }\r\n return zoomItem.MinZoom + \"-\" + zoomItem.MaxZoom;\r\n}\r\n\r\nexport namespace EntityRenderEngine {\r\n export interface ICesiumEntityExt extends Cesium.Entity {\r\n _siblingGraphics?: Cesium.Entity[];\r\n _parentEntity?: Cesium.Entity;\r\n _renderGroup?: string;\r\n }\r\n\r\n export interface IParams {\r\n apiGetter: BruceApi.IGetter,\r\n viewer: Cesium.Viewer; \r\n visualRegister: VisualsRegister.Register;\r\n menuItemId: string;\r\n zoomControl: ZoomControl.IItem[];\r\n entities: Entity.IEntity[];\r\n }\r\n\r\n export async function Render(params: IParams): Promise<IDictionary<ICesiumEntityExt>> {\r\n const groupRenderParams = {\r\n apiGetter: params.apiGetter,\r\n viewer: params.viewer,\r\n entities: [],\r\n zoomItems: <IDictionary<ZoomControl.IItem>>{},\r\n menuItemId: params.menuItemId,\r\n visualRegister: params.visualRegister\r\n }\r\n\r\n const cEntities: IDictionary<ICesiumEntityExt> = {};\r\n const models: Entity.IEntity[] = [];\r\n const polygons: Entity.IEntity[] = [];\r\n const polylines: Entity.IEntity[] = [];\r\n const points: Entity.IEntity[] = [];\r\n\r\n // Initial sorting.\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n const id = <string>entity.Bruce.ID;\r\n\r\n const zoomItem = RenderManager.Utils.DetermineZoomItem(params.viewer, entity, params.zoomControl);\r\n let displayType = zoomItem?.DisplayType;\r\n if (!displayType) {\r\n displayType = ZoomControl.EDisplayType.Hidden;\r\n }\r\n // Backwards compatibility.\r\n else if (<string>displayType == \"polygon\") {\r\n displayType = ZoomControl.EDisplayType.Geometry;\r\n }\r\n\r\n if (displayType != ZoomControl.EDisplayType.Hidden) {\r\n const newRenderId = getRenderGroupId(zoomItem);\r\n const existing = getExistingCEntity(id, params.menuItemId, zoomItem, params.visualRegister);\r\n const oldRenderId = existing?._renderGroup;\r\n \r\n if (newRenderId == oldRenderId) {\r\n cEntities[id] = existing;\r\n }\r\n else {\r\n if (displayType == ZoomControl.EDisplayType.Model3D) {\r\n models.push(entity);\r\n }\r\n else if (displayType == ZoomControl.EDisplayType.Geometry) {\r\n polygons.push(entity);\r\n }\r\n else {\r\n points.push(entity);\r\n }\r\n groupRenderParams.zoomItems[id] = zoomItem;\r\n }\r\n }\r\n }\r\n\r\n // Keep trying to render things in order of hard-coded priority system.\r\n if (models.length > 0) {\r\n const mParams: Model3d.IGroupParams = {\r\n ...groupRenderParams,\r\n entities: models\r\n };\r\n const mEntities = await Model3d.RenderGroup(mParams);\r\n for (let i = 0; i < mParams.entities.length; i++) {\r\n const entity = mParams.entities[i];\r\n const id = <string>entity.Bruce.ID;\r\n const cEntity = mEntities[id];\r\n if (cEntity) {\r\n cEntities[id] = cEntity;\r\n }\r\n else {\r\n polygons.push(entity);\r\n }\r\n }\r\n }\r\n if (polygons.length > 0) {\r\n const pParams: Polygon.IGroupParams = {\r\n ...groupRenderParams,\r\n entities: polygons\r\n };\r\n const pEntities = await Polygon.RenderGroup(pParams);\r\n for (let i = 0; i < pParams.entities.length; i++) {\r\n const entity = pParams.entities[i];\r\n const cEntity = pEntities[<string>entity.Bruce.ID];\r\n if (cEntity) {\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n else {\r\n polylines.push(entity);\r\n }\r\n }\r\n }\r\n if (polylines.length > 0) {\r\n const pParams: Polyline.IGroupParams = {\r\n ...groupRenderParams,\r\n entities: polylines\r\n };\r\n const pEntities = await Polyline.RenderGroup(pParams);\r\n for (let i = 0; i < pParams.entities.length; i++) {\r\n const entity = pParams.entities[i];\r\n const cEntity = pEntities[<string>entity.Bruce.ID];\r\n if (cEntity) {\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n else {\r\n points.push(entity);\r\n }\r\n }\r\n }\r\n if (points.length > 0) {\r\n const pParams: Point.IGroupParams = {\r\n ...groupRenderParams,\r\n entities: points\r\n };\r\n const pEntities = await Point.RenderGroup(pParams);\r\n for (let i = 0; i < pParams.entities.length; i++) {\r\n const entity = pParams.entities[i];\r\n const cEntity = pEntities[<string>entity.Bruce.ID];\r\n if (cEntity) {\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n }\r\n }\r\n\r\n return cEntities;\r\n }\r\n\r\n export function Remove(viewer: Cesium.Viewer, entity: ICesiumEntityExt): void {\r\n if (viewer.isDestroyed()) {\r\n return;\r\n }\r\n if (entity._parentEntity) {\r\n Remove(viewer, entity._parentEntity);\r\n }\r\n if (entity._siblingGraphics) {\r\n for (let i = 0; i < entity._siblingGraphics.length; i++) {\r\n const sibling = entity._siblingGraphics[i];\r\n Remove(viewer, sibling);\r\n }\r\n }\r\n if (viewer.entities.contains(entity)) {\r\n viewer.entities.remove(entity);\r\n }\r\n }\r\n\r\n export namespace Point {\r\n export interface IParams {\r\n api: BruceApi.Api;\r\n style: Style.IPointSettings;\r\n entity: Entity.IEntity;\r\n tags: EntityTag.ITag[];\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export interface IGroupParams {\r\n apiGetter: BruceApi.IGetter,\r\n menuItemId: string;\r\n entities: Entity.IEntity[];\r\n zoomItems: IDictionary<ZoomControl.IItem>;\r\n visualRegister: VisualsRegister.Register;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export function Render(params: IParams): ICesiumEntityExt {\r\n const entity = params.entity;\r\n const style = params.style;\r\n let type = style.Type;\r\n if (type == null) {\r\n // Very old backward compatibility.\r\n if ((style as any).useIcon == true) {\r\n type = Style.EPointType.Icon;\r\n }\r\n }\r\n\r\n let cEntity: Cesium.Entity = <any>null;\r\n if (type == Style.EPointType.Icon) {\r\n // Fixing poor data.\r\n let iconUrlRows = style.iconUrl == null ? [] : style.iconUrl;\r\n iconUrlRows.forEach((row) => {\r\n if (row.type == Calculator.EValueType.Color) {\r\n row.type = Calculator.EValueType.Input;\r\n }\r\n });\r\n\r\n const icon = Calculator.GetValue(iconUrlRows, entity, params.tags);\r\n let iconUrl: string = <any>null;\r\n if (typeof icon == \"string\") {\r\n iconUrl = icon;\r\n }\r\n if (!iconUrl && style.iconId) {\r\n iconUrl = ClientFile.GetUrl(params.api, style.iconId);\r\n }\r\n if (iconUrl) {\r\n let iconScale = EnsureNumber(Calculator.GetValue(style.iconScale, entity, params.tags));\r\n if (!iconScale && iconScale != 0) {\r\n iconScale = 1;\r\n }\r\n if (iconScale > 0) {\r\n cEntity = new Cesium.Entity({\r\n billboard: {\r\n horizontalOrigin: Cesium.HorizontalOrigin.CENTER,\r\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\r\n image: iconUrl,\r\n heightReference: getHeightRef(style),\r\n scale: iconScale\r\n },\r\n position: EntityUtils.GetPos(params.viewer, entity),\r\n show: false\r\n });\r\n }\r\n }\r\n }\r\n if (type == Style.EPointType.Cylinder) {\r\n // TODO: Cylinder.\r\n }\r\n if (!cEntity) {\r\n const bColor: Color.IColor = style.color ? <any>Calculator.GetValue(style.color, entity, params.tags) : null;\r\n const cColor = bColor ? colorToCColor(bColor) : Cesium.Color.RED;\r\n \r\n let size = style.size ? <number>Calculator.GetValue(style.size, entity, params.tags) : null;\r\n if (size == null) {\r\n size = 30;\r\n }\r\n size = EnsureNumber(size);\r\n if (size <= 0) {\r\n return <any>null;\r\n }\r\n cEntity = new Cesium.Entity({\r\n point: {\r\n pixelSize: size,\r\n color: cColor,\r\n heightReference: getHeightRef(style)\r\n },\r\n position: EntityUtils.GetPos(params.viewer, entity),\r\n show: false\r\n });\r\n }\r\n if (cEntity) {\r\n params.viewer.entities.add(cEntity);\r\n }\r\n return cEntity;\r\n }\r\n\r\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\r\n const api = params.apiGetter.getApi();\r\n\r\n const cEntities: IDictionary<ICesiumEntityExt> = {};\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n\r\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\r\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\r\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\r\n let tags: EntityTag.ITag[] = [];\r\n if (tagIds && tagIds.length > 0) {\r\n tags = await EntityTag.GetListByIds(api, tagIds);\r\n }\r\n const pStyle = (style?.Settings as Style.IEntitySettings)?.pointStyle ?? <any>{};\r\n \r\n const cEntity = Render({\r\n entity: entity,\r\n style: pStyle,\r\n tags: tags,\r\n viewer: params.viewer,\r\n api: api\r\n });\r\n cEntity._renderGroup = getRenderGroupId(zoomItem);\r\n\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n \r\n return cEntities;\r\n }\r\n }\r\n\r\n export namespace Polyline {\r\n export interface IParams {\r\n style: Style.IPolylineSettings;\r\n entity: Entity.IEntity;\r\n tags: EntityTag.ITag[];\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export interface IGroupParams {\r\n apiGetter: BruceApi.IGetter,\r\n menuItemId: string;\r\n entities: Entity.IEntity[];\r\n zoomItems: IDictionary<ZoomControl.IItem>;\r\n visualRegister: VisualsRegister.Register;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export function Render(params: IParams): ICesiumEntityExt {\r\n const entity = params.entity;\r\n\r\n const line = entity.geometry?.LineString;\r\n const points: Carto.ICarto[] = line && typeof line == \"string\" ? Geometry.ParsePoints(line) : [];\r\n if (!points || points.length < 2) {\r\n return <any>null;\r\n }\r\n let isValid = true;\r\n for (let i = 0; i < points.length; i++) {\r\n if (!Carto.ValidateCarto(points[i])) {\r\n isValid = false;\r\n break;\r\n }\r\n }\r\n if (!isValid) {\r\n return <any>null;\r\n }\r\n const posses = points.map(x => Cesium.Cartesian3.fromDegrees(EnsureNumber(x.longitude), EnsureNumber(x.latitude), EnsureNumber(x.altitude)));\r\n\r\n // Making sure no 0 length lines coming through.\r\n // Ideally we would measure the full line but I fear that's too expensive.\r\n if (posses.length == 2 || posses.length == 3) {\r\n let totalDistance = 0;\r\n for (let i = 0; i < posses.length; i++) {\r\n let pos1 = posses[i];\r\n let pos2 = posses[i + 1];\r\n if (pos1 && pos2) {\r\n totalDistance += Cesium.Cartesian3.distance(pos1, pos2);\r\n }\r\n }\r\n if (totalDistance < 0.001) {\r\n return <any>null;\r\n }\r\n }\r\n\r\n const style = params.style;\r\n const bColor: Color.IColor = style.lineColor ? <any>Calculator.GetValue(style.lineColor, entity, params.tags) : null;\r\n const cColor = bColor ? colorToCColor(bColor) : Cesium.Color.RED;\r\n\r\n let width = style.lineWidth ? <number>Calculator.GetValue(style.lineWidth, entity, params.tags) : null;\r\n if (width == null) {\r\n width = 4;\r\n }\r\n width = EnsureNumber(width);\r\n if (width <= 0) {\r\n return <any>null;\r\n }\r\n \r\n const heightRef = getHeightRef(style);\r\n const cEntity: ICesiumEntityExt = new Cesium.Entity({\r\n polyline: {\r\n positions: posses,\r\n material: <Cesium.MaterialProperty><any>cColor,\r\n width: width,\r\n classificationType: Cesium.ClassificationType.TERRAIN,\r\n arcType: Cesium.ArcType.GEODESIC,\r\n zIndex: getZIndex(style, entity, params.tags),\r\n clampToGround: heightRef == Cesium.HeightReference.CLAMP_TO_GROUND\r\n },\r\n position: EntityUtils.GetPos(params.viewer, entity),\r\n show: false\r\n });\r\n\r\n params.viewer.entities.add(cEntity);\r\n return cEntity;\r\n }\r\n\r\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\r\n const api = params.apiGetter.getApi();\r\n const cEntities: IDictionary<ICesiumEntityExt> = {};\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\r\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\r\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\r\n let tags: EntityTag.ITag[] = [];\r\n if (tagIds && tagIds.length > 0) {\r\n tags = await EntityTag.GetListByIds(api, tagIds);\r\n }\r\n const lStyle = (style?.Settings as Style.IEntitySettings)?.polylineStyle ?? <any>{};\r\n\r\n const cEntity = Render({\r\n entity: entity,\r\n style: lStyle,\r\n tags: tags,\r\n viewer: params.viewer\r\n });\r\n if (cEntity) {\r\n cEntity._renderGroup = getRenderGroupId(zoomItem);\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n }\r\n return cEntities;\r\n }\r\n }\r\n\r\n export namespace Polygon {\r\n export interface IParams {\r\n style: Style.IPolygonSettings;\r\n entity: Entity.IEntity;\r\n tags: EntityTag.ITag[];\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export interface IGroupParams {\r\n apiGetter: BruceApi.IGetter,\r\n menuItemId: string;\r\n entities: Entity.IEntity[];\r\n zoomItems: IDictionary<ZoomControl.IItem>;\r\n visualRegister: VisualsRegister.Register;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export function Render(params: IParams): ICesiumEntityExt {\r\n const entity = params.entity;\r\n const pRings = entity.geometry?.Polygon;\r\n if (pRings == null || pRings.length <= 0) {\r\n return <any>null;\r\n }\r\n const style = params.style;\r\n\r\n const bFillColor = <Color.IColor>Calculator.GetValue(style.fillColor, entity, params.tags);\r\n const cFillColor = bFillColor ? colorToCColor(bFillColor) : Cesium.Color.RED;\r\n\r\n const bLineColor = <Color.IColor>Calculator.GetValue(style.lineColor, entity, params.tags);\r\n const cLineColor = bLineColor ? colorToCColor(bLineColor) : Cesium.Color.RED;\r\n\r\n let width = style.lineWidth ? <number>Calculator.GetValue(style.lineWidth, entity, params.tags) : null;\r\n if (width == null) {\r\n width = 4;\r\n }\r\n width = EnsureNumber(width);\r\n if (width <= 0) {\r\n return <any>null;\r\n }\r\n\r\n const heightRef = getHeightRef(style);\r\n\r\n const outerRing = <Geometry.IPolygonRing>pRings.find(x => x.Facing == Geometry.EPolygonRingType.Boundaries);\r\n const points = Geometry.ParsePoints(outerRing?.LinearRing);\r\n let posses = points.map(x => Cesium.Cartesian3.fromDegrees(EnsureNumber(x.longitude), EnsureNumber(x.latitude), EnsureNumber(x.altitude)));\r\n const extrusion = getPolygonExtrusion(\r\n entity,\r\n params.tags,\r\n outerRing,\r\n posses,\r\n heightRef,\r\n style\r\n );\r\n posses = extrusion.posses;\r\n\r\n const holeRings = pRings.filter(x => x.Facing == Geometry.EPolygonRingType.Hole);\r\n const holePosses = holeRings.map((x) => {\r\n const points = Geometry.ParsePoints(x.LinearRing);\r\n return points.map(x => Cesium.Cartesian3.fromDegrees(EnsureNumber(x.longitude), EnsureNumber(x.latitude), EnsureNumber(x.altitude)));\r\n });\r\n\r\n const zIndex = getZIndex(style, entity, params.tags);\r\n\r\n const cEntity: ICesiumEntityExt = new Cesium.Entity({\r\n polygon: {\r\n hierarchy: new Cesium.PolygonHierarchy(posses, holePosses.map(x => new Cesium.PolygonHierarchy(x))),\r\n material: cFillColor,\r\n extrudedHeight: extrusion.value,\r\n extrudedHeightReference: extrusion.exHeightRef,\r\n shadows: Cesium.ShadowMode.ENABLED,\r\n heightReference: heightRef,\r\n classificationType: Cesium.ClassificationType.BOTH,\r\n perPositionHeight: heightRef == Cesium.HeightReference.CLAMP_TO_GROUND ? false : true,\r\n zIndex: zIndex\r\n },\r\n position: EntityUtils.GetPos(params.viewer, entity),\r\n show: false\r\n });\r\n cEntity._siblingGraphics = [];\r\n\r\n for (let i = 0; i < holePosses.length; i++) {\r\n const posses = holePosses[i];\r\n const cEntityHole: ICesiumEntityExt = new Cesium.Entity({\r\n polyline: new Cesium.PolylineGraphics({\r\n positions: posses,\r\n material: <Cesium.MaterialProperty><any>cLineColor,\r\n width: width,\r\n clampToGround: heightRef == Cesium.HeightReference.CLAMP_TO_GROUND,\r\n classificationType: Cesium.ClassificationType.TERRAIN,\r\n arcType: Cesium.ArcType.GEODESIC,\r\n zIndex: zIndex\r\n }),\r\n show: false\r\n });\r\n cEntity._siblingGraphics.push(cEntityHole);\r\n cEntityHole._parentEntity = cEntity;\r\n params.viewer.entities.add(cEntityHole);\r\n }\r\n\r\n params.viewer.entities.add(cEntity);\r\n return cEntity;\r\n }\r\n\r\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\r\n const api = params.apiGetter.getApi();\r\n const cEntities: IDictionary<ICesiumEntityExt> = {};\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\r\n \r\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\r\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\r\n let tags: EntityTag.ITag[] = [];\r\n if (tagIds && tagIds.length > 0) {\r\n tags = await EntityTag.GetListByIds(api, tagIds);\r\n }\r\n const pStyle = (style?.Settings as Style.IEntitySettings)?.polygonStyle ?? <any>{};\r\n \r\n const cEntity = Render({\r\n entity: entity,\r\n style: pStyle,\r\n tags: tags,\r\n viewer: params.viewer\r\n });\r\n if (cEntity) {\r\n cEntity._renderGroup = getRenderGroupId(zoomItem);\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n }\r\n return cEntities;\r\n }\r\n }\r\n\r\n export namespace Model3d {\r\n export interface IParams {\r\n lodUrl: string;\r\n style: Style.IModelSettings;\r\n entity: Entity.IEntity;\r\n tags: EntityTag.ITag[];\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export interface IGroupParams {\r\n apiGetter: BruceApi.IGetter,\r\n menuItemId: string;\r\n entities: Entity.IEntity[];\r\n zoomItems: IDictionary<ZoomControl.IItem>;\r\n visualRegister: VisualsRegister.Register;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export function Render(params: IParams): ICesiumEntityExt {\r\n const entity = params.entity;\r\n\r\n const transform = entity?.transform;\r\n let heading = EnsureNumber(transform?.heading);\r\n heading = (heading + 90) % 360;\r\n const pitch = EnsureNumber(transform?.pitch);\r\n const roll = EnsureNumber(transform?.roll);\r\n\r\n let scale = EnsureNumber(transform?.scale, 1);\r\n if (scale <= 0) {\r\n scale = 1;\r\n }\r\n\r\n const style = params.style;\r\n let styleScale = style?.scale ? Calculator.GetValue(style?.scale, entity, params.tags) : null;\r\n styleScale = EnsureNumber(styleScale ? styleScale : 1);\r\n if (styleScale <= 0) {\r\n styleScale = 1;\r\n }\r\n scale *= styleScale;\r\n\r\n const hpr = new Cesium.HeadingPitchRoll(\r\n Cesium.Math.toRadians(heading), \r\n Cesium.Math.toRadians(pitch), \r\n Cesium.Math.toRadians(roll)\r\n );\r\n\r\n let heightRef = getHeightRef(style);\r\n let pos = EntityUtils.GetPos(params.viewer, entity);\r\n if (heightRef == Cesium.HeightReference.CLAMP_TO_GROUND) {\r\n const carto = Cesium.Cartographic.fromCartesian(pos);\r\n pos = Cesium.Cartesian3.fromRadians(EnsureNumber(carto.longitude), EnsureNumber(carto.latitude), 0);\r\n heightRef = Cesium.HeightReference.RELATIVE_TO_GROUND;\r\n }\r\n\r\n const orientation = Cesium.Transforms.headingPitchRollQuaternion(pos, hpr);\r\n\r\n let blendMode: number = <any>null;\r\n let blendAmount: number = <any>null;\r\n let color: Cesium.Color = <any>null;\r\n if (style?.customize) {\r\n blendMode = style.fillColorBlendMode;\r\n if (!blendMode) {\r\n blendMode = Cesium.ColorBlendMode.HIGHLIGHT;\r\n }\r\n if (blendMode == Cesium.ColorBlendMode.MIX) {\r\n blendAmount = <any>style.fillColorBlendAmount;\r\n if (!blendAmount) {\r\n blendAmount = 0.5;\r\n }\r\n }\r\n const bColor = <Color.IColor>Calculator.GetValue(style.fillColor, entity, params.tags);\r\n if (bColor) {\r\n color = colorToCColor(bColor);\r\n }\r\n }\r\n\r\n const cEntity: ICesiumEntityExt = new Cesium.Entity({\r\n model: {\r\n uri: params.lodUrl,\r\n heightReference: heightRef,\r\n scale: scale,\r\n shadows: Cesium.ShadowMode.ENABLED,\r\n colorBlendAmount: blendAmount,\r\n colorBlendMode: blendMode,\r\n color: color\r\n },\r\n orientation: <Cesium.Property><any>orientation,\r\n position: pos,\r\n show: false\r\n });\r\n\r\n params.viewer.entities.add(cEntity);\r\n return cEntity;\r\n }\r\n\r\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\r\n const api = params.apiGetter.getApi();\r\n const cEntities: IDictionary<ICesiumEntityExt> = {};\r\n const reqBody: EntityLod.Filter.IListParams = {\r\n \"strict\": false,\r\n \"externalSources\": false,\r\n \"Items\": []\r\n };\r\n\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\r\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\r\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\r\n let tags: EntityTag.ITag[] = [];\r\n if (tagIds && tagIds.length > 0) {\r\n tags = await EntityTag.GetListByIds(api, tagIds);\r\n }\r\n const mStyle = (style?.Settings as Style.IEntitySettings)?.polygonStyle ?? <any>{};\r\n let group = mStyle.lodGroup ? Calculator.GetValue(mStyle.lodGroup, entity, tags) : null;\r\n if (!group) {\r\n group = \"DEFAULT\";\r\n }\r\n let level = <number>+<any>zoomItem.LODLevel;\r\n if (!level) {\r\n level = 0;\r\n }\r\n let catId = <string>zoomItem.LODCategoryID;\r\n if (!catId) {\r\n catId = \"glb\";\r\n }\r\n reqBody.Items.push({\r\n \"entityId\": <string>entity.Bruce.ID,\r\n \"categoryId\": catId,\r\n \"group\": <string>group,\r\n \"level\": level\r\n });\r\n }\r\n\r\n const lodData = await EntityLod.GetLods(api, reqBody);\r\n\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\r\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\r\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\r\n let tags: EntityTag.ITag[] = [];\r\n if (tagIds && tagIds.length > 0) {\r\n tags = await EntityTag.GetListByIds(api, tagIds);\r\n }\r\n\r\n const lod = lodData.find(x => x.entityId == entity.Bruce.ID);\r\n if (!lod?.clientFileId) {\r\n continue;\r\n }\r\n const mStyle = (style?.Settings as Style.IEntitySettings)?.polygonStyle ?? <any>{};\r\n const cEntity = Render({\r\n entity: entity,\r\n style: mStyle,\r\n tags: tags,\r\n viewer: params.viewer,\r\n lodUrl: ClientFile.GetUrl(api, lod.clientFileId)\r\n })\r\n if (cEntity) {\r\n cEntity._renderGroup = getRenderGroupId(zoomItem);\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n }\r\n\r\n return cEntities;\r\n }\r\n }\r\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\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.IBruceEntities;\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 entityCheckRemoval: () => void = <any>null;\r\n private isRunningCheck = false;\r\n private viewMonitorRemoval: () => void = <any>null;\r\n\r\n\r\n constructor(\r\n viewer: Cesium.Viewer, \r\n visualsManager: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n monitor: CesiumViewMonitor,\r\n item: MenuItem.Item.IBruceEntities,\r\n sharedGetters: SharedGetters.Cache\r\n ) {\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 async Init(): Promise<void> {\r\n if (this.disposed) {\r\n throw(new Error(\"This item is disposed.\"));\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: 500,\r\n typeId: this.item.BruceEntity[\"EntityType.ID\"],\r\n monitor: this.monitor\r\n });\r\n const minMax = RenderManager.Utils.GetZoomMinMax(this.item.CameraZoomSettings);\r\n this.getter.IncludeMenuItem(this.item.id, [], minMax[0], minMax[1]);\r\n this.getterSub = this.getter.OnUpdate.Subscribe((entities) => {\r\n this.onGetterUpdate(entities);\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();\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.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.RemoveByMenuItemId(this.item.id);\r\n this.entityCheckRemoval?.();\r\n this.viewMonitorRemoval?.();\r\n }\r\n\r\n private async doEntityCheck(): Promise<void> {\r\n if (this.isRunningCheck) {\r\n this.entityCheckQueue.Call();\r\n return;\r\n }\r\n this.isRunningCheck = true;\r\n const api = this.apiGetter.getApi();\r\n try {\r\n const ids = Object.keys(this.renderedEntities);\r\n if (this.disposed) {\r\n return;\r\n }\r\n if (ids.length > 0) { \r\n const CHECK_BATCH_SIZE = 150;\r\n const checkBatch = async() => {\r\n const entityIds = ids.splice(0, CHECK_BATCH_SIZE);\r\n const entities = await Entity.GetListByIds(api, entityIds);\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.distributeGenerateBatches(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 distributeGenerateBatches(entities: Entity.IEntity[]): void {\r\n const BATCH_SIZE = 50;\r\n while (entities.length > 0) {\r\n const batch = entities.splice(0, BATCH_SIZE);\r\n this.onGetterUpdate(batch);\r\n }\r\n }\r\n\r\n private async onGetterUpdate(entities: Entity.IEntity[]): Promise<void> {\r\n try {\r\n if (this.disposed || this.viewer.isDestroyed()) {\r\n return;\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 });\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(id, this.item.id)?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.Add({\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 });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n}","import { BatchedDataGetter, BruceApi, Entity, IDictionary, ZoomControl, MenuItem } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\r\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\n\r\n/**\r\n * Render manager for a group of pre-loaded entities.\r\n * The entities may or may not have records.\r\n * If the entities DON'T have records, it is recommended to avoid using the 3dmodel visualization as it will fail to locate LODs.\r\n */\r\nexport namespace EntitiesLoadedRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private item: MenuItem.Item.IEntitiesLoaded;\r\n private getter: BatchedDataGetter.Getter<Entity.IEntity> = <any>null;\r\n private monitor: CesiumViewMonitor;\r\n private getterSub: () => void = <any>null;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private renderedEntities: IDictionary<boolean> = {};\r\n private visualsManager: VisualsRegister.Register;\r\n\r\n\r\n constructor(\r\n viewer: Cesium.Viewer, \r\n visualsManager: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n monitor: CesiumViewMonitor,\r\n item: MenuItem.Item.IEntitiesLoaded\r\n ) {\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.monitor = monitor;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public async Init(): Promise<void> {\r\n if (this.disposed) {\r\n throw(new Error(\"This item is disposed.\"));\r\n }\r\n this.getter = new BatchedDataGetter.Getter<Entity.IEntity>(\r\n this.item.BruceEntity.Entities,\r\n this.monitor,\r\n 500\r\n );\r\n this.getterSub = this.getter.OnUpdate.Subscribe((entities) => {\r\n this.onGetterUpdate(entities);\r\n });\r\n this.getter.Start();\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n this.disposed = true;\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n }\r\n\r\n private async onGetterUpdate(entities: Entity.IEntity[]): Promise<void> {\r\n try {\r\n if (this.disposed || this.viewer.isDestroyed()) {\r\n return;\r\n }\r\n const cEntities = await EntityRenderEngine.Render({\r\n viewer: this.viewer, \r\n apiGetter: this.apiGetter, \r\n entities: entities,\r\n menuItemId: this.item.id,\r\n visualRegister: this.visualsManager,\r\n zoomControl: this.item.CameraZoomSettings\r\n });\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(id, this.item.id)?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.Add({\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 });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n}","import { BruceEvent, Cartes, IDictionary, ObjectUtils } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityUtils } from \"../utils/entity-utils\";\r\nimport { EntityRenderEngine } from \"./entity-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);\r\n if (visual instanceof Cesium.Entity) {\r\n EntityRenderEngine.Remove(viewer, visual);\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) {\r\n if (visual._parentEntity) {\r\n updateCEntityShow(viewer, visual._parentEntity, show);\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);\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);\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.IsHidden(entityId);\r\n\r\n const regos = register.GetRegos(entityId);\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): 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) {\r\n markEntity(register, rego, visEnt._parentEntity);\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]);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction unmarkEntity(visual: VisualsRegister.Visual): 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) {\r\n unmarkEntity(visEnt._parentEntity);\r\n }\r\n if (visEnt._siblingGraphics) {\r\n for (let i = 0; i < visEnt._siblingGraphics.length; i++) {\r\n unmarkEntity(visEnt._siblingGraphics[i]);\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): void {\r\n const color = Cesium.Color.fromAlpha(Cesium.Color.YELLOW, 0.5);\r\n if (visual instanceof Cesium.Entity) {\r\n const entities = EntityUtils.GatherEntity(visual);\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 };\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(visual);\r\n if (opacity != null) {\r\n EntityUtils.SetOpacity(viewer, visual, opacity);\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(visual);\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 };\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(visual);\r\n if (opacity != null) {\r\n EntityUtils.SetOpacity(viewer, visual, opacity);\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 entityId: string;\r\n entityTypeId?: string;\r\n menuItemId: string;\r\n visual: Visual;\r\n priority: number;\r\n sourceId?: 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 }\r\n \r\n export interface IVisualUpdate {\r\n rego: IVisualRego;\r\n isAdding: boolean;\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 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 \r\n \r\n constructor(viewer: Cesium.Viewer) {\r\n this.viewer = viewer;\r\n }\r\n\r\n public Select(id: string, refreshIfSelected: boolean = false): void {\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);\r\n }\r\n }\r\n }\r\n }\r\n\r\n public Deselect(id: string): void {\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\r\n public IsSelected(id: string): boolean {\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 Isolate(id: string): void {\r\n if (this.isolatedIds.indexOf(id) === -1) {\r\n this.isolatedIds.push(id);\r\n }\r\n this.updateAllEntities();\r\n }\r\n\r\n public Deisolate(id: string): void {\r\n const index = this.isolatedIds.indexOf(id);\r\n if (index !== -1) {\r\n this.isolatedIds.splice(index, 1);\r\n }\r\n this.updateAllEntities();\r\n }\r\n\r\n public IsIsolated(id: string): boolean {\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 Hide(id: string): void {\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\r\n public Show(id: string): void {\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\r\n public IsHidden(id: string): boolean {\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 }\r\n \r\n public Add(rego: IVisualRego): void {\r\n this.Remove(rego.entityId, rego.menuItemId, false);\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);\r\n updateEntity(this.viewer, entityId, this);\r\n if (this.selectedIds.includes(entityId)) {\r\n select(this.viewer, rego.visual);\r\n }\r\n this.onUpdate?.Trigger({ rego: rego, isAdding: true });\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(entityId: string, menuItemId?: string): IVisualRego {\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 public GetRegos(entityId: string): IVisualRego[] {\r\n const entityRegos = this.rego[entityId];\r\n if (!entityRegos) {\r\n return <any>[];\r\n }\r\n return entityRegos;\r\n }\r\n\r\n public GetMenuItemRegos(menuItemId: string): IVisualRego[] {\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 public RemoveByEntityId(id: string): void {\r\n const entityRegos = this.rego[id];\r\n if (!entityRegos) {\r\n return;\r\n }\r\n for (let i = 0; i < entityRegos.length; i++) {\r\n const rego = entityRegos[i];\r\n this.onUpdate?.Trigger({ rego: rego, isAdding: false });\r\n removeEntity(this.viewer, rego.visual);\r\n }\r\n this.rego[id] = [];\r\n delete this.rego[id];\r\n }\r\n \r\n public RemoveByMenuItemId(id: string): void {\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 === id);\r\n if (!rego) {\r\n continue;\r\n }\r\n this.onUpdate?.Trigger({ rego: rego, isAdding: false });\r\n removeEntity(this.viewer, rego.visual);\r\n const doesInclude = this.rego[entityId].find(r => r.menuItemId === id);\r\n if (doesInclude) {\r\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== id);\r\n updateEntity(this.viewer, entityId, this);\r\n }\r\n }\r\n }\r\n }\r\n \r\n public Remove(entityId: string, menuItemId: string, _doUpdate: boolean = true): void {\r\n const entityRegos = this.rego[entityId];\r\n if (!entityRegos) {\r\n return;\r\n }\r\n const rego = entityRegos.find(r => r.menuItemId === menuItemId);\r\n if (!rego) {\r\n return;\r\n }\r\n this.onUpdate?.Trigger({ rego: rego, isAdding: false });\r\n removeEntity(this.viewer, rego.visual);\r\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== menuItemId);\r\n if (_doUpdate) {\r\n updateEntity(this.viewer, entityId, this);\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 GetFromCursor(cursor: Cartes.ICartes2): IVisualRego[] {\r\n const found: IVisualRego[] = [];\r\n const picked = this.viewer.scene.drillPick(new Cesium.Cartesian2(cursor.x, cursor.y), 5);\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 found;\r\n }\r\n\r\n /**\r\n * Returns all registered entity ids.\r\n */\r\n public GetIds() {\r\n const ids = [];\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 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}","import { BatchedDataGetter, BruceApi, Entity, IDictionary, MenuItem } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\r\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\n\r\n/**\r\n * Render manager for rendering an array of entity ids.\r\n * This will render them in batches to avoid overloading the viewer.\r\n */\r\nexport namespace EntitiesIdsRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private monitor: CesiumViewMonitor;\r\n private item: MenuItem.Item.IEntityIds;\r\n private getter: BatchedDataGetter.Getter<string> = <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\r\n\r\n constructor(\r\n viewer: Cesium.Viewer, \r\n visualsManager: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n monitor: CesiumViewMonitor,\r\n item: MenuItem.Item.IEntityIds\r\n ) {\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.monitor = monitor;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public async Init(): Promise<void> {\r\n if (this.disposed) {\r\n throw(new Error(\"This item is disposed.\"));\r\n }\r\n this.getter = new BatchedDataGetter.Getter<string>(\r\n this.item.BruceEntity.EntityIds,\r\n this.monitor,\r\n 500\r\n );\r\n this.getterSub = this.getter.OnUpdate.Subscribe((ids) => {\r\n this.onGetterUpdate(ids);\r\n });\r\n this.getter.Start();\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n this.disposed = true;\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n }\r\n\r\n private async onGetterUpdate(entityIds: string[]): Promise<void> {\r\n if (this.disposed || this.viewer.isDestroyed()) {\r\n return;\r\n }\r\n try {\r\n const api = this.apiGetter.getApi();\r\n const entities = await Entity.GetListByIds(api, entityIds);\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 });\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(id, this.item.id)?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.Add({\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 });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n}","import { BatchedDataGetter, BruceApi, Entity, 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\n\r\n/**\r\n * Manager for rendering a single Bruce entity.\r\n */\r\nexport namespace EntityRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private item: MenuItem.Item.IBruceEntity;\r\n private getter: BatchedDataGetter.Getter<string> = <any>null;\r\n private monitor: CesiumViewMonitor;\r\n private getterSub: () => void = <any>null;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private visualsManager: VisualsRegister.Register;\r\n\r\n\r\n constructor(\r\n viewer: Cesium.Viewer, \r\n visualsManager: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n monitor: CesiumViewMonitor, \r\n item: MenuItem.Item.IBruceEntity\r\n ) {\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.monitor = monitor;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public async Init(): Promise<void> {\r\n if (this.disposed) {\r\n throw(new Error(\"This item is disposed.\"));\r\n }\r\n this.getter = new BatchedDataGetter.Getter<string>(\r\n [this.item.BruceEntity.EntityId],\r\n this.monitor,\r\n 1\r\n );\r\n this.getterSub = this.getter.OnUpdate.Subscribe((ids) => {\r\n this.onGetterUpdate(ids[0]);\r\n });\r\n this.getter.Start();\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.disposed = true;\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n }\r\n\r\n private async onGetterUpdate(id: string): Promise<void> {\r\n try {\r\n if (this.disposed || this.viewer.isDestroyed()) {\r\n return;\r\n }\r\n\r\n const api = this.apiGetter.getApi();\r\n const entity = await Entity.Get(api, id);\r\n const cEntities = await EntityRenderEngine.Render({\r\n viewer: this.viewer, \r\n apiGetter: this.apiGetter,\r\n entities: [entity],\r\n menuItemId: this.item.id,\r\n visualRegister: this.visualsManager,\r\n zoomControl: this.item.CameraZoomSettings\r\n });\r\n\r\n const cEntity = cEntities[id];\r\n if (cEntity) {\r\n const visual = this.visualsManager.GetRego(id, this.item.id)?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.Add({\r\n entityId: <string>entity.Bruce.ID,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0,\r\n entityTypeId: entity.Bruce[\"EntityType.ID\"]\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n}","import { BruceApi, Calculator, Cartes, Carto, Color, Entity, EntityCoords, EntityType, IDictionary, Style, Tileset, TilesetCad, TilesetPointcloud, Transform } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { VisualsRegister } from \"./visuals-register\";\r\nimport { EnsureNumber } from \"../internal/js-utils\";\r\n\r\nfunction colorToCColor(color: Color.IColor): Cesium.Color {\r\n return new Cesium.Color(\r\n color.red ? color.red/255 : 0, \r\n color.green ? color.green/255 : 0, \r\n color.blue ? color.blue/255 : 0, \r\n color.alpha\r\n );\r\n}\r\n\r\n/**\r\n * Returns if a given tileset is alive and in the scene.\r\n * @param viewer \r\n * @param cTileset \r\n * @returns \r\n */\r\nfunction isAlive(viewer: Cesium.Viewer, cTileset: Cesium.Cesium3DTileset) {\r\n if (viewer.isDestroyed()) {\r\n return false;\r\n }\r\n if (!viewer?.scene) {\r\n return false;\r\n }\r\n if (cTileset.isDestroyed()) {\r\n return false;\r\n }\r\n return viewer.scene.primitives.contains(cTileset);\r\n}\r\n\r\nexport namespace TilesetRenderEngine {\r\n export interface IParams {\r\n apiGetter: BruceApi.IGetter;\r\n tileset: Tileset.ITileset;\r\n viewer: Cesium.Viewer;\r\n coords?: EntityCoords.IEntityCoords;\r\n }\r\n\r\n export function ApplyPosition(\r\n cTileset: Cesium.Cesium3DTileset, \r\n tileset: Tileset.ITileset, \r\n coords: EntityCoords.IEntityCoords\r\n ): void {\r\n let location: Carto.ICarto;\r\n let transform: Transform.ITransform;\r\n\r\n if (tileset.type == Tileset.EType.Cad) {\r\n const settings = tileset.settings as TilesetCad.ISettings;\r\n\r\n // Position using root entity + ucs.\r\n if (coords?.ucs) {\r\n location = coords.ucs.location;\r\n transform = coords.transform as Transform.ITransform;\r\n }\r\n // Position using tileset.\r\n else {\r\n transform = settings.transform as Transform.ITransform;\r\n location = settings.location as Carto.ICarto;\r\n }\r\n }\r\n else if (tileset.type == Tileset.EType.PointCloud) {\r\n const settings = tileset.settings as TilesetPointcloud.ISettings;\r\n transform = settings.transform as Transform.ITransform;\r\n location = settings.location as Carto.ICarto;\r\n }\r\n \r\n if (!location?.latitude) {\r\n return;\r\n }\r\n\r\n transform = {\r\n heading: 0,\r\n pitch: 0,\r\n roll: 0,\r\n scale: 1,\r\n x: 0,\r\n y: 0,\r\n z: 0,\r\n ...transform\r\n }\r\n transform.scale = EnsureNumber(transform.scale);\r\n if (transform.scale <= 0) {\r\n transform.scale = 0.000001;\r\n }\r\n\r\n const pos = Cesium.Cartesian3.fromDegrees(\r\n EnsureNumber(location.longitude),\r\n EnsureNumber(location.latitude),\r\n EnsureNumber(location.altitude)\r\n );\r\n const hpr = Cesium.HeadingPitchRoll.fromDegrees(\r\n EnsureNumber(transform.heading), \r\n EnsureNumber(transform.pitch), \r\n EnsureNumber(transform.roll), \r\n new Cesium.HeadingPitchRoll()\r\n );\r\n\r\n const root = cTileset.root;\r\n root.transform = Cesium.Transforms.headingPitchRollToFixedFrame(pos, hpr);\r\n\r\n const scaleMatrix = Cesium.Matrix4.fromScale(new Cesium.Cartesian3(\r\n transform.scale, \r\n transform.scale,\r\n transform.scale\r\n ), new Cesium.Matrix4());\r\n root.transform = Cesium.Matrix4.multiply(root.transform, scaleMatrix, root.transform);\r\n\r\n root.transform = Cesium.Matrix4.multiplyByTranslation(root.transform, new Cesium.Cartesian3(\r\n EnsureNumber(transform.x),\r\n EnsureNumber(transform.y),\r\n EnsureNumber(transform.z)\r\n ), root.transform);\r\n\r\n // Force matrix to update\r\n (<any>root).updateTransform();\r\n }\r\n\r\n export function ApplySettings(cTileset: Cesium.Cesium3DTileset, tileset: Tileset.ITileset): void {\r\n if (tileset.type == Tileset.EType.Cad) {\r\n const settings = tileset.settings as TilesetCad.ISettings;\r\n const maxScreenSpaceError = settings.maximumScreenSpaceError;\r\n if (maxScreenSpaceError || maxScreenSpaceError == 0) {\r\n cTileset.maximumScreenSpaceError = EnsureNumber(maxScreenSpaceError);\r\n }\r\n }\r\n else if (tileset.type == Tileset.EType.PointCloud) {\r\n const settings = tileset.settings as TilesetPointcloud.ISettings;\r\n const maxScreenSpaceError = settings.maximumScreenSpaceError;\r\n if (maxScreenSpaceError || maxScreenSpaceError == 0) {\r\n cTileset.maximumScreenSpaceError = EnsureNumber(maxScreenSpaceError);\r\n }\r\n const attenuation = settings.attenuation;\r\n if (attenuation != null) {\r\n cTileset.pointCloudShading.attenuation = Boolean(attenuation);\r\n }\r\n const attenuationMax = settings.attenuationMax;\r\n if (attenuationMax || attenuationMax == 0) {\r\n cTileset.pointCloudShading.maximumAttenuation = EnsureNumber(attenuationMax);\r\n }\r\n }\r\n else {\r\n console.warn(\"Not implemented.\");\r\n }\r\n }\r\n\r\n export function Render(params: IParams): Cesium.Cesium3DTileset {\r\n const api = params.apiGetter.getApi(params.apiGetter.accountId);\r\n if (params.tileset.type == Tileset.EType.Cad) {\r\n const cTileset = new Cesium.Cesium3DTileset({\r\n url: Tileset.GetPublicFileUrl(api, params.tileset.id, \"tileset.json\") + \"?generation=\" + params.tileset.generateVersion\r\n });\r\n params.viewer.scene.primitives.add(cTileset);\r\n cTileset.readyPromise.then(() => {\r\n try {\r\n if (!isAlive(params.viewer, cTileset)) {\r\n return;\r\n }\r\n ApplySettings(cTileset, params.tileset);\r\n ApplyPosition(cTileset, params.tileset, params.coords as EntityCoords.IEntityCoords);\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n });\r\n return cTileset;\r\n }\r\n else if (params.tileset.type === Tileset.EType.EntitiesSet) {\r\n const cTileset = new Cesium.Cesium3DTileset({\r\n url: Tileset.GetPublicFileUrl(api, params.tileset.id, \"tileset.json\") + \"?generation=\" + params.tileset.generateVersion\r\n });\r\n params.viewer.scene.primitives.add(cTileset);\r\n return cTileset;\r\n }\r\n else if (params.tileset.type == Tileset.EType.PointCloud) {\r\n const cTileset = new Cesium.Cesium3DTileset({\r\n url: Tileset.GetPublicFileUrl(api, params.tileset.id, \"tileset.json\") + \"?generation=\" + params.tileset.generateVersion\r\n });\r\n params.viewer.scene.primitives.add(cTileset);\r\n cTileset.readyPromise.then(() => {\r\n try {\r\n if (!isAlive(params.viewer, cTileset)) {\r\n return;\r\n }\r\n ApplySettings(cTileset, params.tileset);\r\n ApplyPosition(cTileset, params.tileset, null);\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n });\r\n return cTileset;\r\n }\r\n else {\r\n throw(\"Not implemented.\");\r\n }\r\n }\r\n\r\n export class CadStyler {\r\n private api: BruceApi.Api;\r\n\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n\r\n private loadedEntities: IDictionary<VisualsRegister.IVisualRego> = {};\r\n private cTileset: Cesium.Cesium3DTileset;\r\n private styleMapping: any[];\r\n private styleMappingLoaded: boolean = false;\r\n private styleMappingsLoaded: IDictionary<boolean> = {};\r\n private fallbackStyleId: number;\r\n private fallbackStyle: Style.IStyle = <any>null;\r\n\r\n private runningQueues: number = 0;\r\n private queueLoadInterval: any;\r\n private recordLoadQueue: string[] = [];\r\n private recordCheckQueue: string[] = [];\r\n private queueCheckInterval: any;\r\n\r\n\r\n constructor(api: BruceApi.Api, cTileset: Cesium.Cesium3DTileset, fallbackStyleId: number, styleMapping: any[]) {\r\n this.api = api;\r\n this.cTileset = cTileset;\r\n this.fallbackStyleId = fallbackStyleId;\r\n this.styleMapping = styleMapping;\r\n this.loadStyles();\r\n }\r\n\r\n public QueueEntities(entities: VisualsRegister.IVisualRego[]): void {\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n this.queueTilesetFeatureStyle(entity);\r\n }\r\n if (this.recordLoadQueue.length > 0) {\r\n this.processQueue();\r\n }\r\n }\r\n\r\n private async processQueue(): Promise<void> {\r\n const MAX_BATCHES = 2;\r\n const BATCH_DELAY = 200;\r\n\r\n if (this.runningQueues >= MAX_BATCHES) {\r\n return;\r\n }\r\n else if (this.disposed) {\r\n return;\r\n }\r\n this.runningQueues += 1;\r\n \r\n let batch: VisualsRegister.IVisualRego[] = [];\r\n let rerun: boolean = false;\r\n try {\r\n batch = this.getEntitiesForQueue();\r\n\r\n const entityIds = batch.map(x => x.entityId);\r\n if (entityIds.length > 0) {\r\n const entities = await Entity.GetListByIds(this.api, entityIds);\r\n for (let i = 0; i < entities.length; i++) {\r\n const record = entities[i];\r\n const feature = batch.find(x => x?.entityId == record?.Bruce?.ID);\r\n if (feature) {\r\n this.styleTilesetFeatureFullData(feature, record);\r\n }\r\n }\r\n rerun = batch.length > 0;\r\n }\r\n }\r\n finally {\r\n setTimeout(() => {\r\n this.runningQueues -= 1;\r\n if (rerun) {\r\n this.processQueue();\r\n }\r\n }, BATCH_DELAY);\r\n }\r\n }\r\n\r\n private getEntitiesForQueue(): VisualsRegister.IVisualRego[] {\r\n const BATCH_SIZE = 30;\r\n const batchHashes = this.recordLoadQueue.splice(0, BATCH_SIZE);\r\n const entities: VisualsRegister.IVisualRego[] = [];\r\n for (let i = 0; i < batchHashes.length; i++) {\r\n const id = batchHashes[i];\r\n const entity = this.loadedEntities[id];\r\n if (entity) {\r\n entities.push(entity);\r\n }\r\n }\r\n return entities;\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.disposed = true;\r\n clearInterval(this.queueLoadInterval);\r\n clearInterval(this.queueCheckInterval);\r\n }\r\n\r\n private async loadStyles(): Promise<void> {\r\n let fallbackStyleId = this.fallbackStyleId;\r\n if (fallbackStyleId && fallbackStyleId > 0) {\r\n try {\r\n let data = await Style.Get(this.api, fallbackStyleId);\r\n this.fallbackStyle = data;\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n \r\n // Load styles in the style mapping\r\n let styleMapping = this.styleMapping;\r\n if (!styleMapping) {\r\n styleMapping = [];\r\n }\r\n this.styleMapping = styleMapping;\r\n \r\n // It is default style.\r\n // We have to get all possible entity type ids and append them to mapping.\r\n if (!fallbackStyleId) {\r\n try {\r\n const modelTree = this.cTileset?.extensions?.modelTree;\r\n if (modelTree) {\r\n const entityTypeIds = this.getEntityTypeIdsFromModelTree(modelTree);\r\n for (let i = 0; i < entityTypeIds.length; i++) {\r\n const entityTypeId = entityTypeIds[i];\r\n if (styleMapping.findIndex(x => x.EntityTypeID == entityTypeId) <= -1) {\r\n styleMapping.push({\r\n EntityTypeID: entityTypeId,\r\n StyleID: null,\r\n style: <any>null\r\n });\r\n }\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n \r\n for (let i = 0; i < styleMapping.length; i++) {\r\n if (this.disposed) {\r\n break;\r\n }\r\n \r\n let styleMap = styleMapping[i];\r\n if (!styleMap.style) {\r\n let styleId = styleMap.StyleID;\r\n \r\n // Get default style of the entity type.\r\n if (!styleId) {\r\n try {\r\n let entityType = await EntityType.Get(this.api, styleMap.EntityTypeID);\r\n styleId = entityType?.[\"DisplaySetting.ID\"];\r\n }\r\n catch (e) {\r\n console.error(e); \r\n }\r\n }\r\n \r\n if (styleId) {\r\n try {\r\n let data = await Style.Get(this.api, styleId);\r\n if (data) {\r\n styleMap.style = data;\r\n styleMap.StyleID = styleId;\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n \r\n if (styleMap.EntityTypeID && styleMap.style) {\r\n this.styleMappingsLoaded[styleMap.EntityTypeID] = true;\r\n this.processTilesetFeatureCheckQueue();\r\n this.processQueue();\r\n }\r\n }\r\n this.styleMappingLoaded = true;\r\n\r\n if (!this.disposed) {\r\n await this.processTilesetFeatureCheckQueue();\r\n this.processQueue();\r\n }\r\n }\r\n\r\n private getEntityTypeIdsFromModelTree(modelTree: any): string[] {\r\n const entityTypeIds: string[] = [];\r\n this.digEntityTypeIdsFromModelTreeBranch(modelTree, entityTypeIds);\r\n return entityTypeIds;\r\n }\r\n \r\n private digEntityTypeIdsFromModelTreeBranch(branch: any, arr: string[]): void {\r\n if (branch) {\r\n // Does not yet include this entity type id.\r\n if (branch.typeId && !arr.includes(branch.typeId)) {\r\n arr.push(branch.typeId);\r\n }\r\n \r\n if (branch.children) {\r\n for (let i = 0; i < branch.children.length; i++) {\r\n let child = branch.children[i];\r\n this.digEntityTypeIdsFromModelTreeBranch(child, arr);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private async processTilesetFeatureCheckQueue(): Promise<void> {\r\n const BATCH_CHECK_SIZE = 1000;\r\n\r\n return new Promise((res) => {\r\n clearInterval(this.queueCheckInterval);\r\n this.queueCheckInterval = setInterval(() => {\r\n if (this.disposed) {\r\n clearInterval(this.queueCheckInterval);\r\n res();\r\n return;\r\n }\r\n \r\n // Construct batch for loaded styles.\r\n let batch = [];\r\n \r\n if (this.styleMappingLoaded) {\r\n batch = this.recordCheckQueue.splice(0, BATCH_CHECK_SIZE);\r\n }\r\n else {\r\n for (let i = 0; i < this.recordCheckQueue.length; i++) {\r\n let hash = this.recordCheckQueue[i];\r\n let entity = this.loadedEntities[hash];\r\n if (entity) {\r\n let entityTypeId = entity.entityTypeId;\r\n if (entityTypeId) {\r\n if (this.styleMappingsLoaded[entityTypeId] == true) {\r\n batch.push(hash);\r\n }\r\n }\r\n }\r\n \r\n if (batch.length >= BATCH_CHECK_SIZE) {\r\n break;\r\n }\r\n }\r\n \r\n for (let i = 0; i < batch.length; i++) {\r\n let hash = batch[i];\r\n let index = this.recordCheckQueue.findIndex(x => x == hash);\r\n if (index > -1) {\r\n this.recordCheckQueue.splice(index, 1);\r\n }\r\n }\r\n }\r\n \r\n if (batch.length) {\r\n for (let i = 0; i < batch.length; i++) {\r\n let item = batch[i];\r\n let entity = this.loadedEntities[item];\r\n if (entity) {\r\n this.queueTilesetFeatureStyle(entity);\r\n }\r\n }\r\n }\r\n else {\r\n clearInterval(this.queueCheckInterval);\r\n res();\r\n }\r\n }, 50);\r\n });\r\n }\r\n\r\n private queueTilesetFeatureStyle(entity: VisualsRegister.IVisualRego): void {\r\n if (this.styleMappingLoaded || this.styleMappingsLoaded[<string>entity.entityTypeId] == true) {\r\n const needsData = this.getTilesetFeatureNeedsFullData(entity.entityId, <string>entity.entityTypeId);\r\n if (needsData) {\r\n if (this.recordLoadQueue.findIndex(x => x == entity.entityId)) {\r\n this.recordLoadQueue.push(entity.entityId);\r\n }\r\n }\r\n else {\r\n this.styleTilesetFeature(entity);\r\n }\r\n }\r\n else {\r\n this.recordCheckQueue.push(entity.entityId);\r\n }\r\n }\r\n\r\n private styleTilesetFeature(entity: VisualsRegister.IVisualRego): void {\r\n this.styleTilesetFeatureFullData(entity, <any>null); \r\n }\r\n\r\n private styleTilesetFeatureFullData(entity: VisualsRegister.IVisualRego, data: Entity.IEntity): void {\r\n const style = <Style.IEntitySettings>this.getTilesetFeatureStyle(entity.entityId, <string>entity.entityTypeId);\r\n if (!style) {\r\n return;\r\n }\r\n const bColor = style.modelStyle?.fillColor ? Calculator.GetColor(style.modelStyle.fillColor, data, []) : null;\r\n if (bColor != null) {\r\n const cColor = colorToCColor(bColor);\r\n const visual = entity.visual;\r\n if (visual && visual instanceof Cesium.Cesium3DTileFeature) {\r\n visual.color = cColor;\r\n }\r\n }\r\n }\r\n\r\n private getTilesetFeatureStyle(entityId: string, entityTypeId: string): Style.IEntitySettings {\r\n // Locate what style is applicable to the feature.\r\n let style: Style.IStyle = <any>null;\r\n if (entityTypeId) {\r\n style = <Style.IStyle>this.styleMapping.find(x => x.EntityTypeID == entityTypeId)?.style;\r\n }\r\n if (!style) {\r\n style = this.fallbackStyle;\r\n }\r\n if (!style) {\r\n return <any>null;\r\n }\r\n if (!(<Style.IEntitySettings>style.Settings)?.modelStyle?.customize) {\r\n return <any>null;\r\n }\r\n return <Style.IEntitySettings>style.Settings;\r\n }\r\n\r\n private getTilesetFeatureNeedsFullData(entityId: string, entityTypeId: string): boolean {\r\n const style = this.getTilesetFeatureStyle(entityId, entityTypeId);\r\n if (!style) {\r\n return false;\r\n }\r\n const fill = style?.modelStyle?.fillColor;\r\n if (!fill || fill.length <= 0) {\r\n return false;\r\n }\r\n return fill[0].type != 0;\r\n }\r\n }\r\n}","import { BruceApi, EntityCoords, MenuItem, Tileset, TilesetCad } from \"bruce-models\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\nimport * as Cesium from \"cesium\";\r\nimport { TilesetRenderEngine } from \"../../tileset-render-engine\";\r\n\r\n/**\r\n * Manager for rendering CAD tilesets.\r\n * CAD tilesets are referred to as \"MODEL\" tilesets in some other areas of Bruce code.\r\n */\r\nexport namespace TilesetCadRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private item: MenuItem.Item.ICadTileset;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private visualsManager: VisualsRegister.Register;\r\n private cTileset: Cesium.Cesium3DTileset = <any>null;\r\n private styler: TilesetRenderEngine.CadStyler = <any>null;\r\n\r\n \r\n constructor(viewer: Cesium.Viewer, visualsManager: VisualsRegister.Register, apiGetter: BruceApi.IGetter, item: MenuItem.Item.ICadTileset) {\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n \r\n public async Init(): Promise<void> {\r\n const tilesetId = this.item.tileset?.TilesetID;\r\n if (!tilesetId) {\r\n return;\r\n }\r\n\r\n const api = this.apiGetter.getApi();\r\n const tileset = await Tileset.Get(api, tilesetId);\r\n if (!tileset) {\r\n return;\r\n }\r\n\r\n const settings = <TilesetCad.ISettings>tileset.settings;\r\n const rootId = settings.rootEntityId;\r\n const coords: EntityCoords.IEntityCoords = await EntityCoords.GetEntityCoords(api, rootId);\r\n\r\n const cTileset = this.cTileset = TilesetRenderEngine.Render({\r\n apiGetter: this.apiGetter,\r\n tileset: tileset,\r\n viewer: this.viewer,\r\n coords: coords\r\n });\r\n cTileset.readyPromise.then(() => {\r\n try {\r\n if (this.disposed || cTileset.isDestroyed()) {\r\n return;\r\n }\r\n this.onCTilesetLoad();\r\n this.styler = new TilesetRenderEngine.CadStyler(api, this.cTileset, <number>this.item.styleId, <any[]>this.item.StyleMapping);\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n });\r\n cTileset.tileLoad.addEventListener((tile) => {\r\n try {\r\n this.mapCTile(tile);\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n });\r\n }\r\n\r\n private onCTilesetLoad(): void {\r\n if (this.item.FlyTo) {\r\n this.viewer.zoomTo(\r\n this.cTileset,\r\n new Cesium.HeadingPitchRange(0.0, -0.5, this.cTileset.boundingSphere.radius / 4.0)\r\n );\r\n }\r\n }\r\n\r\n private mapCTile(tile: Cesium.Cesium3DTile): void {\r\n const content = tile?.content;\r\n if (!content) {\r\n return;\r\n }\r\n for (let i = 0; i < content.featuresLength; i++) {\r\n const feature = content.getFeature(i);\r\n \r\n let rego = this.mapTilesetFeature(feature);\r\n if (rego?.entityId) {\r\n this.styler.QueueEntities([rego]);\r\n }\r\n }\r\n }\r\n\r\n private mapTilesetFeature(feature: Cesium.Cesium3DTileFeature): VisualsRegister.IVisualRego {\r\n let version = feature?.tileset?.extensions?.modelTree?.version;\r\n if (!version) {\r\n version = 1;\r\n }\r\n \r\n let rego: VisualsRegister.IVisualRego = {\r\n entityId: <any>null,\r\n entityTypeId: <any>null,\r\n menuItemId: this.item.id,\r\n priority: 0,\r\n visual: feature\r\n };\r\n if (version == 1) {\r\n const pathStr = (<Cesium.Cesium3DTileFeature><any>feature).getProperty(\"BrucePath\");\r\n if (pathStr != undefined) {\r\n let path = pathStr.split(\"|\");\r\n let entityTypeId = this.getEntityTypeByPath(path);\r\n rego.entityTypeId = entityTypeId;\r\n rego.entityId = path[path.length - 1];\r\n }\r\n }\r\n else if (version == 2) {\r\n const geomId = +feature.getProperty(\"GeomId\");\r\n if (geomId != null && (!!geomId || geomId == 0)) {\r\n const meta = this.getMetaByGeomId(geomId, feature.tileset);\r\n if (meta) {\r\n rego.entityId = meta.id;\r\n rego.entityTypeId = meta.typeId;\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"Unhandled tileset tree version = \" + version);\r\n }\r\n if (rego?.entityId) {\r\n this.visualsManager.Add(rego);\r\n return rego;\r\n }\r\n return <any>null;\r\n }\r\n\r\n private getMetaByGeomId(geomId: number, tileset: Cesium.Cesium3DTileset): { id: string, typeId: string } {\r\n let modelTree: any = tileset?.extensions?.modelTree;\r\n return this.digMetaByGeomId(geomId, modelTree, []);\r\n }\r\n \r\n private digMetaByGeomId(geomId: number, branch: any, path: string[]): { id: string, typeId: string } {\r\n path = [].concat(<any>path);\r\n path.push(branch.id);\r\n\r\n if (branch.geomId == geomId) {\r\n return { id: path[path.length - 1], typeId: branch.typeId };\r\n }\r\n else if (branch.children) {\r\n for (let i = 0; i < branch.children.length; i++) {\r\n let meta = this.digMetaByGeomId(geomId, branch.children[i], path);\r\n if (meta) {\r\n return meta;\r\n }\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n private getEntityTypeByPath(path: string[]): string {\r\n let modelTree: any = this.cTileset?.extensions?.modelTree;\r\n if (modelTree) {\r\n let data = this.digModelTreeByPath(modelTree, path);\r\n if (data) {\r\n return data.typeId;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n \r\n private digModelTreeByPath(branch: any, path: string[]): any {\r\n // Dereference.\r\n path = JSON.parse(JSON.stringify(path));\r\n \r\n if (path.length <= 0) {\r\n return null;\r\n }\r\n let pathTop = path.splice(0, 1)[0];\r\n if (pathTop != branch.id) {\r\n return null;\r\n }\r\n else if (path.length == 0 && pathTop == branch.id) {\r\n return branch;\r\n }\r\n else if (branch.children) {\r\n for (let i = 0; i < branch.children.length; i++) {\r\n let foundPath = this.digModelTreeByPath(branch.children[i], path);\r\n if (foundPath) {\r\n return foundPath;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.disposed = true;\r\n if (this.cTileset) {\r\n const viewer = this.viewer;\r\n if (!viewer?.isDestroyed() && this.viewer.scene.primitives.contains(this.cTileset)) {\r\n this.cTileset.show = false;\r\n this.viewer.scene.primitives.remove(this.cTileset);\r\n }\r\n this.cTileset = null;\r\n }\r\n this.styler?.Dispose();\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n }\r\n }\r\n}","import { Entity, EntityFilterGetter } from \"bruce-models\";\r\nimport { BruceApi } from \"bruce-models/dist/types/api/bruce-api\";\r\nimport { IDictionary } from \"bruce-models/dist/types/common/dictionary\";\r\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\r\n\r\nfunction createFilterGetterCacheKey(params: SharedGetters.IFilterGetterParams): string {\r\n let cacheKey = \"\";\r\n cacheKey += params.api.GetBaseUrl();\r\n cacheKey += params.typeId;\r\n cacheKey += params.batchSize;\r\n cacheKey += JSON.stringify(params.attrFilter);\r\n return cacheKey;\r\n}\r\n\r\nexport namespace SharedGetters {\r\n export interface IFilterGetterParams {\r\n api: BruceApi.Api;\r\n typeId: string;\r\n batchSize: number;\r\n attrFilter: Entity.Filter.V1.AttrFilter;\r\n monitor: CesiumViewMonitor;\r\n }\r\n\r\n export class Cache {\r\n private data: IDictionary<EntityFilterGetter.Getter> = {};\r\n\r\n\r\n public GetOrCreateFilterGetter(params: IFilterGetterParams): EntityFilterGetter.Getter {\r\n const cacheKey = createFilterGetterCacheKey(params);\r\n let getter = this.data[cacheKey];\r\n if (!getter) {\r\n getter = new EntityFilterGetter.Getter(\r\n params.api,\r\n params.monitor,\r\n params.typeId,\r\n params.batchSize,\r\n params.attrFilter\r\n );\r\n this.data[cacheKey] = getter;\r\n }\r\n return getter;\r\n }\r\n }\r\n}","import { BruceApi, Cartes, EntitySource, IDictionary, MenuItem, ObjectUtils } from \"bruce-models\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\nimport * as Cesium from \"cesium\";\r\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\r\n\r\ninterface ICesiumFeatureExtended extends Cesium.Cesium3DTileFeature {\r\n _orgColor: Cesium.Color;\r\n _counter: number;\r\n}\r\n\r\nconst MAX_BATCHES = 2;\r\nconst BATCH_SIZE = 30;\r\nconst BATCH_DELAY = 200;\r\nconst MAX_RANGE = 3000;\r\n\r\nexport namespace TilesetOsmRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private item: MenuItem.Item.IOsm;\r\n private monitor: CesiumViewMonitor;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private visualsManager: VisualsRegister.Register;\r\n private cTileset: Cesium.Cesium3DTileset = <any>null;\r\n\r\n private counter: number = 0;\r\n private get count(): number {\r\n return ++this.counter;\r\n }\r\n\r\n private _loadedCesiumEntities: IDictionary<VisualsRegister.IVisualRego> = {};\r\n private totalLoaded: number = 0;\r\n private featureQueue: ICesiumFeatureExtended[] = [];\r\n private sourceId: number = <any>null;\r\n private entityTypeId: string = <any>null;\r\n private queueCheckInterval: any = null;\r\n private processingQueue: number = 0;\r\n\r\n\r\n constructor(viewer: Cesium.Viewer, visualsManager: VisualsRegister.Register, apiGetter: BruceApi.IGetter, monitor: CesiumViewMonitor, item: MenuItem.Item.IOsm) {\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n this.monitor = monitor;\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n clearInterval(this.queueCheckInterval);\r\n if (this.cTileset) {\r\n const viewer = this.viewer;\r\n if (!viewer?.isDestroyed() && this.viewer.scene.primitives.contains(this.cTileset)) {\r\n this.cTileset.show = false;\r\n this.viewer.scene.primitives.remove(this.cTileset);\r\n }\r\n this.cTileset = null;\r\n }\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n this.featureQueue = [];\r\n }\r\n\r\n public async Init(): Promise<void> {\r\n const menuItem = this.item;\r\n this.sourceId = <number><any>menuItem.BruceEntity?.SourceId;\r\n this.entityTypeId = <string>menuItem.BruceEntity?.[\"EntityType.ID\"];\r\n\r\n this.cTileset = Cesium.createOsmBuildings();\r\n this.cTileset.show = true;\r\n\r\n if (this.sourceId) {\r\n if (menuItem.ghostLoading == true) {\r\n this.cTileset.style = new Cesium.Cesium3DTileStyle({\r\n color: \"rgba(255, 255, 250, 0.98)\"\r\n });\r\n }\r\n \r\n this.viewer.scene.primitives.add(this.cTileset);\r\n this.cTileset.tileLoad.addEventListener((tile) => {\r\n try {\r\n this.mapCTile(tile);\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n });\r\n \r\n this.queueCheckInterval = setInterval(() => {\r\n if (this.featureQueue.length > 0) {\r\n this.processQueue();\r\n }\r\n }, 5000);\r\n }\r\n else {\r\n this.viewer.scene.primitives.add(this.cTileset);\r\n }\r\n }\r\n\r\n private async mapCTile(tile: Cesium.Cesium3DTile): Promise<void> {\r\n if (this.sourceId) {\r\n let content = tile?.content;\r\n if (!content) {\r\n return;\r\n }\r\n for (let i = 0; i < content.featuresLength; i++) {\r\n let feature: ICesiumFeatureExtended = <ICesiumFeatureExtended>content.getFeature(i);\r\n if (feature._counter == null) {\r\n feature._counter = this.count;\r\n }\r\n if (feature._orgColor == null) {\r\n feature._orgColor = feature.color;\r\n }\r\n this.featureQueue.push(feature);\r\n }\r\n this.processQueue();\r\n }\r\n }\r\n\r\n private async processQueue(): Promise<void> {\r\n if (this.processingQueue >= MAX_BATCHES) {\r\n return;\r\n }\r\n else if (this.Disposed) {\r\n return;\r\n }\r\n this.processingQueue += 1;\r\n \r\n let batch: ICesiumFeatureExtended[] = [];\r\n let rerun: boolean = false;\r\n \r\n try {\r\n batch = this.getVisualsForBatch();\r\n \r\n if (batch.length > 0) {\r\n await this.mapTileBatch(batch);\r\n }\r\n \r\n if (this.totalLoaded > 8000) {\r\n rerun = this.removeFarAwayBatch();\r\n }\r\n else {\r\n rerun = this.featureQueue.length > 0 && batch.length > 0;\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n finally {\r\n setTimeout(() => {\r\n this.processingQueue -= 1;\r\n if (rerun) {\r\n this.processQueue();\r\n }\r\n }, BATCH_DELAY);\r\n }\r\n }\r\n\r\n private getVisualsForBatch(): ICesiumFeatureExtended[] {\r\n const batch: ICesiumFeatureExtended[] = [];\r\n const features = this.featureQueue;\r\n const bounds = this.monitor.GetBounds();\r\n const rect = bounds?.east ? new Cesium.Rectangle(\r\n Cesium.Math.toRadians(bounds.west), \r\n Cesium.Math.toRadians(bounds.south), \r\n Cesium.Math.toRadians(bounds.east), \r\n Cesium.Math.toRadians(bounds.north)\r\n ) : null;\r\n\r\n if (rect) {\r\n for (let i = 0; i < features.length; i++) {\r\n const feature = features[i];\r\n if (feature) {\r\n const featureLon = feature.getProperty(\"cesium#longitude\");\r\n const featureLat = feature.getProperty(\"cesium#latitude\");\r\n if (featureLon && featureLat) {\r\n const carto = Cesium.Cartographic.fromDegrees(featureLon, featureLat, 0);\r\n const isIn = Cesium.Rectangle.contains(rect, carto);\r\n if (isIn) {\r\n const isClose = this.getIsVisualWithinRange(feature, MAX_RANGE);\r\n if (isClose) {\r\n batch.push(feature);\r\n if (batch.length >= BATCH_SIZE) {\r\n return batch;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return batch;\r\n }\r\n\r\n private getIsVisualWithinRange(visual: ICesiumFeatureExtended, range: number): boolean {\r\n const featureLon = visual.getProperty(\"cesium#longitude\");\r\n const featureLat = visual.getProperty(\"cesium#latitude\");\r\n if (featureLon && featureLat) {\r\n const pos = Cesium.Cartesian3.fromDegrees(featureLon, featureLat, 0);\r\n const camPoint = this.monitor.GetTarget();\r\n const camPos = camPoint?.latitude ? Cesium.Cartesian3.fromDegrees(camPoint.longitude, camPoint.latitude, camPoint.altitude) : null;\r\n if (camPos && Cartes.ValidateCartes3(camPos) && Cartes.ValidateCartes3(pos)) {\r\n let distance = Cesium.Cartesian3.distance(pos, camPos);\r\n if (distance != null && distance <= range) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private async mapTileBatch(features: ICesiumFeatureExtended[]): Promise<void> {\r\n const featureIds: string[] = [];\r\n const featureMap: ICesiumFeatureExtended[] = [];\r\n \r\n for (let i = 0; i < features.length; i++) {\r\n const feature = features[i];\r\n const featureId = feature.getProperty(\"elementId\");\r\n if (featureId) {\r\n featureMap.push(feature);\r\n featureIds.push(featureId + \"\");\r\n }\r\n\r\n const index = this.featureQueue.findIndex(x => x._counter == feature._counter);\r\n if (index > -1) {\r\n this.featureQueue.splice(index, 1);\r\n }\r\n }\r\n\r\n const api = this.apiGetter.getApi();\r\n const bIds = await EntitySource.GetEntityIdsBySourceKeys(api, this.sourceId, featureIds);\r\n\r\n for (let i = 0; i < featureIds.length; i++) {\r\n const id = featureIds[i];\r\n let bId = bIds[id];\r\n if (!bId) {\r\n bId = ObjectUtils.UId();\r\n }\r\n const feature = featureMap[i];\r\n if (this.item.ghostLoading == true) {\r\n feature.color = feature._orgColor;\r\n }\r\n const rego = {\r\n entityId: bId,\r\n menuItemId: this.item.id,\r\n priority: 0,\r\n visual: feature,\r\n entityTypeId: this.entityTypeId,\r\n sourceId: this.sourceId\r\n };\r\n this.visualsManager.Add(rego);\r\n this._loadedCesiumEntities[bId] = rego;\r\n }\r\n }\r\n\r\n private removeFarAwayBatch(): boolean {\r\n let removed = 0;\r\n let keys = Object.keys(this._loadedCesiumEntities);\r\n for (let i = 0; i < keys.length; i++) {\r\n let key = keys[i];\r\n let rego = this._loadedCesiumEntities[key];\r\n if (rego) {\r\n if (!this.getIsVisualWithinRange(rego.visual as ICesiumFeatureExtended, MAX_RANGE)) {\r\n this.visualsManager.Remove(rego.entityId, this.item.id);\r\n this._loadedCesiumEntities[key] = <any>null;\r\n delete this._loadedCesiumEntities[key];\r\n this.totalLoaded -= 1;\r\n removed += 1;\r\n \r\n if (removed >= BATCH_SIZE) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n \r\n return removed > 0;\r\n }\r\n }\r\n}","import { BruceApi, MenuItem, Tileset, TilesetEntities } from \"bruce-models\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\nimport * as Cesium from \"cesium\";\r\nimport { TilesetRenderEngine } from \"../../tileset-render-engine\";\r\n\r\nexport namespace TilesetEntitiesRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private item: MenuItem.Item.ICadTileset;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private visualsManager: VisualsRegister.Register;\r\n private cTileset: Cesium.Cesium3DTileset = <any>null;\r\n private typeId: string;\r\n \r\n constructor(\r\n viewer: Cesium.Viewer, \r\n visualsManager: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n item: MenuItem.Item.ICadTileset\r\n ) {\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public async Init(): Promise<void> {\r\n const tilesetId = this.item.tileset?.TilesetID;\r\n if (!tilesetId) {\r\n return;\r\n }\r\n\r\n const api = this.apiGetter.getApi();\r\n const tileset = await Tileset.Get(api, tilesetId);\r\n if (!tileset) {\r\n return;\r\n }\r\n this.typeId = (tileset.settings as TilesetEntities.ISettings).entityTypeId;\r\n\r\n const cTileset = this.cTileset = TilesetRenderEngine.Render({\r\n apiGetter: this.apiGetter,\r\n tileset: tileset,\r\n viewer: this.viewer\r\n });\r\n cTileset.readyPromise.then(() => {\r\n try {\r\n if (this.disposed || this.viewer.isDestroyed()) {\r\n return;\r\n }\r\n this.onCTilesetLoad();\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n });\r\n cTileset.tileLoad.addEventListener((tile) => {\r\n this.mapCTile(tile);\r\n });\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.disposed = true;\r\n if (this.cTileset) {\r\n const viewer = this.viewer;\r\n if (!viewer?.isDestroyed() && this.viewer.scene.primitives.contains(this.cTileset)) {\r\n this.cTileset.show = false;\r\n this.viewer.scene.primitives.remove(this.cTileset);\r\n }\r\n this.cTileset = null;\r\n }\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n }\r\n\r\n private onCTilesetLoad(): void {\r\n if (this.item.FlyTo) {\r\n this.viewer.zoomTo(\r\n this.cTileset,\r\n new Cesium.HeadingPitchRange(0.0, -0.5, this.cTileset.boundingSphere.radius / 4.0)\r\n );\r\n }\r\n }\r\n \r\n private mapCTile(tile: Cesium.Cesium3DTile): void {\r\n const content = tile?.content;\r\n if (!content) {\r\n return;\r\n }\r\n for (let i = 0; i < content.featuresLength; i++) {\r\n const feature = content.getFeature(i);\r\n this.mapTilesetFeature(feature);\r\n }\r\n }\r\n\r\n private mapTilesetFeature(feature: Cesium.Cesium3DTileFeature): void {\r\n const id = feature.getProperty(\"BruceId\");\r\n if (id) {\r\n const rego: VisualsRegister.IVisualRego = {\r\n entityId: id,\r\n entityTypeId: this.typeId,\r\n menuItemId: this.item.id,\r\n priority: 0,\r\n visual: feature\r\n };\r\n this.visualsManager.Add(rego);\r\n }\r\n }\r\n }\r\n}","import { BruceApi, MenuItem, Tileset } from \"bruce-models\";\r\nimport { RenderManager } from \"../render-manager\";\r\nimport * as Cesium from \"cesium\";\r\nimport { TilesetRenderEngine } from \"../../tileset-render-engine\";\r\n\r\nexport namespace TilesetPointcloudRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private item: MenuItem.Item.IPointcloud;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private cTileset: Cesium.Cesium3DTileset = <any>null;\r\n\r\n \r\n constructor(viewer: Cesium.Viewer, apiGetter: BruceApi.IGetter, item: MenuItem.Item.IPointcloud) {\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.item = item;\r\n }\r\n \r\n public async Init(): Promise<void> {\r\n const tilesetId = this.item.tileset?.TilesetID;\r\n if (!tilesetId) {\r\n return;\r\n }\r\n\r\n const api = this.apiGetter.getApi();\r\n const tileset = await Tileset.Get(api, tilesetId);\r\n if (!tileset) {\r\n return;\r\n }\r\n\r\n const cTileset = this.cTileset = TilesetRenderEngine.Render({\r\n apiGetter: this.apiGetter,\r\n tileset: tileset,\r\n viewer: this.viewer,\r\n coords: null\r\n });\r\n cTileset.readyPromise.then(() => {\r\n try {\r\n if (this.disposed || this.viewer.isDestroyed()) {\r\n return;\r\n }\r\n this.onCTilesetLoad();\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n });\r\n }\r\n\r\n private onCTilesetLoad(): void {\r\n if (this.item.FlyTo) {\r\n this.viewer.zoomTo(\r\n this.cTileset,\r\n new Cesium.HeadingPitchRange(0.0, -0.5, this.cTileset.boundingSphere.radius / 4.0)\r\n );\r\n }\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.disposed = true;\r\n if (this.cTileset) {\r\n const viewer = this.viewer;\r\n if (!viewer?.isDestroyed() && this.viewer.scene.primitives.contains(this.cTileset)) {\r\n this.cTileset.show = false;\r\n this.viewer.scene.primitives.remove(this.cTileset);\r\n }\r\n this.cTileset = null;\r\n }\r\n }\r\n }\r\n}","import { BruceApi, ClientFile, MenuItem } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { RenderManager } from \"../render-manager\";\r\n\r\nexport namespace DataSourceStaticKmlManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private item: MenuItem.Item.IKml;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private dataSource: Cesium.KmlDataSource = null;\r\n\r\n constructor(viewer: Cesium.Viewer, apiGetter: BruceApi.IGetter, item: MenuItem.Item.IKml) {\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.item = item;\r\n }\r\n\r\n public async Init(): Promise<void> {\r\n const fileId = this.item.KML?.ClientFile?.ID;\r\n if (!fileId) {\r\n return;\r\n }\r\n const api = this.apiGetter.getApi();\r\n const fileUrl = ClientFile.GetUrl(api, fileId);\r\n this.dataSource = new Cesium.KmlDataSource();\r\n this.dataSource.load(fileUrl);\r\n this.viewer.dataSources.add(this.dataSource);\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.disposed = true;\r\n if (\r\n this.dataSource && \r\n !this.viewer?.isDestroyed() && \r\n this.viewer.dataSources.contains(this.dataSource)\r\n ) {\r\n this.viewer.dataSources.remove(this.dataSource);\r\n }\r\n }\r\n }\r\n}","import { BruceApi, BruceEvent, 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\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.Type;\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 interface IRenderParams {\r\n apiGetter: BruceApi.IGetter;\r\n item: MenuItem.IItem;\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\r\n \r\n public constructor(viewer: Cesium.Viewer, visualsRegister?: VisualsRegister.Register) {\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 ids children.\r\n * Will return the enabled item id.\r\n * @param params\r\n * @param recursive\r\n * @returns \r\n */\r\n public async RenderItem(params: IRenderParams, recursive: boolean = true): Promise<string> {\r\n if (this.viewer.isDestroyed()) {\r\n return null;\r\n }\r\n let rItem = this.items.find(x => x.id == params.item.id);\r\n if (!rItem) {\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 }\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 this.viewer, \r\n this.visualsRegister, \r\n params.apiGetter, \r\n this.sharedMonitor,\r\n <MenuItem.Item.IBruceEntities>params.item,\r\n this.sharedGetters\r\n );\r\n break;\r\n case MenuItem.EType.EntitiesLoaded:\r\n rItem.renderManager = new EntitiesLoadedRenderManager.Manager(\r\n this.viewer, \r\n this.visualsRegister, \r\n params.apiGetter, \r\n this.sharedMonitor, \r\n <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 this.viewer, \r\n this.visualsRegister, \r\n params.apiGetter, \r\n this.sharedMonitor,\r\n <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 this.viewer, \r\n this.visualsRegister, \r\n params.apiGetter, \r\n this.sharedMonitor, \r\n <MenuItem.Item.IBruceEntity>params.item\r\n );\r\n break;\r\n case MenuItem.EType.CadTileset:\r\n rItem.renderManager = new TilesetCadRenderManager.Manager(this.viewer, this.visualsRegister, params.apiGetter, <MenuItem.Item.ICadTileset>params.item);\r\n break;\r\n case MenuItem.EType.Osm:\r\n rItem.renderManager = new TilesetOsmRenderManager.Manager(this.viewer, this.visualsRegister, params.apiGetter, this.sharedMonitor, <MenuItem.Item.IOsm>params.item);\r\n break;\r\n case MenuItem.EType.PointCloud:\r\n rItem.renderManager = new TilesetPointcloudRenderManager.Manager(this.viewer, params.apiGetter, <MenuItem.Item.IPointcloud>params.item);\r\n break;\r\n case MenuItem.EType.EntityTileset:\r\n rItem.renderManager = new TilesetEntitiesRenderManager.Manager(this.viewer, this.visualsRegister, params.apiGetter, <MenuItem.Item.IEntitiesTileset>params.item);\r\n break;\r\n case MenuItem.EType.Kml:\r\n rItem.renderManager = new DataSourceStaticKmlManager.Manager(this.viewer, params.apiGetter, <MenuItem.Item.IKml>params.item);\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 await rItem.renderManager.Init();\r\n }\r\n }\r\n if (params.item.Children && recursive) {\r\n for (let i = 0; i < params.item.Children.length; i++) {\r\n const childId = await 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 return rItem.id;\r\n }\r\n \r\n /**\r\n * Disables a menu item by ids id.\r\n * This will disable all children as well.\r\n * @param id \r\n * @param recursive\r\n */\r\n public async RemoveItemById(id: string, recursive: boolean = true): Promise<void> {\r\n if (this.viewer.isDestroyed()) {\r\n return;\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 await this.RemoveItemById(child.id);\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}","import { BruceApi, Entity, 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 RenderHelper {\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: IParams, entityIds: string[]): Promise<string> {\r\n const item: MenuItem.Item.IEntityIds = {\r\n Caption: \"Rendering Loaded Entities\",\r\n Type: <MenuItem.EType><any>MenuItem.EType.EntitiesLoaded,\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 return await params.manager.RenderItem({\r\n apiGetter: params.apiGetter,\r\n item: item\r\n });\r\n }\r\n\r\n export async function RenderEntityTypes(params: IParams, typeIds: string[]): Promise<string[]> {\r\n const renderedItemIds: string[] = [];\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 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 renderedItemIds;\r\n }\r\n\r\n export async function RenderEntityFilter(params: IParams, filter: Entity.Filter.V1.IFilter): Promise<string> {\r\n const item: MenuItem.Item.IBruceEntities = {\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 showAllLayers: true,\r\n showAllLayersExcludeBelow: false,\r\n tagIds: []\r\n };\r\n return await params.manager.RenderItem({\r\n apiGetter: params.apiGetter,\r\n item: item\r\n });\r\n }\r\n\r\n export async function RenderMenuItems(params: IParams, menuItems: MenuItem.IItem[]): Promise<string[]> {\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 renderedItemIds;\r\n }\r\n\r\n export async function RenderTileset(params: IParams, tilesetId: string): Promise<string> {\r\n const api = params.apiGetter.getApi();\r\n const tileset = await Tileset.Get(api, tilesetId);\r\n if (tileset.type == Tileset.EType.Cad) {\r\n const menuItem: MenuItem.Item.ICadTileset = {\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 };\r\n return await params.manager.RenderItem({\r\n item: menuItem,\r\n apiGetter: params.apiGetter\r\n });\r\n }\r\n else {\r\n throw(new Error(\"Tileset type not supported.\"));\r\n }\r\n }\r\n\r\n export async function RenderBookmarkItems(params: IParams, viewId: string, bookmarkId: string): Promise<string[]> {\r\n const api = params.apiGetter.getApi();\r\n const view = await ProjectView.Get(api, viewId);\r\n const bookmark = await ProjectViewBookmark.Get(api, viewId, bookmarkId);\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.V2.ISettings;\r\n const bSettings = bookmark.Settings as ProjectViewBookmark.V2.ISettings;\r\n menuItems = vSettings.menuItems;\r\n enabledIds = bSettings.menuItemIds;\r\n }\r\n else {\r\n const vSettings = view.Settings as ProjectView.V1.ISettings;\r\n const bSettings = bookmark.Settings as ProjectViewBookmark.V1.ISettings;\r\n menuItems = vSettings.LayersMenu;\r\n enabledIds = bSettings.selectedItemIds;\r\n }\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 (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 renderedItemIds;\r\n }\r\n}","import { ProjectViewTile, BruceApi, ProjectView, ProjectViewBookmark, ProjectViewLegacyTile, Tileset, TilesetExtTerrainTiles, TilesetMapTiles, TilesetExtMapTiles, ProgramKey } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EnsureNumber } from \"../internal/js-utils\";\r\n\r\nconst DEFAULT_BING_KEY = \"AqL0uYT5T84jiJeX55_b9zJeeP3MX2p1WLOHH4ljIEPZ7ZL2M81bYLzyYeSwuzzl\";\r\nconst DEFAULT_MAPBOX_KEY = \"pk.eyJ1IjoiYWxleHRodW5kZXIiLCJhIjoiY2psbHJxbnN5MTBvbzNxczZwMHNpeTI0MCJ9.fdoj2QW_7n8RV4e0NCFgZA\";\r\n\r\nconst re = /[\\0-\\x1F\\x7F-\\x9F\\xAD\\u0378\\u0379\\u037F-\\u0383\\u038B\\u038D\\u03A2\\u0528-\\u0530\\u0557\\u0558\\u0560\\u0588\\u058B-\\u058E\\u0590\\u05C8-\\u05CF\\u05EB-\\u05EF\\u05F5-\\u0605\\u061C\\u061D\\u06DD\\u070E\\u070F\\u074B\\u074C\\u07B2-\\u07BF\\u07FB-\\u07FF\\u082E\\u082F\\u083F\\u085C\\u085D\\u085F-\\u089F\\u08A1\\u08AD-\\u08E3\\u08FF\\u0978\\u0980\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09FC-\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A76-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF2-\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B55\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B78-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BFB-\\u0C00\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C34\\u0C3A-\\u0C3C\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5A-\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C77\\u0C80\\u0C81\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDD\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0D01\\u0D04\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D45\\u0D49\\u0D4F-\\u0D56\\u0D58-\\u0D5F\\u0D64\\u0D65\\u0D76-\\u0D78\\u0D80\\u0D81\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DF1\\u0DF5-\\u0E00\\u0E3B-\\u0E3E\\u0E5C-\\u0E80\\u0E83\\u0E85\\u0E86\\u0E89\\u0E8B\\u0E8C\\u0E8E-\\u0E93\\u0E98\\u0EA0\\u0EA4\\u0EA6\\u0EA8\\u0EA9\\u0EAC\\u0EBA\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F48\\u0F6D-\\u0F70\\u0F98\\u0FBD\\u0FCD\\u0FDB-\\u0FFF\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u137D-\\u137F\\u139A-\\u139F\\u13F5-\\u13FF\\u169D-\\u169F\\u16F1-\\u16FF\\u170D\\u1715-\\u171F\\u1737-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17DE\\u17DF\\u17EA-\\u17EF\\u17FA-\\u17FF\\u180F\\u181A-\\u181F\\u1878-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191D-\\u191F\\u192C-\\u192F\\u193C-\\u193F\\u1941-\\u1943\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DB-\\u19DD\\u1A1C\\u1A1D\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1A9F\\u1AAE-\\u1AFF\\u1B4C-\\u1B4F\\u1B7D-\\u1B7F\\u1BF4-\\u1BFB\\u1C38-\\u1C3A\\u1C4A-\\u1C4C\\u1C80-\\u1CBF\\u1CC8-\\u1CCF\\u1CF7-\\u1CFF\\u1DE7-\\u1DFB\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FC5\\u1FD4\\u1FD5\\u1FDC\\u1FF0\\u1FF1\\u1FF5\\u1FFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u2072\\u2073\\u208F\\u209D-\\u209F\\u20BB-\\u20CF\\u20F1-\\u20FF\\u218A-\\u218F\\u23F4-\\u23FF\\u2427-\\u243F\\u244B-\\u245F\\u2700\\u2B4D-\\u2B4F\\u2B5A-\\u2BFF\\u2C2F\\u2C5F\\u2CF4-\\u2CF8\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D71-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E3C-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u2FFF\\u3040\\u3097\\u3098\\u3100-\\u3104\\u312E-\\u3130\\u318F\\u31BB-\\u31BF\\u31E4-\\u31EF\\u321F\\u32FF\\u4DB6-\\u4DBF\\u9FCD-\\u9FFF\\uA48D-\\uA48F\\uA4C7-\\uA4CF\\uA62C-\\uA63F\\uA698-\\uA69E\\uA6F8-\\uA6FF\\uA78F\\uA794-\\uA79F\\uA7AB-\\uA7F7\\uA82C-\\uA82F\\uA83A-\\uA83F\\uA878-\\uA87F\\uA8C5-\\uA8CD\\uA8DA-\\uA8DF\\uA8FC-\\uA8FF\\uA954-\\uA95E\\uA97D-\\uA97F\\uA9CE\\uA9DA-\\uA9DD\\uA9E0-\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A\\uAA5B\\uAA7C-\\uAA7F\\uAAC3-\\uAADA\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F-\\uABBF\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBC2-\\uFBD2\\uFD40-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFE\\uFDFF\\uFE1A-\\uFE1F\\uFE27-\\uFE2F\\uFE53\\uFE67\\uFE6C-\\uFE6F\\uFE75\\uFEFD-\\uFF00\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFDF\\uFFE7\\uFFEF-\\uFFFB\\uFFFE\\uFFFF]/g;\r\n\r\n/**\r\n * Prepares a legacy imagery name for comparison.\r\n * Legacy data did not have ids... we do what we can.\r\n * @param name \r\n * @returns \r\n */\r\nfunction prepLegacyName(name: string): string {\r\n if (!name) {\r\n return \"\";\r\n }\r\n name = name.replace(/\\s/g, \"\");\r\n name = name.replace(re, \"\")\r\n name = name.toLowerCase();\r\n if (name === \"cwt\") {\r\n name = \"cesiumworldterrain\";\r\n }\r\n return name;\r\n}\r\n\r\n/**\r\n * Constructs an terrain provider for a default terrain type.\r\n * Warning: This does not add it to the viewer.\r\n * @param id \r\n * @returns \r\n */\r\nfunction renderDefaultTerrTile(id: ProjectViewTile.EDefaultTerrain): Cesium.TerrainProvider {\r\n let provider: Cesium.TerrainProvider;\r\n switch (id) {\r\n case ProjectViewTile.EDefaultTerrain.CesiumWorldTerrain:\r\n provider = Cesium.createWorldTerrain({\r\n requestVertexNormals: true,\r\n requestWaterMask: false\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultTerrain.FlatTerrain:\r\n provider = <any>new Cesium.EllipsoidTerrainProvider();\r\n break;\r\n case ProjectViewTile.EDefaultTerrain.LINZ:\r\n provider = <any>new Cesium.CesiumTerrainProvider({\r\n url: \"https://s3-ap-southeast-2.amazonaws.com/digitalnewzealand/PROD/Tilesets/nz-dem\",\r\n requestVertexNormals: true,\r\n });\r\n break;\r\n }\r\n return provider;\r\n}\r\n\r\n/**\r\n * Maps a legacy terrain's name to a default terrain id.\r\n * @param name \r\n * @returns \r\n */\r\nfunction legacyTerrIdToDefaultId(name: string): ProjectViewTile.EDefaultTerrain {\r\n name = prepLegacyName(name);\r\n switch (name) {\r\n case \"cesiumworldterrain\":\r\n return ProjectViewTile.EDefaultTerrain.CesiumWorldTerrain;\r\n case \"linz\":\r\n return ProjectViewTile.EDefaultTerrain.LINZ;\r\n case \"flatterrain\":\r\n return ProjectViewTile.EDefaultTerrain.FlatTerrain;\r\n }\r\n}\r\n\r\n/**\r\n * Returns if a given legacy terrain's name correspondings to a default source.\r\n * @param name \r\n * @returns \r\n */\r\nfunction isLegacyTerrainDefault(name: string): boolean {\r\n name = legacyTerrIdToDefaultId(name);\r\n return ProjectViewTile.DefaultTerrains.find(x => x.id == name) != null;\r\n}\r\n\r\n/**\r\n * Returns a best attempt at a unique id from a given legacy terrain source.\r\n * @param source \r\n * @returns \r\n */\r\nfunction createLegacyTerrId(source: ProjectViewLegacyTile.ITerrainSource): string {\r\n if (!source) {\r\n return \"\";\r\n }\r\n if (isLegacyTerrainDefault(source.Name)) {\r\n return source.Name;\r\n }\r\n if (source.SourceUrl) {\r\n return source.SourceUrl;\r\n }\r\n return \"\";\r\n}\r\n\r\n/**\r\n * Returns a best attempt at a unique id from a given legacy imagery source.\r\n * @param source \r\n * @returns \r\n */\r\nfunction createLegacyImageryId(source: ProjectViewLegacyTile.IMapSource): string {\r\n if (!source) {\r\n return \"\";\r\n }\r\n if (isLegacyImageryDefault(source.Name)) {\r\n return source.Name;\r\n }\r\n if (source.SourceUrl) {\r\n return source.SourceUrl;\r\n }\r\n return \"\";\r\n}\r\n\r\n/**\r\n * Turns Cesium collection of enabled imageries into an array.\r\n * @param viewer \r\n * @returns \r\n */\r\nfunction gatherEnabledImageries(viewer: Cesium.Viewer): Cesium.ImageryLayer[] {\r\n const collection = viewer.imageryLayers;\r\n const layers: Cesium.ImageryLayer[] = [];\r\n for (let i = 0; i < collection.length; i++) {\r\n const layer = collection.get(i);\r\n layers.push(layer);\r\n }\r\n return layers;\r\n}\r\n\r\nasync function findKey(apiGetter: BruceApi.IGetter, keyId: string, defaultKey: string) {\r\n let key: string = null;\r\n try {\r\n const pKey = await ProgramKey.Get(apiGetter.getApi(), keyId);\r\n key = pKey.Key;\r\n }\r\n catch (e) {\r\n let doLog = true;\r\n if (e && typeof e === \"object\") {\r\n if (e.Code == \"NotFound\") {\r\n doLog = false;\r\n }\r\n }\r\n if (doLog) {\r\n console.error(e);\r\n }\r\n }\r\n return key && key.length ? key : defaultKey;\r\n}\r\n\r\n/**\r\n * Constructs an imagery provider for a default imagery type.\r\n * Warning: This does not add it to the viewer.\r\n * @param apiGetter\r\n * @param id \r\n * @returns \r\n */\r\nasync function renderDefaultMapTile(apiGetter: BruceApi.IGetter, id: ProjectViewTile.EDefaultImagery): Promise<Cesium.ImageryProvider> {\r\n let provider: Cesium.ImageryProvider;\r\n switch (id) {\r\n case ProjectViewTile.EDefaultImagery.BingMapsAerial:\r\n provider = new Cesium.BingMapsImageryProvider({\r\n url: \"https://dev.virtualearth.net\",\r\n mapStyle: Cesium.BingMapsStyle.AERIAL,\r\n key: await findKey(apiGetter, ProgramKey.EProgramId.BingMaps, DEFAULT_BING_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.BingMapsAerialWithLabels:\r\n provider = new Cesium.BingMapsImageryProvider({\r\n url: \"https://dev.virtualearth.net\",\r\n mapStyle: Cesium.BingMapsStyle.AERIAL_WITH_LABELS,\r\n key: await findKey(apiGetter, ProgramKey.EProgramId.BingMaps, DEFAULT_BING_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.BingMapsRoads:\r\n provider = new Cesium.BingMapsImageryProvider({\r\n url: \"https://dev.virtualearth.net\",\r\n mapStyle: Cesium.BingMapsStyle.ROAD_ON_DEMAND,\r\n key: await findKey(apiGetter, ProgramKey.EProgramId.BingMaps, DEFAULT_BING_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.MapboxSatellite:\r\n provider = new Cesium.MapboxImageryProvider({\r\n mapId: \"mapbox.satellite\",\r\n accessToken: await findKey(apiGetter, ProgramKey.EProgramId.Mapbox, DEFAULT_MAPBOX_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.MapBoxStreets:\r\n provider = new Cesium.MapboxStyleImageryProvider({\r\n styleId: \"satellite-streets-v11\",\r\n accessToken: await findKey(apiGetter, ProgramKey.EProgramId.Mapbox, DEFAULT_MAPBOX_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.MapBoxStreetsClassic:\r\n provider = new Cesium.MapboxStyleImageryProvider({\r\n styleId: \"streets-v11\",\r\n accessToken: await findKey(apiGetter, ProgramKey.EProgramId.Mapbox, DEFAULT_MAPBOX_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.EsriWorldImagery:\r\n provider = new Cesium.ArcGisMapServerImageryProvider({\r\n url:\"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer\",\r\n enablePickFeatures: false\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.EsriWorldStreetMap:\r\n provider = new Cesium.ArcGisMapServerImageryProvider({\r\n url:\"https://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer\",\r\n enablePickFeatures: false\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.EsriNationalGeographic:\r\n provider = new Cesium.ArcGisMapServerImageryProvider({\r\n url:\"https://services.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/\",\r\n enablePickFeatures: false\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.OpenStreetMap:\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: \"https://a.tile.openstreetmap.org/\"\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.StamenWaterColor:\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: \"https://stamen-tiles.a.ssl.fastly.net/watercolor/\"\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.StamenToner:\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: \"https://stamen-tiles.a.ssl.fastly.net/toner/\"\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.Grid:\r\n provider = new Cesium.GridImageryProvider({\r\n tilingScheme: new Cesium.GeographicTilingScheme(),\r\n cells: 0,\r\n color: Cesium.Color.fromCssColorString(\"rgb(97, 151, 237)\"),\r\n glowColor: Cesium.Color.fromCssColorString(\"rgb(54, 54, 54)\"),\r\n glowWidth: 4,\r\n backgroundColor: Cesium.Color.TRANSPARENT,\r\n tileWidth: 256,\r\n tileHeight: 256,\r\n canvasSize: 256\r\n });\r\n break;\r\n }\r\n return provider;\r\n}\r\n\r\n/**\r\n * Maps a legacy imagery's name to a default imagery id.\r\n * @param name \r\n * @returns \r\n */\r\nfunction legacyMapIdToDefaultId(name: string): ProjectViewTile.EDefaultImagery {\r\n name = prepLegacyName(name);\r\n switch (name) {\r\n case \"bingmapsaerial\":\r\n return ProjectViewTile.EDefaultImagery.BingMapsAerial;\r\n case \"bingmapsaerialwithlabels\":\r\n return ProjectViewTile.EDefaultImagery.BingMapsAerialWithLabels;\r\n case \"bingmapsroads\":\r\n return ProjectViewTile.EDefaultImagery.BingMapsRoads;\r\n case \"mapboxsatellite\":\r\n return ProjectViewTile.EDefaultImagery.MapboxSatellite;\r\n case \"mapboxstreets\":\r\n return ProjectViewTile.EDefaultImagery.MapBoxStreets;\r\n case \"mapboxstreetsclassic\":\r\n return ProjectViewTile.EDefaultImagery.MapBoxStreetsClassic;\r\n case \"esriworldimagery\":\r\n return ProjectViewTile.EDefaultImagery.EsriWorldImagery;\r\n case \"esriworldstreetmap\":\r\n return ProjectViewTile.EDefaultImagery.EsriWorldStreetMap;\r\n case \"esrinationalgeographic\":\r\n return ProjectViewTile.EDefaultImagery.EsriNationalGeographic;\r\n case \"openstreetmap\":\r\n return ProjectViewTile.EDefaultImagery.OpenStreetMap;\r\n case \"stamenwatercolor\":\r\n return ProjectViewTile.EDefaultImagery.StamenWaterColor;\r\n case \"stamentoner\":\r\n return ProjectViewTile.EDefaultImagery.StamenToner;\r\n case \"grid\":\r\n return ProjectViewTile.EDefaultImagery.Grid;\r\n }\r\n}\r\n\r\n/**\r\n * Returns if a given legacy imagery's name correspondings to a default source.\r\n * @param name \r\n * @returns \r\n */\r\nfunction isLegacyImageryDefault(name: string): boolean {\r\n name = legacyMapIdToDefaultId(name);\r\n return ProjectViewTile.DefaultImagery.find(x => x.id == name) != null;\r\n}\r\n\r\n/**\r\n * We don't need to provide the \".\" in the file extension to Cesium's providers.\r\n * @param ext \r\n * @returns \r\n */\r\nfunction prepareFileExt(ext: string) {\r\n if (!ext) {\r\n return null;\r\n }\r\n ext = ext.replace(\".\", \"\");\r\n return ext;\r\n}\r\n\r\nexport namespace TileRenderEngine {\r\n /**\r\n * Legacy data did name comparisons instead of ids.\r\n * We need to strip spacing, remove special characters, and make lowercase before comparison...\r\n * @param nameA \r\n * @param nameB \r\n */\r\n export function CompareLegacyNames(nameA: string, nameB: string): boolean {\r\n nameA = prepLegacyName(nameA);\r\n nameB = prepLegacyName(nameB);\r\n return nameA === nameB;\r\n }\r\n\r\n export namespace Map {\r\n export namespace V1 {\r\n export interface ILayerExt extends Cesium.ImageryLayer {\r\n _bId?: string;\r\n _bName?: string;\r\n }\r\n \r\n export interface IViewParams {\r\n bookmarkId: string;\r\n viewId: string;\r\n apiGetter: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n \r\n // TODO: How is render engine supposed to know about this?\r\n // We need a generic way for this information be feed from clients.\r\n ignoreIds?: string[];\r\n }\r\n \r\n export interface IParams {\r\n data: ProjectViewLegacyTile.IMapSource;\r\n apiGetter: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n }\r\n \r\n export async function Render(params: IParams): Promise<ILayerExt> {\r\n const enabled: ILayerExt[] = gatherEnabledImageries(params.viewer);\r\n const tile = params.data;\r\n const bId = createLegacyImageryId(tile);\r\n \r\n let layer: ILayerExt = <ILayerExt>enabled.find(x => x._bId == bId);\r\n if (layer) {\r\n // Already exists.\r\n }\r\n else if (isLegacyImageryDefault(tile.Name)) {\r\n const defaultId = legacyMapIdToDefaultId(tile.Name);\r\n const provider = await renderDefaultMapTile(params.apiGetter, defaultId);\r\n if (provider) {\r\n layer = <ILayerExt>new Cesium.ImageryLayer(provider);\r\n }\r\n }\r\n else if (tile.SourceUrl) {\r\n let provider: Cesium.ImageryProvider = <any>null;\r\n let min = tile.Minimum;\r\n let max = tile.Maximum;\r\n if (min != undefined && min <= -1) {\r\n min = undefined;\r\n }\r\n if (max != undefined && max <= -1) {\r\n max = undefined;\r\n }\r\n \r\n switch (tile.Type) {\r\n case \"BruceImagery\":\r\n provider = new Cesium.UrlTemplateImageryProvider({\r\n url: tile.SourceUrl,\r\n tileHeight: 256,\r\n tileWidth: 256\r\n });\r\n break;\r\n case \"ArcGisImagery\":\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: tile.SourceUrl,\r\n fileExtension: prepareFileExt(tile.FileExtension),\r\n minimumLevel: min,\r\n maximumLevel: max\r\n });\r\n break;\r\n case \"TileMapImagery\":\r\n provider = new Cesium.TileMapServiceImageryProvider({\r\n url: tile.SourceUrl,\r\n fileExtension: prepareFileExt(tile.FileExtension),\r\n minimumLevel: min,\r\n maximumLevel: max\r\n });\r\n break;\r\n case \"OpenStreetMapImagery\":\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: tile.SourceUrl,\r\n fileExtension: prepareFileExt(tile.FileExtension),\r\n minimumLevel: min,\r\n maximumLevel: max\r\n });\r\n break;\r\n case \"MapBoxImagery\":\r\n var mapboxKey = tile.ProgramKey ? tile.ProgramKey : await findKey(params.apiGetter, ProgramKey.EProgramId.Mapbox, null);\r\n provider = new Cesium.UrlTemplateImageryProvider({\r\n url: \"https://api.mapbox.com/styles/v1/\"\r\n + tile.MapBoxUsername + \"/\" + tile.MapBoxID +\r\n \"/tiles/256/{z}/{x}/{y}?access_token=\"\r\n + mapboxKey\r\n });\r\n break;\r\n }\r\n if (provider) {\r\n layer = <ILayerExt>new Cesium.ImageryLayer(provider);\r\n }\r\n }\r\n \r\n if (layer) {\r\n layer._bId = bId;\r\n layer._bName = tile.Name;\r\n if (!params.viewer.imageryLayers.contains(layer)) {\r\n params.viewer.imageryLayers.add(layer);\r\n }\r\n }\r\n return layer;\r\n }\r\n \r\n export async function RenderView(params: IViewParams): Promise<void> {\r\n const api = params.apiGetter.getApi();\r\n \r\n const view = await ProjectView.Get(api, params.viewId) as ProjectView.V1.IView;\r\n let bookmark: ProjectViewBookmark.V1.IBookmark = <any>null;\r\n if (params.bookmarkId) {\r\n bookmark = await ProjectViewBookmark.Get(api, params.viewId, params.bookmarkId) as ProjectViewBookmark.V1.IBookmark;\r\n }\r\n \r\n const vSettings = view.Settings;\r\n const bSettings = bookmark?.Settings;\r\n \r\n const data: ProjectViewLegacyTile.IMapSource[] = [];\r\n const dataNames: string[] = [];\r\n if (bSettings?.imagery) {\r\n for (let i = 0; i < bSettings.imagery.length; i++) {\r\n const source = bSettings.imagery[i];\r\n dataNames.push(source.title);\r\n }\r\n }\r\n else if (vSettings?.DefaultMapTiles) {\r\n dataNames.push(vSettings.DefaultMapTiles);\r\n }\r\n const tiles = vSettings?.CesiumMapSources ?? [];\r\n await ProjectViewLegacyTile.MergeMapTemplateData(params.apiGetter, tiles, vSettings?.CesiumMapSources == null);\r\n \r\n for (let i = 0; i < dataNames.length; i++) {\r\n const name = dataNames[i];\r\n for (let j = 0; j < tiles.length; j++) {\r\n const tile = tiles[j];\r\n if (CompareLegacyNames(tile.Name, name)) {\r\n data.push(tile);\r\n break;\r\n }\r\n } \r\n }\r\n \r\n let enabled: ILayerExt[] = gatherEnabledImageries(params.viewer);\r\n const layers: Cesium.ImageryLayer[] = [];\r\n \r\n // Gather layers we want to render.\r\n // Any new layer is added to viewer at the bottom.\r\n if (params.ignoreIds) {\r\n for (let i = 0; i < params.ignoreIds.length; i++) {\r\n const id = params.ignoreIds[i];\r\n const layer = enabled.find((x) => {\r\n const layer = x as ILayerExt;\r\n if (layer._bId === id) {\r\n return true;\r\n }\r\n });\r\n if (layer) {\r\n layers.push(layer);\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < data.length; i++) {\r\n const tile = data[i];\r\n const layer = await Render({\r\n apiGetter: params.apiGetter,\r\n viewer: params.viewer,\r\n data: tile,\r\n });\r\n if (layer) {\r\n layers.push(layer);\r\n }\r\n }\r\n \r\n // Sort currently enabled (after new ones added) to match desired order.\r\n enabled = gatherEnabledImageries(params.viewer);\r\n enabled.sort((a, b) => {\r\n const indexA = layers.indexOf(a);\r\n const indexB = layers.indexOf(b);\r\n if (indexA < 0 && indexB < 0) {\r\n return 0;\r\n }\r\n if (indexA < 0) {\r\n return 1;\r\n }\r\n if (indexB < 0) {\r\n return -1;\r\n }\r\n return indexA - indexB;\r\n });\r\n \r\n // Move enabled layers to match desired order.\r\n // Remove any layers that aren't in enabled list.\r\n for (let i = 0; i < enabled.length; i++) {\r\n const layer = enabled[i];\r\n if (layers.includes(layer)) {\r\n params.viewer.imageryLayers.raiseToTop(layer);\r\n }\r\n else {\r\n params.viewer.imageryLayers.remove(layer);\r\n }\r\n }\r\n }\r\n }\r\n\r\n export namespace V2 {\r\n export interface IProviderExt extends Cesium.ImageryLayer {\r\n _bMeta?: ProjectViewTile.ITileMeta;\r\n }\r\n\r\n export interface IParams {\r\n apiGetter: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n tiles: ProjectViewTile.IBookmarkImagery[];\r\n }\r\n\r\n export async function GetOrCreateLayer(\r\n viewer: Cesium.Viewer, \r\n apiGetter: BruceApi.IGetter, \r\n meta: ProjectViewTile.ITileMeta\r\n ): Promise<Cesium.ImageryLayer> {\r\n // Don't create a new layer if one already exists.\r\n const enabled = gatherEnabledImageries(viewer);\r\n for (let i = 0; i < enabled.length; i++) {\r\n const layer = enabled[i];\r\n const layerMeta = (layer as IProviderExt)._bMeta;\r\n if (layerMeta && layerMeta.tilesetId === meta.tilesetId && layerMeta.accountId === meta.accountId) {\r\n return layer;\r\n }\r\n }\r\n\r\n const defaultImg = meta.accountId ? null : ProjectViewTile.DefaultImagery.find(\r\n x => x.id === meta.tilesetId\r\n );\r\n\r\n let provider: Cesium.ImageryProvider = <any>null;\r\n if (defaultImg) {\r\n provider = await renderDefaultMapTile(apiGetter, defaultImg.id);\r\n }\r\n else {\r\n const api = apiGetter.getApi(meta.accountId);\r\n const tileset = await Tileset.Get(api, meta.tilesetId);\r\n if (tileset.type === Tileset.EType.GeoMap) {\r\n provider = new Cesium.TileMapServiceImageryProvider({\r\n url: Tileset.GetPublicFileUrl(api, meta.tilesetId, \"\"),\r\n fileExtension: \"png\"\r\n });\r\n }\r\n else if (tileset.type === Tileset.EType.ExternalGeoMap) {\r\n const settings = tileset.settings as TilesetExtMapTiles.ISettings;\r\n switch (settings.mapType) {\r\n case TilesetExtMapTiles.EType.CesiumIon:\r\n provider = new Cesium.IonImageryProvider({\r\n assetId: settings.ionId,\r\n accessToken: await findKey(apiGetter, ProgramKey.EProgramId.CesiumIon, null)\r\n });\r\n break;\r\n case TilesetExtMapTiles.EType.MapBoxImagery:\r\n var mapboxKey = settings.mapBoxKey ? settings.mapBoxKey : await findKey(apiGetter, ProgramKey.EProgramId.Mapbox, null);\r\n provider = new Cesium.UrlTemplateImageryProvider({\r\n url: \"https://api.mapbox.com/styles/v1/\"\r\n + settings.mapBoxAccount + \"/\" + settings.mapBoxStyleId +\r\n \"/tiles/256/{z}/{x}/{y}?access_token=\"\r\n + mapboxKey\r\n });\r\n break;\r\n case TilesetExtMapTiles.EType.OpenStreetMapImagery:\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: settings.url,\r\n fileExtension: prepareFileExt(settings.sourceExt)\r\n });\r\n break;\r\n case TilesetExtMapTiles.EType.TileMapImagery:\r\n provider = new Cesium.TileMapServiceImageryProvider({\r\n url: settings.url,\r\n fileExtension: prepareFileExt(settings.sourceExt)\r\n });\r\n break;\r\n }\r\n }\r\n else if (tileset.type === Tileset.EType.EntitiesMap) {\r\n provider = new Cesium.UrlTemplateImageryProvider({\r\n url: Tileset.GetPublicFileUrl(api, meta.tilesetId, \"{z}/{x}/{y}.png\"),\r\n tileHeight: 256,\r\n tileWidth: 256\r\n });\r\n }\r\n }\r\n if (provider) {\r\n // We need some way to add meta without appending to layers.\r\n // Adding to layers triggers an event, if meta is missing then we'll not know what imagery is enabled.\r\n // In the meantime we use \"lowerToBottom\" to trigger a secondary event with updated data...\r\n const layer: IProviderExt = viewer.imageryLayers.addImageryProvider(provider);\r\n layer._bMeta = meta;\r\n viewer.imageryLayers.lowerToBottom(layer);\r\n return layer;\r\n }\r\n return null;\r\n }\r\n\r\n export async function Render(params: IParams) {\r\n // Ensure layers exist for all enabled sources.\r\n for (let i = 0; i < params.tiles.length; i++) {\r\n const enabled = params.tiles[i];\r\n await GetOrCreateLayer(params.viewer, params.apiGetter, {\r\n accountId: enabled.accountId,\r\n tilesetId: enabled.tilesetId,\r\n })\r\n }\r\n\r\n const curEnabled = params.viewer.imageryLayers;\r\n const toDisable: IProviderExt[] = [];\r\n const curEnabledArr: IProviderExt[] = [];\r\n\r\n for (let i = 0; i < curEnabled.length; i++) {\r\n const layer = curEnabled.get(i) as IProviderExt;\r\n const meta = layer?._bMeta;\r\n const disable = !params.tiles.find(x => x.accountId === meta?.accountId && x.tilesetId === meta?.tilesetId);\r\n if (disable) {\r\n toDisable.push(layer);\r\n }\r\n else {\r\n curEnabledArr.push(layer);\r\n }\r\n }\r\n for (let i = 0; i < toDisable.length; i++) {\r\n params.viewer.imageryLayers.remove(toDisable[i]);\r\n }\r\n\r\n for (let i = 0; i < params.tiles.length; i++) {\r\n const enabled = params.tiles[i];\r\n const layer = curEnabledArr.find(x => x._bMeta?.accountId === enabled.accountId && x._bMeta?.tilesetId === enabled.tilesetId);\r\n if (layer) {\r\n params.viewer.imageryLayers.raiseToTop(layer);\r\n layer.alpha = EnsureNumber(enabled.alpha == null ? 1 : enabled.alpha);\r\n layer.brightness = EnsureNumber(enabled.brightness == null ? 1 : enabled.brightness);\r\n layer.contrast = EnsureNumber(enabled.contrast == null ? 1 : enabled.contrast);\r\n layer.hue = EnsureNumber(enabled.hue == null ? 0 : enabled.hue);\r\n layer.saturation = EnsureNumber(enabled.saturation == null ? 1 : enabled.saturation);\r\n layer.gamma = EnsureNumber(enabled.gamma == null ? 1 : enabled.gamma);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n export namespace Terrain {\r\n export namespace V1 {\r\n export interface IProviderExt extends Cesium.CesiumTerrainProvider {\r\n _bId: string;\r\n _bName: string;\r\n }\r\n\r\n export interface IParams {\r\n data: ProjectViewLegacyTile.ITerrainSource;\r\n viewer: Cesium.Viewer;\r\n }\r\n \r\n export interface IViewParams {\r\n bookmarkId: string;\r\n viewId: string;\r\n apiGetter: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export function Render(params: IParams): void {\r\n const bId = createLegacyTerrId(params.data);\r\n const curProvider = params.viewer.terrainProvider as IProviderExt;\r\n if (curProvider._bId && curProvider._bId === bId) {\r\n return;\r\n }\r\n \r\n let provider: IProviderExt = <any>null;\r\n if (isLegacyTerrainDefault(params.data.Name)) {\r\n const id = legacyTerrIdToDefaultId(params.data.Name);\r\n provider = renderDefaultTerrTile(id) as IProviderExt;\r\n }\r\n else if (params.data.SourceUrl) {\r\n provider = <any>new Cesium.CesiumTerrainProvider({\r\n url: <string>params.data.SourceUrl,\r\n requestWaterMask: params.data.RequestWaterMask,\r\n requestVertexNormals: true\r\n });\r\n }\r\n if (provider) {\r\n provider._bId = bId;\r\n provider._bName = params.data?.Name;\r\n params.viewer.terrainProvider = provider;\r\n }\r\n }\r\n \r\n export async function RenderView(params: IViewParams): Promise<void> {\r\n const api = params.apiGetter.getApi();\r\n const view = await ProjectView.Get(api, params.viewId) as ProjectView.V1.IView;\r\n let bookmark: ProjectViewBookmark.V1.IBookmark = <any>null;\r\n if (params.bookmarkId) {\r\n bookmark = await ProjectViewBookmark.Get(api, params.viewId, params.bookmarkId) as ProjectViewBookmark.V1.IBookmark;\r\n }\r\n \r\n const vSettings = view.Settings;\r\n const bSettings = bookmark?.Settings;\r\n\r\n let terrainTiles = vSettings?.CesiumTerrainSources ?? [];\r\n let terrainTile: ProjectViewLegacyTile.ITerrainSource = <any>null;\r\n let terrainTileName: string = <any>null;\r\n if (bookmark?.Settings?.terrain) {\r\n terrainTileName = bSettings.terrain;\r\n }\r\n else {\r\n terrainTileName = <string>vSettings?.DefaultTerrain;\r\n }\r\n await ProjectViewLegacyTile.MergeTerrainTemplateData(params.apiGetter, terrainTiles, vSettings?.CesiumTerrainSources == null);\r\n for (let i = 0; i < terrainTiles.length; i++) {\r\n const tile = terrainTiles[i];\r\n if (TileRenderEngine.CompareLegacyNames(tile.Name, terrainTileName)) {\r\n terrainTile = tile;\r\n break;\r\n }\r\n }\r\n if (terrainTile) {\r\n Render({\r\n data: terrainTile,\r\n viewer: params.viewer,\r\n });\r\n }\r\n }\r\n }\r\n\r\n export namespace V2 {\r\n export interface IProviderExt extends Cesium.CesiumTerrainProvider {\r\n _bMeta?: ProjectViewTile.ITileMeta;\r\n }\r\n\r\n export interface IParams {\r\n apiGetter: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n tile: ProjectViewTile.IBookmarkTerrain;\r\n }\r\n\r\n export async function Render(params: IParams): Promise<void> {\r\n // Already enabled.\r\n const enabledMeta = (params.viewer.terrainProvider as IProviderExt)?._bMeta;\r\n if (\r\n enabledMeta?.tilesetId === params.tile.tilesetId &&\r\n enabledMeta?.accountId === params.tile.accountId\r\n ) {\r\n return;\r\n }\r\n\r\n const defaultTerr = params.tile.accountId ? null : ProjectViewTile.DefaultTerrains.find(\r\n x => x.id === params.tile.tilesetId\r\n );\r\n\r\n let provider: IProviderExt = null;\r\n if (defaultTerr) {\r\n provider = renderDefaultTerrTile(defaultTerr.id) as IProviderExt;\r\n }\r\n else {\r\n const api = params.apiGetter.getApi(params.tile.accountId);\r\n const tileset = await Tileset.Get(api, params.tile.tilesetId);\r\n\r\n let url: string;\r\n let vertexes: boolean = true;\r\n if (tileset.type === Tileset.EType.Terrain) {\r\n url = Tileset.GetPublicFileUrl(api, tileset.id, \"\");\r\n }\r\n else if (tileset.type === Tileset.EType.ExternalTerrain) {\r\n const settings = tileset.settings as TilesetExtTerrainTiles.ISettings;\r\n url = settings.url;\r\n vertexes = settings.requestVertexNormals == null ? true : settings.requestVertexNormals;\r\n }\r\n else {\r\n console.error(\"Invalid tileset type.\", tileset);\r\n }\r\n \r\n if (url) {\r\n provider = new Cesium.CesiumTerrainProvider({\r\n url: url,\r\n requestVertexNormals: vertexes\r\n });\r\n }\r\n }\r\n\r\n if (provider) {\r\n provider._bMeta = {\r\n accountId: params.tile.accountId,\r\n tilesetId: params.tile.tilesetId\r\n };\r\n params.viewer.terrainProvider = provider;\r\n }\r\n }\r\n }\r\n }\r\n}","import { BruceApi, Camera, Carto, ProjectView, ProjectViewBookmark, ProjectViewTile, } from \"bruce-models\";\r\nimport { MenuItemManager } from \"./menu-item-manager\";\r\nimport { RenderHelper } from \"./render-helper\";\r\nimport * as Cesium from \"cesium\";\r\nimport { TileRenderEngine } from \"./tile-render-engine\";\r\nimport { EnsureNumber } from \"../internal/js-utils\";\r\n\r\n// TODO: Move these to the data model.\r\nconst MIN_SHADOW_SIZE = 1024;\r\nconst MAX_SHADOW_SIZE = 32768;\r\n\r\nasync function renderV1(\r\n params: ViewRenderEngine.IRenderParams,\r\n bookmark: ProjectViewBookmark.V1.IBookmark,\r\n view: ProjectView.V1.IView\r\n) {\r\n const vSettings = view.Settings as ProjectView.V1.ISettings;\r\n const bSettings = bookmark?.Settings as ProjectViewBookmark.V1.ISettings;\r\n\r\n await TileRenderEngine.Terrain.V1.RenderView({\r\n apiGetter: params.apiGetter,\r\n bookmarkId: <string>params.bookmarkId,\r\n viewer: params.manager.Viewer,\r\n viewId: params.viewId,\r\n });\r\n\r\n await TileRenderEngine.Map.V1.RenderView({\r\n apiGetter: params.apiGetter,\r\n bookmarkId: <string>params.bookmarkId,\r\n viewer: params.manager.Viewer,\r\n viewId: params.viewId,\r\n ignoreIds: []\r\n });\r\n\r\n // TODO: Other scene settings.\r\n // TODO: Hidden entities.\r\n // TODO: Rendered relationships.\r\n\r\n let frustum = bSettings?.cameraFrustum;\r\n if (frustum == null) {\r\n frustum = Camera.EFrustum.Perspective;\r\n }\r\n const scene = params.manager.Viewer.scene;\r\n const curFrustum = scene.camera.frustum instanceof Cesium.OrthographicFrustum ? Camera.EFrustum.Orthographic : Camera.EFrustum.Perspective;\r\n if (curFrustum != frustum) {\r\n if (frustum == Camera.EFrustum.Perspective) {\r\n scene.camera.switchToPerspectiveFrustum();\r\n scene.screenSpaceCameraController.enableTilt = true;\r\n }\r\n else {\r\n scene.camera.switchToOrthographicFrustum();\r\n scene.screenSpaceCameraController.enableTilt = false;\r\n }\r\n params.skipTransition = true;\r\n }\r\n\r\n const camera = bookmark.Camera;\r\n const pos = Cesium.Cartesian3.fromDegrees(\r\n +camera.position.longitude, \r\n +camera.position.latitude, \r\n +camera.position.height\r\n );\r\n params.manager.Viewer.scene.camera.flyTo({\r\n destination: pos,\r\n orientation: {\r\n heading: +camera.heading,\r\n pitch: +camera.pitch,\r\n roll: +camera.roll\r\n },\r\n duration: params.skipTransition ? 0 : 2\r\n });\r\n\r\n let go = bookmark?.Settings?.groundOcclusion;\r\n if (go == null) {\r\n go = vSettings?.GroundOcclusion;\r\n }\r\n if (go == null) {\r\n go = false;\r\n }\r\n params.manager.Viewer.scene.globe.depthTestAgainstTerrain = go;\r\n\r\n const enabledItems = params.manager.GetEnabledItemIds();\r\n const newItemIds = bSettings?.selectedItemIds ?? [];\r\n for (const id of enabledItems) {\r\n if (newItemIds.indexOf(id) === -1) {\r\n params.manager.RemoveItemById(id);\r\n }\r\n }\r\n if (params.bookmarkId) {\r\n await RenderHelper.RenderBookmarkItems({\r\n apiGetter: params.apiGetter,\r\n manager: params.manager,\r\n }, params.viewId, params.bookmarkId);\r\n }\r\n}\r\n\r\nasync function renderV2(\r\n params: ViewRenderEngine.IRenderParams,\r\n bookmark: ProjectViewBookmark.V2.IBookmark,\r\n view: ProjectView.V2.IView\r\n) {\r\n const viewer = params.manager.Viewer;\r\n const scene = viewer.scene;\r\n\r\n const vSettings = view.Settings as ProjectView.V2.ISettings;\r\n const bSettings = (bookmark?.Settings ?? {}) as ProjectViewBookmark.V2.ISettings;\r\n const defaults = vSettings.defaults ?? {};\r\n\r\n let camera = (bookmark.Camera ?? {}) as ProjectViewBookmark.V2.ICamera;\r\n if (!Carto.ValidateCarto(camera)) {\r\n camera = {\r\n ...camera,\r\n altitude: defaults.camera?.altitude,\r\n latitude: defaults.camera?.latitude,\r\n longitude: defaults.camera?.longitude,\r\n heading: defaults.camera?.heading,\r\n pitch: defaults.camera?.pitch,\r\n roll: defaults.camera?.roll\r\n }\r\n }\r\n\r\n let newLens = camera.cameraFrustum;\r\n if (newLens == null) {\r\n newLens = defaults.camera?.cameraFrustum;\r\n }\r\n if (newLens == null) {\r\n // TODO: Need global default.\r\n newLens = Camera.EFrustum.Perspective;\r\n }\r\n const curLens = scene.camera.frustum instanceof Cesium.OrthographicFrustum ? \r\n Camera.EFrustum.Orthographic : \r\n Camera.EFrustum.Perspective;\r\n\r\n if (newLens != curLens) {\r\n if (newLens == Camera.EFrustum.Perspective) {\r\n scene.camera.switchToPerspectiveFrustum();\r\n scene.screenSpaceCameraController.enableTilt = true;\r\n }\r\n else {\r\n scene.camera.switchToOrthographicFrustum();\r\n scene.screenSpaceCameraController.enableTilt = false;\r\n }\r\n }\r\n\r\n let transition = params.skipTransition ? 0 : curLens === newLens ? camera.transition : 0;\r\n if (transition == null) {\r\n transition = defaults.camera?.transition;\r\n }\r\n if (transition == null) {\r\n // TODO: Need global default.\r\n transition = 2000;\r\n }\r\n\r\n if (Carto.ValidateCarto(camera)) {\r\n const pos = Cesium.Cartesian3.fromDegrees(\r\n +camera.longitude, \r\n +camera.latitude, \r\n +camera.altitude\r\n );\r\n scene.camera.flyTo({\r\n destination: pos,\r\n orientation: {\r\n heading: Cesium.Math.toRadians(+camera.heading),\r\n pitch: Cesium.Math.toRadians(+camera.pitch),\r\n roll: Cesium.Math.toRadians(+camera.roll)\r\n },\r\n duration: transition != 0 ? transition / 1000 : 0\r\n });\r\n }\r\n\r\n let gOcclusion = bSettings?.groundOcclusion;\r\n if (gOcclusion == null) {\r\n gOcclusion = defaults?.settings?.groundOcclusion;\r\n }\r\n if (gOcclusion == null) {\r\n // TODO: Need global default.\r\n gOcclusion = true;\r\n }\r\n scene.globe.depthTestAgainstTerrain = Boolean(gOcclusion);\r\n\r\n let shadows = bSettings?.shadows;\r\n if (shadows == null) {\r\n shadows = defaults?.settings?.shadows;\r\n }\r\n if (shadows == null) {\r\n shadows = {\r\n enabled: false\r\n } as ProjectViewBookmark.V2.IShadows;\r\n }\r\n if (shadows.enabled) {\r\n viewer.shadows = true;\r\n viewer.shadowMap.enabled = true;\r\n let size = EnsureNumber(shadows.pixelSize);\r\n if (size < MIN_SHADOW_SIZE) {\r\n size = MIN_SHADOW_SIZE;\r\n } \r\n else if (size > MAX_SHADOW_SIZE) {\r\n size = MAX_SHADOW_SIZE;\r\n }\r\n viewer.shadowMap.size = size;\r\n viewer.shadowMap.softShadows = Boolean(shadows.soften);\r\n }\r\n else {\r\n viewer.shadows = false;\r\n viewer.shadowMap.enabled = false;\r\n }\r\n\r\n let ambientOcclusion = bSettings?.ambientOcclusion;\r\n if (ambientOcclusion == null) {\r\n ambientOcclusion = defaults?.settings?.ambientOcclusion;\r\n }\r\n if (ambientOcclusion == null) {\r\n ambientOcclusion = {\r\n enabled: false\r\n } as ProjectViewBookmark.V2.IAmbientOcclusion;\r\n }\r\n const AO = viewer.scene.postProcessStages.ambientOcclusion;\r\n if (ambientOcclusion.enabled) {\r\n AO.enabled = true;\r\n AO.uniforms.intensity = EnsureNumber(ambientOcclusion.intensity);\r\n AO.uniforms.lengthCap = EnsureNumber(ambientOcclusion.lengthCap);\r\n AO.uniforms.bias = EnsureNumber(ambientOcclusion.bias);\r\n AO.uniforms.stepSize = EnsureNumber(ambientOcclusion.stepSize);\r\n AO.uniforms.blurStepSize = EnsureNumber(ambientOcclusion.blurStepSize);\r\n }\r\n else {\r\n AO.enabled = false;\r\n }\r\n\r\n let lighting = bSettings?.lighting;\r\n if (lighting == null) {\r\n lighting = defaults?.settings?.lighting;\r\n }\r\n if (lighting == null) {\r\n lighting = {\r\n color: Cesium.Color.WHITE.toCssColorString(),\r\n intensity: 2\r\n } as ProjectViewBookmark.V2.ILighting;\r\n }\r\n const light = viewer.scene.light;\r\n if (light) {\r\n light.color = Cesium.Color.fromCssColorString(lighting.color);\r\n light.intensity = EnsureNumber(lighting.intensity);\r\n }\r\n\r\n let quality = bSettings?.quality;\r\n if (quality == null) {\r\n quality = defaults?.settings?.quality;\r\n }\r\n if (quality == null) {\r\n quality = {\r\n fxaa: true\r\n } as ProjectViewBookmark.V2.IQuality;\r\n }\r\n const fxaa = viewer.scene.postProcessStages.fxaa;\r\n fxaa.enabled = Boolean(quality.fxaa);\r\n\r\n let dateTime = bSettings?.dateTime;\r\n if (dateTime == null) {\r\n dateTime = defaults?.settings?.dateTime;\r\n }\r\n if (dateTime != null) {\r\n const clock = viewer.clock;\r\n clock.currentTime = Cesium.JulianDate.fromIso8601(dateTime);\r\n }\r\n\r\n const terrain = bSettings?.terrain ?? defaults.settings?.terrain;\r\n if (terrain) {\r\n await TileRenderEngine.Terrain.V2.Render({\r\n apiGetter: params.apiGetter,\r\n tile: terrain,\r\n viewer: params.manager.Viewer,\r\n });\r\n }\r\n\r\n let selectedIds = bSettings?.selectedEntityIds;\r\n if (selectedIds == null) {\r\n selectedIds = defaults?.settings?.selectedEntityIds;\r\n }\r\n if (selectedIds != null) {\r\n params.manager.VisualsRegister.ClearSelected();\r\n for (let i = 0; i < selectedIds.length; i++) {\r\n const id = selectedIds[i];\r\n params.manager.VisualsRegister.Select(id, false);\r\n }\r\n }\r\n\r\n let imagery = bSettings.imagery ?? defaults.settings?.imagery;\r\n if (imagery == null) {\r\n // TODO: Need global default.\r\n imagery = [\r\n {\r\n accountId: null,\r\n tilesetId: ProjectViewTile.EDefaultImagery.MapboxSatellite,\r\n alpha: 1,\r\n brightness: 1,\r\n contrast: 1,\r\n gamma: 1,\r\n hue: 0,\r\n saturation: 1\r\n }\r\n ];\r\n }\r\n await TileRenderEngine.Map.V2.Render({\r\n apiGetter: params.apiGetter,\r\n tiles: imagery,\r\n viewer: params.manager.Viewer,\r\n });\r\n\r\n // Only disable menu items we don't want.\r\n // Otherwise we cause a flicker of rendered graphics.\r\n // Maybe TODO to such a function for menu item manager.\r\n const curEnabled = params.manager.GetEnabledItemIds();\r\n const newItemIds = bSettings?.menuItemIds ?? [];\r\n for (const id of curEnabled) {\r\n if (newItemIds.indexOf(id) === -1) {\r\n await params.manager.RemoveItemById(id);\r\n }\r\n }\r\n if (params.bookmarkId) {\r\n await RenderHelper.RenderBookmarkItems({\r\n apiGetter: params.apiGetter,\r\n manager: params.manager,\r\n }, params.viewId, params.bookmarkId);\r\n }\r\n}\r\n\r\nexport namespace ViewRenderEngine {\r\n export interface IRenderParams {\r\n viewId: string;\r\n bookmarkId?: string;\r\n skipTransition: boolean;\r\n apiGetter: BruceApi.IGetter;\r\n manager: MenuItemManager.Manager;\r\n }\r\n\r\n export async function Render(params: IRenderParams): Promise<void> {\r\n const api = params.apiGetter.getApi();\r\n const view = await ProjectView.Get(api, params.viewId);\r\n let bookmark = <any>null;\r\n if (params.bookmarkId) {\r\n bookmark = await ProjectViewBookmark.Get(api, params.viewId, params.bookmarkId);\r\n }\r\n if (bookmark && view.DataVersion != bookmark.DataVersion) {\r\n throw new Error(\"View and bookmark settings version mismatch.\");\r\n }\r\n const version = view.DataVersion;\r\n if (version === 2) {\r\n await renderV2(params, bookmark as ProjectViewBookmark.V2.IBookmark, view as ProjectView.V2.IView);\r\n }\r\n else {\r\n await renderV1(params, bookmark as ProjectViewBookmark.V1.IBookmark, view as ProjectView.V1.IView);\r\n }\r\n }\r\n}","import { ProjectViewBookmark, ProjectViewTile } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { TileRenderEngine } from \"../rendering/tile-render-engine\";\r\n\r\nexport namespace ViewUtils {\r\n export function GatherLegacyMapTiles(viewer: Cesium.Viewer): ProjectViewBookmark.V1.IBookmarkImagery[] {\r\n const collection = viewer.imageryLayers;\r\n const tiles: ProjectViewBookmark.V1.IBookmarkImagery[] = [];\r\n for (let i = 0; i < collection.length; i++) {\r\n const layer = collection.get(i) as TileRenderEngine.Map.V1.ILayerExt;\r\n if (layer._bName) {\r\n tiles.push({\r\n alpha: layer.alpha,\r\n brightness: layer.brightness,\r\n contrast: layer.contrast,\r\n hue: layer.hue,\r\n saturation: layer.saturation,\r\n gamma: layer.gamma,\r\n title: layer._bName,\r\n });\r\n }\r\n }\r\n return tiles.reverse();\r\n }\r\n\r\n export function GatherLegacyTerrainTile(viewer: Cesium.Viewer): string {\r\n const enabled = viewer.terrainProvider as TileRenderEngine.Terrain.V1.IProviderExt;\r\n if (enabled?._bName) {\r\n return enabled._bName;\r\n }\r\n return \"flatterrain\";\r\n }\r\n\r\n export function GatherMapTiles(viewer: Cesium.Viewer): ProjectViewTile.IBookmarkImagery[] {\r\n const imagery = viewer.imageryLayers;\r\n const tiles: ProjectViewTile.IBookmarkImagery[] = [];\r\n for (let i = 0; i < imagery.length; i++) {\r\n const provider = imagery.get(i) as TileRenderEngine.Map.V2.IProviderExt;\r\n if (provider._bMeta) {\r\n const idCombo = provider._bMeta.accountId + provider._bMeta.tilesetId;\r\n if (!tiles.find(x => x.accountId + x.tilesetId === idCombo)) {\r\n tiles.push({\r\n accountId: provider._bMeta.accountId,\r\n tilesetId: provider._bMeta.tilesetId,\r\n alpha: provider.alpha,\r\n brightness: provider.brightness,\r\n contrast: provider.contrast,\r\n hue: provider.hue,\r\n saturation: provider.saturation,\r\n gamma: provider.gamma\r\n });\r\n }\r\n }\r\n }\r\n return tiles;\r\n }\r\n\r\n export function GatherTerrainTile(viewer: Cesium.Viewer): ProjectViewTile.IBookmarkTerrain {\r\n const provider = viewer.terrainProvider as TileRenderEngine.Terrain.V2.IProviderExt;\r\n if (provider._bMeta) {\r\n return {\r\n accountId: provider._bMeta.accountId,\r\n tilesetId: provider._bMeta.tilesetId,\r\n };\r\n }\r\n return null;\r\n }\r\n}"],"names":["Cesium.Cartesian2","Cesium.Cartographic","Cesium.Math","Cesium.Cartesian3","Cesium.EllipsoidGeodesic","Cesium.Color","Cesium.ColorMaterialProperty","Cesium.Entity","Cesium.Cesium3DTileFeature","Cesium.Rectangle","Cesium.Matrix3","Cesium.Matrix4","Cesium.EasingFunction","Cesium.GeometryInstance","Cesium.JulianDate","Cesium.Primitive","Cesium.HeightReference","Cesium.HorizontalOrigin","Cesium.VerticalOrigin","Cesium.ClassificationType","Cesium.ArcType","Cesium.PolygonHierarchy","Cesium.ShadowMode","Cesium.PolylineGraphics","Cesium.HeadingPitchRoll","Cesium.Transforms","Cesium.ColorBlendMode","Entity","colorToCColor","Cesium.Cesium3DTileset","Cesium.HeadingPitchRange","Cesium.createOsmBuildings","Cesium.Cesium3DTileStyle","Cesium.KmlDataSource","Cesium.createWorldTerrain","Cesium.EllipsoidTerrainProvider","Cesium.CesiumTerrainProvider","Cesium.BingMapsImageryProvider","Cesium.BingMapsStyle","Cesium.MapboxImageryProvider","Cesium.MapboxStyleImageryProvider","Cesium.ArcGisMapServerImageryProvider","Cesium.OpenStreetMapImageryProvider","Cesium.GridImageryProvider","Cesium.GeographicTilingScheme","Cesium.ImageryLayer","Cesium.UrlTemplateImageryProvider","Cesium.TileMapServiceImageryProvider","Cesium.IonImageryProvider","Cesium.OrthographicFrustum"],"mappings":"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"}