bruce-cesium 0.2.0 → 0.2.1

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"],"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 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\n\r\ntype Visual = Cesium.Entity | Cesium.Primitive | Cesium.Cesium3DTileFeature;\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: 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(viewer: Cesium.Viewer, visual: Visual, show: boolean): 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[]): 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 updateEntityShow(viewer, rego.visual, rego === highestPriority);\r\n }\r\n}\r\n\r\nfunction markEntity(register: VisualsRegister.Register, rego: VisualsRegister.IVisualRego, visual: 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: 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: 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: 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 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 \r\n \r\n constructor(viewer: Cesium.Viewer) {\r\n this.viewer = viewer;\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]);\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]);\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]);\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}"],"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 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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"}