bruce-cesium 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"bruce-cesium.es5.js","sources":["../src/viewer/cesium-view-monitor.ts","../src/viewer/viewer-utils.ts","../src/utils/drawing-utils.ts","../src/utils/measure-utils.ts","../src/utils/entity-utils.ts","../src/rendering/render-managers/render-manager.ts","../src/rendering/entity-render-engine.ts","../src/rendering/render-managers/entities/entities-render-manager.ts","../src/rendering/render-managers/entities/entities-loaded-render-manager.ts","../src/rendering/visuals-register.ts","../src/rendering/render-managers/entities/entities-ids-render-manager.ts","../src/rendering/render-managers/entities/entity-render-manager.ts","../src/rendering/tileset-render-engine.ts","../src/rendering/render-managers/tilesets/tileset-cad-render-manager.ts","../src/rendering/menu-item-manager.ts","../src/rendering/render-helper.ts","../src/rendering/tile-render-engine.ts","../src/rendering/view-render-engine.ts","../src/rendering/render-addons/measure-addon.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.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 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 }\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 export interface IViewContainer extends HTMLElement {\r\n _cViewer?: Cesium.Viewer;\r\n }\r\n\r\n /**\r\n * Creates a Cesium viewer in a given HTML container and returns it.\r\n * This will kill all widgets in the process.\r\n * @param container \r\n * @returns \r\n */\r\n export function InitViewer(container: HTMLElement): Cesium.Viewer {\r\n if ((<IViewContainer>container)._cViewer) {\r\n throw new Error(\"Container already has a viewer.\");\r\n }\r\n const cViewer = new Cesium.Viewer(container, {\r\n imageryProvider: new Cesium.ArcGisMapServerImageryProvider({\r\n url: \"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer\",\r\n enablePickFeatures: false\r\n })\r\n });\r\n cViewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);\r\n cViewer.camera.percentageChanged = 0.05;\r\n ViewerUtils.DestroyWidget(cViewer.timeline);\r\n ViewerUtils.DestroyWidget(cViewer.vrButton);\r\n ViewerUtils.DestroyWidget(cViewer.sceneModePicker);\r\n ViewerUtils.DestroyWidget(cViewer.homeButton);\r\n ViewerUtils.DestroyWidget(cViewer.fullscreenButton);\r\n ViewerUtils.DestroyWidget(cViewer.baseLayerPicker);\r\n ViewerUtils.StyleContainer(cViewer);\r\n (<IViewContainer>container)._cViewer = cViewer;\r\n return cViewer;\r\n }\r\n\r\n export function GetViewerFromContainer(container: HTMLElement): Cesium.Viewer {\r\n return <any>(<IViewContainer>container)._cViewer;\r\n }\r\n\r\n export function DestroyWidget(widget: IWidget): void {\r\n if (widget && !widget.isDestroyed()) {\r\n widget.destroy();\r\n }\r\n }\r\n\r\n /**\r\n * Hides all unnecessary elements from the Cesium viewer container.\r\n * @param viewer \r\n */\r\n export function StyleContainer(viewer: Cesium.Viewer) {\r\n const container = viewer.container;\r\n const genContainer = container.getElementsByClassName(\"cesium-viewer\")?.[0];\r\n if (genContainer) {\r\n const children = genContainer.children;\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i] as HTMLElement;\r\n if (!child.classList.contains(\"cesium-viewer-cesiumWidgetContainer\")) {\r\n child.style.display = \"none\";\r\n }\r\n }\r\n }\r\n\r\n const canvas = viewer.canvas as HTMLElement;\r\n canvas.style.width = \"100%\";\r\n canvas.style.height = \"100%\";\r\n\r\n const widget = canvas.parentElement as HTMLElement;\r\n widget.style.width = \"100%\";\r\n widget.style.height = \"100%\";\r\n widget.style.touchAction = \"none\";\r\n\r\n const widgetContainer = widget.parentElement as HTMLElement;\r\n widgetContainer.style.width = \"100%\";\r\n widgetContainer.style.height = \"100%\";\r\n\r\n const viewerContainer = widgetContainer.parentElement as HTMLElement;\r\n viewerContainer.style.fontFamily = \"sans-serif\";\r\n viewerContainer.style.fontSize = \"16px\";\r\n viewerContainer.style.overflow = \"hidden\";\r\n viewerContainer.style.display = \"block\";\r\n viewerContainer.style.position = \"relative\";\r\n viewerContainer.style.top = \"0\";\r\n viewerContainer.style.left = \"0\";\r\n viewerContainer.style.width = \"100%\";\r\n viewerContainer.style.height = \"100%\";\r\n }\r\n}","import * as Cesium from \"cesium\";\r\n\r\nexport namespace DrawingUtils {\r\n /**\r\n * Returns the point across a polyline at a given distance.\r\n * If the distance exceeds the length of the line, the point will be placed at the end of the line.\r\n * @param viewer \r\n * @param positions \r\n * @param distance \r\n * @returns \r\n */\r\n export function PointAcrossPolyline(viewer: Cesium.Viewer, positions: Cesium.Cartesian3[], distance: number): Cesium.Cartesian3 {\r\n if (positions.length > 1) {\r\n let currentDistance = 0;\r\n for (let i = 0; i < positions.length - 1; i++) {\r\n const length = Cesium.Cartesian3.distance(positions[i], positions[i + 1]);\r\n if (length + currentDistance >= distance) {\r\n const carto1 = Cesium.Cartographic.fromCartesian(positions[i]);\r\n const carto2 = Cesium.Cartographic.fromCartesian(positions[i + 1]);\r\n const geodesic = new Cesium.EllipsoidGeodesic(carto1, carto2, viewer.scene.globe.ellipsoid);\r\n const position = geodesic.interpolateUsingSurfaceDistance(distance - currentDistance);\r\n const height = (carto1.height + carto2.height) / 2;\r\n return Cesium.Cartesian3.fromRadians(position.longitude, position.latitude, height);\r\n }\r\n else {\r\n currentDistance += length;\r\n }\r\n }\r\n }\r\n else if (positions.length > 0) {\r\n return positions[0];\r\n }\r\n else {\r\n return <any>null;\r\n }\r\n return positions[positions.length - 1];\r\n }\r\n}","import * as Cesium from \"cesium\";\r\n\r\nexport namespace MeasureUtils {\r\n /**\r\n * Returns the total distance in meters between an array of points.\r\n * This distance is NOT following the terrain.\r\n * @param posses \r\n * @returns \r\n */\r\n export function MeasurePolyline(posses: Cesium.Cartesian3[]): number {\r\n if (posses.length < 2) {\r\n return 0;\r\n }\r\n let totalLength = 0;\r\n let pos1 = null;\r\n let pos2 = null;\r\n for (let i = 0; i < posses.length; i++) {\r\n if (pos1 == null) {\r\n pos1 = posses[i];\r\n }\r\n else if (pos2 == null) {\r\n pos2 = posses[i];\r\n totalLength += Cesium.Cartesian3.distance(pos1, pos2);\r\n pos1 = pos2;\r\n pos2 = null;\r\n }\r\n }\r\n return totalLength;\r\n }\r\n}","import { Cartes, Carto, Entity as E, Geometry } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityRenderEngine } from \"../rendering/entity-render-engine\";\r\nimport { DrawingUtils } from \"./drawing-utils\";\r\nimport { MeasureUtils } from \"./measure-utils\";\r\n\r\nfunction traverseEntity(cEntity: EntityRenderEngine.ICesiumEntityExt, arr: EntityRenderEngine.ICesiumEntityExt[]): void {\r\n if (cEntity._parentEntity) {\r\n traverseEntity(cEntity._parentEntity, arr);\r\n }\r\n if (cEntity._siblingGraphics) {\r\n for (let i = 0; i < cEntity._siblingGraphics.length; i++) {\r\n const sibling = cEntity._siblingGraphics[i];\r\n traverseEntity(sibling, arr);\r\n }\r\n }\r\n arr.push(cEntity);\r\n}\r\n\r\nexport namespace EntityUtils {\r\n /**\r\n * Returns an entity's position.\r\n * This will attempt to calculate it from multiple sources of data.\r\n * @param viewer \r\n * @param entity \r\n * @returns \r\n */\r\n export function GetPos(viewer: Cesium.Viewer, entity: E.IEntity): Cesium.Cartesian3 {\r\n if (entity.location && Carto.ValidateCarto(entity.location)) {\r\n const location = entity.location;\r\n return Cesium.Cartesian3.fromDegrees(location.longitude, location.latitude, 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(point.longitude, point.latitude, 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(x.longitude, x.latitude, x.altitude));\r\n const length = MeasureUtils.MeasurePolyline(posses);\r\n if (length > 0) {\r\n const point = DrawingUtils.PointAcrossPolyline(viewer, posses, length / 2);\r\n if (point && Cartes.ValidateCartes3(point)) {\r\n return point;\r\n }\r\n }\r\n else {\r\n return posses[0];\r\n }\r\n }\r\n }\r\n const pRings = entity.geometry.Polygon;\r\n if (pRings && typeof pRings == \"object\") {\r\n const boundary = pRings.find(x => x.Facing == Geometry.EPolygonRingType.Boundaries)\r\n if (boundary?.LinearRing) {\r\n const points = Geometry.ParsePoints(boundary.LinearRing);\r\n const point = Carto.GetCenter(points);\r\n if (point && Carto.ValidateCarto(point)) {\r\n return Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\r\n }\r\n }\r\n }\r\n }\r\n if (entity.boundaries) {\r\n const point: Carto.ICarto = {\r\n latitude: (entity.boundaries.minLatitude + entity.boundaries.maxLatitude) / 2, \r\n longitude: (entity.boundaries.minLongitude + 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 return <any>null;\r\n }\r\n\r\n /**\r\n * Returns entity and any associated parent/sibling entities as a flat array.\r\n * @param entity \r\n */\r\n export function GatherEntity(entity: Cesium.Entity): Cesium.Entity[] {\r\n if (entity instanceof Cesium.Entity) {\r\n const cEntity = entity as EntityRenderEngine.ICesiumEntityExt;\r\n const items: EntityRenderEngine.ICesiumEntityExt[] = [];\r\n traverseEntity(cEntity, items);\r\n return items;\r\n }\r\n return [entity];\r\n }\r\n}","import { EntitiesRenderManager } from \"./entities/entities-render-manager\";\r\nimport { EntitiesLoadedRenderManager } from \"./entities/entities-loaded-render-manager\";\r\nimport { EntitiesIdsRenderManager } from \"./entities/entities-ids-render-manager\";\r\nimport { EntityRenderManager } from \"./entities/entity-render-manager\";\r\nimport { EntityUtils } from \"../../utils/entity-utils\";\r\nimport { Entity, ZoomControl } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { TilesetCadRenderManager } from \"./tilesets/tileset-cad-render-manager\";\r\n\r\nexport namespace RenderManager {\r\n export interface IManager {\r\n Init(): Promise<void>;\r\n Dispose(): void;\r\n }\r\n\r\n export type Type = EntitiesRenderManager.Manager | \r\n EntitiesLoadedRenderManager.Manager | \r\n EntitiesIdsRenderManager.Manager | \r\n EntityRenderManager.Manager |\r\n TilesetCadRenderManager.Manager;\r\n\r\n export namespace Utils {\r\n export function DetermineZoomItem(viewer: Cesium.Viewer, entity: Entity.IEntity, zoomControl: ZoomControl.IItem[]): ZoomControl.IItem {\r\n const pos = EntityUtils.GetPos(viewer, entity);\r\n if (!pos) {\r\n return <any>null;\r\n }\r\n const cameraPos = viewer.camera.position;\r\n const distance = Cesium.Cartesian3.distance(pos, cameraPos);\r\n return GetZoomControlFromDistance(zoomControl, distance);\r\n }\r\n \r\n export function GetZoomControlFromDistance(zoomControl: ZoomControl.IItem[], distance: number): ZoomControl.IItem {\r\n for (let i = 0; i < zoomControl.length; i++) {\r\n let zoomItem = zoomControl[i];\r\n if ((distance >= <number>zoomItem.MinZoom) && (distance <= <number>zoomItem.MaxZoom)) {\r\n return zoomItem;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n }\r\n}","import * as Cesium from \"cesium\";\r\nimport { Entity, BruceApi, ZoomControl, Style, EntityTag, Calculator, Color, Geometry, Carto, EntityLod, EntityType, IDictionary, ClientFile } from \"bruce-models\";\r\nimport { EntityUtils } from \"../utils/entity-utils\";\r\nimport { RenderManager } from \"./render-managers/render-manager\";\r\nimport { VisualsRegister } from \"./visuals-register\";\r\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(x.longitude, x.latitude, 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 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 zIndex;\r\n}\r\n\r\nasync function getStyle(api: BruceApi.Api, entity: Entity.IEntity, styleId: number): Promise<Style.IStyle> {\r\n let style: Style.IStyle = <any>null;\r\n if (styleId) {\r\n style = await Style.Get(api, styleId);\r\n }\r\n if (!style) {\r\n const type = await EntityType.Get(api, entity.Bruce[\"EntityType.ID\"]);\r\n if (type[\"DisplaySetting.ID\"]) {\r\n style = await Style.Get(api, type[\"DisplaySetting.ID\"]);\r\n }\r\n }\r\n return style;\r\n}\r\n\r\nfunction getExistingCEntity(entityId: string, menuItemId: string, item: ZoomControl.IItem, visualRegister: VisualsRegister.Register): EntityRenderEngine.ICesiumEntityExt {\r\n return <any>visualRegister.GetRego(entityId, menuItemId)?.visual;\r\n}\r\n\r\nfunction getRenderGroupId(zoomItem: ZoomControl.IItem): string {\r\n if (!zoomItem) {\r\n return <any>null;\r\n }\r\n return zoomItem.MinZoom + \"-\" + zoomItem.MaxZoom;\r\n}\r\n\r\nexport namespace EntityRenderEngine {\r\n export interface ICesiumEntityExt extends Cesium.Entity {\r\n _siblingGraphics?: Cesium.Entity[];\r\n _parentEntity?: Cesium.Entity;\r\n _renderGroup?: string;\r\n }\r\n\r\n export interface IParams {\r\n apiGetter: BruceApi.IGetter,\r\n viewer: Cesium.Viewer; \r\n visualRegister: VisualsRegister.Register;\r\n menuItemId: string;\r\n zoomControl: ZoomControl.IItem[];\r\n entities: Entity.IEntity[];\r\n }\r\n\r\n export async function Render(params: IParams): Promise<IDictionary<ICesiumEntityExt>> {\r\n const groupRenderParams = {\r\n apiGetter: params.apiGetter,\r\n viewer: params.viewer,\r\n entities: [],\r\n zoomItems: <IDictionary<ZoomControl.IItem>>{},\r\n menuItemId: params.menuItemId,\r\n visualRegister: params.visualRegister\r\n }\r\n\r\n const cEntities: IDictionary<ICesiumEntityExt> = {};\r\n const models: Entity.IEntity[] = [];\r\n const polygons: Entity.IEntity[] = [];\r\n const polylines: Entity.IEntity[] = [];\r\n const points: Entity.IEntity[] = [];\r\n\r\n // Initial sorting.\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n const id = <string>entity.Bruce.ID;\r\n\r\n const zoomItem = RenderManager.Utils.DetermineZoomItem(params.viewer, entity, params.zoomControl);\r\n let displayType = zoomItem?.DisplayType;\r\n if (!displayType) {\r\n displayType = ZoomControl.EDisplayType.Hidden;\r\n }\r\n // Backwards compatibility.\r\n else if (<string>displayType == \"polygon\") {\r\n displayType = ZoomControl.EDisplayType.Geometry;\r\n }\r\n\r\n if (displayType != ZoomControl.EDisplayType.Hidden) {\r\n const newRenderId = getRenderGroupId(zoomItem);\r\n const existing = getExistingCEntity(id, params.menuItemId, zoomItem, params.visualRegister);\r\n const oldRenderId = existing?._renderGroup;\r\n \r\n if (newRenderId == oldRenderId) {\r\n cEntities[id] = existing;\r\n }\r\n else {\r\n if (displayType == ZoomControl.EDisplayType.Model3D) {\r\n models.push(entity);\r\n }\r\n else if (displayType == ZoomControl.EDisplayType.Geometry) {\r\n polygons.push(entity);\r\n }\r\n else {\r\n points.push(entity);\r\n }\r\n groupRenderParams.zoomItems[id] = zoomItem;\r\n }\r\n }\r\n }\r\n\r\n // Keep trying to render things in order of hard-coded priority system.\r\n if (models.length > 0) {\r\n const mParams: Model3d.IGroupParams = {\r\n ...groupRenderParams,\r\n entities: models\r\n };\r\n const mEntities = await Model3d.RenderGroup(mParams);\r\n for (let i = 0; i < mParams.entities.length; i++) {\r\n const entity = mParams.entities[i];\r\n const id = <string>entity.Bruce.ID;\r\n const cEntity = mEntities[id];\r\n if (cEntity) {\r\n cEntities[id] = cEntity;\r\n }\r\n else {\r\n polygons.push(entity);\r\n }\r\n }\r\n }\r\n if (polygons.length > 0) {\r\n const pParams: Polygon.IGroupParams = {\r\n ...groupRenderParams,\r\n entities: polygons\r\n };\r\n const pEntities = await Polygon.RenderGroup(pParams);\r\n for (let i = 0; i < pParams.entities.length; i++) {\r\n const entity = pParams.entities[i];\r\n const cEntity = pEntities[<string>entity.Bruce.ID];\r\n if (cEntity) {\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n else {\r\n polylines.push(entity);\r\n }\r\n }\r\n }\r\n if (polylines.length > 0) {\r\n const pParams: Polyline.IGroupParams = {\r\n ...groupRenderParams,\r\n entities: polylines\r\n };\r\n const pEntities = await Polyline.RenderGroup(pParams);\r\n for (let i = 0; i < pParams.entities.length; i++) {\r\n const entity = pParams.entities[i];\r\n const cEntity = pEntities[<string>entity.Bruce.ID];\r\n if (cEntity) {\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n else {\r\n points.push(entity);\r\n }\r\n }\r\n }\r\n if (points.length > 0) {\r\n const pParams: Point.IGroupParams = {\r\n ...groupRenderParams,\r\n entities: points\r\n };\r\n const pEntities = await Point.RenderGroup(pParams);\r\n for (let i = 0; i < pParams.entities.length; i++) {\r\n const entity = pParams.entities[i];\r\n const cEntity = pEntities[<string>entity.Bruce.ID];\r\n if (cEntity) {\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n }\r\n }\r\n\r\n return cEntities;\r\n }\r\n\r\n export function Remove(viewer: Cesium.Viewer, entity: ICesiumEntityExt): void {\r\n if (entity._parentEntity) {\r\n Remove(viewer, entity._parentEntity);\r\n }\r\n if (entity._siblingGraphics) {\r\n for (let i = 0; i < entity._siblingGraphics.length; i++) {\r\n const sibling = entity._siblingGraphics[i];\r\n Remove(viewer, sibling);\r\n }\r\n }\r\n if (viewer.entities.contains(entity)) {\r\n viewer.entities.remove(entity);\r\n }\r\n }\r\n\r\n export namespace Point {\r\n export interface IParams {\r\n api: BruceApi.Api;\r\n style: Style.IPointSettings;\r\n entity: Entity.IEntity;\r\n tags: EntityTag.ITag[];\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export interface IGroupParams {\r\n apiGetter: BruceApi.IGetter,\r\n menuItemId: string;\r\n entities: Entity.IEntity[];\r\n zoomItems: IDictionary<ZoomControl.IItem>;\r\n visualRegister: VisualsRegister.Register;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export function Render(params: IParams): ICesiumEntityExt {\r\n const entity = params.entity;\r\n const style = params.style;\r\n const type = style.Type;\r\n\r\n let cEntity: Cesium.Entity = <any>null;\r\n if (type == Style.EPointType.Icon) {\r\n const icon = Calculator.GetValue(style.iconUrl, entity, params.tags);\r\n let iconUrl: string = <any>null;\r\n if (typeof icon == \"string\") {\r\n iconUrl = icon;\r\n }\r\n if (!iconUrl && style.iconId) {\r\n iconUrl = ClientFile.GetUrl(params.api, style.iconId);\r\n }\r\n if (iconUrl) {\r\n let iconScale: number = +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 },\r\n position: EntityUtils.GetPos(params.viewer, entity),\r\n show: false\r\n });\r\n }\r\n }\r\n }\r\n if (type == Style.EPointType.Cylinder) {\r\n // TODO: Cylinder.\r\n }\r\n if (!cEntity) {\r\n const bColor: Color.IColor = style.color ? <any>Calculator.GetValue(style.color, entity, params.tags) : null;\r\n const cColor = bColor ? colorToCColor(bColor) : Cesium.Color.RED;\r\n \r\n let size = style.size ? <number>Calculator.GetValue(style.size, entity, params.tags) : null;\r\n if (size == null) {\r\n size = 30;\r\n }\r\n if (size <= 0) {\r\n return <any>null;\r\n }\r\n cEntity = new Cesium.Entity({\r\n point: {\r\n pixelSize: size,\r\n color: cColor,\r\n heightReference: getHeightRef(style)\r\n },\r\n position: EntityUtils.GetPos(params.viewer, entity),\r\n show: false\r\n });\r\n }\r\n if (cEntity) {\r\n params.viewer.entities.add(cEntity);\r\n }\r\n return cEntity;\r\n }\r\n\r\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\r\n const api = params.apiGetter.getApi(params.apiGetter.accountId, params.apiGetter.env);\r\n\r\n const cEntities: IDictionary<ICesiumEntityExt> = {};\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n\r\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\r\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\r\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\r\n let tags: EntityTag.ITag[] = [];\r\n if (tagIds && tagIds.length > 0) {\r\n tags = await EntityTag.GetListByIds(api, tagIds);\r\n }\r\n const pStyle = (style?.Settings as Style.IEntitySettings)?.pointStyle ?? <any>{};\r\n \r\n const cEntity = Render({\r\n entity: entity,\r\n style: pStyle,\r\n tags: tags,\r\n viewer: params.viewer,\r\n api: api\r\n });\r\n cEntity._renderGroup = getRenderGroupId(zoomItem);\r\n\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n \r\n return cEntities;\r\n }\r\n }\r\n\r\n export namespace Polyline {\r\n export interface IParams {\r\n style: Style.IPolylineSettings;\r\n entity: Entity.IEntity;\r\n tags: EntityTag.ITag[];\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export interface IGroupParams {\r\n apiGetter: BruceApi.IGetter,\r\n menuItemId: string;\r\n entities: Entity.IEntity[];\r\n zoomItems: IDictionary<ZoomControl.IItem>;\r\n visualRegister: VisualsRegister.Register;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export function Render(params: IParams): ICesiumEntityExt {\r\n const entity = params.entity;\r\n\r\n const line = entity.geometry?.LineString;\r\n const points: Carto.ICarto[] = line && typeof line == \"string\" ? Geometry.ParsePoints(line) : [];\r\n if (!points || points.length < 2) {\r\n return <any>null;\r\n }\r\n let isValid = true;\r\n for (let i = 0; i < points.length; i++) {\r\n if (!Carto.ValidateCarto(points[i])) {\r\n isValid = false;\r\n break;\r\n }\r\n }\r\n if (!isValid) {\r\n return <any>null;\r\n }\r\n const posses = points.map(x => Cesium.Cartesian3.fromDegrees(x.longitude, x.latitude, x.altitude));\r\n\r\n // Making sure no 0 length lines coming through.\r\n // Ideally we would measure the full line but I fear that's too expensive.\r\n if (posses.length == 2 || posses.length == 3) {\r\n let totalDistance = 0;\r\n for (let i = 0; i < posses.length; i++) {\r\n let pos1 = posses[i];\r\n let pos2 = posses[i + 1];\r\n if (pos1 && pos2) {\r\n totalDistance += Cesium.Cartesian3.distance(pos1, pos2);\r\n }\r\n }\r\n if (totalDistance < 0.001) {\r\n return <any>null;\r\n }\r\n }\r\n\r\n const style = params.style;\r\n const bColor: Color.IColor = style.lineColor ? <any>Calculator.GetValue(style.lineColor, entity, params.tags) : null;\r\n const cColor = bColor ? colorToCColor(bColor) : Cesium.Color.RED;\r\n\r\n let width = style.lineWidth ? <number>Calculator.GetValue(style.lineWidth, entity, params.tags) : null;\r\n if (width == null) {\r\n width = 4;\r\n }\r\n if (width <= 0) {\r\n return <any>null;\r\n }\r\n \r\n const heightRef = getHeightRef(style);\r\n const cEntity: ICesiumEntityExt = new Cesium.Entity({\r\n polyline: {\r\n positions: posses,\r\n material: <Cesium.MaterialProperty><any>cColor,\r\n width: width,\r\n classificationType: Cesium.ClassificationType.TERRAIN,\r\n arcType: Cesium.ArcType.GEODESIC,\r\n zIndex: getZIndex(style, entity, params.tags),\r\n clampToGround: heightRef == Cesium.HeightReference.CLAMP_TO_GROUND\r\n },\r\n position: EntityUtils.GetPos(params.viewer, entity),\r\n show: false\r\n });\r\n\r\n params.viewer.entities.add(cEntity);\r\n return cEntity;\r\n }\r\n\r\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\r\n const api = params.apiGetter.getApi(params.apiGetter.accountId, params.apiGetter.env);\r\n const cEntities: IDictionary<ICesiumEntityExt> = {};\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\r\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\r\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\r\n let tags: EntityTag.ITag[] = [];\r\n if (tagIds && tagIds.length > 0) {\r\n tags = await EntityTag.GetListByIds(api, tagIds);\r\n }\r\n const lStyle = (style?.Settings as Style.IEntitySettings)?.polylineStyle ?? <any>{};\r\n\r\n const cEntity = Render({\r\n entity: entity,\r\n style: lStyle,\r\n tags: tags,\r\n viewer: params.viewer\r\n });\r\n if (cEntity) {\r\n cEntity._renderGroup = getRenderGroupId(zoomItem);\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n }\r\n return cEntities;\r\n }\r\n }\r\n\r\n export namespace Polygon {\r\n export interface IParams {\r\n style: Style.IPolygonSettings;\r\n entity: Entity.IEntity;\r\n tags: EntityTag.ITag[];\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export interface IGroupParams {\r\n apiGetter: BruceApi.IGetter,\r\n menuItemId: string;\r\n entities: Entity.IEntity[];\r\n zoomItems: IDictionary<ZoomControl.IItem>;\r\n visualRegister: VisualsRegister.Register;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export function Render(params: IParams): ICesiumEntityExt {\r\n const entity = params.entity;\r\n const pRings = entity.geometry?.Polygon;\r\n if (pRings == null || pRings.length <= 0) {\r\n return <any>null;\r\n }\r\n const style = params.style;\r\n\r\n const bFillColor = <Color.IColor>Calculator.GetValue(style.fillColor, entity, params.tags);\r\n const cFillColor = bFillColor ? colorToCColor(bFillColor) : Cesium.Color.RED;\r\n\r\n const bLineColor = <Color.IColor>Calculator.GetValue(style.lineColor, entity, params.tags);\r\n const cLineColor = bLineColor ? colorToCColor(bLineColor) : Cesium.Color.RED;\r\n\r\n let width = style.lineWidth ? <number>Calculator.GetValue(style.lineWidth, entity, params.tags) : null;\r\n if (width == null) {\r\n width = 4;\r\n }\r\n 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(x.longitude, x.latitude, 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(x.longitude, x.latitude, x.altitude));\r\n });\r\n\r\n const zIndex = getZIndex(style, entity, params.tags);\r\n\r\n const cEntity: ICesiumEntityExt = new Cesium.Entity({\r\n polygon: {\r\n hierarchy: new Cesium.PolygonHierarchy(posses, holePosses.map(x => new Cesium.PolygonHierarchy(x))),\r\n material: cFillColor,\r\n extrudedHeight: extrusion.value,\r\n extrudedHeightReference: extrusion.exHeightRef,\r\n shadows: Cesium.ShadowMode.ENABLED,\r\n heightReference: heightRef,\r\n classificationType: Cesium.ClassificationType.BOTH,\r\n perPositionHeight: heightRef == Cesium.HeightReference.CLAMP_TO_GROUND ? false : true,\r\n zIndex: zIndex\r\n },\r\n position: EntityUtils.GetPos(params.viewer, entity),\r\n show: false\r\n });\r\n cEntity._siblingGraphics = [];\r\n\r\n for (let i = 0; i < holePosses.length; i++) {\r\n const posses = holePosses[i];\r\n const cEntityHole: ICesiumEntityExt = new Cesium.Entity({\r\n polyline: new Cesium.PolylineGraphics({\r\n positions: posses,\r\n material: <Cesium.MaterialProperty><any>cLineColor,\r\n width: width,\r\n clampToGround: heightRef == Cesium.HeightReference.CLAMP_TO_GROUND,\r\n classificationType: Cesium.ClassificationType.TERRAIN,\r\n arcType: Cesium.ArcType.GEODESIC,\r\n zIndex: zIndex\r\n }),\r\n show: false\r\n });\r\n cEntity._siblingGraphics.push(cEntityHole);\r\n cEntityHole._parentEntity = cEntity;\r\n params.viewer.entities.add(cEntityHole);\r\n }\r\n\r\n params.viewer.entities.add(cEntity);\r\n return cEntity;\r\n }\r\n\r\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\r\n const api = params.apiGetter.getApi(params.apiGetter.accountId, params.apiGetter.env);\r\n const cEntities: IDictionary<ICesiumEntityExt> = {};\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\r\n \r\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\r\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\r\n let tags: EntityTag.ITag[] = [];\r\n if (tagIds && tagIds.length > 0) {\r\n tags = await EntityTag.GetListByIds(api, tagIds);\r\n }\r\n const pStyle = (style?.Settings as Style.IEntitySettings)?.polygonStyle ?? <any>{};\r\n \r\n const cEntity = Render({\r\n entity: entity,\r\n style: pStyle,\r\n tags: tags,\r\n viewer: params.viewer\r\n });\r\n if (cEntity) {\r\n cEntity._renderGroup = getRenderGroupId(zoomItem);\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n }\r\n return cEntities;\r\n }\r\n }\r\n\r\n export namespace Model3d {\r\n export interface IParams {\r\n lodUrl: string;\r\n style: Style.IModelSettings;\r\n entity: Entity.IEntity;\r\n tags: EntityTag.ITag[];\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export interface IGroupParams {\r\n apiGetter: BruceApi.IGetter,\r\n menuItemId: string;\r\n entities: Entity.IEntity[];\r\n zoomItems: IDictionary<ZoomControl.IItem>;\r\n visualRegister: VisualsRegister.Register;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export function Render(params: IParams): ICesiumEntityExt {\r\n const entity = params.entity;\r\n\r\n const transform = entity?.transform;\r\n let heading: number = transform ? +transform.heading : 0;\r\n heading = (heading + 90) % 360;\r\n const pitch: number = transform ? +transform.pitch : 0;\r\n const roll: number = transform ? +transform.roll : 0;\r\n\r\n let scale: number = transform ? +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 if (!styleScale) {\r\n styleScale = 1;\r\n }\r\n scale *= styleScale;\r\n\r\n const hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll);\r\n\r\n let heightRef = getHeightRef(style);\r\n let pos = EntityUtils.GetPos(params.viewer, entity);\r\n if (heightRef == Cesium.HeightReference.CLAMP_TO_GROUND) {\r\n const carto = Cesium.Cartographic.fromCartesian(pos);\r\n pos = Cesium.Cartesian3.fromRadians(carto.longitude, carto.latitude, 0);\r\n heightRef = Cesium.HeightReference.RELATIVE_TO_GROUND;\r\n }\r\n\r\n const orientation = Cesium.Transforms.headingPitchRollQuaternion(pos, hpr);\r\n\r\n let blendMode: number = <any>null;\r\n let blendAmount: number = <any>null;\r\n let color: Cesium.Color = <any>null;\r\n if (style?.customize) {\r\n blendMode = style.fillColorBlendMode;\r\n if (!blendMode) {\r\n blendMode = Cesium.ColorBlendMode.HIGHLIGHT;\r\n }\r\n if (blendMode == Cesium.ColorBlendMode.MIX) {\r\n blendAmount = <any>style.fillColorBlendAmount;\r\n if (!blendAmount) {\r\n blendAmount = 0.5;\r\n }\r\n }\r\n const bColor = <Color.IColor>Calculator.GetValue(style.fillColor, entity, params.tags);\r\n if (bColor) {\r\n color = colorToCColor(bColor);\r\n }\r\n }\r\n\r\n const cEntity: ICesiumEntityExt = new Cesium.Entity({\r\n model: {\r\n uri: params.lodUrl,\r\n heightReference: heightRef,\r\n scale: scale,\r\n shadows: Cesium.ShadowMode.ENABLED,\r\n colorBlendAmount: blendAmount,\r\n colorBlendMode: blendMode,\r\n color: color\r\n },\r\n orientation: <Cesium.Property><any>orientation,\r\n position: pos,\r\n show: false\r\n });\r\n\r\n params.viewer.entities.add(cEntity);\r\n return cEntity;\r\n }\r\n\r\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\r\n const api = params.apiGetter.getApi(params.apiGetter.accountId, params.apiGetter.env);\r\n const cEntities: IDictionary<ICesiumEntityExt> = {};\r\n const reqBody: EntityLod.Filter.IListParams = {\r\n \"strict\": false,\r\n \"externalSources\": false,\r\n \"Items\": []\r\n };\r\n\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\r\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\r\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\r\n let tags: EntityTag.ITag[] = [];\r\n if (tagIds && tagIds.length > 0) {\r\n tags = await EntityTag.GetListByIds(api, tagIds);\r\n }\r\n const mStyle = (style?.Settings as Style.IEntitySettings)?.polygonStyle ?? <any>{};\r\n let group = mStyle.lodGroup ? Calculator.GetValue(mStyle.lodGroup, entity, tags) : null;\r\n if (!group) {\r\n group = \"DEFAULT\";\r\n }\r\n let level = <number>+<any>zoomItem.LODLevel;\r\n if (!level) {\r\n level = 0;\r\n }\r\n let catId = <string>zoomItem.LODCategoryID;\r\n if (!catId) {\r\n catId = \"glb\";\r\n }\r\n reqBody.Items.push({\r\n \"entityId\": <string>entity.Bruce.ID,\r\n \"categoryId\": catId,\r\n \"group\": <string>group,\r\n \"level\": level\r\n });\r\n }\r\n\r\n const lodData = await EntityLod.GetLods(api, reqBody);\r\n\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\r\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\r\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\r\n let tags: EntityTag.ITag[] = [];\r\n if (tagIds && tagIds.length > 0) {\r\n tags = await EntityTag.GetListByIds(api, tagIds);\r\n }\r\n\r\n const lod = lodData.find(x => x.entityId == entity.Bruce.ID);\r\n if (!lod?.clientFileId) {\r\n continue;\r\n }\r\n const mStyle = (style?.Settings as Style.IEntitySettings)?.polygonStyle ?? <any>{};\r\n const cEntity = Render({\r\n entity: entity,\r\n style: mStyle,\r\n tags: tags,\r\n viewer: params.viewer,\r\n lodUrl: ClientFile.GetUrl(api, lod.clientFileId)\r\n })\r\n if (cEntity) {\r\n cEntity._renderGroup = getRenderGroupId(zoomItem);\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n }\r\n\r\n return cEntities;\r\n }\r\n }\r\n}","import { BruceApi, DelayQueue, Entity, EntityFilterGetter, IDictionary, MenuItem, ZoomControl } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\r\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\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 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\r\n private entityCheckQueue: DelayQueue = <any>null;\r\n private entityCheckRemoval: () => void = <any>null;\r\n private isRunningCheck = false;\r\n private viewMonitorRemoval: () => void = <any>null;\r\n\r\n\r\n constructor(viewer: Cesium.Viewer, visualsManager: VisualsRegister.Register, apiGetter: BruceApi.IGetter, item: MenuItem.Item.IBruceEntities) {\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 if (this.disposed) {\r\n throw(new Error(\"This item is disposed.\"));\r\n }\r\n const api = this.apiGetter.getApi(this.apiGetter.accountId, this.apiGetter.env);\r\n this.getter = new EntityFilterGetter.Getter(\r\n api,\r\n new CesiumViewMonitor(this.viewer),\r\n this.item.BruceEntity[\"EntityType.ID\"],\r\n 500,\r\n {}\r\n );\r\n this.getter.IncludeMenuItem(this.item.id, [], 0, 100000);\r\n this.getterSub = this.getter.OnUpdate.Subscribe((entities) => {\r\n this.onGetterUpdate(entities);\r\n });\r\n this.viewMonitorRemoval = new CesiumViewMonitor(this.viewer).Updated().Subscribe(() => {\r\n this.entityCheckQueue.Call();\r\n });\r\n this.entityCheckQueue = new DelayQueue(() => {\r\n this.doEntityCheck();\r\n }, 3000);\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n this.disposed = true;\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n this.entityCheckRemoval?.();\r\n this.viewMonitorRemoval?.();\r\n }\r\n\r\n private async doEntityCheck(): Promise<void> {\r\n if (this.isRunningCheck) {\r\n this.entityCheckQueue.Call();\r\n return;\r\n }\r\n this.isRunningCheck = true;\r\n const api = this.apiGetter.getApi(this.apiGetter.accountId, this.apiGetter.env);\r\n try {\r\n const ids = Object.keys(this.renderedEntities);\r\n if (this.disposed) {\r\n return;\r\n }\r\n if (ids.length > 0) { \r\n const CHECK_BATCH_SIZE = 150;\r\n const checkBatch = async() => {\r\n const entityIds = ids.splice(0, CHECK_BATCH_SIZE);\r\n const entities = await Entity.GetListByIds(api, entityIds);\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.distributeGenerateBatches(entities);\r\n };\r\n while (ids.length > 0) {\r\n await checkBatch();\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n this.isRunningCheck = false;\r\n }\r\n\r\n private distributeGenerateBatches(entities: Entity.IEntity[]): void {\r\n const BATCH_SIZE = 50;\r\n while (entities.length > 0) {\r\n const batch = entities.splice(0, BATCH_SIZE);\r\n this.onGetterUpdate(batch);\r\n }\r\n }\r\n\r\n private async onGetterUpdate(entities: Entity.IEntity[]): Promise<void> {\r\n if (this.disposed) {\r\n return;\r\n }\r\n\r\n const cEntities = await EntityRenderEngine.Render({\r\n viewer: this.viewer, \r\n apiGetter: this.apiGetter, \r\n entities: entities,\r\n menuItemId: this.item.id,\r\n visualRegister: this.visualsManager,\r\n zoomControl: this.item.CameraZoomSettings\r\n });\r\n for (let i = 0; i < entities.length; i++) {\r\n const id = <string>entities[i].Bruce.ID;\r\n const cEntity = cEntities[id];\r\n this.renderedEntities[id] = !!cEntity;\r\n if (cEntity) {\r\n const visual = this.visualsManager.GetRego(id, this.item.id)?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.Add({\r\n entityId: <string>id,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\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 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(viewer: Cesium.Viewer, visualsManager: VisualsRegister.Register, apiGetter: BruceApi.IGetter, item: MenuItem.Item.IEntitiesLoaded) {\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 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 new CesiumViewMonitor(this.viewer),\r\n 500\r\n );\r\n this.getterSub = this.getter.OnUpdate.Subscribe((entities) => {\r\n this.onGetterUpdate(entities);\r\n });\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n this.disposed = true;\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n }\r\n\r\n private async onGetterUpdate(entities: Entity.IEntity[]): Promise<void> {\r\n if (this.disposed) {\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 id = <string>entities[i].Bruce.ID;\r\n const cEntity = cEntities[id];\r\n this.renderedEntities[id] = !!cEntity;\r\n if (cEntity) {\r\n const visual = this.visualsManager.GetRego(id, this.item.id)?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.Add({\r\n entityId: <string>id,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\r\n }\r\n }\r\n }\r\n}","import { BruceEvent, Cartes, IDictionary, ObjectUtils } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityUtils } from \"../utils/entity-utils\";\r\nimport { EntityRenderEngine } from \"./entity-render-engine\";\r\nimport { IRenderAddon } from \"./render-addons/render-addon\";\r\n\r\ninterface IVisualExt {//extends Visual {\r\n _register?: VisualsRegister.Register;\r\n _rego?: VisualsRegister.IVisualRego;\r\n}\r\n\r\nfunction removeEntity(viewer: Cesium.Viewer, visual: VisualsRegister.Visual): void {\r\n unmarkEntity(visual);\r\n if (visual instanceof Cesium.Entity) {\r\n EntityRenderEngine.Remove(viewer, visual);\r\n }\r\n else if (visual instanceof Cesium.Primitive) {\r\n if (viewer.scene.primitives.contains(visual)) {\r\n viewer.scene.primitives.remove(visual);\r\n }\r\n }\r\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\r\n // No way to tell if changing show will crash it!\r\n try {\r\n visual.show = false;\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n}\r\n\r\nfunction updateCEntityShow(viewer: Cesium.Viewer, visual: EntityRenderEngine.ICesiumEntityExt, show: boolean) {\r\n if (visual._parentEntity) {\r\n updateCEntityShow(viewer, visual._parentEntity, show);\r\n }\r\n if (visual._siblingGraphics) {\r\n for (let i = 0; i < visual._siblingGraphics.length; i++) {\r\n const sibling = visual._siblingGraphics[i];\r\n updateCEntityShow(viewer, sibling, show);\r\n }\r\n }\r\n if (viewer.entities.contains(visual)) {\r\n visual.show = show;\r\n }\r\n}\r\n\r\nfunction updateEntityShow(\r\n viewer: Cesium.Viewer, \r\n visual: VisualsRegister.Visual, \r\n show: boolean\r\n): void {\r\n if (visual instanceof Cesium.Entity) {\r\n updateCEntityShow(viewer, visual, show);\r\n }\r\n else if (visual instanceof Cesium.Primitive) {\r\n if (viewer.scene.primitives.contains(visual)) {\r\n visual.show = show;\r\n }\r\n }\r\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\r\n // No way to tell if changing show will crash it!\r\n try {\r\n visual.show = show;\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n}\r\n\r\nfunction updateEntity(viewer: Cesium.Viewer, entityRegos: VisualsRegister.IVisualRego[], addons: IRenderAddon[]): void {\r\n let highestPriority: VisualsRegister.IVisualRego = <any>null;\r\n for (let i = 0; i < entityRegos.length; i++) {\r\n const rego = entityRegos[i];\r\n if (highestPriority === null || rego.priority > highestPriority.priority) {\r\n highestPriority = rego;\r\n }\r\n }\r\n for (let i = 0; i < entityRegos.length; i++) {\r\n const rego = entityRegos[i];\r\n const show = rego === highestPriority;\r\n updateEntityShow(viewer, rego.visual, show);\r\n }\r\n if (addons) {\r\n for (let j = 0; j < addons.length; j++) {\r\n const addon = addons[j];\r\n addon.Render(entityRegos.map(x => x.visual));\r\n }\r\n }\r\n}\r\n\r\nfunction markEntity(register: VisualsRegister.Register, rego: VisualsRegister.IVisualRego, visual: VisualsRegister.Visual): void {\r\n const vis = <IVisualExt>visual;\r\n vis._register = register;\r\n vis._rego = rego;\r\n if (visual instanceof Cesium.Entity) {\r\n const visEnt = <EntityRenderEngine.ICesiumEntityExt>visual;\r\n if (visEnt._parentEntity) {\r\n markEntity(register, rego, visEnt._parentEntity);\r\n }\r\n if (visEnt._siblingGraphics) {\r\n for (let i = 0; i < visEnt._siblingGraphics.length; i++) {\r\n markEntity(register, rego, visEnt._siblingGraphics[i]);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction unmarkEntity(visual: VisualsRegister.Visual): void {\r\n const vis = <IVisualExt>visual;\r\n vis._register = <any>null;\r\n if (visual instanceof Cesium.Entity) {\r\n const visEnt = <EntityRenderEngine.ICesiumEntityExt>visual;\r\n if (visEnt._parentEntity) {\r\n unmarkEntity(visEnt._parentEntity);\r\n }\r\n if (visEnt._siblingGraphics) {\r\n for (let i = 0; i < visEnt._siblingGraphics.length; i++) {\r\n unmarkEntity(visEnt._siblingGraphics[i]);\r\n }\r\n }\r\n }\r\n}\r\n\r\ninterface IColoredBillboard extends Cesium.BillboardGraphics {\r\n _orgColor?: Cesium.Color;\r\n}\r\n\r\ninterface IColoredPoint extends Cesium.PointGraphics {\r\n _orgColor?: Cesium.Color;\r\n}\r\n\r\ninterface IColoredPolygon extends Cesium.PolygonGraphics {\r\n _orgColor?: Cesium.Color;\r\n}\r\n\r\ninterface IColoredPolyline extends Cesium.PolylineGraphics {\r\n _orgColor?: Cesium.Color;\r\n}\r\n\r\ninterface IColoredModel extends Cesium.ModelGraphics {\r\n _orgColor?: Cesium.Color;\r\n}\r\n\r\ninterface IColoredEntityExt extends Cesium.Entity {\r\n point: IColoredPoint;\r\n polygon: IColoredPolygon;\r\n polyline: IColoredPolyline;\r\n model: IColoredModel;\r\n billboard: IColoredBillboard;\r\n}\r\n\r\ninterface IColoredFeatureExt extends Cesium.Cesium3DTileFeature {\r\n _orgColor?: Cesium.Color;\r\n}\r\n\r\nfunction select(visual: VisualsRegister.Visual): void {\r\n const color = Cesium.Color.fromAlpha(Cesium.Color.YELLOW, 0.5);\r\n if (visual instanceof Cesium.Entity) {\r\n const entities = EntityUtils.GatherEntity(visual);\r\n for (let i = 0; i < entities.length; i++) {\r\n const cEntity: IColoredEntityExt = <any>entities[i];\r\n if (cEntity.point) {\r\n cEntity.point._orgColor = <any>cEntity.point.color;\r\n cEntity.point.color = <any>color.clone();\r\n }\r\n if (cEntity.polyline) {\r\n cEntity.polyline._orgColor = <any>cEntity.polyline.material;\r\n cEntity.polyline.material = <any>color.clone();\r\n }\r\n if (cEntity.polygon) {\r\n cEntity.polygon._orgColor = <any>cEntity.polygon.material;\r\n cEntity.polygon.material = <any>color.clone();\r\n }\r\n if (cEntity.model) {\r\n cEntity.model._orgColor = <any>cEntity.model.color;\r\n cEntity.model.color = <any>color.clone();\r\n }\r\n if (cEntity.billboard) {\r\n cEntity.billboard._orgColor = <any>cEntity.billboard.color;\r\n cEntity.billboard.color = <any>color.clone();\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 cPrim = <IColoredFeatureExt>visual;\r\n cPrim._orgColor = <any>cPrim.color;\r\n cPrim.color = <any>color.clone();\r\n }\r\n}\r\n\r\nfunction deselect(visual: VisualsRegister.Visual): void {\r\n if (visual instanceof Cesium.Entity) {\r\n const entities = EntityUtils.GatherEntity(visual);\r\n for (let i = 0; i < entities.length; i++) {\r\n const cEntity: IColoredEntityExt = <any>entities[i];\r\n if (cEntity.point) {\r\n cEntity.point.color = <any>cEntity.point._orgColor;\r\n }\r\n if (cEntity.polyline) {\r\n cEntity.polyline.material = <any>cEntity.polyline._orgColor;\r\n }\r\n if (cEntity.polygon) {\r\n cEntity.polygon.material = <any>cEntity.polygon._orgColor;\r\n }\r\n if (cEntity.model) {\r\n cEntity.model.color = <any>cEntity.model._orgColor;\r\n }\r\n if (cEntity.billboard) {\r\n cEntity.billboard.color = <any>cEntity.billboard._orgColor;\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 cPrim = <IColoredFeatureExt>visual;\r\n cPrim.color = <any>cPrim._orgColor;\r\n }\r\n}\r\n\r\n/**\r\n * Manages a registry of all Bruce visuals being rendered by menu items.\r\n * If multiple stuff is registered with the same entity id, only the \"best\" one is left visible.\r\n */\r\nexport namespace VisualsRegister {\r\n export type Visual = Cesium.Entity | Cesium.Primitive | Cesium.Cesium3DTileFeature;\r\n\r\n export interface IVisualRego {\r\n entityId: string;\r\n entityTypeId?: string;\r\n menuItemId: string;\r\n visual: Visual;\r\n priority: number;\r\n }\r\n \r\n export interface IVisualUpdate {\r\n rego: IVisualRego;\r\n isAdding: boolean;\r\n }\r\n\r\n export class Register {\r\n private id = ObjectUtils.UId();\r\n public get Id(): string {\r\n return this.id;\r\n }\r\n private viewer: Cesium.Viewer;\r\n private rego: IDictionary<IVisualRego[]> = {};\r\n private onUpdate: BruceEvent<IVisualUpdate> = <any>null;\r\n public get OnUpdate(): BruceEvent<IVisualUpdate> {\r\n if (!this.onUpdate) {\r\n this.onUpdate = new BruceEvent<IVisualUpdate>();\r\n }\r\n return this.onUpdate;\r\n }\r\n private selectedIds: string[] = [];\r\n private addons: IDictionary<IRenderAddon[]> = {};\r\n \r\n \r\n constructor(viewer: Cesium.Viewer) {\r\n this.viewer = viewer;\r\n }\r\n\r\n public AddAddon(entityId: string, addon: IRenderAddon): void {\r\n if (!this.addons[entityId]) {\r\n this.addons[entityId] = [];\r\n }\r\n this.addons[entityId].push(addon);\r\n const regos = this.rego[entityId];\r\n if (regos) {\r\n addon.Render(regos.map(x => x.visual))\r\n }\r\n }\r\n\r\n public GetAddons(entityId: string): IRenderAddon[] {\r\n return this.addons[entityId] || [];\r\n }\r\n\r\n public RemoveAddon(entityId: string, addonId: string): void {\r\n const addons = this.addons[entityId];\r\n if (addons) {\r\n for (let i = 0; i < addons.length; i++) {\r\n if (addons[i].Id === addonId) {\r\n addons[i].Dispose();\r\n addons.splice(i, 1);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n public RemoveAddons(entityId: string): void {\r\n const addons = this.addons[entityId];\r\n if (addons) {\r\n for (let i = 0; i < addons.length; i++) {\r\n addons[i].Dispose();\r\n }\r\n }\r\n this.addons[entityId] = [];\r\n }\r\n\r\n public Select(id: string): void {\r\n if (this.selectedIds.indexOf(id) === -1) {\r\n this.selectedIds.push(id);\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(rego.visual);\r\n }\r\n }\r\n }\r\n }\r\n\r\n public Deselect(id: string): void {\r\n const index = this.selectedIds.indexOf(id);\r\n if (index !== -1) {\r\n this.selectedIds.splice(index, 1);\r\n const regos = this.rego[id];\r\n if (regos) {\r\n for (let i = 0; i < regos.length; i++) {\r\n const rego = regos[i];\r\n deselect(rego.visual);\r\n }\r\n }\r\n }\r\n }\r\n\r\n public IsSelected(id: string): boolean {\r\n return this.selectedIds.indexOf(id) !== -1;\r\n }\r\n\r\n public ClearSelected(): void {\r\n for (let i = 0; i < this.selectedIds.length; i++) {\r\n const id = this.selectedIds[i];\r\n const regos = this.rego[id];\r\n if (regos) {\r\n for (let i = 0; i < regos.length; i++) {\r\n const rego = regos[i];\r\n deselect(rego.visual);\r\n }\r\n }\r\n }\r\n this.selectedIds = [];\r\n }\r\n \r\n public Add(rego: IVisualRego): void {\r\n this.Remove(rego.entityId, rego.menuItemId, false);\r\n const entityId = rego.entityId;\r\n const entityRegos = this.rego[entityId] ?? [];\r\n entityRegos.push(rego);\r\n this.rego[entityId] = entityRegos;\r\n markEntity(this, rego, rego.visual);\r\n updateEntity(this.viewer, this.rego[entityId], this.GetAddons(entityId));\r\n if (this.selectedIds.includes(entityId)) {\r\n select(rego.visual);\r\n }\r\n this.onUpdate?.Trigger({ rego: rego, isAdding: true });\r\n }\r\n \r\n public GetRego(entityId: string, menuItemId: string): IVisualRego {\r\n const entityRegos = this.rego[entityId];\r\n if (!entityRegos) {\r\n return <any>[];\r\n }\r\n return <any>entityRegos.find(r => r.menuItemId === menuItemId);\r\n }\r\n\r\n public GetMenuItemRegos(menuItemId: string): IVisualRego[] {\r\n const visuals: IVisualRego[] = [];\r\n for (const entityId in this.rego) {\r\n const entityRegos = this.rego[entityId];\r\n if (entityRegos) {\r\n const rego = entityRegos.find(r => r.menuItemId === menuItemId);\r\n if (rego) {\r\n visuals.push(rego);\r\n }\r\n }\r\n }\r\n return visuals;\r\n }\r\n \r\n public RemoveByEntityId(id: string): void {\r\n const entityRegos = this.rego[id];\r\n if (!entityRegos) {\r\n return;\r\n }\r\n for (let i = 0; i < entityRegos.length; i++) {\r\n const rego = entityRegos[i];\r\n this.onUpdate?.Trigger({ rego: rego, isAdding: false });\r\n removeEntity(this.viewer, rego.visual);\r\n }\r\n this.rego[id] = [];\r\n delete this.rego[id];\r\n }\r\n \r\n public RemoveByMenuItemId(id: string): void {\r\n for (const entityId in this.rego) {\r\n const entityRegos = this.rego[entityId];\r\n if (entityRegos) {\r\n const rego = entityRegos.find(r => r.menuItemId === id);\r\n if (!rego) {\r\n continue;\r\n }\r\n this.onUpdate?.Trigger({ rego: rego, isAdding: false });\r\n removeEntity(this.viewer, rego.visual);\r\n const doesInclude = this.rego[entityId].find(r => r.menuItemId === id);\r\n if (doesInclude) {\r\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== id);\r\n updateEntity(this.viewer, this.rego[entityId], this.GetAddons(entityId));\r\n }\r\n }\r\n }\r\n }\r\n \r\n public Remove(entityId: string, menuItemId: string, _doUpdate: boolean = true): void {\r\n const entityRegos = this.rego[entityId];\r\n if (!entityRegos) {\r\n return;\r\n }\r\n const rego = entityRegos.find(r => r.menuItemId === menuItemId);\r\n if (!rego) {\r\n return;\r\n }\r\n this.onUpdate?.Trigger({ rego: rego, isAdding: false });\r\n removeEntity(this.viewer, rego.visual);\r\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== menuItemId);\r\n if (_doUpdate) {\r\n updateEntity(this.viewer, this.rego[entityId], this.GetAddons(entityId));\r\n }\r\n }\r\n \r\n /**\r\n * Returns an array of drilled visuals associated with this register.\r\n * The top array item is the first found.\r\n * @param cursor \r\n * @returns \r\n */\r\n public GetFromCursor(cursor: Cartes.ICartes2): IVisualRego[] {\r\n const found: IVisualRego[] = [];\r\n const picked = this.viewer.scene.drillPick(new Cesium.Cartesian2(cursor.x, cursor.y), 5);\r\n for (let i = 0; i < picked.length; i++) {\r\n const object = picked[i];\r\n const entity = <Visual>(object && object.id && object.id instanceof Cesium.Entity ? object.id : object);\r\n const visual = <IVisualExt>entity;\r\n if (visual?._register?.Id == this.id) {\r\n found.push(<IVisualRego>visual._rego);\r\n }\r\n }\r\n return found;\r\n }\r\n }\r\n}","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 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(viewer: Cesium.Viewer, visualsManager: VisualsRegister.Register, apiGetter: BruceApi.IGetter, item: MenuItem.Item.IEntityIds) {\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 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 new CesiumViewMonitor(this.viewer),\r\n 500\r\n );\r\n this.getterSub = this.getter.OnUpdate.Subscribe((ids) => {\r\n this.onGetterUpdate(ids);\r\n });\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n this.disposed = true;\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n }\r\n\r\n private async onGetterUpdate(entityIds: string[]): Promise<void> {\r\n if (this.disposed) {\r\n return;\r\n }\r\n const api = this.apiGetter.getApi(this.apiGetter.accountId, this.apiGetter.env);\r\n const entities = await Entity.GetListByIds(api, entityIds);\r\n const cEntities = await EntityRenderEngine.Render({\r\n viewer: this.viewer, \r\n apiGetter: this.apiGetter, \r\n entities: entities,\r\n menuItemId: this.item.id,\r\n visualRegister: this.visualsManager,\r\n zoomControl: this.item.CameraZoomSettings\r\n });\r\n for (let i = 0; i < entities.length; i++) {\r\n const id = <string>entities[i].Bruce.ID;\r\n const cEntity = cEntities[id];\r\n this.renderedEntities[id] = !!cEntity;\r\n if (cEntity) {\r\n const visual = this.visualsManager.GetRego(id, this.item.id)?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.Add({\r\n entityId: <string>id,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\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 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(viewer: Cesium.Viewer, visualsManager: VisualsRegister.Register, apiGetter: BruceApi.IGetter, item: MenuItem.Item.IBruceEntity) {\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 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 new CesiumViewMonitor(this.viewer),\r\n 1\r\n );\r\n this.getterSub = this.getter.OnUpdate.Subscribe((ids) => {\r\n this.onGetterUpdate(ids[0]);\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.getterSub?.();\r\n this.getterSub = <any>null;\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n }\r\n\r\n private async onGetterUpdate(id: string): Promise<void> {\r\n if (this.disposed) {\r\n return;\r\n }\r\n const api = this.apiGetter.getApi(this.apiGetter.accountId, this.apiGetter.env);\r\n const entity = await Entity.Get(api, id);\r\n const cEntities = await EntityRenderEngine.Render({\r\n viewer: this.viewer, \r\n apiGetter: this.apiGetter,\r\n entities: [entity],\r\n menuItemId: this.item.id,\r\n visualRegister: this.visualsManager,\r\n zoomControl: this.item.CameraZoomSettings\r\n });\r\n const cEntity = cEntities[id];\r\n if (cEntity) {\r\n const visual = this.visualsManager.GetRego(id, this.item.id)?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.Add({\r\n entityId: <string>entity.Bruce.ID,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\r\n }\r\n }\r\n}","import { BruceApi, Calculator, Carto, Color, Entity, EntityType, IDictionary, Style, Tileset, TilesetCad } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { VisualsRegister } from \"./visuals-register\";\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 TilesetRenderEngine {\r\n export interface IParams {\r\n apiGetter: BruceApi.IGetter;\r\n tileset: Tileset.ITileset;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export function ApplySettings(cTileset: Cesium.Cesium3DTileset, tileset: Tileset.ITileset): void {\r\n if (tileset.type == Tileset.EType.Cad) {\r\n const settings = tileset.settings as TilesetCad.ISettings;\r\n const root = cTileset.root;\r\n let transform = settings.transform;\r\n if (!transform) {\r\n transform = {\r\n heading: 0,\r\n pitch: 0,\r\n roll: 0,\r\n scale: 1\r\n };\r\n }\r\n const point = <Carto.ICarto>settings.location;\r\n const pos = Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\r\n const hpr = Cesium.HeadingPitchRoll.fromDegrees(transform.heading, transform.pitch, transform.roll, new Cesium.HeadingPitchRoll());\r\n root.transform = Cesium.Transforms.headingPitchRollToFixedFrame(pos, hpr);\r\n \r\n let scale = +transform?.scale;\r\n if (!scale || scale <= 0) {\r\n scale = 0.000001;\r\n }\r\n let scaleMatrix = Cesium.Matrix4.fromScale(new Cesium.Cartesian3(scale, scale, scale), new Cesium.Matrix4());\r\n root.transform = Cesium.Matrix4.multiply(root.transform, scaleMatrix, root.transform);\r\n \r\n // Force matrix to update\r\n (<any>root).updateTransform();\r\n \r\n const maxScreenSpaceError = settings.maximumScreenSpaceError;\r\n if (maxScreenSpaceError || maxScreenSpaceError == 0) {\r\n cTileset.maximumScreenSpaceError = maxScreenSpaceError;\r\n }\r\n }\r\n else {\r\n throw(\"Not implemented.\");\r\n }\r\n }\r\n\r\n export function Render(params: IParams): Cesium.Cesium3DTileset {\r\n const api = params.apiGetter.getApi(params.apiGetter.accountId, params.apiGetter.env);\r\n if (params.tileset.type == Tileset.EType.Cad) {\r\n const cTileset = new Cesium.Cesium3DTileset({\r\n url: Tileset.GetPublicFileUrl(api, params.tileset.id, \"tileset.json\") + \"?generation=\" + params.tileset.generateVersion\r\n });\r\n params.viewer.scene.primitives.add(cTileset);\r\n cTileset.readyPromise.then(() => {\r\n ApplySettings(cTileset, params.tileset);\r\n });\r\n return cTileset;\r\n }\r\n else {\r\n throw(\"Not implemented.\");\r\n }\r\n }\r\n\r\n export class CadStyler {\r\n private api: BruceApi.Api;\r\n\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n\r\n private loadedEntities: IDictionary<VisualsRegister.IVisualRego> = {};\r\n private cTileset: Cesium.Cesium3DTileset;\r\n private styleMapping: any[];\r\n private styleMappingLoaded: boolean = false;\r\n private styleMappingsLoaded: IDictionary<boolean> = {};\r\n private fallbackStyleId: number;\r\n private fallbackStyle: Style.IStyle = <any>null;\r\n\r\n private runningQueues: number = 0;\r\n private queueLoadInterval: any;\r\n private recordLoadQueue: string[] = [];\r\n private recordCheckQueue: string[] = [];\r\n private queueCheckInterval: any;\r\n\r\n\r\n constructor(api: BruceApi.Api, cTileset: Cesium.Cesium3DTileset, fallbackStyleId: number, styleMapping: any[]) {\r\n this.api = api;\r\n this.cTileset = cTileset;\r\n this.fallbackStyleId = fallbackStyleId;\r\n this.styleMapping = styleMapping;\r\n this.loadStyles();\r\n }\r\n\r\n public QueueEntities(entities: VisualsRegister.IVisualRego[]): void {\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n this.queueTilesetFeatureStyle(entity);\r\n }\r\n if (this.recordLoadQueue.length > 0) {\r\n this.processQueue();\r\n }\r\n }\r\n\r\n private async processQueue(): Promise<void> {\r\n const MAX_BATCHES = 2;\r\n const BATCH_DELAY = 200;\r\n\r\n if (this.runningQueues >= MAX_BATCHES) {\r\n return;\r\n }\r\n else if (this.disposed) {\r\n return;\r\n }\r\n this.runningQueues += 1;\r\n \r\n let batch: VisualsRegister.IVisualRego[] = [];\r\n let rerun: boolean = false;\r\n try {\r\n batch = this.getEntitiesForQueue();\r\n\r\n const entityIds = batch.map(x => x.entityId);\r\n if (entityIds.length > 0) {\r\n const entities = await Entity.GetListByIds(this.api, entityIds);\r\n for (let i = 0; i < entities.length; i++) {\r\n const record = entities[i];\r\n const feature = batch.find(x => x?.entityId == record?.Bruce?.ID);\r\n if (feature) {\r\n this.styleTilesetFeatureFullData(feature, record);\r\n }\r\n }\r\n rerun = batch.length > 0;\r\n }\r\n }\r\n finally {\r\n setTimeout(() => {\r\n this.runningQueues -= 1;\r\n if (rerun) {\r\n this.processQueue();\r\n }\r\n }, BATCH_DELAY);\r\n }\r\n }\r\n\r\n private getEntitiesForQueue(): VisualsRegister.IVisualRego[] {\r\n const BATCH_SIZE = 30;\r\n const batchHashes = this.recordLoadQueue.splice(0, BATCH_SIZE);\r\n const entities: VisualsRegister.IVisualRego[] = [];\r\n for (let i = 0; i < batchHashes.length; i++) {\r\n const id = batchHashes[i];\r\n const entity = this.loadedEntities[id];\r\n if (entity) {\r\n entities.push(entity);\r\n }\r\n }\r\n return entities;\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.disposed = true;\r\n clearInterval(this.queueLoadInterval);\r\n clearInterval(this.queueCheckInterval);\r\n }\r\n\r\n private async loadStyles(): Promise<void> {\r\n let fallbackStyleId = this.fallbackStyleId;\r\n if (fallbackStyleId && fallbackStyleId > 0) {\r\n try {\r\n let data = await Style.Get(this.api, fallbackStyleId);\r\n this.fallbackStyle = data;\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n \r\n // Load styles in the style mapping\r\n let styleMapping = this.styleMapping;\r\n if (!styleMapping) {\r\n styleMapping = [];\r\n }\r\n this.styleMapping = styleMapping;\r\n \r\n // It is default style.\r\n // We have to get all possible entity type ids and append them to mapping.\r\n if (!fallbackStyleId) {\r\n try {\r\n const modelTree = this.cTileset?.extensions?.modelTree;\r\n if (modelTree) {\r\n const entityTypeIds = this.getEntityTypeIdsFromModelTree(modelTree);\r\n for (let i = 0; i < entityTypeIds.length; i++) {\r\n const entityTypeId = entityTypeIds[i];\r\n if (styleMapping.findIndex(x => x.EntityTypeID == entityTypeId) <= -1) {\r\n styleMapping.push({\r\n EntityTypeID: entityTypeId,\r\n StyleID: null,\r\n style: <any>null\r\n });\r\n }\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n \r\n for (let i = 0; i < styleMapping.length; i++) {\r\n if (this.disposed) {\r\n break;\r\n }\r\n \r\n let styleMap = styleMapping[i];\r\n if (!styleMap.style) {\r\n let styleId = styleMap.StyleID;\r\n \r\n // Get default style of the entity type.\r\n if (!styleId) {\r\n try {\r\n let entityType = await EntityType.Get(this.api, styleMap.EntityTypeID);\r\n styleId = entityType?.[\"DisplaySetting.ID\"];\r\n }\r\n catch (e) {\r\n console.error(e); \r\n }\r\n }\r\n \r\n if (styleId) {\r\n try {\r\n let data = await Style.Get(this.api, styleId);\r\n if (data) {\r\n styleMap.style = data;\r\n styleMap.StyleID = styleId;\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n \r\n if (styleMap.EntityTypeID && styleMap.style) {\r\n this.styleMappingsLoaded[styleMap.EntityTypeID] = true;\r\n this.processTilesetFeatureCheckQueue();\r\n this.processQueue();\r\n }\r\n }\r\n this.styleMappingLoaded = true;\r\n\r\n if (!this.disposed) {\r\n await this.processTilesetFeatureCheckQueue();\r\n this.processQueue();\r\n }\r\n }\r\n\r\n private getEntityTypeIdsFromModelTree(modelTree: any): string[] {\r\n const entityTypeIds: string[] = [];\r\n this.digEntityTypeIdsFromModelTreeBranch(modelTree, entityTypeIds);\r\n return entityTypeIds;\r\n }\r\n \r\n private digEntityTypeIdsFromModelTreeBranch(branch: any, arr: string[]): void {\r\n if (branch) {\r\n // Does not yet include this entity type id.\r\n if (branch.typeId && !arr.includes(branch.typeId)) {\r\n arr.push(branch.typeId);\r\n }\r\n \r\n if (branch.children) {\r\n for (let i = 0; i < branch.children.length; i++) {\r\n let child = branch.children[i];\r\n this.digEntityTypeIdsFromModelTreeBranch(child, arr);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private async processTilesetFeatureCheckQueue(): Promise<void> {\r\n const BATCH_CHECK_SIZE = 1000;\r\n\r\n return new Promise((res) => {\r\n clearInterval(this.queueCheckInterval);\r\n this.queueCheckInterval = setInterval(() => {\r\n if (this.disposed) {\r\n clearInterval(this.queueCheckInterval);\r\n res();\r\n return;\r\n }\r\n \r\n // Construct batch for loaded styles.\r\n let batch = [];\r\n \r\n if (this.styleMappingLoaded) {\r\n batch = this.recordCheckQueue.splice(0, BATCH_CHECK_SIZE);\r\n }\r\n else {\r\n for (let i = 0; i < this.recordCheckQueue.length; i++) {\r\n let hash = this.recordCheckQueue[i];\r\n let entity = this.loadedEntities[hash];\r\n if (entity) {\r\n let entityTypeId = entity.entityTypeId;\r\n if (entityTypeId) {\r\n if (this.styleMappingsLoaded[entityTypeId] == true) {\r\n batch.push(hash);\r\n }\r\n }\r\n }\r\n \r\n if (batch.length >= BATCH_CHECK_SIZE) {\r\n break;\r\n }\r\n }\r\n \r\n for (let i = 0; i < batch.length; i++) {\r\n let hash = batch[i];\r\n let index = this.recordCheckQueue.findIndex(x => x == hash);\r\n if (index > -1) {\r\n this.recordCheckQueue.splice(index, 1);\r\n }\r\n }\r\n }\r\n \r\n if (batch.length) {\r\n for (let i = 0; i < batch.length; i++) {\r\n let item = batch[i];\r\n let entity = this.loadedEntities[item];\r\n if (entity) {\r\n this.queueTilesetFeatureStyle(entity);\r\n }\r\n }\r\n }\r\n else {\r\n clearInterval(this.queueCheckInterval);\r\n res();\r\n }\r\n }, 50);\r\n });\r\n }\r\n\r\n private queueTilesetFeatureStyle(entity: VisualsRegister.IVisualRego): void {\r\n if (this.styleMappingLoaded || this.styleMappingsLoaded[<string>entity.entityTypeId] == true) {\r\n const needsData = this.getTilesetFeatureNeedsFullData(entity.entityId, <string>entity.entityTypeId);\r\n if (needsData) {\r\n if (this.recordLoadQueue.findIndex(x => x == entity.entityId)) {\r\n this.recordLoadQueue.push(entity.entityId);\r\n }\r\n }\r\n else {\r\n this.styleTilesetFeature(entity);\r\n }\r\n }\r\n else {\r\n this.recordCheckQueue.push(entity.entityId);\r\n }\r\n }\r\n\r\n private styleTilesetFeature(entity: VisualsRegister.IVisualRego): void {\r\n this.styleTilesetFeatureFullData(entity, <any>null); \r\n }\r\n\r\n private styleTilesetFeatureFullData(entity: VisualsRegister.IVisualRego, data: Entity.IEntity): void {\r\n const style = <Style.IEntitySettings>this.getTilesetFeatureStyle(entity.entityId, <string>entity.entityTypeId);\r\n if (!style) {\r\n return;\r\n }\r\n const bColor = <Color.IColor>(style.modelStyle?.fillColor ? Calculator.GetValue(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, 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\n/**\r\n * Manager for rendering CAD tilesets.\r\n * CAD tilesets are referred to as \"MODEL\" tilesets in some other areas of Bruce code.\r\n */\r\nexport namespace TilesetCadRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private item: MenuItem.Item.ICadTileset;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private visualsManager: VisualsRegister.Register;\r\n private cTileset: Cesium.Cesium3DTileset = <any>null;\r\n private styler: TilesetRenderEngine.CadStyler = <any>null;\r\n\r\n \r\n constructor(viewer: Cesium.Viewer, visualsManager: VisualsRegister.Register, apiGetter: BruceApi.IGetter, item: MenuItem.Item.ICadTileset) {\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n \r\n public async Init(): Promise<void> {\r\n const tilesetId = this.item.tileset?.TilesetID;\r\n if (!tilesetId) {\r\n return;\r\n }\r\n\r\n const api = this.apiGetter.getApi(this.apiGetter.accountId, this.apiGetter.env);\r\n const tileset = await Tileset.Get(api, tilesetId);\r\n if (!tileset) {\r\n return;\r\n }\r\n\r\n const cTileset = this.cTileset = TilesetRenderEngine.Render({\r\n apiGetter: this.apiGetter,\r\n tileset: tileset,\r\n viewer: this.viewer\r\n });\r\n cTileset.readyPromise.then(() => {\r\n this.onCTilesetLoad();\r\n });\r\n cTileset.tileLoad.addEventListener((tile) => {\r\n this.mapCTile(tile);\r\n });\r\n\r\n this.styler = new TilesetRenderEngine.CadStyler(api, this.cTileset, <number>this.item.styleId, <any[]>this.item.StyleMapping);\r\n }\r\n\r\n private onCTilesetLoad(): void {\r\n if (this.disposed) {\r\n return;\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 for (let i = 0; i < content.featuresLength; i++) {\r\n const feature = content.getFeature(i);\r\n \r\n let rego = this.mapTilesetFeature(feature);\r\n if (rego?.entityId) {\r\n this.styler.QueueEntities([rego]);\r\n }\r\n }\r\n }\r\n\r\n private mapTilesetFeature(feature: Cesium.Cesium3DTileFeature): VisualsRegister.IVisualRego {\r\n let version = feature?.tileset?.extensions?.modelTree?.version;\r\n if (!version) {\r\n version = 1;\r\n }\r\n \r\n let rego: VisualsRegister.IVisualRego = {\r\n entityId: <any>null,\r\n entityTypeId: <any>null,\r\n menuItemId: this.item.id,\r\n priority: 0,\r\n visual: feature\r\n };\r\n if (version == 1) {\r\n const pathStr = (<Cesium.Cesium3DTileFeature><any>feature).getProperty(\"BrucePath\");\r\n if (pathStr != undefined) {\r\n let path = pathStr.split(\"|\");\r\n let entityTypeId = this.getEntityTypeByPath(path);\r\n rego.entityTypeId = entityTypeId;\r\n rego.entityId = path[path.length - 1];\r\n }\r\n }\r\n else if (version == 2) {\r\n const geomId = +feature.getProperty(\"GeomId\");\r\n if (geomId != null && (!!geomId || geomId == 0)) {\r\n const meta = this.getMetaByGeomId(geomId, feature.tileset);\r\n if (meta) {\r\n rego.entityId = meta.id;\r\n rego.entityTypeId = meta.typeId;\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"Unhandled tileset tree version = \" + version);\r\n }\r\n if (rego?.entityId) {\r\n this.visualsManager.Add(rego);\r\n return rego;\r\n }\r\n return <any>null;\r\n }\r\n\r\n private getMetaByGeomId(geomId: number, tileset: Cesium.Cesium3DTileset): { id: string, typeId: string } {\r\n let modelTree: any = tileset?.extensions?.modelTree;\r\n return this.digMetaByGeomId(geomId, modelTree, []);\r\n }\r\n \r\n private digMetaByGeomId(geomId: number, branch: any, path: string[]): { id: string, typeId: string } {\r\n path = [].concat(<any>path);\r\n path.push(branch.id);\r\n\r\n if (branch.geomId == geomId) {\r\n return { id: path[path.length - 1], typeId: branch.typeId };\r\n }\r\n else if (branch.children) {\r\n for (let i = 0; i < branch.children.length; i++) {\r\n let meta = this.digMetaByGeomId(geomId, branch.children[i], path);\r\n if (meta) {\r\n return meta;\r\n }\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n private getEntityTypeByPath(path: string[]): string {\r\n let modelTree: any = this.cTileset?.extensions?.modelTree;\r\n if (modelTree) {\r\n let data = this.digModelTreeByPath(modelTree, path);\r\n if (data) {\r\n return data.typeId;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n \r\n private digModelTreeByPath(branch: any, path: string[]): any {\r\n // Dereference.\r\n path = JSON.parse(JSON.stringify(path));\r\n \r\n if (path.length <= 0) {\r\n return null;\r\n }\r\n let pathTop = path.splice(0, 1)[0];\r\n if (pathTop != branch.id) {\r\n return null;\r\n }\r\n else if (path.length == 0 && pathTop == branch.id) {\r\n return branch;\r\n }\r\n else if (branch.children) {\r\n for (let i = 0; i < branch.children.length; i++) {\r\n let foundPath = this.digModelTreeByPath(branch.children[i], path);\r\n if (foundPath) {\r\n return foundPath;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.disposed = true;\r\n if (this.cTileset) {\r\n this.cTileset.show = false;\r\n }\r\n this.styler.Dispose();\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\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\n\r\ninterface IRenderedItem {\r\n id: string;\r\n type: MenuItem.EType;\r\n childIds: string[];\r\n item: MenuItem.IItem;\r\n renderManager: RenderManager.Type;\r\n}\r\n\r\n/**\r\n * Utility to keep track of enabled menu items within a Cesium viewer.\r\n */\r\nexport namespace MenuItemManager {\r\n export interface IMenuItemUpdate {\r\n itemId: string;\r\n isEnabling: boolean;\r\n }\r\n\r\n export interface IRenderParams {\r\n apiGetter: BruceApi.IGetter;\r\n item: MenuItem.IItem;\r\n }\r\n\r\n export class Manager {\r\n private viewer: Cesium.Viewer;\r\n public get Viewer(): Cesium.Viewer {\r\n return this.viewer;\r\n }\r\n private items: IRenderedItem[] = [];\r\n private visualsRegister: VisualsRegister.Register;\r\n public get VisualsRegister(): VisualsRegister.Register {\r\n return this.visualsRegister;\r\n }\r\n private onUpdate: BruceEvent<IMenuItemUpdate> = <any>null;\r\n public get OnUpdate(): BruceEvent<IMenuItemUpdate> {\r\n if (!this.onUpdate) {\r\n this.onUpdate = new BruceEvent<IMenuItemUpdate>();\r\n }\r\n return this.onUpdate;\r\n }\r\n \r\n \r\n public constructor(viewer: Cesium.Viewer, visualsRegister?: VisualsRegister.Register) {\r\n this.viewer = viewer;\r\n if (!visualsRegister) {\r\n visualsRegister = new VisualsRegister.Register(viewer);\r\n }\r\n this.visualsRegister = visualsRegister;\r\n }\r\n \r\n /**\r\n * Renders a given menu item and all ids children.\r\n * Will return the enabled item id.\r\n * @param params\r\n * @returns \r\n */\r\n public async RenderItem(params: IRenderParams): Promise<string> {\r\n if (this.items.find(x => x.id == params.item.id)) {\r\n return params.item.id;\r\n }\r\n const rItem: IRenderedItem = {\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 switch (params.item.Type) {\r\n case MenuItem.EType.Entities:\r\n rItem.renderManager = new EntitiesRenderManager.Manager(this.viewer, this.visualsRegister, params.apiGetter, <MenuItem.Item.IBruceEntities>params.item);\r\n break;\r\n case MenuItem.EType.EntitiesLoaded:\r\n rItem.renderManager = new EntitiesLoadedRenderManager.Manager(this.viewer, this.visualsRegister, params.apiGetter, <MenuItem.Item.IEntitiesLoaded>params.item);\r\n break;\r\n case MenuItem.EType.EntitiesIds:\r\n rItem.renderManager = new EntitiesIdsRenderManager.Manager(this.viewer, this.visualsRegister, params.apiGetter, <MenuItem.Item.IEntityIds>params.item);\r\n break;\r\n case MenuItem.EType.Entity:\r\n rItem.renderManager = new EntityRenderManager.Manager(this.viewer, this.visualsRegister, params.apiGetter, <MenuItem.Item.IBruceEntity>params.item);\r\n break;\r\n case MenuItem.EType.CadTileset:\r\n rItem.renderManager = new TilesetCadRenderManager.Manager(this.viewer, this.visualsRegister, params.apiGetter, <MenuItem.Item.ICadTileset>params.item);\r\n break;\r\n case MenuItem.EType.Osm:\r\n // TODO;\r\n break;\r\n case MenuItem.EType.PointCloud:\r\n // TODO;\r\n break;\r\n case MenuItem.EType.EntityTileset:\r\n // TODO;\r\n break;\r\n case MenuItem.EType.Kml:\r\n // TODO;\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 if (rItem.renderManager) {\r\n await rItem.renderManager.Init();\r\n }\r\n this.items.push(rItem);\r\n if (params.item.Children) {\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 this.onUpdate?.Trigger({ isEnabling: true, itemId: rItem.id });\r\n return rItem.id;\r\n }\r\n \r\n /**\r\n * Disables a menu item by ids id.\r\n * This will disable all children as well.\r\n * @param id \r\n */\r\n public async RemoveItemById(id: string): Promise<void> {\r\n const item = this.items.find(x => x.id === id);\r\n if (item) {\r\n for (let i = 0; i < item.childIds.length; i++) {\r\n const child = this.items.find(x => x.id === item.childIds[i]);\r\n if (child) {\r\n await this.RemoveItemById(child.id);\r\n }\r\n }\r\n try {\r\n item.renderManager?.Dispose();\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n this.items = this.items.filter(x => x.id !== id);\r\n this.onUpdate?.Trigger({ isEnabling: false, itemId: item.id });\r\n }\r\n }\r\n\r\n public GetEnabledItemIds(): string[] {\r\n return this.items.map(x => x.id);\r\n }\r\n }\r\n}","import { BruceApi, Entity, MenuItem, ObjectUtils, ProjectView, ProjectViewBookmark, Tileset, ZoomControl } from \"bruce-models\";\r\nimport { MenuItemManager } from \"./menu-item-manager\";\r\n\r\n/**\r\n * Utility to help generate menu items for rendering various data.\r\n */\r\nexport namespace RenderHelper {\r\n export interface IParams {\r\n apiGetter: BruceApi.IGetter;\r\n manager: MenuItemManager.Manager;\r\n }\r\n\r\n export async function RenderEntities(params: IParams, entityIds: string[]): Promise<string> {\r\n const item: MenuItem.Item.IEntityIds = {\r\n Caption: \"Rendering Loaded Entities\",\r\n Type: <MenuItem.EType><any>MenuItem.EType.EntitiesLoaded,\r\n id: ObjectUtils.UId(),\r\n Children: [],\r\n BruceEntity: {\r\n EntityIds: entityIds\r\n },\r\n CameraZoomSettings: [\r\n {\r\n DisplayType: ZoomControl.EDisplayType.Model3D,\r\n LODCategoryID: \"glb\",\r\n LODLevel: 0,\r\n MaxZoom: 100000,\r\n MinZoom: 0,\r\n StyleID: 0 // 0 = Attempt to get entity type's default.\r\n }\r\n ]\r\n };\r\n return await params.manager.RenderItem({\r\n apiGetter: params.apiGetter,\r\n item: item\r\n });\r\n }\r\n\r\n export async function RenderEntityTypes(params: IParams, typeIds: string[]): Promise<string[]> {\r\n const renderedItemIds: string[] = [];\r\n for (let i = 0; i < typeIds.length; i++) {\r\n const typeId = typeIds[i];\r\n const menuItem = MenuItem.CreateFromTypeId(typeId, 0);\r\n const itemId = await params.manager.RenderItem({\r\n apiGetter: params.apiGetter,\r\n item: menuItem\r\n });\r\n renderedItemIds.push(itemId);\r\n }\r\n return renderedItemIds;\r\n }\r\n\r\n export async function RenderEntityFilter(params: IParams, filter: Entity.Filter.V1.IFilter): Promise<string> {\r\n throw(new Error(\"Not implemented.\"));\r\n }\r\n\r\n export async function RenderBookmarkItems(params: IParams, viewId: string, bookmarkId: string): Promise<string[]> {\r\n const api = params.apiGetter.getApi(params.apiGetter.accountId, params.apiGetter.env);\r\n const view = await ProjectView.Get(api, viewId);\r\n const bookmark = await ProjectViewBookmark.Get(api, viewId, bookmarkId);\r\n const items = view.Settings?.LayersMenu ?? [];\r\n const enabledItemIds = bookmark.Settings?.selectedItemIds ?? [];\r\n const renderedItemIds: string[] = [];\r\n async function traverseItems(item: MenuItem.IItem): Promise<void> {\r\n if (enabledItemIds.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 < items.length; i++) {\r\n await traverseItems(items[i]);\r\n }\r\n return renderedItemIds;\r\n }\r\n\r\n export async function RenderMenuItems(params: IParams, menuItems: MenuItem.IItem[]): Promise<string[]> {\r\n const renderedItemIds: string[] = [];\r\n for (let i = 0; i < menuItems.length; i++) {\r\n const menuItem = menuItems[i];\r\n const itemId = await params.manager.RenderItem({\r\n apiGetter: params.apiGetter,\r\n item: menuItem\r\n });\r\n renderedItemIds.push(itemId);\r\n }\r\n return renderedItemIds;\r\n }\r\n\r\n export async function RenderTileset(params: IParams, tilesetId: string): Promise<string> {\r\n const api = params.apiGetter.getApi(params.apiGetter.accountId, params.apiGetter.env);\r\n const tileset = await Tileset.Get(api, tilesetId);\r\n if (tileset.type == Tileset.EType.Cad) {\r\n const menuItem: MenuItem.Item.ICadTileset = {\r\n Caption: \"Rendering Tileset\",\r\n FlyTo: true,\r\n id: ObjectUtils.UId(),\r\n tileset: {\r\n TilesetID: tilesetId\r\n },\r\n Type: MenuItem.EType.CadTileset,\r\n styleId: 0,\r\n Children: []\r\n };\r\n return await params.manager.RenderItem({\r\n item: menuItem,\r\n apiGetter: params.apiGetter\r\n });\r\n }\r\n else {\r\n throw(new Error(\"Tileset type not supported.\"));\r\n }\r\n }\r\n}","import { BruceApi, ProjectView, ProjectViewBookmark, ProjectViewTileSource } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\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\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\nenum EDefaultTerrain {\r\n CesiumWorldTerrain = \"cesiumworldterrain\",\r\n Linz = \"linz\",\r\n FlatTerrain = \"flatterrain\"\r\n}\r\n\r\nconst DEFAULT_TERRAIN_NAMES = [\r\n EDefaultTerrain.CesiumWorldTerrain,\r\n EDefaultTerrain.Linz,\r\n EDefaultTerrain.FlatTerrain\r\n];\r\n\r\nfunction isDefaultTerrain(name: string | EDefaultTerrain): boolean {\r\n name = prepLegacyName(name);\r\n return DEFAULT_TERRAIN_NAMES.includes(<EDefaultTerrain>name);\r\n}\r\n\r\nfunction createTerrainBId(source: ProjectViewTileSource.ITerrainSource): string {\r\n if (!source) {\r\n return \"\";\r\n }\r\n if (isDefaultTerrain(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\nfunction createImageryBId(source: ProjectViewTileSource.IMapSource): string {\r\n if (!source) {\r\n return \"\";\r\n }\r\n if (isDefaultImagery(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\nenum EDefaultImagery {\r\n BingMapsAerial = \"bingmapsaerial\",\r\n BingMapsAerialWithLabels = \"bingmapsaerialwithlabels\",\r\n BingMapsRoads = \"bingmapsroads\",\r\n MapboxSatellite = \"mapboxsatellite\",\r\n MapBoxStreets = \"mapboxstreets\",\r\n MapBoxStreetsClassic = \"mapboxstreetsclassic\",\r\n EsriWorldImagery = \"esriworldimagery\",\r\n EsriWorldStreetMap = \"esriworldstreetmap\",\r\n EsriNationalGeographic = \"esrinationalgeographic\",\r\n OpenStreetMap = \"openstreetmap\",\r\n StamenWaterColor = \"stamenwatercolor\",\r\n StamenToner = \"stamentoner\",\r\n Grid = \"grid\"\r\n}\r\n\r\nconst DEFAULT_IMAGERY_NAMES = [\r\n EDefaultImagery.BingMapsAerial,\r\n EDefaultImagery.BingMapsAerialWithLabels,\r\n EDefaultImagery.BingMapsRoads,\r\n EDefaultImagery.MapboxSatellite,\r\n EDefaultImagery.MapBoxStreets,\r\n EDefaultImagery.MapBoxStreetsClassic,\r\n EDefaultImagery.EsriWorldImagery,\r\n EDefaultImagery.EsriWorldStreetMap,\r\n EDefaultImagery.EsriNationalGeographic,\r\n EDefaultImagery.OpenStreetMap,\r\n EDefaultImagery.StamenWaterColor,\r\n EDefaultImagery.StamenToner,\r\n EDefaultImagery.Grid\r\n];\r\n\r\nfunction isDefaultImagery(name: string | EDefaultImagery): boolean {\r\n name = prepLegacyName(name);\r\n return DEFAULT_IMAGERY_NAMES.includes(<EDefaultImagery>name);\r\n}\r\n\r\nconst DEFAULT_BING_KEY = \"AqL0uYT5T84jiJeX55_b9zJeeP3MX2p1WLOHH4ljIEPZ7ZL2M81bYLzyYeSwuzzl\";\r\nconst DEFAULT_MAPBOX_KEY = \"pk.eyJ1IjoiYWxleHRodW5kZXIiLCJhIjoiY2psbHJxbnN5MTBvbzNxczZwMHNpeTI0MCJ9.fdoj2QW_7n8RV4e0NCFgZA\";\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\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 interface ILayerExt extends Cesium.ImageryLayer {\r\n _bId?: string;\r\n }\r\n\r\n export interface IParams {\r\n apiGetter: BruceApi.IGetter;\r\n tilesetIds: string[];\r\n viewer: Cesium.Viewer;\r\n ignoreIds?: string[];\r\n }\r\n\r\n export interface ILegacyViewParams {\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 ILegacyParams {\r\n data: ProjectViewTileSource.IMapSource;\r\n apiGetter: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export function MarkProvider(provider: Cesium.ImageryLayer, id: string): void {\r\n (provider as ILayerExt)._bId = id;\r\n }\r\n\r\n export function Render(params: IParams): void {\r\n throw(\"Not implemented\");\r\n }\r\n\r\n function RenderLegacy(params: ILegacyParams): ILayerExt {\r\n const enabled: ILayerExt[] = gatherEnabledImageries(params.viewer);\r\n const tile = params.data;\r\n const bId = createImageryBId(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 (isDefaultImagery(tile.Name)) {\r\n let provider: Cesium.ImageryProvider = <any>null;\r\n // TODO: Rest of defaults.\r\n // TODO: Should be enum.\r\n switch (prepLegacyName(tile.Name)) {\r\n case EDefaultImagery.BingMapsAerial:\r\n // TODO: Read account key if available.\r\n provider = new Cesium.BingMapsImageryProvider({\r\n url: \"https://dev.virtualearth.net\",\r\n mapStyle: Cesium.BingMapsStyle.AERIAL,\r\n key: DEFAULT_BING_KEY\r\n });\r\n break;\r\n case EDefaultImagery.BingMapsAerialWithLabels:\r\n // TODO: Read account key if available.\r\n provider = new Cesium.BingMapsImageryProvider({\r\n url: \"https://dev.virtualearth.net\",\r\n mapStyle: Cesium.BingMapsStyle.AERIAL_WITH_LABELS,\r\n key: DEFAULT_BING_KEY\r\n });\r\n break;\r\n case EDefaultImagery.BingMapsRoads:\r\n // TODO: Read account key if available.\r\n provider = new Cesium.BingMapsImageryProvider({\r\n url: \"https://dev.virtualearth.net\",\r\n mapStyle: Cesium.BingMapsStyle.ROAD_ON_DEMAND,\r\n key: DEFAULT_BING_KEY\r\n });\r\n break;\r\n case EDefaultImagery.MapboxSatellite:\r\n // TODO: Read account key if available.\r\n provider = new Cesium.MapboxImageryProvider({\r\n mapId: \"mapbox.satellite\",\r\n accessToken: DEFAULT_MAPBOX_KEY\r\n });\r\n break;\r\n case EDefaultImagery.MapBoxStreets:\r\n // TODO: Read account key if available.\r\n provider = new Cesium.MapboxImageryProvider({\r\n mapId: \"satellite-streets-v11\",\r\n accessToken: DEFAULT_MAPBOX_KEY\r\n });\r\n break;\r\n case EDefaultImagery.MapBoxStreetsClassic:\r\n // TODO: Read account key if available.\r\n provider = new Cesium.MapboxImageryProvider({\r\n mapId: \"streets-v11\",\r\n accessToken: DEFAULT_MAPBOX_KEY\r\n });\r\n break;\r\n case 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 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 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 EDefaultImagery.OpenStreetMap:\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: \"https://a.tile.openstreetmap.org/\"\r\n });\r\n break;\r\n case 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 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 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 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: 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: 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: tile.FileExtension,\r\n minimumLevel: min,\r\n maximumLevel: max\r\n });\r\n break;\r\n case \"MapBoxImagery\":\r\n // TODO: Read default account key when missing.\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 + tile.ProgramKey\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 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 RenderLegacyView(params: ILegacyViewParams): Promise<void> {\r\n const api = params.apiGetter.getApi(params.apiGetter.accountId, params.apiGetter.env);\r\n\r\n const view = await ProjectView.Get(api, params.viewId);\r\n let bookmark: ProjectViewBookmark.IBookmark = <any>null;\r\n if (params.bookmarkId) {\r\n bookmark = await ProjectViewBookmark.Get(api, params.viewId, params.bookmarkId);\r\n }\r\n\r\n const data: ProjectViewTileSource.IMapSource[] = [];\r\n const dataNames: string[] = [];\r\n if (bookmark.Settings?.imagery) {\r\n for (let i = 0; i < bookmark.Settings.imagery.length; i++) {\r\n const source = bookmark.Settings.imagery[i];\r\n dataNames.push(source.title);\r\n }\r\n }\r\n else if (view.Settings?.DefaultMapTiles) {\r\n dataNames.push(view.Settings.DefaultMapTiles);\r\n }\r\n const tiles = view.Settings?.CesiumMapSources ?? [];\r\n await ProjectViewTileSource.MergeMapTemplateData(params.apiGetter, tiles, view.Settings?.CesiumMapSources == null);\r\n\r\n for (let i = 0; i < dataNames.length; i++) {\r\n const name = dataNames[i];\r\n for (let j = 0; j < tiles.length; j++) {\r\n const tile = tiles[j];\r\n if (CompareLegacyNames(tile.Name, name)) {\r\n data.push(tile);\r\n break;\r\n }\r\n } \r\n }\r\n\r\n let enabled: ILayerExt[] = gatherEnabledImageries(params.viewer);\r\n const layers: Cesium.ImageryLayer[] = [];\r\n\r\n // Gather layers we want to render.\r\n // Any new layer is added to viewer at the bottom.\r\n if (params.ignoreIds) {\r\n for (let i = 0; i < params.ignoreIds.length; i++) {\r\n const id = params.ignoreIds[i];\r\n const layer = enabled.find((x) => {\r\n const layer = x as ILayerExt;\r\n if (layer._bId === id) {\r\n return true;\r\n }\r\n });\r\n if (layer) {\r\n layers.push(layer);\r\n }\r\n }\r\n }\r\n for (let i = 0; i < data.length; i++) {\r\n const tile = data[i];\r\n const layer = RenderLegacy({\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 enabled = enabled.reverse();\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 Terrain {\r\n export interface IProviderExt extends Cesium.CesiumTerrainProvider {\r\n _bId: string;\r\n }\r\n\r\n export interface IParams {\r\n apiGetter: BruceApi.IGetter;\r\n tilesetId: string;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export interface ILegacyParams {\r\n data: ProjectViewTileSource.ITerrainSource;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export function Render(params: IParams): void {\r\n throw(\"Not implemented\");\r\n }\r\n\r\n export function RenderLegacy(params: ILegacyParams): void {\r\n const bId = createTerrainBId(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 (isDefaultTerrain(params.data.Name)) {\r\n const name = prepLegacyName(params.data.Name);\r\n switch (name) {\r\n case EDefaultTerrain.CesiumWorldTerrain:\r\n provider = <any>Cesium.createWorldTerrain({ \r\n requestVertexNormals: true\r\n });\r\n break;\r\n case 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 case EDefaultTerrain.FlatTerrain:\r\n provider = <any>new Cesium.EllipsoidTerrainProvider();\r\n break;\r\n }\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 params.viewer.terrainProvider = provider;\r\n }\r\n }\r\n }\r\n}","import { BruceApi, Camera, ProjectView, ProjectViewBookmark, ProjectViewTileSource } from \"bruce-models\";\r\nimport { MenuItemManager } from \"./menu-item-manager\";\r\nimport { RenderHelper } from \"./render-helper\";\r\nimport * as Cesium from \"cesium\";\r\nimport { TileRenderEngine } from \"./tile-render-engine\";\r\n\r\nexport namespace ViewRenderEngine {\r\n export interface IRenderParams {\r\n viewId: string;\r\n bookmarkId?: string;\r\n skipTransition: boolean;\r\n apiGetter: BruceApi.IGetter;\r\n manager: MenuItemManager.Manager;\r\n }\r\n\r\n export async function Render(params: IRenderParams): Promise<void> {\r\n const api = params.apiGetter.getApi(params.apiGetter.accountId, params.apiGetter.env);\r\n const view = await ProjectView.Get(api, params.viewId);\r\n let bookmark: ProjectViewBookmark.IBookmark = <any>null;\r\n if (params.bookmarkId) {\r\n bookmark = await ProjectViewBookmark.Get(api, params.viewId, params.bookmarkId);\r\n }\r\n\r\n let terrainTiles = view.Settings?.CesiumTerrainSources ?? [];\r\n let terrainTile: ProjectViewTileSource.ITerrainSource = <any>null;\r\n let terrainTileName: string = <any>null;\r\n if (bookmark?.Settings?.terrain) {\r\n terrainTileName = bookmark.Settings.terrain;\r\n }\r\n else {\r\n terrainTileName = <string>view.Settings?.DefaultTerrain;\r\n }\r\n await ProjectViewTileSource.MergeTerrainTemplateData(params.apiGetter, terrainTiles, view.Settings?.CesiumTerrainSources == null);\r\n for (let i = 0; i < terrainTiles.length; i++) {\r\n const tile = terrainTiles[i];\r\n if (TileRenderEngine.CompareLegacyNames(tile.Name, terrainTileName)) {\r\n terrainTile = tile;\r\n break;\r\n }\r\n }\r\n if (terrainTile) {\r\n TileRenderEngine.Terrain.RenderLegacy({\r\n data: terrainTile,\r\n viewer: params.manager.Viewer,\r\n });\r\n }\r\n\r\n await TileRenderEngine.Map.RenderLegacyView({\r\n apiGetter: params.apiGetter,\r\n bookmarkId: <string>params.bookmarkId,\r\n viewer: params.manager.Viewer,\r\n viewId: params.viewId,\r\n ignoreIds: []\r\n });\r\n\r\n // TODO: Other scene settings.\r\n // TODO: Hidden entities.\r\n // TODO: Rendered relationships.\r\n\r\n let frustum = bookmark.Settings?.cameraFrustum;\r\n if (frustum == null) {\r\n frustum = Camera.EFrustum.Perspective;\r\n }\r\n const scene = params.manager.Viewer.scene;\r\n const curFrustum = scene.camera.frustum instanceof Cesium.OrthographicFrustum ? Camera.EFrustum.Orthographic : Camera.EFrustum.Perspective;\r\n if (curFrustum != frustum) {\r\n if (frustum == Camera.EFrustum.Perspective) {\r\n scene.camera.switchToPerspectiveFrustum();\r\n scene.screenSpaceCameraController.enableTilt = true;\r\n }\r\n else {\r\n scene.camera.switchToOrthographicFrustum();\r\n scene.screenSpaceCameraController.enableTilt = false;\r\n }\r\n params.skipTransition = true;\r\n }\r\n\r\n const camera = bookmark.Camera;\r\n const pos = Cesium.Cartesian3.fromDegrees(\r\n +camera.position.longitude, \r\n +camera.position.latitude, \r\n +camera.position.height\r\n );\r\n params.manager.Viewer.scene.camera.flyTo({\r\n destination: pos,\r\n orientation: {\r\n heading: +camera.heading,\r\n pitch: +camera.pitch,\r\n roll: +camera.roll\r\n },\r\n duration: params.skipTransition ? 0 : 2\r\n });\r\n\r\n let go = bookmark?.Settings?.groundOcclusion;\r\n if (go == null) {\r\n go = view.Settings?.GroundOcclusion;\r\n }\r\n if (go == null) {\r\n go = false;\r\n }\r\n params.manager.Viewer.scene.globe.depthTestAgainstTerrain = go;\r\n\r\n const enabledItems = params.manager.GetEnabledItemIds();\r\n const newItemIds = bookmark?.Settings?.selectedItemIds ?? [];\r\n for (const id of enabledItems) {\r\n if (newItemIds.indexOf(id) === -1) {\r\n params.manager.RemoveItemById(id);\r\n }\r\n }\r\n if (params.bookmarkId) {\r\n await RenderHelper.RenderBookmarkItems({\r\n apiGetter: params.apiGetter,\r\n manager: params.manager,\r\n }, params.viewId, params.bookmarkId);\r\n }\r\n }\r\n}","import { DelayQueue, EntityType, MathUtils, ObjectUtils } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { DrawingUtils } from \"../../utils/drawing-utils\";\r\nimport { VisualsRegister } from \"../visuals-register\";\r\nimport { IRenderAddon } from \"./render-addon\";\r\n\r\nfunction createContainer(viewer: Cesium.Viewer): HTMLElement {\r\n if (!viewer.canvas.parentElement) {\r\n return <any>null;\r\n }\r\n const container = document.createElement(\"div\");\r\n container.setAttribute(\"style\",\r\n `\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n pointer-events: none;\r\n z-index: 1;\r\n `);\r\n (viewer.canvas.parentElement as HTMLElement).appendChild(container);\r\n return container;\r\n}\r\n\r\nfunction destroyContainer(container: HTMLElement): void {\r\n if (container?.parentElement && container.parentElement.contains(container)) {\r\n container.parentElement.removeChild(container);\r\n }\r\n}\r\n\r\ninterface IItem {\r\n element: HTMLElement;\r\n text: string;\r\n}\r\n\r\nnamespace MPolyline {\r\n export function Render(container: HTMLElement, viewer: Cesium.Viewer, entity: Cesium.Entity): IItem[] {\r\n const items: IItem[] = [];\r\n\r\n if (entity.polyline?.positions) {\r\n let pointsUnk = entity.polyline.positions;\r\n if (pointsUnk.getValue) {\r\n pointsUnk = pointsUnk.getValue(viewer.scene.lastRenderTime);\r\n }\r\n const points = <any>pointsUnk as Cesium.Cartesian3[];\r\n if (points && points.length) {\r\n let totalLength = 0;\r\n for (let i = 0; i < points.length; i++) {\r\n const p1 = points[i];\r\n const p2 = points[i + 1];\r\n if (p1 && p2) {\r\n totalLength += Cesium.Cartesian3.distance(p1, p2);\r\n }\r\n }\r\n if (totalLength <= 0) {\r\n return items;\r\n }\r\n\r\n const center = DrawingUtils.PointAcrossPolyline(viewer, points, totalLength / 2);\r\n const screenPos = viewer.scene.cartesianToCanvasCoordinates(center);\r\n\r\n if (screenPos) {\r\n const element = document.createElement(\"div\");\r\n element.setAttribute(\"style\",\r\n `\r\n position: absolute;\r\n top: ${screenPos.y}px;\r\n left: ${screenPos.x}px;\r\n color: white;\r\n font-size: 14px;\r\n z-index: 1;\r\n padding: 4px 6px;\r\n border-radius: 3px;\r\n background-color: black;\r\n color: white;\r\n `);\r\n const text = MathUtils.Round(totalLength, 3) + \"m\";\r\n element.innerText = text;\r\n const bounds = element.getBoundingClientRect();\r\n element.style.marginLeft = (-bounds.width / 2) + \"px\";\r\n element.style.marginTop = (-bounds.height - 10) + \"px\";\r\n container.appendChild(element);\r\n items.push({ element, text: text });\r\n }\r\n }\r\n }\r\n return items;\r\n }\r\n}\r\n\r\nnamespace MPoint {\r\n export function Render(container: HTMLElement, viewer: Cesium.Viewer, entity: Cesium.Entity): IItem[] {\r\n const items: IItem[] = [];\r\n\r\n if (entity?.position) {\r\n let posUnk: any = <any>entity.position;\r\n if (posUnk.getValue) {\r\n posUnk = posUnk.getValue(viewer.scene.lastRenderTime);\r\n }\r\n const pos = posUnk as Cesium.Cartesian3;\r\n if (!pos?.x) {\r\n return items;\r\n }\r\n\r\n const screenPos = viewer.scene.cartesianToCanvasCoordinates(pos);\r\n if (screenPos) {\r\n const element = document.createElement(\"div\");\r\n element.setAttribute(\"style\",\r\n `\r\n position: absolute;\r\n top: ${screenPos.y}px;\r\n left: ${screenPos.x}px;\r\n color: white;\r\n font-size: 14px;\r\n z-index: 1;\r\n padding: 4px 6px;\r\n border-radius: 3px;\r\n background-color: black;\r\n color: white;\r\n `);\r\n const point = Cesium.Cartographic.fromCartesian(pos);\r\n const lat = MathUtils.Round(Cesium.Math.toDegrees(point.latitude), 4);\r\n const lon = MathUtils.Round(Cesium.Math.toDegrees(point.longitude), 4);\r\n const alt = MathUtils.Round(Cesium.Math.toDegrees(point.height), 3);\r\n const text = `${lat}, ${lon}, ${alt}`;\r\n element.innerText = text;\r\n const bounds = element.getBoundingClientRect();\r\n element.style.marginLeft = (-bounds.width / 2) + \"px\";\r\n element.style.marginTop = (-bounds.height - 30) + \"px\";\r\n container.appendChild(element);\r\n items.push({ element, text: text });\r\n }\r\n }\r\n return items;\r\n }\r\n}\r\n\r\nfunction findVisual(visuals: VisualsRegister.Visual[]): VisualsRegister.Visual {\r\n visuals.sort((a, b) => {\r\n if (a.show && !b.show) {\r\n return -1;\r\n }\r\n if (!a.show && b.show) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n for (let i = 0; i < visuals.length; i++) {\r\n const visual = visuals[i];\r\n if (visual instanceof Cesium.Entity) {\r\n return visual;\r\n }\r\n }\r\n return <any>null;\r\n}\r\n\r\n/**\r\n * Measure addon will render measurement details on the position of the 3d object.\r\n * For example it will add lengths to the line segments of a polyline.\r\n */\r\nexport class MeasureAddon implements IRenderAddon {\r\n public Id: string = ObjectUtils.UId();\r\n private visual: VisualsRegister.Visual = <any>null;\r\n private viewer: Cesium.Viewer;\r\n private cRenderListener: Cesium.Event.RemoveCallback;\r\n private updateQueue: DelayQueue;\r\n private items: IItem[] = [];\r\n private container: HTMLElement = <any>null;\r\n\r\n\r\n constructor(viewer: Cesium.Viewer) {\r\n this.viewer = viewer;\r\n this.cRenderListener = this.viewer.scene.postRender.addEventListener(() => {\r\n this.updateQueue.Call();\r\n });\r\n this.updateQueue = new DelayQueue(() => {\r\n this.doUpdate();\r\n }, 1000 / 60);\r\n }\r\n\r\n private doUpdate(): void {\r\n if (!this.container) {\r\n this.container = createContainer(this.viewer);\r\n }\r\n this.Remove();\r\n if (!this.container) {\r\n return;\r\n }\r\n const visual = this.visual;\r\n if (visual instanceof Cesium.Entity) {\r\n const entity = visual as Cesium.Entity;\r\n if (entity.polyline) {\r\n this.items = MPolyline.Render(this.container, this.viewer, entity);\r\n }\r\n else if (entity.point) {\r\n this.items = MPoint.Render(this.container, this.viewer, entity);\r\n }\r\n }\r\n else {\r\n // We don't support prims or tiles.\r\n }\r\n }\r\n\r\n public Render(visuals: VisualsRegister.Visual[]): void {\r\n const newVisual = findVisual(visuals);\r\n if (newVisual != this.visual) {\r\n this.Remove();\r\n }\r\n this.visual = newVisual;\r\n this.updateQueue.Call(true);\r\n }\r\n\r\n public Remove(): void {\r\n for (let i = 0; i < this.items.length; i++) {\r\n const item = this.items[i];\r\n if (item.element?.parentElement && item.element.parentElement.contains(item.element)) {\r\n item.element.parentElement.removeChild(item.element);\r\n }\r\n }\r\n this.items = [];\r\n }\r\n\r\n public Dispose(): void {\r\n this.cRenderListener();\r\n destroyContainer(this.container);\r\n }\r\n}"],"names":["Cesium.Cartesian2","Cesium.Cartographic","Cesium.Math","Cesium.Viewer","Cesium.ArcGisMapServerImageryProvider","Cesium.ScreenSpaceEventType","Cesium.Cartesian3","Cesium.EllipsoidGeodesic","Cesium.Entity","Cesium.Color","Cesium.HeightReference","Cesium.HorizontalOrigin","Cesium.VerticalOrigin","Cesium.ClassificationType","Cesium.ArcType","Cesium.PolygonHierarchy","Cesium.ShadowMode","Cesium.PolylineGraphics","Cesium.HeadingPitchRoll","Cesium.Transforms","Cesium.ColorBlendMode","Entity","Cesium.Primitive","Cesium.Cesium3DTileFeature","colorToCColor","Cesium.Matrix4","Cesium.Cesium3DTileset","Cesium.HeadingPitchRange","Cesium.BingMapsImageryProvider","Cesium.BingMapsStyle","Cesium.MapboxImageryProvider","Cesium.OpenStreetMapImageryProvider","Cesium.GridImageryProvider","Cesium.GeographicTilingScheme","Cesium.ImageryLayer","Cesium.UrlTemplateImageryProvider","Cesium.TileMapServiceImageryProvider","Cesium.createWorldTerrain","Cesium.CesiumTerrainProvider","Cesium.EllipsoidTerrainProvider","Cesium.OrthographicFrustum"],"mappings":"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"}
1
+ {"version":3,"file":"bruce-cesium.es5.js","sources":["../src/viewer/cesium-view-monitor.ts","../src/viewer/viewer-utils.ts","../src/utils/drawing-utils.ts","../src/utils/measure-utils.ts","../src/utils/entity-utils.ts","../src/rendering/render-managers/render-manager.ts","../src/rendering/entity-render-engine.ts","../src/rendering/render-managers/entities/entities-render-manager.ts","../src/rendering/render-managers/entities/entities-loaded-render-manager.ts","../src/rendering/visuals-register.ts","../src/rendering/render-managers/entities/entities-ids-render-manager.ts","../src/rendering/render-managers/entities/entity-render-manager.ts","../src/rendering/tileset-render-engine.ts","../src/rendering/render-managers/tilesets/tileset-cad-render-manager.ts","../src/rendering/menu-item-manager.ts","../src/rendering/render-helper.ts","../src/rendering/tile-render-engine.ts","../src/rendering/view-render-engine.ts","../src/rendering/render-addons/measure-addon.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.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 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 }\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 export interface IViewContainer extends HTMLElement {\r\n _cViewer?: Cesium.Viewer;\r\n }\r\n\r\n /**\r\n * Creates a Cesium viewer in a given HTML container and returns it.\r\n * This will kill all widgets in the process.\r\n * @param container \r\n * @returns \r\n */\r\n export function InitViewer(container: HTMLElement): Cesium.Viewer {\r\n if ((<IViewContainer>container)._cViewer) {\r\n throw new Error(\"Container already has a viewer.\");\r\n }\r\n const cViewer = new Cesium.Viewer(container, {\r\n imageryProvider: new Cesium.ArcGisMapServerImageryProvider({\r\n url: \"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer\",\r\n enablePickFeatures: false\r\n })\r\n });\r\n cViewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);\r\n cViewer.camera.percentageChanged = 0.05;\r\n ViewerUtils.DestroyWidget(cViewer.timeline);\r\n ViewerUtils.DestroyWidget(cViewer.vrButton);\r\n ViewerUtils.DestroyWidget(cViewer.sceneModePicker);\r\n ViewerUtils.DestroyWidget(cViewer.homeButton);\r\n ViewerUtils.DestroyWidget(cViewer.fullscreenButton);\r\n ViewerUtils.DestroyWidget(cViewer.baseLayerPicker);\r\n ViewerUtils.StyleContainer(cViewer);\r\n (<IViewContainer>container)._cViewer = cViewer;\r\n return cViewer;\r\n }\r\n\r\n export function GetViewerFromContainer(container: HTMLElement): Cesium.Viewer {\r\n return <any>(<IViewContainer>container)._cViewer;\r\n }\r\n\r\n export function DestroyWidget(widget: IWidget): void {\r\n if (widget && !widget.isDestroyed()) {\r\n widget.destroy();\r\n }\r\n }\r\n\r\n /**\r\n * Hides all unnecessary elements from the Cesium viewer container.\r\n * @param viewer \r\n */\r\n export function StyleContainer(viewer: Cesium.Viewer) {\r\n const container = viewer.container;\r\n const genContainer = container.getElementsByClassName(\"cesium-viewer\")?.[0];\r\n if (genContainer) {\r\n const children = genContainer.children;\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i] as HTMLElement;\r\n if (!child.classList.contains(\"cesium-viewer-cesiumWidgetContainer\")) {\r\n child.style.display = \"none\";\r\n }\r\n }\r\n }\r\n\r\n const canvas = viewer.canvas as HTMLElement;\r\n canvas.style.width = \"100%\";\r\n canvas.style.height = \"100%\";\r\n\r\n const widget = canvas.parentElement as HTMLElement;\r\n widget.style.width = \"100%\";\r\n widget.style.height = \"100%\";\r\n widget.style.touchAction = \"none\";\r\n\r\n const widgetContainer = widget.parentElement as HTMLElement;\r\n widgetContainer.style.width = \"100%\";\r\n widgetContainer.style.height = \"100%\";\r\n\r\n const viewerContainer = widgetContainer.parentElement as HTMLElement;\r\n viewerContainer.style.fontFamily = \"sans-serif\";\r\n viewerContainer.style.fontSize = \"16px\";\r\n viewerContainer.style.overflow = \"hidden\";\r\n viewerContainer.style.display = \"block\";\r\n viewerContainer.style.position = \"relative\";\r\n viewerContainer.style.top = \"0\";\r\n viewerContainer.style.left = \"0\";\r\n viewerContainer.style.width = \"100%\";\r\n viewerContainer.style.height = \"100%\";\r\n }\r\n}","import * as Cesium from \"cesium\";\r\n\r\nexport namespace DrawingUtils {\r\n /**\r\n * Returns the point across a polyline at a given distance.\r\n * If the distance exceeds the length of the line, the point will be placed at the end of the line.\r\n * @param viewer \r\n * @param positions \r\n * @param distance \r\n * @returns \r\n */\r\n export function PointAcrossPolyline(viewer: Cesium.Viewer, positions: Cesium.Cartesian3[], distance: number): Cesium.Cartesian3 {\r\n if (positions.length > 1) {\r\n let currentDistance = 0;\r\n for (let i = 0; i < positions.length - 1; i++) {\r\n const length = Cesium.Cartesian3.distance(positions[i], positions[i + 1]);\r\n if (length + currentDistance >= distance) {\r\n const carto1 = Cesium.Cartographic.fromCartesian(positions[i]);\r\n const carto2 = Cesium.Cartographic.fromCartesian(positions[i + 1]);\r\n const geodesic = new Cesium.EllipsoidGeodesic(carto1, carto2, viewer.scene.globe.ellipsoid);\r\n const position = geodesic.interpolateUsingSurfaceDistance(distance - currentDistance);\r\n const height = (carto1.height + carto2.height) / 2;\r\n return Cesium.Cartesian3.fromRadians(position.longitude, position.latitude, height);\r\n }\r\n else {\r\n currentDistance += length;\r\n }\r\n }\r\n }\r\n else if (positions.length > 0) {\r\n return positions[0];\r\n }\r\n else {\r\n return <any>null;\r\n }\r\n return positions[positions.length - 1];\r\n }\r\n}","import * as Cesium from \"cesium\";\r\n\r\nexport namespace MeasureUtils {\r\n /**\r\n * Returns the total distance in meters between an array of points.\r\n * This distance is NOT following the terrain.\r\n * @param posses \r\n * @returns \r\n */\r\n export function MeasurePolyline(posses: Cesium.Cartesian3[]): number {\r\n if (posses.length < 2) {\r\n return 0;\r\n }\r\n let totalLength = 0;\r\n let pos1 = null;\r\n let pos2 = null;\r\n for (let i = 0; i < posses.length; i++) {\r\n if (pos1 == null) {\r\n pos1 = posses[i];\r\n }\r\n else if (pos2 == null) {\r\n pos2 = posses[i];\r\n totalLength += Cesium.Cartesian3.distance(pos1, pos2);\r\n pos1 = pos2;\r\n pos2 = null;\r\n }\r\n }\r\n return totalLength;\r\n }\r\n}","import { Cartes, Carto, Entity as E, Geometry } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityRenderEngine } from \"../rendering/entity-render-engine\";\r\nimport { DrawingUtils } from \"./drawing-utils\";\r\nimport { MeasureUtils } from \"./measure-utils\";\r\n\r\nfunction traverseEntity(cEntity: EntityRenderEngine.ICesiumEntityExt, arr: EntityRenderEngine.ICesiumEntityExt[]): void {\r\n if (cEntity._parentEntity) {\r\n traverseEntity(cEntity._parentEntity, arr);\r\n }\r\n if (cEntity._siblingGraphics) {\r\n for (let i = 0; i < cEntity._siblingGraphics.length; i++) {\r\n const sibling = cEntity._siblingGraphics[i];\r\n traverseEntity(sibling, arr);\r\n }\r\n }\r\n arr.push(cEntity);\r\n}\r\n\r\nexport namespace EntityUtils {\r\n /**\r\n * Returns an entity's position.\r\n * This will attempt to calculate it from multiple sources of data.\r\n * @param viewer \r\n * @param entity \r\n * @returns \r\n */\r\n export function GetPos(viewer: Cesium.Viewer, entity: E.IEntity): Cesium.Cartesian3 {\r\n if (entity.location && Carto.ValidateCarto(entity.location)) {\r\n const location = entity.location;\r\n return Cesium.Cartesian3.fromDegrees(location.longitude, location.latitude, 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(point.longitude, point.latitude, 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(x.longitude, x.latitude, x.altitude));\r\n const length = MeasureUtils.MeasurePolyline(posses);\r\n if (length > 0) {\r\n const point = DrawingUtils.PointAcrossPolyline(viewer, posses, length / 2);\r\n if (point && Cartes.ValidateCartes3(point)) {\r\n return point;\r\n }\r\n }\r\n else {\r\n return posses[0];\r\n }\r\n }\r\n }\r\n const pRings = entity.geometry.Polygon;\r\n if (pRings && typeof pRings == \"object\") {\r\n const boundary = pRings.find(x => x.Facing == Geometry.EPolygonRingType.Boundaries)\r\n if (boundary?.LinearRing) {\r\n const points = Geometry.ParsePoints(boundary.LinearRing);\r\n const point = Carto.GetCenter(points);\r\n if (point && Carto.ValidateCarto(point)) {\r\n return Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\r\n }\r\n }\r\n }\r\n }\r\n if (entity.boundaries) {\r\n const point: Carto.ICarto = {\r\n latitude: (entity.boundaries.minLatitude + entity.boundaries.maxLatitude) / 2, \r\n longitude: (entity.boundaries.minLongitude + 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 return <any>null;\r\n }\r\n\r\n /**\r\n * Returns entity and any associated parent/sibling entities as a flat array.\r\n * @param entity \r\n */\r\n export function GatherEntity(entity: Cesium.Entity): Cesium.Entity[] {\r\n if (entity instanceof Cesium.Entity) {\r\n const cEntity = entity as EntityRenderEngine.ICesiumEntityExt;\r\n const items: EntityRenderEngine.ICesiumEntityExt[] = [];\r\n traverseEntity(cEntity, items);\r\n return items;\r\n }\r\n return [entity];\r\n }\r\n}","import { EntitiesRenderManager } from \"./entities/entities-render-manager\";\r\nimport { EntitiesLoadedRenderManager } from \"./entities/entities-loaded-render-manager\";\r\nimport { EntitiesIdsRenderManager } from \"./entities/entities-ids-render-manager\";\r\nimport { EntityRenderManager } from \"./entities/entity-render-manager\";\r\nimport { EntityUtils } from \"../../utils/entity-utils\";\r\nimport { Entity, ZoomControl } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { TilesetCadRenderManager } from \"./tilesets/tileset-cad-render-manager\";\r\n\r\nexport namespace RenderManager {\r\n export interface IManager {\r\n Init(): Promise<void>;\r\n Dispose(): void;\r\n }\r\n\r\n export type Type = EntitiesRenderManager.Manager | \r\n EntitiesLoadedRenderManager.Manager | \r\n EntitiesIdsRenderManager.Manager | \r\n EntityRenderManager.Manager |\r\n TilesetCadRenderManager.Manager;\r\n\r\n export namespace Utils {\r\n export function DetermineZoomItem(viewer: Cesium.Viewer, entity: Entity.IEntity, zoomControl: ZoomControl.IItem[]): ZoomControl.IItem {\r\n const pos = EntityUtils.GetPos(viewer, entity);\r\n if (!pos) {\r\n return <any>null;\r\n }\r\n const cameraPos = viewer.camera.position;\r\n const distance = Cesium.Cartesian3.distance(pos, cameraPos);\r\n return GetZoomControlFromDistance(zoomControl, distance);\r\n }\r\n \r\n export function GetZoomControlFromDistance(zoomControl: ZoomControl.IItem[], distance: number): ZoomControl.IItem {\r\n for (let i = 0; i < zoomControl.length; i++) {\r\n let zoomItem = zoomControl[i];\r\n if ((distance >= <number>zoomItem.MinZoom) && (distance <= <number>zoomItem.MaxZoom)) {\r\n return zoomItem;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n }\r\n}","import * as Cesium from \"cesium\";\r\nimport { Entity, BruceApi, ZoomControl, Style, EntityTag, Calculator, Color, Geometry, Carto, EntityLod, EntityType, IDictionary, ClientFile } from \"bruce-models\";\r\nimport { EntityUtils } from \"../utils/entity-utils\";\r\nimport { RenderManager } from \"./render-managers/render-manager\";\r\nimport { VisualsRegister } from \"./visuals-register\";\r\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(x.longitude, x.latitude, 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 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 zIndex;\r\n}\r\n\r\nasync function getStyle(api: BruceApi.Api, entity: Entity.IEntity, styleId: number): Promise<Style.IStyle> {\r\n let style: Style.IStyle = <any>null;\r\n if (styleId) {\r\n style = await Style.Get(api, styleId);\r\n }\r\n if (!style) {\r\n const type = await EntityType.Get(api, entity.Bruce[\"EntityType.ID\"]);\r\n if (type[\"DisplaySetting.ID\"]) {\r\n style = await Style.Get(api, type[\"DisplaySetting.ID\"]);\r\n }\r\n }\r\n return style;\r\n}\r\n\r\nfunction getExistingCEntity(entityId: string, menuItemId: string, item: ZoomControl.IItem, visualRegister: VisualsRegister.Register): EntityRenderEngine.ICesiumEntityExt {\r\n return <any>visualRegister.GetRego(entityId, menuItemId)?.visual;\r\n}\r\n\r\nfunction getRenderGroupId(zoomItem: ZoomControl.IItem): string {\r\n if (!zoomItem) {\r\n return <any>null;\r\n }\r\n return zoomItem.MinZoom + \"-\" + zoomItem.MaxZoom;\r\n}\r\n\r\nexport namespace EntityRenderEngine {\r\n export interface ICesiumEntityExt extends Cesium.Entity {\r\n _siblingGraphics?: Cesium.Entity[];\r\n _parentEntity?: Cesium.Entity;\r\n _renderGroup?: string;\r\n }\r\n\r\n export interface IParams {\r\n apiGetter: BruceApi.IGetter,\r\n viewer: Cesium.Viewer; \r\n visualRegister: VisualsRegister.Register;\r\n menuItemId: string;\r\n zoomControl: ZoomControl.IItem[];\r\n entities: Entity.IEntity[];\r\n }\r\n\r\n export async function Render(params: IParams): Promise<IDictionary<ICesiumEntityExt>> {\r\n const groupRenderParams = {\r\n apiGetter: params.apiGetter,\r\n viewer: params.viewer,\r\n entities: [],\r\n zoomItems: <IDictionary<ZoomControl.IItem>>{},\r\n menuItemId: params.menuItemId,\r\n visualRegister: params.visualRegister\r\n }\r\n\r\n const cEntities: IDictionary<ICesiumEntityExt> = {};\r\n const models: Entity.IEntity[] = [];\r\n const polygons: Entity.IEntity[] = [];\r\n const polylines: Entity.IEntity[] = [];\r\n const points: Entity.IEntity[] = [];\r\n\r\n // Initial sorting.\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n const id = <string>entity.Bruce.ID;\r\n\r\n const zoomItem = RenderManager.Utils.DetermineZoomItem(params.viewer, entity, params.zoomControl);\r\n let displayType = zoomItem?.DisplayType;\r\n if (!displayType) {\r\n displayType = ZoomControl.EDisplayType.Hidden;\r\n }\r\n // Backwards compatibility.\r\n else if (<string>displayType == \"polygon\") {\r\n displayType = ZoomControl.EDisplayType.Geometry;\r\n }\r\n\r\n if (displayType != ZoomControl.EDisplayType.Hidden) {\r\n const newRenderId = getRenderGroupId(zoomItem);\r\n const existing = getExistingCEntity(id, params.menuItemId, zoomItem, params.visualRegister);\r\n const oldRenderId = existing?._renderGroup;\r\n \r\n if (newRenderId == oldRenderId) {\r\n cEntities[id] = existing;\r\n }\r\n else {\r\n if (displayType == ZoomControl.EDisplayType.Model3D) {\r\n models.push(entity);\r\n }\r\n else if (displayType == ZoomControl.EDisplayType.Geometry) {\r\n polygons.push(entity);\r\n }\r\n else {\r\n points.push(entity);\r\n }\r\n groupRenderParams.zoomItems[id] = zoomItem;\r\n }\r\n }\r\n }\r\n\r\n // Keep trying to render things in order of hard-coded priority system.\r\n if (models.length > 0) {\r\n const mParams: Model3d.IGroupParams = {\r\n ...groupRenderParams,\r\n entities: models\r\n };\r\n const mEntities = await Model3d.RenderGroup(mParams);\r\n for (let i = 0; i < mParams.entities.length; i++) {\r\n const entity = mParams.entities[i];\r\n const id = <string>entity.Bruce.ID;\r\n const cEntity = mEntities[id];\r\n if (cEntity) {\r\n cEntities[id] = cEntity;\r\n }\r\n else {\r\n polygons.push(entity);\r\n }\r\n }\r\n }\r\n if (polygons.length > 0) {\r\n const pParams: Polygon.IGroupParams = {\r\n ...groupRenderParams,\r\n entities: polygons\r\n };\r\n const pEntities = await Polygon.RenderGroup(pParams);\r\n for (let i = 0; i < pParams.entities.length; i++) {\r\n const entity = pParams.entities[i];\r\n const cEntity = pEntities[<string>entity.Bruce.ID];\r\n if (cEntity) {\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n else {\r\n polylines.push(entity);\r\n }\r\n }\r\n }\r\n if (polylines.length > 0) {\r\n const pParams: Polyline.IGroupParams = {\r\n ...groupRenderParams,\r\n entities: polylines\r\n };\r\n const pEntities = await Polyline.RenderGroup(pParams);\r\n for (let i = 0; i < pParams.entities.length; i++) {\r\n const entity = pParams.entities[i];\r\n const cEntity = pEntities[<string>entity.Bruce.ID];\r\n if (cEntity) {\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n else {\r\n points.push(entity);\r\n }\r\n }\r\n }\r\n if (points.length > 0) {\r\n const pParams: Point.IGroupParams = {\r\n ...groupRenderParams,\r\n entities: points\r\n };\r\n const pEntities = await Point.RenderGroup(pParams);\r\n for (let i = 0; i < pParams.entities.length; i++) {\r\n const entity = pParams.entities[i];\r\n const cEntity = pEntities[<string>entity.Bruce.ID];\r\n if (cEntity) {\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n }\r\n }\r\n\r\n return cEntities;\r\n }\r\n\r\n export function Remove(viewer: Cesium.Viewer, entity: ICesiumEntityExt): void {\r\n if (entity._parentEntity) {\r\n Remove(viewer, entity._parentEntity);\r\n }\r\n if (entity._siblingGraphics) {\r\n for (let i = 0; i < entity._siblingGraphics.length; i++) {\r\n const sibling = entity._siblingGraphics[i];\r\n Remove(viewer, sibling);\r\n }\r\n }\r\n if (viewer.entities.contains(entity)) {\r\n viewer.entities.remove(entity);\r\n }\r\n }\r\n\r\n export namespace Point {\r\n export interface IParams {\r\n api: BruceApi.Api;\r\n style: Style.IPointSettings;\r\n entity: Entity.IEntity;\r\n tags: EntityTag.ITag[];\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export interface IGroupParams {\r\n apiGetter: BruceApi.IGetter,\r\n menuItemId: string;\r\n entities: Entity.IEntity[];\r\n zoomItems: IDictionary<ZoomControl.IItem>;\r\n visualRegister: VisualsRegister.Register;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export function Render(params: IParams): ICesiumEntityExt {\r\n const entity = params.entity;\r\n const style = params.style;\r\n const type = style.Type;\r\n\r\n let cEntity: Cesium.Entity = <any>null;\r\n if (type == Style.EPointType.Icon) {\r\n const icon = Calculator.GetValue(style.iconUrl, entity, params.tags);\r\n let iconUrl: string = <any>null;\r\n if (typeof icon == \"string\") {\r\n iconUrl = icon;\r\n }\r\n if (!iconUrl && style.iconId) {\r\n iconUrl = ClientFile.GetUrl(params.api, style.iconId);\r\n }\r\n if (iconUrl) {\r\n let iconScale: number = +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 },\r\n position: EntityUtils.GetPos(params.viewer, entity),\r\n show: false\r\n });\r\n }\r\n }\r\n }\r\n if (type == Style.EPointType.Cylinder) {\r\n // TODO: Cylinder.\r\n }\r\n if (!cEntity) {\r\n const bColor: Color.IColor = style.color ? <any>Calculator.GetValue(style.color, entity, params.tags) : null;\r\n const cColor = bColor ? colorToCColor(bColor) : Cesium.Color.RED;\r\n \r\n let size = style.size ? <number>Calculator.GetValue(style.size, entity, params.tags) : null;\r\n if (size == null) {\r\n size = 30;\r\n }\r\n if (size <= 0) {\r\n return <any>null;\r\n }\r\n cEntity = new Cesium.Entity({\r\n point: {\r\n pixelSize: size,\r\n color: cColor,\r\n heightReference: getHeightRef(style)\r\n },\r\n position: EntityUtils.GetPos(params.viewer, entity),\r\n show: false\r\n });\r\n }\r\n if (cEntity) {\r\n params.viewer.entities.add(cEntity);\r\n }\r\n return cEntity;\r\n }\r\n\r\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\r\n const api = params.apiGetter.getApi(params.apiGetter.accountId, params.apiGetter.env);\r\n\r\n const cEntities: IDictionary<ICesiumEntityExt> = {};\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n\r\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\r\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\r\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\r\n let tags: EntityTag.ITag[] = [];\r\n if (tagIds && tagIds.length > 0) {\r\n tags = await EntityTag.GetListByIds(api, tagIds);\r\n }\r\n const pStyle = (style?.Settings as Style.IEntitySettings)?.pointStyle ?? <any>{};\r\n \r\n const cEntity = Render({\r\n entity: entity,\r\n style: pStyle,\r\n tags: tags,\r\n viewer: params.viewer,\r\n api: api\r\n });\r\n cEntity._renderGroup = getRenderGroupId(zoomItem);\r\n\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n \r\n return cEntities;\r\n }\r\n }\r\n\r\n export namespace Polyline {\r\n export interface IParams {\r\n style: Style.IPolylineSettings;\r\n entity: Entity.IEntity;\r\n tags: EntityTag.ITag[];\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export interface IGroupParams {\r\n apiGetter: BruceApi.IGetter,\r\n menuItemId: string;\r\n entities: Entity.IEntity[];\r\n zoomItems: IDictionary<ZoomControl.IItem>;\r\n visualRegister: VisualsRegister.Register;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export function Render(params: IParams): ICesiumEntityExt {\r\n const entity = params.entity;\r\n\r\n const line = entity.geometry?.LineString;\r\n const points: Carto.ICarto[] = line && typeof line == \"string\" ? Geometry.ParsePoints(line) : [];\r\n if (!points || points.length < 2) {\r\n return <any>null;\r\n }\r\n let isValid = true;\r\n for (let i = 0; i < points.length; i++) {\r\n if (!Carto.ValidateCarto(points[i])) {\r\n isValid = false;\r\n break;\r\n }\r\n }\r\n if (!isValid) {\r\n return <any>null;\r\n }\r\n const posses = points.map(x => Cesium.Cartesian3.fromDegrees(x.longitude, x.latitude, x.altitude));\r\n\r\n // Making sure no 0 length lines coming through.\r\n // Ideally we would measure the full line but I fear that's too expensive.\r\n if (posses.length == 2 || posses.length == 3) {\r\n let totalDistance = 0;\r\n for (let i = 0; i < posses.length; i++) {\r\n let pos1 = posses[i];\r\n let pos2 = posses[i + 1];\r\n if (pos1 && pos2) {\r\n totalDistance += Cesium.Cartesian3.distance(pos1, pos2);\r\n }\r\n }\r\n if (totalDistance < 0.001) {\r\n return <any>null;\r\n }\r\n }\r\n\r\n const style = params.style;\r\n const bColor: Color.IColor = style.lineColor ? <any>Calculator.GetValue(style.lineColor, entity, params.tags) : null;\r\n const cColor = bColor ? colorToCColor(bColor) : Cesium.Color.RED;\r\n\r\n let width = style.lineWidth ? <number>Calculator.GetValue(style.lineWidth, entity, params.tags) : null;\r\n if (width == null) {\r\n width = 4;\r\n }\r\n if (width <= 0) {\r\n return <any>null;\r\n }\r\n \r\n const heightRef = getHeightRef(style);\r\n const cEntity: ICesiumEntityExt = new Cesium.Entity({\r\n polyline: {\r\n positions: posses,\r\n material: <Cesium.MaterialProperty><any>cColor,\r\n width: width,\r\n classificationType: Cesium.ClassificationType.TERRAIN,\r\n arcType: Cesium.ArcType.GEODESIC,\r\n zIndex: getZIndex(style, entity, params.tags),\r\n clampToGround: heightRef == Cesium.HeightReference.CLAMP_TO_GROUND\r\n },\r\n position: EntityUtils.GetPos(params.viewer, entity),\r\n show: false\r\n });\r\n\r\n params.viewer.entities.add(cEntity);\r\n return cEntity;\r\n }\r\n\r\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\r\n const api = params.apiGetter.getApi(params.apiGetter.accountId, params.apiGetter.env);\r\n const cEntities: IDictionary<ICesiumEntityExt> = {};\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\r\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\r\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\r\n let tags: EntityTag.ITag[] = [];\r\n if (tagIds && tagIds.length > 0) {\r\n tags = await EntityTag.GetListByIds(api, tagIds);\r\n }\r\n const lStyle = (style?.Settings as Style.IEntitySettings)?.polylineStyle ?? <any>{};\r\n\r\n const cEntity = Render({\r\n entity: entity,\r\n style: lStyle,\r\n tags: tags,\r\n viewer: params.viewer\r\n });\r\n if (cEntity) {\r\n cEntity._renderGroup = getRenderGroupId(zoomItem);\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n }\r\n return cEntities;\r\n }\r\n }\r\n\r\n export namespace Polygon {\r\n export interface IParams {\r\n style: Style.IPolygonSettings;\r\n entity: Entity.IEntity;\r\n tags: EntityTag.ITag[];\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export interface IGroupParams {\r\n apiGetter: BruceApi.IGetter,\r\n menuItemId: string;\r\n entities: Entity.IEntity[];\r\n zoomItems: IDictionary<ZoomControl.IItem>;\r\n visualRegister: VisualsRegister.Register;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export function Render(params: IParams): ICesiumEntityExt {\r\n const entity = params.entity;\r\n const pRings = entity.geometry?.Polygon;\r\n if (pRings == null || pRings.length <= 0) {\r\n return <any>null;\r\n }\r\n const style = params.style;\r\n\r\n const bFillColor = <Color.IColor>Calculator.GetValue(style.fillColor, entity, params.tags);\r\n const cFillColor = bFillColor ? colorToCColor(bFillColor) : Cesium.Color.RED;\r\n\r\n const bLineColor = <Color.IColor>Calculator.GetValue(style.lineColor, entity, params.tags);\r\n const cLineColor = bLineColor ? colorToCColor(bLineColor) : Cesium.Color.RED;\r\n\r\n let width = style.lineWidth ? <number>Calculator.GetValue(style.lineWidth, entity, params.tags) : null;\r\n if (width == null) {\r\n width = 4;\r\n }\r\n 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(x.longitude, x.latitude, 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(x.longitude, x.latitude, x.altitude));\r\n });\r\n\r\n const zIndex = getZIndex(style, entity, params.tags);\r\n\r\n const cEntity: ICesiumEntityExt = new Cesium.Entity({\r\n polygon: {\r\n hierarchy: new Cesium.PolygonHierarchy(posses, holePosses.map(x => new Cesium.PolygonHierarchy(x))),\r\n material: cFillColor,\r\n extrudedHeight: extrusion.value,\r\n extrudedHeightReference: extrusion.exHeightRef,\r\n shadows: Cesium.ShadowMode.ENABLED,\r\n heightReference: heightRef,\r\n classificationType: Cesium.ClassificationType.BOTH,\r\n perPositionHeight: heightRef == Cesium.HeightReference.CLAMP_TO_GROUND ? false : true,\r\n zIndex: zIndex\r\n },\r\n position: EntityUtils.GetPos(params.viewer, entity),\r\n show: false\r\n });\r\n cEntity._siblingGraphics = [];\r\n\r\n for (let i = 0; i < holePosses.length; i++) {\r\n const posses = holePosses[i];\r\n const cEntityHole: ICesiumEntityExt = new Cesium.Entity({\r\n polyline: new Cesium.PolylineGraphics({\r\n positions: posses,\r\n material: <Cesium.MaterialProperty><any>cLineColor,\r\n width: width,\r\n clampToGround: heightRef == Cesium.HeightReference.CLAMP_TO_GROUND,\r\n classificationType: Cesium.ClassificationType.TERRAIN,\r\n arcType: Cesium.ArcType.GEODESIC,\r\n zIndex: zIndex\r\n }),\r\n show: false\r\n });\r\n cEntity._siblingGraphics.push(cEntityHole);\r\n cEntityHole._parentEntity = cEntity;\r\n params.viewer.entities.add(cEntityHole);\r\n }\r\n\r\n params.viewer.entities.add(cEntity);\r\n return cEntity;\r\n }\r\n\r\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\r\n const api = params.apiGetter.getApi(params.apiGetter.accountId, params.apiGetter.env);\r\n const cEntities: IDictionary<ICesiumEntityExt> = {};\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\r\n \r\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\r\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\r\n let tags: EntityTag.ITag[] = [];\r\n if (tagIds && tagIds.length > 0) {\r\n tags = await EntityTag.GetListByIds(api, tagIds);\r\n }\r\n const pStyle = (style?.Settings as Style.IEntitySettings)?.polygonStyle ?? <any>{};\r\n \r\n const cEntity = Render({\r\n entity: entity,\r\n style: pStyle,\r\n tags: tags,\r\n viewer: params.viewer\r\n });\r\n if (cEntity) {\r\n cEntity._renderGroup = getRenderGroupId(zoomItem);\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n }\r\n return cEntities;\r\n }\r\n }\r\n\r\n export namespace Model3d {\r\n export interface IParams {\r\n lodUrl: string;\r\n style: Style.IModelSettings;\r\n entity: Entity.IEntity;\r\n tags: EntityTag.ITag[];\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export interface IGroupParams {\r\n apiGetter: BruceApi.IGetter,\r\n menuItemId: string;\r\n entities: Entity.IEntity[];\r\n zoomItems: IDictionary<ZoomControl.IItem>;\r\n visualRegister: VisualsRegister.Register;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export function Render(params: IParams): ICesiumEntityExt {\r\n const entity = params.entity;\r\n\r\n const transform = entity?.transform;\r\n let heading: number = transform ? +transform.heading : 0;\r\n heading = (heading + 90) % 360;\r\n const pitch: number = transform ? +transform.pitch : 0;\r\n const roll: number = transform ? +transform.roll : 0;\r\n\r\n let scale: number = transform ? +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 if (!styleScale) {\r\n styleScale = 1;\r\n }\r\n scale *= styleScale;\r\n\r\n const hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll);\r\n\r\n let heightRef = getHeightRef(style);\r\n let pos = EntityUtils.GetPos(params.viewer, entity);\r\n if (heightRef == Cesium.HeightReference.CLAMP_TO_GROUND) {\r\n const carto = Cesium.Cartographic.fromCartesian(pos);\r\n pos = Cesium.Cartesian3.fromRadians(carto.longitude, carto.latitude, 0);\r\n heightRef = Cesium.HeightReference.RELATIVE_TO_GROUND;\r\n }\r\n\r\n const orientation = Cesium.Transforms.headingPitchRollQuaternion(pos, hpr);\r\n\r\n let blendMode: number = <any>null;\r\n let blendAmount: number = <any>null;\r\n let color: Cesium.Color = <any>null;\r\n if (style?.customize) {\r\n blendMode = style.fillColorBlendMode;\r\n if (!blendMode) {\r\n blendMode = Cesium.ColorBlendMode.HIGHLIGHT;\r\n }\r\n if (blendMode == Cesium.ColorBlendMode.MIX) {\r\n blendAmount = <any>style.fillColorBlendAmount;\r\n if (!blendAmount) {\r\n blendAmount = 0.5;\r\n }\r\n }\r\n const bColor = <Color.IColor>Calculator.GetValue(style.fillColor, entity, params.tags);\r\n if (bColor) {\r\n color = colorToCColor(bColor);\r\n }\r\n }\r\n\r\n const cEntity: ICesiumEntityExt = new Cesium.Entity({\r\n model: {\r\n uri: params.lodUrl,\r\n heightReference: heightRef,\r\n scale: scale,\r\n shadows: Cesium.ShadowMode.ENABLED,\r\n colorBlendAmount: blendAmount,\r\n colorBlendMode: blendMode,\r\n color: color\r\n },\r\n orientation: <Cesium.Property><any>orientation,\r\n position: pos,\r\n show: false\r\n });\r\n\r\n params.viewer.entities.add(cEntity);\r\n return cEntity;\r\n }\r\n\r\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\r\n const api = params.apiGetter.getApi(params.apiGetter.accountId, params.apiGetter.env);\r\n const cEntities: IDictionary<ICesiumEntityExt> = {};\r\n const reqBody: EntityLod.Filter.IListParams = {\r\n \"strict\": false,\r\n \"externalSources\": false,\r\n \"Items\": []\r\n };\r\n\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\r\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\r\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\r\n let tags: EntityTag.ITag[] = [];\r\n if (tagIds && tagIds.length > 0) {\r\n tags = await EntityTag.GetListByIds(api, tagIds);\r\n }\r\n const mStyle = (style?.Settings as Style.IEntitySettings)?.polygonStyle ?? <any>{};\r\n let group = mStyle.lodGroup ? Calculator.GetValue(mStyle.lodGroup, entity, tags) : null;\r\n if (!group) {\r\n group = \"DEFAULT\";\r\n }\r\n let level = <number>+<any>zoomItem.LODLevel;\r\n if (!level) {\r\n level = 0;\r\n }\r\n let catId = <string>zoomItem.LODCategoryID;\r\n if (!catId) {\r\n catId = \"glb\";\r\n }\r\n reqBody.Items.push({\r\n \"entityId\": <string>entity.Bruce.ID,\r\n \"categoryId\": catId,\r\n \"group\": <string>group,\r\n \"level\": level\r\n });\r\n }\r\n\r\n const lodData = await EntityLod.GetLods(api, reqBody);\r\n\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\r\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\r\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\r\n let tags: EntityTag.ITag[] = [];\r\n if (tagIds && tagIds.length > 0) {\r\n tags = await EntityTag.GetListByIds(api, tagIds);\r\n }\r\n\r\n const lod = lodData.find(x => x.entityId == entity.Bruce.ID);\r\n if (!lod?.clientFileId) {\r\n continue;\r\n }\r\n const mStyle = (style?.Settings as Style.IEntitySettings)?.polygonStyle ?? <any>{};\r\n const cEntity = Render({\r\n entity: entity,\r\n style: mStyle,\r\n tags: tags,\r\n viewer: params.viewer,\r\n lodUrl: ClientFile.GetUrl(api, lod.clientFileId)\r\n })\r\n if (cEntity) {\r\n cEntity._renderGroup = getRenderGroupId(zoomItem);\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n }\r\n\r\n return cEntities;\r\n }\r\n }\r\n}","import { BruceApi, DelayQueue, Entity, EntityFilterGetter, IDictionary, MenuItem, ZoomControl } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\r\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\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 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\r\n private entityCheckQueue: DelayQueue = <any>null;\r\n private entityCheckRemoval: () => void = <any>null;\r\n private isRunningCheck = false;\r\n private viewMonitorRemoval: () => void = <any>null;\r\n\r\n\r\n constructor(viewer: Cesium.Viewer, visualsManager: VisualsRegister.Register, apiGetter: BruceApi.IGetter, item: MenuItem.Item.IBruceEntities) {\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 if (this.disposed) {\r\n throw(new Error(\"This item is disposed.\"));\r\n }\r\n const api = this.apiGetter.getApi(this.apiGetter.accountId, this.apiGetter.env);\r\n this.getter = new EntityFilterGetter.Getter(\r\n api,\r\n new CesiumViewMonitor(this.viewer),\r\n this.item.BruceEntity[\"EntityType.ID\"],\r\n 500,\r\n {}\r\n );\r\n this.getter.IncludeMenuItem(this.item.id, [], 0, 100000);\r\n this.getterSub = this.getter.OnUpdate.Subscribe((entities) => {\r\n this.onGetterUpdate(entities);\r\n });\r\n this.viewMonitorRemoval = new CesiumViewMonitor(this.viewer).Updated().Subscribe(() => {\r\n this.entityCheckQueue.Call();\r\n });\r\n this.entityCheckQueue = new DelayQueue(() => {\r\n this.doEntityCheck();\r\n }, 3000);\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n this.disposed = true;\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n this.entityCheckRemoval?.();\r\n this.viewMonitorRemoval?.();\r\n }\r\n\r\n private async doEntityCheck(): Promise<void> {\r\n if (this.isRunningCheck) {\r\n this.entityCheckQueue.Call();\r\n return;\r\n }\r\n this.isRunningCheck = true;\r\n const api = this.apiGetter.getApi(this.apiGetter.accountId, this.apiGetter.env);\r\n try {\r\n const ids = Object.keys(this.renderedEntities);\r\n if (this.disposed) {\r\n return;\r\n }\r\n if (ids.length > 0) { \r\n const CHECK_BATCH_SIZE = 150;\r\n const checkBatch = async() => {\r\n const entityIds = ids.splice(0, CHECK_BATCH_SIZE);\r\n const entities = await Entity.GetListByIds(api, entityIds);\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.distributeGenerateBatches(entities);\r\n };\r\n while (ids.length > 0) {\r\n await checkBatch();\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n this.isRunningCheck = false;\r\n }\r\n\r\n private distributeGenerateBatches(entities: Entity.IEntity[]): void {\r\n const BATCH_SIZE = 50;\r\n while (entities.length > 0) {\r\n const batch = entities.splice(0, BATCH_SIZE);\r\n this.onGetterUpdate(batch);\r\n }\r\n }\r\n\r\n private async onGetterUpdate(entities: Entity.IEntity[]): Promise<void> {\r\n if (this.disposed) {\r\n return;\r\n }\r\n\r\n const cEntities = await EntityRenderEngine.Render({\r\n viewer: this.viewer, \r\n apiGetter: this.apiGetter, \r\n entities: entities,\r\n menuItemId: this.item.id,\r\n visualRegister: this.visualsManager,\r\n zoomControl: this.item.CameraZoomSettings\r\n });\r\n for (let i = 0; i < entities.length; i++) {\r\n const id = <string>entities[i].Bruce.ID;\r\n const cEntity = cEntities[id];\r\n this.renderedEntities[id] = !!cEntity;\r\n if (cEntity) {\r\n const visual = this.visualsManager.GetRego(id, this.item.id)?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.Add({\r\n entityId: <string>id,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\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 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(viewer: Cesium.Viewer, visualsManager: VisualsRegister.Register, apiGetter: BruceApi.IGetter, item: MenuItem.Item.IEntitiesLoaded) {\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 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 new CesiumViewMonitor(this.viewer),\r\n 500\r\n );\r\n this.getterSub = this.getter.OnUpdate.Subscribe((entities) => {\r\n this.onGetterUpdate(entities);\r\n });\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n this.disposed = true;\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n }\r\n\r\n private async onGetterUpdate(entities: Entity.IEntity[]): Promise<void> {\r\n if (this.disposed) {\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 id = <string>entities[i].Bruce.ID;\r\n const cEntity = cEntities[id];\r\n this.renderedEntities[id] = !!cEntity;\r\n if (cEntity) {\r\n const visual = this.visualsManager.GetRego(id, this.item.id)?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.Add({\r\n entityId: <string>id,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\r\n }\r\n }\r\n }\r\n}","import { BruceEvent, Cartes, IDictionary, ObjectUtils } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityUtils } from \"../utils/entity-utils\";\r\nimport { EntityRenderEngine } from \"./entity-render-engine\";\r\nimport { IRenderAddon } from \"./render-addons/render-addon\";\r\n\r\ninterface IVisualExt {//extends Visual {\r\n _register?: VisualsRegister.Register;\r\n _rego?: VisualsRegister.IVisualRego;\r\n}\r\n\r\nfunction removeEntity(viewer: Cesium.Viewer, visual: VisualsRegister.Visual): void {\r\n unmarkEntity(visual);\r\n if (visual instanceof Cesium.Entity) {\r\n EntityRenderEngine.Remove(viewer, visual);\r\n }\r\n else if (visual instanceof Cesium.Primitive) {\r\n if (viewer.scene.primitives.contains(visual)) {\r\n viewer.scene.primitives.remove(visual);\r\n }\r\n }\r\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\r\n // No way to tell if changing show will crash it!\r\n try {\r\n visual.show = false;\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n}\r\n\r\nfunction updateCEntityShow(viewer: Cesium.Viewer, visual: EntityRenderEngine.ICesiumEntityExt, show: boolean) {\r\n if (visual._parentEntity) {\r\n updateCEntityShow(viewer, visual._parentEntity, show);\r\n }\r\n if (visual._siblingGraphics) {\r\n for (let i = 0; i < visual._siblingGraphics.length; i++) {\r\n const sibling = visual._siblingGraphics[i];\r\n updateCEntityShow(viewer, sibling, show);\r\n }\r\n }\r\n if (viewer.entities.contains(visual)) {\r\n visual.show = show;\r\n }\r\n}\r\n\r\nfunction updateEntityShow(\r\n viewer: Cesium.Viewer, \r\n visual: VisualsRegister.Visual, \r\n show: boolean\r\n): void {\r\n if (visual instanceof Cesium.Entity) {\r\n updateCEntityShow(viewer, visual, show);\r\n }\r\n else if (visual instanceof Cesium.Primitive) {\r\n if (viewer.scene.primitives.contains(visual)) {\r\n visual.show = show;\r\n }\r\n }\r\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\r\n // No way to tell if changing show will crash it!\r\n try {\r\n visual.show = show;\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n}\r\n\r\nfunction updateEntity(viewer: Cesium.Viewer, entityRegos: VisualsRegister.IVisualRego[], addons: IRenderAddon[]): void {\r\n let highestPriority: VisualsRegister.IVisualRego = <any>null;\r\n for (let i = 0; i < entityRegos.length; i++) {\r\n const rego = entityRegos[i];\r\n if (highestPriority === null || rego.priority > highestPriority.priority) {\r\n highestPriority = rego;\r\n }\r\n }\r\n for (let i = 0; i < entityRegos.length; i++) {\r\n const rego = entityRegos[i];\r\n const show = rego === highestPriority;\r\n updateEntityShow(viewer, rego.visual, show);\r\n }\r\n if (addons) {\r\n for (let j = 0; j < addons.length; j++) {\r\n const addon = addons[j];\r\n addon.Render(entityRegos.map(x => x.visual));\r\n }\r\n }\r\n}\r\n\r\nfunction markEntity(register: VisualsRegister.Register, rego: VisualsRegister.IVisualRego, visual: VisualsRegister.Visual): void {\r\n const vis = <IVisualExt>visual;\r\n vis._register = register;\r\n vis._rego = rego;\r\n if (visual instanceof Cesium.Entity) {\r\n const visEnt = <EntityRenderEngine.ICesiumEntityExt>visual;\r\n if (visEnt._parentEntity) {\r\n markEntity(register, rego, visEnt._parentEntity);\r\n }\r\n if (visEnt._siblingGraphics) {\r\n for (let i = 0; i < visEnt._siblingGraphics.length; i++) {\r\n markEntity(register, rego, visEnt._siblingGraphics[i]);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction unmarkEntity(visual: VisualsRegister.Visual): void {\r\n const vis = <IVisualExt>visual;\r\n vis._register = <any>null;\r\n if (visual instanceof Cesium.Entity) {\r\n const visEnt = <EntityRenderEngine.ICesiumEntityExt>visual;\r\n if (visEnt._parentEntity) {\r\n unmarkEntity(visEnt._parentEntity);\r\n }\r\n if (visEnt._siblingGraphics) {\r\n for (let i = 0; i < visEnt._siblingGraphics.length; i++) {\r\n unmarkEntity(visEnt._siblingGraphics[i]);\r\n }\r\n }\r\n }\r\n}\r\n\r\ninterface IColoredBillboard extends Cesium.BillboardGraphics {\r\n _orgColor?: Cesium.Color;\r\n}\r\n\r\ninterface IColoredPoint extends Cesium.PointGraphics {\r\n _orgColor?: Cesium.Color;\r\n}\r\n\r\ninterface IColoredPolygon extends Cesium.PolygonGraphics {\r\n _orgColor?: Cesium.Color;\r\n}\r\n\r\ninterface IColoredPolyline extends Cesium.PolylineGraphics {\r\n _orgColor?: Cesium.Color;\r\n}\r\n\r\ninterface IColoredModel extends Cesium.ModelGraphics {\r\n _orgColor?: Cesium.Color;\r\n}\r\n\r\ninterface IColoredEntityExt extends Cesium.Entity {\r\n point: IColoredPoint;\r\n polygon: IColoredPolygon;\r\n polyline: IColoredPolyline;\r\n model: IColoredModel;\r\n billboard: IColoredBillboard;\r\n}\r\n\r\ninterface IColoredFeatureExt extends Cesium.Cesium3DTileFeature {\r\n _orgColor?: Cesium.Color;\r\n}\r\n\r\nfunction select(visual: VisualsRegister.Visual): void {\r\n const color = Cesium.Color.fromAlpha(Cesium.Color.YELLOW, 0.5);\r\n if (visual instanceof Cesium.Entity) {\r\n const entities = EntityUtils.GatherEntity(visual);\r\n for (let i = 0; i < entities.length; i++) {\r\n const cEntity: IColoredEntityExt = <any>entities[i];\r\n if (cEntity.point) {\r\n cEntity.point._orgColor = <any>cEntity.point.color;\r\n cEntity.point.color = <any>color.clone();\r\n }\r\n if (cEntity.polyline) {\r\n cEntity.polyline._orgColor = <any>cEntity.polyline.material;\r\n cEntity.polyline.material = <any>color.clone();\r\n }\r\n if (cEntity.polygon) {\r\n cEntity.polygon._orgColor = <any>cEntity.polygon.material;\r\n cEntity.polygon.material = <any>color.clone();\r\n }\r\n if (cEntity.model) {\r\n cEntity.model._orgColor = <any>cEntity.model.color;\r\n cEntity.model.color = <any>color.clone();\r\n }\r\n if (cEntity.billboard) {\r\n cEntity.billboard._orgColor = <any>cEntity.billboard.color;\r\n cEntity.billboard.color = <any>color.clone();\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 cPrim = <IColoredFeatureExt>visual;\r\n cPrim._orgColor = <any>cPrim.color;\r\n cPrim.color = <any>color.clone();\r\n }\r\n}\r\n\r\nfunction deselect(visual: VisualsRegister.Visual): void {\r\n if (visual instanceof Cesium.Entity) {\r\n const entities = EntityUtils.GatherEntity(visual);\r\n for (let i = 0; i < entities.length; i++) {\r\n const cEntity: IColoredEntityExt = <any>entities[i];\r\n if (cEntity.point) {\r\n cEntity.point.color = <any>cEntity.point._orgColor;\r\n }\r\n if (cEntity.polyline) {\r\n cEntity.polyline.material = <any>cEntity.polyline._orgColor;\r\n }\r\n if (cEntity.polygon) {\r\n cEntity.polygon.material = <any>cEntity.polygon._orgColor;\r\n }\r\n if (cEntity.model) {\r\n cEntity.model.color = <any>cEntity.model._orgColor;\r\n }\r\n if (cEntity.billboard) {\r\n cEntity.billboard.color = <any>cEntity.billboard._orgColor;\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 cPrim = <IColoredFeatureExt>visual;\r\n cPrim.color = <any>cPrim._orgColor;\r\n }\r\n}\r\n\r\n/**\r\n * Manages a registry of all Bruce visuals being rendered by menu items.\r\n * If multiple stuff is registered with the same entity id, only the \"best\" one is left visible.\r\n */\r\nexport namespace VisualsRegister {\r\n export type Visual = Cesium.Entity | Cesium.Primitive | Cesium.Cesium3DTileFeature;\r\n\r\n export interface IVisualRego {\r\n entityId: string;\r\n entityTypeId?: string;\r\n menuItemId: string;\r\n visual: Visual;\r\n priority: number;\r\n }\r\n \r\n export interface IVisualUpdate {\r\n rego: IVisualRego;\r\n isAdding: boolean;\r\n }\r\n\r\n export class Register {\r\n private id = ObjectUtils.UId();\r\n public get Id(): string {\r\n return this.id;\r\n }\r\n private viewer: Cesium.Viewer;\r\n private rego: IDictionary<IVisualRego[]> = {};\r\n private onUpdate: BruceEvent<IVisualUpdate> = <any>null;\r\n public get OnUpdate(): BruceEvent<IVisualUpdate> {\r\n if (!this.onUpdate) {\r\n this.onUpdate = new BruceEvent<IVisualUpdate>();\r\n }\r\n return this.onUpdate;\r\n }\r\n private selectedIds: string[] = [];\r\n private addons: IDictionary<IRenderAddon[]> = {};\r\n \r\n \r\n constructor(viewer: Cesium.Viewer) {\r\n this.viewer = viewer;\r\n }\r\n\r\n public AddAddon(entityId: string, addon: IRenderAddon): void {\r\n if (!this.addons[entityId]) {\r\n this.addons[entityId] = [];\r\n }\r\n this.addons[entityId].push(addon);\r\n const regos = this.rego[entityId];\r\n if (regos) {\r\n addon.Render(regos.map(x => x.visual))\r\n }\r\n }\r\n\r\n public GetAddons(entityId: string): IRenderAddon[] {\r\n return this.addons[entityId] || [];\r\n }\r\n\r\n public RemoveAddon(entityId: string, addonId: string): void {\r\n const addons = this.addons[entityId];\r\n if (addons) {\r\n for (let i = 0; i < addons.length; i++) {\r\n if (addons[i].Id === addonId) {\r\n addons[i].Dispose();\r\n addons.splice(i, 1);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n public RemoveAddons(entityId: string): void {\r\n const addons = this.addons[entityId];\r\n if (addons) {\r\n for (let i = 0; i < addons.length; i++) {\r\n addons[i].Dispose();\r\n }\r\n }\r\n this.addons[entityId] = [];\r\n }\r\n\r\n public Select(id: string): void {\r\n if (this.selectedIds.indexOf(id) === -1) {\r\n this.selectedIds.push(id);\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(rego.visual);\r\n }\r\n }\r\n }\r\n }\r\n\r\n public Deselect(id: string): void {\r\n const index = this.selectedIds.indexOf(id);\r\n if (index !== -1) {\r\n this.selectedIds.splice(index, 1);\r\n const regos = this.rego[id];\r\n if (regos) {\r\n for (let i = 0; i < regos.length; i++) {\r\n const rego = regos[i];\r\n deselect(rego.visual);\r\n }\r\n }\r\n }\r\n }\r\n\r\n public IsSelected(id: string): boolean {\r\n return this.selectedIds.indexOf(id) !== -1;\r\n }\r\n\r\n public ClearSelected(): void {\r\n for (let i = 0; i < this.selectedIds.length; i++) {\r\n const id = this.selectedIds[i];\r\n const regos = this.rego[id];\r\n if (regos) {\r\n for (let i = 0; i < regos.length; i++) {\r\n const rego = regos[i];\r\n deselect(rego.visual);\r\n }\r\n }\r\n }\r\n this.selectedIds = [];\r\n }\r\n \r\n public Add(rego: IVisualRego): void {\r\n this.Remove(rego.entityId, rego.menuItemId, false);\r\n const entityId = rego.entityId;\r\n const entityRegos = this.rego[entityId] ?? [];\r\n entityRegos.push(rego);\r\n this.rego[entityId] = entityRegos;\r\n markEntity(this, rego, rego.visual);\r\n updateEntity(this.viewer, this.rego[entityId], this.GetAddons(entityId));\r\n if (this.selectedIds.includes(entityId)) {\r\n select(rego.visual);\r\n }\r\n this.onUpdate?.Trigger({ rego: rego, isAdding: true });\r\n }\r\n \r\n public GetRego(entityId: string, menuItemId: string): IVisualRego {\r\n const entityRegos = this.rego[entityId];\r\n if (!entityRegos) {\r\n return <any>[];\r\n }\r\n return <any>entityRegos.find(r => r.menuItemId === menuItemId);\r\n }\r\n\r\n public GetMenuItemRegos(menuItemId: string): IVisualRego[] {\r\n const visuals: IVisualRego[] = [];\r\n for (const entityId in this.rego) {\r\n const entityRegos = this.rego[entityId];\r\n if (entityRegos) {\r\n const rego = entityRegos.find(r => r.menuItemId === menuItemId);\r\n if (rego) {\r\n visuals.push(rego);\r\n }\r\n }\r\n }\r\n return visuals;\r\n }\r\n \r\n public RemoveByEntityId(id: string): void {\r\n const entityRegos = this.rego[id];\r\n if (!entityRegos) {\r\n return;\r\n }\r\n for (let i = 0; i < entityRegos.length; i++) {\r\n const rego = entityRegos[i];\r\n this.onUpdate?.Trigger({ rego: rego, isAdding: false });\r\n removeEntity(this.viewer, rego.visual);\r\n }\r\n this.rego[id] = [];\r\n delete this.rego[id];\r\n }\r\n \r\n public RemoveByMenuItemId(id: string): void {\r\n for (const entityId in this.rego) {\r\n const entityRegos = this.rego[entityId];\r\n if (entityRegos) {\r\n const rego = entityRegos.find(r => r.menuItemId === id);\r\n if (!rego) {\r\n continue;\r\n }\r\n this.onUpdate?.Trigger({ rego: rego, isAdding: false });\r\n removeEntity(this.viewer, rego.visual);\r\n const doesInclude = this.rego[entityId].find(r => r.menuItemId === id);\r\n if (doesInclude) {\r\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== id);\r\n updateEntity(this.viewer, this.rego[entityId], this.GetAddons(entityId));\r\n }\r\n }\r\n }\r\n }\r\n \r\n public Remove(entityId: string, menuItemId: string, _doUpdate: boolean = true): void {\r\n const entityRegos = this.rego[entityId];\r\n if (!entityRegos) {\r\n return;\r\n }\r\n const rego = entityRegos.find(r => r.menuItemId === menuItemId);\r\n if (!rego) {\r\n return;\r\n }\r\n this.onUpdate?.Trigger({ rego: rego, isAdding: false });\r\n removeEntity(this.viewer, rego.visual);\r\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== menuItemId);\r\n if (_doUpdate) {\r\n updateEntity(this.viewer, this.rego[entityId], this.GetAddons(entityId));\r\n }\r\n }\r\n \r\n /**\r\n * Returns an array of drilled visuals associated with this register.\r\n * The top array item is the first found.\r\n * @param cursor \r\n * @returns \r\n */\r\n public GetFromCursor(cursor: Cartes.ICartes2): IVisualRego[] {\r\n const found: IVisualRego[] = [];\r\n const picked = this.viewer.scene.drillPick(new Cesium.Cartesian2(cursor.x, cursor.y), 5);\r\n for (let i = 0; i < picked.length; i++) {\r\n const object = picked[i];\r\n const entity = <Visual>(object && object.id && object.id instanceof Cesium.Entity ? object.id : object);\r\n const visual = <IVisualExt>entity;\r\n if (visual?._register?.Id == this.id) {\r\n found.push(<IVisualRego>visual._rego);\r\n }\r\n }\r\n return found;\r\n }\r\n }\r\n}","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 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(viewer: Cesium.Viewer, visualsManager: VisualsRegister.Register, apiGetter: BruceApi.IGetter, item: MenuItem.Item.IEntityIds) {\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 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 new CesiumViewMonitor(this.viewer),\r\n 500\r\n );\r\n this.getterSub = this.getter.OnUpdate.Subscribe((ids) => {\r\n this.onGetterUpdate(ids);\r\n });\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n this.disposed = true;\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n }\r\n\r\n private async onGetterUpdate(entityIds: string[]): Promise<void> {\r\n if (this.disposed) {\r\n return;\r\n }\r\n const api = this.apiGetter.getApi(this.apiGetter.accountId, this.apiGetter.env);\r\n const entities = await Entity.GetListByIds(api, entityIds);\r\n const cEntities = await EntityRenderEngine.Render({\r\n viewer: this.viewer, \r\n apiGetter: this.apiGetter, \r\n entities: entities,\r\n menuItemId: this.item.id,\r\n visualRegister: this.visualsManager,\r\n zoomControl: this.item.CameraZoomSettings\r\n });\r\n for (let i = 0; i < entities.length; i++) {\r\n const id = <string>entities[i].Bruce.ID;\r\n const cEntity = cEntities[id];\r\n this.renderedEntities[id] = !!cEntity;\r\n if (cEntity) {\r\n const visual = this.visualsManager.GetRego(id, this.item.id)?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.Add({\r\n entityId: <string>id,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\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 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(viewer: Cesium.Viewer, visualsManager: VisualsRegister.Register, apiGetter: BruceApi.IGetter, item: MenuItem.Item.IBruceEntity) {\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 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 new CesiumViewMonitor(this.viewer),\r\n 1\r\n );\r\n this.getterSub = this.getter.OnUpdate.Subscribe((ids) => {\r\n this.onGetterUpdate(ids[0]);\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.getterSub?.();\r\n this.getterSub = <any>null;\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n }\r\n\r\n private async onGetterUpdate(id: string): Promise<void> {\r\n if (this.disposed) {\r\n return;\r\n }\r\n const api = this.apiGetter.getApi(this.apiGetter.accountId, this.apiGetter.env);\r\n const entity = await Entity.Get(api, id);\r\n const cEntities = await EntityRenderEngine.Render({\r\n viewer: this.viewer, \r\n apiGetter: this.apiGetter,\r\n entities: [entity],\r\n menuItemId: this.item.id,\r\n visualRegister: this.visualsManager,\r\n zoomControl: this.item.CameraZoomSettings\r\n });\r\n const cEntity = cEntities[id];\r\n if (cEntity) {\r\n const visual = this.visualsManager.GetRego(id, this.item.id)?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.Add({\r\n entityId: <string>entity.Bruce.ID,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\r\n }\r\n }\r\n}","import { BruceApi, Calculator, Carto, Color, Entity, EntityType, IDictionary, Style, Tileset, TilesetCad } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { VisualsRegister } from \"./visuals-register\";\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 TilesetRenderEngine {\r\n export interface IParams {\r\n apiGetter: BruceApi.IGetter;\r\n tileset: Tileset.ITileset;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export function ApplySettings(cTileset: Cesium.Cesium3DTileset, tileset: Tileset.ITileset): void {\r\n if (tileset.type == Tileset.EType.Cad) {\r\n const settings = tileset.settings as TilesetCad.ISettings;\r\n const root = cTileset.root;\r\n let transform = settings.transform;\r\n if (!transform) {\r\n transform = {\r\n heading: 0,\r\n pitch: 0,\r\n roll: 0,\r\n scale: 1\r\n };\r\n }\r\n const point = <Carto.ICarto>settings.location;\r\n const pos = Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\r\n const hpr = Cesium.HeadingPitchRoll.fromDegrees(transform.heading, transform.pitch, transform.roll, new Cesium.HeadingPitchRoll());\r\n root.transform = Cesium.Transforms.headingPitchRollToFixedFrame(pos, hpr);\r\n \r\n let scale = +transform?.scale;\r\n if (!scale || scale <= 0) {\r\n scale = 0.000001;\r\n }\r\n let scaleMatrix = Cesium.Matrix4.fromScale(new Cesium.Cartesian3(scale, scale, scale), new Cesium.Matrix4());\r\n root.transform = Cesium.Matrix4.multiply(root.transform, scaleMatrix, root.transform);\r\n \r\n // Force matrix to update\r\n (<any>root).updateTransform();\r\n \r\n const maxScreenSpaceError = settings.maximumScreenSpaceError;\r\n if (maxScreenSpaceError || maxScreenSpaceError == 0) {\r\n cTileset.maximumScreenSpaceError = maxScreenSpaceError;\r\n }\r\n }\r\n else {\r\n throw(\"Not implemented.\");\r\n }\r\n }\r\n\r\n export function Render(params: IParams): Cesium.Cesium3DTileset {\r\n const api = params.apiGetter.getApi(params.apiGetter.accountId, params.apiGetter.env);\r\n if (params.tileset.type == Tileset.EType.Cad) {\r\n const cTileset = new Cesium.Cesium3DTileset({\r\n url: Tileset.GetPublicFileUrl(api, params.tileset.id, \"tileset.json\") + \"?generation=\" + params.tileset.generateVersion\r\n });\r\n params.viewer.scene.primitives.add(cTileset);\r\n cTileset.readyPromise.then(() => {\r\n ApplySettings(cTileset, params.tileset);\r\n });\r\n return cTileset;\r\n }\r\n else {\r\n throw(\"Not implemented.\");\r\n }\r\n }\r\n\r\n export class CadStyler {\r\n private api: BruceApi.Api;\r\n\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n\r\n private loadedEntities: IDictionary<VisualsRegister.IVisualRego> = {};\r\n private cTileset: Cesium.Cesium3DTileset;\r\n private styleMapping: any[];\r\n private styleMappingLoaded: boolean = false;\r\n private styleMappingsLoaded: IDictionary<boolean> = {};\r\n private fallbackStyleId: number;\r\n private fallbackStyle: Style.IStyle = <any>null;\r\n\r\n private runningQueues: number = 0;\r\n private queueLoadInterval: any;\r\n private recordLoadQueue: string[] = [];\r\n private recordCheckQueue: string[] = [];\r\n private queueCheckInterval: any;\r\n\r\n\r\n constructor(api: BruceApi.Api, cTileset: Cesium.Cesium3DTileset, fallbackStyleId: number, styleMapping: any[]) {\r\n this.api = api;\r\n this.cTileset = cTileset;\r\n this.fallbackStyleId = fallbackStyleId;\r\n this.styleMapping = styleMapping;\r\n this.loadStyles();\r\n }\r\n\r\n public QueueEntities(entities: VisualsRegister.IVisualRego[]): void {\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n this.queueTilesetFeatureStyle(entity);\r\n }\r\n if (this.recordLoadQueue.length > 0) {\r\n this.processQueue();\r\n }\r\n }\r\n\r\n private async processQueue(): Promise<void> {\r\n const MAX_BATCHES = 2;\r\n const BATCH_DELAY = 200;\r\n\r\n if (this.runningQueues >= MAX_BATCHES) {\r\n return;\r\n }\r\n else if (this.disposed) {\r\n return;\r\n }\r\n this.runningQueues += 1;\r\n \r\n let batch: VisualsRegister.IVisualRego[] = [];\r\n let rerun: boolean = false;\r\n try {\r\n batch = this.getEntitiesForQueue();\r\n\r\n const entityIds = batch.map(x => x.entityId);\r\n if (entityIds.length > 0) {\r\n const entities = await Entity.GetListByIds(this.api, entityIds);\r\n for (let i = 0; i < entities.length; i++) {\r\n const record = entities[i];\r\n const feature = batch.find(x => x?.entityId == record?.Bruce?.ID);\r\n if (feature) {\r\n this.styleTilesetFeatureFullData(feature, record);\r\n }\r\n }\r\n rerun = batch.length > 0;\r\n }\r\n }\r\n finally {\r\n setTimeout(() => {\r\n this.runningQueues -= 1;\r\n if (rerun) {\r\n this.processQueue();\r\n }\r\n }, BATCH_DELAY);\r\n }\r\n }\r\n\r\n private getEntitiesForQueue(): VisualsRegister.IVisualRego[] {\r\n const BATCH_SIZE = 30;\r\n const batchHashes = this.recordLoadQueue.splice(0, BATCH_SIZE);\r\n const entities: VisualsRegister.IVisualRego[] = [];\r\n for (let i = 0; i < batchHashes.length; i++) {\r\n const id = batchHashes[i];\r\n const entity = this.loadedEntities[id];\r\n if (entity) {\r\n entities.push(entity);\r\n }\r\n }\r\n return entities;\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.disposed = true;\r\n clearInterval(this.queueLoadInterval);\r\n clearInterval(this.queueCheckInterval);\r\n }\r\n\r\n private async loadStyles(): Promise<void> {\r\n let fallbackStyleId = this.fallbackStyleId;\r\n if (fallbackStyleId && fallbackStyleId > 0) {\r\n try {\r\n let data = await Style.Get(this.api, fallbackStyleId);\r\n this.fallbackStyle = data;\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n \r\n // Load styles in the style mapping\r\n let styleMapping = this.styleMapping;\r\n if (!styleMapping) {\r\n styleMapping = [];\r\n }\r\n this.styleMapping = styleMapping;\r\n \r\n // It is default style.\r\n // We have to get all possible entity type ids and append them to mapping.\r\n if (!fallbackStyleId) {\r\n try {\r\n const modelTree = this.cTileset?.extensions?.modelTree;\r\n if (modelTree) {\r\n const entityTypeIds = this.getEntityTypeIdsFromModelTree(modelTree);\r\n for (let i = 0; i < entityTypeIds.length; i++) {\r\n const entityTypeId = entityTypeIds[i];\r\n if (styleMapping.findIndex(x => x.EntityTypeID == entityTypeId) <= -1) {\r\n styleMapping.push({\r\n EntityTypeID: entityTypeId,\r\n StyleID: null,\r\n style: <any>null\r\n });\r\n }\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n \r\n for (let i = 0; i < styleMapping.length; i++) {\r\n if (this.disposed) {\r\n break;\r\n }\r\n \r\n let styleMap = styleMapping[i];\r\n if (!styleMap.style) {\r\n let styleId = styleMap.StyleID;\r\n \r\n // Get default style of the entity type.\r\n if (!styleId) {\r\n try {\r\n let entityType = await EntityType.Get(this.api, styleMap.EntityTypeID);\r\n styleId = entityType?.[\"DisplaySetting.ID\"];\r\n }\r\n catch (e) {\r\n console.error(e); \r\n }\r\n }\r\n \r\n if (styleId) {\r\n try {\r\n let data = await Style.Get(this.api, styleId);\r\n if (data) {\r\n styleMap.style = data;\r\n styleMap.StyleID = styleId;\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n \r\n if (styleMap.EntityTypeID && styleMap.style) {\r\n this.styleMappingsLoaded[styleMap.EntityTypeID] = true;\r\n this.processTilesetFeatureCheckQueue();\r\n this.processQueue();\r\n }\r\n }\r\n this.styleMappingLoaded = true;\r\n\r\n if (!this.disposed) {\r\n await this.processTilesetFeatureCheckQueue();\r\n this.processQueue();\r\n }\r\n }\r\n\r\n private getEntityTypeIdsFromModelTree(modelTree: any): string[] {\r\n const entityTypeIds: string[] = [];\r\n this.digEntityTypeIdsFromModelTreeBranch(modelTree, entityTypeIds);\r\n return entityTypeIds;\r\n }\r\n \r\n private digEntityTypeIdsFromModelTreeBranch(branch: any, arr: string[]): void {\r\n if (branch) {\r\n // Does not yet include this entity type id.\r\n if (branch.typeId && !arr.includes(branch.typeId)) {\r\n arr.push(branch.typeId);\r\n }\r\n \r\n if (branch.children) {\r\n for (let i = 0; i < branch.children.length; i++) {\r\n let child = branch.children[i];\r\n this.digEntityTypeIdsFromModelTreeBranch(child, arr);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private async processTilesetFeatureCheckQueue(): Promise<void> {\r\n const BATCH_CHECK_SIZE = 1000;\r\n\r\n return new Promise((res) => {\r\n clearInterval(this.queueCheckInterval);\r\n this.queueCheckInterval = setInterval(() => {\r\n if (this.disposed) {\r\n clearInterval(this.queueCheckInterval);\r\n res();\r\n return;\r\n }\r\n \r\n // Construct batch for loaded styles.\r\n let batch = [];\r\n \r\n if (this.styleMappingLoaded) {\r\n batch = this.recordCheckQueue.splice(0, BATCH_CHECK_SIZE);\r\n }\r\n else {\r\n for (let i = 0; i < this.recordCheckQueue.length; i++) {\r\n let hash = this.recordCheckQueue[i];\r\n let entity = this.loadedEntities[hash];\r\n if (entity) {\r\n let entityTypeId = entity.entityTypeId;\r\n if (entityTypeId) {\r\n if (this.styleMappingsLoaded[entityTypeId] == true) {\r\n batch.push(hash);\r\n }\r\n }\r\n }\r\n \r\n if (batch.length >= BATCH_CHECK_SIZE) {\r\n break;\r\n }\r\n }\r\n \r\n for (let i = 0; i < batch.length; i++) {\r\n let hash = batch[i];\r\n let index = this.recordCheckQueue.findIndex(x => x == hash);\r\n if (index > -1) {\r\n this.recordCheckQueue.splice(index, 1);\r\n }\r\n }\r\n }\r\n \r\n if (batch.length) {\r\n for (let i = 0; i < batch.length; i++) {\r\n let item = batch[i];\r\n let entity = this.loadedEntities[item];\r\n if (entity) {\r\n this.queueTilesetFeatureStyle(entity);\r\n }\r\n }\r\n }\r\n else {\r\n clearInterval(this.queueCheckInterval);\r\n res();\r\n }\r\n }, 50);\r\n });\r\n }\r\n\r\n private queueTilesetFeatureStyle(entity: VisualsRegister.IVisualRego): void {\r\n if (this.styleMappingLoaded || this.styleMappingsLoaded[<string>entity.entityTypeId] == true) {\r\n const needsData = this.getTilesetFeatureNeedsFullData(entity.entityId, <string>entity.entityTypeId);\r\n if (needsData) {\r\n if (this.recordLoadQueue.findIndex(x => x == entity.entityId)) {\r\n this.recordLoadQueue.push(entity.entityId);\r\n }\r\n }\r\n else {\r\n this.styleTilesetFeature(entity);\r\n }\r\n }\r\n else {\r\n this.recordCheckQueue.push(entity.entityId);\r\n }\r\n }\r\n\r\n private styleTilesetFeature(entity: VisualsRegister.IVisualRego): void {\r\n this.styleTilesetFeatureFullData(entity, <any>null); \r\n }\r\n\r\n private styleTilesetFeatureFullData(entity: VisualsRegister.IVisualRego, data: Entity.IEntity): void {\r\n const style = <Style.IEntitySettings>this.getTilesetFeatureStyle(entity.entityId, <string>entity.entityTypeId);\r\n if (!style) {\r\n return;\r\n }\r\n const bColor = <Color.IColor>(style.modelStyle?.fillColor ? Calculator.GetValue(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, 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\n/**\r\n * Manager for rendering CAD tilesets.\r\n * CAD tilesets are referred to as \"MODEL\" tilesets in some other areas of Bruce code.\r\n */\r\nexport namespace TilesetCadRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private item: MenuItem.Item.ICadTileset;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private visualsManager: VisualsRegister.Register;\r\n private cTileset: Cesium.Cesium3DTileset = <any>null;\r\n private styler: TilesetRenderEngine.CadStyler = <any>null;\r\n\r\n \r\n constructor(viewer: Cesium.Viewer, visualsManager: VisualsRegister.Register, apiGetter: BruceApi.IGetter, item: MenuItem.Item.ICadTileset) {\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n \r\n public async Init(): Promise<void> {\r\n const tilesetId = this.item.tileset?.TilesetID;\r\n if (!tilesetId) {\r\n return;\r\n }\r\n\r\n const api = this.apiGetter.getApi(this.apiGetter.accountId, this.apiGetter.env);\r\n const tileset = await Tileset.Get(api, tilesetId);\r\n if (!tileset) {\r\n return;\r\n }\r\n\r\n const cTileset = this.cTileset = TilesetRenderEngine.Render({\r\n apiGetter: this.apiGetter,\r\n tileset: tileset,\r\n viewer: this.viewer\r\n });\r\n cTileset.readyPromise.then(() => {\r\n this.onCTilesetLoad();\r\n });\r\n cTileset.tileLoad.addEventListener((tile) => {\r\n this.mapCTile(tile);\r\n });\r\n\r\n this.styler = new TilesetRenderEngine.CadStyler(api, this.cTileset, <number>this.item.styleId, <any[]>this.item.StyleMapping);\r\n }\r\n\r\n private onCTilesetLoad(): void {\r\n if (this.disposed) {\r\n return;\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 for (let i = 0; i < content.featuresLength; i++) {\r\n const feature = content.getFeature(i);\r\n \r\n let rego = this.mapTilesetFeature(feature);\r\n if (rego?.entityId) {\r\n this.styler.QueueEntities([rego]);\r\n }\r\n }\r\n }\r\n\r\n private mapTilesetFeature(feature: Cesium.Cesium3DTileFeature): VisualsRegister.IVisualRego {\r\n let version = feature?.tileset?.extensions?.modelTree?.version;\r\n if (!version) {\r\n version = 1;\r\n }\r\n \r\n let rego: VisualsRegister.IVisualRego = {\r\n entityId: <any>null,\r\n entityTypeId: <any>null,\r\n menuItemId: this.item.id,\r\n priority: 0,\r\n visual: feature\r\n };\r\n if (version == 1) {\r\n const pathStr = (<Cesium.Cesium3DTileFeature><any>feature).getProperty(\"BrucePath\");\r\n if (pathStr != undefined) {\r\n let path = pathStr.split(\"|\");\r\n let entityTypeId = this.getEntityTypeByPath(path);\r\n rego.entityTypeId = entityTypeId;\r\n rego.entityId = path[path.length - 1];\r\n }\r\n }\r\n else if (version == 2) {\r\n const geomId = +feature.getProperty(\"GeomId\");\r\n if (geomId != null && (!!geomId || geomId == 0)) {\r\n const meta = this.getMetaByGeomId(geomId, feature.tileset);\r\n if (meta) {\r\n rego.entityId = meta.id;\r\n rego.entityTypeId = meta.typeId;\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"Unhandled tileset tree version = \" + version);\r\n }\r\n if (rego?.entityId) {\r\n this.visualsManager.Add(rego);\r\n return rego;\r\n }\r\n return <any>null;\r\n }\r\n\r\n private getMetaByGeomId(geomId: number, tileset: Cesium.Cesium3DTileset): { id: string, typeId: string } {\r\n let modelTree: any = tileset?.extensions?.modelTree;\r\n return this.digMetaByGeomId(geomId, modelTree, []);\r\n }\r\n \r\n private digMetaByGeomId(geomId: number, branch: any, path: string[]): { id: string, typeId: string } {\r\n path = [].concat(<any>path);\r\n path.push(branch.id);\r\n\r\n if (branch.geomId == geomId) {\r\n return { id: path[path.length - 1], typeId: branch.typeId };\r\n }\r\n else if (branch.children) {\r\n for (let i = 0; i < branch.children.length; i++) {\r\n let meta = this.digMetaByGeomId(geomId, branch.children[i], path);\r\n if (meta) {\r\n return meta;\r\n }\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n private getEntityTypeByPath(path: string[]): string {\r\n let modelTree: any = this.cTileset?.extensions?.modelTree;\r\n if (modelTree) {\r\n let data = this.digModelTreeByPath(modelTree, path);\r\n if (data) {\r\n return data.typeId;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n \r\n private digModelTreeByPath(branch: any, path: string[]): any {\r\n // Dereference.\r\n path = JSON.parse(JSON.stringify(path));\r\n \r\n if (path.length <= 0) {\r\n return null;\r\n }\r\n let pathTop = path.splice(0, 1)[0];\r\n if (pathTop != branch.id) {\r\n return null;\r\n }\r\n else if (path.length == 0 && pathTop == branch.id) {\r\n return branch;\r\n }\r\n else if (branch.children) {\r\n for (let i = 0; i < branch.children.length; i++) {\r\n let foundPath = this.digModelTreeByPath(branch.children[i], path);\r\n if (foundPath) {\r\n return foundPath;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.disposed = true;\r\n if (this.cTileset) {\r\n this.cTileset.show = false;\r\n }\r\n this.styler.Dispose();\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\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\n\r\ninterface IRenderedItem {\r\n id: string;\r\n type: MenuItem.EType;\r\n childIds: string[];\r\n item: MenuItem.IItem;\r\n renderManager: RenderManager.Type;\r\n}\r\n\r\n/**\r\n * Utility to keep track of enabled menu items within a Cesium viewer.\r\n */\r\nexport namespace MenuItemManager {\r\n export interface IMenuItemUpdate {\r\n itemId: string;\r\n isEnabling: boolean;\r\n }\r\n\r\n export interface IRenderParams {\r\n apiGetter: BruceApi.IGetter;\r\n item: MenuItem.IItem;\r\n }\r\n\r\n export class Manager {\r\n private viewer: Cesium.Viewer;\r\n public get Viewer(): Cesium.Viewer {\r\n return this.viewer;\r\n }\r\n private items: IRenderedItem[] = [];\r\n private visualsRegister: VisualsRegister.Register;\r\n public get VisualsRegister(): VisualsRegister.Register {\r\n return this.visualsRegister;\r\n }\r\n private onUpdate: BruceEvent<IMenuItemUpdate> = <any>null;\r\n public get OnUpdate(): BruceEvent<IMenuItemUpdate> {\r\n if (!this.onUpdate) {\r\n this.onUpdate = new BruceEvent<IMenuItemUpdate>();\r\n }\r\n return this.onUpdate;\r\n }\r\n \r\n \r\n public constructor(viewer: Cesium.Viewer, visualsRegister?: VisualsRegister.Register) {\r\n this.viewer = viewer;\r\n if (!visualsRegister) {\r\n visualsRegister = new VisualsRegister.Register(viewer);\r\n }\r\n this.visualsRegister = visualsRegister;\r\n }\r\n \r\n /**\r\n * Renders a given menu item and all ids children.\r\n * Will return the enabled item id.\r\n * @param params\r\n * @returns \r\n */\r\n public async RenderItem(params: IRenderParams): Promise<string> {\r\n if (this.items.find(x => x.id == params.item.id)) {\r\n return params.item.id;\r\n }\r\n const rItem: IRenderedItem = {\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 switch (params.item.Type) {\r\n case MenuItem.EType.Entities:\r\n rItem.renderManager = new EntitiesRenderManager.Manager(this.viewer, this.visualsRegister, params.apiGetter, <MenuItem.Item.IBruceEntities>params.item);\r\n break;\r\n case MenuItem.EType.EntitiesLoaded:\r\n rItem.renderManager = new EntitiesLoadedRenderManager.Manager(this.viewer, this.visualsRegister, params.apiGetter, <MenuItem.Item.IEntitiesLoaded>params.item);\r\n break;\r\n case MenuItem.EType.EntitiesIds:\r\n rItem.renderManager = new EntitiesIdsRenderManager.Manager(this.viewer, this.visualsRegister, params.apiGetter, <MenuItem.Item.IEntityIds>params.item);\r\n break;\r\n case MenuItem.EType.Entity:\r\n rItem.renderManager = new EntityRenderManager.Manager(this.viewer, this.visualsRegister, params.apiGetter, <MenuItem.Item.IBruceEntity>params.item);\r\n break;\r\n case MenuItem.EType.CadTileset:\r\n rItem.renderManager = new TilesetCadRenderManager.Manager(this.viewer, this.visualsRegister, params.apiGetter, <MenuItem.Item.ICadTileset>params.item);\r\n break;\r\n case MenuItem.EType.Osm:\r\n // TODO;\r\n break;\r\n case MenuItem.EType.PointCloud:\r\n // TODO;\r\n break;\r\n case MenuItem.EType.EntityTileset:\r\n // TODO;\r\n break;\r\n case MenuItem.EType.Kml:\r\n // TODO;\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 if (rItem.renderManager) {\r\n await rItem.renderManager.Init();\r\n }\r\n this.items.push(rItem);\r\n if (params.item.Children) {\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 this.onUpdate?.Trigger({ isEnabling: true, itemId: rItem.id });\r\n return rItem.id;\r\n }\r\n \r\n /**\r\n * Disables a menu item by ids id.\r\n * This will disable all children as well.\r\n * @param id \r\n */\r\n public async RemoveItemById(id: string): Promise<void> {\r\n const item = this.items.find(x => x.id === id);\r\n if (item) {\r\n for (let i = 0; i < item.childIds.length; i++) {\r\n const child = this.items.find(x => x.id === item.childIds[i]);\r\n if (child) {\r\n await this.RemoveItemById(child.id);\r\n }\r\n }\r\n try {\r\n item.renderManager?.Dispose();\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n this.items = this.items.filter(x => x.id !== id);\r\n this.onUpdate?.Trigger({ isEnabling: false, itemId: item.id });\r\n }\r\n }\r\n\r\n public GetEnabledItemIds(): string[] {\r\n return this.items.map(x => x.id);\r\n }\r\n }\r\n}","import { BruceApi, Entity, MenuItem, ObjectUtils, ProjectView, ProjectViewBookmark, Tileset, ZoomControl } from \"bruce-models\";\r\nimport { MenuItemManager } from \"./menu-item-manager\";\r\n\r\n/**\r\n * Utility to help generate menu items for rendering various data.\r\n */\r\nexport namespace RenderHelper {\r\n export interface IParams {\r\n apiGetter: BruceApi.IGetter;\r\n manager: MenuItemManager.Manager;\r\n }\r\n\r\n export async function RenderEntities(params: IParams, entityIds: string[]): Promise<string> {\r\n const item: MenuItem.Item.IEntityIds = {\r\n Caption: \"Rendering Loaded Entities\",\r\n Type: <MenuItem.EType><any>MenuItem.EType.EntitiesLoaded,\r\n id: ObjectUtils.UId(),\r\n Children: [],\r\n BruceEntity: {\r\n EntityIds: entityIds\r\n },\r\n CameraZoomSettings: [\r\n {\r\n DisplayType: ZoomControl.EDisplayType.Model3D,\r\n LODCategoryID: \"glb\",\r\n LODLevel: 0,\r\n MaxZoom: 100000,\r\n MinZoom: 0,\r\n StyleID: 0 // 0 = Attempt to get entity type's default.\r\n }\r\n ]\r\n };\r\n return await params.manager.RenderItem({\r\n apiGetter: params.apiGetter,\r\n item: item\r\n });\r\n }\r\n\r\n export async function RenderEntityTypes(params: IParams, typeIds: string[]): Promise<string[]> {\r\n const renderedItemIds: string[] = [];\r\n for (let i = 0; i < typeIds.length; i++) {\r\n const typeId = typeIds[i];\r\n const menuItem = MenuItem.CreateFromTypeId(typeId, 0);\r\n const itemId = await params.manager.RenderItem({\r\n apiGetter: params.apiGetter,\r\n item: menuItem\r\n });\r\n renderedItemIds.push(itemId);\r\n }\r\n return renderedItemIds;\r\n }\r\n\r\n export async function RenderEntityFilter(params: IParams, filter: Entity.Filter.V1.IFilter): Promise<string> {\r\n throw(new Error(\"Not implemented.\"));\r\n }\r\n\r\n export async function RenderBookmarkItems(params: IParams, viewId: string, bookmarkId: string): Promise<string[]> {\r\n const api = params.apiGetter.getApi(params.apiGetter.accountId, params.apiGetter.env);\r\n const view = await ProjectView.Get(api, viewId);\r\n const bookmark = await ProjectViewBookmark.Get(api, viewId, bookmarkId);\r\n const items = view.Settings?.LayersMenu ?? [];\r\n const enabledItemIds = bookmark.Settings?.selectedItemIds ?? [];\r\n const renderedItemIds: string[] = [];\r\n async function traverseItems(item: MenuItem.IItem): Promise<void> {\r\n if (enabledItemIds.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 < items.length; i++) {\r\n await traverseItems(items[i]);\r\n }\r\n return renderedItemIds;\r\n }\r\n\r\n export async function RenderMenuItems(params: IParams, menuItems: MenuItem.IItem[]): Promise<string[]> {\r\n const renderedItemIds: string[] = [];\r\n for (let i = 0; i < menuItems.length; i++) {\r\n const menuItem = menuItems[i];\r\n const itemId = await params.manager.RenderItem({\r\n apiGetter: params.apiGetter,\r\n item: menuItem\r\n });\r\n renderedItemIds.push(itemId);\r\n }\r\n return renderedItemIds;\r\n }\r\n\r\n export async function RenderTileset(params: IParams, tilesetId: string): Promise<string> {\r\n const api = params.apiGetter.getApi(params.apiGetter.accountId, params.apiGetter.env);\r\n const tileset = await Tileset.Get(api, tilesetId);\r\n if (tileset.type == Tileset.EType.Cad) {\r\n const menuItem: MenuItem.Item.ICadTileset = {\r\n Caption: \"Rendering Tileset\",\r\n FlyTo: true,\r\n id: ObjectUtils.UId(),\r\n tileset: {\r\n TilesetID: tilesetId\r\n },\r\n Type: MenuItem.EType.CadTileset,\r\n styleId: 0,\r\n Children: []\r\n };\r\n return await params.manager.RenderItem({\r\n item: menuItem,\r\n apiGetter: params.apiGetter\r\n });\r\n }\r\n else {\r\n throw(new Error(\"Tileset type not supported.\"));\r\n }\r\n }\r\n}","import { BruceApi, ProjectView, ProjectViewBookmark, ProjectViewTileSource } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\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\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\nenum EDefaultTerrain {\r\n CesiumWorldTerrain = \"cesiumworldterrain\",\r\n Linz = \"linz\",\r\n FlatTerrain = \"flatterrain\"\r\n}\r\n\r\nconst DEFAULT_TERRAIN_NAMES = [\r\n EDefaultTerrain.CesiumWorldTerrain,\r\n EDefaultTerrain.Linz,\r\n EDefaultTerrain.FlatTerrain\r\n];\r\n\r\nfunction isDefaultTerrain(name: string | EDefaultTerrain): boolean {\r\n name = prepLegacyName(name);\r\n return DEFAULT_TERRAIN_NAMES.includes(<EDefaultTerrain>name);\r\n}\r\n\r\nfunction createTerrainBId(source: ProjectViewTileSource.ITerrainSource): string {\r\n if (!source) {\r\n return \"\";\r\n }\r\n if (isDefaultTerrain(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\nfunction createImageryBId(source: ProjectViewTileSource.IMapSource): string {\r\n if (!source) {\r\n return \"\";\r\n }\r\n if (isDefaultImagery(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\nenum EDefaultImagery {\r\n BingMapsAerial = \"bingmapsaerial\",\r\n BingMapsAerialWithLabels = \"bingmapsaerialwithlabels\",\r\n BingMapsRoads = \"bingmapsroads\",\r\n MapboxSatellite = \"mapboxsatellite\",\r\n MapBoxStreets = \"mapboxstreets\",\r\n MapBoxStreetsClassic = \"mapboxstreetsclassic\",\r\n EsriWorldImagery = \"esriworldimagery\",\r\n EsriWorldStreetMap = \"esriworldstreetmap\",\r\n EsriNationalGeographic = \"esrinationalgeographic\",\r\n OpenStreetMap = \"openstreetmap\",\r\n StamenWaterColor = \"stamenwatercolor\",\r\n StamenToner = \"stamentoner\",\r\n Grid = \"grid\"\r\n}\r\n\r\nconst DEFAULT_IMAGERY_NAMES = [\r\n EDefaultImagery.BingMapsAerial,\r\n EDefaultImagery.BingMapsAerialWithLabels,\r\n EDefaultImagery.BingMapsRoads,\r\n EDefaultImagery.MapboxSatellite,\r\n EDefaultImagery.MapBoxStreets,\r\n EDefaultImagery.MapBoxStreetsClassic,\r\n EDefaultImagery.EsriWorldImagery,\r\n EDefaultImagery.EsriWorldStreetMap,\r\n EDefaultImagery.EsriNationalGeographic,\r\n EDefaultImagery.OpenStreetMap,\r\n EDefaultImagery.StamenWaterColor,\r\n EDefaultImagery.StamenToner,\r\n EDefaultImagery.Grid\r\n];\r\n\r\nfunction isDefaultImagery(name: string | EDefaultImagery): boolean {\r\n name = prepLegacyName(name);\r\n return DEFAULT_IMAGERY_NAMES.includes(<EDefaultImagery>name);\r\n}\r\n\r\nconst DEFAULT_BING_KEY = \"AqL0uYT5T84jiJeX55_b9zJeeP3MX2p1WLOHH4ljIEPZ7ZL2M81bYLzyYeSwuzzl\";\r\nconst DEFAULT_MAPBOX_KEY = \"pk.eyJ1IjoiYWxleHRodW5kZXIiLCJhIjoiY2psbHJxbnN5MTBvbzNxczZwMHNpeTI0MCJ9.fdoj2QW_7n8RV4e0NCFgZA\";\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\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 interface ILayerExt extends Cesium.ImageryLayer {\r\n _bId?: string;\r\n }\r\n\r\n export interface IParams {\r\n apiGetter: BruceApi.IGetter;\r\n tilesetIds: string[];\r\n viewer: Cesium.Viewer;\r\n ignoreIds?: string[];\r\n }\r\n\r\n export interface ILegacyViewParams {\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 ILegacyParams {\r\n data: ProjectViewTileSource.IMapSource;\r\n apiGetter: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export function MarkProvider(provider: Cesium.ImageryLayer, id: string): void {\r\n (provider as ILayerExt)._bId = id;\r\n }\r\n\r\n export function Render(params: IParams): void {\r\n throw(\"Not implemented\");\r\n }\r\n\r\n function RenderLegacy(params: ILegacyParams): ILayerExt {\r\n const enabled: ILayerExt[] = gatherEnabledImageries(params.viewer);\r\n const tile = params.data;\r\n const bId = createImageryBId(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 (isDefaultImagery(tile.Name)) {\r\n let provider: Cesium.ImageryProvider = <any>null;\r\n // TODO: Rest of defaults.\r\n // TODO: Should be enum.\r\n switch (prepLegacyName(tile.Name)) {\r\n case EDefaultImagery.BingMapsAerial:\r\n // TODO: Read account key if available.\r\n provider = new Cesium.BingMapsImageryProvider({\r\n url: \"https://dev.virtualearth.net\",\r\n mapStyle: Cesium.BingMapsStyle.AERIAL,\r\n key: DEFAULT_BING_KEY\r\n });\r\n break;\r\n case EDefaultImagery.BingMapsAerialWithLabels:\r\n // TODO: Read account key if available.\r\n provider = new Cesium.BingMapsImageryProvider({\r\n url: \"https://dev.virtualearth.net\",\r\n mapStyle: Cesium.BingMapsStyle.AERIAL_WITH_LABELS,\r\n key: DEFAULT_BING_KEY\r\n });\r\n break;\r\n case EDefaultImagery.BingMapsRoads:\r\n // TODO: Read account key if available.\r\n provider = new Cesium.BingMapsImageryProvider({\r\n url: \"https://dev.virtualearth.net\",\r\n mapStyle: Cesium.BingMapsStyle.ROAD_ON_DEMAND,\r\n key: DEFAULT_BING_KEY\r\n });\r\n break;\r\n case EDefaultImagery.MapboxSatellite:\r\n // TODO: Read account key if available.\r\n provider = new Cesium.MapboxImageryProvider({\r\n mapId: \"mapbox.satellite\",\r\n accessToken: DEFAULT_MAPBOX_KEY\r\n });\r\n break;\r\n case EDefaultImagery.MapBoxStreets:\r\n // TODO: Read account key if available.\r\n provider = new Cesium.MapboxImageryProvider({\r\n mapId: \"satellite-streets-v11\",\r\n accessToken: DEFAULT_MAPBOX_KEY\r\n });\r\n break;\r\n case EDefaultImagery.MapBoxStreetsClassic:\r\n // TODO: Read account key if available.\r\n provider = new Cesium.MapboxImageryProvider({\r\n mapId: \"streets-v11\",\r\n accessToken: DEFAULT_MAPBOX_KEY\r\n });\r\n break;\r\n case 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 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 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 EDefaultImagery.OpenStreetMap:\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: \"https://a.tile.openstreetmap.org/\"\r\n });\r\n break;\r\n case 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 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 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 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: 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: 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: tile.FileExtension,\r\n minimumLevel: min,\r\n maximumLevel: max\r\n });\r\n break;\r\n case \"MapBoxImagery\":\r\n // TODO: Read default account key when missing.\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 + tile.ProgramKey\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 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 RenderLegacyView(params: ILegacyViewParams): Promise<void> {\r\n const api = params.apiGetter.getApi(params.apiGetter.accountId, params.apiGetter.env);\r\n\r\n const view = await ProjectView.Get(api, params.viewId);\r\n let bookmark: ProjectViewBookmark.IBookmark = <any>null;\r\n if (params.bookmarkId) {\r\n bookmark = await ProjectViewBookmark.Get(api, params.viewId, params.bookmarkId);\r\n }\r\n\r\n const data: ProjectViewTileSource.IMapSource[] = [];\r\n const dataNames: string[] = [];\r\n if (bookmark.Settings?.imagery) {\r\n for (let i = 0; i < bookmark.Settings.imagery.length; i++) {\r\n const source = bookmark.Settings.imagery[i];\r\n dataNames.push(source.title);\r\n }\r\n }\r\n else if (view.Settings?.DefaultMapTiles) {\r\n dataNames.push(view.Settings.DefaultMapTiles);\r\n }\r\n const tiles = view.Settings?.CesiumMapSources ?? [];\r\n await ProjectViewTileSource.MergeMapTemplateData(params.apiGetter, tiles, view.Settings?.CesiumMapSources == null);\r\n\r\n for (let i = 0; i < dataNames.length; i++) {\r\n const name = dataNames[i];\r\n for (let j = 0; j < tiles.length; j++) {\r\n const tile = tiles[j];\r\n if (CompareLegacyNames(tile.Name, name)) {\r\n data.push(tile);\r\n break;\r\n }\r\n } \r\n }\r\n\r\n let enabled: ILayerExt[] = gatherEnabledImageries(params.viewer);\r\n const layers: Cesium.ImageryLayer[] = [];\r\n\r\n // Gather layers we want to render.\r\n // Any new layer is added to viewer at the bottom.\r\n if (params.ignoreIds) {\r\n for (let i = 0; i < params.ignoreIds.length; i++) {\r\n const id = params.ignoreIds[i];\r\n const layer = enabled.find((x) => {\r\n const layer = x as ILayerExt;\r\n if (layer._bId === id) {\r\n return true;\r\n }\r\n });\r\n if (layer) {\r\n layers.push(layer);\r\n }\r\n }\r\n }\r\n for (let i = 0; i < data.length; i++) {\r\n const tile = data[i];\r\n const layer = RenderLegacy({\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 enabled = enabled.reverse();\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 Terrain {\r\n export interface IProviderExt extends Cesium.CesiumTerrainProvider {\r\n _bId: string;\r\n }\r\n\r\n export interface IParams {\r\n apiGetter: BruceApi.IGetter;\r\n tilesetId: string;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export interface ILegacyParams {\r\n data: ProjectViewTileSource.ITerrainSource;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export function Render(params: IParams): void {\r\n throw(\"Not implemented\");\r\n }\r\n\r\n export function RenderLegacy(params: ILegacyParams): void {\r\n const bId = createTerrainBId(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 (isDefaultTerrain(params.data.Name)) {\r\n const name = prepLegacyName(params.data.Name);\r\n switch (name) {\r\n case EDefaultTerrain.CesiumWorldTerrain:\r\n provider = <any>Cesium.createWorldTerrain({ \r\n requestVertexNormals: true\r\n });\r\n break;\r\n case 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 case EDefaultTerrain.FlatTerrain:\r\n provider = <any>new Cesium.EllipsoidTerrainProvider();\r\n break;\r\n }\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 params.viewer.terrainProvider = provider;\r\n }\r\n }\r\n }\r\n}","import { BruceApi, Camera, ProjectView, ProjectViewBookmark, ProjectViewTileSource } from \"bruce-models\";\r\nimport { MenuItemManager } from \"./menu-item-manager\";\r\nimport { RenderHelper } from \"./render-helper\";\r\nimport * as Cesium from \"cesium\";\r\nimport { TileRenderEngine } from \"./tile-render-engine\";\r\n\r\nexport namespace ViewRenderEngine {\r\n export interface IRenderParams {\r\n viewId: string;\r\n bookmarkId?: string;\r\n skipTransition: boolean;\r\n apiGetter: BruceApi.IGetter;\r\n manager: MenuItemManager.Manager;\r\n }\r\n\r\n export async function Render(params: IRenderParams): Promise<void> {\r\n const api = params.apiGetter.getApi(params.apiGetter.accountId, params.apiGetter.env);\r\n const view = await ProjectView.Get(api, params.viewId);\r\n let bookmark: ProjectViewBookmark.IBookmark = <any>null;\r\n if (params.bookmarkId) {\r\n bookmark = await ProjectViewBookmark.Get(api, params.viewId, params.bookmarkId);\r\n }\r\n\r\n let terrainTiles = view.Settings?.CesiumTerrainSources ?? [];\r\n let terrainTile: ProjectViewTileSource.ITerrainSource = <any>null;\r\n let terrainTileName: string = <any>null;\r\n if (bookmark?.Settings?.terrain) {\r\n terrainTileName = bookmark.Settings.terrain;\r\n }\r\n else {\r\n terrainTileName = <string>view.Settings?.DefaultTerrain;\r\n }\r\n await ProjectViewTileSource.MergeTerrainTemplateData(params.apiGetter, terrainTiles, view.Settings?.CesiumTerrainSources == null);\r\n for (let i = 0; i < terrainTiles.length; i++) {\r\n const tile = terrainTiles[i];\r\n if (TileRenderEngine.CompareLegacyNames(tile.Name, terrainTileName)) {\r\n terrainTile = tile;\r\n break;\r\n }\r\n }\r\n if (terrainTile) {\r\n TileRenderEngine.Terrain.RenderLegacy({\r\n data: terrainTile,\r\n viewer: params.manager.Viewer,\r\n });\r\n }\r\n\r\n await TileRenderEngine.Map.RenderLegacyView({\r\n apiGetter: params.apiGetter,\r\n bookmarkId: <string>params.bookmarkId,\r\n viewer: params.manager.Viewer,\r\n viewId: params.viewId,\r\n ignoreIds: []\r\n });\r\n\r\n // TODO: Other scene settings.\r\n // TODO: Hidden entities.\r\n // TODO: Rendered relationships.\r\n\r\n let frustum = bookmark.Settings?.cameraFrustum;\r\n if (frustum == null) {\r\n frustum = Camera.EFrustum.Perspective;\r\n }\r\n const scene = params.manager.Viewer.scene;\r\n const curFrustum = scene.camera.frustum instanceof Cesium.OrthographicFrustum ? Camera.EFrustum.Orthographic : Camera.EFrustum.Perspective;\r\n if (curFrustum != frustum) {\r\n if (frustum == Camera.EFrustum.Perspective) {\r\n scene.camera.switchToPerspectiveFrustum();\r\n scene.screenSpaceCameraController.enableTilt = true;\r\n }\r\n else {\r\n scene.camera.switchToOrthographicFrustum();\r\n scene.screenSpaceCameraController.enableTilt = false;\r\n }\r\n params.skipTransition = true;\r\n }\r\n\r\n const camera = bookmark.Camera;\r\n const pos = Cesium.Cartesian3.fromDegrees(\r\n +camera.position.longitude, \r\n +camera.position.latitude, \r\n +camera.position.height\r\n );\r\n params.manager.Viewer.scene.camera.flyTo({\r\n destination: pos,\r\n orientation: {\r\n heading: +camera.heading,\r\n pitch: +camera.pitch,\r\n roll: +camera.roll\r\n },\r\n duration: params.skipTransition ? 0 : 2\r\n });\r\n\r\n let go = bookmark?.Settings?.groundOcclusion;\r\n if (go == null) {\r\n go = view.Settings?.GroundOcclusion;\r\n }\r\n if (go == null) {\r\n go = false;\r\n }\r\n params.manager.Viewer.scene.globe.depthTestAgainstTerrain = go;\r\n\r\n const enabledItems = params.manager.GetEnabledItemIds();\r\n const newItemIds = bookmark?.Settings?.selectedItemIds ?? [];\r\n for (const id of enabledItems) {\r\n if (newItemIds.indexOf(id) === -1) {\r\n params.manager.RemoveItemById(id);\r\n }\r\n }\r\n if (params.bookmarkId) {\r\n await RenderHelper.RenderBookmarkItems({\r\n apiGetter: params.apiGetter,\r\n manager: params.manager,\r\n }, params.viewId, params.bookmarkId);\r\n }\r\n }\r\n}","import { DelayQueue, EntityType, MathUtils, ObjectUtils } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { DrawingUtils } from \"../../utils/drawing-utils\";\r\nimport { VisualsRegister } from \"../visuals-register\";\r\nimport { IRenderAddon } from \"./render-addon\";\r\n\r\nfunction createContainer(viewer: Cesium.Viewer): HTMLElement {\r\n if (!viewer.canvas.parentElement) {\r\n return <any>null;\r\n }\r\n const container = document.createElement(\"div\");\r\n container.setAttribute(\"style\",\r\n `\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n pointer-events: none;\r\n z-index: 1;\r\n `);\r\n (viewer.canvas.parentElement as HTMLElement).appendChild(container);\r\n return container;\r\n}\r\n\r\nfunction destroyContainer(container: HTMLElement): void {\r\n if (container?.parentElement && container.parentElement.contains(container)) {\r\n container.parentElement.removeChild(container);\r\n }\r\n}\r\n\r\ninterface IItem {\r\n element: HTMLElement;\r\n text: string;\r\n}\r\n\r\nnamespace MPolyline {\r\n export function Render(container: HTMLElement, viewer: Cesium.Viewer, entity: Cesium.Entity): IItem[] {\r\n const items: IItem[] = [];\r\n\r\n if (entity.polyline?.positions) {\r\n let pointsUnk = entity.polyline.positions;\r\n if (pointsUnk.getValue) {\r\n pointsUnk = pointsUnk.getValue(viewer.scene.lastRenderTime);\r\n }\r\n const points = <any>pointsUnk as Cesium.Cartesian3[];\r\n if (points && points.length) {\r\n let totalLength = 0;\r\n for (let i = 0; i < points.length; i++) {\r\n const p1 = points[i];\r\n const p2 = points[i + 1];\r\n if (p1 && p2) {\r\n totalLength += Cesium.Cartesian3.distance(p1, p2);\r\n }\r\n }\r\n if (totalLength <= 0) {\r\n return items;\r\n }\r\n\r\n const center = DrawingUtils.PointAcrossPolyline(viewer, points, totalLength / 2);\r\n const screenPos = viewer.scene.cartesianToCanvasCoordinates(center);\r\n\r\n if (screenPos) {\r\n const element = document.createElement(\"div\");\r\n element.setAttribute(\"style\",\r\n `\r\n position: absolute;\r\n top: ${screenPos.y}px;\r\n left: ${screenPos.x}px;\r\n color: white;\r\n font-size: 14px;\r\n z-index: 1;\r\n padding: 4px 6px;\r\n border-radius: 3px;\r\n background-color: black;\r\n color: white;\r\n `);\r\n const text = MathUtils.Round(totalLength, 3) + \"m\";\r\n element.innerText = text;\r\n const bounds = element.getBoundingClientRect();\r\n element.style.marginLeft = (-bounds.width / 2) + \"px\";\r\n element.style.marginTop = (-bounds.height - 10) + \"px\";\r\n container.appendChild(element);\r\n items.push({ element, text: text });\r\n }\r\n }\r\n }\r\n return items;\r\n }\r\n}\r\n\r\nnamespace MPoint {\r\n export function Render(container: HTMLElement, viewer: Cesium.Viewer, entity: Cesium.Entity): IItem[] {\r\n const items: IItem[] = [];\r\n\r\n if (entity?.position) {\r\n let posUnk: any = <any>entity.position;\r\n if (posUnk.getValue) {\r\n posUnk = posUnk.getValue(viewer.scene.lastRenderTime);\r\n }\r\n const pos = posUnk as Cesium.Cartesian3;\r\n if (!pos?.x) {\r\n return items;\r\n }\r\n\r\n const screenPos = viewer.scene.cartesianToCanvasCoordinates(pos);\r\n if (screenPos) {\r\n const element = document.createElement(\"div\");\r\n element.setAttribute(\"style\",\r\n `\r\n position: absolute;\r\n top: ${screenPos.y}px;\r\n left: ${screenPos.x}px;\r\n color: white;\r\n font-size: 14px;\r\n z-index: 1;\r\n padding: 4px 6px;\r\n border-radius: 3px;\r\n background-color: black;\r\n color: white;\r\n `);\r\n const point = Cesium.Cartographic.fromCartesian(pos);\r\n const lat = MathUtils.Round(Cesium.Math.toDegrees(point.latitude), 4);\r\n const lon = MathUtils.Round(Cesium.Math.toDegrees(point.longitude), 4);\r\n const alt = MathUtils.Round(Cesium.Math.toDegrees(point.height), 3);\r\n const text = `${lat}, ${lon}, ${alt}`;\r\n element.innerText = text;\r\n const bounds = element.getBoundingClientRect();\r\n // TODO: Account for billboard image size.\r\n element.style.marginLeft = (-bounds.width / 2) + \"px\";\r\n element.style.marginTop = (-bounds.height - 30) + \"px\";\r\n container.appendChild(element);\r\n items.push({ element, text: text });\r\n }\r\n }\r\n return items;\r\n }\r\n}\r\n\r\nfunction findVisual(visuals: VisualsRegister.Visual[]): VisualsRegister.Visual {\r\n visuals.sort((a, b) => {\r\n if (a.show && !b.show) {\r\n return -1;\r\n }\r\n if (!a.show && b.show) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n for (let i = 0; i < visuals.length; i++) {\r\n const visual = visuals[i];\r\n if (visual instanceof Cesium.Entity) {\r\n return visual;\r\n }\r\n }\r\n return <any>null;\r\n}\r\n\r\n/**\r\n * Measure addon will render measurement details on the position of the 3d object.\r\n * For example it will add lengths to the line segments of a polyline.\r\n */\r\nexport class MeasureAddon implements IRenderAddon {\r\n public Id: string = ObjectUtils.UId();\r\n private visual: VisualsRegister.Visual = <any>null;\r\n private viewer: Cesium.Viewer;\r\n private cRenderListener: Cesium.Event.RemoveCallback;\r\n private updateQueue: DelayQueue;\r\n private items: IItem[] = [];\r\n private container: HTMLElement = <any>null;\r\n\r\n\r\n constructor(viewer: Cesium.Viewer) {\r\n this.viewer = viewer;\r\n this.cRenderListener = this.viewer.scene.postRender.addEventListener(() => {\r\n this.updateQueue.Call();\r\n });\r\n this.updateQueue = new DelayQueue(() => {\r\n this.doUpdate();\r\n }, 1000 / 60);\r\n }\r\n\r\n private doUpdate(): void {\r\n if (!this.container) {\r\n this.container = createContainer(this.viewer);\r\n }\r\n this.Remove();\r\n if (!this.container) {\r\n return;\r\n }\r\n const visual = this.visual;\r\n if (visual instanceof Cesium.Entity) {\r\n const entity = visual as Cesium.Entity;\r\n if (entity.polyline) {\r\n this.items = MPolyline.Render(this.container, this.viewer, entity);\r\n }\r\n else if (entity.point || entity.billboard) {\r\n this.items = MPoint.Render(this.container, this.viewer, entity);\r\n }\r\n }\r\n else {\r\n // We don't support prims or tiles.\r\n }\r\n }\r\n\r\n public Render(visuals: VisualsRegister.Visual[]): void {\r\n const newVisual = findVisual(visuals);\r\n if (newVisual != this.visual) {\r\n this.Remove();\r\n }\r\n this.visual = newVisual;\r\n this.updateQueue.Call(true);\r\n }\r\n\r\n public Remove(): void {\r\n for (let i = 0; i < this.items.length; i++) {\r\n const item = this.items[i];\r\n if (item.element?.parentElement && item.element.parentElement.contains(item.element)) {\r\n item.element.parentElement.removeChild(item.element);\r\n }\r\n }\r\n this.items = [];\r\n }\r\n\r\n public Dispose(): void {\r\n this.cRenderListener();\r\n destroyContainer(this.container);\r\n }\r\n}"],"names":["Cesium.Cartesian2","Cesium.Cartographic","Cesium.Math","Cesium.Viewer","Cesium.ArcGisMapServerImageryProvider","Cesium.ScreenSpaceEventType","Cesium.Cartesian3","Cesium.EllipsoidGeodesic","Cesium.Entity","Cesium.Color","Cesium.HeightReference","Cesium.HorizontalOrigin","Cesium.VerticalOrigin","Cesium.ClassificationType","Cesium.ArcType","Cesium.PolygonHierarchy","Cesium.ShadowMode","Cesium.PolylineGraphics","Cesium.HeadingPitchRoll","Cesium.Transforms","Cesium.ColorBlendMode","Entity","Cesium.Primitive","Cesium.Cesium3DTileFeature","colorToCColor","Cesium.Matrix4","Cesium.Cesium3DTileset","Cesium.HeadingPitchRange","Cesium.BingMapsImageryProvider","Cesium.BingMapsStyle","Cesium.MapboxImageryProvider","Cesium.OpenStreetMapImageryProvider","Cesium.GridImageryProvider","Cesium.GeographicTilingScheme","Cesium.ImageryLayer","Cesium.UrlTemplateImageryProvider","Cesium.TileMapServiceImageryProvider","Cesium.createWorldTerrain","Cesium.CesiumTerrainProvider","Cesium.EllipsoidTerrainProvider","Cesium.OrthographicFrustum"],"mappings":"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"}