bruce-cesium 1.2.2 → 1.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bruce-cesium.es5.js +137 -106
- package/dist/bruce-cesium.es5.js.map +1 -1
- package/dist/bruce-cesium.umd.js +136 -105
- package/dist/bruce-cesium.umd.js.map +1 -1
- package/dist/lib/rendering/render-managers/tilesets/tileset-arb-render-manager.js +66 -37
- package/dist/lib/rendering/render-managers/tilesets/tileset-arb-render-manager.js.map +1 -1
- package/dist/lib/rendering/tileset-render-engine.js +70 -68
- package/dist/lib/rendering/tileset-render-engine.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bruce-cesium.es5.js","sources":["../src/viewer/cesium-view-monitor.ts","../src/viewer/viewer-utils.ts","../src/utils/measure-utils.ts","../src/utils/drawing-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/render-managers/common/cesium-parabola.ts","../src/rendering/relation-render-engine.ts","../src/rendering/visuals-register.ts","../src/rendering/render-managers/entities/entities-ids-render-manager.ts","../src/rendering/render-managers/entities/entity-render-manager.ts","../src/rendering/tileset-render-engine.ts","../src/rendering/render-managers/tilesets/tileset-cad-render-manager.ts","../src/rendering/render-managers/common/shared-getters.ts","../src/rendering/render-managers/tilesets/tileset-osm-render-manager.ts","../src/rendering/render-managers/tilesets/tileset-entities-render-manager.ts","../src/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.ts","../src/rendering/render-managers/data-source/data-source-static-kml-manager.ts","../src/rendering/render-managers/tilesets/tileset-arb-render-manager.ts","../src/rendering/render-managers/other/relations-render-manager.ts","../src/rendering/menu-item-manager.ts","../src/rendering/menu-item-creator.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(params: {\r\n viewer: Cesium.Viewer\r\n // Default = true.\r\n destroyWidgets?: boolean;\r\n // Default = true.\r\n styleContainer?: boolean;\r\n }) {\r\n const { viewer, destroyWidgets, styleContainer } = params;\r\n if (destroyWidgets != false) {\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 }\r\n if (styleContainer != false) {\r\n ViewerUtils.StyleContainer({ viewer });\r\n }\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(params: {\r\n viewer: Cesium.Viewer\r\n }) {\r\n const { viewer } = params;\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 { Cartes } from \"bruce-models\";\r\nimport * 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(params: {\r\n posses: Cesium.Cartesian3[]\r\n }): {\r\n totalLength: number\r\n } {\r\n const { posses } = params;\r\n if (posses.length < 2) {\r\n return {\r\n totalLength: 0\r\n };\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 {\r\n totalLength\r\n };\r\n }\r\n\r\n export function MeasurePolygon(params: {\r\n posses: Cesium.Cartesian3[]\r\n }): {\r\n area: number,\r\n perimeter: number\r\n } {\r\n let { posses } = params;\r\n posses = [].concat(posses);\r\n if (!Cartes.IsRing3Closed(posses)) {\r\n posses.push(posses[0].clone());\r\n }\r\n if (posses.length < 3) {\r\n return {\r\n area: 0,\r\n perimeter: 0\r\n }; \r\n }\r\n\r\n let area = 0;\r\n const indices = (Cesium as any).PolygonPipeline.triangulate(posses, []);\r\n for (let i = 0; i < indices.length; i += 3) {\r\n const vector1 = posses[indices[i]];\r\n const vector2 = posses[indices[i + 1]];\r\n const vector3 = posses[indices[i + 2]];\r\n const vectorC = Cesium.Cartesian3.subtract(vector2, vector1, new Cesium.Cartesian3());\r\n const vectorD = Cesium.Cartesian3.subtract(vector3, vector1, new Cesium.Cartesian3());\r\n const areaVector = Cesium.Cartesian3.cross(vectorC, vectorD, new Cesium.Cartesian3());\r\n area += Cesium.Cartesian3.magnitude(areaVector) / 2.0;\r\n }\r\n const {totalLength: perimeter} = MeasurePolyline({\r\n posses: posses\r\n });\r\n return {\r\n area,\r\n perimeter\r\n };\r\n }\r\n}","import * as Cesium from \"cesium\";\r\nimport { MeasureUtils } from \"./measure-utils\";\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(params: {\r\n viewer: Cesium.Viewer, \r\n posses: Cesium.Cartesian3[], \r\n distance: number\r\n }): {\r\n point: Cesium.Cartesian3\r\n } {\r\n const { viewer, posses: positions, distance } = params;\r\n if (distance <= 0 && positions.length > 0) {\r\n return {\r\n point: positions[0]\r\n }\r\n }\r\n else if (positions.length > 1) {\r\n let currentDistance = 0;\r\n let {totalLength} = MeasureUtils.MeasurePolyline({\r\n posses: positions,\r\n })\r\n if (distance > totalLength) {\r\n return {\r\n point: positions[positions.length - 1]\r\n }\r\n }\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 position = geodesic.interpolateUsingFraction((distance - currentDistance) / length);\r\n const height = (carto1.height + carto2.height) / 2;\r\n return {\r\n point: Cesium.Cartesian3.fromRadians(position.longitude, position.latitude, height)\r\n };\r\n }\r\n else {\r\n currentDistance += length;\r\n }\r\n }\r\n }\r\n return {\r\n point: positions.length ? positions[positions.length - 1] : null\r\n }\r\n }\r\n\r\n /**\r\n * Returns terrain height from current viewer's provider.\r\n * On error or flat terrain, it will return 0.\r\n * If an error occurred it will be attached to the result.\r\n * @param pos3d \r\n * @param viewer \r\n * @returns \r\n */\r\n export async function GetTerrainHeight(params: {\r\n pos3d: Cesium.Cartesian3, \r\n viewer: Cesium.Viewer\r\n }): Promise<{\r\n height: number,\r\n error?: any\r\n }> {\r\n const { pos3d, viewer } = params;\r\n try {\r\n if (viewer.scene.terrainProvider instanceof Cesium.EllipsoidTerrainProvider) {\r\n return {\r\n height: 0\r\n };\r\n }\r\n const sample = await Cesium.sampleTerrainMostDetailed(viewer.scene.terrainProvider, [Cesium.Cartographic.fromCartesian(pos3d)]);\r\n const height = sample?.length ? sample[0].height : null;\r\n if (isNaN(height)) {\r\n return {\r\n height: 0,\r\n error: \"NaN\"\r\n };\r\n }\r\n return {\r\n height: height\r\n };\r\n }\r\n catch (e) {\r\n return {\r\n height: 0,\r\n error: e\r\n };\r\n }\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 \"../rendering/visuals-register\";\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(\r\n cEntity: EntityRenderEngine.ICesiumEntityExt,\r\n arr: EntityRenderEngine.ICesiumEntityExt[],\r\n ignoreParent: boolean\r\n): void {\r\n if (cEntity._parentEntity && !ignoreParent) {\r\n traverseEntity(cEntity._parentEntity, arr, false);\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, true);\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\nfunction GetValue<T>(viewer: Cesium.Viewer, obj: Cesium.Property | any): T {\r\n if ((obj as any)?.getValue) {\r\n return obj.getValue(viewer.scene.lastRenderTime);\r\n }\r\n return obj;\r\n}\r\n\r\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 params\r\n * @returns\r\n */\r\n export function GetPos(params: {\r\n viewer: Cesium.Viewer,\r\n entity: E.IEntity,\r\n // Optional register to try find currently rendered position from.\r\n visualRegister?: VisualsRegister.Register,\r\n // Will ensure returned position is at this height reference.\r\n // If no cesium visual is found, it will return it clamped to the ground.\r\n heightReference?: Cesium.HeightReference,\r\n }): Cesium.Cartesian3 {\r\n const { viewer, entity, visualRegister } = params;\r\n\r\n // TODO: Tidy this up, move to a separate function.\r\n // We need a generic \"get pos AS blah height reference\" function.\r\n function evaluateRendered() {\r\n const rego = visualRegister ? visualRegister.GetRego({\r\n entityId: entity.Bruce.ID,\r\n }) : null;\r\n\r\n if (rego?.visual instanceof Cesium.Entity) {\r\n const visual = rego.visual as Cesium.Entity;\r\n if (visual.position) {\r\n let pos3d = GetValue<Cesium.Cartesian3>(viewer, visual.position);\r\n // Fix height reference.\r\n if (pos3d?.x) {\r\n let visualHeightRef = Cesium.HeightReference.RELATIVE_TO_GROUND;\r\n if (visual.model) {\r\n visualHeightRef = GetValue<Cesium.HeightReference>(viewer, visual.model.heightReference);\r\n }\r\n else if (visual.polygon) {\r\n visualHeightRef = GetValue<Cesium.HeightReference>(viewer, visual.polygon.heightReference);\r\n }\r\n else if (visual.polyline) {\r\n visualHeightRef = GetValue<boolean>(viewer, visual.polyline.clampToGround) ?\r\n Cesium.HeightReference.RELATIVE_TO_GROUND : Cesium.HeightReference.NONE;\r\n }\r\n else if (visual.billboard) {\r\n visualHeightRef = GetValue<Cesium.HeightReference>(viewer, visual.billboard.heightReference);\r\n }\r\n else if (visual.ellipse) {\r\n visualHeightRef = GetValue<Cesium.HeightReference>(viewer, visual.ellipse.heightReference);\r\n }\r\n else if (visual.point) {\r\n visualHeightRef = GetValue<Cesium.HeightReference>(viewer, visual.point.heightReference);\r\n }\r\n\r\n if (visualHeightRef == params.heightReference) {\r\n return pos3d;\r\n }\r\n const carto = Cesium.Cartographic.fromCartesian(pos3d);\r\n if (visualHeightRef == Cesium.HeightReference.NONE) {\r\n // Turn absolute into clamped.\r\n if (params.heightReference == Cesium.HeightReference.CLAMP_TO_GROUND) {\r\n return Cesium.Cartesian3.fromRadians(carto.longitude, carto.latitude, 0);\r\n }\r\n // Turn absolute into relative (remove terrain height).\r\n else if (params.heightReference == Cesium.HeightReference.RELATIVE_TO_GROUND) {\r\n const terrainHeight = EnsureNumber(viewer.scene.globe.getHeight(carto), 0);\r\n return Cesium.Cartesian3.fromRadians(carto.longitude, carto.latitude, carto.height - terrainHeight);\r\n }\r\n }\r\n else if (visualHeightRef == Cesium.HeightReference.CLAMP_TO_GROUND) {\r\n const terrainHeight = EnsureNumber(viewer.scene.globe.getHeight(carto), 0);\r\n return Cesium.Cartesian3.fromRadians(carto.longitude, carto.latitude, terrainHeight);\r\n }\r\n else if (visualHeightRef == Cesium.HeightReference.RELATIVE_TO_GROUND) {\r\n // Turn relative into absolute (add terrain height).\r\n if (params.heightReference == Cesium.HeightReference.NONE) {\r\n const terrainHeight = EnsureNumber(viewer.scene.globe.getHeight(carto), 0);\r\n return Cesium.Cartesian3.fromRadians(carto.longitude, carto.latitude, carto.height + terrainHeight);\r\n }\r\n // Turn relative into clamped.\r\n else if (params.heightReference == Cesium.HeightReference.CLAMP_TO_GROUND) {\r\n return Cesium.Cartesian3.fromRadians(carto.longitude, carto.latitude, 0);\r\n }\r\n }\r\n return pos3d;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n function evaluateRecord() {\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 {totalLength: length} = MeasureUtils.MeasurePolyline({\r\n posses\r\n });\r\n if (length > 0) {\r\n const {point} = DrawingUtils.PointAcrossPolyline({\r\n viewer,\r\n posses: posses,\r\n distance: length / 2\r\n });\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\r\n let pos3d = evaluateRendered();\r\n if (Cartes.ValidateCartes3(pos3d)) {\r\n return pos3d;\r\n }\r\n pos3d = evaluateRecord();\r\n let carto = Cartes.ValidateCartes3(pos3d) ? Cesium.Cartographic.fromCartesian(pos3d) : null;\r\n if (carto) {\r\n // Since we don't know height reference, we can't convert it.\r\n // We will just clamp it to ground.\r\n const terrainHeight = EnsureNumber(viewer.scene.globe.getHeight(carto), 0);\r\n pos3d = Cesium.Cartesian3.fromRadians(carto.longitude, carto.latitude, terrainHeight);\r\n }\r\n return pos3d;\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(params: {\r\n entity: Cesium.Entity\r\n }): Cesium.Entity[] {\r\n const { entity } = params;\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, false);\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(params: {\r\n viewer: Cesium.Viewer,\r\n entities: VisualsRegister.Visual[]\r\n }) {\r\n const { viewer, entities } = params;\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(params: {\r\n viewer: Cesium.Viewer,\r\n entity: VisualsRegister.Visual,\r\n opacity: number\r\n }) {\r\n const { viewer, entity, opacity } = params;\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(params: {\r\n viewer: Cesium.Viewer,\r\n entity: VisualsRegister.Visual\r\n }) {\r\n const { viewer, entity } = params;\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(params: {\r\n entity: VisualsRegister.Visual\r\n }) {\r\n const { entity } = params;\r\n return findOpacity(entity);\r\n }\r\n}","import { EntityUtils } from \"../../utils/entity-utils\";\r\nimport { Cartes, Entity, ZoomControl } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\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 ReRender(entityIds?: string[]): Promise<void>;\r\n }\r\n\r\n export function DetermineZoomItem(params: {\r\n viewer: Cesium.Viewer, \r\n entity: Entity.IEntity, \r\n zoomControl: ZoomControl.IItem[]\r\n }): ZoomControl.IItem {\r\n const {viewer, entity, zoomControl} = params;\r\n const pos = EntityUtils.GetPos({\r\n viewer, \r\n entity\r\n });\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({\r\n zoomControl, \r\n distance\r\n });\r\n }\r\n\r\n export function GetZoomControlFromDistance(params: {\r\n zoomControl: ZoomControl.IItem[], \r\n distance: number\r\n }): ZoomControl.IItem {\r\n const {zoomControl, distance} = params;\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(params: {\r\n zoomControl: ZoomControl.IItem[]\r\n }): number[] {\r\n const {zoomControl} = params;\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}","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({\r\n api,\r\n styleId\r\n })).style;\r\n }\r\n if (!style) {\r\n const {entityType: type} = await EntityType.Get({\r\n api,\r\n entityTypeId: entity.Bruce[\"EntityType.ID\"]\r\n });\r\n if (type[\"DisplaySetting.ID\"]) {\r\n style = (await Style.Get({\r\n api,\r\n styleId: type[\"DisplaySetting.ID\"]\r\n })).style;\r\n }\r\n }\r\n return style;\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 ICesiumModelExt extends Cesium.ModelGraphics {\r\n _clientFileId?: 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.DetermineZoomItem({\r\n viewer: params.viewer,\r\n entity,\r\n zoomControl: params.zoomControl\r\n });\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 existingRego = params.visualRegister.GetRego({\r\n entityId: id,\r\n menuItemId: params.menuItemId\r\n });\r\n const oldRenderId = (existingRego?.visual as ICesiumEntityExt)?._renderGroup;\r\n if (newRenderId == oldRenderId && !existingRego?.stale) {\r\n cEntities[id] = existingRego.visual as ICesiumEntityExt;\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(params: {\r\n viewer: Cesium.Viewer,\r\n entity: ICesiumEntityExt,\r\n }): void {\r\n function doRemove(params: {\r\n viewer: Cesium.Viewer,\r\n entity: ICesiumEntityExt,\r\n ignoreParent: boolean\r\n }) {\r\n const { viewer, entity, ignoreParent } = params;\r\n if (viewer.isDestroyed()) {\r\n return;\r\n }\r\n if (entity._parentEntity && !ignoreParent) {\r\n doRemove({\r\n viewer,\r\n entity: entity._parentEntity,\r\n ignoreParent: false\r\n });\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 doRemove({\r\n viewer,\r\n entity: sibling,\r\n ignoreParent: true\r\n });\r\n }\r\n }\r\n if (viewer.entities.contains(entity)) {\r\n viewer.entities.remove(entity);\r\n }\r\n }\r\n doRemove({\r\n viewer: params.viewer,\r\n entity: params.entity,\r\n ignoreParent: false\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({\r\n api: params.api,\r\n fileId: style.iconId\r\n });\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({\r\n viewer: params.viewer,\r\n entity\r\n }),\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 ? Calculator.GetColor(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({\r\n viewer: params.viewer,\r\n entity\r\n }),\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({\r\n api,\r\n tagIds\r\n })).tags;\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.GetColor(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({\r\n viewer: params.viewer,\r\n entity\r\n }),\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({\r\n api,\r\n tagIds\r\n })).tags;\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 =Calculator.GetColor(style.fillColor, entity, params.tags);\r\n const cFillColor = bFillColor ? colorToCColor(bFillColor) : Cesium.Color.RED;\r\n\r\n const bLineColor = Calculator.GetColor(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({\r\n viewer: params.viewer,\r\n entity\r\n }),\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({\r\n api,\r\n tagIds\r\n })).tags;\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 lodClientFileId?: 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({\r\n viewer: params.viewer,\r\n entity\r\n });\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 = Calculator.GetColor(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 const model = cEntity.model as ICesiumModelExt;\r\n model._clientFileId = params.lodClientFileId;\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({\r\n api,\r\n tagIds\r\n })).tags;\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 {lods: lodData} = await EntityLod.GetLods({\r\n api,\r\n filter: reqBody\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({\r\n api,\r\n tagIds\r\n })).tags;\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({\r\n api,\r\n fileId: lod.clientFileId\r\n }),\r\n lodClientFileId: 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 entityCheckQueueIds: string[] = [];\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(params: {\r\n viewer: Cesium.Viewer, \r\n register: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n monitor: CesiumViewMonitor,\r\n item: MenuItem.Item.IBruceEntities,\r\n sharedGetters: SharedGetters.Cache\r\n }) {\r\n const { viewer, apiGetter, monitor, item, register: visualsManager, sharedGetters } = params;\r\n this.viewer = viewer;\r\n this.sharedGetters = sharedGetters;\r\n this.monitor = monitor;\r\n this.apiGetter = apiGetter;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public 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.GetZoomMinMax({\r\n zoomControl: this.item.CameraZoomSettings\r\n });\r\n this.getter.IncludeMenuItem(this.item.id, [], minMax[0], minMax[1]);\r\n this.getterSub = this.getter.OnUpdate.Subscribe((entities) => {\r\n 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(Object.keys(this.renderedEntities));\r\n }, 3000);\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n if (this.getter) {\r\n this.getter.ExcludeMenuItem(this.item.id);\r\n }\r\n this.disposed = true;\r\n this.visualsManager.RemoveRegos({\r\n menuItemId: this.item.id\r\n });\r\n this.entityCheckRemoval?.();\r\n this.viewMonitorRemoval?.();\r\n }\r\n\r\n public async ReRender(entityIds?: string[]) {\r\n if (entityIds == null) {\r\n entityIds = Object.keys(this.renderedEntities);\r\n }\r\n this.visualsManager.MarkStale({\r\n entityIds: entityIds, \r\n menuItemIds: [this.item.id]\r\n });\r\n await this.doEntityCheck(entityIds);\r\n }\r\n\r\n private async doEntityCheck(ids: string[]): Promise<void> {\r\n if (this.isRunningCheck) {\r\n this.entityCheckQueueIds = this.entityCheckQueueIds.concat(ids);\r\n this.entityCheckQueue.Call();\r\n return;\r\n }\r\n ids.concat(this.entityCheckQueueIds);\r\n this.entityCheckQueueIds = [];\r\n ids = ids.filter((id, index) => {\r\n return ids.indexOf(id) === index;\r\n });\r\n\r\n this.isRunningCheck = true;\r\n const api = this.apiGetter.getApi();\r\n try {\r\n if (this.disposed) {\r\n return;\r\n }\r\n if (ids.length > 0) { \r\n const 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({\r\n api, \r\n entityIds\r\n });\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 // Ensuring a re-render call with improper entity ids doesn't cause them to render here.\r\n const typeId = this.item.BruceEntity?.[\"EntityType.ID\"];\r\n if (typeId) {\r\n entities = entities.filter(x => x.Bruce?.[\"EntityType.ID\"] == typeId);\r\n }\r\n\r\n const cEntities = await EntityRenderEngine.Render({\r\n viewer: this.viewer, \r\n apiGetter: this.apiGetter, \r\n entities: entities,\r\n menuItemId: this.item.id,\r\n visualRegister: this.visualsManager,\r\n zoomControl: this.item.CameraZoomSettings\r\n });\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n const id = <string>entity.Bruce.ID;\r\n const cEntity = cEntities[id];\r\n this.renderedEntities[id] = !!cEntity;\r\n if (cEntity) {\r\n const visual = this.visualsManager.GetRego({\r\n entityId: id, \r\n menuItemId: this.item.id\r\n })?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.AddRego({\r\n rego: {\r\n entityId: <string>id,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0,\r\n entityTypeId: entity.Bruce[\"EntityType.ID\"],\r\n accountId: this.apiGetter.accountId\r\n }\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.RemoveRegos({\r\n entityId: id, \r\n menuItemId: this.item.id\r\n });\r\n }\r\n }\r\n }\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(params: {\r\n viewer: Cesium.Viewer, \r\n register: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n monitor: CesiumViewMonitor,\r\n item: MenuItem.Item.IEntitiesLoaded\r\n }) {\r\n const { viewer, apiGetter, monitor, item, register: visualsManager } = params;\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.monitor = monitor;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public 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.RemoveRegos({\r\n menuItemId: this.item.id\r\n });\r\n }\r\n\r\n public async ReRender(entityIds?: string[]) {\r\n if (entityIds == null) {\r\n entityIds = Object.keys(this.renderedEntities);\r\n }\r\n else {\r\n // ensure entity ids are part of menu item.\r\n entityIds = entityIds.filter(x => {\r\n return this.item.BruceEntity?.Entities?.find(y => y?.Bruce?.ID == x);\r\n })\r\n }\r\n this.visualsManager.MarkStale({\r\n entityIds: entityIds, \r\n menuItemIds: [this.item.id]\r\n });\r\n this.doEntityCheck(entityIds);\r\n }\r\n\r\n private async doEntityCheck(ids: string[]): Promise<void> {\r\n const api = this.apiGetter.getApi();\r\n try {\r\n if (this.disposed) {\r\n return;\r\n }\r\n if (ids.length > 0) { \r\n const 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({\r\n api, \r\n entityIds\r\n });\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.onGetterUpdate(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 }\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({\r\n entityId: id, \r\n menuItemId: this.item.id\r\n })?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.AddRego({\r\n rego: {\r\n entityId: <string>id,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0,\r\n entityTypeId: entity.Bruce[\"EntityType.ID\"],\r\n accountId: this.apiGetter.accountId\r\n }\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.RemoveRegos({\r\n entityId: id, \r\n menuItemId: this.item.id\r\n });\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n}","import { Cartes } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { DrawingUtils } from \"../../../utils/drawing-utils\";\r\n\r\n/**\r\n * Utility for rendering parabolas between two points on the map.\r\n */\r\nexport class CesiumParabola {\r\n private viewer: Cesium.Viewer;\r\n private pos1: Cesium.Cartesian3 | (() => Cesium.Cartesian3);\r\n private pos2: Cesium.Cartesian3 | (() => Cesium.Cartesian3);\r\n private color = \"white\";\r\n private width = 2;\r\n private duration = 10;\r\n private heightDistanceRatio = 0.25;\r\n\r\n private curPoints = [];\r\n private animateInterval = null;\r\n private retryTimeout = null;\r\n private parabola: Cesium.Entity;\r\n private siblings: Cesium.Entity[];\r\n\r\n private get curPos1() {\r\n return this.pos1 instanceof Function ? this.pos1() : this.pos1;\r\n }\r\n private get curPos2() {\r\n return this.pos2 instanceof Function ? this.pos2() : this.pos2;\r\n }\r\n\r\n\r\n constructor(params: {\r\n viewer: Cesium.Viewer,\r\n // Direct position or a callback to get one.\r\n pos1: Cesium.Cartesian3 | (() => Cesium.Cartesian3),\r\n pos2: Cesium.Cartesian3 | (() => Cesium.Cartesian3),\r\n color?: string,\r\n width?: number,\r\n duration?: number,\r\n heightDistanceRatio?: number\r\n }) {\r\n this.viewer = params.viewer;\r\n this.pos1 = params.pos1;\r\n this.pos2 = params.pos2;\r\n if (params.color) {\r\n this.color = params.color;\r\n }\r\n if (!isNaN(params.width)) {\r\n this.width = params.width;\r\n }\r\n if (!isNaN(params.duration)) {\r\n this.duration = params.duration;\r\n }\r\n if (!isNaN(params.heightDistanceRatio)) {\r\n this.heightDistanceRatio = params.heightDistanceRatio;\r\n }\r\n this.prepareEntities();\r\n }\r\n\r\n private prepareEntities() {\r\n const parabola = new Cesium.Entity({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n return this.curPoints;\r\n }, false) as any,\r\n width: this.width,\r\n material: Cesium.Color.fromCssColorString(this.color)\r\n }\r\n });\r\n const p1Entity = new Cesium.Entity({\r\n position: new Cesium.CallbackProperty(() => {\r\n return this.curPoints.length ? this.curPoints[0] : new Cesium.Cartesian3();\r\n }, false) as any,\r\n point: {\r\n heightReference: Cesium.HeightReference.NONE,\r\n pixelSize: this.width * 1.3,\r\n color: Cesium.Color.fromCssColorString(this.color),\r\n outlineColor: Cesium.Color.WHITE,\r\n outlineWidth: 2\r\n }\r\n });\r\n const p2Entity = new Cesium.Entity({\r\n position: new Cesium.CallbackProperty(() => {\r\n return this.curPoints.length ? this.curPoints[this.curPoints.length - 1] : new Cesium.Cartesian3();\r\n }, false) as any,\r\n point: {\r\n heightReference: Cesium.HeightReference.NONE,\r\n pixelSize: this.width * 1.8,\r\n color: Cesium.Color.fromCssColorString(this.color),\r\n outlineColor: Cesium.Color.WHITE,\r\n outlineWidth: 2\r\n }\r\n });\r\n p1Entity.parent = parabola;\r\n p2Entity.parent = parabola;\r\n const siblings = [p1Entity, p2Entity];\r\n this.parabola = parabola;\r\n this.siblings = siblings;\r\n }\r\n\r\n public Animate(): {\r\n parabola: Cesium.Entity,\r\n siblings: Cesium.Entity[]\r\n } {\r\n if (this.parabola && !this.viewer.entities.contains(this.parabola)) {\r\n this.viewer.entities.add(this.parabola);\r\n }\r\n\r\n let retry = false;\r\n if (!this.curPos1 || !this.curPos2 || !Cartes.ValidateCartes3(this.curPos1) || !Cartes.ValidateCartes3(this.curPos2)) {\r\n retry = true;\r\n }\r\n let TOTAL_LENGTH = retry ? 0 : Cesium.Cartesian3.distance(this.curPos1, this.curPos2);\r\n if (TOTAL_LENGTH <= 0) {\r\n retry = true;\r\n }\r\n if (retry) {\r\n this.retryTimeout = setTimeout(() => {\r\n this.Animate();\r\n }, 2000);\r\n return {\r\n parabola: this.parabola,\r\n siblings: this.siblings\r\n };\r\n }\r\n\r\n const cEntities = [\r\n this.parabola\r\n ].concat(this.siblings);\r\n cEntities.forEach(e => {\r\n if (e && !this.viewer.entities.contains(e)) {\r\n this.viewer.entities.add(e);\r\n }\r\n });\r\n\r\n const RATE_PER_SECOND = 1000 / 40;\r\n const SEC_DURATION = this.duration;\r\n const HEIGHT_DISTANCE_RATIO = this.heightDistanceRatio;\r\n let TOTAL_POINTS = Math.max(50, Math.min(1000, TOTAL_LENGTH * 0.1));\r\n let POINT_LENGTH = TOTAL_LENGTH / TOTAL_POINTS;\r\n let TICK_LENGTH_INC = SEC_DURATION == 0 ? TOTAL_LENGTH : TOTAL_POINTS / (RATE_PER_SECOND * SEC_DURATION);\r\n\r\n let curPoint = 0;\r\n let quadraticKey = null;\r\n let quadratic: { a: number, b: number, c: number } = null;\r\n let quadraticPreparing = false;\r\n\r\n const prepareQuadratic = async () => {\r\n if (quadraticPreparing) {\r\n return;\r\n }\r\n quadraticPreparing = true;\r\n try {\r\n const p1 = this.curPos1;\r\n const p2 = this.curPos2;\r\n if (!p1 || !p2 || !Cartes.ValidateCartes3(p1) || !Cartes.ValidateCartes3(p2)) {\r\n return;\r\n }\r\n const height1 = Cesium.Cartographic.fromCartesian(p1).height;\r\n const height2 = Cesium.Cartographic.fromCartesian(p2).height;\r\n if (isNaN(height1) || isNaN(height2)) {\r\n return;\r\n }\r\n const totalHeight = height2 + height1;\r\n const curQuadraticKey = `${height1}-${height2}-${TOTAL_LENGTH}`;\r\n if (quadraticKey == curQuadraticKey) {\r\n return;\r\n }\r\n \r\n const points2d = [\r\n new Cesium.Cartesian2(0, height1),\r\n new Cesium.Cartesian2(TOTAL_LENGTH, height2)\r\n ];\r\n let vertexHeight = 0;\r\n // Flat line.\r\n if (HEIGHT_DISTANCE_RATIO == 0) {\r\n vertexHeight = totalHeight * 0.5;\r\n }\r\n else {\r\n const largestHeight = Math.max(height1, height2);\r\n vertexHeight = largestHeight + (TOTAL_LENGTH * HEIGHT_DISTANCE_RATIO);\r\n }\r\n points2d.push(new Cesium.Cartesian2(\r\n TOTAL_LENGTH * 0.5,\r\n vertexHeight\r\n ));\r\n const calcQuadratic = (points: Cesium.Cartesian2[]) => {\r\n // Swaps position of two rows in matrix.\r\n function swapRows(matrix, rowAIndex, rowBIndex) {\r\n const rowAVal = matrix[rowAIndex];\r\n matrix[rowAIndex] = matrix[rowBIndex];\r\n matrix[rowBIndex] = rowAVal;\r\n return matrix;\r\n }\r\n \r\n // Zeros rowA at colIndex by subtracting a multiplied rowB from it.\r\n function reduceMatrixRowByRow(matrix, zeroingIndex, parentIndex, colIndex) {\r\n const zeroRow = matrix[zeroingIndex];\r\n const parentRow = matrix[parentIndex];\r\n \r\n if (zeroRow[colIndex] == 0) {\r\n return matrix;\r\n }\r\n else if (parentRow[colIndex] == 0) {\r\n matrix = swapRows(matrix, parentIndex, zeroingIndex); \r\n return divideMatrixRow(matrix, parentIndex, colIndex);\r\n }\r\n \r\n // rowAIndex colIndex / rowBIndex colIndex = factor;\r\n let factor = zeroRow[colIndex] / parentRow[colIndex];\r\n for (let i = 0; i < zeroRow.length; i++) {\r\n if (i >= colIndex) {\r\n zeroRow[i] -= parentRow[i] * factor;\r\n }\r\n }\r\n return matrix;\r\n }\r\n \r\n // Makes a given row column equal 1 by diving while row by that column.\r\n function divideMatrixRow(matrix, rowIndex, colIndex) {\r\n const row = matrix[rowIndex];\r\n const colValue = row[colIndex];\r\n for (let i = 0; i < row.length; i++) {\r\n if (i >= colIndex) {\r\n row[i] /= colValue;\r\n }\r\n }\r\n return matrix;\r\n }\r\n \r\n // Returns initial matrix for calculating a, b and c for quadratic formula from given points.\r\n function matrixFromPoints(points) {\r\n const rows = [];\r\n const constructRow = (point) => {\r\n rows.push([\r\n -Math.pow(point.x, 2),\r\n point.x,\r\n 1,\r\n point.y\r\n ]);\r\n };\r\n for (let i = 0; i < points.length; i++) {\r\n constructRow(points[i]);\r\n }\r\n return rows;\r\n }\r\n \r\n const initialMatrix = matrixFromPoints(points);\r\n const step1Matrix = reduceMatrixRowByRow(initialMatrix, 1, 0, 0);\r\n const step2Matrix = reduceMatrixRowByRow(step1Matrix, 2, 0, 0);\r\n const step3Matrix = reduceMatrixRowByRow(step2Matrix, 2, 1, 1);\r\n const step4Matrix = reduceMatrixRowByRow(step3Matrix, 0, 1, 1);\r\n const step5Matrix = reduceMatrixRowByRow(step4Matrix, 0, 2, 2);\r\n const step6Matrix = reduceMatrixRowByRow(step5Matrix, 1, 2, 2);\r\n const a = step6Matrix[0][3];\r\n const b = step6Matrix[1][3];\r\n const c = step6Matrix[2][3];\r\n return { a: a, b: b, c: c };\r\n };\r\n quadratic = calcQuadratic(points2d);\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n finally {\r\n quadraticPreparing = false;\r\n }\r\n };\r\n\r\n const getPosition = (increment: number): Cesium.Cartesian3 => {\r\n if (!quadratic) {\r\n return null;\r\n }\r\n\r\n let lengthAcross = POINT_LENGTH * increment;\r\n if (lengthAcross > TOTAL_LENGTH) {\r\n lengthAcross = TOTAL_LENGTH;\r\n }\r\n\r\n const getParabolaYFromX = (x: number, quadLetters: { a: number, b: number, c: number }): number => {\r\n let a = quadLetters.a;\r\n let b = quadLetters.b;\r\n let c = quadLetters.c;\r\n return (-a * Math.pow(x, 2)) + (b * x) + c;\r\n }\r\n\r\n const {point: pos3d} = DrawingUtils.PointAcrossPolyline({\r\n viewer: this.viewer,\r\n distance: lengthAcross,\r\n posses: [this.curPos1, this.curPos2]\r\n })\r\n const point = Cesium.Cartographic.fromCartesian(pos3d);\r\n const posHeight = getParabolaYFromX(lengthAcross, quadratic);\r\n return Cesium.Cartesian3.fromRadians(point.longitude, point.latitude, posHeight);\r\n };\r\n\r\n const updatePoints = () => {\r\n if (!quadratic) {\r\n return;\r\n }\r\n const increment = Math.floor(curPoint);\r\n const chips = curPoint - Math.floor(curPoint);\r\n const posses: Cesium.Cartesian3[] = [];\r\n posses.push(getPosition(0));\r\n const addLast = increment >= TOTAL_POINTS;\r\n const totalCycles = addLast ? increment + 1 : increment;\r\n for (let i = 0; i < totalCycles; i++) {\r\n posses.push(getPosition(i));\r\n }\r\n posses.push(getPosition(increment + chips));\r\n if (posses.find(x => !x || !Cartes.ValidateCartes3(x))) {\r\n return;\r\n }\r\n this.curPoints = posses;\r\n };\r\n\r\n const doTick = () => {\r\n const p1 = this.curPos1;\r\n const p2 = this.curPos2;\r\n const newLength = p1 && p2 ? Cesium.Cartesian3.distance(p1, p2) : -1;\r\n if (newLength > 0 && newLength != TOTAL_LENGTH) {\r\n TOTAL_LENGTH = newLength;\r\n TOTAL_POINTS = Math.max(50, Math.min(1000, TOTAL_LENGTH * 0.1));\r\n POINT_LENGTH = TOTAL_LENGTH / TOTAL_POINTS;\r\n TICK_LENGTH_INC = SEC_DURATION == 0 ? TOTAL_LENGTH : TOTAL_POINTS / (RATE_PER_SECOND * SEC_DURATION);\r\n }\r\n prepareQuadratic();\r\n if (quadratic) {\r\n if (curPoint < TOTAL_POINTS) {\r\n curPoint += TICK_LENGTH_INC;\r\n }\r\n updatePoints();\r\n }\r\n };\r\n this.animateInterval = setInterval(doTick, RATE_PER_SECOND);\r\n\r\n return {\r\n parabola: this.parabola,\r\n siblings: this.siblings\r\n };\r\n }\r\n\r\n public Dispose() {\r\n clearTimeout(this.retryTimeout);\r\n clearInterval(this.animateInterval);\r\n const cEntities = [\r\n this.parabola\r\n ].concat(this.siblings);\r\n cEntities.forEach(e => {\r\n if (e && this.viewer.entities.contains(e)) {\r\n this.viewer.entities.remove(e);\r\n }\r\n });\r\n }\r\n}","import { BruceApi, Calculator, Color, Entity, EntityRelation, EntityRelationType, EntityType, IDictionary, Style } from \"bruce-models\";\r\nimport { VisualsRegister } from \"./visuals-register\";\r\nimport * as Cesium from \"cesium\";\r\nimport { CesiumParabola } from \"./render-managers/common/cesium-parabola\";\r\nimport { EnsureNumber } from \"../internal/js-utils\";\r\nimport { EntityUtils } from \"../utils/entity-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\nexport namespace RelationRenderEngine {\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 function GetRenderGroupId(relation: EntityRelation.IRelation) {\r\n return `${relation[\"Related.Entity.ID\"]}-${relation[\"Principal.Entity.ID\"]}-${relation[\"Relation.Type.ID\"]}`;\r\n }\r\n\r\n export async function Render(params: {\r\n apiGetter: BruceApi.IGetter,\r\n viewer: Cesium.Viewer; \r\n visualRegister: VisualsRegister.Register;\r\n menuItemId: string;\r\n relations: EntityRelation.IRelation[]\r\n }): Promise<IDictionary<ICesiumEntityExt>> {\r\n const { apiGetter, viewer, visualRegister, menuItemId, relations } = params;\r\n const api = apiGetter.getApi(apiGetter.accountId);\r\n const rendered: IDictionary<ICesiumEntityExt> = {};\r\n for (let i = 0; i < relations.length; i++) {\r\n const relation = relations[i];\r\n const {entity: fromEntity} = await Entity.Get({\r\n api,\r\n entityId: relation[\"Principal.Entity.ID\"],\r\n });\r\n const {entity: toEntity} = await Entity.Get({\r\n api,\r\n entityId: relation[\"Related.Entity.ID\"],\r\n });\r\n const dataEntity = relation[\"Data.Entity.ID\"] ? (await Entity.Get({\r\n api,\r\n entityId: relation[\"Data.Entity.ID\"]\r\n })).entity : null;\r\n const {relationType} = await EntityRelationType.Get({\r\n api,\r\n relationTypeId: relation[\"Relation.Type.ID\"]\r\n });\r\n let styleId = Number(relationType?.[\"Relation.EntityType.ID\"]);\r\n if (!styleId) {\r\n const {entityType} = await EntityType.Get({\r\n api,\r\n entityTypeId: relationType?.[\"Relation.EntityType.ID\"]\r\n })\r\n styleId = entityType?.[\"DisplaySetting.ID\"];\r\n }\r\n const style = styleId ? (await Style.Get({\r\n api,\r\n styleId: styleId\r\n })).style : null;\r\n const cEntity = Parabola.Render({\r\n dataEntity,\r\n fromEntity,\r\n relation,\r\n style,\r\n toEntity,\r\n viewer,\r\n visualRegister: visualRegister\r\n });\r\n cEntity._renderGroup = GetRenderGroupId(relation);\r\n rendered[GetRenderGroupId(relation)] = cEntity;\r\n }\r\n return rendered;\r\n }\r\n\r\n export namespace Parabola {\r\n export interface IParabola {\r\n viewer: Cesium.Viewer;\r\n relation: EntityRelation.IRelation;\r\n fromEntity: Entity.IEntity;\r\n toEntity: Entity.IEntity;\r\n dataEntity: Entity.IEntity;\r\n style: Style.IStyle;\r\n visualRegister?: VisualsRegister.Register;\r\n }\r\n\r\n export function Render(params: IParabola): ICesiumEntityExt {\r\n const style = params.style?.Settings as Style.IRelationSettings;\r\n\r\n const entity = params.dataEntity;\r\n const bColor: Color.IColor = style?.lineColor ? Calculator.GetColor(style?.lineColor, entity, []) : null;\r\n const cColor = bColor ? colorToCColor(bColor) : Cesium.Color.WHITE;\r\n let width = EnsureNumber(style?.lineWidth ? Calculator.GetValue(style?.lineWidth, entity, []) : 4, 4);\r\n if (width < 1) {\r\n width = 1;\r\n }\r\n const duration = EnsureNumber(style?.duration ? Calculator.GetValue(style?.duration, entity, []) : 2, 2);\r\n const hDistanceRatio = EnsureNumber(style?.heightDistanceRatio ? Calculator.GetValue(style?.heightDistanceRatio, entity, []) : 0.25, 0.25);\r\n\r\n let fromPos = null;\r\n let toPos = null;\r\n let updatingPosses = false;\r\n const updatePosses = () => {\r\n if (updatingPosses) {\r\n return;\r\n }\r\n updatingPosses = true;\r\n try {\r\n fromPos = EntityUtils.GetPos({\r\n entity: params.fromEntity,\r\n viewer: params.viewer,\r\n visualRegister: params.visualRegister,\r\n heightReference: Cesium.HeightReference.NONE\r\n });\r\n toPos = EntityUtils.GetPos({\r\n entity: params.toEntity,\r\n viewer: params.viewer,\r\n visualRegister: params.visualRegister,\r\n heightReference: Cesium.HeightReference.NONE\r\n });\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n updatingPosses = false;\r\n };\r\n updatePosses();\r\n const parabola = new CesiumParabola({\r\n viewer: params.viewer,\r\n pos1: () => fromPos,\r\n pos2: () => toPos,\r\n color: cColor.toCssColorString(),\r\n width: width,\r\n duration: duration,\r\n heightDistanceRatio: hDistanceRatio\r\n });\r\n const cEntities = parabola.Animate();\r\n const cEntity = cEntities.parabola as ICesiumEntityExt;\r\n cEntity._siblingGraphics = [];\r\n for (let i = 0; i < cEntities.siblings.length; i++) {\r\n const sibling = cEntities.siblings[i];\r\n cEntity._siblingGraphics.push(sibling);\r\n }\r\n let updateInterval = setInterval(() => {\r\n if (\r\n !params.viewer?.scene ||\r\n params.viewer.isDestroyed() ||\r\n !params.viewer.entities.contains(cEntity)\r\n ) {\r\n clearInterval(updateInterval);\r\n parabola.Dispose();\r\n return;\r\n }\r\n updatePosses();\r\n }, 1000);\r\n return cEntity;\r\n }\r\n }\r\n}","import { BruceEvent, Cartes, EntityRelation, IDictionary, ObjectUtils } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EnsureNumber } from \"../internal/js-utils\";\r\nimport { EntityUtils } from \"../utils/entity-utils\";\r\nimport { EntityRenderEngine } from \"./entity-render-engine\";\r\nimport { RelationRenderEngine } from \"./relation-render-engine\";\r\n\r\ninterface IVisualExt {//extends Visual {\r\n _register?: VisualsRegister.Register;\r\n _rego?: VisualsRegister.IVisualRego;\r\n}\r\n\r\nfunction removeEntity(viewer: Cesium.Viewer, visual: VisualsRegister.Visual): void {\r\n unmarkEntity(visual, false);\r\n if (visual instanceof Cesium.Entity) {\r\n EntityRenderEngine.Remove({\r\n viewer,\r\n entity: visual\r\n });\r\n }\r\n else if (visual instanceof Cesium.Primitive) {\r\n if (viewer.scene.primitives.contains(visual)) {\r\n viewer.scene.primitives.remove(visual);\r\n }\r\n }\r\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\r\n try {\r\n const tileset = visual?.tileset;\r\n if (tileset && viewer.scene.primitives.contains(tileset)) {\r\n visual.show = false;\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n}\r\n\r\nfunction updateCEntityShow(viewer: Cesium.Viewer, visual: EntityRenderEngine.ICesiumEntityExt, show: boolean, ignoreParent: boolean) {\r\n if (visual._parentEntity && !ignoreParent) {\r\n updateCEntityShow(viewer, visual._parentEntity, show, false);\r\n }\r\n if (visual._siblingGraphics) {\r\n for (let i = 0; i < visual._siblingGraphics.length; i++) {\r\n const sibling = visual._siblingGraphics[i];\r\n updateCEntityShow(viewer, sibling, show, true);\r\n }\r\n }\r\n if (viewer.entities.contains(visual)) {\r\n visual.show = show;\r\n }\r\n}\r\n\r\nfunction updateEntityShow(\r\n viewer: Cesium.Viewer,\r\n visual: VisualsRegister.Visual,\r\n show: boolean\r\n): void {\r\n if (visual instanceof Cesium.Entity) {\r\n updateCEntityShow(viewer, visual, show, false);\r\n }\r\n else if (visual instanceof Cesium.Primitive) {\r\n if (viewer.scene.primitives.contains(visual)) {\r\n visual.show = show;\r\n }\r\n }\r\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\r\n // No way to tell if changing show will crash it!\r\n try {\r\n visual.show = show;\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n}\r\n\r\nfunction updateEntity(viewer: Cesium.Viewer, entityId: string, register: VisualsRegister.Register): void {\r\n const isolatedIds = register.GetIsolated();\r\n const isIsolated = isolatedIds.includes(entityId);\r\n const isHidden = register.GetIsHidden({\r\n entityId\r\n });\r\n const regos = register.GetRegos({\r\n entityId\r\n });\r\n let highestPriority: VisualsRegister.IVisualRego = <any>null;\r\n for (let i = 0; i < regos.length; i++) {\r\n const rego = regos[i];\r\n if (highestPriority === null || rego.priority > highestPriority.priority) {\r\n highestPriority = rego;\r\n }\r\n }\r\n\r\n function getShowState(rego: VisualsRegister.IVisualRego) {\r\n if (isHidden) {\r\n return false;\r\n }\r\n if (!isIsolated && isolatedIds.length > 0) {\r\n return false;\r\n }\r\n return rego === highestPriority;\r\n }\r\n\r\n for (let i = 0; i < regos.length; i++) {\r\n const rego = regos[i];\r\n rego.best = rego === highestPriority;\r\n updateEntityShow(viewer, rego.visual, getShowState(rego));\r\n }\r\n}\r\n\r\nfunction markEntity(register: VisualsRegister.Register, rego: VisualsRegister.IVisualRego, visual: VisualsRegister.Visual, ignoreParent: boolean): void {\r\n const vis = <IVisualExt>visual;\r\n vis._register = register;\r\n vis._rego = rego;\r\n if (visual instanceof Cesium.Entity) {\r\n const visEnt = <EntityRenderEngine.ICesiumEntityExt>visual;\r\n if (visEnt._parentEntity && !ignoreParent) {\r\n markEntity(register, rego, visEnt._parentEntity, false);\r\n }\r\n if (visEnt._siblingGraphics) {\r\n for (let i = 0; i < visEnt._siblingGraphics.length; i++) {\r\n markEntity(register, rego, visEnt._siblingGraphics[i], true);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction unmarkEntity(visual: VisualsRegister.Visual, ignoreParent: boolean): void {\r\n const vis = <IVisualExt>visual;\r\n vis._register = <any>null;\r\n if (visual instanceof Cesium.Entity) {\r\n const visEnt = <EntityRenderEngine.ICesiumEntityExt>visual;\r\n if (visEnt._parentEntity && !ignoreParent) {\r\n unmarkEntity(visEnt._parentEntity, false);\r\n }\r\n if (visEnt._siblingGraphics) {\r\n for (let i = 0; i < visEnt._siblingGraphics.length; i++) {\r\n unmarkEntity(visEnt._siblingGraphics[i], true);\r\n }\r\n }\r\n }\r\n}\r\n\r\nconst ORG_COLOR_KEY = \"_org_color_\";\r\n\r\nfunction select(viewer: Cesium.Viewer, visual: VisualsRegister.Visual): 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({\r\n entity: visual\r\n });\r\n const keyMapping = {\r\n \"point\": \"color\",\r\n \"polygon\": \"material\",\r\n \"polyline\": \"material\",\r\n \"model\": \"color\",\r\n \"billboard\": \"color\"\r\n };\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n const processGraphic = (graphicKey: string, materialKey: string) => {\r\n if (entity[graphicKey]) {\r\n if (entity[graphicKey][ORG_COLOR_KEY] == null) {\r\n let orgColor = entity[graphicKey][materialKey];\r\n if (!orgColor) {\r\n orgColor = Cesium.Color.WHITE;\r\n }\r\n entity[graphicKey][ORG_COLOR_KEY] = orgColor.clone ? orgColor.clone() : orgColor;\r\n }\r\n entity[graphicKey][materialKey] = color.clone();\r\n }\r\n };\r\n for (let key in keyMapping) {\r\n const map = keyMapping[key];\r\n processGraphic(key, map);\r\n }\r\n }\r\n }\r\n else if (visual instanceof Cesium.Primitive) {\r\n // TODO.\r\n }\r\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\r\n let orgColor = visual[ORG_COLOR_KEY];\r\n if (orgColor == null) {\r\n orgColor = visual.color;\r\n visual[ORG_COLOR_KEY] = orgColor?.clone?.();\r\n }\r\n visual.color = color.clone();\r\n }\r\n const opacity = EntityUtils.GetOpacity({\r\n entity: visual\r\n });\r\n if (opacity != null) {\r\n EntityUtils.SetOpacity({\r\n viewer,\r\n entity: visual,\r\n opacity\r\n });\r\n }\r\n}\r\n\r\nfunction deselect(viewer: Cesium.Viewer, visual: VisualsRegister.Visual): void {\r\n if (visual instanceof Cesium.Entity) {\r\n const entities = EntityUtils.GatherEntity({\r\n entity: visual\r\n });\r\n const keyMapping = {\r\n \"point\": \"color\",\r\n \"polygon\": \"material\",\r\n \"polyline\": \"material\",\r\n \"model\": \"color\",\r\n \"billboard\": \"color\"\r\n };\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n const processGraphic = (graphicKey: string, materialKey: string) => {\r\n if (entity[graphicKey]?.[ORG_COLOR_KEY]) {\r\n entity[graphicKey][materialKey] = entity[graphicKey][ORG_COLOR_KEY];\r\n }\r\n };\r\n for (let key in keyMapping) {\r\n const map = keyMapping[key];\r\n processGraphic(key, map);\r\n }\r\n }\r\n }\r\n else if (visual instanceof Cesium.Primitive) {\r\n // TODO.\r\n }\r\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\r\n const orgColor = visual[ORG_COLOR_KEY];\r\n if (orgColor != null) {\r\n visual.color = orgColor;\r\n }\r\n }\r\n const opacity = EntityUtils.GetOpacity({\r\n entity: visual\r\n });\r\n if (opacity != null) {\r\n EntityUtils.SetOpacity({\r\n viewer,\r\n entity: visual,\r\n opacity\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Manages a registry of all Bruce visuals being rendered by menu items.\r\n * If multiple stuff is registered with the same entity id, only the \"best\" one is left visible.\r\n */\r\nexport namespace VisualsRegister {\r\n export type Visual = Cesium.Entity | Cesium.Primitive | Cesium.Cesium3DTileFeature;\r\n\r\n export interface IVisualRego {\r\n // Bruce entity id.\r\n entityId: string;\r\n // Source bruce account id.\r\n accountId?: string;\r\n // Relationship if this is a rendered relationship.\r\n relation?: EntityRelation.IRelation;\r\n // Bruce entity type id - if known while menu item was loading the visual.\r\n entityTypeId?: string;\r\n // Bruce data-source id.\r\n // Used to store source-entity-id mapping to entity-id.\r\n sourceId?: number\r\n // External entity id.\r\n sourceEntityId?: string;\r\n // Tileset id from which this visual was loaded from.\r\n tilesetId?: string;\r\n // Menu item id from which this visual was loaded from.\r\n menuItemId: string;\r\n // The visual itself.\r\n visual: Visual;\r\n // The visual's render priority. The highest priority is rendered, lower ones are hidden.\r\n priority: number;\r\n // Indicates if this is the best visual for the entity.\r\n // If multiple visuals are registered for the same entity, only the best one is left visible.\r\n // Warning: Don't assign, the register will do it.\r\n best?: boolean;\r\n // Optional indicator that this visual is stale,\r\n // This means the next re-render of the menu item will update this visual.\r\n stale?: boolean;\r\n // Last updated opacity value. Null = 100% opacity.\r\n // Warning: Don't assign, the register will do it.\r\n opacity?: number;\r\n }\r\n\r\n export enum EVisualUpdateType {\r\n Add = \"ADD\",\r\n Remove = \"REMOVE\",\r\n Update = \"UPDATE\"\r\n }\r\n\r\n export interface IVisualUpdate {\r\n type: EVisualUpdateType;\r\n entityId?: string;\r\n rego?: IVisualRego;\r\n hidden?: boolean;\r\n isolated?: boolean;\r\n selected?: boolean;\r\n opacity?: number;\r\n }\r\n\r\n export class Register {\r\n private id = ObjectUtils.UId();\r\n public get Id(): string {\r\n return this.id;\r\n }\r\n private viewer: Cesium.Viewer;\r\n public get Viewer(): Cesium.Viewer {\r\n return this.viewer;\r\n }\r\n private rego: IDictionary<IVisualRego[]> = {};\r\n private onUpdate: BruceEvent<IVisualUpdate> = <any>null;\r\n public get OnUpdate(): BruceEvent<IVisualUpdate> {\r\n if (!this.onUpdate) {\r\n this.onUpdate = new BruceEvent<IVisualUpdate>();\r\n }\r\n return this.onUpdate;\r\n }\r\n private selectedIds: string[] = [];\r\n private isolatedIds: string[] = [];\r\n private hiddenIds: string[] = [];\r\n // Entity id -> opacity for visual.\r\n private opacity: IDictionary<number> = {};\r\n\r\n\r\n constructor(viewer: Cesium.Viewer) {\r\n this.viewer = viewer;\r\n }\r\n\r\n public SetSelected(params: {\r\n selected: boolean,\r\n entityIds: string[],\r\n refreshIfSelected?: boolean\r\n }): void {\r\n let { entityIds, selected, refreshIfSelected } = params;\r\n if (refreshIfSelected == null) {\r\n refreshIfSelected = true;\r\n }\r\n for (let i = 0; i < entityIds.length; i++) {\r\n const id = entityIds[i];\r\n if (selected) {\r\n let doSelect = refreshIfSelected;\r\n if (this.selectedIds.indexOf(id) === -1) {\r\n this.selectedIds.push(id);\r\n doSelect = true;\r\n }\r\n if (doSelect) {\r\n const regos = this.rego[id];\r\n if (regos) {\r\n for (let i = 0; i < regos.length; i++) {\r\n const rego = regos[i];\r\n select(this.viewer, rego.visual);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n const index = this.selectedIds.indexOf(id);\r\n if (index !== -1) {\r\n this.selectedIds.splice(index, 1);\r\n const regos = this.rego[id];\r\n if (regos) {\r\n for (let i = 0; i < regos.length; i++) {\r\n const rego = regos[i];\r\n deselect(this.viewer, rego.visual);\r\n }\r\n }\r\n }\r\n }\r\n this.onUpdate?.Trigger({\r\n entityId: id,\r\n type: EVisualUpdateType.Update,\r\n selected: selected\r\n });\r\n }\r\n }\r\n\r\n public GetIsSelected(params: {\r\n entityId: string\r\n }): boolean {\r\n const { entityId: id } = params;\r\n return this.selectedIds.indexOf(id) !== -1;\r\n }\r\n\r\n public ClearSelected(): void {\r\n for (let i = 0; i < this.selectedIds.length; i++) {\r\n const id = this.selectedIds[i];\r\n const regos = this.rego[id];\r\n if (regos) {\r\n for (let i = 0; i < regos.length; i++) {\r\n const rego = regos[i];\r\n deselect(this.viewer, rego.visual);\r\n }\r\n }\r\n }\r\n this.selectedIds = [];\r\n }\r\n\r\n public GetSelected() {\r\n return this.selectedIds;\r\n }\r\n\r\n public SetIsolated(params: {\r\n entityIds: string[],\r\n isolated: boolean\r\n }): void {\r\n const { entityIds, isolated: isolate } = params;\r\n for (let i = 0; i < entityIds.length; i++) {\r\n const id = entityIds[i];\r\n if (isolate) {\r\n if (this.isolatedIds.indexOf(id) === -1) {\r\n this.isolatedIds.push(id);\r\n }\r\n }\r\n else {\r\n const index = this.isolatedIds.indexOf(id);\r\n if (index !== -1) {\r\n this.isolatedIds.splice(index, 1);\r\n }\r\n }\r\n this.onUpdate?.Trigger({\r\n entityId: id,\r\n type: EVisualUpdateType.Update,\r\n isolated: isolate\r\n });\r\n }\r\n this.updateAllEntities();\r\n }\r\n\r\n public GetIsIsolated(params: {\r\n entityId: string\r\n }): boolean {\r\n const { entityId: id } = params;\r\n return this.isolatedIds.indexOf(id) !== -1;\r\n }\r\n\r\n public GetIsolated() {\r\n return this.isolatedIds;\r\n }\r\n\r\n public ClearIsolated(): void {\r\n this.isolatedIds = [];\r\n this.updateAllEntities();\r\n }\r\n\r\n public SetHidden(params: {\r\n hidden: boolean,\r\n entityIds: string[]\r\n }): void {\r\n const { entityIds, hidden } = params;\r\n for (let i = 0; i < entityIds.length; i++) {\r\n const id = entityIds[i];\r\n if (hidden) {\r\n if (this.hiddenIds.indexOf(id) === -1) {\r\n this.hiddenIds.push(id);\r\n }\r\n updateEntity(this.viewer, id, this);\r\n }\r\n else {\r\n const index = this.hiddenIds.indexOf(id);\r\n if (index !== -1) {\r\n this.hiddenIds.splice(index, 1);\r\n }\r\n updateEntity(this.viewer, id, this);\r\n }\r\n this.onUpdate?.Trigger({\r\n entityId: id,\r\n type: EVisualUpdateType.Update,\r\n hidden: hidden\r\n });\r\n }\r\n }\r\n\r\n public GetIsHidden(params: {\r\n entityId: string\r\n }): boolean {\r\n const { entityId: id } = params;\r\n return this.hiddenIds.indexOf(id) !== -1;\r\n }\r\n\r\n public GetHidden() {\r\n return this.hiddenIds;\r\n }\r\n\r\n public ClearHidden(): void {\r\n this.hiddenIds = [];\r\n this.updateAllEntities();\r\n this.onUpdate?.Trigger({\r\n type: EVisualUpdateType.Update,\r\n hidden: false\r\n });\r\n }\r\n\r\n public AddRego(params: {\r\n rego: IVisualRego\r\n }): void {\r\n const { rego } = params;\r\n this.RemoveRegos({\r\n entityId: rego.entityId,\r\n menuItemId: rego.menuItemId,\r\n doUpdate: false\r\n });\r\n const entityId = rego.entityId;\r\n const entityRegos = this.rego[entityId] ?? [];\r\n entityRegos.push(rego);\r\n this.rego[entityId] = entityRegos;\r\n markEntity(this, rego, rego.visual, false);\r\n updateEntity(this.viewer, entityId, this);\r\n\r\n const selected = this.selectedIds.includes(entityId);\r\n if (selected) {\r\n select(this.viewer, rego.visual);\r\n }\r\n const opacity = this.opacity[entityId];\r\n if (opacity != null && opacity != 1) {\r\n EntityUtils.SetOpacity({\r\n entity: rego.visual,\r\n opacity: opacity,\r\n viewer: this.viewer\r\n });\r\n }\r\n\r\n this.onUpdate?.Trigger({\r\n rego: rego,\r\n type: EVisualUpdateType.Add,\r\n entityId: rego.entityId,\r\n opacity: opacity,\r\n selected: selected\r\n });\r\n }\r\n\r\n /**\r\n * Locates a visual corresponding to a given entity id.\r\n * If no menu item id is provided, then it will pick the \"best\" one.\r\n * @param entityId\r\n * @param menuItemId\r\n * @returns\r\n */\r\n public GetRego(params: {\r\n entityId: string,\r\n menuItemId?: string\r\n }): IVisualRego {\r\n const { entityId, menuItemId } = params;\r\n const entityRegos = this.rego[entityId];\r\n if (!entityRegos) {\r\n return <any>[];\r\n }\r\n if (menuItemId) {\r\n return <any>entityRegos.find(r => r.menuItemId === menuItemId);\r\n }\r\n return entityRegos.find(x => x.best);\r\n }\r\n\r\n /**\r\n * Returns regos matching given criteria.\r\n * Either entityId or menuItemId must be provided.\r\n * @param params\r\n * @returns\r\n */\r\n public GetRegos(params: {\r\n entityId?: string,\r\n menuItemId?: string\r\n }): IVisualRego[] {\r\n // TODO: refactor.\r\n // Currently this was made by merging two functions.\r\n\r\n const { entityId, menuItemId } = params;\r\n if (entityId) {\r\n const entityId = params.entityId;\r\n const entityRegos = this.rego[entityId];\r\n if (!entityRegos) {\r\n return <any>[];\r\n }\r\n return menuItemId ? entityRegos.filter(x => x.menuItemId == menuItemId) : entityRegos;\r\n }\r\n else if (menuItemId) {\r\n const menuItemId = params.menuItemId;\r\n const visuals: IVisualRego[] = [];\r\n for (const entityId in this.rego) {\r\n const entityRegos = this.rego[entityId];\r\n if (entityRegos) {\r\n const rego = entityRegos.find(r => r.menuItemId === menuItemId);\r\n if (rego) {\r\n visuals.push(rego);\r\n }\r\n }\r\n }\r\n return visuals;\r\n }\r\n }\r\n\r\n /**\r\n * Removes regos matching given criteria.\r\n * Either entityId or menuItemId must be provided.\r\n * @param params\r\n * @returns\r\n */\r\n public RemoveRegos(params: {\r\n entityId?: string,\r\n menuItemId?: string,\r\n relation?: EntityRelation.IRelation,\r\n doUpdate?: boolean\r\n }): void {\r\n let { entityId, menuItemId, doUpdate, relation } = params;\r\n if (doUpdate == null) {\r\n doUpdate = true;\r\n }\r\n\r\n // TODO: refactor.\r\n // Currently this was made by merging two functions.\r\n\r\n if (menuItemId && !entityId) {\r\n for (const entityId in this.rego) {\r\n const entityRegos = this.rego[entityId];\r\n if (entityRegos) {\r\n const rego = entityRegos.find(r => r.menuItemId === menuItemId);\r\n if (!rego) {\r\n continue;\r\n }\r\n removeEntity(this.viewer, rego.visual);\r\n const doesInclude = this.rego[entityId].find(r => r.menuItemId === menuItemId);\r\n if (doesInclude) {\r\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== menuItemId);\r\n }\r\n this.onUpdate?.Trigger({\r\n type: EVisualUpdateType.Remove,\r\n entityId: rego.entityId,\r\n rego: rego\r\n });\r\n if (doesInclude) {\r\n updateEntity(this.viewer, entityId, this);\r\n }\r\n }\r\n }\r\n }\r\n else if (entityId) {\r\n const entityRegos = this.rego[entityId];\r\n if (!entityRegos) {\r\n return;\r\n }\r\n const menuItems = menuItemId ? [menuItemId] : entityRegos.map(x => x.menuItemId);\r\n for (let i = 0; i < menuItems.length; i++) {\r\n const menuItemId = menuItems[i];\r\n const rego = entityRegos.find(r => r.menuItemId === menuItemId);\r\n if (!rego) {\r\n return;\r\n }\r\n removeEntity(this.viewer, rego.visual);\r\n this.onUpdate?.Trigger({\r\n type: EVisualUpdateType.Remove,\r\n entityId: rego.entityId,\r\n rego: rego\r\n });\r\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== menuItemId);\r\n if (doUpdate && menuItemId) {\r\n updateEntity(this.viewer, entityId, this);\r\n }\r\n }\r\n }\r\n else if (relation) {\r\n const relationKey = RelationRenderEngine.GetRenderGroupId(relation);\r\n for (const entityId in this.rego) {\r\n const entityRegos = this.rego[entityId];\r\n if (entityRegos) {\r\n const rego = entityRegos.find(r => r.relation && RelationRenderEngine.GetRenderGroupId(r.relation) == relationKey);\r\n if (!rego) {\r\n continue;\r\n }\r\n removeEntity(this.viewer, rego.visual);\r\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== menuItemId);\r\n this.onUpdate?.Trigger({\r\n type: EVisualUpdateType.Remove,\r\n entityId: rego.entityId,\r\n rego: rego\r\n });\r\n if (doUpdate && menuItemId) {\r\n updateEntity(this.viewer, entityId, this);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Returns an array of drilled visuals associated with this register.\r\n * The top array item is the first found.\r\n * @param cursor\r\n * @returns\r\n */\r\n public GetRegosFromCursor(params: {\r\n cursor: Cartes.ICartes2,\r\n // Pixel width/height. Default is 5x5 pixels.\r\n width?: number,\r\n height?: number\r\n }): {\r\n regos: IVisualRego[]\r\n } {\r\n const { cursor } = params;\r\n const found: IVisualRego[] = [];\r\n\r\n const width = Math.ceil(EnsureNumber(params.width, 5));\r\n const height = Math.ceil(EnsureNumber(params.height, 5));\r\n const x = Math.ceil(cursor.x - width / 2);\r\n const y = Math.ceil(cursor.y - height / 2);\r\n\r\n const picked = this.viewer.scene.drillPick(new Cesium.Cartesian2(x, y), 5, width, height);\r\n for (let i = 0; i < picked.length; i++) {\r\n const object = picked[i];\r\n const entity = <Visual>(object && object.id && object.id instanceof Cesium.Entity ? object.id : object);\r\n const visual = <IVisualExt>entity;\r\n if (visual?._register?.Id == this.id) {\r\n found.push(<IVisualRego>visual._rego);\r\n }\r\n }\r\n return {\r\n regos: found\r\n };\r\n }\r\n\r\n /**\r\n * Returns all registered entity ids.\r\n */\r\n public GetEntityIds(): string[] {\r\n const ids: string[] = [];\r\n for (const entityId in this.rego) {\r\n const regos = this.rego[entityId];\r\n if (regos && regos.length) {\r\n ids.push(entityId);\r\n }\r\n }\r\n return ids;\r\n }\r\n\r\n /**\r\n * Marks regos corresponding to given entity ids as stale.\r\n * This will cause them to be updated on the next update cycle.\r\n * Optionally include menu item ids to restrict the filter.\r\n * @param params\r\n */\r\n public MarkStale(params: {\r\n entityIds: string[],\r\n menuItemIds?: string[]\r\n }) {\r\n const { entityIds, menuItemIds } = params;\r\n for (const entityId of entityIds) {\r\n const regos = this.rego[entityId];\r\n if (regos && regos.length) {\r\n for (const rego of regos) {\r\n if (!menuItemIds || menuItemIds.includes(rego.menuItemId)) {\r\n rego.stale = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private updateAllEntities() {\r\n for (const entityId in this.rego) {\r\n const regos = this.rego[entityId];\r\n if (regos && regos.length) {\r\n updateEntity(this.viewer, entityId, this);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets opacity for given set of entities.\r\n * 100% opacity is treated as \"use original\".\r\n * @param params\r\n */\r\n public SetOpacity(params: {\r\n opacity: number,\r\n entityIds: string[],\r\n menuItemId?: string\r\n }) {\r\n const { entityIds, menuItemId: menuItemIds } = params;\r\n for (const entityId of entityIds) {\r\n const regos = this.rego[entityId];\r\n if (regos && regos.length) {\r\n for (const rego of regos) {\r\n if (\r\n rego.visual &&\r\n (!menuItemIds || menuItemIds.includes(rego.menuItemId))\r\n ) {\r\n if (params.opacity == 1) {\r\n EntityUtils.RevertOpacity({\r\n entity: rego.visual,\r\n viewer: this.viewer\r\n });\r\n }\r\n else {\r\n EntityUtils.SetOpacity({\r\n entity: rego.visual,\r\n opacity: params.opacity,\r\n viewer: this.viewer\r\n });\r\n }\r\n this.opacity[rego.entityId] = params.opacity;\r\n this.onUpdate?.Trigger({\r\n rego: rego,\r\n type: EVisualUpdateType.Update,\r\n entityId: rego.entityId,\r\n opacity: params.opacity\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Returns opacity for given entity/s.\r\n * If multiple entities are supplied, then the average is returned.\r\n * Unknown opacity is treated as 100% opacity.\r\n * @param params\r\n * @returns\r\n */\r\n public GetOpacity(params: {\r\n entityIds: string[],\r\n menuItemIds?: string\r\n }) {\r\n let totalOpacity = null;\r\n let totalTicks = 0;\r\n const { entityIds, menuItemIds } = params;\r\n for (const entityId of entityIds) {\r\n const regos = this.rego[entityId];\r\n if (regos && regos.length) {\r\n for (const rego of regos) {\r\n if (\r\n rego.visual &&\r\n (!menuItemIds || menuItemIds.includes(rego.menuItemId))\r\n ) {\r\n const opacity = this.opacity[rego.entityId];\r\n if (opacity != null) {\r\n totalOpacity += opacity;\r\n totalTicks += 1;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return totalOpacity ? totalOpacity / totalTicks : 1;\r\n }\r\n\r\n public ClearOpacity() {\r\n for (const entityId in this.opacity) {\r\n const regos = this.rego[entityId];\r\n if (regos && regos.length) {\r\n for (const rego of regos) {\r\n if (rego?.visual) {\r\n EntityUtils.RevertOpacity({\r\n entity: rego.visual,\r\n viewer: this.viewer\r\n });\r\n }\r\n }\r\n }\r\n }\r\n this.opacity = {};\r\n }\r\n\r\n /**\r\n * Returns a dictionary containing entityId -> opacity values.\r\n * Opacity 1 = 100%.\r\n * @returns\r\n */\r\n public GetOpacityMap(): IDictionary<number> {\r\n return this.opacity ? JSON.parse(JSON.stringify(this.opacity)) : {};\r\n }\r\n }\r\n}","import { BatchedDataGetter, BruceApi, Entity, IDictionary, MenuItem } from \"bruce-models\";\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(params: {\r\n viewer: Cesium.Viewer, \r\n register: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n monitor: CesiumViewMonitor,\r\n item: MenuItem.Item.IEntityIds\r\n }) {\r\n const { viewer, apiGetter, monitor, item, register: visualsManager } = params;\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.monitor = monitor;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public 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.RemoveRegos({\r\n menuItemId: this.item.id\r\n });\r\n }\r\n\r\n public async ReRender(entityIds?: string[]) {\r\n if (entityIds == null) {\r\n entityIds = Object.keys(this.renderedEntities);\r\n }\r\n else {\r\n // ensure entity ids are part of menu item.\r\n entityIds = entityIds.filter(x => {\r\n return this.item.BruceEntity?.EntityIds.includes(x);\r\n })\r\n }\r\n this.visualsManager.MarkStale({\r\n entityIds: entityIds, \r\n menuItemIds: [this.item.id]\r\n });\r\n this.onGetterUpdate(entityIds);\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({\r\n api, \r\n entityIds\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({\r\n entityId: id, \r\n menuItemId: this.item.id\r\n })?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.AddRego({\r\n rego: {\r\n entityId: id,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0,\r\n entityTypeId: entity.Bruce[\"EntityType.ID\"],\r\n accountId: this.apiGetter.accountId\r\n }\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.RemoveRegos({\r\n entityId: id, \r\n menuItemId: this.item.id\r\n });\r\n }\r\n }\r\n }\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(params: {\r\n viewer: Cesium.Viewer, \r\n register: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n monitor: CesiumViewMonitor, \r\n item: MenuItem.Item.IBruceEntity\r\n }) {\r\n const { viewer, apiGetter, monitor, item, register: visualsManager } = params;\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.monitor = monitor;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public 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.RemoveRegos({\r\n menuItemId: this.item.id\r\n });\r\n }\r\n\r\n public async ReRender(entityIds?: string[]) {\r\n if (entityIds && !entityIds.includes(this.item.BruceEntity.EntityId)) {\r\n return;\r\n }\r\n this.visualsManager.MarkStale({\r\n entityIds: entityIds, \r\n menuItemIds: [this.item.id]\r\n });\r\n await this.onGetterUpdate(this.item.BruceEntity.EntityId);\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({\r\n api, \r\n entityId: id\r\n });\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({\r\n entityId: id, \r\n menuItemId: this.item.id\r\n })?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.AddRego({\r\n rego: {\r\n entityId: <string>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 accountId: this.apiGetter.accountId\r\n }\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.RemoveRegos({\r\n entityId: id, \r\n menuItemId: this.item.id\r\n });\r\n }\r\n }\r\n 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, 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?.scene) {\r\n return false;\r\n }\r\n if (viewer.isDestroyed()) {\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 IPositionParams {\r\n ucs?: {\r\n location?: Carto.ICarto;\r\n transform?: Transform.ITransform;\r\n },\r\n location?: Carto.ICarto;\r\n transform?: Transform.ITransform;\r\n isLegacy?: boolean;\r\n legacyProps?: {\r\n usingBoundingBox?: boolean;\r\n transform?: boolean;\r\n rotate?: boolean;\r\n }\r\n }\r\n\r\n export interface ISettingsParams {\r\n maxScreenSpaceError?: number;\r\n attenuation?: boolean;\r\n maximumAttenuation?: number;\r\n colorMask?: string;\r\n }\r\n\r\n export interface ITilesetExt extends Cesium.Cesium3DTileset {\r\n _bruceCoords?: IPositionParams;\r\n _bruceSettings?: ISettingsParams;\r\n }\r\n\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(params: {\r\n cTileset: Cesium.Cesium3DTileset\r\n position: IPositionParams\r\n }): void {\r\n const cTileset = params.cTileset;\r\n const root = cTileset.root;\r\n const position = params.position;\r\n const location = position.ucs?.location ? position.ucs.location : position.location;\r\n let transform = position.transform;\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 /**\r\n * Very cursed.\r\n */\r\n if (position.isLegacy) {\r\n const legacy = position.legacyProps;\r\n if (legacy.usingBoundingBox == null) {\r\n legacy.usingBoundingBox = true;\r\n }\r\n\r\n const offsetPoint = (pos: Cesium.Cartographic, distance: number, bearing: number): Cesium.Cartographic => {\r\n // radius of earth\r\n let radius: number = 6371e3;\r\n let δ = distance / radius;\r\n let θ = Cesium.Math.toRadians(bearing);\r\n let φ1 = Cesium.Math.toRadians(pos.latitude);\r\n let λ1 = Cesium.Math.toRadians(pos.longitude);\r\n let sinφ2 = Math.sin(φ1) * Math.cos(δ) + Math.cos(φ1) * Math.sin(δ) * Math.cos(θ);\r\n let φ2 = Math.asin(sinφ2);\r\n let y = Math.sin(θ) * Math.sin(δ) * Math.cos(φ1);\r\n let x = Math.cos(δ) - Math.sin(φ1) * sinφ2;\r\n let λ2 = λ1 + Math.atan2(y, x);\r\n let finalPos: Cesium.Cartographic = new Cesium.Cartographic(λ2, φ2, pos.height);\r\n finalPos.latitude = Cesium.Math.toDegrees(finalPos.latitude);\r\n finalPos.longitude = Cesium.Math.toDegrees(finalPos.longitude);\r\n return finalPos;\r\n }\r\n\r\n const getOffset = (pos: Cesium.Cartesian3, n: number, e: number, alt: number): Cesium.Cartesian3 => {\r\n if (n == 0 && e == 0 && alt == 0) {\r\n return new Cesium.Cartesian3(0, 0, 0);\r\n }\r\n let carto: Cesium.Cartographic = Cesium.Cartographic.fromCartesian(pos);\r\n carto.latitude = Cesium.Math.toDegrees(carto.latitude);\r\n carto.longitude = Cesium.Math.toDegrees(carto.longitude);\r\n // North\r\n if (n != 0) {\r\n carto = offsetPoint(carto, Number(n), 0);\r\n }\r\n // East\r\n if (e != 0) {\r\n carto = offsetPoint(carto, Number(e), 90);\r\n }\r\n // Altitude\r\n carto.height += Number(alt);\r\n let finalOffset: Cesium.Cartesian3 = Cesium.Cartesian3.fromDegrees(carto.longitude, carto.latitude, carto.height);\r\n finalOffset.x -= pos.x;\r\n finalOffset.y -= pos.y;\r\n finalOffset.z -= pos.z;\r\n return finalOffset;\r\n }\r\n\r\n const getCurPos3d = () => {\r\n if (legacy.usingBoundingBox == false) {\r\n return Cesium.Matrix4.getTranslation(root.transform, new Cesium.Cartesian3());\r\n }\r\n else {\r\n return Cesium.Cartesian3.clone(root.boundingSphere.center);\r\n }\r\n };\r\n\r\n let pos3d: Cesium.Cartesian3;\r\n if (location.latitude != null && location.longitude != null) {\r\n pos3d = Cesium.Cartesian3.fromDegrees(\r\n EnsureNumber(location.longitude),\r\n EnsureNumber(location.latitude),\r\n EnsureNumber(location.altitude)\r\n );\r\n }\r\n if (!pos3d) {\r\n pos3d = getCurPos3d();\r\n }\r\n const offset = getOffset(pos3d, transform.x, transform.y, transform.z);\r\n if (Cartes.ValidateCartes3(offset)) {\r\n pos3d.x += offset.x;\r\n pos3d.y += offset.y;\r\n pos3d.z += offset.z;\r\n }\r\n\r\n if (legacy.rotate) {\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 root.transform = Cesium.Transforms.headingPitchRollToFixedFrame(pos3d, hpr);\r\n (<any>root).updateTransform();\r\n }\r\n\r\n const curPos3d = getCurPos3d();\r\n const newTransform = Cesium.Matrix4.pack(root.transform.clone(new Cesium.Matrix4()), []);\r\n newTransform[12] += pos3d.x - curPos3d.x;\r\n newTransform[13] += pos3d.y - curPos3d.y;\r\n newTransform[14] += pos3d.z - curPos3d.z;\r\n root.transform = Cesium.Matrix4.unpack(newTransform);\r\n (<any>root).updateTransform();\r\n }\r\n else {\r\n if (!location?.latitude) {\r\n return;\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 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 // Store data in the tileset as we can't interpret it using the cesium primitive later.\r\n const cTilesetExt = cTileset as ITilesetExt;\r\n cTilesetExt._bruceCoords = {\r\n ...position\r\n };\r\n }\r\n\r\n export function ApplySettings(params: {\r\n cTileset: Cesium.Cesium3DTileset,\r\n settings: ISettingsParams\r\n }): void {\r\n const { cTileset, settings } = params;\r\n cTileset.maximumScreenSpaceError = EnsureNumber(settings.maxScreenSpaceError, 5);\r\n cTileset.pointCloudShading.attenuation = Boolean(settings.attenuation);\r\n cTileset.pointCloudShading.maximumAttenuation = EnsureNumber(settings.maximumAttenuation, 4);\r\n if (settings.colorMask) {\r\n cTileset.style = new Cesium.Cesium3DTileStyle({\r\n color: settings.colorMask\r\n });\r\n }\r\n\r\n const cTilesetExt = cTileset as ITilesetExt;\r\n cTilesetExt._bruceSettings = {\r\n ...settings\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 const loadUrl = params.tileset.loadUrl;\r\n\r\n if (params.tileset.type == Tileset.EType.Cad) {\r\n const cTileset = new Cesium.Cesium3DTileset({\r\n url: loadUrl ? loadUrl : Tileset.GetPublicFileUrl({\r\n api,\r\n tilesetId: params.tileset.id,\r\n file: \"tileset.json\"\r\n }) + \"?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 const settings = params.tileset.settings as Tileset.Settings.ICad;\r\n ApplySettings({\r\n cTileset,\r\n settings: {\r\n maxScreenSpaceError: settings.maximumScreenSpaceError\r\n }\r\n });\r\n ApplyPosition({\r\n cTileset,\r\n position: {\r\n ucs: params.coords?.ucs,\r\n location: params.coords?.location == null ? settings.location : params.coords.location,\r\n transform: params.coords?.transform == null ? settings.transform : params.coords.transform\r\n }\r\n });\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: loadUrl ? loadUrl : Tileset.GetPublicFileUrl({\r\n api,\r\n tilesetId: params.tileset.id,\r\n file: \"tileset.json\"\r\n }) + \"?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: loadUrl ? loadUrl : Tileset.GetPublicFileUrl({\r\n api,\r\n tilesetId: params.tileset.id,\r\n file: \"tileset.json\"\r\n }) + \"?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 const settings = params.tileset.settings as Tileset.Settings.IPointcloud;\r\n ApplySettings({\r\n cTileset,\r\n settings: {\r\n attenuation: settings.attenuation,\r\n maximumAttenuation: settings.attenuationMax,\r\n maxScreenSpaceError: settings.maximumScreenSpaceError\r\n }\r\n });\r\n ApplyPosition({\r\n cTileset,\r\n position: {\r\n location: settings.location,\r\n transform: settings.transform\r\n }\r\n });\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 async function RenderLegacy(params: {\r\n apiGetter: BruceApi.IGetter,\r\n viewer: Cesium.Viewer,\r\n ionId?: string | number,\r\n tileset?: any,\r\n loadUrl?: string\r\n }) {\r\n let { apiGetter, viewer, tileset, ionId, loadUrl } = params;\r\n\r\n let settings = tileset?.Settings;\r\n settings = {\r\n ...settings\r\n };\r\n let visual = settings.visual;\r\n visual = {\r\n ...visual\r\n };\r\n let etc = settings.etc;\r\n etc = {\r\n ...etc\r\n };\r\n\r\n if (ionId) {\r\n // TODO: Can cause issues with menu-item dispose race conditions.\r\n loadUrl = (await Cesium.IonResource.fromAssetId(EnsureNumber(ionId))) as any;\r\n }\r\n else if (etc?.ExternalTilesetURL) {\r\n loadUrl = etc.ExternalTilesetURL;\r\n }\r\n if (!loadUrl && tileset) {\r\n const api = apiGetter.getApi(apiGetter.accountId);\r\n loadUrl = api.GetBaseUrl() + `ui.tileset/${tileset.ID}/file/tileset.json`;\r\n }\r\n\r\n const cTileset = new Cesium.Cesium3DTileset({\r\n url: loadUrl\r\n });\r\n viewer.scene.primitives.add(cTileset);\r\n\r\n cTileset.readyPromise.then(() => {\r\n try {\r\n if (!isAlive(viewer, cTileset)) {\r\n return;\r\n }\r\n if (tileset) {\r\n let settings = tileset.Settings;\r\n settings = {\r\n ...settings\r\n };\r\n let origin = settings.origin;\r\n origin = {\r\n ...origin\r\n };\r\n let etc = settings.etc;\r\n etc = {\r\n ...etc\r\n };\r\n let positionOffset = settings.positionOffset;\r\n positionOffset = {\r\n ...positionOffset\r\n };\r\n const rotation = settings.rotation;\r\n\r\n ApplySettings({\r\n cTileset,\r\n settings: {\r\n attenuation: visual.attenuation != false,\r\n colorMask: visual.colorMask,\r\n maximumAttenuation: visual.attenuationMax,\r\n maxScreenSpaceError: visual.maximumScreenSpaceError\r\n }\r\n });\r\n\r\n ApplyPosition({\r\n cTileset: cTileset,\r\n position: {\r\n transform: rotation ? {\r\n heading: rotation.z,\r\n pitch: rotation.x,\r\n roll: rotation.y,\r\n scale: 1,\r\n z: EnsureNumber(positionOffset?.altitude),\r\n x: EnsureNumber(positionOffset?.latitude),\r\n y: EnsureNumber(positionOffset?.longitude)\r\n } : null,\r\n location: origin?.latitude ? {\r\n latitude: origin.latitude,\r\n longitude: origin.longitude,\r\n altitude: origin.altitude\r\n } : null,\r\n isLegacy: true,\r\n legacyProps: {\r\n rotate: etc.dontRotate != true,\r\n transform: etc.dontTransform != true,\r\n usingBoundingBox: etc.usingBoundingBox != false\r\n }\r\n }\r\n });\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n });\r\n return cTileset;\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({\r\n api: this.api,\r\n entityIds\r\n });\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 {style: data} = await Style.Get({\r\n api: this.api,\r\n styleId: fallbackStyleId\r\n });\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({\r\n api: this.api,\r\n entityTypeId: styleMap.EntityTypeID\r\n });\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 {style: data} = await Style.Get({\r\n api: this.api,\r\n styleId\r\n });\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 } 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\nimport { EnsureNumber } from \"../../../internal/js-utils\";\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 public get Tileset(): Cesium.Cesium3DTileset {\r\n return this.cTileset;\r\n }\r\n private styler: TilesetRenderEngine.CadStyler = <any>null;\r\n \r\n constructor(params: {\r\n viewer: Cesium.Viewer, \r\n register: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n item: MenuItem.Item.ICadTileset\r\n }) {\r\n const { viewer, register: visualsManager, apiGetter, item } = params;\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({\r\n api, \r\n tilesetId\r\n });\r\n if (!tileset) {\r\n return;\r\n }\r\n\r\n const settings = <Tileset.Settings.ICad>tileset.settings;\r\n const rootId = settings.rootEntityId;\r\n const {coords} = await EntityCoords.GetEntityCoords({\r\n api, \r\n rootEntityId: rootId\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: 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\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.StyleBlending) {\r\n let blending = this.item.StyleBlending;\r\n this.cTileset.colorBlendMode = EnsureNumber(blending?.blendMode, Cesium.Cesium3DTileColorBlendMode.MIX);\r\n this.cTileset.colorBlendAmount = EnsureNumber(blending?.blendPercent, 0.9); \r\n }\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 && this.styler) {\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 accountId: this.item.tileset?.ClientAccountID ?? this.apiGetter.accountId\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\r\n if (!rego.entityId) {\r\n return null;\r\n }\r\n // Optional menu item restriction.\r\n // Allows only showing certain entities from a tileset.\r\n const onlyIds = this.item.BruceEntity?.EntityIds;\r\n if (onlyIds?.length && !onlyIds.includes(rego.entityId)) {\r\n if (this.item.BruceEntity.Ghosts) {\r\n feature.color = Cesium.Color.WHITE.clone().withAlpha(0.5);\r\n }\r\n else {\r\n feature.show = false;\r\n }\r\n return null;\r\n }\r\n\r\n this.visualsManager.AddRego({\r\n rego\r\n });\r\n return rego;\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.RemoveRegos({\r\n menuItemId: this.item.id\r\n });\r\n }\r\n\r\n public async ReRender(entityIds?: string[]) {\r\n if (!this.styler) {\r\n return;\r\n }\r\n let regos: VisualsRegister.IVisualRego[] = this.visualsManager.GetRegos({\r\n menuItemId: this.item.id\r\n });\r\n if (entityIds != null) {\r\n regos = regos.filter(r => entityIds.indexOf(r.entityId) >= 0);\r\n }\r\n this.styler.QueueEntities(regos);\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 // This could potentially crash, but if it crashes here then it would crash during API request anyways.\r\n cacheKey += JSON.stringify(params.attrFilter ? 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: IDictionary<string>;\r\n monitor: CesiumViewMonitor;\r\n }\r\n\r\n export class Cache {\r\n private data: IDictionary<EntityFilterGetter.Getter> = {};\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 public get Tileset(): Cesium.Cesium3DTileset {\r\n return this.cTileset;\r\n }\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(params: {\r\n viewer: Cesium.Viewer, \r\n register: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n monitor: CesiumViewMonitor, \r\n item: MenuItem.Item.IOsm\r\n }) {\r\n const { viewer, register: visualsManager, apiGetter, monitor, item } = params;\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.RemoveRegos({\r\n menuItemId: this.item.id\r\n });\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 {idMapping: bIds} = await EntitySource.GetEntityIdsBySourceKeys({\r\n api, \r\n sourceId: this.sourceId, \r\n sourceKeys: featureIds\r\n });\r\n\r\n for (let i = 0; i < featureIds.length; i++) {\r\n const osmId = featureIds[i];\r\n let bruceId = bIds[osmId];\r\n if (!bruceId) {\r\n bruceId = 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: bruceId,\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 sourceEntityId: osmId,\r\n accountId: this.apiGetter.accountId\r\n } as VisualsRegister.IVisualRego;\r\n this.visualsManager.AddRego({\r\n rego\r\n });\r\n this._loadedCesiumEntities[bruceId] = 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.RemoveRegos({\r\n entityId: rego.entityId, \r\n menuItemId: this.item.id\r\n });\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 public async ReRender(entityIds?: string[]) {\r\n if (entityIds == null) {\r\n\r\n }\r\n else {\r\n\r\n }\r\n }\r\n }\r\n}","import { BruceApi, MenuItem, Tileset } 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 public get Tileset(): Cesium.Cesium3DTileset {\r\n return this.cTileset;\r\n }\r\n private typeId: string;\r\n \r\n constructor(params: {\r\n viewer: Cesium.Viewer, \r\n register: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n item: MenuItem.Item.ICadTileset\r\n }) {\r\n const { viewer, register: visualsManager, apiGetter, item } = params;\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({\r\n api, \r\n tilesetId\r\n });\r\n if (!tileset) {\r\n return;\r\n }\r\n this.typeId = (tileset.settings as Tileset.Settings.IEntities).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.RemoveRegos({\r\n menuItemId: this.item.id\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 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 tilesetId: this.item.tileset?.TilesetID,\r\n accountId: this.item.tileset?.ClientAccountID ?? this.apiGetter.accountId\r\n };\r\n this.visualsManager.AddRego({\r\n rego\r\n });\r\n }\r\n }\r\n\r\n public async ReRender(entityIds?: string[]) {\r\n if (entityIds == null) {\r\n\r\n }\r\n else {\r\n\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 public get Tileset(): Cesium.Cesium3DTileset {\r\n return this.cTileset;\r\n }\r\n \r\n constructor(params: {\r\n viewer: Cesium.Viewer, \r\n apiGetter: BruceApi.IGetter, \r\n item: MenuItem.Item.IPointcloud\r\n }) {\r\n const { viewer, apiGetter, item } = params;\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({\r\n api, \r\n tilesetId\r\n });\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 public async ReRender(entityIds?: string[]) {\r\n if (entityIds == null) {\r\n\r\n }\r\n else {\r\n\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 dataSources: Cesium.KmlDataSource[] = [];\r\n\r\n constructor(params: {\r\n viewer: Cesium.Viewer,\r\n apiGetter: BruceApi.IGetter,\r\n item: MenuItem.Item.IKml\r\n }) {\r\n const { viewer, apiGetter, item } = params;\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 let files = this.item.KML;\r\n if (!files) {\r\n return;\r\n }\r\n if (!Array.isArray(files)) {\r\n files = [files];\r\n }\r\n for (let i = 0; i < files.length; i++) {\r\n const file = files[i];\r\n const fileId = file?.ClientFile?.ID;\r\n if (!fileId) {\r\n continue;\r\n }\r\n const api = this.apiGetter.getApi();\r\n const fileUrl = ClientFile.GetUrl({\r\n api,\r\n fileId\r\n });\r\n const source = new Cesium.KmlDataSource();\r\n source.load(fileUrl);\r\n this.viewer.dataSources.add(source);\r\n this.dataSources.push(source);\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.viewer?.isDestroyed()) {\r\n for (let i = 0; i < this.dataSources.length; i++) {\r\n const source = this.dataSources[i];\r\n if (\r\n source &&\r\n this.viewer.dataSources.contains(source)\r\n ) {\r\n this.viewer.dataSources.remove(source);\r\n }\r\n }\r\n }\r\n this.dataSources = [];\r\n }\r\n\r\n public async ReRender(entityIds?: string[]) {\r\n if (entityIds == null) {\r\n\r\n }\r\n else {\r\n\r\n }\r\n }\r\n }\r\n}","import { RenderManager } from \"../render-manager\";\r\nimport * as Cesium from \"cesium\";\r\nimport { BruceApi, MenuItem, Tileset } from \"bruce-models\";\r\nimport { TilesetRenderEngine } from \"../../tileset-render-engine\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\n\r\nasync function getLegacyTileset(params: {\r\n apiGetter: BruceApi.IGetter,\r\n menuItem: MenuItem.Item.IArbTileset,\r\n tileset: Tileset.ITileset\r\n}): Promise<any> {\r\n const { apiGetter, menuItem, tileset } = params;\r\n try {\r\n const api = apiGetter.getApi(menuItem.tileset.ClientAccountID);\r\n const legacyTileset = await api.GET(`ui.tileset/${tileset.id}`);\r\n return legacyTileset;\r\n }\r\n catch (e) {\r\n console.log(e);\r\n }\r\n}\r\n\r\nasync function getTileset(params: {\r\n apiGetter: BruceApi.IGetter,\r\n menuItem: MenuItem.Item.IArbTileset\r\n}): Promise<Tileset.ITileset> {\r\n const { apiGetter, menuItem } = params;\r\n try {\r\n const api = apiGetter.getApi(menuItem.tileset.ClientAccountID);\r\n const { tileset } = await Tileset.Get({\r\n api,\r\n tilesetId: menuItem.tileset.TilesetID\r\n });\r\n return tileset;\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n}\r\n\r\nexport namespace TilesetArbRenderManager {\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.IArbTileset;\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 = null;\r\n public get Tileset(): Cesium.Cesium3DTileset {\r\n return this.cTileset;\r\n }\r\n private styler: TilesetRenderEngine.CadStyler = null;\r\n\r\n\r\n public constructor(params: {\r\n viewer: Cesium.Viewer,\r\n item: MenuItem.Item.IArbTileset,\r\n apiGetter: BruceApi.IGetter,\r\n register: VisualsRegister.Register\r\n }) {\r\n this.viewer = params.viewer;\r\n this.apiGetter = params.apiGetter;\r\n this.item = params.item;\r\n this.visualsManager = params.register;\r\n }\r\n\r\n public async Init(): Promise<void> {\r\n // Horrid backwards compatibility.\r\n let loadUrlOverride = null;\r\n if (this.item.tileset) {\r\n const itemUrl = this.item.tileset?.TilesetURL;\r\n if (itemUrl && itemUrl.includes(\"cc3d.api\")) {\r\n this.item.tileset.ClientAccountID = \"cc3d\";\r\n }\r\n else if (this.item.IonResource?.AssetID) {\r\n this.item.tileset.ClientAccountID = \"cc3d\";\r\n }\r\n\r\n // Try fix a legacy record.\r\n // Eg: https://my3dcity.api.nextspace-uat-us.net/ui.tileset/0838d707-38af-4592-a2d4-5028997cab85/file/tileset.json\r\n if (!this.item.tileset.TilesetID && this.item.tileset.TilesetURL) {\r\n loadUrlOverride = this.item.tileset.TilesetURL;\r\n const url = this.item.tileset.TilesetURL;\r\n const urlParts = url.split(\"/\");\r\n if (urlParts.length > 5) {\r\n const tilesetId = urlParts[urlParts.length - 3];\r\n const accountId = urlParts[urlParts.length - 5].split(\".\")[0];\r\n this.item.tileset.TilesetID = tilesetId;\r\n this.item.tileset.ClientAccountID = accountId;\r\n }\r\n }\r\n }\r\n\r\n const tileset = await getTileset({\r\n apiGetter: this.apiGetter,\r\n menuItem: this.item\r\n });\r\n if (tileset && loadUrlOverride) {\r\n tileset.loadUrl = loadUrlOverride;\r\n }\r\n if (tileset?.type) {\r\n 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 }\r\n else if (tileset) {\r\n // Legacy type. We re-request using ui.tileset endpoint.\r\n const legacyTileset = tileset ? await getLegacyTileset({\r\n apiGetter: this.apiGetter,\r\n menuItem: this.item as MenuItem.Item.IArbTileset,\r\n tileset\r\n }) : null;\r\n this.cTileset = await TilesetRenderEngine.RenderLegacy({\r\n apiGetter: this.apiGetter,\r\n tileset: legacyTileset,\r\n viewer: this.viewer,\r\n ionId: this.item.IonResource?.AssetID,\r\n loadUrl: loadUrlOverride\r\n })\r\n }\r\n\r\n this.cTileset.readyPromise.then(() => {\r\n try {\r\n if (this.item.ApplyStyles) {\r\n const api = this.apiGetter.getApi();\r\n this.styler = new TilesetRenderEngine.CadStyler(\r\n api,\r\n this.cTileset,\r\n <number>this.item.styleId,\r\n <any[]>this.item.StyleMapping\r\n );\r\n this.onCTilesetLoad();\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n });\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\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 this.styler?.Dispose();\r\n this.visualsManager.RemoveRegos({\r\n menuItemId: this.item.id\r\n });\r\n }\r\n\r\n public async ReRender(entityIds?: string[]): Promise<void> {\r\n if (!this.styler) {\r\n return;\r\n }\r\n let regos: VisualsRegister.IVisualRego[] = this.visualsManager.GetRegos({\r\n menuItemId: this.item.id\r\n });\r\n if (entityIds != null) {\r\n regos = regos.filter(r => entityIds.indexOf(r.entityId) >= 0);\r\n }\r\n this.styler.QueueEntities(regos);\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 let rego = this.mapTilesetFeature(feature);\r\n if (rego?.entityId && this.styler) {\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 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 accountId: this.item.tileset?.ClientAccountID ?? this.apiGetter.accountId\r\n };\r\n\r\n // Two different methods for two different Cesium versions...\r\n const props = (feature as any).getPropertyNames ? (feature as any).getPropertyNames([]) :\r\n (feature as any).getPropertyIds ? (feature as any).getPropertyIds() : [];\r\n\r\n if (props.find(x => x == \"BrucePath\")) {\r\n const path = feature.getProperty(\"BrucePath\")?.split(\"|\");\r\n if (path?.length) {\r\n rego.entityId = path[path.length - 1];\r\n }\r\n }\r\n if (!rego.entityId) {\r\n const ACCEPTABLE_PROPS = [\r\n \"Building_ID\", \"BuildingID\", \"BruceId\"\r\n ];\r\n for (let acceptableId of ACCEPTABLE_PROPS) {\r\n if (props.indexOf(acceptableId) > -1) {\r\n rego.entityId = feature.getProperty(acceptableId);\r\n if (rego.entityId) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n if (!rego.entityId) {\r\n return null;\r\n }\r\n this.visualsManager.AddRego({\r\n rego\r\n });\r\n return rego;\r\n }\r\n }\r\n}","import { BruceApi, EntityRelation, MenuItem, ObjectUtils } from \"bruce-models\";\r\nimport { RenderManager } from \"../render-manager\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport * as Cesium from \"cesium\";\r\nimport { RelationRenderEngine } from \"../../relation-render-engine\";\r\n\r\nexport namespace RelationsRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private disposed = false;\r\n public get Disposed() {\r\n return this.disposed;\r\n };\r\n private apiGetter: BruceApi.IGetter;\r\n private item: MenuItem.Item.IEntityRelations;\r\n private register: VisualsRegister.Register;\r\n private viewer: Cesium.Viewer;\r\n\r\n\r\n public constructor(params: {\r\n apiGetter: BruceApi.IGetter,\r\n item: MenuItem.Item.IEntityRelations,\r\n register: VisualsRegister.Register,\r\n viewer: Cesium.Viewer\r\n }) {\r\n const { apiGetter, item, register, viewer } = params;\r\n this.apiGetter = apiGetter;\r\n this.item = item;\r\n this.register = register;\r\n this.viewer = viewer;\r\n }\r\n\r\n public async Init(): Promise<void> {\r\n const drawn: string[] = [];\r\n const api = this.apiGetter.getApi(this.apiGetter.accountId);\r\n\r\n const BATCH_SIZE = 5;\r\n let drawBatch = [];\r\n for (let i = 0; i < this.item.BruceEntity.EntityIds.length; i++) {\r\n const entityId = this.item.BruceEntity.EntityIds[i];\r\n const {relations} = await EntityRelation.GetList({\r\n api,\r\n entityId,\r\n filter: {\r\n oneWayOnly: false,\r\n loadEntityData: false\r\n }\r\n });\r\n for (let j = 0; j < relations.length; j++) {\r\n const relation = relations[j];\r\n if (this.item.relationTypeIds?.length && !this.item.relationTypeIds.includes(relation[\"Relation.Type.ID\"])) {\r\n continue;\r\n }\r\n const key = RelationRenderEngine.GetRenderGroupId(relation);\r\n if (!drawn.find(x => x == key)) {\r\n drawn.push(key);\r\n drawBatch.push(relation);\r\n if (drawBatch.length >= BATCH_SIZE) {\r\n this.onGetterUpdate(drawBatch);\r\n drawBatch = [];\r\n }\r\n }\r\n }\r\n }\r\n if (drawBatch?.length) {\r\n this.onGetterUpdate(drawBatch);\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 this.register.RemoveRegos({\r\n menuItemId: this.item.id\r\n });\r\n }\r\n\r\n public async ReRender(entityIds?: string[]): Promise<void> {\r\n if (entityIds == null) {\r\n\r\n }\r\n else {\r\n\r\n }\r\n }\r\n\r\n private async onGetterUpdate(relations: EntityRelation.IRelation[]): Promise<void> {\r\n try {\r\n if (this.disposed || this.viewer.isDestroyed()) {\r\n return;\r\n }\r\n const cEntities = await RelationRenderEngine.Render({\r\n apiGetter: this.apiGetter,\r\n menuItemId: this.item.id,\r\n relations: relations,\r\n viewer: this.viewer,\r\n visualRegister: this.register\r\n });\r\n for (let i = 0; i < relations.length; i++) {\r\n const relation = relations[i];\r\n const key = RelationRenderEngine.GetRenderGroupId(relation);\r\n const cEntity = cEntities[key];\r\n if (cEntity) {\r\n const visual = this.register.GetRego({\r\n entityId: key, \r\n menuItemId: this.item.id\r\n })?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.register.AddRego({\r\n rego: {\r\n entityId: relation[\"Data.Entity.ID\"] ?? ObjectUtils.UId(),\r\n menuItemId: this.item.id,\r\n relation: relation,\r\n visual: cEntity,\r\n priority: 0,\r\n accountId: this.apiGetter.accountId\r\n }\r\n });\r\n }\r\n }\r\n else {\r\n this.register.RemoveRegos({\r\n entityId: relation[\"Data.Entity.ID\"],\r\n relation: relation,\r\n menuItemId: this.item.id\r\n });\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\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\nimport { TilesetArbRenderManager } from \"./render-managers/tilesets/tileset-arb-render-manager\";\r\nimport { RelationsRenderManager } from \"./render-managers/other/relations-render-manager\";\r\n\r\ninterface IRenderedItem {\r\n id: string;\r\n type: MenuItem.EType;\r\n childIds: string[];\r\n item: MenuItem.IItem;\r\n renderManager: RenderManager.IManager;\r\n}\r\n\r\n/**\r\n * Utility to keep track of enabled menu items within a Cesium viewer.\r\n */\r\nexport namespace MenuItemManager {\r\n export interface IMenuItemUpdate {\r\n itemId: string;\r\n isEnabling: boolean;\r\n }\r\n\r\n export class Manager {\r\n private viewer: Cesium.Viewer;\r\n public get Viewer(): Cesium.Viewer {\r\n return this.viewer;\r\n }\r\n private items: IRenderedItem[] = [];\r\n private visualsRegister: VisualsRegister.Register;\r\n public get VisualsRegister(): VisualsRegister.Register {\r\n return this.visualsRegister;\r\n }\r\n private onUpdate: BruceEvent<IMenuItemUpdate> = <any>null;\r\n public get OnUpdate(): BruceEvent<IMenuItemUpdate> {\r\n if (!this.onUpdate) {\r\n this.onUpdate = new BruceEvent<IMenuItemUpdate>();\r\n }\r\n return this.onUpdate;\r\n }\r\n private sharedGetters: SharedGetters.Cache;\r\n private sharedMonitor: CesiumViewMonitor;\r\n\r\n\r\n public constructor(params: {\r\n viewer: Cesium.Viewer,\r\n visualsRegister?: VisualsRegister.Register\r\n }) {\r\n let { viewer, visualsRegister } = params;\r\n this.viewer = viewer;\r\n if (!visualsRegister) {\r\n visualsRegister = new VisualsRegister.Register(viewer);\r\n }\r\n this.visualsRegister = visualsRegister;\r\n this.sharedGetters = new SharedGetters.Cache();\r\n this.sharedMonitor = new CesiumViewMonitor(this.viewer);\r\n }\r\n\r\n /**\r\n * Renders a given menu item and all its children.\r\n * Will return the enabled item id.\r\n * @param params\r\n * @returns\r\n */\r\n public async RenderItem(params: {\r\n apiGetter: BruceApi.IGetter;\r\n item: MenuItem.IItem;\r\n // Default = true.\r\n recursive?: boolean\r\n }): 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 viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n monitor: this.sharedMonitor,\r\n item: <MenuItem.Item.IBruceEntities>params.item,\r\n sharedGetters: this.sharedGetters\r\n });\r\n break;\r\n case MenuItem.EType.EntitiesLoaded:\r\n rItem.renderManager = new EntitiesLoadedRenderManager.Manager({\r\n viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n monitor: this.sharedMonitor,\r\n item: <MenuItem.Item.IEntitiesLoaded>params.item\r\n });\r\n break;\r\n case MenuItem.EType.EntitiesIds:\r\n rItem.renderManager = new EntitiesIdsRenderManager.Manager({\r\n viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n monitor: this.sharedMonitor,\r\n item: <MenuItem.Item.IEntityIds>params.item\r\n });\r\n break;\r\n case MenuItem.EType.Entity:\r\n rItem.renderManager = new EntityRenderManager.Manager({\r\n viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n monitor: this.sharedMonitor,\r\n item: <MenuItem.Item.IBruceEntity>params.item\r\n });\r\n break;\r\n case MenuItem.EType.CadTileset:\r\n rItem.renderManager = new TilesetCadRenderManager.Manager({\r\n viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n item: <MenuItem.Item.ICadTileset>params.item\r\n });\r\n break;\r\n case MenuItem.EType.Osm:\r\n rItem.renderManager = new TilesetOsmRenderManager.Manager({\r\n viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n monitor: this.sharedMonitor,\r\n item: <MenuItem.Item.IOsm>params.item\r\n });\r\n break;\r\n case MenuItem.EType.PointCloud:\r\n rItem.renderManager = new TilesetPointcloudRenderManager.Manager({\r\n viewer: this.viewer,\r\n apiGetter: params.apiGetter,\r\n item: <MenuItem.Item.IPointcloud>params.item\r\n });\r\n break;\r\n case MenuItem.EType.EntityTileset:\r\n rItem.renderManager = new TilesetEntitiesRenderManager.Manager({\r\n viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n item: <MenuItem.Item.IEntitiesTileset>params.item\r\n });\r\n break;\r\n case MenuItem.EType.Kml:\r\n rItem.renderManager = new DataSourceStaticKmlManager.Manager({\r\n viewer: this.viewer,\r\n apiGetter: params.apiGetter,\r\n item: <MenuItem.Item.IKml>params.item\r\n });\r\n break;\r\n case MenuItem.EType.IonTileset:\r\n case MenuItem.EType.ArbTileset:\r\n rItem.renderManager = new TilesetArbRenderManager.Manager({\r\n apiGetter: params.apiGetter,\r\n item: <MenuItem.Item.IArbTileset>params.item,\r\n viewer: this.viewer,\r\n register: this.visualsRegister\r\n });\r\n break;\r\n case MenuItem.EType.Relations:\r\n rItem.renderManager = new RelationsRenderManager.Manager({\r\n apiGetter: params.apiGetter,\r\n item: params.item as any,\r\n register: this.visualsRegister,\r\n viewer: this.viewer\r\n });\r\n break;\r\n // 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 // We no longer support folder items being both a folder and an action.\r\n // Now an item must have no action to be a folder.\r\n const isFolder = !params.item.Type || params.item.Type == MenuItem.EType.None;\r\n if (params.item.Children && params.recursive != false && isFolder) {\r\n for (let i = 0; i < params.item.Children.length; i++) {\r\n const childId = 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 its 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(params: {\r\n menuItemId: string,\r\n // Default = true.\r\n recursive?: boolean\r\n }): Promise<void> {\r\n let { menuItemId: id, recursive } = params;\r\n if (this.viewer.isDestroyed()) {\r\n return;\r\n }\r\n if (recursive == null) {\r\n recursive = true;\r\n }\r\n const item = this.items.find(x => x.id === id);\r\n if (item) {\r\n if (recursive) {\r\n for (let i = 0; i < item.childIds.length; i++) {\r\n const child = this.items.find(x => x.id === item.childIds[i]);\r\n if (child) {\r\n await this.RemoveItemById({\r\n menuItemId: child.id\r\n });\r\n }\r\n }\r\n }\r\n try {\r\n item.renderManager?.Dispose();\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n this.items = this.items.filter(x => x.id !== id);\r\n this.onUpdate?.Trigger({ isEnabling: false, itemId: item.id });\r\n }\r\n }\r\n\r\n public GetEnabledItemIds(): string[] {\r\n return this.items.map(x => x.id);\r\n }\r\n\r\n public GetEnabledItem(id: string): IRenderedItem {\r\n return this.items.find(x => x.id === id);\r\n }\r\n\r\n /**\r\n * Rerenders given entities.\r\n * If no menu items are specified then the rerender is called on all enabled menu items.\r\n * It is highly recommended to supply menu item ids.\r\n * @param params\r\n */\r\n public async ReRender(params: {\r\n entityIds: string[],\r\n menuItemIds?: string[]\r\n }) {\r\n const { entityIds, menuItemIds } = params;\r\n if (!entityIds?.length) {\r\n return;\r\n }\r\n const items = menuItemIds?.length ? this.items.filter(x => menuItemIds.includes(x.id)) : this.items;\r\n for (let i = 0; i < items.length; i++) {\r\n const item = items[i];\r\n if (item.renderManager) {\r\n await item.renderManager.ReRender(entityIds);\r\n }\r\n }\r\n }\r\n }\r\n}","import { BruceApi, Entity, IDictionary, MenuItem, ObjectUtils, ProjectView, ProjectViewBookmark, Tileset, ZoomControl } from \"bruce-models\";\r\nimport { MenuItemManager } from \"./menu-item-manager\";\r\n\r\n/**\r\n * Utility to help generate menu items for rendering various data.\r\n */\r\nexport namespace MenuItemCreator {\r\n export interface IParams {\r\n apiGetter: BruceApi.IGetter;\r\n manager: MenuItemManager.Manager;\r\n }\r\n\r\n export async function RenderEntities(params: {\r\n entityIds: string[]\r\n } & IParams): Promise<{\r\n menuItemIds: string[],\r\n menuItems: MenuItem.IItem[]\r\n }> {\r\n const {entityIds} = params;\r\n const item: MenuItem.Item.IEntityIds = {\r\n Caption: \"Rendering Loaded Entities\",\r\n Type: <MenuItem.EType><any>MenuItem.EType.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 const renderedId = await params.manager.RenderItem({\r\n apiGetter: params.apiGetter,\r\n item: item\r\n });\r\n return {\r\n menuItemIds: [renderedId],\r\n menuItems: [item]\r\n }\r\n }\r\n\r\n export async function RenderEntityTypes(params: {\r\n entityTypeIds: string[]\r\n } & IParams): Promise<{\r\n menuItemIds: string[],\r\n menuItems: MenuItem.IItem[]\r\n }> {\r\n const {entityTypeIds: typeIds} = params;\r\n const renderedItemIds: string[] = [];\r\n const menuItems = [];\r\n for (let i = 0; i < typeIds.length; i++) {\r\n const typeId = typeIds[i];\r\n const menuItem = MenuItem.CreateFromTypeId(typeId, 0);\r\n menuItems.push(menuItem);\r\n const itemId = await params.manager.RenderItem({\r\n apiGetter: params.apiGetter,\r\n item: menuItem\r\n });\r\n renderedItemIds.push(itemId);\r\n }\r\n return {\r\n menuItemIds: renderedItemIds,\r\n menuItems: menuItems\r\n };\r\n }\r\n\r\n export async function RenderEntityFilter(params: {\r\n attrFilter: IDictionary<string>\r\n } & IParams): Promise<{\r\n menuItemIds: string[],\r\n menuItems: MenuItem.IItem[]\r\n }> {\r\n const {attrFilter: filter} = params;\r\n const item: MenuItem.Item.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 const renderedIds = await params.manager.RenderItem({\r\n apiGetter: params.apiGetter,\r\n item: item\r\n });\r\n return {\r\n menuItemIds: [renderedIds],\r\n menuItems: [item]\r\n };\r\n }\r\n\r\n export async function RenderMenuItems(params: { \r\n menuItems: MenuItem.IItem[]\r\n } & IParams): Promise<{\r\n menuItemIds: string[]\r\n }> {\r\n const {menuItems} = params;\r\n const renderedItemIds: string[] = [];\r\n for (let i = 0; i < menuItems.length; i++) {\r\n const menuItem = menuItems[i];\r\n const itemId = await params.manager.RenderItem({\r\n apiGetter: params.apiGetter,\r\n item: menuItem\r\n });\r\n renderedItemIds.push(itemId);\r\n }\r\n return {\r\n menuItemIds: renderedItemIds\r\n };\r\n }\r\n\r\n export async function RenderTileset(params: {\r\n tilesetId?: string\r\n tileset?: Tileset.ITileset\r\n } & IParams): Promise<{\r\n menuItemIds: string[],\r\n menuItems: MenuItem.IItem[]\r\n }> {\r\n const {tilesetId} = params;\r\n const api = params.apiGetter.getApi();\r\n let tileset = params.tileset ? params.tileset : (await Tileset.Get({\r\n api, \r\n tilesetId\r\n })).tileset;\r\n 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 const renderedIds = await params.manager.RenderItem({\r\n item: menuItem,\r\n apiGetter: params.apiGetter\r\n });\r\n return {\r\n menuItems: [menuItem],\r\n menuItemIds: [renderedIds]\r\n }\r\n }\r\n else {\r\n throw(new Error(\"Tileset type not supported.\"));\r\n }\r\n }\r\n\r\n export async function RenderBookmarkItems(params: {\r\n viewId?: string, \r\n view?: ProjectView.View\r\n bookmarkId?: string,\r\n bookmark?: ProjectViewBookmark.Bookmark\r\n } & IParams): Promise<{\r\n menuItemIds: string[],\r\n menuItems: MenuItem.IItem[]\r\n }> {\r\n const {viewId, bookmarkId} = params;\r\n const api = params.apiGetter.getApi();\r\n const view = params.view ? params.view : (await ProjectView.Get({\r\n api, \r\n viewId\r\n })).view;\r\n const bookmark = params.bookmark ? params.bookmark : (await ProjectViewBookmark.Get({\r\n api, \r\n viewId, \r\n bookmarkId\r\n })).bookmark;\r\n\r\n if (view.DataVersion != bookmark.DataVersion) {\r\n throw new Error(\"View and bookmark settings version mismatch.\");\r\n }\r\n\r\n let enabledIds: string[] = [];\r\n let menuItems: MenuItem.IItem[] = [];\r\n \r\n const version = view.DataVersion;\r\n if (view.Settings && bookmark.Settings) {\r\n if (version === 2) {\r\n const vSettings = view.Settings as ProjectView.Navigator.ISettings;\r\n const bSettings = bookmark.Settings as ProjectViewBookmark.Navigator.ISettings;\r\n menuItems = vSettings.menuItems;\r\n enabledIds = bSettings.menuItemIds;\r\n }\r\n else {\r\n const vSettings = view.Settings as ProjectView.LegacyNavigator.ISettings;\r\n const bSettings = bookmark.Settings as ProjectViewBookmark.LegacyNavigator.ISettings;\r\n menuItems = vSettings.LayersMenu;\r\n enabledIds = bSettings.selectedItemIds;\r\n }\r\n }\r\n \r\n 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 {\r\n menuItemIds: renderedItemIds,\r\n menuItems: menuItems\r\n };\r\n }\r\n\r\n export async function RenderRelations(params: {\r\n entityIds: string[],\r\n relationTypeIds?: string[],\r\n forwardOnly?: boolean\r\n } & IParams) {\r\n\r\n }\r\n}","import { ProjectViewTile, BruceApi, ProjectView, ProjectViewBookmark, ProjectViewLegacyTile, Tileset, ProgramKey } from \"bruce-models\";\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 {programKey: pKey} = await ProgramKey.Get({\r\n api: apiGetter.getApi(), \r\n programId: keyId\r\n });\r\n key = pKey.Key;\r\n }\r\n catch (e) {\r\n let doLog = true;\r\n if (e && typeof e === \"object\") {\r\n if (e.Code == \"NotFound\") {\r\n doLog = false;\r\n }\r\n }\r\n if (doLog) {\r\n console.error(e);\r\n }\r\n }\r\n return key && key.length ? key : defaultKey;\r\n}\r\n\r\n/**\r\n * Constructs an imagery provider for a default imagery type.\r\n * Warning: This does not add it to the viewer.\r\n * @param apiGetter\r\n * @param id \r\n * @returns \r\n */\r\nasync function renderDefaultMapTile(apiGetter: BruceApi.IGetter, id: ProjectViewTile.EDefaultImagery): Promise<Cesium.ImageryProvider> {\r\n let provider: Cesium.ImageryProvider;\r\n switch (id) {\r\n case ProjectViewTile.EDefaultImagery.BingMapsAerial:\r\n provider = new Cesium.BingMapsImageryProvider({\r\n url: \"https://dev.virtualearth.net\",\r\n mapStyle: Cesium.BingMapsStyle.AERIAL,\r\n key: await findKey(apiGetter, ProgramKey.EProgramId.BingMaps, DEFAULT_BING_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.BingMapsAerialWithLabels:\r\n provider = new Cesium.BingMapsImageryProvider({\r\n url: \"https://dev.virtualearth.net\",\r\n mapStyle: Cesium.BingMapsStyle.AERIAL_WITH_LABELS,\r\n key: await findKey(apiGetter, ProgramKey.EProgramId.BingMaps, DEFAULT_BING_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.BingMapsRoads:\r\n provider = new Cesium.BingMapsImageryProvider({\r\n url: \"https://dev.virtualearth.net\",\r\n mapStyle: Cesium.BingMapsStyle.ROAD_ON_DEMAND,\r\n key: await findKey(apiGetter, ProgramKey.EProgramId.BingMaps, DEFAULT_BING_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.MapboxSatellite:\r\n provider = new Cesium.MapboxImageryProvider({\r\n mapId: \"mapbox.satellite\",\r\n accessToken: await findKey(apiGetter, ProgramKey.EProgramId.Mapbox, DEFAULT_MAPBOX_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.MapBoxStreets:\r\n provider = new Cesium.MapboxStyleImageryProvider({\r\n styleId: \"satellite-streets-v11\",\r\n accessToken: await findKey(apiGetter, ProgramKey.EProgramId.Mapbox, DEFAULT_MAPBOX_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.MapBoxStreetsClassic:\r\n provider = new Cesium.MapboxStyleImageryProvider({\r\n styleId: \"streets-v11\",\r\n accessToken: await findKey(apiGetter, ProgramKey.EProgramId.Mapbox, DEFAULT_MAPBOX_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.EsriWorldImagery:\r\n provider = new Cesium.ArcGisMapServerImageryProvider({\r\n url:\"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer\",\r\n enablePickFeatures: false\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.EsriWorldStreetMap:\r\n provider = new Cesium.ArcGisMapServerImageryProvider({\r\n url:\"https://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer\",\r\n enablePickFeatures: false\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.EsriNationalGeographic:\r\n provider = new Cesium.ArcGisMapServerImageryProvider({\r\n url:\"https://services.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/\",\r\n enablePickFeatures: false\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.OpenStreetMap:\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: \"https://a.tile.openstreetmap.org/\"\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.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 LegacyNavigator {\r\n export interface ILayerExt extends Cesium.ImageryLayer {\r\n _bId?: string;\r\n _bName?: string;\r\n }\r\n \r\n export interface IViewParams {\r\n bookmarkId: string;\r\n viewId: string;\r\n apiGetter: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n \r\n // TODO: How is render engine supposed to know about this?\r\n // We need a generic way for this information be feed from clients.\r\n ignoreIds?: string[];\r\n }\r\n \r\n export interface IParams {\r\n data: ProjectViewLegacyTile.IMapSource;\r\n apiGetter: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n }\r\n \r\n export async function Render(params: IParams): Promise<ILayerExt> {\r\n 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({\r\n api, \r\n viewId: params.viewId\r\n })).view as ProjectView.LegacyNavigator.IView;\r\n\r\n let bookmark: ProjectViewBookmark.LegacyNavigator.IBookmark = <any>null;\r\n if (params.bookmarkId) {\r\n bookmark = (await ProjectViewBookmark.Get({\r\n api, \r\n viewId: params.viewId, \r\n bookmarkId: params.bookmarkId\r\n })).bookmark as ProjectViewBookmark.LegacyNavigator.IBookmark;\r\n }\r\n \r\n const vSettings = view.Settings;\r\n const bSettings = bookmark?.Settings;\r\n \r\n const data: ProjectViewLegacyTile.IMapSource[] = [];\r\n const dataNames: string[] = [];\r\n if (bSettings?.imagery) {\r\n for (let i = 0; i < bSettings.imagery.length; i++) {\r\n const source = bSettings.imagery[i];\r\n dataNames.push(source.title);\r\n }\r\n }\r\n else if (vSettings?.DefaultMapTiles) {\r\n dataNames.push(vSettings.DefaultMapTiles);\r\n }\r\n const tiles = vSettings?.CesiumMapSources ?? [];\r\n await ProjectViewLegacyTile.MergeMapTemplateData({\r\n getter: params.apiGetter, \r\n sources: tiles, \r\n addIfMissing: vSettings?.CesiumMapSources == null\r\n });\r\n \r\n for (let i = 0; i < dataNames.length; i++) {\r\n const name = dataNames[i];\r\n for (let j = 0; j < tiles.length; j++) {\r\n const tile = tiles[j];\r\n if (CompareLegacyNames(tile.Name, name)) {\r\n data.push(tile);\r\n break;\r\n }\r\n } \r\n }\r\n \r\n let enabled: ILayerExt[] = gatherEnabledImageries(params.viewer);\r\n const layers: Cesium.ImageryLayer[] = [];\r\n \r\n // Gather layers we want to render.\r\n // Any new layer is added to viewer at the bottom.\r\n if (params.ignoreIds) {\r\n for (let i = 0; i < params.ignoreIds.length; i++) {\r\n const id = params.ignoreIds[i];\r\n const layer = enabled.find((x) => {\r\n const layer = x as ILayerExt;\r\n if (layer._bId === id) {\r\n return true;\r\n }\r\n });\r\n if (layer) {\r\n layers.push(layer);\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < data.length; i++) {\r\n const tile = data[i];\r\n const layer = await Render({\r\n apiGetter: params.apiGetter,\r\n viewer: params.viewer,\r\n data: tile,\r\n });\r\n if (layer) {\r\n layers.push(layer);\r\n }\r\n }\r\n \r\n // Sort currently enabled (after new ones added) to match desired order.\r\n enabled = gatherEnabledImageries(params.viewer);\r\n enabled.sort((a, b) => {\r\n const indexA = layers.indexOf(a);\r\n const indexB = layers.indexOf(b);\r\n if (indexA < 0 && indexB < 0) {\r\n return 0;\r\n }\r\n if (indexA < 0) {\r\n return 1;\r\n }\r\n if (indexB < 0) {\r\n return -1;\r\n }\r\n return indexA - indexB;\r\n });\r\n \r\n // Move enabled layers to match desired order.\r\n // Remove any layers that aren't in enabled list.\r\n for (let i = 0; i < enabled.length; i++) {\r\n const layer = enabled[i];\r\n if (layers.includes(layer)) {\r\n params.viewer.imageryLayers.raiseToTop(layer);\r\n }\r\n else {\r\n params.viewer.imageryLayers.remove(layer);\r\n }\r\n }\r\n }\r\n }\r\n\r\n export namespace Navigator {\r\n export interface IProviderExt extends Cesium.ImageryLayer {\r\n _bMeta?: ProjectViewTile.ITileMeta;\r\n }\r\n\r\n export interface IParams {\r\n apiGetter: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n tiles: ProjectViewTile.IBookmarkImagery[];\r\n }\r\n\r\n export async function GetOrCreateLayer(\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({\r\n api, \r\n tilesetId: meta.tilesetId\r\n });\r\n if (tileset.type === Tileset.EType.GeoMap) {\r\n provider = new Cesium.TileMapServiceImageryProvider({\r\n url: Tileset.GetPublicFileUrl({\r\n api, \r\n tilesetId: meta.tilesetId, \r\n file: \"\"\r\n }),\r\n fileExtension: \"png\"\r\n });\r\n }\r\n else if (tileset.type === Tileset.EType.ExternalGeoMap) {\r\n const settings = tileset.settings as Tileset.Settings.IExternalMap;\r\n switch (settings.mapType) {\r\n case Tileset.Settings.EExternalMapType.CesiumIon:\r\n 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 Tileset.Settings.EExternalMapType.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 Tileset.Settings.EExternalMapType.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 Tileset.Settings.EExternalMapType.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({\r\n api, \r\n tilesetId: meta.tilesetId, \r\n file: \"{z}/{x}/{y}.png\"\r\n }),\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 LegacyNavigator {\r\n export interface IProviderExt extends Cesium.CesiumTerrainProvider {\r\n _bId: string;\r\n _bName: string;\r\n }\r\n\r\n export interface IParams {\r\n data: ProjectViewLegacyTile.ITerrainSource;\r\n viewer: Cesium.Viewer;\r\n }\r\n \r\n export interface IViewParams {\r\n bookmarkId: string;\r\n viewId: string;\r\n apiGetter: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export 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({\r\n api, \r\n viewId: params.viewId\r\n })).view as ProjectView.LegacyNavigator.IView;\r\n let bookmark: ProjectViewBookmark.LegacyNavigator.IBookmark = <any>null;\r\n if (params.bookmarkId) {\r\n bookmark = (await ProjectViewBookmark.Get({\r\n api, \r\n viewId: params.viewId, \r\n bookmarkId: params.bookmarkId\r\n })).bookmark as ProjectViewBookmark.LegacyNavigator.IBookmark;\r\n }\r\n \r\n const vSettings = view.Settings;\r\n const bSettings = bookmark?.Settings;\r\n\r\n let terrainTiles = vSettings?.CesiumTerrainSources ?? [];\r\n let terrainTile: ProjectViewLegacyTile.ITerrainSource = <any>null;\r\n let terrainTileName: string = <any>null;\r\n if (bookmark?.Settings?.terrain) {\r\n terrainTileName = bSettings.terrain;\r\n }\r\n else {\r\n terrainTileName = <string>vSettings?.DefaultTerrain;\r\n }\r\n await ProjectViewLegacyTile.MergeTerrainTemplateData({\r\n getter: params.apiGetter, \r\n sources: terrainTiles, \r\n addIfMissing: vSettings?.CesiumTerrainSources == null\r\n });\r\n for (let i = 0; i < terrainTiles.length; i++) {\r\n const tile = terrainTiles[i];\r\n if (TileRenderEngine.CompareLegacyNames(tile.Name, terrainTileName)) {\r\n terrainTile = tile;\r\n break;\r\n }\r\n }\r\n if (terrainTile) {\r\n Render({\r\n data: terrainTile,\r\n viewer: params.viewer,\r\n });\r\n }\r\n }\r\n }\r\n\r\n export namespace Navigator {\r\n export interface IProviderExt extends Cesium.CesiumTerrainProvider {\r\n _bMeta?: ProjectViewTile.ITileMeta;\r\n }\r\n\r\n export interface IParams {\r\n apiGetter: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n tile: ProjectViewTile.IBookmarkTerrain;\r\n }\r\n\r\n export async function Render(params: IParams): Promise<void> {\r\n // 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({\r\n api, \r\n tilesetId: params.tile.tilesetId\r\n });\r\n\r\n let url: string;\r\n let vertexes: boolean = true;\r\n if (tileset.type === Tileset.EType.Terrain) {\r\n url = Tileset.GetPublicFileUrl({\r\n api, \r\n tilesetId: tileset.id, \r\n file: \"\"\r\n });\r\n }\r\n else if (tileset.type === Tileset.EType.ExternalTerrain) {\r\n const settings = tileset.settings as Tileset.Settings.IExternalTerrain;\r\n url = settings.url;\r\n vertexes = settings.requestVertexNormals == null ? true : settings.requestVertexNormals;\r\n }\r\n else {\r\n console.error(\"Invalid tileset type.\", tileset);\r\n }\r\n \r\n if (url) {\r\n provider = new Cesium.CesiumTerrainProvider({\r\n url: url,\r\n requestVertexNormals: vertexes\r\n });\r\n }\r\n }\r\n\r\n if (provider) {\r\n provider._bMeta = {\r\n accountId: params.tile.accountId,\r\n tilesetId: params.tile.tilesetId\r\n };\r\n params.viewer.terrainProvider = provider;\r\n }\r\n }\r\n }\r\n }\r\n}","import { BruceApi, Camera, Carto, MenuItem, ProjectView, ProjectViewBookmark, ProjectViewTile, } from \"bruce-models\";\r\nimport { MenuItemManager } from \"./menu-item-manager\";\r\nimport { MenuItemCreator } from \"./menu-item-creator\";\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 = 2048;\r\nconst MAX_SHADOW_SIZE = 32768;\r\nconst RELATION_MENU_ITEM_ID = \"BOOKMARK_ENTITY_RELATIONS\";\r\n\r\n/**\r\n * Renders DATA_VERSION = 1 navigator.\r\n * @param params \r\n * @param bookmark \r\n * @param view \r\n */\r\nasync function renderLegacyNavigator(\r\n params: ViewRenderEngine.IRenderParams,\r\n bookmark: ProjectViewBookmark.LegacyNavigator.IBookmark,\r\n view: ProjectView.LegacyNavigator.IView\r\n) {\r\n const vSettings = view.Settings as ProjectView.LegacyNavigator.ISettings;\r\n const bSettings = bookmark?.Settings as ProjectViewBookmark.LegacyNavigator.ISettings;\r\n const manager = params.manager;\r\n const VR = manager.VisualsRegister;\r\n const scene = manager.Viewer.scene;\r\n\r\n await TileRenderEngine.Terrain.LegacyNavigator.RenderView({\r\n apiGetter: params.apiGetter,\r\n bookmarkId: <string>params.bookmarkId,\r\n viewer: manager.Viewer,\r\n viewId: params.viewId,\r\n });\r\n\r\n await TileRenderEngine.Map.LegacyNavigator.RenderView({\r\n apiGetter: params.apiGetter,\r\n bookmarkId: <string>params.bookmarkId,\r\n viewer: manager.Viewer,\r\n viewId: params.viewId,\r\n ignoreIds: []\r\n });\r\n\r\n let baseColor = bSettings?.globeColor;\r\n if (baseColor == null) {\r\n // TODO: Need global default.\r\n baseColor = \"#0326BE\";\r\n }\r\n scene.globe.baseColor = Cesium.Color.fromCssColorString(baseColor);\r\n\r\n // TODO: Other scene settings.\r\n // TODO: Rendered relationships.\r\n\r\n VR.ClearHidden();\r\n if (bSettings.hiddenEntityIds?.length) {\r\n VR.SetHidden({\r\n entityIds: bSettings.hiddenEntityIds,\r\n hidden: true\r\n });\r\n }\r\n\r\n let frustum = bSettings?.cameraFrustum;\r\n if (frustum == null) {\r\n frustum = Camera.EFrustum.Perspective;\r\n }\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 if (!params.skipCamera) {\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 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\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 manager.Viewer.scene.globe.depthTestAgainstTerrain = go;\r\n\r\n const fxaa = manager.Viewer.scene.postProcessStages.fxaa;\r\n fxaa.enabled = true;\r\n\r\n let pointer = bSettings?.timelineSettings?.timelinePointer;\r\n if (pointer != null) {\r\n const clock = manager.Viewer.clock;\r\n // Back and forth conversion so we aren't feeding Cesium an object instead of class instance.\r\n // This is pretty blegh.\r\n const timeStr = Cesium.JulianDate.toIso8601(pointer)\r\n clock.currentTime = Cesium.JulianDate.fromIso8601(timeStr);\r\n }\r\n\r\n const enabledItems = manager.GetEnabledItemIds();\r\n const newItemIds = bSettings?.selectedItemIds ?? [];\r\n for (const id of enabledItems) {\r\n if (\r\n newItemIds.indexOf(id) === -1 ||\r\n id == RELATION_MENU_ITEM_ID\r\n ) {\r\n await params.manager.RemoveItemById({\r\n menuItemId: id\r\n });\r\n }\r\n }\r\n\r\n if (params.bookmarkId) {\r\n await MenuItemCreator.RenderBookmarkItems({\r\n apiGetter: params.apiGetter,\r\n manager,\r\n view, \r\n bookmark\r\n });\r\n }\r\n if (bSettings.drawnRelationEntityIDs?.length) {\r\n const menuItem = {\r\n id: RELATION_MENU_ITEM_ID,\r\n Caption: \"Entity relations\",\r\n BruceEntity: {\r\n EntityIds: bSettings.drawnRelationEntityIDs\r\n },\r\n Type: MenuItem.EType.Relations\r\n } as MenuItem.Item.IEntityRelations;\r\n await params.manager.RenderItem({\r\n apiGetter: params.apiGetter,\r\n item: menuItem\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Renders DATA_VERSION > 1 navigator.\r\n * @param params \r\n * @param bookmark \r\n * @param view \r\n */\r\nasync function renderNavigator(\r\n params: ViewRenderEngine.IRenderParams,\r\n bookmark: ProjectViewBookmark.Navigator.IBookmark,\r\n view: ProjectView.Navigator.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.Navigator.ISettings;\r\n const bSettings = (bookmark?.Settings ?? {}) as ProjectViewBookmark.Navigator.ISettings;\r\n const defaults = vSettings.defaults ?? {};\r\n\r\n let camera = (bookmark.Camera ?? {}) as ProjectViewBookmark.Navigator.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 if (!params.skipCamera) {\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\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 hillShades = bookmark?.Settings?.hillShades;\r\n if (hillShades == null) {\r\n hillShades = defaults?.settings?.hillShades;\r\n }\r\n if (hillShades == null) {\r\n hillShades = true;\r\n }\r\n scene.globe.enableLighting = Boolean(hillShades);\r\n\r\n let baseColor = bSettings?.globeColor;\r\n if (baseColor == null) {\r\n baseColor = defaults.settings?.globeColor;\r\n }\r\n if (baseColor == null) {\r\n // TODO: Need global default.\r\n baseColor = \"#0326BE\";\r\n }\r\n scene.globe.baseColor = Cesium.Color.fromCssColorString(baseColor);\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.Navigator.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 viewer.shadowMap.darkness = EnsureNumber(shadows.darkness, 0.5);\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.Navigator.IAmbientOcclusion;\r\n }\r\n const AO = viewer.scene.postProcessStages.ambientOcclusion;\r\n if (ambientOcclusion.enabled) {\r\n AO.enabled = true;\r\n }\r\n else {\r\n AO.enabled = false;\r\n }\r\n if (AO.uniforms) {\r\n AO.uniforms.intensity = EnsureNumber(ambientOcclusion.intensity, 2.0);\r\n AO.uniforms.lengthCap = EnsureNumber(ambientOcclusion.lengthCap, 0.2);\r\n AO.uniforms.bias = EnsureNumber(ambientOcclusion.bias, 0.5);\r\n AO.uniforms.stepSize = EnsureNumber(ambientOcclusion.stepSize, 2.0);\r\n AO.uniforms.blurStepSize = EnsureNumber(ambientOcclusion.blurStepSize, 2.0);\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.Navigator.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.Navigator.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.Navigator.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 params.manager.VisualsRegister.SetSelected({\r\n selected: true,\r\n entityIds: selectedIds, \r\n refreshIfSelected: false\r\n });\r\n }\r\n\r\n params.manager.VisualsRegister.ClearHidden();\r\n let hiddenIds = bSettings?.hiddenEntityIds;\r\n if (hiddenIds == null) {\r\n hiddenIds = defaults?.settings?.hiddenEntityIds;\r\n }\r\n if (hiddenIds != null) {\r\n params.manager.VisualsRegister.SetHidden({\r\n hidden: true,\r\n entityIds: hiddenIds\r\n });\r\n }\r\n\r\n params.manager.VisualsRegister.ClearIsolated();\r\n let isolatedIds = bSettings?.isolatedEntityIds;\r\n if (isolatedIds == null) {\r\n isolatedIds = defaults?.settings?.isolatedEntityIds;\r\n }\r\n if (isolatedIds != null) {\r\n params.manager.VisualsRegister.SetIsolated({\r\n isolated: true,\r\n entityIds: isolatedIds\r\n });\r\n }\r\n\r\n params.manager.VisualsRegister.ClearOpacity();\r\n let entityOpacityMap = bSettings?.entityOpacityMap;\r\n if (entityOpacityMap == null) {\r\n entityOpacityMap = defaults?.settings?.entityOpacityMap;\r\n }\r\n if (entityOpacityMap != null) {\r\n for (const entityId in entityOpacityMap) {\r\n const opacity = EnsureNumber(entityOpacityMap[entityId], 1);\r\n if (opacity != 1) {\r\n params.manager.VisualsRegister.SetOpacity({\r\n entityIds: [entityId],\r\n opacity: opacity\r\n });\r\n }\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.Navigator.Render({\r\n apiGetter: params.apiGetter,\r\n tiles: imagery,\r\n viewer: params.manager.Viewer,\r\n });\r\n\r\n let renderedRelationEntityIds = bSettings.renderedEntityRelations;\r\n if (!renderedRelationEntityIds) {\r\n renderedRelationEntityIds = [];\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 (\r\n newItemIds.indexOf(id) === -1 ||\r\n id == RELATION_MENU_ITEM_ID\r\n ) {\r\n await params.manager.RemoveItemById({\r\n menuItemId: id\r\n });\r\n }\r\n }\r\n if (params.bookmarkId) {\r\n await MenuItemCreator.RenderBookmarkItems({\r\n apiGetter: params.apiGetter,\r\n manager: params.manager,\r\n view: view, \r\n bookmark: bookmark\r\n });\r\n }\r\n if (renderedRelationEntityIds.length > 0) {\r\n const menuItem = {\r\n id: RELATION_MENU_ITEM_ID,\r\n Caption: \"Entity relations\",\r\n BruceEntity: {\r\n EntityIds: renderedRelationEntityIds\r\n },\r\n Type: MenuItem.EType.Relations\r\n } as MenuItem.Item.IEntityRelations;\r\n await params.manager.RenderItem({\r\n apiGetter: params.apiGetter,\r\n item: menuItem\r\n });\r\n }\r\n}\r\n\r\nexport namespace ViewRenderEngine {\r\n export interface IRenderParams {\r\n // Used to request view if view is not provided.\r\n viewId?: string;\r\n // Takes priority over viewId.\r\n view?: ProjectView.View;\r\n // Used to request bookmark if bookmark is not provided.\r\n bookmarkId?: string;\r\n // Takes priority over bookmarkId.\r\n bookmark?: ProjectViewBookmark.Bookmark;\r\n // Moves the camera but without transition time.\r\n // Ignored if skipCamera = true.\r\n skipTransition?: boolean;\r\n // Does not move the camera.\r\n skipCamera?: boolean;\r\n // Getter for the API.\r\n apiGetter: BruceApi.IGetter;\r\n // The viewer to render to.\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 = params.view ? params.view : (await ProjectView.Get({\r\n api, \r\n viewId: params.viewId\r\n })).view;\r\n let bookmark = params.bookmark;\r\n if (!bookmark) {\r\n let bookmarkId = params.bookmarkId;\r\n if (!bookmarkId) {\r\n bookmarkId = view.DefaultUISlideID;\r\n }\r\n bookmark = bookmarkId ? (await ProjectViewBookmark.Get({\r\n api, \r\n viewId: params.viewId, \r\n bookmarkId: bookmarkId\r\n })).bookmark : null;\r\n }\r\n const version = view.DataVersion;\r\n if (version == 1) {\r\n await renderLegacyNavigator(\r\n params, \r\n bookmark as ProjectViewBookmark.LegacyNavigator.IBookmark, \r\n view as ProjectView.LegacyNavigator.IView\r\n );\r\n }\r\n else {\r\n await renderNavigator(\r\n params, \r\n bookmark as ProjectViewBookmark.Navigator.IBookmark, \r\n view as ProjectView.Navigator.IView\r\n );\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(params: {\r\n viewer: Cesium.Viewer\r\n }): {\r\n imagery: ProjectViewBookmark.LegacyNavigator.IBookmarkImagery[]\r\n } {\r\n const viewer = params.viewer;\r\n const collection = viewer.imageryLayers;\r\n const tiles: ProjectViewBookmark.LegacyNavigator.IBookmarkImagery[] = [];\r\n for (let i = 0; i < collection.length; i++) {\r\n const layer = collection.get(i) as TileRenderEngine.Map.LegacyNavigator.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 {\r\n imagery: tiles.reverse()\r\n };\r\n }\r\n\r\n export function GatherLegacyTerrainTile(params: {\r\n viewer: Cesium.Viewer\r\n }): {\r\n terrain: string\r\n } {\r\n const viewer = params.viewer;\r\n const enabled = viewer.terrainProvider as TileRenderEngine.Terrain.LegacyNavigator.IProviderExt;\r\n if (enabled?._bName) {\r\n return {\r\n terrain: enabled._bName\r\n };\r\n }\r\n return {\r\n terrain: \"flatterrain\"\r\n };\r\n }\r\n\r\n export function GatherMapTiles(params: {\r\n viewer: Cesium.Viewer\r\n }): {\r\n imagery: ProjectViewTile.IBookmarkImagery[]\r\n } {\r\n const viewer = params.viewer;\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.Navigator.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 {\r\n imagery: tiles\r\n };\r\n }\r\n\r\n export function GatherTerrainTile(params: {\r\n viewer: Cesium.Viewer\r\n }): {\r\n terrain: ProjectViewTile.IBookmarkTerrain\r\n } {\r\n const viewer = params.viewer;\r\n const provider = viewer.terrainProvider as TileRenderEngine.Terrain.Navigator.IProviderExt;\r\n if (provider._bMeta) {\r\n return {\r\n terrain: {\r\n accountId: provider._bMeta.accountId,\r\n tilesetId: provider._bMeta.tilesetId,\r\n }\r\n };\r\n }\r\n return null;\r\n }\r\n}"],"names":["Cesium.Cartesian2","Cesium.Cartographic","Cesium.Math","Cesium.Cartesian3","Cesium.PolygonPipeline","Cesium.EllipsoidGeodesic","Cesium.EllipsoidTerrainProvider","Cesium.sampleTerrainMostDetailed","Cesium.Color","Cesium.ColorMaterialProperty","Cesium.Entity","Cesium.Cesium3DTileFeature","Cesium.HeightReference","Cesium.Rectangle","Cesium.Matrix3","Cesium.Matrix4","Cesium.EasingFunction","Cesium.GeometryInstance","Cesium.JulianDate","Cesium.Primitive","Cesium.HorizontalOrigin","Cesium.VerticalOrigin","Cesium.ClassificationType","Cesium.ArcType","Cesium.PolygonHierarchy","Cesium.ShadowMode","Cesium.PolylineGraphics","Cesium.HeadingPitchRoll","Cesium.Transforms","Cesium.ColorBlendMode","Entity","Cesium.CallbackProperty","colorToCColor","Cesium.Cesium3DTileStyle","Cesium.Cesium3DTileset","Cesium.IonResource","Cesium.Cesium3DTileColorBlendMode","Cesium.HeadingPitchRange","Cesium.createOsmBuildings","Cesium.KmlDataSource","Cesium.createWorldTerrain","Cesium.CesiumTerrainProvider","Cesium.BingMapsImageryProvider","Cesium.BingMapsStyle","Cesium.MapboxImageryProvider","Cesium.MapboxStyleImageryProvider","Cesium.ArcGisMapServerImageryProvider","Cesium.OpenStreetMapImageryProvider","Cesium.GridImageryProvider","Cesium.GeographicTilingScheme","Cesium.ImageryLayer","Cesium.UrlTemplateImageryProvider","Cesium.TileMapServiceImageryProvider","Cesium.IonImageryProvider","Cesium.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/measure-utils.ts","../src/utils/drawing-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/render-managers/common/cesium-parabola.ts","../src/rendering/relation-render-engine.ts","../src/rendering/visuals-register.ts","../src/rendering/render-managers/entities/entities-ids-render-manager.ts","../src/rendering/render-managers/entities/entity-render-manager.ts","../src/rendering/tileset-render-engine.ts","../src/rendering/render-managers/tilesets/tileset-cad-render-manager.ts","../src/rendering/render-managers/common/shared-getters.ts","../src/rendering/render-managers/tilesets/tileset-osm-render-manager.ts","../src/rendering/render-managers/tilesets/tileset-entities-render-manager.ts","../src/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.ts","../src/rendering/render-managers/data-source/data-source-static-kml-manager.ts","../src/rendering/render-managers/tilesets/tileset-arb-render-manager.ts","../src/rendering/render-managers/other/relations-render-manager.ts","../src/rendering/menu-item-manager.ts","../src/rendering/menu-item-creator.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(params: {\r\n viewer: Cesium.Viewer\r\n // Default = true.\r\n destroyWidgets?: boolean;\r\n // Default = true.\r\n styleContainer?: boolean;\r\n }) {\r\n const { viewer, destroyWidgets, styleContainer } = params;\r\n if (destroyWidgets != false) {\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 }\r\n if (styleContainer != false) {\r\n ViewerUtils.StyleContainer({ viewer });\r\n }\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(params: {\r\n viewer: Cesium.Viewer\r\n }) {\r\n const { viewer } = params;\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 { Cartes } from \"bruce-models\";\r\nimport * 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(params: {\r\n posses: Cesium.Cartesian3[]\r\n }): {\r\n totalLength: number\r\n } {\r\n const { posses } = params;\r\n if (posses.length < 2) {\r\n return {\r\n totalLength: 0\r\n };\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 {\r\n totalLength\r\n };\r\n }\r\n\r\n export function MeasurePolygon(params: {\r\n posses: Cesium.Cartesian3[]\r\n }): {\r\n area: number,\r\n perimeter: number\r\n } {\r\n let { posses } = params;\r\n posses = [].concat(posses);\r\n if (!Cartes.IsRing3Closed(posses)) {\r\n posses.push(posses[0].clone());\r\n }\r\n if (posses.length < 3) {\r\n return {\r\n area: 0,\r\n perimeter: 0\r\n }; \r\n }\r\n\r\n let area = 0;\r\n const indices = (Cesium as any).PolygonPipeline.triangulate(posses, []);\r\n for (let i = 0; i < indices.length; i += 3) {\r\n const vector1 = posses[indices[i]];\r\n const vector2 = posses[indices[i + 1]];\r\n const vector3 = posses[indices[i + 2]];\r\n const vectorC = Cesium.Cartesian3.subtract(vector2, vector1, new Cesium.Cartesian3());\r\n const vectorD = Cesium.Cartesian3.subtract(vector3, vector1, new Cesium.Cartesian3());\r\n const areaVector = Cesium.Cartesian3.cross(vectorC, vectorD, new Cesium.Cartesian3());\r\n area += Cesium.Cartesian3.magnitude(areaVector) / 2.0;\r\n }\r\n const {totalLength: perimeter} = MeasurePolyline({\r\n posses: posses\r\n });\r\n return {\r\n area,\r\n perimeter\r\n };\r\n }\r\n}","import * as Cesium from \"cesium\";\r\nimport { MeasureUtils } from \"./measure-utils\";\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(params: {\r\n viewer: Cesium.Viewer, \r\n posses: Cesium.Cartesian3[], \r\n distance: number\r\n }): {\r\n point: Cesium.Cartesian3\r\n } {\r\n const { viewer, posses: positions, distance } = params;\r\n if (distance <= 0 && positions.length > 0) {\r\n return {\r\n point: positions[0]\r\n }\r\n }\r\n else if (positions.length > 1) {\r\n let currentDistance = 0;\r\n let {totalLength} = MeasureUtils.MeasurePolyline({\r\n posses: positions,\r\n })\r\n if (distance > totalLength) {\r\n return {\r\n point: positions[positions.length - 1]\r\n }\r\n }\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 position = geodesic.interpolateUsingFraction((distance - currentDistance) / length);\r\n const height = (carto1.height + carto2.height) / 2;\r\n return {\r\n point: Cesium.Cartesian3.fromRadians(position.longitude, position.latitude, height)\r\n };\r\n }\r\n else {\r\n currentDistance += length;\r\n }\r\n }\r\n }\r\n return {\r\n point: positions.length ? positions[positions.length - 1] : null\r\n }\r\n }\r\n\r\n /**\r\n * Returns terrain height from current viewer's provider.\r\n * On error or flat terrain, it will return 0.\r\n * If an error occurred it will be attached to the result.\r\n * @param pos3d \r\n * @param viewer \r\n * @returns \r\n */\r\n export async function GetTerrainHeight(params: {\r\n pos3d: Cesium.Cartesian3, \r\n viewer: Cesium.Viewer\r\n }): Promise<{\r\n height: number,\r\n error?: any\r\n }> {\r\n const { pos3d, viewer } = params;\r\n try {\r\n if (viewer.scene.terrainProvider instanceof Cesium.EllipsoidTerrainProvider) {\r\n return {\r\n height: 0\r\n };\r\n }\r\n const sample = await Cesium.sampleTerrainMostDetailed(viewer.scene.terrainProvider, [Cesium.Cartographic.fromCartesian(pos3d)]);\r\n const height = sample?.length ? sample[0].height : null;\r\n if (isNaN(height)) {\r\n return {\r\n height: 0,\r\n error: \"NaN\"\r\n };\r\n }\r\n return {\r\n height: height\r\n };\r\n }\r\n catch (e) {\r\n return {\r\n height: 0,\r\n error: e\r\n };\r\n }\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 \"../rendering/visuals-register\";\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(\r\n cEntity: EntityRenderEngine.ICesiumEntityExt,\r\n arr: EntityRenderEngine.ICesiumEntityExt[],\r\n ignoreParent: boolean\r\n): void {\r\n if (cEntity._parentEntity && !ignoreParent) {\r\n traverseEntity(cEntity._parentEntity, arr, false);\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, true);\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\nfunction GetValue<T>(viewer: Cesium.Viewer, obj: Cesium.Property | any): T {\r\n if ((obj as any)?.getValue) {\r\n return obj.getValue(viewer.scene.lastRenderTime);\r\n }\r\n return obj;\r\n}\r\n\r\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 params\r\n * @returns\r\n */\r\n export function GetPos(params: {\r\n viewer: Cesium.Viewer,\r\n entity: E.IEntity,\r\n // Optional register to try find currently rendered position from.\r\n visualRegister?: VisualsRegister.Register,\r\n // Will ensure returned position is at this height reference.\r\n // If no cesium visual is found, it will return it clamped to the ground.\r\n heightReference?: Cesium.HeightReference,\r\n }): Cesium.Cartesian3 {\r\n const { viewer, entity, visualRegister } = params;\r\n\r\n // TODO: Tidy this up, move to a separate function.\r\n // We need a generic \"get pos AS blah height reference\" function.\r\n function evaluateRendered() {\r\n const rego = visualRegister ? visualRegister.GetRego({\r\n entityId: entity.Bruce.ID,\r\n }) : null;\r\n\r\n if (rego?.visual instanceof Cesium.Entity) {\r\n const visual = rego.visual as Cesium.Entity;\r\n if (visual.position) {\r\n let pos3d = GetValue<Cesium.Cartesian3>(viewer, visual.position);\r\n // Fix height reference.\r\n if (pos3d?.x) {\r\n let visualHeightRef = Cesium.HeightReference.RELATIVE_TO_GROUND;\r\n if (visual.model) {\r\n visualHeightRef = GetValue<Cesium.HeightReference>(viewer, visual.model.heightReference);\r\n }\r\n else if (visual.polygon) {\r\n visualHeightRef = GetValue<Cesium.HeightReference>(viewer, visual.polygon.heightReference);\r\n }\r\n else if (visual.polyline) {\r\n visualHeightRef = GetValue<boolean>(viewer, visual.polyline.clampToGround) ?\r\n Cesium.HeightReference.RELATIVE_TO_GROUND : Cesium.HeightReference.NONE;\r\n }\r\n else if (visual.billboard) {\r\n visualHeightRef = GetValue<Cesium.HeightReference>(viewer, visual.billboard.heightReference);\r\n }\r\n else if (visual.ellipse) {\r\n visualHeightRef = GetValue<Cesium.HeightReference>(viewer, visual.ellipse.heightReference);\r\n }\r\n else if (visual.point) {\r\n visualHeightRef = GetValue<Cesium.HeightReference>(viewer, visual.point.heightReference);\r\n }\r\n\r\n if (visualHeightRef == params.heightReference) {\r\n return pos3d;\r\n }\r\n const carto = Cesium.Cartographic.fromCartesian(pos3d);\r\n if (visualHeightRef == Cesium.HeightReference.NONE) {\r\n // Turn absolute into clamped.\r\n if (params.heightReference == Cesium.HeightReference.CLAMP_TO_GROUND) {\r\n return Cesium.Cartesian3.fromRadians(carto.longitude, carto.latitude, 0);\r\n }\r\n // Turn absolute into relative (remove terrain height).\r\n else if (params.heightReference == Cesium.HeightReference.RELATIVE_TO_GROUND) {\r\n const terrainHeight = EnsureNumber(viewer.scene.globe.getHeight(carto), 0);\r\n return Cesium.Cartesian3.fromRadians(carto.longitude, carto.latitude, carto.height - terrainHeight);\r\n }\r\n }\r\n else if (visualHeightRef == Cesium.HeightReference.CLAMP_TO_GROUND) {\r\n const terrainHeight = EnsureNumber(viewer.scene.globe.getHeight(carto), 0);\r\n return Cesium.Cartesian3.fromRadians(carto.longitude, carto.latitude, terrainHeight);\r\n }\r\n else if (visualHeightRef == Cesium.HeightReference.RELATIVE_TO_GROUND) {\r\n // Turn relative into absolute (add terrain height).\r\n if (params.heightReference == Cesium.HeightReference.NONE) {\r\n const terrainHeight = EnsureNumber(viewer.scene.globe.getHeight(carto), 0);\r\n return Cesium.Cartesian3.fromRadians(carto.longitude, carto.latitude, carto.height + terrainHeight);\r\n }\r\n // Turn relative into clamped.\r\n else if (params.heightReference == Cesium.HeightReference.CLAMP_TO_GROUND) {\r\n return Cesium.Cartesian3.fromRadians(carto.longitude, carto.latitude, 0);\r\n }\r\n }\r\n return pos3d;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n function evaluateRecord() {\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 {totalLength: length} = MeasureUtils.MeasurePolyline({\r\n posses\r\n });\r\n if (length > 0) {\r\n const {point} = DrawingUtils.PointAcrossPolyline({\r\n viewer,\r\n posses: posses,\r\n distance: length / 2\r\n });\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\r\n let pos3d = evaluateRendered();\r\n if (Cartes.ValidateCartes3(pos3d)) {\r\n return pos3d;\r\n }\r\n pos3d = evaluateRecord();\r\n let carto = Cartes.ValidateCartes3(pos3d) ? Cesium.Cartographic.fromCartesian(pos3d) : null;\r\n if (carto) {\r\n // Since we don't know height reference, we can't convert it.\r\n // We will just clamp it to ground.\r\n const terrainHeight = EnsureNumber(viewer.scene.globe.getHeight(carto), 0);\r\n pos3d = Cesium.Cartesian3.fromRadians(carto.longitude, carto.latitude, terrainHeight);\r\n }\r\n return pos3d;\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(params: {\r\n entity: Cesium.Entity\r\n }): Cesium.Entity[] {\r\n const { entity } = params;\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, false);\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(params: {\r\n viewer: Cesium.Viewer,\r\n entities: VisualsRegister.Visual[]\r\n }) {\r\n const { viewer, entities } = params;\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(params: {\r\n viewer: Cesium.Viewer,\r\n entity: VisualsRegister.Visual,\r\n opacity: number\r\n }) {\r\n const { viewer, entity, opacity } = params;\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(params: {\r\n viewer: Cesium.Viewer,\r\n entity: VisualsRegister.Visual\r\n }) {\r\n const { viewer, entity } = params;\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(params: {\r\n entity: VisualsRegister.Visual\r\n }) {\r\n const { entity } = params;\r\n return findOpacity(entity);\r\n }\r\n}","import { EntityUtils } from \"../../utils/entity-utils\";\r\nimport { Cartes, Entity, ZoomControl } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\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 ReRender(entityIds?: string[]): Promise<void>;\r\n }\r\n\r\n export function DetermineZoomItem(params: {\r\n viewer: Cesium.Viewer, \r\n entity: Entity.IEntity, \r\n zoomControl: ZoomControl.IItem[]\r\n }): ZoomControl.IItem {\r\n const {viewer, entity, zoomControl} = params;\r\n const pos = EntityUtils.GetPos({\r\n viewer, \r\n entity\r\n });\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({\r\n zoomControl, \r\n distance\r\n });\r\n }\r\n\r\n export function GetZoomControlFromDistance(params: {\r\n zoomControl: ZoomControl.IItem[], \r\n distance: number\r\n }): ZoomControl.IItem {\r\n const {zoomControl, distance} = params;\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(params: {\r\n zoomControl: ZoomControl.IItem[]\r\n }): number[] {\r\n const {zoomControl} = params;\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}","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({\r\n api,\r\n styleId\r\n })).style;\r\n }\r\n if (!style) {\r\n const {entityType: type} = await EntityType.Get({\r\n api,\r\n entityTypeId: entity.Bruce[\"EntityType.ID\"]\r\n });\r\n if (type[\"DisplaySetting.ID\"]) {\r\n style = (await Style.Get({\r\n api,\r\n styleId: type[\"DisplaySetting.ID\"]\r\n })).style;\r\n }\r\n }\r\n return style;\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 ICesiumModelExt extends Cesium.ModelGraphics {\r\n _clientFileId?: 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.DetermineZoomItem({\r\n viewer: params.viewer,\r\n entity,\r\n zoomControl: params.zoomControl\r\n });\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 existingRego = params.visualRegister.GetRego({\r\n entityId: id,\r\n menuItemId: params.menuItemId\r\n });\r\n const oldRenderId = (existingRego?.visual as ICesiumEntityExt)?._renderGroup;\r\n if (newRenderId == oldRenderId && !existingRego?.stale) {\r\n cEntities[id] = existingRego.visual as ICesiumEntityExt;\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(params: {\r\n viewer: Cesium.Viewer,\r\n entity: ICesiumEntityExt,\r\n }): void {\r\n function doRemove(params: {\r\n viewer: Cesium.Viewer,\r\n entity: ICesiumEntityExt,\r\n ignoreParent: boolean\r\n }) {\r\n const { viewer, entity, ignoreParent } = params;\r\n if (viewer.isDestroyed()) {\r\n return;\r\n }\r\n if (entity._parentEntity && !ignoreParent) {\r\n doRemove({\r\n viewer,\r\n entity: entity._parentEntity,\r\n ignoreParent: false\r\n });\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 doRemove({\r\n viewer,\r\n entity: sibling,\r\n ignoreParent: true\r\n });\r\n }\r\n }\r\n if (viewer.entities.contains(entity)) {\r\n viewer.entities.remove(entity);\r\n }\r\n }\r\n doRemove({\r\n viewer: params.viewer,\r\n entity: params.entity,\r\n ignoreParent: false\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({\r\n api: params.api,\r\n fileId: style.iconId\r\n });\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({\r\n viewer: params.viewer,\r\n entity\r\n }),\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 ? Calculator.GetColor(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({\r\n viewer: params.viewer,\r\n entity\r\n }),\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({\r\n api,\r\n tagIds\r\n })).tags;\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.GetColor(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({\r\n viewer: params.viewer,\r\n entity\r\n }),\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({\r\n api,\r\n tagIds\r\n })).tags;\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 =Calculator.GetColor(style.fillColor, entity, params.tags);\r\n const cFillColor = bFillColor ? colorToCColor(bFillColor) : Cesium.Color.RED;\r\n\r\n const bLineColor = Calculator.GetColor(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({\r\n viewer: params.viewer,\r\n entity\r\n }),\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({\r\n api,\r\n tagIds\r\n })).tags;\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 lodClientFileId?: 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({\r\n viewer: params.viewer,\r\n entity\r\n });\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 = Calculator.GetColor(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 const model = cEntity.model as ICesiumModelExt;\r\n model._clientFileId = params.lodClientFileId;\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({\r\n api,\r\n tagIds\r\n })).tags;\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 {lods: lodData} = await EntityLod.GetLods({\r\n api,\r\n filter: reqBody\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({\r\n api,\r\n tagIds\r\n })).tags;\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({\r\n api,\r\n fileId: lod.clientFileId\r\n }),\r\n lodClientFileId: 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 entityCheckQueueIds: string[] = [];\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(params: {\r\n viewer: Cesium.Viewer, \r\n register: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n monitor: CesiumViewMonitor,\r\n item: MenuItem.Item.IBruceEntities,\r\n sharedGetters: SharedGetters.Cache\r\n }) {\r\n const { viewer, apiGetter, monitor, item, register: visualsManager, sharedGetters } = params;\r\n this.viewer = viewer;\r\n this.sharedGetters = sharedGetters;\r\n this.monitor = monitor;\r\n this.apiGetter = apiGetter;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public 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.GetZoomMinMax({\r\n zoomControl: this.item.CameraZoomSettings\r\n });\r\n this.getter.IncludeMenuItem(this.item.id, [], minMax[0], minMax[1]);\r\n this.getterSub = this.getter.OnUpdate.Subscribe((entities) => {\r\n 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(Object.keys(this.renderedEntities));\r\n }, 3000);\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n if (this.getter) {\r\n this.getter.ExcludeMenuItem(this.item.id);\r\n }\r\n this.disposed = true;\r\n this.visualsManager.RemoveRegos({\r\n menuItemId: this.item.id\r\n });\r\n this.entityCheckRemoval?.();\r\n this.viewMonitorRemoval?.();\r\n }\r\n\r\n public async ReRender(entityIds?: string[]) {\r\n if (entityIds == null) {\r\n entityIds = Object.keys(this.renderedEntities);\r\n }\r\n this.visualsManager.MarkStale({\r\n entityIds: entityIds, \r\n menuItemIds: [this.item.id]\r\n });\r\n await this.doEntityCheck(entityIds);\r\n }\r\n\r\n private async doEntityCheck(ids: string[]): Promise<void> {\r\n if (this.isRunningCheck) {\r\n this.entityCheckQueueIds = this.entityCheckQueueIds.concat(ids);\r\n this.entityCheckQueue.Call();\r\n return;\r\n }\r\n ids.concat(this.entityCheckQueueIds);\r\n this.entityCheckQueueIds = [];\r\n ids = ids.filter((id, index) => {\r\n return ids.indexOf(id) === index;\r\n });\r\n\r\n this.isRunningCheck = true;\r\n const api = this.apiGetter.getApi();\r\n try {\r\n if (this.disposed) {\r\n return;\r\n }\r\n if (ids.length > 0) { \r\n const 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({\r\n api, \r\n entityIds\r\n });\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 // Ensuring a re-render call with improper entity ids doesn't cause them to render here.\r\n const typeId = this.item.BruceEntity?.[\"EntityType.ID\"];\r\n if (typeId) {\r\n entities = entities.filter(x => x.Bruce?.[\"EntityType.ID\"] == typeId);\r\n }\r\n\r\n const cEntities = await EntityRenderEngine.Render({\r\n viewer: this.viewer, \r\n apiGetter: this.apiGetter, \r\n entities: entities,\r\n menuItemId: this.item.id,\r\n visualRegister: this.visualsManager,\r\n zoomControl: this.item.CameraZoomSettings\r\n });\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n const id = <string>entity.Bruce.ID;\r\n const cEntity = cEntities[id];\r\n this.renderedEntities[id] = !!cEntity;\r\n if (cEntity) {\r\n const visual = this.visualsManager.GetRego({\r\n entityId: id, \r\n menuItemId: this.item.id\r\n })?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.AddRego({\r\n rego: {\r\n entityId: <string>id,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0,\r\n entityTypeId: entity.Bruce[\"EntityType.ID\"],\r\n accountId: this.apiGetter.accountId\r\n }\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.RemoveRegos({\r\n entityId: id, \r\n menuItemId: this.item.id\r\n });\r\n }\r\n }\r\n }\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(params: {\r\n viewer: Cesium.Viewer, \r\n register: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n monitor: CesiumViewMonitor,\r\n item: MenuItem.Item.IEntitiesLoaded\r\n }) {\r\n const { viewer, apiGetter, monitor, item, register: visualsManager } = params;\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.monitor = monitor;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public 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.RemoveRegos({\r\n menuItemId: this.item.id\r\n });\r\n }\r\n\r\n public async ReRender(entityIds?: string[]) {\r\n if (entityIds == null) {\r\n entityIds = Object.keys(this.renderedEntities);\r\n }\r\n else {\r\n // ensure entity ids are part of menu item.\r\n entityIds = entityIds.filter(x => {\r\n return this.item.BruceEntity?.Entities?.find(y => y?.Bruce?.ID == x);\r\n })\r\n }\r\n this.visualsManager.MarkStale({\r\n entityIds: entityIds, \r\n menuItemIds: [this.item.id]\r\n });\r\n this.doEntityCheck(entityIds);\r\n }\r\n\r\n private async doEntityCheck(ids: string[]): Promise<void> {\r\n const api = this.apiGetter.getApi();\r\n try {\r\n if (this.disposed) {\r\n return;\r\n }\r\n if (ids.length > 0) { \r\n const 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({\r\n api, \r\n entityIds\r\n });\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.onGetterUpdate(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 }\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({\r\n entityId: id, \r\n menuItemId: this.item.id\r\n })?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.AddRego({\r\n rego: {\r\n entityId: <string>id,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0,\r\n entityTypeId: entity.Bruce[\"EntityType.ID\"],\r\n accountId: this.apiGetter.accountId\r\n }\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.RemoveRegos({\r\n entityId: id, \r\n menuItemId: this.item.id\r\n });\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n}","import { Cartes } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { DrawingUtils } from \"../../../utils/drawing-utils\";\r\n\r\n/**\r\n * Utility for rendering parabolas between two points on the map.\r\n */\r\nexport class CesiumParabola {\r\n private viewer: Cesium.Viewer;\r\n private pos1: Cesium.Cartesian3 | (() => Cesium.Cartesian3);\r\n private pos2: Cesium.Cartesian3 | (() => Cesium.Cartesian3);\r\n private color = \"white\";\r\n private width = 2;\r\n private duration = 10;\r\n private heightDistanceRatio = 0.25;\r\n\r\n private curPoints = [];\r\n private animateInterval = null;\r\n private retryTimeout = null;\r\n private parabola: Cesium.Entity;\r\n private siblings: Cesium.Entity[];\r\n\r\n private get curPos1() {\r\n return this.pos1 instanceof Function ? this.pos1() : this.pos1;\r\n }\r\n private get curPos2() {\r\n return this.pos2 instanceof Function ? this.pos2() : this.pos2;\r\n }\r\n\r\n\r\n constructor(params: {\r\n viewer: Cesium.Viewer,\r\n // Direct position or a callback to get one.\r\n pos1: Cesium.Cartesian3 | (() => Cesium.Cartesian3),\r\n pos2: Cesium.Cartesian3 | (() => Cesium.Cartesian3),\r\n color?: string,\r\n width?: number,\r\n duration?: number,\r\n heightDistanceRatio?: number\r\n }) {\r\n this.viewer = params.viewer;\r\n this.pos1 = params.pos1;\r\n this.pos2 = params.pos2;\r\n if (params.color) {\r\n this.color = params.color;\r\n }\r\n if (!isNaN(params.width)) {\r\n this.width = params.width;\r\n }\r\n if (!isNaN(params.duration)) {\r\n this.duration = params.duration;\r\n }\r\n if (!isNaN(params.heightDistanceRatio)) {\r\n this.heightDistanceRatio = params.heightDistanceRatio;\r\n }\r\n this.prepareEntities();\r\n }\r\n\r\n private prepareEntities() {\r\n const parabola = new Cesium.Entity({\r\n polyline: {\r\n positions: new Cesium.CallbackProperty(() => {\r\n return this.curPoints;\r\n }, false) as any,\r\n width: this.width,\r\n material: Cesium.Color.fromCssColorString(this.color)\r\n }\r\n });\r\n const p1Entity = new Cesium.Entity({\r\n position: new Cesium.CallbackProperty(() => {\r\n return this.curPoints.length ? this.curPoints[0] : new Cesium.Cartesian3();\r\n }, false) as any,\r\n point: {\r\n heightReference: Cesium.HeightReference.NONE,\r\n pixelSize: this.width * 1.3,\r\n color: Cesium.Color.fromCssColorString(this.color),\r\n outlineColor: Cesium.Color.WHITE,\r\n outlineWidth: 2\r\n }\r\n });\r\n const p2Entity = new Cesium.Entity({\r\n position: new Cesium.CallbackProperty(() => {\r\n return this.curPoints.length ? this.curPoints[this.curPoints.length - 1] : new Cesium.Cartesian3();\r\n }, false) as any,\r\n point: {\r\n heightReference: Cesium.HeightReference.NONE,\r\n pixelSize: this.width * 1.8,\r\n color: Cesium.Color.fromCssColorString(this.color),\r\n outlineColor: Cesium.Color.WHITE,\r\n outlineWidth: 2\r\n }\r\n });\r\n p1Entity.parent = parabola;\r\n p2Entity.parent = parabola;\r\n const siblings = [p1Entity, p2Entity];\r\n this.parabola = parabola;\r\n this.siblings = siblings;\r\n }\r\n\r\n public Animate(): {\r\n parabola: Cesium.Entity,\r\n siblings: Cesium.Entity[]\r\n } {\r\n if (this.parabola && !this.viewer.entities.contains(this.parabola)) {\r\n this.viewer.entities.add(this.parabola);\r\n }\r\n\r\n let retry = false;\r\n if (!this.curPos1 || !this.curPos2 || !Cartes.ValidateCartes3(this.curPos1) || !Cartes.ValidateCartes3(this.curPos2)) {\r\n retry = true;\r\n }\r\n let TOTAL_LENGTH = retry ? 0 : Cesium.Cartesian3.distance(this.curPos1, this.curPos2);\r\n if (TOTAL_LENGTH <= 0) {\r\n retry = true;\r\n }\r\n if (retry) {\r\n this.retryTimeout = setTimeout(() => {\r\n this.Animate();\r\n }, 2000);\r\n return {\r\n parabola: this.parabola,\r\n siblings: this.siblings\r\n };\r\n }\r\n\r\n const cEntities = [\r\n this.parabola\r\n ].concat(this.siblings);\r\n cEntities.forEach(e => {\r\n if (e && !this.viewer.entities.contains(e)) {\r\n this.viewer.entities.add(e);\r\n }\r\n });\r\n\r\n const RATE_PER_SECOND = 1000 / 40;\r\n const SEC_DURATION = this.duration;\r\n const HEIGHT_DISTANCE_RATIO = this.heightDistanceRatio;\r\n let TOTAL_POINTS = Math.max(50, Math.min(1000, TOTAL_LENGTH * 0.1));\r\n let POINT_LENGTH = TOTAL_LENGTH / TOTAL_POINTS;\r\n let TICK_LENGTH_INC = SEC_DURATION == 0 ? TOTAL_LENGTH : TOTAL_POINTS / (RATE_PER_SECOND * SEC_DURATION);\r\n\r\n let curPoint = 0;\r\n let quadraticKey = null;\r\n let quadratic: { a: number, b: number, c: number } = null;\r\n let quadraticPreparing = false;\r\n\r\n const prepareQuadratic = async () => {\r\n if (quadraticPreparing) {\r\n return;\r\n }\r\n quadraticPreparing = true;\r\n try {\r\n const p1 = this.curPos1;\r\n const p2 = this.curPos2;\r\n if (!p1 || !p2 || !Cartes.ValidateCartes3(p1) || !Cartes.ValidateCartes3(p2)) {\r\n return;\r\n }\r\n const height1 = Cesium.Cartographic.fromCartesian(p1).height;\r\n const height2 = Cesium.Cartographic.fromCartesian(p2).height;\r\n if (isNaN(height1) || isNaN(height2)) {\r\n return;\r\n }\r\n const totalHeight = height2 + height1;\r\n const curQuadraticKey = `${height1}-${height2}-${TOTAL_LENGTH}`;\r\n if (quadraticKey == curQuadraticKey) {\r\n return;\r\n }\r\n \r\n const points2d = [\r\n new Cesium.Cartesian2(0, height1),\r\n new Cesium.Cartesian2(TOTAL_LENGTH, height2)\r\n ];\r\n let vertexHeight = 0;\r\n // Flat line.\r\n if (HEIGHT_DISTANCE_RATIO == 0) {\r\n vertexHeight = totalHeight * 0.5;\r\n }\r\n else {\r\n const largestHeight = Math.max(height1, height2);\r\n vertexHeight = largestHeight + (TOTAL_LENGTH * HEIGHT_DISTANCE_RATIO);\r\n }\r\n points2d.push(new Cesium.Cartesian2(\r\n TOTAL_LENGTH * 0.5,\r\n vertexHeight\r\n ));\r\n const calcQuadratic = (points: Cesium.Cartesian2[]) => {\r\n // Swaps position of two rows in matrix.\r\n function swapRows(matrix, rowAIndex, rowBIndex) {\r\n const rowAVal = matrix[rowAIndex];\r\n matrix[rowAIndex] = matrix[rowBIndex];\r\n matrix[rowBIndex] = rowAVal;\r\n return matrix;\r\n }\r\n \r\n // Zeros rowA at colIndex by subtracting a multiplied rowB from it.\r\n function reduceMatrixRowByRow(matrix, zeroingIndex, parentIndex, colIndex) {\r\n const zeroRow = matrix[zeroingIndex];\r\n const parentRow = matrix[parentIndex];\r\n \r\n if (zeroRow[colIndex] == 0) {\r\n return matrix;\r\n }\r\n else if (parentRow[colIndex] == 0) {\r\n matrix = swapRows(matrix, parentIndex, zeroingIndex); \r\n return divideMatrixRow(matrix, parentIndex, colIndex);\r\n }\r\n \r\n // rowAIndex colIndex / rowBIndex colIndex = factor;\r\n let factor = zeroRow[colIndex] / parentRow[colIndex];\r\n for (let i = 0; i < zeroRow.length; i++) {\r\n if (i >= colIndex) {\r\n zeroRow[i] -= parentRow[i] * factor;\r\n }\r\n }\r\n return matrix;\r\n }\r\n \r\n // Makes a given row column equal 1 by diving while row by that column.\r\n function divideMatrixRow(matrix, rowIndex, colIndex) {\r\n const row = matrix[rowIndex];\r\n const colValue = row[colIndex];\r\n for (let i = 0; i < row.length; i++) {\r\n if (i >= colIndex) {\r\n row[i] /= colValue;\r\n }\r\n }\r\n return matrix;\r\n }\r\n \r\n // Returns initial matrix for calculating a, b and c for quadratic formula from given points.\r\n function matrixFromPoints(points) {\r\n const rows = [];\r\n const constructRow = (point) => {\r\n rows.push([\r\n -Math.pow(point.x, 2),\r\n point.x,\r\n 1,\r\n point.y\r\n ]);\r\n };\r\n for (let i = 0; i < points.length; i++) {\r\n constructRow(points[i]);\r\n }\r\n return rows;\r\n }\r\n \r\n const initialMatrix = matrixFromPoints(points);\r\n const step1Matrix = reduceMatrixRowByRow(initialMatrix, 1, 0, 0);\r\n const step2Matrix = reduceMatrixRowByRow(step1Matrix, 2, 0, 0);\r\n const step3Matrix = reduceMatrixRowByRow(step2Matrix, 2, 1, 1);\r\n const step4Matrix = reduceMatrixRowByRow(step3Matrix, 0, 1, 1);\r\n const step5Matrix = reduceMatrixRowByRow(step4Matrix, 0, 2, 2);\r\n const step6Matrix = reduceMatrixRowByRow(step5Matrix, 1, 2, 2);\r\n const a = step6Matrix[0][3];\r\n const b = step6Matrix[1][3];\r\n const c = step6Matrix[2][3];\r\n return { a: a, b: b, c: c };\r\n };\r\n quadratic = calcQuadratic(points2d);\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n finally {\r\n quadraticPreparing = false;\r\n }\r\n };\r\n\r\n const getPosition = (increment: number): Cesium.Cartesian3 => {\r\n if (!quadratic) {\r\n return null;\r\n }\r\n\r\n let lengthAcross = POINT_LENGTH * increment;\r\n if (lengthAcross > TOTAL_LENGTH) {\r\n lengthAcross = TOTAL_LENGTH;\r\n }\r\n\r\n const getParabolaYFromX = (x: number, quadLetters: { a: number, b: number, c: number }): number => {\r\n let a = quadLetters.a;\r\n let b = quadLetters.b;\r\n let c = quadLetters.c;\r\n return (-a * Math.pow(x, 2)) + (b * x) + c;\r\n }\r\n\r\n const {point: pos3d} = DrawingUtils.PointAcrossPolyline({\r\n viewer: this.viewer,\r\n distance: lengthAcross,\r\n posses: [this.curPos1, this.curPos2]\r\n })\r\n const point = Cesium.Cartographic.fromCartesian(pos3d);\r\n const posHeight = getParabolaYFromX(lengthAcross, quadratic);\r\n return Cesium.Cartesian3.fromRadians(point.longitude, point.latitude, posHeight);\r\n };\r\n\r\n const updatePoints = () => {\r\n if (!quadratic) {\r\n return;\r\n }\r\n const increment = Math.floor(curPoint);\r\n const chips = curPoint - Math.floor(curPoint);\r\n const posses: Cesium.Cartesian3[] = [];\r\n posses.push(getPosition(0));\r\n const addLast = increment >= TOTAL_POINTS;\r\n const totalCycles = addLast ? increment + 1 : increment;\r\n for (let i = 0; i < totalCycles; i++) {\r\n posses.push(getPosition(i));\r\n }\r\n posses.push(getPosition(increment + chips));\r\n if (posses.find(x => !x || !Cartes.ValidateCartes3(x))) {\r\n return;\r\n }\r\n this.curPoints = posses;\r\n };\r\n\r\n const doTick = () => {\r\n const p1 = this.curPos1;\r\n const p2 = this.curPos2;\r\n const newLength = p1 && p2 ? Cesium.Cartesian3.distance(p1, p2) : -1;\r\n if (newLength > 0 && newLength != TOTAL_LENGTH) {\r\n TOTAL_LENGTH = newLength;\r\n TOTAL_POINTS = Math.max(50, Math.min(1000, TOTAL_LENGTH * 0.1));\r\n POINT_LENGTH = TOTAL_LENGTH / TOTAL_POINTS;\r\n TICK_LENGTH_INC = SEC_DURATION == 0 ? TOTAL_LENGTH : TOTAL_POINTS / (RATE_PER_SECOND * SEC_DURATION);\r\n }\r\n prepareQuadratic();\r\n if (quadratic) {\r\n if (curPoint < TOTAL_POINTS) {\r\n curPoint += TICK_LENGTH_INC;\r\n }\r\n updatePoints();\r\n }\r\n };\r\n this.animateInterval = setInterval(doTick, RATE_PER_SECOND);\r\n\r\n return {\r\n parabola: this.parabola,\r\n siblings: this.siblings\r\n };\r\n }\r\n\r\n public Dispose() {\r\n clearTimeout(this.retryTimeout);\r\n clearInterval(this.animateInterval);\r\n const cEntities = [\r\n this.parabola\r\n ].concat(this.siblings);\r\n cEntities.forEach(e => {\r\n if (e && this.viewer.entities.contains(e)) {\r\n this.viewer.entities.remove(e);\r\n }\r\n });\r\n }\r\n}","import { BruceApi, Calculator, Color, Entity, EntityRelation, EntityRelationType, EntityType, IDictionary, Style } from \"bruce-models\";\r\nimport { VisualsRegister } from \"./visuals-register\";\r\nimport * as Cesium from \"cesium\";\r\nimport { CesiumParabola } from \"./render-managers/common/cesium-parabola\";\r\nimport { EnsureNumber } from \"../internal/js-utils\";\r\nimport { EntityUtils } from \"../utils/entity-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\nexport namespace RelationRenderEngine {\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 function GetRenderGroupId(relation: EntityRelation.IRelation) {\r\n return `${relation[\"Related.Entity.ID\"]}-${relation[\"Principal.Entity.ID\"]}-${relation[\"Relation.Type.ID\"]}`;\r\n }\r\n\r\n export async function Render(params: {\r\n apiGetter: BruceApi.IGetter,\r\n viewer: Cesium.Viewer; \r\n visualRegister: VisualsRegister.Register;\r\n menuItemId: string;\r\n relations: EntityRelation.IRelation[]\r\n }): Promise<IDictionary<ICesiumEntityExt>> {\r\n const { apiGetter, viewer, visualRegister, menuItemId, relations } = params;\r\n const api = apiGetter.getApi(apiGetter.accountId);\r\n const rendered: IDictionary<ICesiumEntityExt> = {};\r\n for (let i = 0; i < relations.length; i++) {\r\n const relation = relations[i];\r\n const {entity: fromEntity} = await Entity.Get({\r\n api,\r\n entityId: relation[\"Principal.Entity.ID\"],\r\n });\r\n const {entity: toEntity} = await Entity.Get({\r\n api,\r\n entityId: relation[\"Related.Entity.ID\"],\r\n });\r\n const dataEntity = relation[\"Data.Entity.ID\"] ? (await Entity.Get({\r\n api,\r\n entityId: relation[\"Data.Entity.ID\"]\r\n })).entity : null;\r\n const {relationType} = await EntityRelationType.Get({\r\n api,\r\n relationTypeId: relation[\"Relation.Type.ID\"]\r\n });\r\n let styleId = Number(relationType?.[\"Relation.EntityType.ID\"]);\r\n if (!styleId) {\r\n const {entityType} = await EntityType.Get({\r\n api,\r\n entityTypeId: relationType?.[\"Relation.EntityType.ID\"]\r\n })\r\n styleId = entityType?.[\"DisplaySetting.ID\"];\r\n }\r\n const style = styleId ? (await Style.Get({\r\n api,\r\n styleId: styleId\r\n })).style : null;\r\n const cEntity = Parabola.Render({\r\n dataEntity,\r\n fromEntity,\r\n relation,\r\n style,\r\n toEntity,\r\n viewer,\r\n visualRegister: visualRegister\r\n });\r\n cEntity._renderGroup = GetRenderGroupId(relation);\r\n rendered[GetRenderGroupId(relation)] = cEntity;\r\n }\r\n return rendered;\r\n }\r\n\r\n export namespace Parabola {\r\n export interface IParabola {\r\n viewer: Cesium.Viewer;\r\n relation: EntityRelation.IRelation;\r\n fromEntity: Entity.IEntity;\r\n toEntity: Entity.IEntity;\r\n dataEntity: Entity.IEntity;\r\n style: Style.IStyle;\r\n visualRegister?: VisualsRegister.Register;\r\n }\r\n\r\n export function Render(params: IParabola): ICesiumEntityExt {\r\n const style = params.style?.Settings as Style.IRelationSettings;\r\n\r\n const entity = params.dataEntity;\r\n const bColor: Color.IColor = style?.lineColor ? Calculator.GetColor(style?.lineColor, entity, []) : null;\r\n const cColor = bColor ? colorToCColor(bColor) : Cesium.Color.WHITE;\r\n let width = EnsureNumber(style?.lineWidth ? Calculator.GetValue(style?.lineWidth, entity, []) : 4, 4);\r\n if (width < 1) {\r\n width = 1;\r\n }\r\n const duration = EnsureNumber(style?.duration ? Calculator.GetValue(style?.duration, entity, []) : 2, 2);\r\n const hDistanceRatio = EnsureNumber(style?.heightDistanceRatio ? Calculator.GetValue(style?.heightDistanceRatio, entity, []) : 0.25, 0.25);\r\n\r\n let fromPos = null;\r\n let toPos = null;\r\n let updatingPosses = false;\r\n const updatePosses = () => {\r\n if (updatingPosses) {\r\n return;\r\n }\r\n updatingPosses = true;\r\n try {\r\n fromPos = EntityUtils.GetPos({\r\n entity: params.fromEntity,\r\n viewer: params.viewer,\r\n visualRegister: params.visualRegister,\r\n heightReference: Cesium.HeightReference.NONE\r\n });\r\n toPos = EntityUtils.GetPos({\r\n entity: params.toEntity,\r\n viewer: params.viewer,\r\n visualRegister: params.visualRegister,\r\n heightReference: Cesium.HeightReference.NONE\r\n });\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n updatingPosses = false;\r\n };\r\n updatePosses();\r\n const parabola = new CesiumParabola({\r\n viewer: params.viewer,\r\n pos1: () => fromPos,\r\n pos2: () => toPos,\r\n color: cColor.toCssColorString(),\r\n width: width,\r\n duration: duration,\r\n heightDistanceRatio: hDistanceRatio\r\n });\r\n const cEntities = parabola.Animate();\r\n const cEntity = cEntities.parabola as ICesiumEntityExt;\r\n cEntity._siblingGraphics = [];\r\n for (let i = 0; i < cEntities.siblings.length; i++) {\r\n const sibling = cEntities.siblings[i];\r\n cEntity._siblingGraphics.push(sibling);\r\n }\r\n let updateInterval = setInterval(() => {\r\n if (\r\n !params.viewer?.scene ||\r\n params.viewer.isDestroyed() ||\r\n !params.viewer.entities.contains(cEntity)\r\n ) {\r\n clearInterval(updateInterval);\r\n parabola.Dispose();\r\n return;\r\n }\r\n updatePosses();\r\n }, 1000);\r\n return cEntity;\r\n }\r\n }\r\n}","import { BruceEvent, Cartes, EntityRelation, IDictionary, ObjectUtils } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EnsureNumber } from \"../internal/js-utils\";\r\nimport { EntityUtils } from \"../utils/entity-utils\";\r\nimport { EntityRenderEngine } from \"./entity-render-engine\";\r\nimport { RelationRenderEngine } from \"./relation-render-engine\";\r\n\r\ninterface IVisualExt {//extends Visual {\r\n _register?: VisualsRegister.Register;\r\n _rego?: VisualsRegister.IVisualRego;\r\n}\r\n\r\nfunction removeEntity(viewer: Cesium.Viewer, visual: VisualsRegister.Visual): void {\r\n unmarkEntity(visual, false);\r\n if (visual instanceof Cesium.Entity) {\r\n EntityRenderEngine.Remove({\r\n viewer,\r\n entity: visual\r\n });\r\n }\r\n else if (visual instanceof Cesium.Primitive) {\r\n if (viewer.scene.primitives.contains(visual)) {\r\n viewer.scene.primitives.remove(visual);\r\n }\r\n }\r\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\r\n try {\r\n const tileset = visual?.tileset;\r\n if (tileset && viewer.scene.primitives.contains(tileset)) {\r\n visual.show = false;\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n}\r\n\r\nfunction updateCEntityShow(viewer: Cesium.Viewer, visual: EntityRenderEngine.ICesiumEntityExt, show: boolean, ignoreParent: boolean) {\r\n if (visual._parentEntity && !ignoreParent) {\r\n updateCEntityShow(viewer, visual._parentEntity, show, false);\r\n }\r\n if (visual._siblingGraphics) {\r\n for (let i = 0; i < visual._siblingGraphics.length; i++) {\r\n const sibling = visual._siblingGraphics[i];\r\n updateCEntityShow(viewer, sibling, show, true);\r\n }\r\n }\r\n if (viewer.entities.contains(visual)) {\r\n visual.show = show;\r\n }\r\n}\r\n\r\nfunction updateEntityShow(\r\n viewer: Cesium.Viewer,\r\n visual: VisualsRegister.Visual,\r\n show: boolean\r\n): void {\r\n if (visual instanceof Cesium.Entity) {\r\n updateCEntityShow(viewer, visual, show, false);\r\n }\r\n else if (visual instanceof Cesium.Primitive) {\r\n if (viewer.scene.primitives.contains(visual)) {\r\n visual.show = show;\r\n }\r\n }\r\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\r\n // No way to tell if changing show will crash it!\r\n try {\r\n visual.show = show;\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n}\r\n\r\nfunction updateEntity(viewer: Cesium.Viewer, entityId: string, register: VisualsRegister.Register): void {\r\n const isolatedIds = register.GetIsolated();\r\n const isIsolated = isolatedIds.includes(entityId);\r\n const isHidden = register.GetIsHidden({\r\n entityId\r\n });\r\n const regos = register.GetRegos({\r\n entityId\r\n });\r\n let highestPriority: VisualsRegister.IVisualRego = <any>null;\r\n for (let i = 0; i < regos.length; i++) {\r\n const rego = regos[i];\r\n if (highestPriority === null || rego.priority > highestPriority.priority) {\r\n highestPriority = rego;\r\n }\r\n }\r\n\r\n function getShowState(rego: VisualsRegister.IVisualRego) {\r\n if (isHidden) {\r\n return false;\r\n }\r\n if (!isIsolated && isolatedIds.length > 0) {\r\n return false;\r\n }\r\n return rego === highestPriority;\r\n }\r\n\r\n for (let i = 0; i < regos.length; i++) {\r\n const rego = regos[i];\r\n rego.best = rego === highestPriority;\r\n updateEntityShow(viewer, rego.visual, getShowState(rego));\r\n }\r\n}\r\n\r\nfunction markEntity(register: VisualsRegister.Register, rego: VisualsRegister.IVisualRego, visual: VisualsRegister.Visual, ignoreParent: boolean): void {\r\n const vis = <IVisualExt>visual;\r\n vis._register = register;\r\n vis._rego = rego;\r\n if (visual instanceof Cesium.Entity) {\r\n const visEnt = <EntityRenderEngine.ICesiumEntityExt>visual;\r\n if (visEnt._parentEntity && !ignoreParent) {\r\n markEntity(register, rego, visEnt._parentEntity, false);\r\n }\r\n if (visEnt._siblingGraphics) {\r\n for (let i = 0; i < visEnt._siblingGraphics.length; i++) {\r\n markEntity(register, rego, visEnt._siblingGraphics[i], true);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction unmarkEntity(visual: VisualsRegister.Visual, ignoreParent: boolean): void {\r\n const vis = <IVisualExt>visual;\r\n vis._register = <any>null;\r\n if (visual instanceof Cesium.Entity) {\r\n const visEnt = <EntityRenderEngine.ICesiumEntityExt>visual;\r\n if (visEnt._parentEntity && !ignoreParent) {\r\n unmarkEntity(visEnt._parentEntity, false);\r\n }\r\n if (visEnt._siblingGraphics) {\r\n for (let i = 0; i < visEnt._siblingGraphics.length; i++) {\r\n unmarkEntity(visEnt._siblingGraphics[i], true);\r\n }\r\n }\r\n }\r\n}\r\n\r\nconst ORG_COLOR_KEY = \"_org_color_\";\r\n\r\nfunction select(viewer: Cesium.Viewer, visual: VisualsRegister.Visual): 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({\r\n entity: visual\r\n });\r\n const keyMapping = {\r\n \"point\": \"color\",\r\n \"polygon\": \"material\",\r\n \"polyline\": \"material\",\r\n \"model\": \"color\",\r\n \"billboard\": \"color\"\r\n };\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n const processGraphic = (graphicKey: string, materialKey: string) => {\r\n if (entity[graphicKey]) {\r\n if (entity[graphicKey][ORG_COLOR_KEY] == null) {\r\n let orgColor = entity[graphicKey][materialKey];\r\n if (!orgColor) {\r\n orgColor = Cesium.Color.WHITE;\r\n }\r\n entity[graphicKey][ORG_COLOR_KEY] = orgColor.clone ? orgColor.clone() : orgColor;\r\n }\r\n entity[graphicKey][materialKey] = color.clone();\r\n }\r\n };\r\n for (let key in keyMapping) {\r\n const map = keyMapping[key];\r\n processGraphic(key, map);\r\n }\r\n }\r\n }\r\n else if (visual instanceof Cesium.Primitive) {\r\n // TODO.\r\n }\r\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\r\n let orgColor = visual[ORG_COLOR_KEY];\r\n if (orgColor == null) {\r\n orgColor = visual.color;\r\n visual[ORG_COLOR_KEY] = orgColor?.clone?.();\r\n }\r\n visual.color = color.clone();\r\n }\r\n const opacity = EntityUtils.GetOpacity({\r\n entity: visual\r\n });\r\n if (opacity != null) {\r\n EntityUtils.SetOpacity({\r\n viewer,\r\n entity: visual,\r\n opacity\r\n });\r\n }\r\n}\r\n\r\nfunction deselect(viewer: Cesium.Viewer, visual: VisualsRegister.Visual): void {\r\n if (visual instanceof Cesium.Entity) {\r\n const entities = EntityUtils.GatherEntity({\r\n entity: visual\r\n });\r\n const keyMapping = {\r\n \"point\": \"color\",\r\n \"polygon\": \"material\",\r\n \"polyline\": \"material\",\r\n \"model\": \"color\",\r\n \"billboard\": \"color\"\r\n };\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n const processGraphic = (graphicKey: string, materialKey: string) => {\r\n if (entity[graphicKey]?.[ORG_COLOR_KEY]) {\r\n entity[graphicKey][materialKey] = entity[graphicKey][ORG_COLOR_KEY];\r\n }\r\n };\r\n for (let key in keyMapping) {\r\n const map = keyMapping[key];\r\n processGraphic(key, map);\r\n }\r\n }\r\n }\r\n else if (visual instanceof Cesium.Primitive) {\r\n // TODO.\r\n }\r\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\r\n const orgColor = visual[ORG_COLOR_KEY];\r\n if (orgColor != null) {\r\n visual.color = orgColor;\r\n }\r\n }\r\n const opacity = EntityUtils.GetOpacity({\r\n entity: visual\r\n });\r\n if (opacity != null) {\r\n EntityUtils.SetOpacity({\r\n viewer,\r\n entity: visual,\r\n opacity\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Manages a registry of all Bruce visuals being rendered by menu items.\r\n * If multiple stuff is registered with the same entity id, only the \"best\" one is left visible.\r\n */\r\nexport namespace VisualsRegister {\r\n export type Visual = Cesium.Entity | Cesium.Primitive | Cesium.Cesium3DTileFeature;\r\n\r\n export interface IVisualRego {\r\n // Bruce entity id.\r\n entityId: string;\r\n // Source bruce account id.\r\n accountId?: string;\r\n // Relationship if this is a rendered relationship.\r\n relation?: EntityRelation.IRelation;\r\n // Bruce entity type id - if known while menu item was loading the visual.\r\n entityTypeId?: string;\r\n // Bruce data-source id.\r\n // Used to store source-entity-id mapping to entity-id.\r\n sourceId?: number\r\n // External entity id.\r\n sourceEntityId?: string;\r\n // Tileset id from which this visual was loaded from.\r\n tilesetId?: string;\r\n // Menu item id from which this visual was loaded from.\r\n menuItemId: string;\r\n // The visual itself.\r\n visual: Visual;\r\n // The visual's render priority. The highest priority is rendered, lower ones are hidden.\r\n priority: number;\r\n // Indicates if this is the best visual for the entity.\r\n // If multiple visuals are registered for the same entity, only the best one is left visible.\r\n // Warning: Don't assign, the register will do it.\r\n best?: boolean;\r\n // Optional indicator that this visual is stale,\r\n // This means the next re-render of the menu item will update this visual.\r\n stale?: boolean;\r\n // Last updated opacity value. Null = 100% opacity.\r\n // Warning: Don't assign, the register will do it.\r\n opacity?: number;\r\n }\r\n\r\n export enum EVisualUpdateType {\r\n Add = \"ADD\",\r\n Remove = \"REMOVE\",\r\n Update = \"UPDATE\"\r\n }\r\n\r\n export interface IVisualUpdate {\r\n type: EVisualUpdateType;\r\n entityId?: string;\r\n rego?: IVisualRego;\r\n hidden?: boolean;\r\n isolated?: boolean;\r\n selected?: boolean;\r\n opacity?: number;\r\n }\r\n\r\n export class Register {\r\n private id = ObjectUtils.UId();\r\n public get Id(): string {\r\n return this.id;\r\n }\r\n private viewer: Cesium.Viewer;\r\n public get Viewer(): Cesium.Viewer {\r\n return this.viewer;\r\n }\r\n private rego: IDictionary<IVisualRego[]> = {};\r\n private onUpdate: BruceEvent<IVisualUpdate> = <any>null;\r\n public get OnUpdate(): BruceEvent<IVisualUpdate> {\r\n if (!this.onUpdate) {\r\n this.onUpdate = new BruceEvent<IVisualUpdate>();\r\n }\r\n return this.onUpdate;\r\n }\r\n private selectedIds: string[] = [];\r\n private isolatedIds: string[] = [];\r\n private hiddenIds: string[] = [];\r\n // Entity id -> opacity for visual.\r\n private opacity: IDictionary<number> = {};\r\n\r\n\r\n constructor(viewer: Cesium.Viewer) {\r\n this.viewer = viewer;\r\n }\r\n\r\n public SetSelected(params: {\r\n selected: boolean,\r\n entityIds: string[],\r\n refreshIfSelected?: boolean\r\n }): void {\r\n let { entityIds, selected, refreshIfSelected } = params;\r\n if (refreshIfSelected == null) {\r\n refreshIfSelected = true;\r\n }\r\n for (let i = 0; i < entityIds.length; i++) {\r\n const id = entityIds[i];\r\n if (selected) {\r\n let doSelect = refreshIfSelected;\r\n if (this.selectedIds.indexOf(id) === -1) {\r\n this.selectedIds.push(id);\r\n doSelect = true;\r\n }\r\n if (doSelect) {\r\n const regos = this.rego[id];\r\n if (regos) {\r\n for (let i = 0; i < regos.length; i++) {\r\n const rego = regos[i];\r\n select(this.viewer, rego.visual);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n const index = this.selectedIds.indexOf(id);\r\n if (index !== -1) {\r\n this.selectedIds.splice(index, 1);\r\n const regos = this.rego[id];\r\n if (regos) {\r\n for (let i = 0; i < regos.length; i++) {\r\n const rego = regos[i];\r\n deselect(this.viewer, rego.visual);\r\n }\r\n }\r\n }\r\n }\r\n this.onUpdate?.Trigger({\r\n entityId: id,\r\n type: EVisualUpdateType.Update,\r\n selected: selected\r\n });\r\n }\r\n }\r\n\r\n public GetIsSelected(params: {\r\n entityId: string\r\n }): boolean {\r\n const { entityId: id } = params;\r\n return this.selectedIds.indexOf(id) !== -1;\r\n }\r\n\r\n public ClearSelected(): void {\r\n for (let i = 0; i < this.selectedIds.length; i++) {\r\n const id = this.selectedIds[i];\r\n const regos = this.rego[id];\r\n if (regos) {\r\n for (let i = 0; i < regos.length; i++) {\r\n const rego = regos[i];\r\n deselect(this.viewer, rego.visual);\r\n }\r\n }\r\n }\r\n this.selectedIds = [];\r\n }\r\n\r\n public GetSelected() {\r\n return this.selectedIds;\r\n }\r\n\r\n public SetIsolated(params: {\r\n entityIds: string[],\r\n isolated: boolean\r\n }): void {\r\n const { entityIds, isolated: isolate } = params;\r\n for (let i = 0; i < entityIds.length; i++) {\r\n const id = entityIds[i];\r\n if (isolate) {\r\n if (this.isolatedIds.indexOf(id) === -1) {\r\n this.isolatedIds.push(id);\r\n }\r\n }\r\n else {\r\n const index = this.isolatedIds.indexOf(id);\r\n if (index !== -1) {\r\n this.isolatedIds.splice(index, 1);\r\n }\r\n }\r\n this.onUpdate?.Trigger({\r\n entityId: id,\r\n type: EVisualUpdateType.Update,\r\n isolated: isolate\r\n });\r\n }\r\n this.updateAllEntities();\r\n }\r\n\r\n public GetIsIsolated(params: {\r\n entityId: string\r\n }): boolean {\r\n const { entityId: id } = params;\r\n return this.isolatedIds.indexOf(id) !== -1;\r\n }\r\n\r\n public GetIsolated() {\r\n return this.isolatedIds;\r\n }\r\n\r\n public ClearIsolated(): void {\r\n this.isolatedIds = [];\r\n this.updateAllEntities();\r\n }\r\n\r\n public SetHidden(params: {\r\n hidden: boolean,\r\n entityIds: string[]\r\n }): void {\r\n const { entityIds, hidden } = params;\r\n for (let i = 0; i < entityIds.length; i++) {\r\n const id = entityIds[i];\r\n if (hidden) {\r\n if (this.hiddenIds.indexOf(id) === -1) {\r\n this.hiddenIds.push(id);\r\n }\r\n updateEntity(this.viewer, id, this);\r\n }\r\n else {\r\n const index = this.hiddenIds.indexOf(id);\r\n if (index !== -1) {\r\n this.hiddenIds.splice(index, 1);\r\n }\r\n updateEntity(this.viewer, id, this);\r\n }\r\n this.onUpdate?.Trigger({\r\n entityId: id,\r\n type: EVisualUpdateType.Update,\r\n hidden: hidden\r\n });\r\n }\r\n }\r\n\r\n public GetIsHidden(params: {\r\n entityId: string\r\n }): boolean {\r\n const { entityId: id } = params;\r\n return this.hiddenIds.indexOf(id) !== -1;\r\n }\r\n\r\n public GetHidden() {\r\n return this.hiddenIds;\r\n }\r\n\r\n public ClearHidden(): void {\r\n this.hiddenIds = [];\r\n this.updateAllEntities();\r\n this.onUpdate?.Trigger({\r\n type: EVisualUpdateType.Update,\r\n hidden: false\r\n });\r\n }\r\n\r\n public AddRego(params: {\r\n rego: IVisualRego\r\n }): void {\r\n const { rego } = params;\r\n this.RemoveRegos({\r\n entityId: rego.entityId,\r\n menuItemId: rego.menuItemId,\r\n doUpdate: false\r\n });\r\n const entityId = rego.entityId;\r\n const entityRegos = this.rego[entityId] ?? [];\r\n entityRegos.push(rego);\r\n this.rego[entityId] = entityRegos;\r\n markEntity(this, rego, rego.visual, false);\r\n updateEntity(this.viewer, entityId, this);\r\n\r\n const selected = this.selectedIds.includes(entityId);\r\n if (selected) {\r\n select(this.viewer, rego.visual);\r\n }\r\n const opacity = this.opacity[entityId];\r\n if (opacity != null && opacity != 1) {\r\n EntityUtils.SetOpacity({\r\n entity: rego.visual,\r\n opacity: opacity,\r\n viewer: this.viewer\r\n });\r\n }\r\n\r\n this.onUpdate?.Trigger({\r\n rego: rego,\r\n type: EVisualUpdateType.Add,\r\n entityId: rego.entityId,\r\n opacity: opacity,\r\n selected: selected\r\n });\r\n }\r\n\r\n /**\r\n * Locates a visual corresponding to a given entity id.\r\n * If no menu item id is provided, then it will pick the \"best\" one.\r\n * @param entityId\r\n * @param menuItemId\r\n * @returns\r\n */\r\n public GetRego(params: {\r\n entityId: string,\r\n menuItemId?: string\r\n }): IVisualRego {\r\n const { entityId, menuItemId } = params;\r\n const entityRegos = this.rego[entityId];\r\n if (!entityRegos) {\r\n return <any>[];\r\n }\r\n if (menuItemId) {\r\n return <any>entityRegos.find(r => r.menuItemId === menuItemId);\r\n }\r\n return entityRegos.find(x => x.best);\r\n }\r\n\r\n /**\r\n * Returns regos matching given criteria.\r\n * Either entityId or menuItemId must be provided.\r\n * @param params\r\n * @returns\r\n */\r\n public GetRegos(params: {\r\n entityId?: string,\r\n menuItemId?: string\r\n }): IVisualRego[] {\r\n // TODO: refactor.\r\n // Currently this was made by merging two functions.\r\n\r\n const { entityId, menuItemId } = params;\r\n if (entityId) {\r\n const entityId = params.entityId;\r\n const entityRegos = this.rego[entityId];\r\n if (!entityRegos) {\r\n return <any>[];\r\n }\r\n return menuItemId ? entityRegos.filter(x => x.menuItemId == menuItemId) : entityRegos;\r\n }\r\n else if (menuItemId) {\r\n const menuItemId = params.menuItemId;\r\n const visuals: IVisualRego[] = [];\r\n for (const entityId in this.rego) {\r\n const entityRegos = this.rego[entityId];\r\n if (entityRegos) {\r\n const rego = entityRegos.find(r => r.menuItemId === menuItemId);\r\n if (rego) {\r\n visuals.push(rego);\r\n }\r\n }\r\n }\r\n return visuals;\r\n }\r\n }\r\n\r\n /**\r\n * Removes regos matching given criteria.\r\n * Either entityId or menuItemId must be provided.\r\n * @param params\r\n * @returns\r\n */\r\n public RemoveRegos(params: {\r\n entityId?: string,\r\n menuItemId?: string,\r\n relation?: EntityRelation.IRelation,\r\n doUpdate?: boolean\r\n }): void {\r\n let { entityId, menuItemId, doUpdate, relation } = params;\r\n if (doUpdate == null) {\r\n doUpdate = true;\r\n }\r\n\r\n // TODO: refactor.\r\n // Currently this was made by merging two functions.\r\n\r\n if (menuItemId && !entityId) {\r\n for (const entityId in this.rego) {\r\n const entityRegos = this.rego[entityId];\r\n if (entityRegos) {\r\n const rego = entityRegos.find(r => r.menuItemId === menuItemId);\r\n if (!rego) {\r\n continue;\r\n }\r\n removeEntity(this.viewer, rego.visual);\r\n const doesInclude = this.rego[entityId].find(r => r.menuItemId === menuItemId);\r\n if (doesInclude) {\r\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== menuItemId);\r\n }\r\n this.onUpdate?.Trigger({\r\n type: EVisualUpdateType.Remove,\r\n entityId: rego.entityId,\r\n rego: rego\r\n });\r\n if (doesInclude) {\r\n updateEntity(this.viewer, entityId, this);\r\n }\r\n }\r\n }\r\n }\r\n else if (entityId) {\r\n const entityRegos = this.rego[entityId];\r\n if (!entityRegos) {\r\n return;\r\n }\r\n const menuItems = menuItemId ? [menuItemId] : entityRegos.map(x => x.menuItemId);\r\n for (let i = 0; i < menuItems.length; i++) {\r\n const menuItemId = menuItems[i];\r\n const rego = entityRegos.find(r => r.menuItemId === menuItemId);\r\n if (!rego) {\r\n return;\r\n }\r\n removeEntity(this.viewer, rego.visual);\r\n this.onUpdate?.Trigger({\r\n type: EVisualUpdateType.Remove,\r\n entityId: rego.entityId,\r\n rego: rego\r\n });\r\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== menuItemId);\r\n if (doUpdate && menuItemId) {\r\n updateEntity(this.viewer, entityId, this);\r\n }\r\n }\r\n }\r\n else if (relation) {\r\n const relationKey = RelationRenderEngine.GetRenderGroupId(relation);\r\n for (const entityId in this.rego) {\r\n const entityRegos = this.rego[entityId];\r\n if (entityRegos) {\r\n const rego = entityRegos.find(r => r.relation && RelationRenderEngine.GetRenderGroupId(r.relation) == relationKey);\r\n if (!rego) {\r\n continue;\r\n }\r\n removeEntity(this.viewer, rego.visual);\r\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== menuItemId);\r\n this.onUpdate?.Trigger({\r\n type: EVisualUpdateType.Remove,\r\n entityId: rego.entityId,\r\n rego: rego\r\n });\r\n if (doUpdate && menuItemId) {\r\n updateEntity(this.viewer, entityId, this);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Returns an array of drilled visuals associated with this register.\r\n * The top array item is the first found.\r\n * @param cursor\r\n * @returns\r\n */\r\n public GetRegosFromCursor(params: {\r\n cursor: Cartes.ICartes2,\r\n // Pixel width/height. Default is 5x5 pixels.\r\n width?: number,\r\n height?: number\r\n }): {\r\n regos: IVisualRego[]\r\n } {\r\n const { cursor } = params;\r\n const found: IVisualRego[] = [];\r\n\r\n const width = Math.ceil(EnsureNumber(params.width, 5));\r\n const height = Math.ceil(EnsureNumber(params.height, 5));\r\n const x = Math.ceil(cursor.x - width / 2);\r\n const y = Math.ceil(cursor.y - height / 2);\r\n\r\n const picked = this.viewer.scene.drillPick(new Cesium.Cartesian2(x, y), 5, width, height);\r\n for (let i = 0; i < picked.length; i++) {\r\n const object = picked[i];\r\n const entity = <Visual>(object && object.id && object.id instanceof Cesium.Entity ? object.id : object);\r\n const visual = <IVisualExt>entity;\r\n if (visual?._register?.Id == this.id) {\r\n found.push(<IVisualRego>visual._rego);\r\n }\r\n }\r\n return {\r\n regos: found\r\n };\r\n }\r\n\r\n /**\r\n * Returns all registered entity ids.\r\n */\r\n public GetEntityIds(): string[] {\r\n const ids: string[] = [];\r\n for (const entityId in this.rego) {\r\n const regos = this.rego[entityId];\r\n if (regos && regos.length) {\r\n ids.push(entityId);\r\n }\r\n }\r\n return ids;\r\n }\r\n\r\n /**\r\n * Marks regos corresponding to given entity ids as stale.\r\n * This will cause them to be updated on the next update cycle.\r\n * Optionally include menu item ids to restrict the filter.\r\n * @param params\r\n */\r\n public MarkStale(params: {\r\n entityIds: string[],\r\n menuItemIds?: string[]\r\n }) {\r\n const { entityIds, menuItemIds } = params;\r\n for (const entityId of entityIds) {\r\n const regos = this.rego[entityId];\r\n if (regos && regos.length) {\r\n for (const rego of regos) {\r\n if (!menuItemIds || menuItemIds.includes(rego.menuItemId)) {\r\n rego.stale = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private updateAllEntities() {\r\n for (const entityId in this.rego) {\r\n const regos = this.rego[entityId];\r\n if (regos && regos.length) {\r\n updateEntity(this.viewer, entityId, this);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets opacity for given set of entities.\r\n * 100% opacity is treated as \"use original\".\r\n * @param params\r\n */\r\n public SetOpacity(params: {\r\n opacity: number,\r\n entityIds: string[],\r\n menuItemId?: string\r\n }) {\r\n const { entityIds, menuItemId: menuItemIds } = params;\r\n for (const entityId of entityIds) {\r\n const regos = this.rego[entityId];\r\n if (regos && regos.length) {\r\n for (const rego of regos) {\r\n if (\r\n rego.visual &&\r\n (!menuItemIds || menuItemIds.includes(rego.menuItemId))\r\n ) {\r\n if (params.opacity == 1) {\r\n EntityUtils.RevertOpacity({\r\n entity: rego.visual,\r\n viewer: this.viewer\r\n });\r\n }\r\n else {\r\n EntityUtils.SetOpacity({\r\n entity: rego.visual,\r\n opacity: params.opacity,\r\n viewer: this.viewer\r\n });\r\n }\r\n this.opacity[rego.entityId] = params.opacity;\r\n this.onUpdate?.Trigger({\r\n rego: rego,\r\n type: EVisualUpdateType.Update,\r\n entityId: rego.entityId,\r\n opacity: params.opacity\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Returns opacity for given entity/s.\r\n * If multiple entities are supplied, then the average is returned.\r\n * Unknown opacity is treated as 100% opacity.\r\n * @param params\r\n * @returns\r\n */\r\n public GetOpacity(params: {\r\n entityIds: string[],\r\n menuItemIds?: string\r\n }) {\r\n let totalOpacity = null;\r\n let totalTicks = 0;\r\n const { entityIds, menuItemIds } = params;\r\n for (const entityId of entityIds) {\r\n const regos = this.rego[entityId];\r\n if (regos && regos.length) {\r\n for (const rego of regos) {\r\n if (\r\n rego.visual &&\r\n (!menuItemIds || menuItemIds.includes(rego.menuItemId))\r\n ) {\r\n const opacity = this.opacity[rego.entityId];\r\n if (opacity != null) {\r\n totalOpacity += opacity;\r\n totalTicks += 1;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return totalOpacity ? totalOpacity / totalTicks : 1;\r\n }\r\n\r\n public ClearOpacity() {\r\n for (const entityId in this.opacity) {\r\n const regos = this.rego[entityId];\r\n if (regos && regos.length) {\r\n for (const rego of regos) {\r\n if (rego?.visual) {\r\n EntityUtils.RevertOpacity({\r\n entity: rego.visual,\r\n viewer: this.viewer\r\n });\r\n }\r\n }\r\n }\r\n }\r\n this.opacity = {};\r\n }\r\n\r\n /**\r\n * Returns a dictionary containing entityId -> opacity values.\r\n * Opacity 1 = 100%.\r\n * @returns\r\n */\r\n public GetOpacityMap(): IDictionary<number> {\r\n return this.opacity ? JSON.parse(JSON.stringify(this.opacity)) : {};\r\n }\r\n }\r\n}","import { BatchedDataGetter, BruceApi, Entity, IDictionary, MenuItem } from \"bruce-models\";\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(params: {\r\n viewer: Cesium.Viewer, \r\n register: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n monitor: CesiumViewMonitor,\r\n item: MenuItem.Item.IEntityIds\r\n }) {\r\n const { viewer, apiGetter, monitor, item, register: visualsManager } = params;\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.monitor = monitor;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public 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.RemoveRegos({\r\n menuItemId: this.item.id\r\n });\r\n }\r\n\r\n public async ReRender(entityIds?: string[]) {\r\n if (entityIds == null) {\r\n entityIds = Object.keys(this.renderedEntities);\r\n }\r\n else {\r\n // ensure entity ids are part of menu item.\r\n entityIds = entityIds.filter(x => {\r\n return this.item.BruceEntity?.EntityIds.includes(x);\r\n })\r\n }\r\n this.visualsManager.MarkStale({\r\n entityIds: entityIds, \r\n menuItemIds: [this.item.id]\r\n });\r\n this.onGetterUpdate(entityIds);\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({\r\n api, \r\n entityIds\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({\r\n entityId: id, \r\n menuItemId: this.item.id\r\n })?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.AddRego({\r\n rego: {\r\n entityId: id,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0,\r\n entityTypeId: entity.Bruce[\"EntityType.ID\"],\r\n accountId: this.apiGetter.accountId\r\n }\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.RemoveRegos({\r\n entityId: id, \r\n menuItemId: this.item.id\r\n });\r\n }\r\n }\r\n }\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(params: {\r\n viewer: Cesium.Viewer, \r\n register: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n monitor: CesiumViewMonitor, \r\n item: MenuItem.Item.IBruceEntity\r\n }) {\r\n const { viewer, apiGetter, monitor, item, register: visualsManager } = params;\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.monitor = monitor;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public 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.RemoveRegos({\r\n menuItemId: this.item.id\r\n });\r\n }\r\n\r\n public async ReRender(entityIds?: string[]) {\r\n if (entityIds && !entityIds.includes(this.item.BruceEntity.EntityId)) {\r\n return;\r\n }\r\n this.visualsManager.MarkStale({\r\n entityIds: entityIds, \r\n menuItemIds: [this.item.id]\r\n });\r\n await this.onGetterUpdate(this.item.BruceEntity.EntityId);\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({\r\n api, \r\n entityId: id\r\n });\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({\r\n entityId: id, \r\n menuItemId: this.item.id\r\n })?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.AddRego({\r\n rego: {\r\n entityId: <string>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 accountId: this.apiGetter.accountId\r\n }\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.RemoveRegos({\r\n entityId: id, \r\n menuItemId: this.item.id\r\n });\r\n }\r\n }\r\n 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, 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?.scene) {\r\n return false;\r\n }\r\n if (viewer.isDestroyed()) {\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 IPositionParams {\r\n ucs?: {\r\n location?: Carto.ICarto;\r\n transform?: Transform.ITransform;\r\n },\r\n location?: Carto.ICarto;\r\n transform?: Transform.ITransform;\r\n isLegacy?: boolean;\r\n legacyProps?: {\r\n usingBoundingBox?: boolean;\r\n transform?: boolean;\r\n rotate?: boolean;\r\n }\r\n }\r\n\r\n export interface ISettingsParams {\r\n maxScreenSpaceError?: number;\r\n attenuation?: boolean;\r\n maximumAttenuation?: number;\r\n colorMask?: string;\r\n }\r\n\r\n export interface ITilesetExt extends Cesium.Cesium3DTileset {\r\n _bruceCoords?: IPositionParams;\r\n _bruceSettings?: ISettingsParams;\r\n }\r\n\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(params: {\r\n cTileset: Cesium.Cesium3DTileset\r\n position: IPositionParams\r\n }): void {\r\n const cTileset = params.cTileset;\r\n const root = cTileset.root;\r\n const position = params.position;\r\n const location = position.ucs?.location ? position.ucs.location : position.location;\r\n let transform = position.transform;\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 /**\r\n * Very cursed.\r\n */\r\n if (position.isLegacy) {\r\n const legacy = position.legacyProps;\r\n if (legacy.usingBoundingBox == null) {\r\n legacy.usingBoundingBox = true;\r\n }\r\n if (legacy.transform) {\r\n const offsetPoint = (pos: Cesium.Cartographic, distance: number, bearing: number): Cesium.Cartographic => {\r\n // radius of earth\r\n let radius: number = 6371e3;\r\n let δ = distance / radius;\r\n let θ = Cesium.Math.toRadians(bearing);\r\n let φ1 = Cesium.Math.toRadians(pos.latitude);\r\n let λ1 = Cesium.Math.toRadians(pos.longitude);\r\n let sinφ2 = Math.sin(φ1) * Math.cos(δ) + Math.cos(φ1) * Math.sin(δ) * Math.cos(θ);\r\n let φ2 = Math.asin(sinφ2);\r\n let y = Math.sin(θ) * Math.sin(δ) * Math.cos(φ1);\r\n let x = Math.cos(δ) - Math.sin(φ1) * sinφ2;\r\n let λ2 = λ1 + Math.atan2(y, x);\r\n let finalPos: Cesium.Cartographic = new Cesium.Cartographic(λ2, φ2, pos.height);\r\n finalPos.latitude = Cesium.Math.toDegrees(finalPos.latitude);\r\n finalPos.longitude = Cesium.Math.toDegrees(finalPos.longitude);\r\n return finalPos;\r\n }\r\n\r\n const getOffset = (pos: Cesium.Cartesian3, n: number, e: number, alt: number): Cesium.Cartesian3 => {\r\n if (n == 0 && e == 0 && alt == 0) {\r\n return new Cesium.Cartesian3(0, 0, 0);\r\n }\r\n let carto: Cesium.Cartographic = Cesium.Cartographic.fromCartesian(pos);\r\n carto.latitude = Cesium.Math.toDegrees(carto.latitude);\r\n carto.longitude = Cesium.Math.toDegrees(carto.longitude);\r\n // North\r\n if (n != 0) {\r\n carto = offsetPoint(carto, Number(n), 0);\r\n }\r\n // East\r\n if (e != 0) {\r\n carto = offsetPoint(carto, Number(e), 90);\r\n }\r\n // Altitude\r\n carto.height += Number(alt);\r\n let finalOffset: Cesium.Cartesian3 = Cesium.Cartesian3.fromDegrees(carto.longitude, carto.latitude, carto.height);\r\n finalOffset.x -= pos.x;\r\n finalOffset.y -= pos.y;\r\n finalOffset.z -= pos.z;\r\n return finalOffset;\r\n }\r\n\r\n const getCurPos3d = () => {\r\n if (legacy.usingBoundingBox == false) {\r\n return Cesium.Matrix4.getTranslation(root.transform, new Cesium.Cartesian3());\r\n }\r\n else {\r\n return Cesium.Cartesian3.clone(root.boundingSphere.center);\r\n }\r\n };\r\n\r\n let pos3d: Cesium.Cartesian3;\r\n if (location.latitude != null && location.longitude != null) {\r\n pos3d = Cesium.Cartesian3.fromDegrees(\r\n EnsureNumber(location.longitude),\r\n EnsureNumber(location.latitude),\r\n EnsureNumber(location.altitude)\r\n );\r\n }\r\n if (!pos3d) {\r\n pos3d = getCurPos3d();\r\n }\r\n const offset = getOffset(pos3d, transform.x, transform.y, transform.z);\r\n if (Cartes.ValidateCartes3(offset)) {\r\n pos3d.x += offset.x;\r\n pos3d.y += offset.y;\r\n pos3d.z += offset.z;\r\n }\r\n\r\n if (legacy.rotate) {\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 root.transform = Cesium.Transforms.headingPitchRollToFixedFrame(pos3d, hpr);\r\n (<any>root).updateTransform();\r\n }\r\n\r\n const curPos3d = getCurPos3d();\r\n const newTransform = Cesium.Matrix4.pack(root.transform.clone(new Cesium.Matrix4()), []);\r\n newTransform[12] += pos3d.x - curPos3d.x;\r\n newTransform[13] += pos3d.y - curPos3d.y;\r\n newTransform[14] += pos3d.z - curPos3d.z;\r\n root.transform = Cesium.Matrix4.unpack(newTransform);\r\n (<any>root).updateTransform();\r\n }\r\n }\r\n else {\r\n if (!location?.latitude) {\r\n return;\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 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 // Store data in the tileset as we can't interpret it using the cesium primitive later.\r\n const cTilesetExt = cTileset as ITilesetExt;\r\n cTilesetExt._bruceCoords = {\r\n ...position\r\n };\r\n }\r\n\r\n export function ApplySettings(params: {\r\n cTileset: Cesium.Cesium3DTileset,\r\n settings: ISettingsParams\r\n }): void {\r\n const { cTileset, settings } = params;\r\n cTileset.maximumScreenSpaceError = EnsureNumber(settings.maxScreenSpaceError, 5);\r\n cTileset.pointCloudShading.attenuation = Boolean(settings.attenuation);\r\n cTileset.pointCloudShading.maximumAttenuation = EnsureNumber(settings.maximumAttenuation, 4);\r\n if (settings.colorMask) {\r\n cTileset.style = new Cesium.Cesium3DTileStyle({\r\n color: settings.colorMask\r\n });\r\n }\r\n\r\n const cTilesetExt = cTileset as ITilesetExt;\r\n cTilesetExt._bruceSettings = {\r\n ...settings\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 const loadUrl = params.tileset.loadUrl;\r\n\r\n if (params.tileset.type == Tileset.EType.Cad) {\r\n const cTileset = new Cesium.Cesium3DTileset({\r\n url: loadUrl ? loadUrl : Tileset.GetPublicFileUrl({\r\n api,\r\n tilesetId: params.tileset.id,\r\n file: \"tileset.json\"\r\n }) + \"?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 const settings = params.tileset.settings as Tileset.Settings.ICad;\r\n ApplySettings({\r\n cTileset,\r\n settings: {\r\n maxScreenSpaceError: settings.maximumScreenSpaceError\r\n }\r\n });\r\n ApplyPosition({\r\n cTileset,\r\n position: {\r\n ucs: params.coords?.ucs,\r\n location: params.coords?.location == null ? settings.location : params.coords.location,\r\n transform: params.coords?.transform == null ? settings.transform : params.coords.transform\r\n }\r\n });\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: loadUrl ? loadUrl : Tileset.GetPublicFileUrl({\r\n api,\r\n tilesetId: params.tileset.id,\r\n file: \"tileset.json\"\r\n }) + \"?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: loadUrl ? loadUrl : Tileset.GetPublicFileUrl({\r\n api,\r\n tilesetId: params.tileset.id,\r\n file: \"tileset.json\"\r\n }) + \"?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 const settings = params.tileset.settings as Tileset.Settings.IPointcloud;\r\n ApplySettings({\r\n cTileset,\r\n settings: {\r\n attenuation: settings.attenuation,\r\n maximumAttenuation: settings.attenuationMax,\r\n maxScreenSpaceError: settings.maximumScreenSpaceError\r\n }\r\n });\r\n ApplyPosition({\r\n cTileset,\r\n position: {\r\n location: settings.location,\r\n transform: settings.transform\r\n }\r\n });\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 async function RenderLegacy(params: {\r\n apiGetter: BruceApi.IGetter,\r\n viewer: Cesium.Viewer,\r\n ionId?: string | number,\r\n tileset?: any,\r\n loadUrl?: string\r\n }) {\r\n let { apiGetter, viewer, tileset, ionId, loadUrl } = params;\r\n\r\n let settings = tileset?.Settings;\r\n settings = {\r\n ...settings\r\n };\r\n let visual = settings.visual;\r\n visual = {\r\n ...visual\r\n };\r\n let etc = settings.etc;\r\n etc = {\r\n ...etc\r\n };\r\n\r\n if (ionId) {\r\n // TODO: Can cause issues with menu-item dispose race conditions.\r\n loadUrl = (await Cesium.IonResource.fromAssetId(EnsureNumber(ionId))) as any;\r\n }\r\n else if (etc?.ExternalTilesetURL) {\r\n loadUrl = etc.ExternalTilesetURL;\r\n }\r\n if (!loadUrl && tileset) {\r\n const api = apiGetter.getApi(apiGetter.accountId);\r\n loadUrl = api.GetBaseUrl() + `ui.tileset/${tileset.ID}/file/tileset.json`;\r\n }\r\n\r\n const cTileset = new Cesium.Cesium3DTileset({\r\n url: loadUrl\r\n });\r\n viewer.scene.primitives.add(cTileset);\r\n\r\n cTileset.readyPromise.then(() => {\r\n try {\r\n if (!isAlive(viewer, cTileset)) {\r\n return;\r\n }\r\n if (tileset) {\r\n let settings = tileset.Settings;\r\n settings = {\r\n ...settings\r\n };\r\n let origin = settings.origin;\r\n origin = {\r\n ...origin\r\n };\r\n let etc = settings.etc;\r\n etc = {\r\n ...etc\r\n };\r\n let positionOffset = settings.positionOffset;\r\n positionOffset = {\r\n ...positionOffset\r\n };\r\n const rotation = settings.rotation;\r\n\r\n ApplySettings({\r\n cTileset,\r\n settings: {\r\n attenuation: visual.attenuation != false,\r\n colorMask: visual.colorMask,\r\n maximumAttenuation: visual.attenuationMax,\r\n maxScreenSpaceError: visual.maximumScreenSpaceError\r\n }\r\n });\r\n\r\n ApplyPosition({\r\n cTileset: cTileset,\r\n position: {\r\n transform: rotation ? {\r\n heading: rotation.z,\r\n pitch: rotation.x,\r\n roll: rotation.y,\r\n scale: 1,\r\n z: EnsureNumber(positionOffset?.altitude),\r\n x: EnsureNumber(positionOffset?.latitude),\r\n y: EnsureNumber(positionOffset?.longitude)\r\n } : null,\r\n location: origin?.latitude ? {\r\n latitude: origin.latitude,\r\n longitude: origin.longitude,\r\n altitude: origin.altitude\r\n } : null,\r\n isLegacy: true,\r\n legacyProps: {\r\n rotate: etc.dontRotate != true,\r\n transform: etc.dontTransform != true,\r\n usingBoundingBox: etc.usingBoundingBox != false\r\n }\r\n }\r\n });\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n });\r\n return cTileset;\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({\r\n api: this.api,\r\n entityIds\r\n });\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 {style: data} = await Style.Get({\r\n api: this.api,\r\n styleId: fallbackStyleId\r\n });\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.error(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({\r\n api: this.api,\r\n entityTypeId: styleMap.EntityTypeID\r\n });\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 {style: data} = await Style.Get({\r\n api: this.api,\r\n styleId\r\n });\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 } 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\nimport { EnsureNumber } from \"../../../internal/js-utils\";\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 public get Tileset(): Cesium.Cesium3DTileset {\r\n return this.cTileset;\r\n }\r\n private styler: TilesetRenderEngine.CadStyler = <any>null;\r\n \r\n constructor(params: {\r\n viewer: Cesium.Viewer, \r\n register: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n item: MenuItem.Item.ICadTileset\r\n }) {\r\n const { viewer, register: visualsManager, apiGetter, item } = params;\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({\r\n api, \r\n tilesetId\r\n });\r\n if (!tileset) {\r\n return;\r\n }\r\n\r\n const settings = <Tileset.Settings.ICad>tileset.settings;\r\n const rootId = settings.rootEntityId;\r\n const {coords} = await EntityCoords.GetEntityCoords({\r\n api, \r\n rootEntityId: rootId\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: 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\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.StyleBlending) {\r\n let blending = this.item.StyleBlending;\r\n this.cTileset.colorBlendMode = EnsureNumber(blending?.blendMode, Cesium.Cesium3DTileColorBlendMode.MIX);\r\n this.cTileset.colorBlendAmount = EnsureNumber(blending?.blendPercent, 0.9); \r\n }\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 && this.styler) {\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 accountId: this.item.tileset?.ClientAccountID ?? this.apiGetter.accountId\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\r\n if (!rego.entityId) {\r\n return null;\r\n }\r\n // Optional menu item restriction.\r\n // Allows only showing certain entities from a tileset.\r\n const onlyIds = this.item.BruceEntity?.EntityIds;\r\n if (onlyIds?.length && !onlyIds.includes(rego.entityId)) {\r\n if (this.item.BruceEntity.Ghosts) {\r\n feature.color = Cesium.Color.WHITE.clone().withAlpha(0.5);\r\n }\r\n else {\r\n feature.show = false;\r\n }\r\n return null;\r\n }\r\n\r\n this.visualsManager.AddRego({\r\n rego\r\n });\r\n return rego;\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.RemoveRegos({\r\n menuItemId: this.item.id\r\n });\r\n }\r\n\r\n public async ReRender(entityIds?: string[]) {\r\n if (!this.styler) {\r\n return;\r\n }\r\n let regos: VisualsRegister.IVisualRego[] = this.visualsManager.GetRegos({\r\n menuItemId: this.item.id\r\n });\r\n if (entityIds != null) {\r\n regos = regos.filter(r => entityIds.indexOf(r.entityId) >= 0);\r\n }\r\n this.styler.QueueEntities(regos);\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 // This could potentially crash, but if it crashes here then it would crash during API request anyways.\r\n cacheKey += JSON.stringify(params.attrFilter ? 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: IDictionary<string>;\r\n monitor: CesiumViewMonitor;\r\n }\r\n\r\n export class Cache {\r\n private data: IDictionary<EntityFilterGetter.Getter> = {};\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 public get Tileset(): Cesium.Cesium3DTileset {\r\n return this.cTileset;\r\n }\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(params: {\r\n viewer: Cesium.Viewer, \r\n register: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n monitor: CesiumViewMonitor, \r\n item: MenuItem.Item.IOsm\r\n }) {\r\n const { viewer, register: visualsManager, apiGetter, monitor, item } = params;\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.RemoveRegos({\r\n menuItemId: this.item.id\r\n });\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 {idMapping: bIds} = await EntitySource.GetEntityIdsBySourceKeys({\r\n api, \r\n sourceId: this.sourceId, \r\n sourceKeys: featureIds\r\n });\r\n\r\n for (let i = 0; i < featureIds.length; i++) {\r\n const osmId = featureIds[i];\r\n let bruceId = bIds[osmId];\r\n if (!bruceId) {\r\n bruceId = 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: bruceId,\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 sourceEntityId: osmId,\r\n accountId: this.apiGetter.accountId\r\n } as VisualsRegister.IVisualRego;\r\n this.visualsManager.AddRego({\r\n rego\r\n });\r\n this._loadedCesiumEntities[bruceId] = 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.RemoveRegos({\r\n entityId: rego.entityId, \r\n menuItemId: this.item.id\r\n });\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 public async ReRender(entityIds?: string[]) {\r\n if (entityIds == null) {\r\n\r\n }\r\n else {\r\n\r\n }\r\n }\r\n }\r\n}","import { BruceApi, MenuItem, Tileset } 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 public get Tileset(): Cesium.Cesium3DTileset {\r\n return this.cTileset;\r\n }\r\n private typeId: string;\r\n \r\n constructor(params: {\r\n viewer: Cesium.Viewer, \r\n register: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n item: MenuItem.Item.ICadTileset\r\n }) {\r\n const { viewer, register: visualsManager, apiGetter, item } = params;\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({\r\n api, \r\n tilesetId\r\n });\r\n if (!tileset) {\r\n return;\r\n }\r\n this.typeId = (tileset.settings as Tileset.Settings.IEntities).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.RemoveRegos({\r\n menuItemId: this.item.id\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 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 tilesetId: this.item.tileset?.TilesetID,\r\n accountId: this.item.tileset?.ClientAccountID ?? this.apiGetter.accountId\r\n };\r\n this.visualsManager.AddRego({\r\n rego\r\n });\r\n }\r\n }\r\n\r\n public async ReRender(entityIds?: string[]) {\r\n if (entityIds == null) {\r\n\r\n }\r\n else {\r\n\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 public get Tileset(): Cesium.Cesium3DTileset {\r\n return this.cTileset;\r\n }\r\n \r\n constructor(params: {\r\n viewer: Cesium.Viewer, \r\n apiGetter: BruceApi.IGetter, \r\n item: MenuItem.Item.IPointcloud\r\n }) {\r\n const { viewer, apiGetter, item } = params;\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({\r\n api, \r\n tilesetId\r\n });\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 public async ReRender(entityIds?: string[]) {\r\n if (entityIds == null) {\r\n\r\n }\r\n else {\r\n\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 dataSources: Cesium.KmlDataSource[] = [];\r\n\r\n constructor(params: {\r\n viewer: Cesium.Viewer,\r\n apiGetter: BruceApi.IGetter,\r\n item: MenuItem.Item.IKml\r\n }) {\r\n const { viewer, apiGetter, item } = params;\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 let files = this.item.KML;\r\n if (!files) {\r\n return;\r\n }\r\n if (!Array.isArray(files)) {\r\n files = [files];\r\n }\r\n for (let i = 0; i < files.length; i++) {\r\n const file = files[i];\r\n const fileId = file?.ClientFile?.ID;\r\n if (!fileId) {\r\n continue;\r\n }\r\n const api = this.apiGetter.getApi();\r\n const fileUrl = ClientFile.GetUrl({\r\n api,\r\n fileId\r\n });\r\n const source = new Cesium.KmlDataSource();\r\n source.load(fileUrl);\r\n this.viewer.dataSources.add(source);\r\n this.dataSources.push(source);\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.viewer?.isDestroyed()) {\r\n for (let i = 0; i < this.dataSources.length; i++) {\r\n const source = this.dataSources[i];\r\n if (\r\n source &&\r\n this.viewer.dataSources.contains(source)\r\n ) {\r\n this.viewer.dataSources.remove(source);\r\n }\r\n }\r\n }\r\n this.dataSources = [];\r\n }\r\n\r\n public async ReRender(entityIds?: string[]) {\r\n if (entityIds == null) {\r\n\r\n }\r\n else {\r\n\r\n }\r\n }\r\n }\r\n}","import { RenderManager } from \"../render-manager\";\r\nimport * as Cesium from \"cesium\";\r\nimport { BruceApi, MenuItem, Tileset } from \"bruce-models\";\r\nimport { TilesetRenderEngine } from \"../../tileset-render-engine\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\n\r\nasync function getLegacyTileset(params: {\r\n apiGetter: BruceApi.IGetter,\r\n menuItem: MenuItem.Item.IArbTileset,\r\n tileset: Tileset.ITileset\r\n}): Promise<any> {\r\n const { apiGetter, menuItem, tileset } = params;\r\n try {\r\n const api = apiGetter.getApi(menuItem.tileset.ClientAccountID);\r\n const legacyTileset = await api.GET(`ui.tileset/${tileset.id}`);\r\n return legacyTileset;\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n}\r\n\r\nasync function getTileset(params: {\r\n apiGetter: BruceApi.IGetter,\r\n menuItem: MenuItem.Item.IArbTileset\r\n}): Promise<{\r\n tileset: Tileset.ITileset,\r\n type: Tileset.EType\r\n}> {\r\n const { apiGetter, menuItem } = params;\r\n try {\r\n const api = apiGetter.getApi(menuItem.tileset.ClientAccountID);\r\n const { tileset } = await Tileset.Get({\r\n api,\r\n tilesetId: menuItem.tileset.TilesetID\r\n });\r\n const {typeMapping} = await Tileset.GetTypes({\r\n api,\r\n tilesetIds: [menuItem.tileset.TilesetID]\r\n });\r\n return {\r\n tileset,\r\n type: typeMapping[menuItem.tileset.TilesetID]\r\n };\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n}\r\n\r\nexport namespace TilesetArbRenderManager {\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.IArbTileset;\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 = null;\r\n public get Tileset(): Cesium.Cesium3DTileset {\r\n return this.cTileset;\r\n }\r\n private styler: TilesetRenderEngine.CadStyler = null;\r\n\r\n\r\n public constructor(params: {\r\n viewer: Cesium.Viewer,\r\n item: MenuItem.Item.IArbTileset,\r\n apiGetter: BruceApi.IGetter,\r\n register: VisualsRegister.Register\r\n }) {\r\n this.viewer = params.viewer;\r\n this.apiGetter = params.apiGetter;\r\n this.visualsManager = params.register;\r\n // We modify the object due to a lot of backwards compatibility.\r\n try {\r\n this.item = params.item ? JSON.parse(JSON.stringify(params.item)) : {};\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n public async Init(): Promise<void> {\r\n // Horrid backwards compatibility.\r\n let loadUrlOverride = null;\r\n if (this.item.tileset) {\r\n const itemUrl = this.item.tileset?.TilesetURL;\r\n if (itemUrl && itemUrl.includes(\"cc3d.api\")) {\r\n this.item.tileset.ClientAccountID = \"cc3d\";\r\n }\r\n else if (this.item.IonResource?.AssetID) {\r\n this.item.tileset.ClientAccountID = \"cc3d\";\r\n }\r\n\r\n // Try fix a legacy record.\r\n // Eg: https://my3dcity.api.nextspace-uat-us.net/ui.tileset/0838d707-38af-4592-a2d4-5028997cab85/file/tileset.json\r\n if (!this.item.tileset.TilesetID && this.item.tileset.TilesetURL) {\r\n loadUrlOverride = this.item.tileset.TilesetURL;\r\n const url = this.item.tileset.TilesetURL;\r\n const urlParts = url.split(\"/\");\r\n if (urlParts.length > 5) {\r\n const tilesetId = urlParts[urlParts.length - 3];\r\n const accountId = urlParts[urlParts.length - 5].split(\".\")[0];\r\n this.item.tileset.TilesetID = tilesetId;\r\n this.item.tileset.ClientAccountID = accountId;\r\n }\r\n }\r\n }\r\n const tilesetId = this.item.tileset?.TilesetID;\r\n\r\n const {tileset, type} = tilesetId ? await getTileset({\r\n apiGetter: this.apiGetter,\r\n menuItem: this.item\r\n }) : null;\r\n\r\n if (tileset && loadUrlOverride) {\r\n tileset.loadUrl = loadUrlOverride;\r\n }\r\n\r\n const LEGACY_TYPES = [\r\n Tileset.EType.LegacyEntitiesSet,\r\n Tileset.EType.LegacyExternal,\r\n Tileset.EType.LegacyStatic\r\n ];\r\n if (!type || LEGACY_TYPES.includes(type)) {\r\n // Legacy type. We re-request using ui.tileset endpoint.\r\n const legacyTileset = tileset ? await getLegacyTileset({\r\n apiGetter: this.apiGetter,\r\n menuItem: this.item as MenuItem.Item.IArbTileset,\r\n tileset\r\n }) : null;\r\n this.cTileset = await TilesetRenderEngine.RenderLegacy({\r\n apiGetter: this.apiGetter,\r\n tileset: legacyTileset,\r\n viewer: this.viewer,\r\n ionId: this.item.IonResource?.AssetID,\r\n loadUrl: loadUrlOverride\r\n });\r\n }\r\n else if (tileset) {\r\n 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 }\r\n\r\n this.cTileset.readyPromise.then(() => {\r\n try {\r\n if (this.item.ApplyStyles) {\r\n const api = this.apiGetter.getApi();\r\n this.styler = new TilesetRenderEngine.CadStyler(\r\n api,\r\n this.cTileset,\r\n <number>this.item.styleId,\r\n <any[]>this.item.StyleMapping\r\n );\r\n }\r\n this.onCTilesetLoad();\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n });\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\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 this.styler?.Dispose();\r\n this.visualsManager.RemoveRegos({\r\n menuItemId: this.item.id\r\n });\r\n }\r\n\r\n public async ReRender(entityIds?: string[]): Promise<void> {\r\n if (!this.styler) {\r\n return;\r\n }\r\n let regos: VisualsRegister.IVisualRego[] = this.visualsManager.GetRegos({\r\n menuItemId: this.item.id\r\n });\r\n if (entityIds != null) {\r\n regos = regos.filter(r => entityIds.indexOf(r.entityId) >= 0);\r\n }\r\n this.styler.QueueEntities(regos);\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 let rego = this.mapTilesetFeature(feature);\r\n if (rego?.entityId && this.styler) {\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 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 accountId: this.item.tileset?.ClientAccountID ?? this.apiGetter.accountId\r\n };\r\n\r\n // Two different methods for two different Cesium versions...\r\n const props = (feature as any).getPropertyNames ? (feature as any).getPropertyNames([]) :\r\n (feature as any).getPropertyIds ? (feature as any).getPropertyIds() : [];\r\n\r\n if (props.find(x => x == \"BrucePath\")) {\r\n const path = feature.getProperty(\"BrucePath\")?.split(\"|\");\r\n if (path?.length) {\r\n rego.entityId = path[path.length - 1];\r\n }\r\n }\r\n if (!rego.entityId) {\r\n const ACCEPTABLE_PROPS = [\r\n \"Building_ID\", \"BuildingID\", \"BruceId\"\r\n ];\r\n for (let acceptableId of ACCEPTABLE_PROPS) {\r\n if (props.indexOf(acceptableId) > -1) {\r\n rego.entityId = feature.getProperty(acceptableId);\r\n if (rego.entityId) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n if (!rego.entityId) {\r\n return null;\r\n }\r\n this.visualsManager.AddRego({\r\n rego\r\n });\r\n return rego;\r\n }\r\n }\r\n}","import { BruceApi, EntityRelation, MenuItem, ObjectUtils } from \"bruce-models\";\r\nimport { RenderManager } from \"../render-manager\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport * as Cesium from \"cesium\";\r\nimport { RelationRenderEngine } from \"../../relation-render-engine\";\r\n\r\nexport namespace RelationsRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private disposed = false;\r\n public get Disposed() {\r\n return this.disposed;\r\n };\r\n private apiGetter: BruceApi.IGetter;\r\n private item: MenuItem.Item.IEntityRelations;\r\n private register: VisualsRegister.Register;\r\n private viewer: Cesium.Viewer;\r\n\r\n\r\n public constructor(params: {\r\n apiGetter: BruceApi.IGetter,\r\n item: MenuItem.Item.IEntityRelations,\r\n register: VisualsRegister.Register,\r\n viewer: Cesium.Viewer\r\n }) {\r\n const { apiGetter, item, register, viewer } = params;\r\n this.apiGetter = apiGetter;\r\n this.item = item;\r\n this.register = register;\r\n this.viewer = viewer;\r\n }\r\n\r\n public async Init(): Promise<void> {\r\n const drawn: string[] = [];\r\n const api = this.apiGetter.getApi(this.apiGetter.accountId);\r\n\r\n const BATCH_SIZE = 5;\r\n let drawBatch = [];\r\n for (let i = 0; i < this.item.BruceEntity.EntityIds.length; i++) {\r\n const entityId = this.item.BruceEntity.EntityIds[i];\r\n const {relations} = await EntityRelation.GetList({\r\n api,\r\n entityId,\r\n filter: {\r\n oneWayOnly: false,\r\n loadEntityData: false\r\n }\r\n });\r\n for (let j = 0; j < relations.length; j++) {\r\n const relation = relations[j];\r\n if (this.item.relationTypeIds?.length && !this.item.relationTypeIds.includes(relation[\"Relation.Type.ID\"])) {\r\n continue;\r\n }\r\n const key = RelationRenderEngine.GetRenderGroupId(relation);\r\n if (!drawn.find(x => x == key)) {\r\n drawn.push(key);\r\n drawBatch.push(relation);\r\n if (drawBatch.length >= BATCH_SIZE) {\r\n this.onGetterUpdate(drawBatch);\r\n drawBatch = [];\r\n }\r\n }\r\n }\r\n }\r\n if (drawBatch?.length) {\r\n this.onGetterUpdate(drawBatch);\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 this.register.RemoveRegos({\r\n menuItemId: this.item.id\r\n });\r\n }\r\n\r\n public async ReRender(entityIds?: string[]): Promise<void> {\r\n if (entityIds == null) {\r\n\r\n }\r\n else {\r\n\r\n }\r\n }\r\n\r\n private async onGetterUpdate(relations: EntityRelation.IRelation[]): Promise<void> {\r\n try {\r\n if (this.disposed || this.viewer.isDestroyed()) {\r\n return;\r\n }\r\n const cEntities = await RelationRenderEngine.Render({\r\n apiGetter: this.apiGetter,\r\n menuItemId: this.item.id,\r\n relations: relations,\r\n viewer: this.viewer,\r\n visualRegister: this.register\r\n });\r\n for (let i = 0; i < relations.length; i++) {\r\n const relation = relations[i];\r\n const key = RelationRenderEngine.GetRenderGroupId(relation);\r\n const cEntity = cEntities[key];\r\n if (cEntity) {\r\n const visual = this.register.GetRego({\r\n entityId: key, \r\n menuItemId: this.item.id\r\n })?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.register.AddRego({\r\n rego: {\r\n entityId: relation[\"Data.Entity.ID\"] ?? ObjectUtils.UId(),\r\n menuItemId: this.item.id,\r\n relation: relation,\r\n visual: cEntity,\r\n priority: 0,\r\n accountId: this.apiGetter.accountId\r\n }\r\n });\r\n }\r\n }\r\n else {\r\n this.register.RemoveRegos({\r\n entityId: relation[\"Data.Entity.ID\"],\r\n relation: relation,\r\n menuItemId: this.item.id\r\n });\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\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\nimport { TilesetArbRenderManager } from \"./render-managers/tilesets/tileset-arb-render-manager\";\r\nimport { RelationsRenderManager } from \"./render-managers/other/relations-render-manager\";\r\n\r\ninterface IRenderedItem {\r\n id: string;\r\n type: MenuItem.EType;\r\n childIds: string[];\r\n item: MenuItem.IItem;\r\n renderManager: RenderManager.IManager;\r\n}\r\n\r\n/**\r\n * Utility to keep track of enabled menu items within a Cesium viewer.\r\n */\r\nexport namespace MenuItemManager {\r\n export interface IMenuItemUpdate {\r\n itemId: string;\r\n isEnabling: boolean;\r\n }\r\n\r\n export class Manager {\r\n private viewer: Cesium.Viewer;\r\n public get Viewer(): Cesium.Viewer {\r\n return this.viewer;\r\n }\r\n private items: IRenderedItem[] = [];\r\n private visualsRegister: VisualsRegister.Register;\r\n public get VisualsRegister(): VisualsRegister.Register {\r\n return this.visualsRegister;\r\n }\r\n private onUpdate: BruceEvent<IMenuItemUpdate> = <any>null;\r\n public get OnUpdate(): BruceEvent<IMenuItemUpdate> {\r\n if (!this.onUpdate) {\r\n this.onUpdate = new BruceEvent<IMenuItemUpdate>();\r\n }\r\n return this.onUpdate;\r\n }\r\n private sharedGetters: SharedGetters.Cache;\r\n private sharedMonitor: CesiumViewMonitor;\r\n\r\n\r\n public constructor(params: {\r\n viewer: Cesium.Viewer,\r\n visualsRegister?: VisualsRegister.Register\r\n }) {\r\n let { viewer, visualsRegister } = params;\r\n this.viewer = viewer;\r\n if (!visualsRegister) {\r\n visualsRegister = new VisualsRegister.Register(viewer);\r\n }\r\n this.visualsRegister = visualsRegister;\r\n this.sharedGetters = new SharedGetters.Cache();\r\n this.sharedMonitor = new CesiumViewMonitor(this.viewer);\r\n }\r\n\r\n /**\r\n * Renders a given menu item and all its children.\r\n * Will return the enabled item id.\r\n * @param params\r\n * @returns\r\n */\r\n public async RenderItem(params: {\r\n apiGetter: BruceApi.IGetter;\r\n item: MenuItem.IItem;\r\n // Default = true.\r\n recursive?: boolean\r\n }): 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 viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n monitor: this.sharedMonitor,\r\n item: <MenuItem.Item.IBruceEntities>params.item,\r\n sharedGetters: this.sharedGetters\r\n });\r\n break;\r\n case MenuItem.EType.EntitiesLoaded:\r\n rItem.renderManager = new EntitiesLoadedRenderManager.Manager({\r\n viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n monitor: this.sharedMonitor,\r\n item: <MenuItem.Item.IEntitiesLoaded>params.item\r\n });\r\n break;\r\n case MenuItem.EType.EntitiesIds:\r\n rItem.renderManager = new EntitiesIdsRenderManager.Manager({\r\n viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n monitor: this.sharedMonitor,\r\n item: <MenuItem.Item.IEntityIds>params.item\r\n });\r\n break;\r\n case MenuItem.EType.Entity:\r\n rItem.renderManager = new EntityRenderManager.Manager({\r\n viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n monitor: this.sharedMonitor,\r\n item: <MenuItem.Item.IBruceEntity>params.item\r\n });\r\n break;\r\n case MenuItem.EType.CadTileset:\r\n rItem.renderManager = new TilesetCadRenderManager.Manager({\r\n viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n item: <MenuItem.Item.ICadTileset>params.item\r\n });\r\n break;\r\n case MenuItem.EType.Osm:\r\n rItem.renderManager = new TilesetOsmRenderManager.Manager({\r\n viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n monitor: this.sharedMonitor,\r\n item: <MenuItem.Item.IOsm>params.item\r\n });\r\n break;\r\n case MenuItem.EType.PointCloud:\r\n rItem.renderManager = new TilesetPointcloudRenderManager.Manager({\r\n viewer: this.viewer,\r\n apiGetter: params.apiGetter,\r\n item: <MenuItem.Item.IPointcloud>params.item\r\n });\r\n break;\r\n case MenuItem.EType.EntityTileset:\r\n rItem.renderManager = new TilesetEntitiesRenderManager.Manager({\r\n viewer: this.viewer,\r\n register: this.visualsRegister,\r\n apiGetter: params.apiGetter,\r\n item: <MenuItem.Item.IEntitiesTileset>params.item\r\n });\r\n break;\r\n case MenuItem.EType.Kml:\r\n rItem.renderManager = new DataSourceStaticKmlManager.Manager({\r\n viewer: this.viewer,\r\n apiGetter: params.apiGetter,\r\n item: <MenuItem.Item.IKml>params.item\r\n });\r\n break;\r\n case MenuItem.EType.IonTileset:\r\n case MenuItem.EType.ArbTileset:\r\n rItem.renderManager = new TilesetArbRenderManager.Manager({\r\n apiGetter: params.apiGetter,\r\n item: <MenuItem.Item.IArbTileset>params.item,\r\n viewer: this.viewer,\r\n register: this.visualsRegister\r\n });\r\n break;\r\n case MenuItem.EType.Relations:\r\n rItem.renderManager = new RelationsRenderManager.Manager({\r\n apiGetter: params.apiGetter,\r\n item: params.item as any,\r\n register: this.visualsRegister,\r\n viewer: this.viewer\r\n });\r\n break;\r\n // 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 // We no longer support folder items being both a folder and an action.\r\n // Now an item must have no action to be a folder.\r\n const isFolder = !params.item.Type || params.item.Type == MenuItem.EType.None;\r\n if (params.item.Children && params.recursive != false && isFolder) {\r\n for (let i = 0; i < params.item.Children.length; i++) {\r\n const childId = 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 its 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(params: {\r\n menuItemId: string,\r\n // Default = true.\r\n recursive?: boolean\r\n }): Promise<void> {\r\n let { menuItemId: id, recursive } = params;\r\n if (this.viewer.isDestroyed()) {\r\n return;\r\n }\r\n if (recursive == null) {\r\n recursive = true;\r\n }\r\n const item = this.items.find(x => x.id === id);\r\n if (item) {\r\n if (recursive) {\r\n for (let i = 0; i < item.childIds.length; i++) {\r\n const child = this.items.find(x => x.id === item.childIds[i]);\r\n if (child) {\r\n await this.RemoveItemById({\r\n menuItemId: child.id\r\n });\r\n }\r\n }\r\n }\r\n try {\r\n item.renderManager?.Dispose();\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n this.items = this.items.filter(x => x.id !== id);\r\n this.onUpdate?.Trigger({ isEnabling: false, itemId: item.id });\r\n }\r\n }\r\n\r\n public GetEnabledItemIds(): string[] {\r\n return this.items.map(x => x.id);\r\n }\r\n\r\n public GetEnabledItem(id: string): IRenderedItem {\r\n return this.items.find(x => x.id === id);\r\n }\r\n\r\n /**\r\n * Rerenders given entities.\r\n * If no menu items are specified then the rerender is called on all enabled menu items.\r\n * It is highly recommended to supply menu item ids.\r\n * @param params\r\n */\r\n public async ReRender(params: {\r\n entityIds: string[],\r\n menuItemIds?: string[]\r\n }) {\r\n const { entityIds, menuItemIds } = params;\r\n if (!entityIds?.length) {\r\n return;\r\n }\r\n const items = menuItemIds?.length ? this.items.filter(x => menuItemIds.includes(x.id)) : this.items;\r\n for (let i = 0; i < items.length; i++) {\r\n const item = items[i];\r\n if (item.renderManager) {\r\n await item.renderManager.ReRender(entityIds);\r\n }\r\n }\r\n }\r\n }\r\n}","import { BruceApi, Entity, IDictionary, MenuItem, ObjectUtils, ProjectView, ProjectViewBookmark, Tileset, ZoomControl } from \"bruce-models\";\r\nimport { MenuItemManager } from \"./menu-item-manager\";\r\n\r\n/**\r\n * Utility to help generate menu items for rendering various data.\r\n */\r\nexport namespace MenuItemCreator {\r\n export interface IParams {\r\n apiGetter: BruceApi.IGetter;\r\n manager: MenuItemManager.Manager;\r\n }\r\n\r\n export async function RenderEntities(params: {\r\n entityIds: string[]\r\n } & IParams): Promise<{\r\n menuItemIds: string[],\r\n menuItems: MenuItem.IItem[]\r\n }> {\r\n const {entityIds} = params;\r\n const item: MenuItem.Item.IEntityIds = {\r\n Caption: \"Rendering Loaded Entities\",\r\n Type: <MenuItem.EType><any>MenuItem.EType.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 const renderedId = await params.manager.RenderItem({\r\n apiGetter: params.apiGetter,\r\n item: item\r\n });\r\n return {\r\n menuItemIds: [renderedId],\r\n menuItems: [item]\r\n }\r\n }\r\n\r\n export async function RenderEntityTypes(params: {\r\n entityTypeIds: string[]\r\n } & IParams): Promise<{\r\n menuItemIds: string[],\r\n menuItems: MenuItem.IItem[]\r\n }> {\r\n const {entityTypeIds: typeIds} = params;\r\n const renderedItemIds: string[] = [];\r\n const menuItems = [];\r\n for (let i = 0; i < typeIds.length; i++) {\r\n const typeId = typeIds[i];\r\n const menuItem = MenuItem.CreateFromTypeId(typeId, 0);\r\n menuItems.push(menuItem);\r\n const itemId = await params.manager.RenderItem({\r\n apiGetter: params.apiGetter,\r\n item: menuItem\r\n });\r\n renderedItemIds.push(itemId);\r\n }\r\n return {\r\n menuItemIds: renderedItemIds,\r\n menuItems: menuItems\r\n };\r\n }\r\n\r\n export async function RenderEntityFilter(params: {\r\n attrFilter: IDictionary<string>\r\n } & IParams): Promise<{\r\n menuItemIds: string[],\r\n menuItems: MenuItem.IItem[]\r\n }> {\r\n const {attrFilter: filter} = params;\r\n const item: MenuItem.Item.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 const renderedIds = await params.manager.RenderItem({\r\n apiGetter: params.apiGetter,\r\n item: item\r\n });\r\n return {\r\n menuItemIds: [renderedIds],\r\n menuItems: [item]\r\n };\r\n }\r\n\r\n export async function RenderMenuItems(params: { \r\n menuItems: MenuItem.IItem[]\r\n } & IParams): Promise<{\r\n menuItemIds: string[]\r\n }> {\r\n const {menuItems} = params;\r\n const renderedItemIds: string[] = [];\r\n for (let i = 0; i < menuItems.length; i++) {\r\n const menuItem = menuItems[i];\r\n const itemId = await params.manager.RenderItem({\r\n apiGetter: params.apiGetter,\r\n item: menuItem\r\n });\r\n renderedItemIds.push(itemId);\r\n }\r\n return {\r\n menuItemIds: renderedItemIds\r\n };\r\n }\r\n\r\n export async function RenderTileset(params: {\r\n tilesetId?: string\r\n tileset?: Tileset.ITileset\r\n } & IParams): Promise<{\r\n menuItemIds: string[],\r\n menuItems: MenuItem.IItem[]\r\n }> {\r\n const {tilesetId} = params;\r\n const api = params.apiGetter.getApi();\r\n let tileset = params.tileset ? params.tileset : (await Tileset.Get({\r\n api, \r\n tilesetId\r\n })).tileset;\r\n 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 const renderedIds = await params.manager.RenderItem({\r\n item: menuItem,\r\n apiGetter: params.apiGetter\r\n });\r\n return {\r\n menuItems: [menuItem],\r\n menuItemIds: [renderedIds]\r\n }\r\n }\r\n else {\r\n throw(new Error(\"Tileset type not supported.\"));\r\n }\r\n }\r\n\r\n export async function RenderBookmarkItems(params: {\r\n viewId?: string, \r\n view?: ProjectView.View\r\n bookmarkId?: string,\r\n bookmark?: ProjectViewBookmark.Bookmark\r\n } & IParams): Promise<{\r\n menuItemIds: string[],\r\n menuItems: MenuItem.IItem[]\r\n }> {\r\n const {viewId, bookmarkId} = params;\r\n const api = params.apiGetter.getApi();\r\n const view = params.view ? params.view : (await ProjectView.Get({\r\n api, \r\n viewId\r\n })).view;\r\n const bookmark = params.bookmark ? params.bookmark : (await ProjectViewBookmark.Get({\r\n api, \r\n viewId, \r\n bookmarkId\r\n })).bookmark;\r\n\r\n if (view.DataVersion != bookmark.DataVersion) {\r\n throw new Error(\"View and bookmark settings version mismatch.\");\r\n }\r\n\r\n let enabledIds: string[] = [];\r\n let menuItems: MenuItem.IItem[] = [];\r\n \r\n const version = view.DataVersion;\r\n if (view.Settings && bookmark.Settings) {\r\n if (version === 2) {\r\n const vSettings = view.Settings as ProjectView.Navigator.ISettings;\r\n const bSettings = bookmark.Settings as ProjectViewBookmark.Navigator.ISettings;\r\n menuItems = vSettings.menuItems;\r\n enabledIds = bSettings.menuItemIds;\r\n }\r\n else {\r\n const vSettings = view.Settings as ProjectView.LegacyNavigator.ISettings;\r\n const bSettings = bookmark.Settings as ProjectViewBookmark.LegacyNavigator.ISettings;\r\n menuItems = vSettings.LayersMenu;\r\n enabledIds = bSettings.selectedItemIds;\r\n }\r\n }\r\n \r\n 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 {\r\n menuItemIds: renderedItemIds,\r\n menuItems: menuItems\r\n };\r\n }\r\n\r\n export async function RenderRelations(params: {\r\n entityIds: string[],\r\n relationTypeIds?: string[],\r\n forwardOnly?: boolean\r\n } & IParams) {\r\n\r\n }\r\n}","import { ProjectViewTile, BruceApi, ProjectView, ProjectViewBookmark, ProjectViewLegacyTile, Tileset, ProgramKey } from \"bruce-models\";\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 {programKey: pKey} = await ProgramKey.Get({\r\n api: apiGetter.getApi(), \r\n programId: keyId\r\n });\r\n key = pKey.Key;\r\n }\r\n catch (e) {\r\n let doLog = true;\r\n if (e && typeof e === \"object\") {\r\n if (e.Code == \"NotFound\") {\r\n doLog = false;\r\n }\r\n }\r\n if (doLog) {\r\n console.error(e);\r\n }\r\n }\r\n return key && key.length ? key : defaultKey;\r\n}\r\n\r\n/**\r\n * Constructs an imagery provider for a default imagery type.\r\n * Warning: This does not add it to the viewer.\r\n * @param apiGetter\r\n * @param id \r\n * @returns \r\n */\r\nasync function renderDefaultMapTile(apiGetter: BruceApi.IGetter, id: ProjectViewTile.EDefaultImagery): Promise<Cesium.ImageryProvider> {\r\n let provider: Cesium.ImageryProvider;\r\n switch (id) {\r\n case ProjectViewTile.EDefaultImagery.BingMapsAerial:\r\n provider = new Cesium.BingMapsImageryProvider({\r\n url: \"https://dev.virtualearth.net\",\r\n mapStyle: Cesium.BingMapsStyle.AERIAL,\r\n key: await findKey(apiGetter, ProgramKey.EProgramId.BingMaps, DEFAULT_BING_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.BingMapsAerialWithLabels:\r\n provider = new Cesium.BingMapsImageryProvider({\r\n url: \"https://dev.virtualearth.net\",\r\n mapStyle: Cesium.BingMapsStyle.AERIAL_WITH_LABELS,\r\n key: await findKey(apiGetter, ProgramKey.EProgramId.BingMaps, DEFAULT_BING_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.BingMapsRoads:\r\n provider = new Cesium.BingMapsImageryProvider({\r\n url: \"https://dev.virtualearth.net\",\r\n mapStyle: Cesium.BingMapsStyle.ROAD_ON_DEMAND,\r\n key: await findKey(apiGetter, ProgramKey.EProgramId.BingMaps, DEFAULT_BING_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.MapboxSatellite:\r\n provider = new Cesium.MapboxImageryProvider({\r\n mapId: \"mapbox.satellite\",\r\n accessToken: await findKey(apiGetter, ProgramKey.EProgramId.Mapbox, DEFAULT_MAPBOX_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.MapBoxStreets:\r\n provider = new Cesium.MapboxStyleImageryProvider({\r\n styleId: \"satellite-streets-v11\",\r\n accessToken: await findKey(apiGetter, ProgramKey.EProgramId.Mapbox, DEFAULT_MAPBOX_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.MapBoxStreetsClassic:\r\n provider = new Cesium.MapboxStyleImageryProvider({\r\n styleId: \"streets-v11\",\r\n accessToken: await findKey(apiGetter, ProgramKey.EProgramId.Mapbox, DEFAULT_MAPBOX_KEY)\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.EsriWorldImagery:\r\n provider = new Cesium.ArcGisMapServerImageryProvider({\r\n url:\"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer\",\r\n enablePickFeatures: false\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.EsriWorldStreetMap:\r\n provider = new Cesium.ArcGisMapServerImageryProvider({\r\n url:\"https://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer\",\r\n enablePickFeatures: false\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.EsriNationalGeographic:\r\n provider = new Cesium.ArcGisMapServerImageryProvider({\r\n url:\"https://services.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/\",\r\n enablePickFeatures: false\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.OpenStreetMap:\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: \"https://a.tile.openstreetmap.org/\"\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.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 LegacyNavigator {\r\n export interface ILayerExt extends Cesium.ImageryLayer {\r\n _bId?: string;\r\n _bName?: string;\r\n }\r\n \r\n export interface IViewParams {\r\n bookmarkId: string;\r\n viewId: string;\r\n apiGetter: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n \r\n // TODO: How is render engine supposed to know about this?\r\n // We need a generic way for this information be feed from clients.\r\n ignoreIds?: string[];\r\n }\r\n \r\n export interface IParams {\r\n data: ProjectViewLegacyTile.IMapSource;\r\n apiGetter: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n }\r\n \r\n export async function Render(params: IParams): Promise<ILayerExt> {\r\n 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({\r\n api, \r\n viewId: params.viewId\r\n })).view as ProjectView.LegacyNavigator.IView;\r\n\r\n let bookmark: ProjectViewBookmark.LegacyNavigator.IBookmark = <any>null;\r\n if (params.bookmarkId) {\r\n bookmark = (await ProjectViewBookmark.Get({\r\n api, \r\n viewId: params.viewId, \r\n bookmarkId: params.bookmarkId\r\n })).bookmark as ProjectViewBookmark.LegacyNavigator.IBookmark;\r\n }\r\n \r\n const vSettings = view.Settings;\r\n const bSettings = bookmark?.Settings;\r\n \r\n const data: ProjectViewLegacyTile.IMapSource[] = [];\r\n const dataNames: string[] = [];\r\n if (bSettings?.imagery) {\r\n for (let i = 0; i < bSettings.imagery.length; i++) {\r\n const source = bSettings.imagery[i];\r\n dataNames.push(source.title);\r\n }\r\n }\r\n else if (vSettings?.DefaultMapTiles) {\r\n dataNames.push(vSettings.DefaultMapTiles);\r\n }\r\n const tiles = vSettings?.CesiumMapSources ?? [];\r\n await ProjectViewLegacyTile.MergeMapTemplateData({\r\n getter: params.apiGetter, \r\n sources: tiles, \r\n addIfMissing: vSettings?.CesiumMapSources == null\r\n });\r\n \r\n for (let i = 0; i < dataNames.length; i++) {\r\n const name = dataNames[i];\r\n for (let j = 0; j < tiles.length; j++) {\r\n const tile = tiles[j];\r\n if (CompareLegacyNames(tile.Name, name)) {\r\n data.push(tile);\r\n break;\r\n }\r\n } \r\n }\r\n \r\n let enabled: ILayerExt[] = gatherEnabledImageries(params.viewer);\r\n const layers: Cesium.ImageryLayer[] = [];\r\n \r\n // Gather layers we want to render.\r\n // Any new layer is added to viewer at the bottom.\r\n if (params.ignoreIds) {\r\n for (let i = 0; i < params.ignoreIds.length; i++) {\r\n const id = params.ignoreIds[i];\r\n const layer = enabled.find((x) => {\r\n const layer = x as ILayerExt;\r\n if (layer._bId === id) {\r\n return true;\r\n }\r\n });\r\n if (layer) {\r\n layers.push(layer);\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < data.length; i++) {\r\n const tile = data[i];\r\n const layer = await Render({\r\n apiGetter: params.apiGetter,\r\n viewer: params.viewer,\r\n data: tile,\r\n });\r\n if (layer) {\r\n layers.push(layer);\r\n }\r\n }\r\n \r\n // Sort currently enabled (after new ones added) to match desired order.\r\n enabled = gatherEnabledImageries(params.viewer);\r\n enabled.sort((a, b) => {\r\n const indexA = layers.indexOf(a);\r\n const indexB = layers.indexOf(b);\r\n if (indexA < 0 && indexB < 0) {\r\n return 0;\r\n }\r\n if (indexA < 0) {\r\n return 1;\r\n }\r\n if (indexB < 0) {\r\n return -1;\r\n }\r\n return indexA - indexB;\r\n });\r\n \r\n // Move enabled layers to match desired order.\r\n // Remove any layers that aren't in enabled list.\r\n for (let i = 0; i < enabled.length; i++) {\r\n const layer = enabled[i];\r\n if (layers.includes(layer)) {\r\n params.viewer.imageryLayers.raiseToTop(layer);\r\n }\r\n else {\r\n params.viewer.imageryLayers.remove(layer);\r\n }\r\n }\r\n }\r\n }\r\n\r\n export namespace Navigator {\r\n export interface IProviderExt extends Cesium.ImageryLayer {\r\n _bMeta?: ProjectViewTile.ITileMeta;\r\n }\r\n\r\n export interface IParams {\r\n apiGetter: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n tiles: ProjectViewTile.IBookmarkImagery[];\r\n }\r\n\r\n export async function GetOrCreateLayer(\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({\r\n api, \r\n tilesetId: meta.tilesetId\r\n });\r\n if (tileset.type === Tileset.EType.GeoMap) {\r\n provider = new Cesium.TileMapServiceImageryProvider({\r\n url: Tileset.GetPublicFileUrl({\r\n api, \r\n tilesetId: meta.tilesetId, \r\n file: \"\"\r\n }),\r\n fileExtension: \"png\"\r\n });\r\n }\r\n else if (tileset.type === Tileset.EType.ExternalGeoMap) {\r\n const settings = tileset.settings as Tileset.Settings.IExternalMap;\r\n switch (settings.mapType) {\r\n case Tileset.Settings.EExternalMapType.CesiumIon:\r\n 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 Tileset.Settings.EExternalMapType.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 Tileset.Settings.EExternalMapType.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 Tileset.Settings.EExternalMapType.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({\r\n api, \r\n tilesetId: meta.tilesetId, \r\n file: \"{z}/{x}/{y}.png\"\r\n }),\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 LegacyNavigator {\r\n export interface IProviderExt extends Cesium.CesiumTerrainProvider {\r\n _bId: string;\r\n _bName: string;\r\n }\r\n\r\n export interface IParams {\r\n data: ProjectViewLegacyTile.ITerrainSource;\r\n viewer: Cesium.Viewer;\r\n }\r\n \r\n export interface IViewParams {\r\n bookmarkId: string;\r\n viewId: string;\r\n apiGetter: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export 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({\r\n api, \r\n viewId: params.viewId\r\n })).view as ProjectView.LegacyNavigator.IView;\r\n let bookmark: ProjectViewBookmark.LegacyNavigator.IBookmark = <any>null;\r\n if (params.bookmarkId) {\r\n bookmark = (await ProjectViewBookmark.Get({\r\n api, \r\n viewId: params.viewId, \r\n bookmarkId: params.bookmarkId\r\n })).bookmark as ProjectViewBookmark.LegacyNavigator.IBookmark;\r\n }\r\n \r\n const vSettings = view.Settings;\r\n const bSettings = bookmark?.Settings;\r\n\r\n let terrainTiles = vSettings?.CesiumTerrainSources ?? [];\r\n let terrainTile: ProjectViewLegacyTile.ITerrainSource = <any>null;\r\n let terrainTileName: string = <any>null;\r\n if (bookmark?.Settings?.terrain) {\r\n terrainTileName = bSettings.terrain;\r\n }\r\n else {\r\n terrainTileName = <string>vSettings?.DefaultTerrain;\r\n }\r\n await ProjectViewLegacyTile.MergeTerrainTemplateData({\r\n getter: params.apiGetter, \r\n sources: terrainTiles, \r\n addIfMissing: vSettings?.CesiumTerrainSources == null\r\n });\r\n for (let i = 0; i < terrainTiles.length; i++) {\r\n const tile = terrainTiles[i];\r\n if (TileRenderEngine.CompareLegacyNames(tile.Name, terrainTileName)) {\r\n terrainTile = tile;\r\n break;\r\n }\r\n }\r\n if (terrainTile) {\r\n Render({\r\n data: terrainTile,\r\n viewer: params.viewer,\r\n });\r\n }\r\n }\r\n }\r\n\r\n export namespace Navigator {\r\n export interface IProviderExt extends Cesium.CesiumTerrainProvider {\r\n _bMeta?: ProjectViewTile.ITileMeta;\r\n }\r\n\r\n export interface IParams {\r\n apiGetter: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n tile: ProjectViewTile.IBookmarkTerrain;\r\n }\r\n\r\n export async function Render(params: IParams): Promise<void> {\r\n // 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({\r\n api, \r\n tilesetId: params.tile.tilesetId\r\n });\r\n\r\n let url: string;\r\n let vertexes: boolean = true;\r\n if (tileset.type === Tileset.EType.Terrain) {\r\n url = Tileset.GetPublicFileUrl({\r\n api, \r\n tilesetId: tileset.id, \r\n file: \"\"\r\n });\r\n }\r\n else if (tileset.type === Tileset.EType.ExternalTerrain) {\r\n const settings = tileset.settings as Tileset.Settings.IExternalTerrain;\r\n url = settings.url;\r\n vertexes = settings.requestVertexNormals == null ? true : settings.requestVertexNormals;\r\n }\r\n else {\r\n console.error(\"Invalid tileset type.\", tileset);\r\n }\r\n \r\n if (url) {\r\n provider = new Cesium.CesiumTerrainProvider({\r\n url: url,\r\n requestVertexNormals: vertexes\r\n });\r\n }\r\n }\r\n\r\n if (provider) {\r\n provider._bMeta = {\r\n accountId: params.tile.accountId,\r\n tilesetId: params.tile.tilesetId\r\n };\r\n params.viewer.terrainProvider = provider;\r\n }\r\n }\r\n }\r\n }\r\n}","import { BruceApi, Camera, Carto, MenuItem, ProjectView, ProjectViewBookmark, ProjectViewTile, } from \"bruce-models\";\r\nimport { MenuItemManager } from \"./menu-item-manager\";\r\nimport { MenuItemCreator } from \"./menu-item-creator\";\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 = 2048;\r\nconst MAX_SHADOW_SIZE = 32768;\r\nconst RELATION_MENU_ITEM_ID = \"BOOKMARK_ENTITY_RELATIONS\";\r\n\r\n/**\r\n * Renders DATA_VERSION = 1 navigator.\r\n * @param params \r\n * @param bookmark \r\n * @param view \r\n */\r\nasync function renderLegacyNavigator(\r\n params: ViewRenderEngine.IRenderParams,\r\n bookmark: ProjectViewBookmark.LegacyNavigator.IBookmark,\r\n view: ProjectView.LegacyNavigator.IView\r\n) {\r\n const vSettings = view.Settings as ProjectView.LegacyNavigator.ISettings;\r\n const bSettings = bookmark?.Settings as ProjectViewBookmark.LegacyNavigator.ISettings;\r\n const manager = params.manager;\r\n const VR = manager.VisualsRegister;\r\n const scene = manager.Viewer.scene;\r\n\r\n await TileRenderEngine.Terrain.LegacyNavigator.RenderView({\r\n apiGetter: params.apiGetter,\r\n bookmarkId: <string>params.bookmarkId,\r\n viewer: manager.Viewer,\r\n viewId: params.viewId,\r\n });\r\n\r\n await TileRenderEngine.Map.LegacyNavigator.RenderView({\r\n apiGetter: params.apiGetter,\r\n bookmarkId: <string>params.bookmarkId,\r\n viewer: manager.Viewer,\r\n viewId: params.viewId,\r\n ignoreIds: []\r\n });\r\n\r\n let baseColor = bSettings?.globeColor;\r\n if (baseColor == null) {\r\n // TODO: Need global default.\r\n baseColor = \"#0326BE\";\r\n }\r\n scene.globe.baseColor = Cesium.Color.fromCssColorString(baseColor);\r\n\r\n // TODO: Other scene settings.\r\n // TODO: Rendered relationships.\r\n\r\n VR.ClearHidden();\r\n if (bSettings.hiddenEntityIds?.length) {\r\n VR.SetHidden({\r\n entityIds: bSettings.hiddenEntityIds,\r\n hidden: true\r\n });\r\n }\r\n\r\n let frustum = bSettings?.cameraFrustum;\r\n if (frustum == null) {\r\n frustum = Camera.EFrustum.Perspective;\r\n }\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 if (!params.skipCamera) {\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 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\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 manager.Viewer.scene.globe.depthTestAgainstTerrain = go;\r\n\r\n const fxaa = manager.Viewer.scene.postProcessStages.fxaa;\r\n fxaa.enabled = true;\r\n\r\n let pointer = bSettings?.timelineSettings?.timelinePointer;\r\n if (pointer != null) {\r\n const clock = manager.Viewer.clock;\r\n // Back and forth conversion so we aren't feeding Cesium an object instead of class instance.\r\n // This is pretty blegh.\r\n const timeStr = Cesium.JulianDate.toIso8601(pointer)\r\n clock.currentTime = Cesium.JulianDate.fromIso8601(timeStr);\r\n }\r\n\r\n const enabledItems = manager.GetEnabledItemIds();\r\n const newItemIds = bSettings?.selectedItemIds ?? [];\r\n for (const id of enabledItems) {\r\n if (\r\n newItemIds.indexOf(id) === -1 ||\r\n id == RELATION_MENU_ITEM_ID\r\n ) {\r\n await params.manager.RemoveItemById({\r\n menuItemId: id\r\n });\r\n }\r\n }\r\n\r\n if (params.bookmarkId) {\r\n await MenuItemCreator.RenderBookmarkItems({\r\n apiGetter: params.apiGetter,\r\n manager,\r\n view, \r\n bookmark\r\n });\r\n }\r\n if (bSettings.drawnRelationEntityIDs?.length) {\r\n const menuItem = {\r\n id: RELATION_MENU_ITEM_ID,\r\n Caption: \"Entity relations\",\r\n BruceEntity: {\r\n EntityIds: bSettings.drawnRelationEntityIDs\r\n },\r\n Type: MenuItem.EType.Relations\r\n } as MenuItem.Item.IEntityRelations;\r\n await params.manager.RenderItem({\r\n apiGetter: params.apiGetter,\r\n item: menuItem\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Renders DATA_VERSION > 1 navigator.\r\n * @param params \r\n * @param bookmark \r\n * @param view \r\n */\r\nasync function renderNavigator(\r\n params: ViewRenderEngine.IRenderParams,\r\n bookmark: ProjectViewBookmark.Navigator.IBookmark,\r\n view: ProjectView.Navigator.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.Navigator.ISettings;\r\n const bSettings = (bookmark?.Settings ?? {}) as ProjectViewBookmark.Navigator.ISettings;\r\n const defaults = vSettings.defaults ?? {};\r\n\r\n let camera = (bookmark.Camera ?? {}) as ProjectViewBookmark.Navigator.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 if (!params.skipCamera) {\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\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 hillShades = bookmark?.Settings?.hillShades;\r\n if (hillShades == null) {\r\n hillShades = defaults?.settings?.hillShades;\r\n }\r\n if (hillShades == null) {\r\n hillShades = true;\r\n }\r\n scene.globe.enableLighting = Boolean(hillShades);\r\n\r\n let baseColor = bSettings?.globeColor;\r\n if (baseColor == null) {\r\n baseColor = defaults.settings?.globeColor;\r\n }\r\n if (baseColor == null) {\r\n // TODO: Need global default.\r\n baseColor = \"#0326BE\";\r\n }\r\n scene.globe.baseColor = Cesium.Color.fromCssColorString(baseColor);\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.Navigator.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 viewer.shadowMap.darkness = EnsureNumber(shadows.darkness, 0.5);\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.Navigator.IAmbientOcclusion;\r\n }\r\n const AO = viewer.scene.postProcessStages.ambientOcclusion;\r\n if (ambientOcclusion.enabled) {\r\n AO.enabled = true;\r\n }\r\n else {\r\n AO.enabled = false;\r\n }\r\n if (AO.uniforms) {\r\n AO.uniforms.intensity = EnsureNumber(ambientOcclusion.intensity, 2.0);\r\n AO.uniforms.lengthCap = EnsureNumber(ambientOcclusion.lengthCap, 0.2);\r\n AO.uniforms.bias = EnsureNumber(ambientOcclusion.bias, 0.5);\r\n AO.uniforms.stepSize = EnsureNumber(ambientOcclusion.stepSize, 2.0);\r\n AO.uniforms.blurStepSize = EnsureNumber(ambientOcclusion.blurStepSize, 2.0);\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.Navigator.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.Navigator.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.Navigator.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 params.manager.VisualsRegister.SetSelected({\r\n selected: true,\r\n entityIds: selectedIds, \r\n refreshIfSelected: false\r\n });\r\n }\r\n\r\n params.manager.VisualsRegister.ClearHidden();\r\n let hiddenIds = bSettings?.hiddenEntityIds;\r\n if (hiddenIds == null) {\r\n hiddenIds = defaults?.settings?.hiddenEntityIds;\r\n }\r\n if (hiddenIds != null) {\r\n params.manager.VisualsRegister.SetHidden({\r\n hidden: true,\r\n entityIds: hiddenIds\r\n });\r\n }\r\n\r\n params.manager.VisualsRegister.ClearIsolated();\r\n let isolatedIds = bSettings?.isolatedEntityIds;\r\n if (isolatedIds == null) {\r\n isolatedIds = defaults?.settings?.isolatedEntityIds;\r\n }\r\n if (isolatedIds != null) {\r\n params.manager.VisualsRegister.SetIsolated({\r\n isolated: true,\r\n entityIds: isolatedIds\r\n });\r\n }\r\n\r\n params.manager.VisualsRegister.ClearOpacity();\r\n let entityOpacityMap = bSettings?.entityOpacityMap;\r\n if (entityOpacityMap == null) {\r\n entityOpacityMap = defaults?.settings?.entityOpacityMap;\r\n }\r\n if (entityOpacityMap != null) {\r\n for (const entityId in entityOpacityMap) {\r\n const opacity = EnsureNumber(entityOpacityMap[entityId], 1);\r\n if (opacity != 1) {\r\n params.manager.VisualsRegister.SetOpacity({\r\n entityIds: [entityId],\r\n opacity: opacity\r\n });\r\n }\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.Navigator.Render({\r\n apiGetter: params.apiGetter,\r\n tiles: imagery,\r\n viewer: params.manager.Viewer,\r\n });\r\n\r\n let renderedRelationEntityIds = bSettings.renderedEntityRelations;\r\n if (!renderedRelationEntityIds) {\r\n renderedRelationEntityIds = [];\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 (\r\n newItemIds.indexOf(id) === -1 ||\r\n id == RELATION_MENU_ITEM_ID\r\n ) {\r\n await params.manager.RemoveItemById({\r\n menuItemId: id\r\n });\r\n }\r\n }\r\n if (params.bookmarkId) {\r\n await MenuItemCreator.RenderBookmarkItems({\r\n apiGetter: params.apiGetter,\r\n manager: params.manager,\r\n view: view, \r\n bookmark: bookmark\r\n });\r\n }\r\n if (renderedRelationEntityIds.length > 0) {\r\n const menuItem = {\r\n id: RELATION_MENU_ITEM_ID,\r\n Caption: \"Entity relations\",\r\n BruceEntity: {\r\n EntityIds: renderedRelationEntityIds\r\n },\r\n Type: MenuItem.EType.Relations\r\n } as MenuItem.Item.IEntityRelations;\r\n await params.manager.RenderItem({\r\n apiGetter: params.apiGetter,\r\n item: menuItem\r\n });\r\n }\r\n}\r\n\r\nexport namespace ViewRenderEngine {\r\n export interface IRenderParams {\r\n // Used to request view if view is not provided.\r\n viewId?: string;\r\n // Takes priority over viewId.\r\n view?: ProjectView.View;\r\n // Used to request bookmark if bookmark is not provided.\r\n bookmarkId?: string;\r\n // Takes priority over bookmarkId.\r\n bookmark?: ProjectViewBookmark.Bookmark;\r\n // Moves the camera but without transition time.\r\n // Ignored if skipCamera = true.\r\n skipTransition?: boolean;\r\n // Does not move the camera.\r\n skipCamera?: boolean;\r\n // Getter for the API.\r\n apiGetter: BruceApi.IGetter;\r\n // The viewer to render to.\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 = params.view ? params.view : (await ProjectView.Get({\r\n api, \r\n viewId: params.viewId\r\n })).view;\r\n let bookmark = params.bookmark;\r\n if (!bookmark) {\r\n let bookmarkId = params.bookmarkId;\r\n if (!bookmarkId) {\r\n bookmarkId = view.DefaultUISlideID;\r\n }\r\n bookmark = bookmarkId ? (await ProjectViewBookmark.Get({\r\n api, \r\n viewId: params.viewId, \r\n bookmarkId: bookmarkId\r\n })).bookmark : null;\r\n }\r\n const version = view.DataVersion;\r\n if (version == 1) {\r\n await renderLegacyNavigator(\r\n params, \r\n bookmark as ProjectViewBookmark.LegacyNavigator.IBookmark, \r\n view as ProjectView.LegacyNavigator.IView\r\n );\r\n }\r\n else {\r\n await renderNavigator(\r\n params, \r\n bookmark as ProjectViewBookmark.Navigator.IBookmark, \r\n view as ProjectView.Navigator.IView\r\n );\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(params: {\r\n viewer: Cesium.Viewer\r\n }): {\r\n imagery: ProjectViewBookmark.LegacyNavigator.IBookmarkImagery[]\r\n } {\r\n const viewer = params.viewer;\r\n const collection = viewer.imageryLayers;\r\n const tiles: ProjectViewBookmark.LegacyNavigator.IBookmarkImagery[] = [];\r\n for (let i = 0; i < collection.length; i++) {\r\n const layer = collection.get(i) as TileRenderEngine.Map.LegacyNavigator.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 {\r\n imagery: tiles.reverse()\r\n };\r\n }\r\n\r\n export function GatherLegacyTerrainTile(params: {\r\n viewer: Cesium.Viewer\r\n }): {\r\n terrain: string\r\n } {\r\n const viewer = params.viewer;\r\n const enabled = viewer.terrainProvider as TileRenderEngine.Terrain.LegacyNavigator.IProviderExt;\r\n if (enabled?._bName) {\r\n return {\r\n terrain: enabled._bName\r\n };\r\n }\r\n return {\r\n terrain: \"flatterrain\"\r\n };\r\n }\r\n\r\n export function GatherMapTiles(params: {\r\n viewer: Cesium.Viewer\r\n }): {\r\n imagery: ProjectViewTile.IBookmarkImagery[]\r\n } {\r\n const viewer = params.viewer;\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.Navigator.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 {\r\n imagery: tiles\r\n };\r\n }\r\n\r\n export function GatherTerrainTile(params: {\r\n viewer: Cesium.Viewer\r\n }): {\r\n terrain: ProjectViewTile.IBookmarkTerrain\r\n } {\r\n const viewer = params.viewer;\r\n const provider = viewer.terrainProvider as TileRenderEngine.Terrain.Navigator.IProviderExt;\r\n if (provider._bMeta) {\r\n return {\r\n terrain: {\r\n accountId: provider._bMeta.accountId,\r\n tilesetId: provider._bMeta.tilesetId,\r\n }\r\n };\r\n }\r\n return null;\r\n }\r\n}"],"names":["Cesium.Cartesian2","Cesium.Cartographic","Cesium.Math","Cesium.Cartesian3","Cesium.PolygonPipeline","Cesium.EllipsoidGeodesic","Cesium.EllipsoidTerrainProvider","Cesium.sampleTerrainMostDetailed","Cesium.Color","Cesium.ColorMaterialProperty","Cesium.Entity","Cesium.Cesium3DTileFeature","Cesium.HeightReference","Cesium.Rectangle","Cesium.Matrix3","Cesium.Matrix4","Cesium.EasingFunction","Cesium.GeometryInstance","Cesium.JulianDate","Cesium.Primitive","Cesium.HorizontalOrigin","Cesium.VerticalOrigin","Cesium.ClassificationType","Cesium.ArcType","Cesium.PolygonHierarchy","Cesium.ShadowMode","Cesium.PolylineGraphics","Cesium.HeadingPitchRoll","Cesium.Transforms","Cesium.ColorBlendMode","Entity","Cesium.CallbackProperty","colorToCColor","Cesium.Cesium3DTileStyle","Cesium.Cesium3DTileset","Cesium.IonResource","Cesium.Cesium3DTileColorBlendMode","Cesium.HeadingPitchRange","Cesium.createOsmBuildings","Cesium.KmlDataSource","Cesium.createWorldTerrain","Cesium.CesiumTerrainProvider","Cesium.BingMapsImageryProvider","Cesium.BingMapsStyle","Cesium.MapboxImageryProvider","Cesium.MapboxStyleImageryProvider","Cesium.ArcGisMapServerImageryProvider","Cesium.OpenStreetMapImageryProvider","Cesium.GridImageryProvider","Cesium.GeographicTilingScheme","Cesium.ImageryLayer","Cesium.UrlTemplateImageryProvider","Cesium.TileMapServiceImageryProvider","Cesium.IonImageryProvider","Cesium.OrthographicFrustum"],"mappings":"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"}
|