bruce-cesium 0.4.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/bruce-cesium.es5.js +46 -58
  2. package/dist/bruce-cesium.es5.js.map +1 -1
  3. package/dist/bruce-cesium.umd.js +45 -57
  4. package/dist/bruce-cesium.umd.js.map +1 -1
  5. package/dist/lib/bruce-cesium.js +30 -30
  6. package/dist/lib/rendering/entity-render-engine.js +848 -848
  7. package/dist/lib/rendering/menu-item-manager.js +252 -252
  8. package/dist/lib/rendering/render-addons/measure-addon.js +186 -186
  9. package/dist/lib/rendering/render-addons/render-addon.js +2 -2
  10. package/dist/lib/rendering/render-helper.js +296 -296
  11. package/dist/lib/rendering/render-managers/common/shared-getters.js +31 -31
  12. package/dist/lib/rendering/render-managers/entities/entities-ids-render-manager.js +146 -146
  13. package/dist/lib/rendering/render-managers/entities/entities-loaded-render-manager.js +143 -143
  14. package/dist/lib/rendering/render-managers/entities/entities-render-manager.js +234 -234
  15. package/dist/lib/rendering/render-managers/entities/entity-render-manager.js +139 -139
  16. package/dist/lib/rendering/render-managers/render-manager.js +50 -50
  17. package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js +236 -236
  18. package/dist/lib/rendering/render-managers/tilesets/tileset-osm-render-manager.js +320 -320
  19. package/dist/lib/rendering/tile-render-engine.js +815 -831
  20. package/dist/lib/rendering/tile-render-engine.js.map +1 -1
  21. package/dist/lib/rendering/tileset-render-engine.js +499 -499
  22. package/dist/lib/rendering/view-render-engine.js +305 -309
  23. package/dist/lib/rendering/view-render-engine.js.map +1 -1
  24. package/dist/lib/rendering/visuals-register.js +402 -394
  25. package/dist/lib/rendering/visuals-register.js.map +1 -1
  26. package/dist/lib/utils/drawing-utils.js +42 -42
  27. package/dist/lib/utils/entity-utils.js +99 -99
  28. package/dist/lib/utils/measure-utils.js +34 -34
  29. package/dist/lib/utils/view-utils.js +72 -72
  30. package/dist/lib/viewer/cesium-view-monitor.js +231 -231
  31. package/dist/lib/viewer/viewer-utils.js +85 -85
  32. package/dist/types/rendering/tile-render-engine.d.ts +2 -4
  33. package/dist/types/rendering/visuals-register.d.ts +2 -0
  34. package/package.json +76 -76
@@ -1 +1 @@
1
- {"version":3,"file":"bruce-cesium.umd.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/render-managers/common/shared-getters.ts","../src/rendering/render-managers/tilesets/tileset-osm-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","../src/utils/view-utils.ts"],"sourcesContent":["import { Bounds, BruceEvent, Carto, ViewMonitor } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\n\nconst TIME_LAG = 300;\nconst POSITION_CHECK_TIMER = 950;\nconst DEFAULT_GROUNDED_HEIGHT = 300;\nconst MINIMUM_VIEW_AREA_SIZE_DEGREES = 0.01;\nconst NET_STEP_PERCENT = 5;\nconst BORDER_STEPS = 3;\n\nenum ESearchStatus {\n LocationFound = 1,\n LocationChanged = 2,\n LocationMissing = 3\n}\n\nfunction netScanViewForBoundaries(viewer: Cesium.Viewer): Bounds.IReqBounds {\n let maxLong = - 2 * Math.PI;\n let minLong = 2 * Math.PI;\n let maxLat = -2 * Math.PI;\n let minLat = 2 * Math.PI;\n let found = 0;\n\n const updateMinMaxForPoint = (stepX: number, stepY: number) => {\n const x = Math.round(0 + (viewer.container.clientWidth / 100) * (stepX * NET_STEP_PERCENT));\n const y = Math.round(0 + (viewer.container.clientHeight / 100) * (stepY * NET_STEP_PERCENT));\n const winPos = new Cesium.Cartesian2(x, y);\n try {\n let intersection = getAdjustedGroundIntersectionOfCameraRay(viewer, winPos);\n if (intersection) {\n let point = (<any> Cesium.Cartographic).fromCartesian(intersection, viewer.scene.globe.ellipsoid);\n maxLong = Math.max(maxLong, point.longitude);\n maxLat = Math.max(maxLat, point.latitude);\n minLong = Math.min(minLong, point.longitude);\n minLat = Math.min(minLat, point.latitude);\n found++;\n }\n }\n catch {\n\n }\n };\n\n // Outer circle.\n updateMinMaxForPoint(BORDER_STEPS, BORDER_STEPS);\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS, BORDER_STEPS);\n updateMinMaxForPoint(BORDER_STEPS, (100 / NET_STEP_PERCENT) - BORDER_STEPS);\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS, (100 / NET_STEP_PERCENT) - BORDER_STEPS);\n\n // Inner circle.\n updateMinMaxForPoint(BORDER_STEPS * 2, BORDER_STEPS * 2);\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS * 2, BORDER_STEPS * 2);\n updateMinMaxForPoint(BORDER_STEPS * 2, (100 / NET_STEP_PERCENT) - BORDER_STEPS * 2);\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS * 2, (100 / NET_STEP_PERCENT) - BORDER_STEPS * 2);\n\n if (found > 0) {\n const viewRect: Bounds.IReqBounds = {\n east: maxLong,\n west: minLong,\n north: maxLat,\n south: minLat\n };\n return viewRect;\n }\n return <any>null;\n}\n\nfunction getAdjustedGroundIntersectionOfCameraRay(viewer: Cesium.Viewer, screenPos: Cesium.Cartesian2): Cesium.Cartesian3 {\n const ray = viewer.camera.getPickRay(screenPos);\n const intersection = ray ? viewer.scene.globe.pick(ray, viewer.scene) : null;\n if (intersection) {\n return intersection;\n }\n return <any>null;\n}\n\nfunction areBoundsEqual(a: Bounds.IReqBounds, b: Bounds.IReqBounds): boolean {\n return a.north == b.north && a.south == b.south && a.east == b.east && a.west == b.west;\n}\n\nfunction arePosEqual(a: Carto.ICarto, b: Carto.ICarto): boolean {\n return a.latitude == b.latitude && a.longitude == b.longitude;\n}\n\n/**\n * Monitors and emits events when the Cesium view changes.\n */\nexport class CesiumViewMonitor implements ViewMonitor.IMonitor {\n private viewer: Cesium.Viewer;\n private pendingTimeout: any;\n private checkInterval: any;\n private target: Carto.ICarto = <any>null;\n private bounds: Bounds.IReqBounds = <any>null;\n private disposed: boolean = false;\n private updatedEvent: BruceEvent<ViewMonitor.IArea> = <any>null;\n public get Disposed(): boolean {\n return this.disposed;\n }\n\n\n public constructor(viewer: Cesium.Viewer) {\n this.viewer = viewer;\n this.tryEmitUpdate();\n this.checkInterval = setInterval(() => {\n this.updateQueue();\n },\n POSITION_CHECK_TIMER);\n }\n\n public Updated(): BruceEvent<ViewMonitor.IArea> {\n if (!this.updatedEvent) {\n this.updatedEvent = new BruceEvent();\n }\n return this.updatedEvent;\n }\n\n public GetBounds(): Bounds.IReqBounds {\n return this.bounds;\n }\n\n public GetTarget(): Carto.ICarto {\n return this.target;\n }\n\n public DoUpdate(): void {\n this.tryEmitUpdate();\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n clearInterval(this.checkInterval);\n }\n\n private tryDoUpdate(): ESearchStatus {\n if (!this.viewer || this.viewer.isDestroyed()) {\n this.Dispose();\n return ESearchStatus.LocationMissing;\n }\n\n let viewRect: Bounds.IReqBounds = <any>null;\n let center: Carto.ICarto = <any>null;\n\n const camera = this.viewer.camera;\n const terrainHeight = this.viewer.scene.globe.getHeight(camera.positionCartographic);\n const cameraPosition = this.viewer.camera.positionCartographic;\n\n // We are almost at the ground, screw horizon, just load around.\n if (terrainHeight && ((cameraPosition.height - terrainHeight) < DEFAULT_GROUNDED_HEIGHT)) {\n\n // View area calculation.\n viewRect = <any>{};\n const viewRectRad: Bounds.IReqBounds = netScanViewForBoundaries(this.viewer);\n if\n (\n viewRectRad &&\n viewRectRad.east &&\n viewRectRad.west &&\n viewRectRad.north &&\n viewRectRad.south\n ) {\n viewRect.east = Cesium.Math.toDegrees(Math.max(viewRectRad.east, cameraPosition.longitude));\n viewRect.west = Cesium.Math.toDegrees(Math.min(viewRectRad.west, cameraPosition.longitude));\n viewRect.south = Cesium.Math.toDegrees(Math.min(viewRectRad.south, cameraPosition.latitude));\n viewRect.north = Cesium.Math.toDegrees(Math.max(viewRectRad.north, cameraPosition.latitude));\n }\n else {\n viewRect.east = cameraPosition.longitude;\n viewRect.west = cameraPosition.longitude;\n viewRect.south = cameraPosition.latitude;\n viewRect.north = cameraPosition.latitude;\n }\n center = <any>{};\n center.latitude = Cesium.Math.toDegrees(camera.positionCartographic.latitude);\n center.longitude = Cesium.Math.toDegrees(camera.positionCartographic.longitude);\n }\n else {\n // View area calculation.\n const windowPosition = new Cesium.Cartesian2(\n this.viewer.container.clientWidth / 2,\n this.viewer.container.clientHeight / 2\n );\n const intersection = getAdjustedGroundIntersectionOfCameraRay(this.viewer, windowPosition);\n\n let point = null;\n if (intersection) {\n point = (<any> Cesium.Cartographic).fromCartesian(intersection, this.viewer.scene.globe.ellipsoid);\n }\n if (point) {\n center = <any>{};\n center.latitude = Cesium.Math.toDegrees(point.latitude);\n center.longitude = Cesium.Math.toDegrees(point.longitude);\n\n let viewRectRad: Bounds.IReqBounds = netScanViewForBoundaries(this.viewer);\n if (viewRectRad) {\n viewRect = <any>{};\n viewRect.east = Cesium.Math.toDegrees(viewRectRad.east);\n viewRect.west = Cesium.Math.toDegrees(viewRectRad.west);\n viewRect.south = Cesium.Math.toDegrees(viewRectRad.south);\n viewRect.north = Cesium.Math.toDegrees(viewRectRad.north);\n }\n }\n }\n\n // Minimal field of view.\n if (viewRect) {\n const centerLong = (viewRect.east + viewRect.west) / 2;\n const centerLat = (viewRect.north + viewRect.south) / 2;\n viewRect.east = Math.max(viewRect.east, centerLong + (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\n viewRect.west = Math.min(viewRect.west, centerLong - (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\n viewRect.south = Math.min(viewRect.south, centerLat - (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\n viewRect.north = Math.max(viewRect.north, centerLat + (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\n viewRect.alt = this.viewer.scene.camera.positionCartographic?.height;\n }\n\n if (center && viewRect) {\n if (\n (!this.target || (this.target && !arePosEqual(this.target, center))) ||\n (!this.bounds || (this.bounds && !areBoundsEqual(this.bounds, viewRect)))\n ) {\n this.target = center;\n this.bounds = viewRect;\n return ESearchStatus.LocationChanged;\n }\n return ESearchStatus.LocationFound;\n }\n return ESearchStatus.LocationMissing;\n }\n\n private tryEmitUpdate() {\n const searchResult = this.tryDoUpdate();\n if (searchResult == ESearchStatus.LocationChanged) {\n const interest: ViewMonitor.IArea = {\n \tbounds: this.bounds,\n \ttarget: this.target\n };\n this.updatedEvent?.Trigger(interest);\n }\n else if (searchResult == ESearchStatus.LocationMissing) {\n this.updateQueue();\n }\n }\n\n private queuePosition(lag: number) {\n if (this.pendingTimeout) {\n clearTimeout(this.pendingTimeout);\n }\n this.pendingTimeout = setTimeout(() => {\n if (!this.disposed) {\n this.tryEmitUpdate();\n }\n }, lag);\n }\n\n private updateQueue() {\n this.queuePosition(TIME_LAG);\n }\n}","import * as Cesium from \"cesium\";\n\ninterface IWidget {\n isDestroyed: () => boolean;\n destroy: () => void;\n}\n\nexport namespace ViewerUtils {\n export interface IViewContainer extends HTMLElement {\n _cViewer?: Cesium.Viewer;\n }\n\n /**\n * Creates a Cesium viewer in a given HTML container and returns it.\n * This will kill all widgets in the process.\n * @param container \n * @returns \n */\n export function InitViewer(container: HTMLElement): Cesium.Viewer {\n if ((<IViewContainer>container)._cViewer) {\n throw new Error(\"Container already has a viewer.\");\n }\n const cViewer = new Cesium.Viewer(container, {\n imageryProvider: new Cesium.ArcGisMapServerImageryProvider({\n url: \"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer\",\n enablePickFeatures: false\n })\n });\n cViewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);\n cViewer.camera.percentageChanged = 0.05;\n ViewerUtils.DestroyWidget(cViewer.timeline);\n ViewerUtils.DestroyWidget(cViewer.vrButton);\n ViewerUtils.DestroyWidget(cViewer.sceneModePicker);\n ViewerUtils.DestroyWidget(cViewer.homeButton);\n ViewerUtils.DestroyWidget(cViewer.fullscreenButton);\n ViewerUtils.DestroyWidget(cViewer.baseLayerPicker);\n ViewerUtils.StyleContainer(cViewer);\n (<IViewContainer>container)._cViewer = cViewer;\n return cViewer;\n }\n\n export function GetViewerFromContainer(container: HTMLElement): Cesium.Viewer {\n return <any>(<IViewContainer>container)._cViewer;\n }\n\n export function DestroyWidget(widget: IWidget): void {\n if (widget && !widget.isDestroyed()) {\n widget.destroy();\n }\n }\n\n /**\n * Hides all unnecessary elements from the Cesium viewer container.\n * @param viewer \n */\n export function StyleContainer(viewer: Cesium.Viewer) {\n const container = viewer.container;\n const genContainer = container.getElementsByClassName(\"cesium-viewer\")?.[0];\n if (genContainer) {\n const children = genContainer.children;\n for (let i = 0; i < children.length; i++) {\n const child = children[i] as HTMLElement;\n if (!child.classList.contains(\"cesium-viewer-cesiumWidgetContainer\")) {\n child.style.display = \"none\";\n }\n }\n }\n\n const canvas = viewer.canvas as HTMLElement;\n canvas.style.width = \"100%\";\n canvas.style.height = \"100%\";\n\n const widget = canvas.parentElement as HTMLElement;\n widget.style.width = \"100%\";\n widget.style.height = \"100%\";\n widget.style.touchAction = \"none\";\n\n const widgetContainer = widget.parentElement as HTMLElement;\n widgetContainer.style.width = \"100%\";\n widgetContainer.style.height = \"100%\";\n\n const viewerContainer = widgetContainer.parentElement as HTMLElement;\n viewerContainer.style.fontFamily = \"sans-serif\";\n viewerContainer.style.fontSize = \"16px\";\n viewerContainer.style.overflow = \"hidden\";\n viewerContainer.style.display = \"block\";\n viewerContainer.style.position = \"relative\";\n viewerContainer.style.top = \"0\";\n viewerContainer.style.left = \"0\";\n viewerContainer.style.width = \"100%\";\n viewerContainer.style.height = \"100%\";\n }\n}","import * as Cesium from \"cesium\";\n\nexport namespace DrawingUtils {\n /**\n * Returns the point across a polyline at a given distance.\n * If the distance exceeds the length of the line, the point will be placed at the end of the line.\n * @param viewer \n * @param positions \n * @param distance \n * @returns \n */\n export function PointAcrossPolyline(viewer: Cesium.Viewer, positions: Cesium.Cartesian3[], distance: number): Cesium.Cartesian3 {\n if (positions.length > 1) {\n let currentDistance = 0;\n for (let i = 0; i < positions.length - 1; i++) {\n const length = Cesium.Cartesian3.distance(positions[i], positions[i + 1]);\n if (length + currentDistance >= distance) {\n const carto1 = Cesium.Cartographic.fromCartesian(positions[i]);\n const carto2 = Cesium.Cartographic.fromCartesian(positions[i + 1]);\n const geodesic = new Cesium.EllipsoidGeodesic(carto1, carto2, viewer.scene.globe.ellipsoid);\n const position = geodesic.interpolateUsingSurfaceDistance(distance - currentDistance);\n const height = (carto1.height + carto2.height) / 2;\n return Cesium.Cartesian3.fromRadians(position.longitude, position.latitude, height);\n }\n else {\n currentDistance += length;\n }\n }\n }\n else if (positions.length > 0) {\n return positions[0];\n }\n else {\n return <any>null;\n }\n return positions[positions.length - 1];\n }\n}","import * as Cesium from \"cesium\";\n\nexport namespace MeasureUtils {\n /**\n * Returns the total distance in meters between an array of points.\n * This distance is NOT following the terrain.\n * @param posses \n * @returns \n */\n export function MeasurePolyline(posses: Cesium.Cartesian3[]): number {\n if (posses.length < 2) {\n return 0;\n }\n let totalLength = 0;\n let pos1 = null;\n let pos2 = null;\n for (let i = 0; i < posses.length; i++) {\n if (pos1 == null) {\n pos1 = posses[i];\n }\n else if (pos2 == null) {\n pos2 = posses[i];\n totalLength += Cesium.Cartesian3.distance(pos1, pos2);\n pos1 = pos2;\n pos2 = null;\n }\n }\n return totalLength;\n }\n}","import { Cartes, Carto, Entity as E, Geometry } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { EntityRenderEngine } from \"../rendering/entity-render-engine\";\nimport { DrawingUtils } from \"./drawing-utils\";\nimport { MeasureUtils } from \"./measure-utils\";\n\nfunction traverseEntity(cEntity: EntityRenderEngine.ICesiumEntityExt, arr: EntityRenderEngine.ICesiumEntityExt[]): void {\n if (cEntity._parentEntity) {\n traverseEntity(cEntity._parentEntity, arr);\n }\n if (cEntity._siblingGraphics) {\n for (let i = 0; i < cEntity._siblingGraphics.length; i++) {\n const sibling = cEntity._siblingGraphics[i];\n traverseEntity(sibling, arr);\n }\n }\n arr.push(cEntity);\n}\n\nexport namespace EntityUtils {\n /**\n * Returns an entity's position.\n * This will attempt to calculate it from multiple sources of data.\n * @param viewer \n * @param entity \n * @returns \n */\n export function GetPos(viewer: Cesium.Viewer, entity: E.IEntity): Cesium.Cartesian3 {\n if (entity.location && Carto.ValidateCarto(entity.location)) {\n const location = entity.location;\n return Cesium.Cartesian3.fromDegrees(location.longitude, location.latitude, location.altitude);\n }\n if (entity.geometry && typeof entity.geometry == \"object\") {\n const pointStr = entity.geometry.Point;\n if (pointStr && typeof pointStr == \"string\") {\n const points = Geometry.ParsePoints(pointStr);\n const point = points.length > 0 ? points[0] : null;\n if (point && Carto.ValidateCarto(point)) {\n return Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\n }\n }\n const lineStr = entity.geometry.LineString;\n if (lineStr && typeof lineStr == \"string\") {\n const points = Geometry.ParsePoints(lineStr);\n if (points.length > 0) {\n const posses = points.map(x => Cesium.Cartesian3.fromDegrees(x.longitude, x.latitude, x.altitude));\n const length = MeasureUtils.MeasurePolyline(posses);\n if (length > 0) {\n const point = DrawingUtils.PointAcrossPolyline(viewer, posses, length / 2);\n if (point && Cartes.ValidateCartes3(point)) {\n return point;\n }\n }\n else {\n return posses[0];\n }\n }\n }\n const pRings = entity.geometry.Polygon;\n if (pRings && typeof pRings == \"object\") {\n const boundary = pRings.find(x => x.Facing == Geometry.EPolygonRingType.Boundaries)\n if (boundary?.LinearRing) {\n const points = Geometry.ParsePoints(boundary.LinearRing);\n const point = Carto.GetCenter(points);\n if (point && Carto.ValidateCarto(point)) {\n return Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\n }\n }\n }\n }\n if (entity.boundaries) {\n const point: Carto.ICarto = {\n latitude: (entity.boundaries.minLatitude + entity.boundaries.maxLatitude) / 2, \n longitude: (entity.boundaries.minLongitude + entity.boundaries.maxLongitude) / 2, \n altitude: 0\n };\n if (point && Carto.ValidateCarto(point)) {\n return Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\n }\n }\n return <any>null;\n }\n\n /**\n * Returns entity and any associated parent/sibling entities as a flat array.\n * @param entity \n */\n export function GatherEntity(entity: Cesium.Entity): Cesium.Entity[] {\n if (entity instanceof Cesium.Entity) {\n const cEntity = entity as EntityRenderEngine.ICesiumEntityExt;\n const items: EntityRenderEngine.ICesiumEntityExt[] = [];\n traverseEntity(cEntity, items);\n return items;\n }\n return [entity];\n }\n}","import { EntitiesRenderManager } from \"./entities/entities-render-manager\";\nimport { EntitiesLoadedRenderManager } from \"./entities/entities-loaded-render-manager\";\nimport { EntitiesIdsRenderManager } from \"./entities/entities-ids-render-manager\";\nimport { EntityRenderManager } from \"./entities/entity-render-manager\";\nimport { EntityUtils } from \"../../utils/entity-utils\";\nimport { Entity, ZoomControl } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { TilesetCadRenderManager } from \"./tilesets/tileset-cad-render-manager\";\nimport { TilesetOsmRenderManager } from \"./tilesets/tileset-osm-render-manager\";\n\nexport namespace RenderManager {\n export interface IManager {\n Init(): Promise<void>;\n Dispose(): void;\n }\n\n export type Type = EntitiesRenderManager.Manager | \n EntitiesLoadedRenderManager.Manager | \n EntitiesIdsRenderManager.Manager | \n EntityRenderManager.Manager |\n TilesetCadRenderManager.Manager |\n TilesetOsmRenderManager.Manager;\n\n export namespace Utils {\n export function DetermineZoomItem(viewer: Cesium.Viewer, entity: Entity.IEntity, zoomControl: ZoomControl.IItem[]): ZoomControl.IItem {\n const pos = EntityUtils.GetPos(viewer, entity);\n if (!pos) {\n return <any>null;\n }\n const cameraPos = viewer.camera.position;\n const distance = Cesium.Cartesian3.distance(pos, cameraPos);\n return GetZoomControlFromDistance(zoomControl, distance);\n }\n \n export function GetZoomControlFromDistance(zoomControl: ZoomControl.IItem[], distance: number): ZoomControl.IItem {\n for (let i = 0; i < zoomControl.length; i++) {\n let zoomItem = zoomControl[i];\n if ((distance >= <number>zoomItem.MinZoom) && (distance <= <number>zoomItem.MaxZoom)) {\n return zoomItem;\n }\n }\n return <any>null;\n }\n\n export function GetZoomMinMax(zoomControl: ZoomControl.IItem[]): number[] {\n let min = 0;\n let max = 100;\n for (let i = 0; i < zoomControl.length; i++) {\n const zoomItem = zoomControl[i];\n if (zoomItem.MinZoom != null) {\n if (zoomItem.MinZoom < min) {\n min = zoomItem.MinZoom;\n }\n }\n if (zoomItem.MaxZoom != null) {\n if (zoomItem.MaxZoom > max) {\n max = zoomItem.MaxZoom;\n }\n }\n }\n return [min, max];\n }\n }\n}","import * as Cesium from \"cesium\";\nimport { Entity, BruceApi, ZoomControl, Style, EntityTag, Calculator, Color, Geometry, Carto, EntityLod, EntityType, IDictionary, ClientFile } from \"bruce-models\";\nimport { EntityUtils } from \"../utils/entity-utils\";\nimport { RenderManager } from \"./render-managers/render-manager\";\nimport { VisualsRegister } from \"./visuals-register\";\n\nfunction colorToCColor(color: Color.IColor): Cesium.Color {\n return new Cesium.Color(\n color.red ? color.red/255 : 0, \n color.green ? color.green/255 : 0, \n color.blue ? color.blue/255 : 0, \n color.alpha\n );\n}\n\nfunction getPolygonStyleExtrusion(pStyle: any, entity: Entity.IEntity, tags: EntityTag.ITag[], heightRef: Cesium.HeightReference): number {\n const attrPath = pStyle.extrusionPath;\n if (!pStyle.useExtrusion || !attrPath) {\n return <any>null;\n }\n try {\n const extrusion = +Calculator.GetValue(attrPath, entity, tags);\n if (!extrusion && extrusion != 0) {\n return <any>null;\n }\n /* \n Cesium extrudes in strange way.\n If you want something that is 50 meters above sea, and 5 meters tall,\n You need to extrude by 55 meters, if you extrude by 5 it will extrude from sea and look flat.\n */\n const height = <number>entity.location?.altitude;\n return heightRef == Cesium.HeightReference.RELATIVE_TO_GROUND ? extrusion + height : extrusion;\n } \n catch (e) {\n console.error(e);\n }\n return 0;\n}\n\ninterface IExtrusionData {\n value: number;\n exHeightRef: Cesium.HeightReference;\n posses: Cesium.Cartesian3[];\n}\n\nfunction getPolygonExtrusion(\n entity: Entity.IEntity, \n tags: EntityTag.ITag[], \n ring: Geometry.IPolygonRing,\n posses: Cesium.Cartesian3[], \n heightRef: Cesium.HeightReference, \n pStyle: any\n): IExtrusionData {\n const data: IExtrusionData = {\n value: <any>undefined,\n exHeightRef: Cesium.HeightReference.RELATIVE_TO_GROUND,\n posses: <any>null\n }\n\n // Step 1. Try get using style.\n const extrusion = getPolygonStyleExtrusion(pStyle, entity, tags, heightRef);\n if (extrusion) {\n if (heightRef == Cesium.HeightReference.NONE) {\n // Let's normalize all point heights to be the same (at entity altitude).\n // This let's us have a consistent extrusion height, and be adjustable easier by user.\n let alt = <number>entity?.location?.altitude;\n if (!alt) {\n alt = 0;\n }\n\n const points = posses.map(x => Cesium.Cartographic.fromCartesian(x));\n points.forEach((point) => {\n point.height = alt;\n });\n posses = points.map(x => Cesium.Cartesian3.fromRadians(x.longitude, x.latitude, x.height));\n }\n }\n // Step 2. Try get using geometry data.\n else {\n data.exHeightRef = <any>undefined;\n if (ring.Height && ring.Height > 0) {\n const points = posses.map(x => Cesium.Cartographic.fromCartesian(x));\n if (points.length <= 0) {\n data.value = ring.Height;\n }\n else {\n let highest: number = <any>null; \n for (let i = 0; i < points.length; i++) {\n let pointHeight = points[i].height;\n if (pointHeight > highest || highest === null) {\n highest = pointHeight;\n }\n }\n highest = (highest === null ? 0 : highest) + ring.Height;\n data.value = highest;\n }\n data.exHeightRef = Cesium.HeightReference.NONE;\n }\n }\n\n data.posses = posses;\n return data;\n}\n\nfunction getHeightRef(style: any): Cesium.HeightReference {\n let heightRef = Cesium.HeightReference.CLAMP_TO_GROUND;\n const altOptionId = style?.altitudeOption?.id;\n if (altOptionId == 1) {\n heightRef = Cesium.HeightReference.NONE;\n }\n else if (altOptionId == 2) {\n heightRef = Cesium.HeightReference.RELATIVE_TO_GROUND;\n }\n return heightRef;\n}\n\nfunction getZIndex(style: any, entity: Entity.IEntity, tags: EntityTag.ITag[]): number {\n let zIndex = style?.zIndex ? +Calculator.GetValue(style?.zIndex, entity, tags) : 0;\n if (zIndex == null) {\n zIndex = 0;\n }\n return zIndex;\n}\n\nasync function getStyle(api: BruceApi.Api, entity: Entity.IEntity, styleId: number): Promise<Style.IStyle> {\n let style: Style.IStyle = <any>null;\n if (styleId) {\n style = await Style.Get(api, styleId);\n }\n if (!style) {\n const type = await EntityType.Get(api, entity.Bruce[\"EntityType.ID\"]);\n if (type[\"DisplaySetting.ID\"]) {\n style = await Style.Get(api, type[\"DisplaySetting.ID\"]);\n }\n }\n return style;\n}\n\nfunction getExistingCEntity(entityId: string, menuItemId: string, item: ZoomControl.IItem, visualRegister: VisualsRegister.Register): EntityRenderEngine.ICesiumEntityExt {\n return <any>visualRegister.GetRego(entityId, menuItemId)?.visual;\n}\n\nfunction getRenderGroupId(zoomItem: ZoomControl.IItem): string {\n if (!zoomItem) {\n return <any>null;\n }\n return zoomItem.MinZoom + \"-\" + zoomItem.MaxZoom;\n}\n\nexport namespace EntityRenderEngine {\n export interface ICesiumEntityExt extends Cesium.Entity {\n _siblingGraphics?: Cesium.Entity[];\n _parentEntity?: Cesium.Entity;\n _renderGroup?: string;\n }\n\n export interface IParams {\n apiGetter: BruceApi.IGetter,\n viewer: Cesium.Viewer; \n visualRegister: VisualsRegister.Register;\n menuItemId: string;\n zoomControl: ZoomControl.IItem[];\n entities: Entity.IEntity[];\n }\n\n export async function Render(params: IParams): Promise<IDictionary<ICesiumEntityExt>> {\n const groupRenderParams = {\n apiGetter: params.apiGetter,\n viewer: params.viewer,\n entities: [],\n zoomItems: <IDictionary<ZoomControl.IItem>>{},\n menuItemId: params.menuItemId,\n visualRegister: params.visualRegister\n }\n\n const cEntities: IDictionary<ICesiumEntityExt> = {};\n const models: Entity.IEntity[] = [];\n const polygons: Entity.IEntity[] = [];\n const polylines: Entity.IEntity[] = [];\n const points: Entity.IEntity[] = [];\n\n // Initial sorting.\n for (let i = 0; i < params.entities.length; i++) {\n const entity = params.entities[i];\n const id = <string>entity.Bruce.ID;\n\n const zoomItem = RenderManager.Utils.DetermineZoomItem(params.viewer, entity, params.zoomControl);\n let displayType = zoomItem?.DisplayType;\n if (!displayType) {\n displayType = ZoomControl.EDisplayType.Hidden;\n }\n // Backwards compatibility.\n else if (<string>displayType == \"polygon\") {\n displayType = ZoomControl.EDisplayType.Geometry;\n }\n\n if (displayType != ZoomControl.EDisplayType.Hidden) {\n const newRenderId = getRenderGroupId(zoomItem);\n const existing = getExistingCEntity(id, params.menuItemId, zoomItem, params.visualRegister);\n const oldRenderId = existing?._renderGroup;\n \n if (newRenderId == oldRenderId) {\n cEntities[id] = existing;\n }\n else {\n if (displayType == ZoomControl.EDisplayType.Model3D) {\n models.push(entity);\n }\n else if (displayType == ZoomControl.EDisplayType.Geometry) {\n polygons.push(entity);\n }\n else {\n points.push(entity);\n }\n groupRenderParams.zoomItems[id] = zoomItem;\n }\n }\n }\n\n // Keep trying to render things in order of hard-coded priority system.\n if (models.length > 0) {\n const mParams: Model3d.IGroupParams = {\n ...groupRenderParams,\n entities: models\n };\n const mEntities = await Model3d.RenderGroup(mParams);\n for (let i = 0; i < mParams.entities.length; i++) {\n const entity = mParams.entities[i];\n const id = <string>entity.Bruce.ID;\n const cEntity = mEntities[id];\n if (cEntity) {\n cEntities[id] = cEntity;\n }\n else {\n polygons.push(entity);\n }\n }\n }\n if (polygons.length > 0) {\n const pParams: Polygon.IGroupParams = {\n ...groupRenderParams,\n entities: polygons\n };\n const pEntities = await Polygon.RenderGroup(pParams);\n for (let i = 0; i < pParams.entities.length; i++) {\n const entity = pParams.entities[i];\n const cEntity = pEntities[<string>entity.Bruce.ID];\n if (cEntity) {\n cEntities[<string>entity.Bruce.ID] = cEntity;\n }\n else {\n polylines.push(entity);\n }\n }\n }\n if (polylines.length > 0) {\n const pParams: Polyline.IGroupParams = {\n ...groupRenderParams,\n entities: polylines\n };\n const pEntities = await Polyline.RenderGroup(pParams);\n for (let i = 0; i < pParams.entities.length; i++) {\n const entity = pParams.entities[i];\n const cEntity = pEntities[<string>entity.Bruce.ID];\n if (cEntity) {\n cEntities[<string>entity.Bruce.ID] = cEntity;\n }\n else {\n points.push(entity);\n }\n }\n }\n if (points.length > 0) {\n const pParams: Point.IGroupParams = {\n ...groupRenderParams,\n entities: points\n };\n const pEntities = await Point.RenderGroup(pParams);\n for (let i = 0; i < pParams.entities.length; i++) {\n const entity = pParams.entities[i];\n const cEntity = pEntities[<string>entity.Bruce.ID];\n if (cEntity) {\n cEntities[<string>entity.Bruce.ID] = cEntity;\n }\n }\n }\n\n return cEntities;\n }\n\n export function Remove(viewer: Cesium.Viewer, entity: ICesiumEntityExt): void {\n if (entity._parentEntity) {\n Remove(viewer, entity._parentEntity);\n }\n if (entity._siblingGraphics) {\n for (let i = 0; i < entity._siblingGraphics.length; i++) {\n const sibling = entity._siblingGraphics[i];\n Remove(viewer, sibling);\n }\n }\n if (viewer.entities.contains(entity)) {\n viewer.entities.remove(entity);\n }\n }\n\n export namespace Point {\n export interface IParams {\n api: BruceApi.Api;\n style: Style.IPointSettings;\n entity: Entity.IEntity;\n tags: EntityTag.ITag[];\n viewer: Cesium.Viewer;\n }\n\n export interface IGroupParams {\n apiGetter: BruceApi.IGetter,\n menuItemId: string;\n entities: Entity.IEntity[];\n zoomItems: IDictionary<ZoomControl.IItem>;\n visualRegister: VisualsRegister.Register;\n viewer: Cesium.Viewer;\n }\n\n export function Render(params: IParams): ICesiumEntityExt {\n const entity = params.entity;\n const style = params.style;\n const type = style.Type;\n\n let cEntity: Cesium.Entity = <any>null;\n if (type == Style.EPointType.Icon) {\n const icon = Calculator.GetValue(style.iconUrl, entity, params.tags);\n let iconUrl: string = <any>null;\n if (typeof icon == \"string\") {\n iconUrl = icon;\n }\n if (!iconUrl && style.iconId) {\n iconUrl = ClientFile.GetUrl(params.api, style.iconId);\n }\n if (iconUrl) {\n let iconScale: number = +Calculator.GetValue(style.iconScale, entity, params.tags);\n if (!iconScale && iconScale != 0) {\n iconScale = 1;\n }\n if (iconScale > 0) {\n cEntity = new Cesium.Entity({\n billboard: {\n horizontalOrigin: Cesium.HorizontalOrigin.CENTER,\n verticalOrigin: Cesium.VerticalOrigin.BOTTOM,\n image: iconUrl,\n heightReference: getHeightRef(style)\n },\n position: EntityUtils.GetPos(params.viewer, entity),\n show: false\n });\n }\n }\n }\n if (type == Style.EPointType.Cylinder) {\n // TODO: Cylinder.\n }\n if (!cEntity) {\n const bColor: Color.IColor = style.color ? <any>Calculator.GetValue(style.color, entity, params.tags) : null;\n const cColor = bColor ? colorToCColor(bColor) : Cesium.Color.RED;\n \n let size = style.size ? <number>Calculator.GetValue(style.size, entity, params.tags) : null;\n if (size == null) {\n size = 30;\n }\n if (size <= 0) {\n return <any>null;\n }\n cEntity = new Cesium.Entity({\n point: {\n pixelSize: size,\n color: cColor,\n heightReference: getHeightRef(style)\n },\n position: EntityUtils.GetPos(params.viewer, entity),\n show: false\n });\n }\n if (cEntity) {\n params.viewer.entities.add(cEntity);\n }\n return cEntity;\n }\n\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\n const api = params.apiGetter.getApi();\n\n const cEntities: IDictionary<ICesiumEntityExt> = {};\n for (let i = 0; i < params.entities.length; i++) {\n const entity = params.entities[i];\n\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\n let tags: EntityTag.ITag[] = [];\n if (tagIds && tagIds.length > 0) {\n tags = await EntityTag.GetListByIds(api, tagIds);\n }\n const pStyle = (style?.Settings as Style.IEntitySettings)?.pointStyle ?? <any>{};\n \n const cEntity = Render({\n entity: entity,\n style: pStyle,\n tags: tags,\n viewer: params.viewer,\n api: api\n });\n cEntity._renderGroup = getRenderGroupId(zoomItem);\n\n cEntities[<string>entity.Bruce.ID] = cEntity;\n }\n \n return cEntities;\n }\n }\n\n export namespace Polyline {\n export interface IParams {\n style: Style.IPolylineSettings;\n entity: Entity.IEntity;\n tags: EntityTag.ITag[];\n viewer: Cesium.Viewer;\n }\n\n export interface IGroupParams {\n apiGetter: BruceApi.IGetter,\n menuItemId: string;\n entities: Entity.IEntity[];\n zoomItems: IDictionary<ZoomControl.IItem>;\n visualRegister: VisualsRegister.Register;\n viewer: Cesium.Viewer;\n }\n\n export function Render(params: IParams): ICesiumEntityExt {\n const entity = params.entity;\n\n const line = entity.geometry?.LineString;\n const points: Carto.ICarto[] = line && typeof line == \"string\" ? Geometry.ParsePoints(line) : [];\n if (!points || points.length < 2) {\n return <any>null;\n }\n let isValid = true;\n for (let i = 0; i < points.length; i++) {\n if (!Carto.ValidateCarto(points[i])) {\n isValid = false;\n break;\n }\n }\n if (!isValid) {\n return <any>null;\n }\n const posses = points.map(x => Cesium.Cartesian3.fromDegrees(x.longitude, x.latitude, x.altitude));\n\n // Making sure no 0 length lines coming through.\n // Ideally we would measure the full line but I fear that's too expensive.\n if (posses.length == 2 || posses.length == 3) {\n let totalDistance = 0;\n for (let i = 0; i < posses.length; i++) {\n let pos1 = posses[i];\n let pos2 = posses[i + 1];\n if (pos1 && pos2) {\n totalDistance += Cesium.Cartesian3.distance(pos1, pos2);\n }\n }\n if (totalDistance < 0.001) {\n return <any>null;\n }\n }\n\n const style = params.style;\n const bColor: Color.IColor = style.lineColor ? <any>Calculator.GetValue(style.lineColor, entity, params.tags) : null;\n const cColor = bColor ? colorToCColor(bColor) : Cesium.Color.RED;\n\n let width = style.lineWidth ? <number>Calculator.GetValue(style.lineWidth, entity, params.tags) : null;\n if (width == null) {\n width = 4;\n }\n if (width <= 0) {\n return <any>null;\n }\n \n const heightRef = getHeightRef(style);\n const cEntity: ICesiumEntityExt = new Cesium.Entity({\n polyline: {\n positions: posses,\n material: <Cesium.MaterialProperty><any>cColor,\n width: width,\n classificationType: Cesium.ClassificationType.TERRAIN,\n arcType: Cesium.ArcType.GEODESIC,\n zIndex: getZIndex(style, entity, params.tags),\n clampToGround: heightRef == Cesium.HeightReference.CLAMP_TO_GROUND\n },\n position: EntityUtils.GetPos(params.viewer, entity),\n show: false\n });\n\n params.viewer.entities.add(cEntity);\n return cEntity;\n }\n\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\n const api = params.apiGetter.getApi();\n const cEntities: IDictionary<ICesiumEntityExt> = {};\n for (let i = 0; i < params.entities.length; i++) {\n const entity = params.entities[i];\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\n let tags: EntityTag.ITag[] = [];\n if (tagIds && tagIds.length > 0) {\n tags = await EntityTag.GetListByIds(api, tagIds);\n }\n const lStyle = (style?.Settings as Style.IEntitySettings)?.polylineStyle ?? <any>{};\n\n const cEntity = Render({\n entity: entity,\n style: lStyle,\n tags: tags,\n viewer: params.viewer\n });\n if (cEntity) {\n cEntity._renderGroup = getRenderGroupId(zoomItem);\n cEntities[<string>entity.Bruce.ID] = cEntity;\n }\n }\n return cEntities;\n }\n }\n\n export namespace Polygon {\n export interface IParams {\n style: Style.IPolygonSettings;\n entity: Entity.IEntity;\n tags: EntityTag.ITag[];\n viewer: Cesium.Viewer;\n }\n\n export interface IGroupParams {\n apiGetter: BruceApi.IGetter,\n menuItemId: string;\n entities: Entity.IEntity[];\n zoomItems: IDictionary<ZoomControl.IItem>;\n visualRegister: VisualsRegister.Register;\n viewer: Cesium.Viewer;\n }\n\n export function Render(params: IParams): ICesiumEntityExt {\n const entity = params.entity;\n const pRings = entity.geometry?.Polygon;\n if (pRings == null || pRings.length <= 0) {\n return <any>null;\n }\n const style = params.style;\n\n const bFillColor = <Color.IColor>Calculator.GetValue(style.fillColor, entity, params.tags);\n const cFillColor = bFillColor ? colorToCColor(bFillColor) : Cesium.Color.RED;\n\n const bLineColor = <Color.IColor>Calculator.GetValue(style.lineColor, entity, params.tags);\n const cLineColor = bLineColor ? colorToCColor(bLineColor) : Cesium.Color.RED;\n\n let width = style.lineWidth ? <number>Calculator.GetValue(style.lineWidth, entity, params.tags) : null;\n if (width == null) {\n width = 4;\n }\n if (width <= 0) {\n return <any>null;\n }\n\n const heightRef = getHeightRef(style);\n\n const outerRing = <Geometry.IPolygonRing>pRings.find(x => x.Facing == Geometry.EPolygonRingType.Boundaries);\n const points = Geometry.ParsePoints(outerRing?.LinearRing);\n let posses = points.map(x => Cesium.Cartesian3.fromDegrees(x.longitude, x.latitude, x.altitude));\n const extrusion = getPolygonExtrusion(\n entity,\n params.tags,\n outerRing,\n posses,\n heightRef,\n style\n );\n posses = extrusion.posses;\n\n const holeRings = pRings.filter(x => x.Facing == Geometry.EPolygonRingType.Hole);\n const holePosses = holeRings.map((x) => {\n const points = Geometry.ParsePoints(x.LinearRing);\n return points.map(x => Cesium.Cartesian3.fromDegrees(x.longitude, x.latitude, x.altitude));\n });\n\n const zIndex = getZIndex(style, entity, params.tags);\n\n const cEntity: ICesiumEntityExt = new Cesium.Entity({\n polygon: {\n hierarchy: new Cesium.PolygonHierarchy(posses, holePosses.map(x => new Cesium.PolygonHierarchy(x))),\n material: cFillColor,\n extrudedHeight: extrusion.value,\n extrudedHeightReference: extrusion.exHeightRef,\n shadows: Cesium.ShadowMode.ENABLED,\n heightReference: heightRef,\n classificationType: Cesium.ClassificationType.BOTH,\n perPositionHeight: heightRef == Cesium.HeightReference.CLAMP_TO_GROUND ? false : true,\n zIndex: zIndex\n },\n position: EntityUtils.GetPos(params.viewer, entity),\n show: false\n });\n cEntity._siblingGraphics = [];\n\n for (let i = 0; i < holePosses.length; i++) {\n const posses = holePosses[i];\n const cEntityHole: ICesiumEntityExt = new Cesium.Entity({\n polyline: new Cesium.PolylineGraphics({\n positions: posses,\n material: <Cesium.MaterialProperty><any>cLineColor,\n width: width,\n clampToGround: heightRef == Cesium.HeightReference.CLAMP_TO_GROUND,\n classificationType: Cesium.ClassificationType.TERRAIN,\n arcType: Cesium.ArcType.GEODESIC,\n zIndex: zIndex\n }),\n show: false\n });\n cEntity._siblingGraphics.push(cEntityHole);\n cEntityHole._parentEntity = cEntity;\n params.viewer.entities.add(cEntityHole);\n }\n\n params.viewer.entities.add(cEntity);\n return cEntity;\n }\n\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\n const api = params.apiGetter.getApi();\n const cEntities: IDictionary<ICesiumEntityExt> = {};\n for (let i = 0; i < params.entities.length; i++) {\n const entity = params.entities[i];\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\n \n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\n let tags: EntityTag.ITag[] = [];\n if (tagIds && tagIds.length > 0) {\n tags = await EntityTag.GetListByIds(api, tagIds);\n }\n const pStyle = (style?.Settings as Style.IEntitySettings)?.polygonStyle ?? <any>{};\n \n const cEntity = Render({\n entity: entity,\n style: pStyle,\n tags: tags,\n viewer: params.viewer\n });\n if (cEntity) {\n cEntity._renderGroup = getRenderGroupId(zoomItem);\n cEntities[<string>entity.Bruce.ID] = cEntity;\n }\n }\n return cEntities;\n }\n }\n\n export namespace Model3d {\n export interface IParams {\n lodUrl: string;\n style: Style.IModelSettings;\n entity: Entity.IEntity;\n tags: EntityTag.ITag[];\n viewer: Cesium.Viewer;\n }\n\n export interface IGroupParams {\n apiGetter: BruceApi.IGetter,\n menuItemId: string;\n entities: Entity.IEntity[];\n zoomItems: IDictionary<ZoomControl.IItem>;\n visualRegister: VisualsRegister.Register;\n viewer: Cesium.Viewer;\n }\n\n export function Render(params: IParams): ICesiumEntityExt {\n const entity = params.entity;\n\n const transform = entity?.transform;\n let heading: number = transform ? +transform.heading : 0;\n heading = (heading + 90) % 360;\n const pitch: number = transform ? +transform.pitch : 0;\n const roll: number = transform ? +transform.roll : 0;\n\n let scale: number = transform ? +transform.scale : 1;\n if (scale <= 0) {\n scale = 1;\n }\n\n const style = params.style;\n let styleScale = style?.scale ? +Calculator.GetValue(style?.scale, entity, params.tags) : null;\n if (!styleScale) {\n styleScale = 1;\n }\n scale *= styleScale;\n\n const hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll);\n\n let heightRef = getHeightRef(style);\n let pos = EntityUtils.GetPos(params.viewer, entity);\n if (heightRef == Cesium.HeightReference.CLAMP_TO_GROUND) {\n const carto = Cesium.Cartographic.fromCartesian(pos);\n pos = Cesium.Cartesian3.fromRadians(carto.longitude, carto.latitude, 0);\n heightRef = Cesium.HeightReference.RELATIVE_TO_GROUND;\n }\n\n const orientation = Cesium.Transforms.headingPitchRollQuaternion(pos, hpr);\n\n let blendMode: number = <any>null;\n let blendAmount: number = <any>null;\n let color: Cesium.Color = <any>null;\n if (style?.customize) {\n blendMode = style.fillColorBlendMode;\n if (!blendMode) {\n blendMode = Cesium.ColorBlendMode.HIGHLIGHT;\n }\n if (blendMode == Cesium.ColorBlendMode.MIX) {\n blendAmount = <any>style.fillColorBlendAmount;\n if (!blendAmount) {\n blendAmount = 0.5;\n }\n }\n const bColor = <Color.IColor>Calculator.GetValue(style.fillColor, entity, params.tags);\n if (bColor) {\n color = colorToCColor(bColor);\n }\n }\n\n const cEntity: ICesiumEntityExt = new Cesium.Entity({\n model: {\n uri: params.lodUrl,\n heightReference: heightRef,\n scale: scale,\n shadows: Cesium.ShadowMode.ENABLED,\n colorBlendAmount: blendAmount,\n colorBlendMode: blendMode,\n color: color\n },\n orientation: <Cesium.Property><any>orientation,\n position: pos,\n show: false\n });\n\n params.viewer.entities.add(cEntity);\n return cEntity;\n }\n\n export async function RenderGroup(params: IGroupParams): Promise<IDictionary<ICesiumEntityExt>> {\n const api = params.apiGetter.getApi();\n const cEntities: IDictionary<ICesiumEntityExt> = {};\n const reqBody: EntityLod.Filter.IListParams = {\n \"strict\": false,\n \"externalSources\": false,\n \"Items\": []\n };\n\n for (let i = 0; i < params.entities.length; i++) {\n const entity = params.entities[i];\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\n let tags: EntityTag.ITag[] = [];\n if (tagIds && tagIds.length > 0) {\n tags = await EntityTag.GetListByIds(api, tagIds);\n }\n const mStyle = (style?.Settings as Style.IEntitySettings)?.polygonStyle ?? <any>{};\n let group = mStyle.lodGroup ? Calculator.GetValue(mStyle.lodGroup, entity, tags) : null;\n if (!group) {\n group = \"DEFAULT\";\n }\n let level = <number>+<any>zoomItem.LODLevel;\n if (!level) {\n level = 0;\n }\n let catId = <string>zoomItem.LODCategoryID;\n if (!catId) {\n catId = \"glb\";\n }\n reqBody.Items.push({\n \"entityId\": <string>entity.Bruce.ID,\n \"categoryId\": catId,\n \"group\": <string>group,\n \"level\": level\n });\n }\n\n const lodData = await EntityLod.GetLods(api, reqBody);\n\n for (let i = 0; i < params.entities.length; i++) {\n const entity = params.entities[i];\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\n let tags: EntityTag.ITag[] = [];\n if (tagIds && tagIds.length > 0) {\n tags = await EntityTag.GetListByIds(api, tagIds);\n }\n\n const lod = lodData.find(x => x.entityId == entity.Bruce.ID);\n if (!lod?.clientFileId) {\n continue;\n }\n const mStyle = (style?.Settings as Style.IEntitySettings)?.polygonStyle ?? <any>{};\n const cEntity = Render({\n entity: entity,\n style: mStyle,\n tags: tags,\n viewer: params.viewer,\n lodUrl: ClientFile.GetUrl(api, lod.clientFileId)\n })\n if (cEntity) {\n cEntity._renderGroup = getRenderGroupId(zoomItem);\n cEntities[<string>entity.Bruce.ID] = cEntity;\n }\n }\n\n return cEntities;\n }\n }\n}","import { BruceApi, DelayQueue, Entity, EntityFilterGetter, IDictionary, MenuItem, ZoomControl } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\nimport { VisualsRegister } from \"../../visuals-register\";\nimport { RenderManager } from \"../render-manager\";\nimport { SharedGetters } from \"../common/shared-getters\";\n\n/**\n * Manager for rendering Bruce entities.\n * This will request entities based on setup menu item filter.\n */\nexport namespace EntitiesRenderManager {\n export class Manager implements RenderManager.IManager {\n private viewer: Cesium.Viewer;\n private apiGetter: BruceApi.IGetter;\n private sharedGetters: SharedGetters.Cache;\n private monitor: CesiumViewMonitor;\n private item: MenuItem.Item.IBruceEntities;\n private getter: EntityFilterGetter.Getter = <any>null;\n private getterSub: () => void = <any>null;\n private disposed: boolean = false;\n public get Disposed(): boolean {\n return this.disposed;\n }\n private renderedEntities: IDictionary<boolean> = {};\n private visualsManager: VisualsRegister.Register;\n private entityCheckQueue: DelayQueue = <any>null;\n private entityCheckRemoval: () => void = <any>null;\n private isRunningCheck = false;\n private viewMonitorRemoval: () => void = <any>null;\n\n\n constructor(\n viewer: Cesium.Viewer, \n visualsManager: VisualsRegister.Register, \n apiGetter: BruceApi.IGetter, \n monitor: CesiumViewMonitor,\n item: MenuItem.Item.IBruceEntities,\n sharedGetters: SharedGetters.Cache\n ) {\n this.viewer = viewer;\n this.sharedGetters = sharedGetters;\n this.monitor = monitor;\n this.apiGetter = apiGetter;\n this.item = item;\n this.visualsManager = visualsManager;\n }\n\n public async Init(): Promise<void> {\n if (this.disposed) {\n throw(new Error(\"This item is disposed.\"));\n }\n const api = this.apiGetter.getApi();\n this.getter = this.sharedGetters.GetOrCreateFilterGetter({\n api: api,\n attrFilter: this.item.BruceEntity.Filter ?? {},\n batchSize: 500,\n typeId: this.item.BruceEntity[\"EntityType.ID\"],\n monitor: this.monitor\n });\n const minMax = RenderManager.Utils.GetZoomMinMax(this.item.CameraZoomSettings);\n this.getter.IncludeMenuItem(this.item.id, [], minMax[0], minMax[1]);\n this.getterSub = this.getter.OnUpdate.Subscribe((entities) => {\n this.onGetterUpdate(entities);\n });\n this.viewMonitorRemoval = this.monitor.Updated().Subscribe(() => {\n this.entityCheckQueue.Call();\n });\n this.entityCheckQueue = new DelayQueue(() => {\n this.doEntityCheck();\n }, 3000);\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.getterSub?.();\n this.getterSub = <any>null;\n if (this.getter) {\n this.getter.ExcludeMenuItem(this.item.id);\n }\n this.disposed = true;\n this.visualsManager.RemoveByMenuItemId(this.item.id);\n this.entityCheckRemoval?.();\n this.viewMonitorRemoval?.();\n }\n\n private async doEntityCheck(): Promise<void> {\n if (this.isRunningCheck) {\n this.entityCheckQueue.Call();\n return;\n }\n this.isRunningCheck = true;\n const api = this.apiGetter.getApi();\n try {\n const ids = Object.keys(this.renderedEntities);\n if (this.disposed) {\n return;\n }\n if (ids.length > 0) { \n const CHECK_BATCH_SIZE = 150;\n const checkBatch = async() => {\n const entityIds = ids.splice(0, CHECK_BATCH_SIZE);\n const entities = await Entity.GetListByIds(api, entityIds);\n if (this.disposed) {\n return;\n }\n this.distributeGenerateBatches(entities);\n };\n while (ids.length > 0) {\n await checkBatch();\n }\n }\n }\n catch (e) {\n console.error(e);\n }\n this.isRunningCheck = false;\n }\n\n private distributeGenerateBatches(entities: Entity.IEntity[]): void {\n const BATCH_SIZE = 50;\n while (entities.length > 0) {\n const batch = entities.splice(0, BATCH_SIZE);\n this.onGetterUpdate(batch);\n }\n }\n\n private async onGetterUpdate(entities: Entity.IEntity[]): Promise<void> {\n if (this.disposed) {\n return;\n }\n\n const cEntities = await EntityRenderEngine.Render({\n viewer: this.viewer, \n apiGetter: this.apiGetter, \n entities: entities,\n menuItemId: this.item.id,\n visualRegister: this.visualsManager,\n zoomControl: this.item.CameraZoomSettings\n });\n for (let i = 0; i < entities.length; i++) {\n const entity = entities[i];\n const id = <string>entity.Bruce.ID;\n const cEntity = cEntities[id];\n this.renderedEntities[id] = !!cEntity;\n if (cEntity) {\n const visual = this.visualsManager.GetRego(id, this.item.id)?.visual;\n if (!visual || visual != cEntity) {\n this.visualsManager.Add({\n entityId: <string>id,\n menuItemId: this.item.id,\n visual: cEntity,\n priority: 0,\n entityTypeId: entity.Bruce[\"EntityType.ID\"]\n });\n }\n }\n else {\n this.visualsManager.Remove(id, this.item.id);\n }\n }\n }\n }\n}","import { BatchedDataGetter, BruceApi, Entity, IDictionary, ZoomControl, MenuItem } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\nimport { VisualsRegister } from \"../../visuals-register\";\nimport { RenderManager } from \"../render-manager\";\n\n/**\n * Render manager for a group of pre-loaded entities.\n * The entities may or may not have records.\n * If the entities DON'T have records, it is recommended to avoid using the 3dmodel visualization as it will fail to locate LODs.\n */\nexport namespace EntitiesLoadedRenderManager {\n export class Manager implements RenderManager.IManager {\n private viewer: Cesium.Viewer;\n private apiGetter: BruceApi.IGetter;\n private item: MenuItem.Item.IEntitiesLoaded;\n private getter: BatchedDataGetter.Getter<Entity.IEntity> = <any>null;\n private monitor: CesiumViewMonitor;\n private getterSub: () => void = <any>null;\n private disposed: boolean = false;\n public get Disposed(): boolean {\n return this.disposed;\n }\n private renderedEntities: IDictionary<boolean> = {};\n private visualsManager: VisualsRegister.Register;\n\n\n constructor(\n viewer: Cesium.Viewer, \n visualsManager: VisualsRegister.Register, \n apiGetter: BruceApi.IGetter, \n monitor: CesiumViewMonitor,\n item: MenuItem.Item.IEntitiesLoaded\n ) {\n this.viewer = viewer;\n this.apiGetter = apiGetter;\n this.monitor = monitor;\n this.item = item;\n this.visualsManager = visualsManager;\n }\n\n public async Init(): Promise<void> {\n if (this.disposed) {\n throw(new Error(\"This item is disposed.\"));\n }\n this.getter = new BatchedDataGetter.Getter<Entity.IEntity>(\n this.item.BruceEntity.Entities,\n this.monitor,\n 500\n );\n this.getterSub = this.getter.OnUpdate.Subscribe((entities) => {\n this.onGetterUpdate(entities);\n });\n this.getter.Start();\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.getterSub?.();\n this.getterSub = <any>null;\n this.disposed = true;\n this.visualsManager.RemoveByMenuItemId(this.item.id);\n }\n\n private async onGetterUpdate(entities: Entity.IEntity[]): Promise<void> {\n if (this.disposed) {\n return;\n }\n const cEntities = await EntityRenderEngine.Render({\n viewer: this.viewer, \n apiGetter: this.apiGetter, \n entities: entities,\n menuItemId: this.item.id,\n visualRegister: this.visualsManager,\n zoomControl: this.item.CameraZoomSettings\n });\n for (let i = 0; i < entities.length; i++) {\n const entity = entities[i];\n const id = <string>entity.Bruce.ID;\n const cEntity = cEntities[id];\n this.renderedEntities[id] = !!cEntity;\n if (cEntity) {\n const visual = this.visualsManager.GetRego(id, this.item.id)?.visual;\n if (!visual || visual != cEntity) {\n this.visualsManager.Add({\n entityId: <string>id,\n menuItemId: this.item.id,\n visual: cEntity,\n priority: 0,\n entityTypeId: entity.Bruce[\"EntityType.ID\"]\n });\n }\n }\n else {\n this.visualsManager.Remove(id, this.item.id);\n }\n }\n }\n }\n}","import { BruceEvent, Cartes, IDictionary, ObjectUtils } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { EntityUtils } from \"../utils/entity-utils\";\nimport { EntityRenderEngine } from \"./entity-render-engine\";\nimport { IRenderAddon } from \"./render-addons/render-addon\";\n\ninterface IVisualExt {//extends Visual {\n _register?: VisualsRegister.Register;\n _rego?: VisualsRegister.IVisualRego;\n}\n\nfunction removeEntity(viewer: Cesium.Viewer, visual: VisualsRegister.Visual): void {\n unmarkEntity(visual);\n if (visual instanceof Cesium.Entity) {\n EntityRenderEngine.Remove(viewer, visual);\n }\n else if (visual instanceof Cesium.Primitive) {\n if (viewer.scene.primitives.contains(visual)) {\n viewer.scene.primitives.remove(visual);\n }\n }\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\n // No way to tell if changing show will crash it!\n try {\n visual.show = false;\n }\n catch (e) {\n console.error(e);\n }\n }\n}\n\nfunction updateCEntityShow(viewer: Cesium.Viewer, visual: EntityRenderEngine.ICesiumEntityExt, show: boolean) {\n if (visual._parentEntity) {\n updateCEntityShow(viewer, visual._parentEntity, show);\n }\n if (visual._siblingGraphics) {\n for (let i = 0; i < visual._siblingGraphics.length; i++) {\n const sibling = visual._siblingGraphics[i];\n updateCEntityShow(viewer, sibling, show);\n }\n }\n if (viewer.entities.contains(visual)) {\n visual.show = show;\n }\n}\n\nfunction updateEntityShow(\n viewer: Cesium.Viewer, \n visual: VisualsRegister.Visual, \n show: boolean\n): void {\n if (visual instanceof Cesium.Entity) {\n updateCEntityShow(viewer, visual, show);\n }\n else if (visual instanceof Cesium.Primitive) {\n if (viewer.scene.primitives.contains(visual)) {\n visual.show = show;\n }\n }\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\n // No way to tell if changing show will crash it!\n try {\n visual.show = show;\n }\n catch (e) {\n console.error(e);\n }\n }\n}\n\nfunction updateEntity(viewer: Cesium.Viewer, entityRegos: VisualsRegister.IVisualRego[], addons: IRenderAddon[]): void {\n let highestPriority: VisualsRegister.IVisualRego = <any>null;\n for (let i = 0; i < entityRegos.length; i++) {\n const rego = entityRegos[i];\n if (highestPriority === null || rego.priority > highestPriority.priority) {\n highestPriority = rego;\n }\n }\n for (let i = 0; i < entityRegos.length; i++) {\n const rego = entityRegos[i];\n const show = rego === highestPriority;\n updateEntityShow(viewer, rego.visual, show);\n }\n if (addons) {\n for (let j = 0; j < addons.length; j++) {\n const addon = addons[j];\n addon.Render(entityRegos.map(x => x.visual));\n }\n }\n}\n\nfunction markEntity(register: VisualsRegister.Register, rego: VisualsRegister.IVisualRego, visual: VisualsRegister.Visual): void {\n const vis = <IVisualExt>visual;\n vis._register = register;\n vis._rego = rego;\n if (visual instanceof Cesium.Entity) {\n const visEnt = <EntityRenderEngine.ICesiumEntityExt>visual;\n if (visEnt._parentEntity) {\n markEntity(register, rego, visEnt._parentEntity);\n }\n if (visEnt._siblingGraphics) {\n for (let i = 0; i < visEnt._siblingGraphics.length; i++) {\n markEntity(register, rego, visEnt._siblingGraphics[i]);\n }\n }\n }\n}\n\nfunction unmarkEntity(visual: VisualsRegister.Visual): void {\n const vis = <IVisualExt>visual;\n vis._register = <any>null;\n if (visual instanceof Cesium.Entity) {\n const visEnt = <EntityRenderEngine.ICesiumEntityExt>visual;\n if (visEnt._parentEntity) {\n unmarkEntity(visEnt._parentEntity);\n }\n if (visEnt._siblingGraphics) {\n for (let i = 0; i < visEnt._siblingGraphics.length; i++) {\n unmarkEntity(visEnt._siblingGraphics[i]);\n }\n }\n }\n}\n\ninterface IColoredBillboard extends Cesium.BillboardGraphics {\n _orgColor?: Cesium.Color;\n}\n\ninterface IColoredPoint extends Cesium.PointGraphics {\n _orgColor?: Cesium.Color;\n}\n\ninterface IColoredPolygon extends Cesium.PolygonGraphics {\n _orgColor?: Cesium.Color;\n}\n\ninterface IColoredPolyline extends Cesium.PolylineGraphics {\n _orgColor?: Cesium.Color;\n}\n\ninterface IColoredModel extends Cesium.ModelGraphics {\n _orgColor?: Cesium.Color;\n}\n\ninterface IColoredEntityExt extends Cesium.Entity {\n point: IColoredPoint;\n polygon: IColoredPolygon;\n polyline: IColoredPolyline;\n model: IColoredModel;\n billboard: IColoredBillboard;\n}\n\ninterface IColoredFeatureExt extends Cesium.Cesium3DTileFeature {\n _orgColor?: Cesium.Color;\n}\n\nfunction select(visual: VisualsRegister.Visual): void {\n const color = Cesium.Color.fromAlpha(Cesium.Color.YELLOW, 0.5);\n if (visual instanceof Cesium.Entity) {\n const entities = EntityUtils.GatherEntity(visual);\n for (let i = 0; i < entities.length; i++) {\n const cEntity: IColoredEntityExt = <any>entities[i];\n if (cEntity.point) {\n cEntity.point._orgColor = <any>cEntity.point.color;\n cEntity.point.color = <any>color.clone();\n }\n if (cEntity.polyline) {\n cEntity.polyline._orgColor = <any>cEntity.polyline.material;\n cEntity.polyline.material = <any>color.clone();\n }\n if (cEntity.polygon) {\n cEntity.polygon._orgColor = <any>cEntity.polygon.material;\n cEntity.polygon.material = <any>color.clone();\n }\n if (cEntity.model) {\n cEntity.model._orgColor = <any>cEntity.model.color;\n cEntity.model.color = <any>color.clone();\n }\n if (cEntity.billboard) {\n cEntity.billboard._orgColor = <any>cEntity.billboard.color;\n cEntity.billboard.color = <any>color.clone();\n }\n }\n }\n else if (visual instanceof Cesium.Primitive) {\n // TODO. \n }\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\n const cPrim = <IColoredFeatureExt>visual;\n cPrim._orgColor = <any>cPrim.color;\n cPrim.color = <any>color.clone();\n }\n}\n\nfunction deselect(visual: VisualsRegister.Visual): void {\n if (visual instanceof Cesium.Entity) {\n const entities = EntityUtils.GatherEntity(visual);\n for (let i = 0; i < entities.length; i++) {\n const cEntity: IColoredEntityExt = <any>entities[i];\n if (cEntity.point) {\n cEntity.point.color = <any>cEntity.point._orgColor;\n }\n if (cEntity.polyline) {\n cEntity.polyline.material = <any>cEntity.polyline._orgColor;\n }\n if (cEntity.polygon) {\n cEntity.polygon.material = <any>cEntity.polygon._orgColor;\n }\n if (cEntity.model) {\n cEntity.model.color = <any>cEntity.model._orgColor;\n }\n if (cEntity.billboard) {\n cEntity.billboard.color = <any>cEntity.billboard._orgColor;\n }\n }\n }\n else if (visual instanceof Cesium.Primitive) {\n // TODO. \n }\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\n const cPrim = <IColoredFeatureExt>visual;\n cPrim.color = <any>cPrim._orgColor;\n }\n}\n\n/**\n * Manages a registry of all Bruce visuals being rendered by menu items.\n * If multiple stuff is registered with the same entity id, only the \"best\" one is left visible.\n */\nexport namespace VisualsRegister {\n export type Visual = Cesium.Entity | Cesium.Primitive | Cesium.Cesium3DTileFeature;\n\n export interface IVisualRego {\n entityId: string;\n entityTypeId?: string;\n menuItemId: string;\n visual: Visual;\n priority: number;\n sourceId?: number\n }\n \n export interface IVisualUpdate {\n rego: IVisualRego;\n isAdding: boolean;\n }\n\n export class Register {\n private id = ObjectUtils.UId();\n public get Id(): string {\n return this.id;\n }\n private viewer: Cesium.Viewer;\n private rego: IDictionary<IVisualRego[]> = {};\n private onUpdate: BruceEvent<IVisualUpdate> = <any>null;\n public get OnUpdate(): BruceEvent<IVisualUpdate> {\n if (!this.onUpdate) {\n this.onUpdate = new BruceEvent<IVisualUpdate>();\n }\n return this.onUpdate;\n }\n private selectedIds: string[] = [];\n private addons: IDictionary<IRenderAddon[]> = {};\n \n \n constructor(viewer: Cesium.Viewer) {\n this.viewer = viewer;\n }\n\n public AddAddon(entityId: string, addon: IRenderAddon): void {\n if (!this.addons[entityId]) {\n this.addons[entityId] = [];\n }\n this.addons[entityId].push(addon);\n const regos = this.rego[entityId];\n if (regos) {\n addon.Render(regos.map(x => x.visual))\n }\n }\n\n public GetAddons(entityId: string): IRenderAddon[] {\n return this.addons[entityId] || [];\n }\n\n public RemoveAddon(entityId: string, addonId: string): void {\n const addons = this.addons[entityId];\n if (addons) {\n for (let i = 0; i < addons.length; i++) {\n if (addons[i].Id === addonId) {\n addons[i].Dispose();\n addons.splice(i, 1);\n break;\n }\n }\n }\n }\n\n public RemoveAddons(entityId: string): void {\n const addons = this.addons[entityId];\n if (addons) {\n for (let i = 0; i < addons.length; i++) {\n addons[i].Dispose();\n }\n }\n this.addons[entityId] = [];\n }\n\n public Select(id: string): void {\n if (this.selectedIds.indexOf(id) === -1) {\n this.selectedIds.push(id);\n const regos = this.rego[id];\n if (regos) {\n for (let i = 0; i < regos.length; i++) {\n const rego = regos[i];\n select(rego.visual);\n }\n }\n }\n }\n\n public Deselect(id: string): void {\n const index = this.selectedIds.indexOf(id);\n if (index !== -1) {\n this.selectedIds.splice(index, 1);\n const regos = this.rego[id];\n if (regos) {\n for (let i = 0; i < regos.length; i++) {\n const rego = regos[i];\n deselect(rego.visual);\n }\n }\n }\n }\n\n public IsSelected(id: string): boolean {\n return this.selectedIds.indexOf(id) !== -1;\n }\n\n public ClearSelected(): void {\n for (let i = 0; i < this.selectedIds.length; i++) {\n const id = this.selectedIds[i];\n const regos = this.rego[id];\n if (regos) {\n for (let i = 0; i < regos.length; i++) {\n const rego = regos[i];\n deselect(rego.visual);\n }\n }\n }\n this.selectedIds = [];\n }\n \n public Add(rego: IVisualRego): void {\n this.Remove(rego.entityId, rego.menuItemId, false);\n const entityId = rego.entityId;\n const entityRegos = this.rego[entityId] ?? [];\n entityRegos.push(rego);\n this.rego[entityId] = entityRegos;\n markEntity(this, rego, rego.visual);\n updateEntity(this.viewer, this.rego[entityId], this.GetAddons(entityId));\n if (this.selectedIds.includes(entityId)) {\n select(rego.visual);\n }\n this.onUpdate?.Trigger({ rego: rego, isAdding: true });\n }\n \n public GetRego(entityId: string, menuItemId: string): IVisualRego {\n const entityRegos = this.rego[entityId];\n if (!entityRegos) {\n return <any>[];\n }\n return <any>entityRegos.find(r => r.menuItemId === menuItemId);\n }\n\n public GetMenuItemRegos(menuItemId: string): IVisualRego[] {\n const visuals: IVisualRego[] = [];\n for (const entityId in this.rego) {\n const entityRegos = this.rego[entityId];\n if (entityRegos) {\n const rego = entityRegos.find(r => r.menuItemId === menuItemId);\n if (rego) {\n visuals.push(rego);\n }\n }\n }\n return visuals;\n }\n \n public RemoveByEntityId(id: string): void {\n const entityRegos = this.rego[id];\n if (!entityRegos) {\n return;\n }\n for (let i = 0; i < entityRegos.length; i++) {\n const rego = entityRegos[i];\n this.onUpdate?.Trigger({ rego: rego, isAdding: false });\n removeEntity(this.viewer, rego.visual);\n }\n this.rego[id] = [];\n delete this.rego[id];\n }\n \n public RemoveByMenuItemId(id: string): void {\n for (const entityId in this.rego) {\n const entityRegos = this.rego[entityId];\n if (entityRegos) {\n const rego = entityRegos.find(r => r.menuItemId === id);\n if (!rego) {\n continue;\n }\n this.onUpdate?.Trigger({ rego: rego, isAdding: false });\n removeEntity(this.viewer, rego.visual);\n const doesInclude = this.rego[entityId].find(r => r.menuItemId === id);\n if (doesInclude) {\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== id);\n updateEntity(this.viewer, this.rego[entityId], this.GetAddons(entityId));\n }\n }\n }\n }\n \n public Remove(entityId: string, menuItemId: string, _doUpdate: boolean = true): void {\n const entityRegos = this.rego[entityId];\n if (!entityRegos) {\n return;\n }\n const rego = entityRegos.find(r => r.menuItemId === menuItemId);\n if (!rego) {\n return;\n }\n this.onUpdate?.Trigger({ rego: rego, isAdding: false });\n removeEntity(this.viewer, rego.visual);\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== menuItemId);\n if (_doUpdate) {\n updateEntity(this.viewer, this.rego[entityId], this.GetAddons(entityId));\n }\n }\n \n /**\n * Returns an array of drilled visuals associated with this register.\n * The top array item is the first found.\n * @param cursor \n * @returns \n */\n public GetFromCursor(cursor: Cartes.ICartes2): IVisualRego[] {\n const found: IVisualRego[] = [];\n const picked = this.viewer.scene.drillPick(new Cesium.Cartesian2(cursor.x, cursor.y), 5);\n for (let i = 0; i < picked.length; i++) {\n const object = picked[i];\n const entity = <Visual>(object && object.id && object.id instanceof Cesium.Entity ? object.id : object);\n const visual = <IVisualExt>entity;\n if (visual?._register?.Id == this.id) {\n found.push(<IVisualRego>visual._rego);\n }\n }\n return found;\n }\n }\n}","import { BatchedDataGetter, BruceApi, Entity, IDictionary, MenuItem } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\nimport { VisualsRegister } from \"../../visuals-register\";\nimport { RenderManager } from \"../render-manager\";\n\n/**\n * Render manager for rendering an array of entity ids.\n * This will render them in batches to avoid overloading the viewer.\n */\nexport namespace EntitiesIdsRenderManager {\n export class Manager implements RenderManager.IManager {\n private viewer: Cesium.Viewer;\n private apiGetter: BruceApi.IGetter;\n private monitor: CesiumViewMonitor;\n private item: MenuItem.Item.IEntityIds;\n private getter: BatchedDataGetter.Getter<string> = <any>null;\n private getterSub: () => void = <any>null;\n private disposed: boolean = false;\n public get Disposed(): boolean {\n return this.disposed;\n }\n private renderedEntities: IDictionary<boolean> = {};\n private visualsManager: VisualsRegister.Register;\n\n\n constructor(\n viewer: Cesium.Viewer, \n visualsManager: VisualsRegister.Register, \n apiGetter: BruceApi.IGetter, \n monitor: CesiumViewMonitor,\n item: MenuItem.Item.IEntityIds\n ) {\n this.viewer = viewer;\n this.apiGetter = apiGetter;\n this.monitor = monitor;\n this.item = item;\n this.visualsManager = visualsManager;\n }\n\n public async Init(): Promise<void> {\n if (this.disposed) {\n throw(new Error(\"This item is disposed.\"));\n }\n this.getter = new BatchedDataGetter.Getter<string>(\n this.item.BruceEntity.EntityIds,\n this.monitor,\n 500\n );\n this.getterSub = this.getter.OnUpdate.Subscribe((ids) => {\n this.onGetterUpdate(ids);\n });\n this.getter.Start();\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.getterSub?.();\n this.getterSub = <any>null;\n this.disposed = true;\n this.visualsManager.RemoveByMenuItemId(this.item.id);\n }\n\n private async onGetterUpdate(entityIds: string[]): Promise<void> {\n if (this.disposed) {\n return;\n }\n const api = this.apiGetter.getApi();\n const entities = await Entity.GetListByIds(api, entityIds);\n const cEntities = await EntityRenderEngine.Render({\n viewer: this.viewer, \n apiGetter: this.apiGetter, \n entities: entities,\n menuItemId: this.item.id,\n visualRegister: this.visualsManager,\n zoomControl: this.item.CameraZoomSettings\n });\n for (let i = 0; i < entities.length; i++) {\n const entity = entities[i];\n const id = <string>entity.Bruce.ID;\n const cEntity = cEntities[id];\n this.renderedEntities[id] = !!cEntity;\n if (cEntity) {\n const visual = this.visualsManager.GetRego(id, this.item.id)?.visual;\n if (!visual || visual != cEntity) {\n this.visualsManager.Add({\n entityId: <string>id,\n menuItemId: this.item.id,\n visual: cEntity,\n priority: 0,\n entityTypeId: entity.Bruce[\"EntityType.ID\"]\n });\n }\n }\n else {\n this.visualsManager.Remove(id, this.item.id);\n }\n }\n }\n }\n}","import { BatchedDataGetter, BruceApi, Entity, IDictionary, MenuItem, ZoomControl } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\nimport { VisualsRegister } from \"../../visuals-register\";\nimport { RenderManager } from \"../render-manager\";\n\n/**\n * Manager for rendering a single Bruce entity.\n */\nexport namespace EntityRenderManager {\n export class Manager implements RenderManager.IManager {\n private viewer: Cesium.Viewer;\n private apiGetter: BruceApi.IGetter;\n private item: MenuItem.Item.IBruceEntity;\n private getter: BatchedDataGetter.Getter<string> = <any>null;\n private monitor: CesiumViewMonitor;\n private getterSub: () => void = <any>null;\n private disposed: boolean = false;\n public get Disposed(): boolean {\n return this.disposed;\n }\n private visualsManager: VisualsRegister.Register;\n\n\n constructor(\n viewer: Cesium.Viewer, \n visualsManager: VisualsRegister.Register, \n apiGetter: BruceApi.IGetter, \n monitor: CesiumViewMonitor, \n item: MenuItem.Item.IBruceEntity\n ) {\n this.viewer = viewer;\n this.apiGetter = apiGetter;\n this.monitor = monitor;\n this.item = item;\n this.visualsManager = visualsManager;\n }\n\n public async Init(): Promise<void> {\n if (this.disposed) {\n throw(new Error(\"This item is disposed.\"));\n }\n this.getter = new BatchedDataGetter.Getter<string>(\n [this.item.BruceEntity.EntityId],\n this.monitor,\n 1\n );\n this.getterSub = this.getter.OnUpdate.Subscribe((ids) => {\n this.onGetterUpdate(ids[0]);\n });\n this.getter.Start();\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n this.getterSub?.();\n this.getterSub = <any>null;\n this.visualsManager.RemoveByMenuItemId(this.item.id);\n }\n\n private async onGetterUpdate(id: string): Promise<void> {\n if (this.disposed) {\n return;\n }\n const api = this.apiGetter.getApi();\n const entity = await Entity.Get(api, id);\n const cEntities = await EntityRenderEngine.Render({\n viewer: this.viewer, \n apiGetter: this.apiGetter,\n entities: [entity],\n menuItemId: this.item.id,\n visualRegister: this.visualsManager,\n zoomControl: this.item.CameraZoomSettings\n });\n const cEntity = cEntities[id];\n if (cEntity) {\n const visual = this.visualsManager.GetRego(id, this.item.id)?.visual;\n if (!visual || visual != cEntity) {\n this.visualsManager.Add({\n entityId: <string>entity.Bruce.ID,\n menuItemId: this.item.id,\n visual: cEntity,\n priority: 0,\n entityTypeId: entity.Bruce[\"EntityType.ID\"]\n });\n }\n }\n else {\n this.visualsManager.Remove(id, this.item.id);\n }\n }\n }\n}","import { BruceApi, Calculator, Cartes, Carto, Color, Entity, EntityCoords, EntityType, IDictionary, Style, Tileset, TilesetCad, Transform } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { VisualsRegister } from \"./visuals-register\";\n\nfunction colorToCColor(color: Color.IColor): Cesium.Color {\n return new Cesium.Color(\n color.red ? color.red/255 : 0, \n color.green ? color.green/255 : 0, \n color.blue ? color.blue/255 : 0, \n color.alpha\n );\n}\n\nexport namespace TilesetRenderEngine {\n export interface IParams {\n apiGetter: BruceApi.IGetter;\n tileset: Tileset.ITileset;\n viewer: Cesium.Viewer;\n coords?: EntityCoords.IEntityCoords;\n }\n\n export function ApplyPosition(\n cTileset: Cesium.Cesium3DTileset, \n tileset: Tileset.ITileset, \n coords: EntityCoords.IEntityCoords\n ): void {\n if (tileset.type == Tileset.EType.Cad) {\n const settings = tileset.settings as TilesetCad.ISettings;\n\n let location: Carto.ICarto;\n let transform: Transform.ITransform;\n\n // Position using root entity + ucs.\n if (coords?.ucs) {\n location = coords.ucs.location;\n transform = coords.transform as Transform.ITransform;\n }\n // Position using tileset.\n else {\n transform = settings.transform as Transform.ITransform;\n location = settings.location as Carto.ICarto;\n }\n\n if (!location?.latitude) {\n return;\n }\n\n transform = {\n heading: 0,\n pitch: 0,\n roll: 0,\n scale: 1,\n x: 0,\n y: 0,\n z: 0,\n ...transform\n }\n if (transform.scale <= 0) {\n transform.scale = 0.000001;\n }\n\n const pos = Cesium.Cartesian3.fromDegrees(\n location.longitude,\n location.latitude,\n location.altitude\n );\n const hpr = Cesium.HeadingPitchRoll.fromDegrees(\n transform.heading, \n transform.pitch, \n transform.roll, \n new Cesium.HeadingPitchRoll()\n );\n\n const root = cTileset.root;\n root.transform = Cesium.Transforms.headingPitchRollToFixedFrame(pos, hpr);\n\n const scaleMatrix = Cesium.Matrix4.fromScale(new Cesium.Cartesian3(\n transform.scale, \n transform.scale,\n transform.scale\n ), new Cesium.Matrix4());\n root.transform = Cesium.Matrix4.multiply(root.transform, scaleMatrix, root.transform);\n\n root.transform = Cesium.Matrix4.multiplyByTranslation(root.transform, new Cesium.Cartesian3(\n transform.x,\n transform.y,\n transform.z\n ), root.transform);\n\n // Force matrix to update\n (<any>root).updateTransform();\n }\n else {\n throw(\"Not implemented.\");\n }\n }\n\n export function ApplySettings(cTileset: Cesium.Cesium3DTileset, tileset: Tileset.ITileset): void {\n if (tileset.type == Tileset.EType.Cad) {\n const settings = tileset.settings as TilesetCad.ISettings;\n const maxScreenSpaceError = settings.maximumScreenSpaceError;\n if (maxScreenSpaceError || maxScreenSpaceError == 0) {\n cTileset.maximumScreenSpaceError = maxScreenSpaceError;\n }\n }\n else {\n throw(\"Not implemented.\");\n }\n }\n\n export function Render(params: IParams): Cesium.Cesium3DTileset {\n const api = params.apiGetter.getApi(params.apiGetter.accountId);\n if (params.tileset.type == Tileset.EType.Cad) {\n const cTileset = new Cesium.Cesium3DTileset({\n url: Tileset.GetPublicFileUrl(api, params.tileset.id, \"tileset.json\") + \"?generation=\" + params.tileset.generateVersion\n });\n params.viewer.scene.primitives.add(cTileset);\n cTileset.readyPromise.then(() => {\n ApplySettings(cTileset, params.tileset);\n ApplyPosition(cTileset, params.tileset, params.coords as EntityCoords.IEntityCoords);\n });\n return cTileset;\n }\n else {\n throw(\"Not implemented.\");\n }\n }\n\n export class CadStyler {\n private api: BruceApi.Api;\n\n private disposed: boolean = false;\n public get Disposed(): boolean {\n return this.disposed;\n }\n\n private loadedEntities: IDictionary<VisualsRegister.IVisualRego> = {};\n private cTileset: Cesium.Cesium3DTileset;\n private styleMapping: any[];\n private styleMappingLoaded: boolean = false;\n private styleMappingsLoaded: IDictionary<boolean> = {};\n private fallbackStyleId: number;\n private fallbackStyle: Style.IStyle = <any>null;\n\n private runningQueues: number = 0;\n private queueLoadInterval: any;\n private recordLoadQueue: string[] = [];\n private recordCheckQueue: string[] = [];\n private queueCheckInterval: any;\n\n\n constructor(api: BruceApi.Api, cTileset: Cesium.Cesium3DTileset, fallbackStyleId: number, styleMapping: any[]) {\n this.api = api;\n this.cTileset = cTileset;\n this.fallbackStyleId = fallbackStyleId;\n this.styleMapping = styleMapping;\n this.loadStyles();\n }\n\n public QueueEntities(entities: VisualsRegister.IVisualRego[]): void {\n for (let i = 0; i < entities.length; i++) {\n const entity = entities[i];\n this.queueTilesetFeatureStyle(entity);\n }\n if (this.recordLoadQueue.length > 0) {\n this.processQueue();\n }\n }\n\n private async processQueue(): Promise<void> {\n const MAX_BATCHES = 2;\n const BATCH_DELAY = 200;\n\n if (this.runningQueues >= MAX_BATCHES) {\n return;\n }\n else if (this.disposed) {\n return;\n }\n this.runningQueues += 1;\n \n let batch: VisualsRegister.IVisualRego[] = [];\n let rerun: boolean = false;\n try {\n batch = this.getEntitiesForQueue();\n\n const entityIds = batch.map(x => x.entityId);\n if (entityIds.length > 0) {\n const entities = await Entity.GetListByIds(this.api, entityIds);\n for (let i = 0; i < entities.length; i++) {\n const record = entities[i];\n const feature = batch.find(x => x?.entityId == record?.Bruce?.ID);\n if (feature) {\n this.styleTilesetFeatureFullData(feature, record);\n }\n }\n rerun = batch.length > 0;\n }\n }\n finally {\n setTimeout(() => {\n this.runningQueues -= 1;\n if (rerun) {\n this.processQueue();\n }\n }, BATCH_DELAY);\n }\n }\n\n private getEntitiesForQueue(): VisualsRegister.IVisualRego[] {\n const BATCH_SIZE = 30;\n const batchHashes = this.recordLoadQueue.splice(0, BATCH_SIZE);\n const entities: VisualsRegister.IVisualRego[] = [];\n for (let i = 0; i < batchHashes.length; i++) {\n const id = batchHashes[i];\n const entity = this.loadedEntities[id];\n if (entity) {\n entities.push(entity);\n }\n }\n return entities;\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n clearInterval(this.queueLoadInterval);\n clearInterval(this.queueCheckInterval);\n }\n\n private async loadStyles(): Promise<void> {\n let fallbackStyleId = this.fallbackStyleId;\n if (fallbackStyleId && fallbackStyleId > 0) {\n try {\n let data = await Style.Get(this.api, fallbackStyleId);\n this.fallbackStyle = data;\n }\n catch (e) {\n console.error(e);\n }\n }\n \n // Load styles in the style mapping\n let styleMapping = this.styleMapping;\n if (!styleMapping) {\n styleMapping = [];\n }\n this.styleMapping = styleMapping;\n \n // It is default style.\n // We have to get all possible entity type ids and append them to mapping.\n if (!fallbackStyleId) {\n try {\n const modelTree = this.cTileset?.extensions?.modelTree;\n if (modelTree) {\n const entityTypeIds = this.getEntityTypeIdsFromModelTree(modelTree);\n for (let i = 0; i < entityTypeIds.length; i++) {\n const entityTypeId = entityTypeIds[i];\n if (styleMapping.findIndex(x => x.EntityTypeID == entityTypeId) <= -1) {\n styleMapping.push({\n EntityTypeID: entityTypeId,\n StyleID: null,\n style: <any>null\n });\n }\n }\n }\n }\n catch (e) {\n console.log(e);\n }\n }\n \n for (let i = 0; i < styleMapping.length; i++) {\n if (this.disposed) {\n break;\n }\n \n let styleMap = styleMapping[i];\n if (!styleMap.style) {\n let styleId = styleMap.StyleID;\n \n // Get default style of the entity type.\n if (!styleId) {\n try {\n let entityType = await EntityType.Get(this.api, styleMap.EntityTypeID);\n styleId = entityType?.[\"DisplaySetting.ID\"];\n }\n catch (e) {\n console.error(e); \n }\n }\n \n if (styleId) {\n try {\n let data = await Style.Get(this.api, styleId);\n if (data) {\n styleMap.style = data;\n styleMap.StyleID = styleId;\n }\n }\n catch (e) {\n console.error(e);\n }\n }\n }\n \n if (styleMap.EntityTypeID && styleMap.style) {\n this.styleMappingsLoaded[styleMap.EntityTypeID] = true;\n this.processTilesetFeatureCheckQueue();\n this.processQueue();\n }\n }\n this.styleMappingLoaded = true;\n\n if (!this.disposed) {\n await this.processTilesetFeatureCheckQueue();\n this.processQueue();\n }\n }\n\n private getEntityTypeIdsFromModelTree(modelTree: any): string[] {\n const entityTypeIds: string[] = [];\n this.digEntityTypeIdsFromModelTreeBranch(modelTree, entityTypeIds);\n return entityTypeIds;\n }\n \n private digEntityTypeIdsFromModelTreeBranch(branch: any, arr: string[]): void {\n if (branch) {\n // Does not yet include this entity type id.\n if (branch.typeId && !arr.includes(branch.typeId)) {\n arr.push(branch.typeId);\n }\n \n if (branch.children) {\n for (let i = 0; i < branch.children.length; i++) {\n let child = branch.children[i];\n this.digEntityTypeIdsFromModelTreeBranch(child, arr);\n }\n }\n }\n }\n\n private async processTilesetFeatureCheckQueue(): Promise<void> {\n const BATCH_CHECK_SIZE = 1000;\n\n return new Promise((res) => {\n clearInterval(this.queueCheckInterval);\n this.queueCheckInterval = setInterval(() => {\n if (this.disposed) {\n clearInterval(this.queueCheckInterval);\n res();\n return;\n }\n \n // Construct batch for loaded styles.\n let batch = [];\n \n if (this.styleMappingLoaded) {\n batch = this.recordCheckQueue.splice(0, BATCH_CHECK_SIZE);\n }\n else {\n for (let i = 0; i < this.recordCheckQueue.length; i++) {\n let hash = this.recordCheckQueue[i];\n let entity = this.loadedEntities[hash];\n if (entity) {\n let entityTypeId = entity.entityTypeId;\n if (entityTypeId) {\n if (this.styleMappingsLoaded[entityTypeId] == true) {\n batch.push(hash);\n }\n }\n }\n \n if (batch.length >= BATCH_CHECK_SIZE) {\n break;\n }\n }\n \n for (let i = 0; i < batch.length; i++) {\n let hash = batch[i];\n let index = this.recordCheckQueue.findIndex(x => x == hash);\n if (index > -1) {\n this.recordCheckQueue.splice(index, 1);\n }\n }\n }\n \n if (batch.length) {\n for (let i = 0; i < batch.length; i++) {\n let item = batch[i];\n let entity = this.loadedEntities[item];\n if (entity) {\n this.queueTilesetFeatureStyle(entity);\n }\n }\n }\n else {\n clearInterval(this.queueCheckInterval);\n res();\n }\n }, 50);\n });\n }\n\n private queueTilesetFeatureStyle(entity: VisualsRegister.IVisualRego): void {\n if (this.styleMappingLoaded || this.styleMappingsLoaded[<string>entity.entityTypeId] == true) {\n const needsData = this.getTilesetFeatureNeedsFullData(entity.entityId, <string>entity.entityTypeId);\n if (needsData) {\n if (this.recordLoadQueue.findIndex(x => x == entity.entityId)) {\n this.recordLoadQueue.push(entity.entityId);\n }\n }\n else {\n this.styleTilesetFeature(entity);\n }\n }\n else {\n this.recordCheckQueue.push(entity.entityId);\n }\n }\n\n private styleTilesetFeature(entity: VisualsRegister.IVisualRego): void {\n this.styleTilesetFeatureFullData(entity, <any>null); \n }\n\n private styleTilesetFeatureFullData(entity: VisualsRegister.IVisualRego, data: Entity.IEntity): void {\n const style = <Style.IEntitySettings>this.getTilesetFeatureStyle(entity.entityId, <string>entity.entityTypeId);\n if (!style) {\n return;\n }\n const bColor = <Color.IColor>(style.modelStyle?.fillColor ? Calculator.GetValue(style.modelStyle.fillColor, data, []) : null);\n if (bColor != null) {\n const cColor = colorToCColor(bColor);\n const visual = entity.visual;\n if (visual && visual instanceof Cesium.Cesium3DTileFeature) {\n visual.color = cColor;\n }\n }\n }\n\n private getTilesetFeatureStyle(entityId: string, entityTypeId: string): Style.IEntitySettings {\n // Locate what style is applicable to the feature.\n let style: Style.IStyle = <any>null;\n if (entityTypeId) {\n style = <Style.IStyle>this.styleMapping.find(x => x.EntityTypeID == entityTypeId)?.style;\n }\n if (!style) {\n style = this.fallbackStyle;\n }\n if (!style) {\n return <any>null;\n }\n if (!(<Style.IEntitySettings>style.Settings)?.modelStyle?.customize) {\n return <any>null;\n }\n return <Style.IEntitySettings>style.Settings;\n }\n\n private getTilesetFeatureNeedsFullData(entityId: string, entityTypeId: string): boolean {\n const style = this.getTilesetFeatureStyle(entityId, entityTypeId);\n if (!style) {\n return false;\n }\n const fill = style?.modelStyle?.fillColor;\n if (!fill || fill.length <= 0) {\n return false;\n }\n return fill[0].type != 0;\n }\n }\n}","import { BruceApi, EntityCoords, MenuItem, Tileset, TilesetCad } from \"bruce-models\";\nimport { VisualsRegister } from \"../../visuals-register\";\nimport { RenderManager } from \"../render-manager\";\nimport * as Cesium from \"cesium\";\nimport { TilesetRenderEngine } from \"../../tileset-render-engine\";\n\n/**\n * Manager for rendering CAD tilesets.\n * CAD tilesets are referred to as \"MODEL\" tilesets in some other areas of Bruce code.\n */\nexport namespace TilesetCadRenderManager {\n export class Manager implements RenderManager.IManager {\n private viewer: Cesium.Viewer;\n private apiGetter: BruceApi.IGetter;\n private item: MenuItem.Item.ICadTileset;\n private disposed: boolean = false;\n public get Disposed(): boolean {\n return this.disposed;\n }\n private visualsManager: VisualsRegister.Register;\n private cTileset: Cesium.Cesium3DTileset = <any>null;\n private styler: TilesetRenderEngine.CadStyler = <any>null;\n\n \n constructor(viewer: Cesium.Viewer, visualsManager: VisualsRegister.Register, apiGetter: BruceApi.IGetter, item: MenuItem.Item.ICadTileset) {\n this.viewer = viewer;\n this.apiGetter = apiGetter;\n this.item = item;\n this.visualsManager = visualsManager;\n }\n \n public async Init(): Promise<void> {\n const tilesetId = this.item.tileset?.TilesetID;\n if (!tilesetId) {\n return;\n }\n\n const api = this.apiGetter.getApi();\n const tileset = await Tileset.Get(api, tilesetId);\n if (!tileset) {\n return;\n }\n\n const settings = <TilesetCad.ISettings>tileset.settings;\n const rootId = settings.rootEntityId;\n const coords: EntityCoords.IEntityCoords = await EntityCoords.GetEntityCoords(api, rootId);\n\n const cTileset = this.cTileset = TilesetRenderEngine.Render({\n apiGetter: this.apiGetter,\n tileset: tileset,\n viewer: this.viewer,\n coords: coords\n });\n cTileset.readyPromise.then(() => {\n this.onCTilesetLoad();\n });\n cTileset.tileLoad.addEventListener((tile) => {\n this.mapCTile(tile);\n });\n\n this.styler = new TilesetRenderEngine.CadStyler(api, this.cTileset, <number>this.item.styleId, <any[]>this.item.StyleMapping);\n }\n\n private onCTilesetLoad(): void {\n if (this.disposed) {\n return;\n }\n if (this.item.FlyTo) {\n this.viewer.zoomTo(\n this.cTileset,\n new Cesium.HeadingPitchRange(0.0, -0.5, this.cTileset.boundingSphere.radius / 4.0)\n );\n }\n }\n\n private mapCTile(tile: Cesium.Cesium3DTile): void {\n const content = tile.content;\n for (let i = 0; i < content.featuresLength; i++) {\n const feature = content.getFeature(i);\n \n let rego = this.mapTilesetFeature(feature);\n if (rego?.entityId) {\n this.styler.QueueEntities([rego]);\n }\n }\n }\n\n private mapTilesetFeature(feature: Cesium.Cesium3DTileFeature): VisualsRegister.IVisualRego {\n let version = feature?.tileset?.extensions?.modelTree?.version;\n if (!version) {\n version = 1;\n }\n \n let rego: VisualsRegister.IVisualRego = {\n entityId: <any>null,\n entityTypeId: <any>null,\n menuItemId: this.item.id,\n priority: 0,\n visual: feature\n };\n if (version == 1) {\n const pathStr = (<Cesium.Cesium3DTileFeature><any>feature).getProperty(\"BrucePath\");\n if (pathStr != undefined) {\n let path = pathStr.split(\"|\");\n let entityTypeId = this.getEntityTypeByPath(path);\n rego.entityTypeId = entityTypeId;\n rego.entityId = path[path.length - 1];\n }\n }\n else if (version == 2) {\n const geomId = +feature.getProperty(\"GeomId\");\n if (geomId != null && (!!geomId || geomId == 0)) {\n const meta = this.getMetaByGeomId(geomId, feature.tileset);\n if (meta) {\n rego.entityId = meta.id;\n rego.entityTypeId = meta.typeId;\n }\n }\n }\n else {\n console.log(\"Unhandled tileset tree version = \" + version);\n }\n if (rego?.entityId) {\n this.visualsManager.Add(rego);\n return rego;\n }\n return <any>null;\n }\n\n private getMetaByGeomId(geomId: number, tileset: Cesium.Cesium3DTileset): { id: string, typeId: string } {\n let modelTree: any = tileset?.extensions?.modelTree;\n return this.digMetaByGeomId(geomId, modelTree, []);\n }\n \n private digMetaByGeomId(geomId: number, branch: any, path: string[]): { id: string, typeId: string } {\n path = [].concat(<any>path);\n path.push(branch.id);\n\n if (branch.geomId == geomId) {\n return { id: path[path.length - 1], typeId: branch.typeId };\n }\n else if (branch.children) {\n for (let i = 0; i < branch.children.length; i++) {\n let meta = this.digMetaByGeomId(geomId, branch.children[i], path);\n if (meta) {\n return meta;\n }\n }\n }\n return <any>null;\n }\n\n private getEntityTypeByPath(path: string[]): string {\n let modelTree: any = this.cTileset?.extensions?.modelTree;\n if (modelTree) {\n let data = this.digModelTreeByPath(modelTree, path);\n if (data) {\n return data.typeId;\n }\n }\n return <any>null;\n }\n \n private digModelTreeByPath(branch: any, path: string[]): any {\n // Dereference.\n path = JSON.parse(JSON.stringify(path));\n \n if (path.length <= 0) {\n return null;\n }\n let pathTop = path.splice(0, 1)[0];\n if (pathTop != branch.id) {\n return null;\n }\n else if (path.length == 0 && pathTop == branch.id) {\n return branch;\n }\n else if (branch.children) {\n for (let i = 0; i < branch.children.length; i++) {\n let foundPath = this.digModelTreeByPath(branch.children[i], path);\n if (foundPath) {\n return foundPath;\n }\n }\n }\n return null;\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n if (this.cTileset) {\n this.cTileset.show = false;\n }\n this.styler.Dispose();\n this.visualsManager.RemoveByMenuItemId(this.item.id);\n }\n }\n}","import { Entity, EntityFilterGetter } from \"bruce-models\";\nimport { BruceApi } from \"bruce-models/dist/types/api/bruce-api\";\nimport { IDictionary } from \"bruce-models/dist/types/common/dictionary\";\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\n\nfunction createFilterGetterCacheKey(params: SharedGetters.IFilterGetterParams): string {\n let cacheKey = \"\";\n cacheKey += params.api.GetBaseUrl();\n cacheKey += params.typeId;\n cacheKey += params.batchSize;\n cacheKey += JSON.stringify(params.attrFilter);\n return cacheKey;\n}\n\nexport namespace SharedGetters {\n export interface IFilterGetterParams {\n api: BruceApi.Api;\n typeId: string;\n batchSize: number;\n attrFilter: Entity.Filter.V1.AttrFilter;\n monitor: CesiumViewMonitor;\n }\n\n export class Cache {\n private data: IDictionary<EntityFilterGetter.Getter> = {};\n\n\n public GetOrCreateFilterGetter(params: IFilterGetterParams): EntityFilterGetter.Getter {\n const cacheKey = createFilterGetterCacheKey(params);\n let getter = this.data[cacheKey];\n if (!getter) {\n getter = new EntityFilterGetter.Getter(\n params.api,\n params.monitor,\n params.typeId,\n params.batchSize,\n params.attrFilter\n );\n this.data[cacheKey] = getter;\n }\n return getter;\n }\n }\n}","import { BruceApi, Cartes, EntitySource, IDictionary, MenuItem, ObjectUtils } from \"bruce-models\";\nimport { VisualsRegister } from \"../../visuals-register\";\nimport { RenderManager } from \"../render-manager\";\nimport * as Cesium from \"cesium\";\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\n\ninterface ICesiumFeatureExtended extends Cesium.Cesium3DTileFeature {\n _orgColor: Cesium.Color;\n _counter: number;\n}\n\nconst MAX_BATCHES = 2;\nconst BATCH_SIZE = 30;\nconst BATCH_DELAY = 200;\nconst MAX_RANGE = 3000;\n\nexport namespace TilesetOsmRenderManager {\n export class Manager implements RenderManager.IManager {\n private viewer: Cesium.Viewer;\n private apiGetter: BruceApi.IGetter;\n private item: MenuItem.Item.IOsm;\n private monitor: CesiumViewMonitor;\n private disposed: boolean = false;\n public get Disposed(): boolean {\n return this.disposed;\n }\n private visualsManager: VisualsRegister.Register;\n private cTileset: Cesium.Cesium3DTileset = <any>null;\n\n private counter: number = 0;\n private get count(): number {\n return ++this.counter;\n }\n\n private _loadedCesiumEntities: IDictionary<VisualsRegister.IVisualRego> = {};\n private totalLoaded: number = 0;\n private featureQueue: ICesiumFeatureExtended[] = [];\n private sourceId: number = <any>null;\n private entityTypeId: string = <any>null;\n private queueCheckInterval: any = null;\n private processingQueue: number = 0;\n\n\n constructor(viewer: Cesium.Viewer, visualsManager: VisualsRegister.Register, apiGetter: BruceApi.IGetter, monitor: CesiumViewMonitor, item: MenuItem.Item.IOsm) {\n this.viewer = viewer;\n this.apiGetter = apiGetter;\n this.item = item;\n this.visualsManager = visualsManager;\n this.monitor = monitor;\n }\n\n public Dispose(): void {\n if (this.disposed) {\n return;\n }\n clearInterval(this.queueCheckInterval);\n if (this.cTileset) {\n this.cTileset.show = false;\n }\n this.visualsManager.RemoveByMenuItemId(this.item.id);\n this.featureQueue = [];\n }\n\n public async Init(): Promise<void> {\n const menuItem = this.item;\n this.sourceId = <number><any>menuItem.BruceEntity?.SourceId;\n this.entityTypeId = <string>menuItem.BruceEntity?.[\"EntityType.ID\"];\n\n this.cTileset = Cesium.createOsmBuildings();\n this.cTileset.show = true;\n\n if (this.sourceId) {\n if (menuItem.ghostLoading == true) {\n this.cTileset.style = new Cesium.Cesium3DTileStyle({\n color: \"rgba(255, 255, 250, 0.98)\"\n });\n }\n \n this.viewer.scene.primitives.add(this.cTileset);\n this.cTileset.tileLoad.addEventListener((tile) => {\n this.mapCTile(tile);\n });\n \n this.queueCheckInterval = setInterval(() => {\n if (this.featureQueue.length > 0) {\n this.processQueue();\n }\n }, 5000);\n }\n else {\n this.viewer.scene.primitives.add(this.cTileset);\n }\n }\n\n private async mapCTile(tile: Cesium.Cesium3DTile): Promise<void> {\n if (this.sourceId) {\n let content = tile.content;\n for (let i = 0; i < content.featuresLength; i++) {\n let feature: ICesiumFeatureExtended = <ICesiumFeatureExtended>content.getFeature(i);\n if (feature._counter == null) {\n feature._counter = this.count;\n }\n if (feature._orgColor == null) {\n feature._orgColor = feature.color;\n }\n this.featureQueue.push(feature);\n }\n this.processQueue();\n }\n }\n\n private async processQueue(): Promise<void> {\n if (this.processingQueue >= MAX_BATCHES) {\n return;\n }\n else if (this.Disposed) {\n return;\n }\n this.processingQueue += 1;\n \n let batch: ICesiumFeatureExtended[] = [];\n let rerun: boolean = false;\n \n try {\n batch = this.getVisualsForBatch();\n \n if (batch.length > 0) {\n await this.mapTileBatch(batch);\n }\n \n if (this.totalLoaded > 8000) {\n rerun = this.removeFarAwayBatch();\n }\n else {\n rerun = this.featureQueue.length > 0 && batch.length > 0;\n }\n }\n catch (e) {\n console.error(e);\n }\n finally {\n setTimeout(() => {\n this.processingQueue -= 1;\n if (rerun) {\n this.processQueue();\n }\n }, BATCH_DELAY);\n }\n }\n\n private getVisualsForBatch(): ICesiumFeatureExtended[] {\n const batch: ICesiumFeatureExtended[] = [];\n const features = this.featureQueue;\n const bounds = this.monitor.GetBounds();\n const rect = bounds?.east ? new Cesium.Rectangle(\n Cesium.Math.toRadians(bounds.west), \n Cesium.Math.toRadians(bounds.south), \n Cesium.Math.toRadians(bounds.east), \n Cesium.Math.toRadians(bounds.north)\n ) : null;\n\n if (rect) {\n for (let i = 0; i < features.length; i++) {\n const feature = features[i];\n if (feature) {\n const featureLon = feature.getProperty(\"cesium#longitude\");\n const featureLat = feature.getProperty(\"cesium#latitude\");\n if (featureLon && featureLat) {\n const carto = Cesium.Cartographic.fromDegrees(featureLon, featureLat, 0);\n const isIn = Cesium.Rectangle.contains(rect, carto);\n if (isIn) {\n const isClose = this.getIsVisualWithinRange(feature, MAX_RANGE);\n if (isClose) {\n batch.push(feature);\n if (batch.length >= BATCH_SIZE) {\n return batch;\n }\n }\n }\n }\n }\n }\n }\n return batch;\n }\n\n private getIsVisualWithinRange(visual: ICesiumFeatureExtended, range: number): boolean {\n const featureLon = visual.getProperty(\"cesium#longitude\");\n const featureLat = visual.getProperty(\"cesium#latitude\");\n if (featureLon && featureLat) {\n const pos = Cesium.Cartesian3.fromDegrees(featureLon, featureLat, 0);\n const camPoint = this.monitor.GetTarget();\n const camPos = camPoint?.latitude ? Cesium.Cartesian3.fromDegrees(camPoint.longitude, camPoint.latitude, camPoint.altitude) : null;\n if (camPos && Cartes.ValidateCartes3(camPos) && Cartes.ValidateCartes3(pos)) {\n let distance = Cesium.Cartesian3.distance(pos, camPos);\n if (distance != null && distance <= range) {\n return true;\n }\n }\n }\n return false;\n }\n\n private async mapTileBatch(features: ICesiumFeatureExtended[]): Promise<void> {\n const featureIds: string[] = [];\n const featureMap: ICesiumFeatureExtended[] = [];\n \n for (let i = 0; i < features.length; i++) {\n const feature = features[i];\n const featureId = feature.getProperty(\"elementId\");\n if (featureId) {\n featureMap.push(feature);\n featureIds.push(featureId + \"\");\n }\n\n const index = this.featureQueue.findIndex(x => x._counter == feature._counter);\n if (index > -1) {\n this.featureQueue.splice(index, 1);\n }\n }\n\n const api = this.apiGetter.getApi();\n const bIds = await EntitySource.GetEntityIdsBySourceKeys(api, this.sourceId, featureIds);\n\n for (let i = 0; i < featureIds.length; i++) {\n const id = featureIds[i];\n let bId = bIds[id];\n if (!bId) {\n bId = ObjectUtils.UId();\n }\n const feature = featureMap[i];\n if (this.item.ghostLoading == true) {\n feature.color = feature._orgColor;\n }\n const rego = {\n entityId: bId,\n menuItemId: this.item.id,\n priority: 0,\n visual: feature,\n entityTypeId: this.entityTypeId,\n sourceId: this.sourceId\n };\n this.visualsManager.Add(rego);\n this._loadedCesiumEntities[bId] = rego;\n }\n }\n\n private removeFarAwayBatch(): boolean {\n let removed = 0;\n let keys = Object.keys(this._loadedCesiumEntities);\n for (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n let rego = this._loadedCesiumEntities[key];\n if (rego) {\n if (!this.getIsVisualWithinRange(rego.visual as ICesiumFeatureExtended, MAX_RANGE)) {\n this.visualsManager.Remove(rego.entityId, this.item.id);\n this._loadedCesiumEntities[key] = <any>null;\n delete this._loadedCesiumEntities[key];\n this.totalLoaded -= 1;\n removed += 1;\n \n if (removed >= BATCH_SIZE) {\n return true;\n }\n }\n }\n }\n \n return removed > 0;\n }\n }\n}","import { BruceApi, BruceEvent, MenuItem, ObjectUtils } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { EntitiesRenderManager } from \"./render-managers/entities/entities-render-manager\";\nimport { EntitiesLoadedRenderManager } from \"./render-managers/entities/entities-loaded-render-manager\";\nimport { RenderManager } from \"./render-managers/render-manager\";\nimport { VisualsRegister } from \"./visuals-register\";\nimport { EntitiesIdsRenderManager } from \"./render-managers/entities/entities-ids-render-manager\";\nimport { EntityRenderManager } from \"./render-managers/entities/entity-render-manager\";\nimport { TilesetCadRenderManager } from \"./render-managers/tilesets/tileset-cad-render-manager\";\nimport { SharedGetters } from \"./render-managers/common/shared-getters\";\nimport { CesiumViewMonitor } from \"../viewer/cesium-view-monitor\";\nimport { TilesetOsmRenderManager } from \"./render-managers/tilesets/tileset-osm-render-manager\";\n\ninterface IRenderedItem {\n id: string;\n type: MenuItem.EType;\n childIds: string[];\n item: MenuItem.IItem;\n renderManager: RenderManager.Type;\n}\n\n/**\n * Utility to keep track of enabled menu items within a Cesium viewer.\n */\nexport namespace MenuItemManager {\n export interface IMenuItemUpdate {\n itemId: string;\n isEnabling: boolean;\n }\n\n export interface IRenderParams {\n apiGetter: BruceApi.IGetter;\n item: MenuItem.IItem;\n }\n\n export class Manager {\n private viewer: Cesium.Viewer;\n public get Viewer(): Cesium.Viewer {\n return this.viewer;\n }\n private items: IRenderedItem[] = [];\n private visualsRegister: VisualsRegister.Register;\n public get VisualsRegister(): VisualsRegister.Register {\n return this.visualsRegister;\n }\n private onUpdate: BruceEvent<IMenuItemUpdate> = <any>null;\n public get OnUpdate(): BruceEvent<IMenuItemUpdate> {\n if (!this.onUpdate) {\n this.onUpdate = new BruceEvent<IMenuItemUpdate>();\n }\n return this.onUpdate;\n }\n private sharedGetters: SharedGetters.Cache;\n private sharedMonitor: CesiumViewMonitor;\n\n \n public constructor(viewer: Cesium.Viewer, visualsRegister?: VisualsRegister.Register) {\n this.viewer = viewer;\n if (!visualsRegister) {\n visualsRegister = new VisualsRegister.Register(viewer);\n }\n this.visualsRegister = visualsRegister;\n this.sharedGetters = new SharedGetters.Cache();\n this.sharedMonitor = new CesiumViewMonitor(this.viewer);\n }\n \n /**\n * Renders a given menu item and all ids children.\n * Will return the enabled item id.\n * @param params\n * @param recursive\n * @returns \n */\n public async RenderItem(params: IRenderParams, recursive: boolean = true): Promise<string> {\n let rItem = this.items.find(x => x.id == params.item.id);\n if (!rItem) {\n rItem = {\n id: params.item.id ?? ObjectUtils.UId(),\n childIds: [],\n item: params.item,\n renderManager: <any>null,\n type: params.item.Type\n }\n this.items.push(rItem);\n\n switch (params.item.Type) {\n case MenuItem.EType.Entities:\n rItem.renderManager = new EntitiesRenderManager.Manager(\n this.viewer, \n this.visualsRegister, \n params.apiGetter, \n this.sharedMonitor,\n <MenuItem.Item.IBruceEntities>params.item,\n this.sharedGetters\n );\n break;\n case MenuItem.EType.EntitiesLoaded:\n rItem.renderManager = new EntitiesLoadedRenderManager.Manager(\n this.viewer, \n this.visualsRegister, \n params.apiGetter, \n this.sharedMonitor, \n <MenuItem.Item.IEntitiesLoaded>params.item\n );\n break;\n case MenuItem.EType.EntitiesIds:\n rItem.renderManager = new EntitiesIdsRenderManager.Manager(\n this.viewer, \n this.visualsRegister, \n params.apiGetter, \n this.sharedMonitor,\n <MenuItem.Item.IEntityIds>params.item\n );\n break;\n case MenuItem.EType.Entity:\n rItem.renderManager = new EntityRenderManager.Manager(\n this.viewer, \n this.visualsRegister, \n params.apiGetter, \n this.sharedMonitor, \n <MenuItem.Item.IBruceEntity>params.item\n );\n break;\n case MenuItem.EType.CadTileset:\n rItem.renderManager = new TilesetCadRenderManager.Manager(this.viewer, this.visualsRegister, params.apiGetter, <MenuItem.Item.ICadTileset>params.item);\n break;\n case MenuItem.EType.Osm:\n rItem.renderManager = new TilesetOsmRenderManager.Manager(this.viewer, this.visualsRegister, params.apiGetter, this.sharedMonitor, <MenuItem.Item.IOsm>params.item);\n break;\n case MenuItem.EType.PointCloud:\n // TODO;\n break;\n case MenuItem.EType.EntityTileset:\n // TODO;\n break;\n case MenuItem.EType.Kml:\n // TODO;\n break;\n // Any \"none\" type can be ignored. These are just containers for other items.\n case MenuItem.EType.None:\n break;\n default:\n console.error(\"Menu item type is not implemented.\", params.item.Type);\n }\n \n if (rItem.renderManager) {\n await rItem.renderManager.Init();\n }\n }\n if (params.item.Children && recursive) {\n for (let i = 0; i < params.item.Children.length; i++) {\n const childId = await this.RenderItem({\n ...params,\n item: params.item.Children[i]\n });\n rItem.childIds.push(childId);\n }\n }\n this.onUpdate?.Trigger({ isEnabling: true, itemId: rItem.id });\n return rItem.id;\n }\n \n /**\n * Disables a menu item by ids id.\n * This will disable all children as well.\n * @param id \n * @param recursive\n */\n public async RemoveItemById(id: string, recursive: boolean = true): Promise<void> {\n const item = this.items.find(x => x.id === id);\n if (item) {\n if (recursive) {\n for (let i = 0; i < item.childIds.length; i++) {\n const child = this.items.find(x => x.id === item.childIds[i]);\n if (child) {\n await this.RemoveItemById(child.id);\n }\n }\n }\n try {\n item.renderManager?.Dispose();\n }\n catch (e) {\n console.error(e);\n }\n this.items = this.items.filter(x => x.id !== id);\n this.onUpdate?.Trigger({ isEnabling: false, itemId: item.id });\n }\n }\n\n public GetEnabledItemIds(): string[] {\n return this.items.map(x => x.id);\n }\n }\n}","import { BruceApi, Entity, MenuItem, ObjectUtils, ProjectView, ProjectViewBookmark, Tileset, ZoomControl } from \"bruce-models\";\nimport { MenuItemManager } from \"./menu-item-manager\";\n\n/**\n * Utility to help generate menu items for rendering various data.\n */\nexport namespace RenderHelper {\n export interface IParams {\n apiGetter: BruceApi.IGetter;\n manager: MenuItemManager.Manager;\n }\n\n export async function RenderEntities(params: IParams, entityIds: string[]): Promise<string> {\n const item: MenuItem.Item.IEntityIds = {\n Caption: \"Rendering Loaded Entities\",\n Type: <MenuItem.EType><any>MenuItem.EType.EntitiesLoaded,\n id: ObjectUtils.UId(),\n Children: [],\n BruceEntity: {\n EntityIds: entityIds\n },\n CameraZoomSettings: [\n {\n DisplayType: ZoomControl.EDisplayType.Model3D,\n LODCategoryID: \"glb\",\n LODLevel: 0,\n MaxZoom: 100000,\n MinZoom: 0,\n StyleID: 0 // 0 = Attempt to get entity type's default.\n }\n ]\n };\n return await params.manager.RenderItem({\n apiGetter: params.apiGetter,\n item: item\n });\n }\n\n export async function RenderEntityTypes(params: IParams, typeIds: string[]): Promise<string[]> {\n const renderedItemIds: string[] = [];\n for (let i = 0; i < typeIds.length; i++) {\n const typeId = typeIds[i];\n const menuItem = MenuItem.CreateFromTypeId(typeId, 0);\n const itemId = await params.manager.RenderItem({\n apiGetter: params.apiGetter,\n item: menuItem\n });\n renderedItemIds.push(itemId);\n }\n return renderedItemIds;\n }\n\n export async function RenderEntityFilter(params: IParams, filter: Entity.Filter.V1.IFilter): Promise<string> {\n const item: MenuItem.Item.IBruceEntities = {\n BruceEntity: {\n \"EntityType.ID\": <string>filter.entityTypeId,\n Filter: filter\n },\n Type: MenuItem.EType.Entities,\n Caption: \"Rendering Filtered Entities\",\n CameraZoomSettings: [\n {\n DisplayType: ZoomControl.EDisplayType.Model3D,\n LODCategoryID: \"glb\",\n LODLevel: 0,\n MaxZoom: 100000,\n MinZoom: 0,\n StyleID: 0 // 0 = Attempt to get entity type's default.\n }\n ],\n id: ObjectUtils.UId(),\n Children: [],\n showAllLayers: true,\n showAllLayersExcludeBelow: false,\n tagIds: []\n };\n return await params.manager.RenderItem({\n apiGetter: params.apiGetter,\n item: item\n });\n }\n\n export async function RenderMenuItems(params: IParams, menuItems: MenuItem.IItem[]): Promise<string[]> {\n const renderedItemIds: string[] = [];\n for (let i = 0; i < menuItems.length; i++) {\n const menuItem = menuItems[i];\n const itemId = await params.manager.RenderItem({\n apiGetter: params.apiGetter,\n item: menuItem\n });\n renderedItemIds.push(itemId);\n }\n return renderedItemIds;\n }\n\n export async function RenderTileset(params: IParams, tilesetId: string): Promise<string> {\n const api = params.apiGetter.getApi();\n const tileset = await Tileset.Get(api, tilesetId);\n if (tileset.type == Tileset.EType.Cad) {\n const menuItem: MenuItem.Item.ICadTileset = {\n Caption: \"Rendering Tileset\",\n FlyTo: true,\n id: ObjectUtils.UId(),\n tileset: {\n TilesetID: tilesetId\n },\n Type: MenuItem.EType.CadTileset,\n styleId: 0,\n Children: []\n };\n return await params.manager.RenderItem({\n item: menuItem,\n apiGetter: params.apiGetter\n });\n }\n else {\n throw(new Error(\"Tileset type not supported.\"));\n }\n }\n\n export async function RenderBookmarkItems(params: IParams, viewId: string, bookmarkId: string): Promise<string[]> {\n const api = params.apiGetter.getApi();\n const view = await ProjectView.Get(api, viewId);\n const bookmark = await ProjectViewBookmark.Get(api, viewId, bookmarkId);\n\n if (view.DataVersion != bookmark.DataVersion) {\n throw new Error(\"View and bookmark settings version mismatch.\");\n }\n\n let enabledIds: string[] = [];\n let menuItems: MenuItem.IItem[] = [];\n \n const version = view.DataVersion;\n if (view.Settings && bookmark.Settings) {\n if (version === 2) {\n const vSettings = view.Settings as ProjectView.V2.ISettings;\n const bSettings = bookmark.Settings as ProjectViewBookmark.V2.ISettings;\n menuItems = vSettings.menuItems;\n enabledIds = bSettings.menuItemIds;\n }\n else {\n const vSettings = view.Settings as ProjectView.V1.ISettings;\n const bSettings = bookmark.Settings as ProjectViewBookmark.V1.ISettings;\n menuItems = vSettings.LayersMenu;\n enabledIds = bSettings.selectedItemIds;\n }\n }\n \n const renderedItemIds: string[] = [];\n if (menuItems?.length && enabledIds?.length) {\n const traverseItems = async (item: MenuItem.IItem) => {\n if (enabledIds.includes(item.id)) {\n const itemId = await params.manager.RenderItem({\n item: item,\n apiGetter: params.apiGetter\n });\n renderedItemIds.push(itemId);\n }\n if (item.Children) {\n for (let i = 0; i < item.Children.length; i++) {\n await traverseItems(item.Children[i]);\n }\n }\n }\n for (let i = 0; i < menuItems.length; i++) {\n await traverseItems(menuItems[i]);\n }\n }\n return renderedItemIds;\n }\n}","import { ProjectViewTile, BruceApi, ProjectView, ProjectViewBookmark, ProjectViewLegacyTile, Tileset, TilesetExtTerrainTiles, TilesetMapTiles, TilesetExtMapTiles } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\n\nconst DEFAULT_BING_KEY = \"AqL0uYT5T84jiJeX55_b9zJeeP3MX2p1WLOHH4ljIEPZ7ZL2M81bYLzyYeSwuzzl\";\nconst DEFAULT_MAPBOX_KEY = \"pk.eyJ1IjoiYWxleHRodW5kZXIiLCJhIjoiY2psbHJxbnN5MTBvbzNxczZwMHNpeTI0MCJ9.fdoj2QW_7n8RV4e0NCFgZA\";\n\nconst re = /[\\0-\\x1F\\x7F-\\x9F\\xAD\\u0378\\u0379\\u037F-\\u0383\\u038B\\u038D\\u03A2\\u0528-\\u0530\\u0557\\u0558\\u0560\\u0588\\u058B-\\u058E\\u0590\\u05C8-\\u05CF\\u05EB-\\u05EF\\u05F5-\\u0605\\u061C\\u061D\\u06DD\\u070E\\u070F\\u074B\\u074C\\u07B2-\\u07BF\\u07FB-\\u07FF\\u082E\\u082F\\u083F\\u085C\\u085D\\u085F-\\u089F\\u08A1\\u08AD-\\u08E3\\u08FF\\u0978\\u0980\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09FC-\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A76-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF2-\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B55\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B78-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BFB-\\u0C00\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C34\\u0C3A-\\u0C3C\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5A-\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C77\\u0C80\\u0C81\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDD\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0D01\\u0D04\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D45\\u0D49\\u0D4F-\\u0D56\\u0D58-\\u0D5F\\u0D64\\u0D65\\u0D76-\\u0D78\\u0D80\\u0D81\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DF1\\u0DF5-\\u0E00\\u0E3B-\\u0E3E\\u0E5C-\\u0E80\\u0E83\\u0E85\\u0E86\\u0E89\\u0E8B\\u0E8C\\u0E8E-\\u0E93\\u0E98\\u0EA0\\u0EA4\\u0EA6\\u0EA8\\u0EA9\\u0EAC\\u0EBA\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F48\\u0F6D-\\u0F70\\u0F98\\u0FBD\\u0FCD\\u0FDB-\\u0FFF\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u137D-\\u137F\\u139A-\\u139F\\u13F5-\\u13FF\\u169D-\\u169F\\u16F1-\\u16FF\\u170D\\u1715-\\u171F\\u1737-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17DE\\u17DF\\u17EA-\\u17EF\\u17FA-\\u17FF\\u180F\\u181A-\\u181F\\u1878-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191D-\\u191F\\u192C-\\u192F\\u193C-\\u193F\\u1941-\\u1943\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DB-\\u19DD\\u1A1C\\u1A1D\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1A9F\\u1AAE-\\u1AFF\\u1B4C-\\u1B4F\\u1B7D-\\u1B7F\\u1BF4-\\u1BFB\\u1C38-\\u1C3A\\u1C4A-\\u1C4C\\u1C80-\\u1CBF\\u1CC8-\\u1CCF\\u1CF7-\\u1CFF\\u1DE7-\\u1DFB\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FC5\\u1FD4\\u1FD5\\u1FDC\\u1FF0\\u1FF1\\u1FF5\\u1FFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u2072\\u2073\\u208F\\u209D-\\u209F\\u20BB-\\u20CF\\u20F1-\\u20FF\\u218A-\\u218F\\u23F4-\\u23FF\\u2427-\\u243F\\u244B-\\u245F\\u2700\\u2B4D-\\u2B4F\\u2B5A-\\u2BFF\\u2C2F\\u2C5F\\u2CF4-\\u2CF8\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D71-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E3C-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u2FFF\\u3040\\u3097\\u3098\\u3100-\\u3104\\u312E-\\u3130\\u318F\\u31BB-\\u31BF\\u31E4-\\u31EF\\u321F\\u32FF\\u4DB6-\\u4DBF\\u9FCD-\\u9FFF\\uA48D-\\uA48F\\uA4C7-\\uA4CF\\uA62C-\\uA63F\\uA698-\\uA69E\\uA6F8-\\uA6FF\\uA78F\\uA794-\\uA79F\\uA7AB-\\uA7F7\\uA82C-\\uA82F\\uA83A-\\uA83F\\uA878-\\uA87F\\uA8C5-\\uA8CD\\uA8DA-\\uA8DF\\uA8FC-\\uA8FF\\uA954-\\uA95E\\uA97D-\\uA97F\\uA9CE\\uA9DA-\\uA9DD\\uA9E0-\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A\\uAA5B\\uAA7C-\\uAA7F\\uAAC3-\\uAADA\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F-\\uABBF\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBC2-\\uFBD2\\uFD40-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFE\\uFDFF\\uFE1A-\\uFE1F\\uFE27-\\uFE2F\\uFE53\\uFE67\\uFE6C-\\uFE6F\\uFE75\\uFEFD-\\uFF00\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFDF\\uFFE7\\uFFEF-\\uFFFB\\uFFFE\\uFFFF]/g;\n\n/**\n * Prepares a legacy imagery name for comparison.\n * Legacy data did not have ids... we do what we can.\n * @param name \n * @returns \n */\nfunction prepLegacyName(name: string): string {\n if (!name) {\n return \"\";\n }\n name = name.replace(/\\s/g, \"\");\n name = name.replace(re, \"\")\n name = name.toLowerCase();\n if (name === \"cwt\") {\n name = \"cesiumworldterrain\";\n }\n return name;\n}\n\n/**\n * Constructs an terrain provider for a default terrain type.\n * Warning: This does not add it to the viewer.\n * @param id \n * @returns \n */\nfunction renderDefaultTerrTile(id: ProjectViewTile.EDefaultTerrain): Cesium.TerrainProvider {\n let provider: Cesium.TerrainProvider;\n switch (id) {\n case ProjectViewTile.EDefaultTerrain.CesiumWorldTerrain:\n provider = Cesium.createWorldTerrain({\n requestVertexNormals: true,\n requestWaterMask: false\n });\n break;\n case ProjectViewTile.EDefaultTerrain.FlatTerrain:\n provider = <any>new Cesium.EllipsoidTerrainProvider();\n break;\n case ProjectViewTile.EDefaultTerrain.LINZ:\n provider = <any>new Cesium.CesiumTerrainProvider({\n url: \"https://s3-ap-southeast-2.amazonaws.com/digitalnewzealand/PROD/Tilesets/nz-dem\",\n requestVertexNormals: true,\n });\n break;\n }\n return provider;\n}\n\n/**\n * Maps a legacy terrain's name to a default terrain id.\n * @param name \n * @returns \n */\nfunction legacyTerrIdToDefaultId(name: string): ProjectViewTile.EDefaultTerrain {\n name = prepLegacyName(name);\n switch (name) {\n case \"cesiumworldterrain\":\n return ProjectViewTile.EDefaultTerrain.CesiumWorldTerrain;\n case \"linz\":\n return ProjectViewTile.EDefaultTerrain.LINZ;\n case \"flatterrain\":\n return ProjectViewTile.EDefaultTerrain.FlatTerrain;\n }\n}\n\n/**\n * Returns if a given legacy terrain's name correspondings to a default source.\n * @param name \n * @returns \n */\nfunction isLegacyTerrainDefault(name: string): boolean {\n name = legacyTerrIdToDefaultId(name);\n return ProjectViewTile.DefaultTerrains.find(x => x.id == name) != null;\n}\n\n/**\n * Returns a best attempt at a unique id from a given legacy terrain source.\n * @param source \n * @returns \n */\nfunction createLegacyTerrId(source: ProjectViewLegacyTile.ITerrainSource): string {\n if (!source) {\n return \"\";\n }\n if (isLegacyTerrainDefault(source.Name)) {\n return source.Name;\n }\n if (source.SourceUrl) {\n return source.SourceUrl;\n }\n return \"\";\n}\n\n/**\n * Returns a best attempt at a unique id from a given legacy imagery source.\n * @param source \n * @returns \n */\nfunction createLegacyImageryId(source: ProjectViewLegacyTile.IMapSource): string {\n if (!source) {\n return \"\";\n }\n if (isLegacyImageryDefault(source.Name)) {\n return source.Name;\n }\n if (source.SourceUrl) {\n return source.SourceUrl;\n }\n return \"\";\n}\n\n/**\n * Turns Cesium collection of enabled imageries into an array.\n * @param viewer \n * @returns \n */\nfunction gatherEnabledImageries(viewer: Cesium.Viewer): Cesium.ImageryLayer[] {\n const collection = viewer.imageryLayers;\n const layers: Cesium.ImageryLayer[] = [];\n for (let i = 0; i < collection.length; i++) {\n const layer = collection.get(i);\n layers.push(layer);\n }\n return layers;\n}\n\n/**\n * Constructs an imagery provider for a default imagery type.\n * Warning: This does not add it to the viewer.\n * @param id \n * @returns \n */\nfunction renderDefaultMapTile(id: ProjectViewTile.EDefaultImagery): Cesium.ImageryProvider {\n let provider: Cesium.ImageryProvider;\n switch (id) {\n case ProjectViewTile.EDefaultImagery.BingMapsAerial:\n // TODO: Read account key if available.\n provider = new Cesium.BingMapsImageryProvider({\n url: \"https://dev.virtualearth.net\",\n mapStyle: Cesium.BingMapsStyle.AERIAL,\n key: DEFAULT_BING_KEY\n });\n break;\n case ProjectViewTile.EDefaultImagery.BingMapsAerialWithLabels:\n // TODO: Read account key if available.\n provider = new Cesium.BingMapsImageryProvider({\n url: \"https://dev.virtualearth.net\",\n mapStyle: Cesium.BingMapsStyle.AERIAL_WITH_LABELS,\n key: DEFAULT_BING_KEY\n });\n break;\n case ProjectViewTile.EDefaultImagery.BingMapsRoads:\n // TODO: Read account key if available.\n provider = new Cesium.BingMapsImageryProvider({\n url: \"https://dev.virtualearth.net\",\n mapStyle: Cesium.BingMapsStyle.ROAD_ON_DEMAND,\n key: DEFAULT_BING_KEY\n });\n break;\n case ProjectViewTile.EDefaultImagery.MapboxSatellite:\n // TODO: Read account key if available.\n provider = new Cesium.MapboxImageryProvider({\n mapId: \"mapbox.satellite\",\n accessToken: DEFAULT_MAPBOX_KEY\n });\n break;\n case ProjectViewTile.EDefaultImagery.MapBoxStreets:\n // TODO: Read account key if available.\n provider = new Cesium.MapboxImageryProvider({\n mapId: \"satellite-streets-v11\",\n accessToken: DEFAULT_MAPBOX_KEY\n });\n break;\n case ProjectViewTile.EDefaultImagery.MapBoxStreetsClassic:\n // TODO: Read account key if available.\n provider = new Cesium.MapboxImageryProvider({\n mapId: \"streets-v11\",\n accessToken: DEFAULT_MAPBOX_KEY\n });\n break;\n case ProjectViewTile.EDefaultImagery.EsriWorldImagery:\n provider = new Cesium.ArcGisMapServerImageryProvider({\n url:\"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer\",\n enablePickFeatures: false\n });\n break;\n case ProjectViewTile.EDefaultImagery.EsriWorldStreetMap:\n provider = new Cesium.ArcGisMapServerImageryProvider({\n url:\"https://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer\",\n enablePickFeatures: false\n });\n break;\n case ProjectViewTile.EDefaultImagery.EsriNationalGeographic:\n provider = new Cesium.ArcGisMapServerImageryProvider({\n url:\"https://services.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/\",\n enablePickFeatures: false\n });\n break;\n case ProjectViewTile.EDefaultImagery.OpenStreetMap:\n provider = new Cesium.OpenStreetMapImageryProvider({\n url: \"https://a.tile.openstreetmap.org/\"\n });\n break;\n case ProjectViewTile.EDefaultImagery.StamenWaterColor:\n provider = new Cesium.OpenStreetMapImageryProvider({\n url: \"https://stamen-tiles.a.ssl.fastly.net/watercolor/\"\n });\n break;\n case ProjectViewTile.EDefaultImagery.StamenToner:\n provider = new Cesium.OpenStreetMapImageryProvider({\n url: \"https://stamen-tiles.a.ssl.fastly.net/toner/\"\n });\n break;\n case ProjectViewTile.EDefaultImagery.Grid:\n provider = new Cesium.GridImageryProvider({\n tilingScheme: new Cesium.GeographicTilingScheme(),\n cells: 0,\n color: Cesium.Color.fromCssColorString(\"rgb(97, 151, 237)\"),\n glowColor: Cesium.Color.fromCssColorString(\"rgb(54, 54, 54)\"),\n glowWidth: 4,\n backgroundColor: Cesium.Color.TRANSPARENT,\n tileWidth: 256,\n tileHeight: 256,\n canvasSize: 256\n });\n break;\n }\n return provider;\n}\n\n/**\n * Maps a legacy imagery's name to a default imagery id.\n * @param name \n * @returns \n */\nfunction legacyMapIdToDefaultId(name: string): ProjectViewTile.EDefaultImagery {\n name = prepLegacyName(name);\n switch (name) {\n case \"bingmapsaerial\":\n return ProjectViewTile.EDefaultImagery.BingMapsAerial;\n case \"bingmapsaerialwithlabels\":\n return ProjectViewTile.EDefaultImagery.BingMapsAerialWithLabels;\n case \"bingmapsroads\":\n return ProjectViewTile.EDefaultImagery.BingMapsRoads;\n case \"mapboxsatellite\":\n return ProjectViewTile.EDefaultImagery.MapboxSatellite;\n case \"mapboxstreets\":\n return ProjectViewTile.EDefaultImagery.MapBoxStreets;\n case \"mapboxstreetsclassic\":\n return ProjectViewTile.EDefaultImagery.MapBoxStreetsClassic;\n case \"esriworldimagery\":\n return ProjectViewTile.EDefaultImagery.EsriWorldImagery;\n case \"esriworldstreetmap\":\n return ProjectViewTile.EDefaultImagery.EsriWorldStreetMap;\n case \"esrinationalgeographic\":\n return ProjectViewTile.EDefaultImagery.EsriNationalGeographic;\n case \"openstreetmap\":\n return ProjectViewTile.EDefaultImagery.OpenStreetMap;\n case \"stamenwatercolor\":\n return ProjectViewTile.EDefaultImagery.StamenWaterColor;\n case \"stamentoner\":\n return ProjectViewTile.EDefaultImagery.StamenToner;\n case \"grid\":\n return ProjectViewTile.EDefaultImagery.Grid;\n }\n}\n\n/**\n * Returns if a given legacy imagery's name correspondings to a default source.\n * @param name \n * @returns \n */\nfunction isLegacyImageryDefault(name: string): boolean {\n name = legacyMapIdToDefaultId(name);\n return ProjectViewTile.DefaultImagery.find(x => x.id == name) != null;\n}\n\nexport namespace TileRenderEngine {\n /**\n * Legacy data did name comparisons instead of ids.\n * We need to strip spacing, remove special characters, and make lowercase before comparison...\n * @param nameA \n * @param nameB \n */\n export function CompareLegacyNames(nameA: string, nameB: string): boolean {\n nameA = prepLegacyName(nameA);\n nameB = prepLegacyName(nameB);\n return nameA === nameB;\n }\n\n export namespace Map {\n export namespace V1 {\n export interface ILayerExt extends Cesium.ImageryLayer {\n _bId?: string;\n _bName?: string;\n }\n \n export interface IViewParams {\n bookmarkId: string;\n viewId: string;\n apiGetter: BruceApi.IGetter;\n viewer: Cesium.Viewer;\n \n // TODO: How is render engine supposed to know about this?\n // We need a generic way for this information be feed from clients.\n ignoreIds?: string[];\n }\n \n export interface IParams {\n data: ProjectViewLegacyTile.IMapSource;\n apiGetter: BruceApi.IGetter;\n viewer: Cesium.Viewer;\n }\n \n export function Render(params: IParams): ILayerExt {\n const enabled: ILayerExt[] = gatherEnabledImageries(params.viewer);\n const tile = params.data;\n const bId = createLegacyImageryId(tile);\n \n let layer: ILayerExt = <ILayerExt>enabled.find(x => x._bId == bId);\n if (layer) {\n // Already exists.\n }\n else if (isLegacyImageryDefault(tile.Name)) {\n const defaultId = legacyMapIdToDefaultId(tile.Name);\n const provider: Cesium.ImageryProvider = renderDefaultMapTile(defaultId);\n if (provider) {\n layer = <ILayerExt>new Cesium.ImageryLayer(provider);\n }\n }\n else if (tile.SourceUrl) {\n let provider: Cesium.ImageryProvider = <any>null;\n let min = tile.Minimum;\n let max = tile.Maximum;\n if (min != undefined && min <= -1) {\n min = undefined;\n }\n if (max != undefined && max <= -1) {\n max = undefined;\n }\n \n switch (tile.Type) {\n case \"BruceImagery\":\n provider = new Cesium.UrlTemplateImageryProvider({\n url: tile.SourceUrl,\n tileHeight: 256,\n tileWidth: 256\n });\n break;\n case \"ArcGisImagery\":\n provider = new Cesium.OpenStreetMapImageryProvider({\n url: tile.SourceUrl,\n fileExtension: tile.FileExtension,\n minimumLevel: min,\n maximumLevel: max\n });\n break;\n case \"TileMapImagery\":\n provider = new Cesium.TileMapServiceImageryProvider({\n url: tile.SourceUrl,\n fileExtension: tile.FileExtension,\n minimumLevel: min,\n maximumLevel: max\n });\n break;\n case \"OpenStreetMapImagery\":\n provider = new Cesium.OpenStreetMapImageryProvider({\n url: tile.SourceUrl,\n fileExtension: tile.FileExtension,\n minimumLevel: min,\n maximumLevel: max\n });\n break;\n case \"MapBoxImagery\":\n // TODO: Read default account key when missing.\n provider = new Cesium.UrlTemplateImageryProvider({\n url: \"https://api.mapbox.com/styles/v1/\"\n + tile.MapBoxUsername + \"/\" + tile.MapBoxID +\n \"/tiles/256/{z}/{x}/{y}?access_token=\"\n + tile.ProgramKey\n });\n break;\n }\n if (provider) {\n layer = <ILayerExt>new Cesium.ImageryLayer(provider);\n }\n }\n \n if (layer) {\n layer._bId = bId;\n layer._bName = tile.Name;\n if (!params.viewer.imageryLayers.contains(layer)) {\n params.viewer.imageryLayers.add(layer);\n }\n }\n return layer;\n }\n \n export async function RenderView(params: IViewParams): Promise<void> {\n const api = params.apiGetter.getApi();\n \n const view = await ProjectView.Get(api, params.viewId) as ProjectView.V1.IView;\n let bookmark: ProjectViewBookmark.V1.IBookmark = <any>null;\n if (params.bookmarkId) {\n bookmark = await ProjectViewBookmark.Get(api, params.viewId, params.bookmarkId) as ProjectViewBookmark.V1.IBookmark;\n }\n \n const vSettings = view.Settings;\n const bSettings = bookmark?.Settings;\n \n const data: ProjectViewLegacyTile.IMapSource[] = [];\n const dataNames: string[] = [];\n if (bSettings?.imagery) {\n for (let i = 0; i < bSettings.imagery.length; i++) {\n const source = bSettings.imagery[i];\n dataNames.push(source.title);\n }\n }\n else if (vSettings?.DefaultMapTiles) {\n dataNames.push(vSettings.DefaultMapTiles);\n }\n const tiles = vSettings?.CesiumMapSources ?? [];\n await ProjectViewLegacyTile.MergeMapTemplateData(params.apiGetter, tiles, vSettings?.CesiumMapSources == null);\n \n for (let i = 0; i < dataNames.length; i++) {\n const name = dataNames[i];\n for (let j = 0; j < tiles.length; j++) {\n const tile = tiles[j];\n if (CompareLegacyNames(tile.Name, name)) {\n data.push(tile);\n break;\n }\n } \n }\n \n let enabled: ILayerExt[] = gatherEnabledImageries(params.viewer);\n const layers: Cesium.ImageryLayer[] = [];\n \n // Gather layers we want to render.\n // Any new layer is added to viewer at the bottom.\n if (params.ignoreIds) {\n for (let i = 0; i < params.ignoreIds.length; i++) {\n const id = params.ignoreIds[i];\n const layer = enabled.find((x) => {\n const layer = x as ILayerExt;\n if (layer._bId === id) {\n return true;\n }\n });\n if (layer) {\n layers.push(layer);\n }\n }\n }\n\n for (let i = 0; i < data.length; i++) {\n const tile = data[i];\n const layer = Render({\n apiGetter: params.apiGetter,\n viewer: params.viewer,\n data: tile,\n });\n if (layer) {\n layers.push(layer);\n }\n }\n \n // Sort currently enabled (after new ones added) to match desired order.\n enabled = gatherEnabledImageries(params.viewer);\n enabled.sort((a, b) => {\n const indexA = layers.indexOf(a);\n const indexB = layers.indexOf(b);\n if (indexA < 0 && indexB < 0) {\n return 0;\n }\n if (indexA < 0) {\n return 1;\n }\n if (indexB < 0) {\n return -1;\n }\n return indexA - indexB;\n });\n \n // Move enabled layers to match desired order.\n // Remove any layers that aren't in enabled list.\n for (let i = 0; i < enabled.length; i++) {\n const layer = enabled[i];\n if (layers.includes(layer)) {\n params.viewer.imageryLayers.raiseToTop(layer);\n }\n else {\n params.viewer.imageryLayers.remove(layer);\n }\n }\n }\n }\n\n export namespace V2 {\n export interface IProviderExt extends Cesium.ImageryLayer {\n _bMeta?: ProjectViewTile.ITileMeta;\n }\n\n export interface IParams {\n apiGetter: BruceApi.IGetter;\n viewer: Cesium.Viewer;\n sources: ProjectViewTile.IViewImagery[];\n enabled: ProjectViewTile.IBookmarkImagery[];\n }\n\n export async function GetOrCreateLayer(viewer: Cesium.Viewer, apiGetter: BruceApi.IGetter, meta: ProjectViewTile.ITileMeta): Promise<Cesium.ImageryLayer> {\n // Don't create a new layer if one already exists.\n const enabled = gatherEnabledImageries(viewer);\n for (let i = 0; i < enabled.length; i++) {\n const layer = enabled[i];\n const layerMeta = (layer as IProviderExt)._bMeta;\n if (layerMeta && layerMeta.tilesetId === meta.tilesetId && layerMeta.accountId === meta.accountId) {\n return layer;\n }\n }\n\n const defaultImg = meta.accountId ? null : ProjectViewTile.DefaultImagery.find(\n x => x.id === meta.tilesetId\n );\n\n let provider: Cesium.ImageryProvider = <any>null;\n if (defaultImg) {\n provider = renderDefaultMapTile(defaultImg.id);\n }\n else {\n const api = apiGetter.getApi(meta.accountId);\n const tileset = await Tileset.Get(api, meta.tilesetId);\n if (tileset.type === Tileset.EType.GeoMap) {\n provider = new Cesium.TileMapServiceImageryProvider({\n url: Tileset.GetPublicFileUrl(api, meta.tilesetId, \"\"),\n fileExtension: \".png\"\n });\n }\n else if (tileset.type === Tileset.EType.ExternalGeoMap) {\n const settings = tileset.settings as TilesetExtMapTiles.ISettings;\n switch (settings.mapType) {\n case TilesetExtMapTiles.EType.CesiumIon:\n provider = new Cesium.IonImageryProvider({\n assetId: settings.ionId,\n // TODO\n accessToken: null\n });\n break;\n case TilesetExtMapTiles.EType.MapBoxImagery:\n // TODO: Read default account key when missing.\n provider = new Cesium.UrlTemplateImageryProvider({\n url: \"https://api.mapbox.com/styles/v1/\"\n + settings.mapBoxAccount + \"/\" + settings.mapBoxStyleId +\n \"/tiles/256/{z}/{x}/{y}?access_token=\"\n + settings.mapBoxKey\n });\n break;\n case TilesetExtMapTiles.EType.OpenStreetMapImagery:\n provider = new Cesium.OpenStreetMapImageryProvider({\n url: settings.url,\n fileExtension: settings.sourceExt\n });\n break;\n case TilesetExtMapTiles.EType.TileMapImagery:\n provider = new Cesium.TileMapServiceImageryProvider({\n url: settings.url,\n fileExtension: settings.sourceExt\n });\n break;\n }\n }\n else if (tileset.type === Tileset.EType.EntitiesMap) {\n provider = new Cesium.UrlTemplateImageryProvider({\n url: Tileset.GetPublicFileUrl(api, meta.tilesetId, \"{z}/{x}/{y}.png\"),\n tileHeight: 256,\n tileWidth: 256\n });\n }\n }\n if (provider) {\n // We need some way to add meta without appending to layers.\n // Adding to layers triggers an event, if meta is missing then we'll not know what imagery is enabled.\n // In the meantime we use \"lowerToBottom\" to trigger a secondary event with updated data...\n const layer: IProviderExt = viewer.imageryLayers.addImageryProvider(provider);\n layer._bMeta = meta;\n viewer.imageryLayers.lowerToBottom(layer);\n return layer;\n }\n return null;\n }\n\n export async function Render(params: IParams) {\n // Ensure layers exist for all enabled sources.\n for (let i = 0; i < params.enabled.length; i++) {\n const enabled = params.enabled[i];\n const source = params.sources.find(x => x.accountId === enabled.accountId && x.tilesetId === enabled.tilesetId);\n if (!source) {\n console.error(\"Missing source for enabled imagery.\", enabled);\n }\n\n await GetOrCreateLayer(params.viewer, params.apiGetter, {\n accountId: source.accountId,\n tilesetId: source.tilesetId,\n })\n }\n\n const curEnabled = params.viewer.imageryLayers;\n const toDisable: IProviderExt[] = [];\n const curEnabledArr: IProviderExt[] = [];\n\n for (let i = 0; i < curEnabled.length; i++) {\n const layer = curEnabled.get(i) as IProviderExt;\n const meta = layer?._bMeta;\n const disable = !params.enabled.find(x => x.accountId === meta?.accountId && x.tilesetId === meta?.tilesetId);\n if (disable) {\n toDisable.push(layer);\n }\n else {\n curEnabledArr.push(layer);\n }\n }\n for (let i = 0; i < toDisable.length; i++) {\n params.viewer.imageryLayers.remove(toDisable[i]);\n }\n\n for (let i = 0; i < params.enabled.length; i++) {\n const enabled = params.enabled[i];\n const layer = curEnabledArr.find(x => x._bMeta?.accountId === enabled.accountId && x._bMeta?.tilesetId === enabled.tilesetId);\n if (layer) {\n params.viewer.imageryLayers.raiseToTop(layer);\n layer.alpha = Number(enabled.alpha == null ? 1 : enabled.alpha);\n layer.brightness = Number(enabled.brightness == null ? 1 : enabled.brightness);\n layer.contrast = Number(enabled.contrast == null ? 1 : enabled.contrast);\n layer.hue = Number(enabled.hue == null ? 0 : enabled.hue);\n layer.saturation = Number(enabled.saturation == null ? 1 : enabled.saturation);\n layer.gamma = Number(enabled.gamma == null ? 1 : enabled.gamma);\n }\n }\n }\n }\n }\n\n export namespace Terrain {\n export namespace V1 {\n export interface IProviderExt extends Cesium.CesiumTerrainProvider {\n _bId: string;\n _bName: string;\n }\n\n export interface IParams {\n data: ProjectViewLegacyTile.ITerrainSource;\n viewer: Cesium.Viewer;\n }\n \n export interface IViewParams {\n bookmarkId: string;\n viewId: string;\n apiGetter: BruceApi.IGetter;\n viewer: Cesium.Viewer;\n }\n\n export function Render(params: IParams): void {\n const bId = createLegacyTerrId(params.data);\n const curProvider = params.viewer.terrainProvider as IProviderExt;\n if (curProvider._bId && curProvider._bId === bId) {\n return;\n }\n \n let provider: IProviderExt = <any>null;\n if (isLegacyTerrainDefault(params.data.Name)) {\n const id = legacyTerrIdToDefaultId(params.data.Name);\n provider = renderDefaultTerrTile(id) as IProviderExt;\n }\n else if (params.data.SourceUrl) {\n provider = <any>new Cesium.CesiumTerrainProvider({\n url: <string>params.data.SourceUrl,\n requestWaterMask: params.data.RequestWaterMask,\n requestVertexNormals: true\n });\n }\n if (provider) {\n provider._bId = bId;\n provider._bName = params.data?.Name;\n params.viewer.terrainProvider = provider;\n }\n }\n \n export async function RenderView(params: IViewParams): Promise<void> {\n const api = params.apiGetter.getApi();\n const view = await ProjectView.Get(api, params.viewId) as ProjectView.V1.IView;\n let bookmark: ProjectViewBookmark.V1.IBookmark = <any>null;\n if (params.bookmarkId) {\n bookmark = await ProjectViewBookmark.Get(api, params.viewId, params.bookmarkId) as ProjectViewBookmark.V1.IBookmark;\n }\n \n const vSettings = view.Settings;\n const bSettings = bookmark?.Settings;\n\n let terrainTiles = vSettings?.CesiumTerrainSources ?? [];\n let terrainTile: ProjectViewLegacyTile.ITerrainSource = <any>null;\n let terrainTileName: string = <any>null;\n if (bookmark?.Settings?.terrain) {\n terrainTileName = bSettings.terrain;\n }\n else {\n terrainTileName = <string>vSettings?.DefaultTerrain;\n }\n await ProjectViewLegacyTile.MergeTerrainTemplateData(params.apiGetter, terrainTiles, vSettings?.CesiumTerrainSources == null);\n for (let i = 0; i < terrainTiles.length; i++) {\n const tile = terrainTiles[i];\n if (TileRenderEngine.CompareLegacyNames(tile.Name, terrainTileName)) {\n terrainTile = tile;\n break;\n }\n }\n if (terrainTile) {\n Render({\n data: terrainTile,\n viewer: params.viewer,\n });\n }\n }\n }\n\n export namespace V2 {\n export interface IProviderExt extends Cesium.CesiumTerrainProvider {\n _bMeta?: ProjectViewTile.ITileMeta;\n }\n\n export interface IParams {\n apiGetter: BruceApi.IGetter;\n viewer: Cesium.Viewer;\n source: ProjectViewTile.IViewTerrain;\n enabled: ProjectViewTile.IBookmarkTerrain;\n }\n\n export async function Render(params: IParams): Promise<void> {\n // Already enabled.\n const enabledMeta = (params.viewer.terrainProvider as IProviderExt)?._bMeta;\n if (\n enabledMeta?.tilesetId === params.source.tilesetId &&\n enabledMeta?.accountId === params.source.accountId\n ) {\n return;\n }\n\n const defaultTerr = params.source.accountId ? null : ProjectViewTile.DefaultTerrains.find(\n x => x.id === params.source.tilesetId\n );\n\n let provider: IProviderExt = null;\n if (defaultTerr) {\n provider = renderDefaultTerrTile(defaultTerr.id) as IProviderExt;\n }\n else {\n const api = params.apiGetter.getApi(params.source.accountId);\n const tileset = await Tileset.Get(api, params.source.tilesetId);\n\n let url: string;\n let vertexes: boolean = true;\n if (tileset.type === Tileset.EType.Terrain) {\n url = Tileset.GetPublicFileUrl(api, tileset.id, \"\");\n }\n else if (tileset.type === Tileset.EType.ExternalTerrain) {\n const settings = tileset.settings as TilesetExtTerrainTiles.ISettings;\n url = settings.url;\n vertexes = settings.requestVertexNormals == null ? true : settings.requestVertexNormals;\n }\n else {\n console.error(\"Invalid tileset type.\", tileset);\n }\n \n if (url) {\n provider = new Cesium.CesiumTerrainProvider({\n url: url,\n requestVertexNormals: vertexes\n });\n }\n }\n\n if (provider) {\n provider._bMeta = {\n accountId: params.source.accountId,\n tilesetId: params.source.tilesetId\n };\n params.viewer.terrainProvider = provider;\n }\n }\n }\n }\n}","import { BruceApi, Camera, Carto, ProjectView, ProjectViewBookmark, ProjectViewTile, } from \"bruce-models\";\nimport { MenuItemManager } from \"./menu-item-manager\";\nimport { RenderHelper } from \"./render-helper\";\nimport * as Cesium from \"cesium\";\nimport { TileRenderEngine } from \"./tile-render-engine\";\n\nasync function renderV1(\n params: ViewRenderEngine.IRenderParams,\n bookmark: ProjectViewBookmark.V1.IBookmark,\n view: ProjectView.V1.IView\n) {\n const vSettings = view.Settings as ProjectView.V1.ISettings;\n const bSettings = bookmark?.Settings as ProjectViewBookmark.V1.ISettings;\n\n await TileRenderEngine.Terrain.V1.RenderView({\n apiGetter: params.apiGetter,\n bookmarkId: <string>params.bookmarkId,\n viewer: params.manager.Viewer,\n viewId: params.viewId,\n });\n\n await TileRenderEngine.Map.V1.RenderView({\n apiGetter: params.apiGetter,\n bookmarkId: <string>params.bookmarkId,\n viewer: params.manager.Viewer,\n viewId: params.viewId,\n ignoreIds: []\n });\n\n // TODO: Other scene settings.\n // TODO: Hidden entities.\n // TODO: Rendered relationships.\n\n let frustum = bSettings?.cameraFrustum;\n if (frustum == null) {\n frustum = Camera.EFrustum.Perspective;\n }\n const scene = params.manager.Viewer.scene;\n const curFrustum = scene.camera.frustum instanceof Cesium.OrthographicFrustum ? Camera.EFrustum.Orthographic : Camera.EFrustum.Perspective;\n if (curFrustum != frustum) {\n if (frustum == Camera.EFrustum.Perspective) {\n scene.camera.switchToPerspectiveFrustum();\n scene.screenSpaceCameraController.enableTilt = true;\n }\n else {\n scene.camera.switchToOrthographicFrustum();\n scene.screenSpaceCameraController.enableTilt = false;\n }\n params.skipTransition = true;\n }\n\n const camera = bookmark.Camera;\n const pos = Cesium.Cartesian3.fromDegrees(\n +camera.position.longitude, \n +camera.position.latitude, \n +camera.position.height\n );\n params.manager.Viewer.scene.camera.flyTo({\n destination: pos,\n orientation: {\n heading: +camera.heading,\n pitch: +camera.pitch,\n roll: +camera.roll\n },\n duration: params.skipTransition ? 0 : 2\n });\n\n let go = bookmark?.Settings?.groundOcclusion;\n if (go == null) {\n go = vSettings?.GroundOcclusion;\n }\n if (go == null) {\n go = false;\n }\n params.manager.Viewer.scene.globe.depthTestAgainstTerrain = go;\n\n const enabledItems = params.manager.GetEnabledItemIds();\n const newItemIds = bSettings?.selectedItemIds ?? [];\n for (const id of enabledItems) {\n if (newItemIds.indexOf(id) === -1) {\n params.manager.RemoveItemById(id);\n }\n }\n if (params.bookmarkId) {\n await RenderHelper.RenderBookmarkItems({\n apiGetter: params.apiGetter,\n manager: params.manager,\n }, params.viewId, params.bookmarkId);\n }\n}\n\nasync function renderV2(\n params: ViewRenderEngine.IRenderParams,\n bookmark: ProjectViewBookmark.V2.IBookmark,\n view: ProjectView.V2.IView\n) {\n const viewer = params.manager.Viewer;\n const scene = viewer.scene;\n\n const vSettings = view.Settings as ProjectView.V2.ISettings;\n const bSettings = (bookmark?.Settings ?? {}) as ProjectViewBookmark.V2.ISettings;\n const defaults = vSettings.defaults ?? {};\n\n let camera = (bookmark.Camera ?? {}) as ProjectViewBookmark.V2.ICamera;\n if (!Carto.ValidateCarto(camera)) {\n camera = {\n ...camera,\n altitude: defaults.camera?.altitude,\n latitude: defaults.camera?.latitude,\n longitude: defaults.camera?.longitude,\n heading: defaults.camera?.heading,\n pitch: defaults.camera?.pitch,\n roll: defaults.camera?.roll\n }\n }\n\n let newLens = camera.cameraFrustum;\n if (newLens == null) {\n newLens = defaults.camera?.cameraFrustum;\n }\n if (newLens == null) {\n // TODO: Need global default.\n newLens = Camera.EFrustum.Perspective;\n }\n const curLens = scene.camera.frustum instanceof Cesium.OrthographicFrustum ? \n Camera.EFrustum.Orthographic : \n Camera.EFrustum.Perspective;\n\n if (newLens != curLens) {\n if (newLens == Camera.EFrustum.Perspective) {\n scene.camera.switchToPerspectiveFrustum();\n scene.screenSpaceCameraController.enableTilt = true;\n }\n else {\n scene.camera.switchToOrthographicFrustum();\n scene.screenSpaceCameraController.enableTilt = false;\n }\n }\n\n let transition = params.skipTransition ? 0 : curLens === newLens ? camera.transition : 0;\n if (transition == null) {\n transition = defaults.camera?.transition;\n }\n if (transition == null) {\n // TODO: Need global default.\n transition = 2000;\n }\n\n if (Carto.ValidateCarto(camera)) {\n const pos = Cesium.Cartesian3.fromDegrees(\n +camera.longitude, \n +camera.latitude, \n +camera.altitude\n );\n scene.camera.flyTo({\n destination: pos,\n orientation: {\n heading: Cesium.Math.toRadians(+camera.heading),\n pitch: Cesium.Math.toRadians(+camera.pitch),\n roll: Cesium.Math.toRadians(+camera.roll)\n },\n duration: transition != 0 ? transition / 1000 : 0\n });\n }\n\n let gOcclusion = bSettings?.groundOcclusion;\n if (gOcclusion == null) {\n gOcclusion = defaults?.settings?.groundOcclusion;\n }\n if (gOcclusion == null) {\n // TODO: Need global default.\n gOcclusion = true;\n }\n scene.globe.depthTestAgainstTerrain = Boolean(gOcclusion);\n\n const terrain = bSettings?.terrain ?? defaults.settings?.terrain;\n if (terrain) {\n const source = vSettings.terrains?.find(x => x.accountId === terrain.accountId && x.tilesetId === terrain.tilesetId);\n if (source) {\n await TileRenderEngine.Terrain.V2.Render({\n apiGetter: params.apiGetter,\n enabled: terrain,\n source: source,\n viewer: params.manager.Viewer,\n });\n }\n }\n\n\n let imagery = bSettings.imagery ?? defaults.settings?.imagery;\n if (imagery == null) {\n // TODO: Need global default.\n imagery = [\n {\n accountId: null,\n tilesetId: ProjectViewTile.EDefaultImagery.MapboxSatellite,\n alpha: 1,\n brightness: 1,\n contrast: 1,\n gamma: 1,\n hue: 0,\n saturation: 1\n }\n ];\n }\n await TileRenderEngine.Map.V2.Render({\n apiGetter: params.apiGetter,\n enabled: imagery,\n sources: vSettings.imageries,\n viewer: params.manager.Viewer,\n });\n\n\n // Only disable menu items we don't want.\n // Otherwise we cause a flicker of rendered graphics.\n // Maybe TODO to such a function for menu item manager.\n const curEnabled = params.manager.GetEnabledItemIds();\n const newItemIds = bSettings?.menuItemIds ?? [];\n for (const id of curEnabled) {\n if (newItemIds.indexOf(id) === -1) {\n await params.manager.RemoveItemById(id);\n }\n }\n if (params.bookmarkId) {\n await RenderHelper.RenderBookmarkItems({\n apiGetter: params.apiGetter,\n manager: params.manager,\n }, params.viewId, params.bookmarkId);\n }\n}\n\nexport namespace ViewRenderEngine {\n export interface IRenderParams {\n viewId: string;\n bookmarkId?: string;\n skipTransition: boolean;\n apiGetter: BruceApi.IGetter;\n manager: MenuItemManager.Manager;\n }\n\n export async function Render(params: IRenderParams): Promise<void> {\n const api = params.apiGetter.getApi();\n const view = await ProjectView.Get(api, params.viewId);\n let bookmark = <any>null;\n if (params.bookmarkId) {\n bookmark = await ProjectViewBookmark.Get(api, params.viewId, params.bookmarkId);\n }\n if (bookmark && view.DataVersion != bookmark.DataVersion) {\n throw new Error(\"View and bookmark settings version mismatch.\");\n }\n const version = view.DataVersion;\n if (version === 2) {\n await renderV2(params, bookmark as ProjectViewBookmark.V2.IBookmark, view as ProjectView.V2.IView);\n }\n else {\n await renderV1(params, bookmark as ProjectViewBookmark.V1.IBookmark, view as ProjectView.V1.IView);\n }\n }\n}","import { DelayQueue, EntityType, MathUtils, ObjectUtils } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { DrawingUtils } from \"../../utils/drawing-utils\";\nimport { VisualsRegister } from \"../visuals-register\";\nimport { IRenderAddon } from \"./render-addon\";\n\nfunction createContainer(viewer: Cesium.Viewer): HTMLElement {\n if (!viewer.canvas.parentElement) {\n return <any>null;\n }\n const container = document.createElement(\"div\");\n container.setAttribute(\"style\",\n `\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 1;\n `);\n (viewer.canvas.parentElement as HTMLElement).appendChild(container);\n return container;\n}\n\nfunction destroyContainer(container: HTMLElement): void {\n if (container?.parentElement && container.parentElement.contains(container)) {\n container.parentElement.removeChild(container);\n }\n}\n\ninterface IItem {\n element: HTMLElement;\n text: string;\n}\n\nnamespace MPolyline {\n export function Render(container: HTMLElement, viewer: Cesium.Viewer, entity: Cesium.Entity): IItem[] {\n const items: IItem[] = [];\n\n if (entity.polyline?.positions) {\n let pointsUnk = entity.polyline.positions;\n if (pointsUnk.getValue) {\n pointsUnk = pointsUnk.getValue(viewer.scene.lastRenderTime);\n }\n const points = <any>pointsUnk as Cesium.Cartesian3[];\n if (points && points.length) {\n let totalLength = 0;\n for (let i = 0; i < points.length; i++) {\n const p1 = points[i];\n const p2 = points[i + 1];\n if (p1 && p2) {\n totalLength += Cesium.Cartesian3.distance(p1, p2);\n }\n }\n if (totalLength <= 0) {\n return items;\n }\n\n const center = DrawingUtils.PointAcrossPolyline(viewer, points, totalLength / 2);\n const screenPos = viewer.scene.cartesianToCanvasCoordinates(center);\n\n if (screenPos) {\n const element = document.createElement(\"div\");\n element.setAttribute(\"style\",\n `\n position: absolute;\n top: ${screenPos.y}px;\n left: ${screenPos.x}px;\n color: white;\n font-size: 14px;\n z-index: 1;\n padding: 4px 6px;\n border-radius: 3px;\n background-color: black;\n color: white;\n `);\n const text = MathUtils.Round(totalLength, 3) + \"m\";\n element.innerText = text;\n const bounds = element.getBoundingClientRect();\n element.style.marginLeft = (-bounds.width / 2) + \"px\";\n element.style.marginTop = (-bounds.height - 10) + \"px\";\n container.appendChild(element);\n items.push({ element, text: text });\n }\n }\n }\n return items;\n }\n}\n\nnamespace MPoint {\n export function Render(container: HTMLElement, viewer: Cesium.Viewer, entity: Cesium.Entity): IItem[] {\n const items: IItem[] = [];\n\n if (entity?.position) {\n let posUnk: any = <any>entity.position;\n if (posUnk.getValue) {\n posUnk = posUnk.getValue(viewer.scene.lastRenderTime);\n }\n const pos = posUnk as Cesium.Cartesian3;\n if (!pos?.x) {\n return items;\n }\n\n const screenPos = viewer.scene.cartesianToCanvasCoordinates(pos);\n if (screenPos) {\n const element = document.createElement(\"div\");\n element.setAttribute(\"style\",\n `\n position: absolute;\n top: ${screenPos.y}px;\n left: ${screenPos.x}px;\n color: white;\n font-size: 14px;\n z-index: 1;\n padding: 4px 6px;\n border-radius: 3px;\n background-color: black;\n color: white;\n `);\n const point = Cesium.Cartographic.fromCartesian(pos);\n const lat = MathUtils.Round(Cesium.Math.toDegrees(point.latitude), 4);\n const lon = MathUtils.Round(Cesium.Math.toDegrees(point.longitude), 4);\n const alt = MathUtils.Round(Cesium.Math.toDegrees(point.height), 3);\n const text = `${lat}, ${lon}, ${alt}`;\n element.innerText = text;\n const bounds = element.getBoundingClientRect();\n // TODO: Account for billboard image size.\n element.style.marginLeft = (-bounds.width / 2) + \"px\";\n element.style.marginTop = (-bounds.height - 30) + \"px\";\n container.appendChild(element);\n items.push({ element, text: text });\n }\n }\n return items;\n }\n}\n\nfunction findVisual(visuals: VisualsRegister.Visual[]): VisualsRegister.Visual {\n visuals.sort((a, b) => {\n if (a.show && !b.show) {\n return -1;\n }\n if (!a.show && b.show) {\n return 1;\n }\n return 0;\n });\n for (let i = 0; i < visuals.length; i++) {\n const visual = visuals[i];\n if (visual instanceof Cesium.Entity) {\n return visual;\n }\n }\n return <any>null;\n}\n\n/**\n * Measure addon will render measurement details on the position of the 3d object.\n * For example it will add lengths to the line segments of a polyline.\n */\nexport class MeasureAddon implements IRenderAddon {\n public Id: string = ObjectUtils.UId();\n private visual: VisualsRegister.Visual = <any>null;\n private viewer: Cesium.Viewer;\n private cRenderListener: Cesium.Event.RemoveCallback;\n private updateQueue: DelayQueue;\n private items: IItem[] = [];\n private container: HTMLElement = <any>null;\n\n\n constructor(viewer: Cesium.Viewer) {\n this.viewer = viewer;\n this.cRenderListener = this.viewer.scene.postRender.addEventListener(() => {\n this.updateQueue.Call();\n });\n this.updateQueue = new DelayQueue(() => {\n this.doUpdate();\n }, 1000 / 60);\n }\n\n private doUpdate(): void {\n if (!this.container) {\n this.container = createContainer(this.viewer);\n }\n this.Remove();\n if (!this.container) {\n return;\n }\n const visual = this.visual;\n if (visual instanceof Cesium.Entity) {\n const entity = visual as Cesium.Entity;\n if (entity.polyline) {\n this.items = MPolyline.Render(this.container, this.viewer, entity);\n }\n else if (entity.point || entity.billboard) {\n this.items = MPoint.Render(this.container, this.viewer, entity);\n }\n // TODO: \n // - Polygon measurement.\n // - Polygon that is an angle measurement?\n // We'll need params for the addon that dictate what measurements we want to see.\n // Eg: I care about \"length\", \"area\" but not \"angle\" measurements in polygons.\n }\n else {\n // We don't support prims or tiles.\n }\n }\n\n public Render(visuals: VisualsRegister.Visual[]): void {\n const newVisual = findVisual(visuals);\n if (newVisual != this.visual) {\n this.Remove();\n }\n this.visual = newVisual;\n this.updateQueue.Call(true);\n }\n\n public Remove(): void {\n for (let i = 0; i < this.items.length; i++) {\n const item = this.items[i];\n if (item.element?.parentElement && item.element.parentElement.contains(item.element)) {\n item.element.parentElement.removeChild(item.element);\n }\n }\n this.items = [];\n }\n\n public Dispose(): void {\n this.cRenderListener();\n destroyContainer(this.container);\n }\n}","import { ProjectViewBookmark, ProjectViewTile } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { TileRenderEngine } from \"../rendering/tile-render-engine\";\n\nexport namespace ViewUtils {\n export function GatherLegacyMapTiles(viewer: Cesium.Viewer): ProjectViewBookmark.V1.IBookmarkImagery[] {\n const collection = viewer.imageryLayers;\n const tiles: ProjectViewBookmark.V1.IBookmarkImagery[] = [];\n for (let i = 0; i < collection.length; i++) {\n const layer = collection.get(i) as TileRenderEngine.Map.V1.ILayerExt;\n if (layer._bName) {\n tiles.push({\n alpha: layer.alpha,\n brightness: layer.brightness,\n contrast: layer.contrast,\n hue: layer.hue,\n saturation: layer.saturation,\n gamma: layer.gamma,\n title: layer._bName,\n });\n }\n }\n return tiles.reverse();\n }\n\n export function GatherLegacyTerrainTile(viewer: Cesium.Viewer): string {\n const enabled = viewer.terrainProvider as TileRenderEngine.Terrain.V1.IProviderExt;\n if (enabled?._bName) {\n return enabled._bName;\n }\n return \"flatterrain\";\n }\n\n export function GatherMapTiles(viewer: Cesium.Viewer): ProjectViewTile.IBookmarkImagery[] {\n const imagery = viewer.imageryLayers;\n const tiles: ProjectViewTile.IBookmarkImagery[] = [];\n for (let i = 0; i < imagery.length; i++) {\n const provider = imagery.get(i) as TileRenderEngine.Map.V2.IProviderExt;\n if (provider._bMeta) {\n const idCombo = provider._bMeta.accountId + provider._bMeta.tilesetId;\n if (!tiles.find(x => x.accountId + x.tilesetId === idCombo)) {\n tiles.push({\n accountId: provider._bMeta.accountId,\n tilesetId: provider._bMeta.tilesetId,\n alpha: provider.alpha,\n brightness: provider.brightness,\n contrast: provider.contrast,\n hue: provider.hue,\n saturation: provider.saturation,\n gamma: provider.gamma\n });\n }\n }\n }\n return tiles;\n }\n\n export function GatherTerrainTile(viewer: Cesium.Viewer): ProjectViewTile.IBookmarkTerrain {\n const provider = viewer.terrainProvider as TileRenderEngine.Terrain.V2.IProviderExt;\n if (provider._bMeta) {\n return {\n accountId: provider._bMeta.accountId,\n tilesetId: provider._bMeta.tilesetId,\n };\n }\n return null;\n }\n}"],"names":["Cesium.Cartesian2","Cesium.Cartographic","BruceEvent","Cesium.Math","Cesium.Viewer","Cesium.ArcGisMapServerImageryProvider","Cesium.ScreenSpaceEventType","ViewerUtils","Cesium.Cartesian3","Cesium.EllipsoidGeodesic","Carto","Geometry","Cartes","Cesium.Entity","RenderManager","Cesium.Color","Calculator","Cesium.HeightReference","Style","EntityType","ZoomControl","ClientFile","Cesium.HorizontalOrigin","Cesium.VerticalOrigin","EntityTag","Cesium.ClassificationType","Cesium.ArcType","Cesium.PolygonHierarchy","Cesium.ShadowMode","Cesium.PolylineGraphics","Cesium.HeadingPitchRoll","Cesium.Transforms","Cesium.ColorBlendMode","EntityLod","EntityRenderEngine","DelayQueue","Entity","EntitiesRenderManager","BatchedDataGetter","EntitiesLoadedRenderManager","Cesium.Primitive","Cesium.Cesium3DTileFeature","ObjectUtils","VisualsRegister","EntitiesIdsRenderManager","EntityRenderManager","colorToCColor","Tileset","Cesium.Matrix4","Cesium.Cesium3DTileset","EntityCoords","Cesium.HeadingPitchRange","TilesetCadRenderManager","EntityFilterGetter","SharedGetters","Cesium.createOsmBuildings","Cesium.Cesium3DTileStyle","Cesium.Rectangle","EntitySource","MenuItem","MenuItemManager","ProjectView","ProjectViewBookmark","RenderHelper","ProjectViewTile","Cesium.createWorldTerrain","Cesium.EllipsoidTerrainProvider","Cesium.CesiumTerrainProvider","Cesium.BingMapsImageryProvider","Cesium.BingMapsStyle","Cesium.MapboxImageryProvider","Cesium.OpenStreetMapImageryProvider","Cesium.GridImageryProvider","Cesium.GeographicTilingScheme","Cesium.ImageryLayer","Cesium.UrlTemplateImageryProvider","Cesium.TileMapServiceImageryProvider","ProjectViewLegacyTile","TilesetExtMapTiles","Cesium.IonImageryProvider","TileRenderEngine","Camera","Cesium.OrthographicFrustum","ViewRenderEngine","MathUtils","ViewUtils"],"mappings":"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"}
1
+ {"version":3,"file":"bruce-cesium.umd.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/render-managers/common/shared-getters.ts","../src/rendering/render-managers/tilesets/tileset-osm-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","../src/utils/view-utils.ts"],"sourcesContent":["import { Bounds, BruceEvent, Carto, ViewMonitor } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\n\r\nconst TIME_LAG = 300;\r\nconst POSITION_CHECK_TIMER = 950;\r\nconst DEFAULT_GROUNDED_HEIGHT = 300;\r\nconst MINIMUM_VIEW_AREA_SIZE_DEGREES = 0.01;\r\nconst NET_STEP_PERCENT = 5;\r\nconst BORDER_STEPS = 3;\r\n\r\nenum ESearchStatus {\r\n LocationFound = 1,\r\n LocationChanged = 2,\r\n LocationMissing = 3\r\n}\r\n\r\nfunction netScanViewForBoundaries(viewer: Cesium.Viewer): Bounds.IReqBounds {\r\n let maxLong = - 2 * Math.PI;\r\n let minLong = 2 * Math.PI;\r\n let maxLat = -2 * Math.PI;\r\n let minLat = 2 * Math.PI;\r\n let found = 0;\r\n\r\n const updateMinMaxForPoint = (stepX: number, stepY: number) => {\r\n const x = Math.round(0 + (viewer.container.clientWidth / 100) * (stepX * NET_STEP_PERCENT));\r\n const y = Math.round(0 + (viewer.container.clientHeight / 100) * (stepY * NET_STEP_PERCENT));\r\n const winPos = new Cesium.Cartesian2(x, y);\r\n try {\r\n let intersection = getAdjustedGroundIntersectionOfCameraRay(viewer, winPos);\r\n if (intersection) {\r\n let point = (<any> Cesium.Cartographic).fromCartesian(intersection, viewer.scene.globe.ellipsoid);\r\n maxLong = Math.max(maxLong, point.longitude);\r\n maxLat = Math.max(maxLat, point.latitude);\r\n minLong = Math.min(minLong, point.longitude);\r\n minLat = Math.min(minLat, point.latitude);\r\n found++;\r\n }\r\n }\r\n catch {\r\n\r\n }\r\n };\r\n\r\n // Outer circle.\r\n updateMinMaxForPoint(BORDER_STEPS, BORDER_STEPS);\r\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS, BORDER_STEPS);\r\n updateMinMaxForPoint(BORDER_STEPS, (100 / NET_STEP_PERCENT) - BORDER_STEPS);\r\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS, (100 / NET_STEP_PERCENT) - BORDER_STEPS);\r\n\r\n // Inner circle.\r\n updateMinMaxForPoint(BORDER_STEPS * 2, BORDER_STEPS * 2);\r\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS * 2, BORDER_STEPS * 2);\r\n updateMinMaxForPoint(BORDER_STEPS * 2, (100 / NET_STEP_PERCENT) - BORDER_STEPS * 2);\r\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS * 2, (100 / NET_STEP_PERCENT) - BORDER_STEPS * 2);\r\n\r\n if (found > 0) {\r\n const viewRect: Bounds.IReqBounds = {\r\n east: maxLong,\r\n west: minLong,\r\n north: maxLat,\r\n south: minLat\r\n };\r\n return viewRect;\r\n }\r\n return <any>null;\r\n}\r\n\r\nfunction getAdjustedGroundIntersectionOfCameraRay(viewer: Cesium.Viewer, screenPos: Cesium.Cartesian2): Cesium.Cartesian3 {\r\n const ray = viewer.camera.getPickRay(screenPos);\r\n const intersection = ray ? viewer.scene.globe.pick(ray, viewer.scene) : null;\r\n if (intersection) {\r\n return intersection;\r\n }\r\n return <any>null;\r\n}\r\n\r\nfunction areBoundsEqual(a: Bounds.IReqBounds, b: Bounds.IReqBounds): boolean {\r\n return a.north == b.north && a.south == b.south && a.east == b.east && a.west == b.west;\r\n}\r\n\r\nfunction arePosEqual(a: Carto.ICarto, b: Carto.ICarto): boolean {\r\n return a.latitude == b.latitude && a.longitude == b.longitude;\r\n}\r\n\r\n/**\r\n * Monitors and emits events when the Cesium view changes.\r\n */\r\nexport class CesiumViewMonitor implements ViewMonitor.IMonitor {\r\n private viewer: Cesium.Viewer;\r\n private pendingTimeout: any;\r\n private checkInterval: any;\r\n private target: Carto.ICarto = <any>null;\r\n private bounds: Bounds.IReqBounds = <any>null;\r\n private disposed: boolean = false;\r\n private updatedEvent: BruceEvent<ViewMonitor.IArea> = <any>null;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n\r\n\r\n public constructor(viewer: Cesium.Viewer) {\r\n this.viewer = viewer;\r\n this.tryEmitUpdate();\r\n this.checkInterval = setInterval(() => {\r\n this.updateQueue();\r\n },\r\n POSITION_CHECK_TIMER);\r\n }\r\n\r\n public Updated(): BruceEvent<ViewMonitor.IArea> {\r\n if (!this.updatedEvent) {\r\n this.updatedEvent = new BruceEvent();\r\n }\r\n return this.updatedEvent;\r\n }\r\n\r\n public GetBounds(): Bounds.IReqBounds {\r\n return this.bounds;\r\n }\r\n\r\n public GetTarget(): Carto.ICarto {\r\n return this.target;\r\n }\r\n\r\n public DoUpdate(): void {\r\n this.tryEmitUpdate();\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.disposed = true;\r\n clearInterval(this.checkInterval);\r\n }\r\n\r\n private tryDoUpdate(): ESearchStatus {\r\n if (!this.viewer || this.viewer.isDestroyed()) {\r\n this.Dispose();\r\n return ESearchStatus.LocationMissing;\r\n }\r\n\r\n let viewRect: Bounds.IReqBounds = <any>null;\r\n let center: Carto.ICarto = <any>null;\r\n\r\n const camera = this.viewer.camera;\r\n const terrainHeight = this.viewer.scene.globe.getHeight(camera.positionCartographic);\r\n const cameraPosition = this.viewer.camera.positionCartographic;\r\n\r\n // We are almost at the ground, screw horizon, just load around.\r\n if (terrainHeight && ((cameraPosition.height - terrainHeight) < DEFAULT_GROUNDED_HEIGHT)) {\r\n\r\n // View area calculation.\r\n viewRect = <any>{};\r\n const viewRectRad: Bounds.IReqBounds = netScanViewForBoundaries(this.viewer);\r\n if\r\n (\r\n viewRectRad &&\r\n viewRectRad.east &&\r\n viewRectRad.west &&\r\n viewRectRad.north &&\r\n viewRectRad.south\r\n ) {\r\n viewRect.east = Cesium.Math.toDegrees(Math.max(viewRectRad.east, cameraPosition.longitude));\r\n viewRect.west = Cesium.Math.toDegrees(Math.min(viewRectRad.west, cameraPosition.longitude));\r\n viewRect.south = Cesium.Math.toDegrees(Math.min(viewRectRad.south, cameraPosition.latitude));\r\n viewRect.north = Cesium.Math.toDegrees(Math.max(viewRectRad.north, cameraPosition.latitude));\r\n }\r\n else {\r\n viewRect.east = cameraPosition.longitude;\r\n viewRect.west = cameraPosition.longitude;\r\n viewRect.south = cameraPosition.latitude;\r\n viewRect.north = cameraPosition.latitude;\r\n }\r\n center = <any>{};\r\n center.latitude = Cesium.Math.toDegrees(camera.positionCartographic.latitude);\r\n center.longitude = Cesium.Math.toDegrees(camera.positionCartographic.longitude);\r\n }\r\n else {\r\n // View area calculation.\r\n const windowPosition = new Cesium.Cartesian2(\r\n this.viewer.container.clientWidth / 2,\r\n this.viewer.container.clientHeight / 2\r\n );\r\n const intersection = getAdjustedGroundIntersectionOfCameraRay(this.viewer, windowPosition);\r\n\r\n let point = null;\r\n if (intersection) {\r\n point = (<any> Cesium.Cartographic).fromCartesian(intersection, this.viewer.scene.globe.ellipsoid);\r\n }\r\n if (point) {\r\n center = <any>{};\r\n center.latitude = Cesium.Math.toDegrees(point.latitude);\r\n center.longitude = Cesium.Math.toDegrees(point.longitude);\r\n\r\n let viewRectRad: Bounds.IReqBounds = netScanViewForBoundaries(this.viewer);\r\n if (viewRectRad) {\r\n viewRect = <any>{};\r\n viewRect.east = Cesium.Math.toDegrees(viewRectRad.east);\r\n viewRect.west = Cesium.Math.toDegrees(viewRectRad.west);\r\n viewRect.south = Cesium.Math.toDegrees(viewRectRad.south);\r\n viewRect.north = Cesium.Math.toDegrees(viewRectRad.north);\r\n }\r\n }\r\n }\r\n\r\n // Minimal field of view.\r\n if (viewRect) {\r\n const centerLong = (viewRect.east + viewRect.west) / 2;\r\n const centerLat = (viewRect.north + viewRect.south) / 2;\r\n viewRect.east = Math.max(viewRect.east, centerLong + (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\r\n viewRect.west = Math.min(viewRect.west, centerLong - (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\r\n viewRect.south = Math.min(viewRect.south, centerLat - (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\r\n viewRect.north = Math.max(viewRect.north, centerLat + (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\r\n viewRect.alt = this.viewer.scene.camera.positionCartographic?.height;\r\n }\r\n\r\n if (center && viewRect) {\r\n if (\r\n (!this.target || (this.target && !arePosEqual(this.target, center))) ||\r\n (!this.bounds || (this.bounds && !areBoundsEqual(this.bounds, viewRect)))\r\n ) {\r\n this.target = center;\r\n this.bounds = viewRect;\r\n return ESearchStatus.LocationChanged;\r\n }\r\n return ESearchStatus.LocationFound;\r\n }\r\n return ESearchStatus.LocationMissing;\r\n }\r\n\r\n private tryEmitUpdate() {\r\n const searchResult = this.tryDoUpdate();\r\n if (searchResult == ESearchStatus.LocationChanged) {\r\n const interest: ViewMonitor.IArea = {\r\n \tbounds: this.bounds,\r\n \ttarget: this.target\r\n };\r\n this.updatedEvent?.Trigger(interest);\r\n }\r\n else if (searchResult == ESearchStatus.LocationMissing) {\r\n this.updateQueue();\r\n }\r\n }\r\n\r\n private queuePosition(lag: number) {\r\n if (this.pendingTimeout) {\r\n clearTimeout(this.pendingTimeout);\r\n }\r\n this.pendingTimeout = setTimeout(() => {\r\n if (!this.disposed) {\r\n this.tryEmitUpdate();\r\n }\r\n }, lag);\r\n }\r\n\r\n private updateQueue() {\r\n this.queuePosition(TIME_LAG);\r\n }\r\n}","import * as Cesium from \"cesium\";\n\ninterface IWidget {\n isDestroyed: () => boolean;\n destroy: () => void;\n}\n\nexport namespace ViewerUtils {\n export interface IViewContainer extends HTMLElement {\n _cViewer?: Cesium.Viewer;\n }\n\n /**\n * Creates a Cesium viewer in a given HTML container and returns it.\n * This will kill all widgets in the process.\n * @param container \n * @returns \n */\n export function InitViewer(container: HTMLElement): Cesium.Viewer {\n if ((<IViewContainer>container)._cViewer) {\n throw new Error(\"Container already has a viewer.\");\n }\n const cViewer = new Cesium.Viewer(container, {\n imageryProvider: new Cesium.ArcGisMapServerImageryProvider({\n url: \"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer\",\n enablePickFeatures: false\n })\n });\n cViewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);\n cViewer.camera.percentageChanged = 0.05;\n ViewerUtils.DestroyWidget(cViewer.timeline);\n ViewerUtils.DestroyWidget(cViewer.vrButton);\n ViewerUtils.DestroyWidget(cViewer.sceneModePicker);\n ViewerUtils.DestroyWidget(cViewer.homeButton);\n ViewerUtils.DestroyWidget(cViewer.fullscreenButton);\n ViewerUtils.DestroyWidget(cViewer.baseLayerPicker);\n ViewerUtils.StyleContainer(cViewer);\n (<IViewContainer>container)._cViewer = cViewer;\n return cViewer;\n }\n\n export function GetViewerFromContainer(container: HTMLElement): Cesium.Viewer {\n return <any>(<IViewContainer>container)._cViewer;\n }\n\n export function DestroyWidget(widget: IWidget): void {\n if (widget && !widget.isDestroyed()) {\n widget.destroy();\n }\n }\n\n /**\n * Hides all unnecessary elements from the Cesium viewer container.\n * @param viewer \n */\n export function StyleContainer(viewer: Cesium.Viewer) {\n const container = viewer.container;\n const genContainer = container.getElementsByClassName(\"cesium-viewer\")?.[0];\n if (genContainer) {\n const children = genContainer.children;\n for (let i = 0; i < children.length; i++) {\n const child = children[i] as HTMLElement;\n if (!child.classList.contains(\"cesium-viewer-cesiumWidgetContainer\")) {\n child.style.display = \"none\";\n }\n }\n }\n\n const canvas = viewer.canvas as HTMLElement;\n canvas.style.width = \"100%\";\n canvas.style.height = \"100%\";\n\n const widget = canvas.parentElement as HTMLElement;\n widget.style.width = \"100%\";\n widget.style.height = \"100%\";\n widget.style.touchAction = \"none\";\n\n const widgetContainer = widget.parentElement as HTMLElement;\n widgetContainer.style.width = \"100%\";\n widgetContainer.style.height = \"100%\";\n\n const viewerContainer = widgetContainer.parentElement as HTMLElement;\n viewerContainer.style.fontFamily = \"sans-serif\";\n viewerContainer.style.fontSize = \"16px\";\n viewerContainer.style.overflow = \"hidden\";\n viewerContainer.style.display = \"block\";\n viewerContainer.style.position = \"relative\";\n viewerContainer.style.top = \"0\";\n viewerContainer.style.left = \"0\";\n viewerContainer.style.width = \"100%\";\n viewerContainer.style.height = \"100%\";\n }\n}","import * as Cesium from \"cesium\";\n\nexport namespace DrawingUtils {\n /**\n * Returns the point across a polyline at a given distance.\n * If the distance exceeds the length of the line, the point will be placed at the end of the line.\n * @param viewer \n * @param positions \n * @param distance \n * @returns \n */\n export function PointAcrossPolyline(viewer: Cesium.Viewer, positions: Cesium.Cartesian3[], distance: number): Cesium.Cartesian3 {\n if (positions.length > 1) {\n let currentDistance = 0;\n for (let i = 0; i < positions.length - 1; i++) {\n const length = Cesium.Cartesian3.distance(positions[i], positions[i + 1]);\n if (length + currentDistance >= distance) {\n const carto1 = Cesium.Cartographic.fromCartesian(positions[i]);\n const carto2 = Cesium.Cartographic.fromCartesian(positions[i + 1]);\n const geodesic = new Cesium.EllipsoidGeodesic(carto1, carto2, viewer.scene.globe.ellipsoid);\n const position = geodesic.interpolateUsingSurfaceDistance(distance - currentDistance);\n const height = (carto1.height + carto2.height) / 2;\n return Cesium.Cartesian3.fromRadians(position.longitude, position.latitude, height);\n }\n else {\n currentDistance += length;\n }\n }\n }\n else if (positions.length > 0) {\n return positions[0];\n }\n else {\n return <any>null;\n }\n return positions[positions.length - 1];\n }\n}","import * as Cesium from \"cesium\";\n\nexport namespace MeasureUtils {\n /**\n * Returns the total distance in meters between an array of points.\n * This distance is NOT following the terrain.\n * @param posses \n * @returns \n */\n export function MeasurePolyline(posses: Cesium.Cartesian3[]): number {\n if (posses.length < 2) {\n return 0;\n }\n let totalLength = 0;\n let pos1 = null;\n let pos2 = null;\n for (let i = 0; i < posses.length; i++) {\n if (pos1 == null) {\n pos1 = posses[i];\n }\n else if (pos2 == null) {\n pos2 = posses[i];\n totalLength += Cesium.Cartesian3.distance(pos1, pos2);\n pos1 = pos2;\n pos2 = null;\n }\n }\n return totalLength;\n }\n}","import { Cartes, Carto, Entity as E, Geometry } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { EntityRenderEngine } from \"../rendering/entity-render-engine\";\nimport { DrawingUtils } from \"./drawing-utils\";\nimport { MeasureUtils } from \"./measure-utils\";\n\nfunction traverseEntity(cEntity: EntityRenderEngine.ICesiumEntityExt, arr: EntityRenderEngine.ICesiumEntityExt[]): void {\n if (cEntity._parentEntity) {\n traverseEntity(cEntity._parentEntity, arr);\n }\n if (cEntity._siblingGraphics) {\n for (let i = 0; i < cEntity._siblingGraphics.length; i++) {\n const sibling = cEntity._siblingGraphics[i];\n traverseEntity(sibling, arr);\n }\n }\n arr.push(cEntity);\n}\n\nexport namespace EntityUtils {\n /**\n * Returns an entity's position.\n * This will attempt to calculate it from multiple sources of data.\n * @param viewer \n * @param entity \n * @returns \n */\n export function GetPos(viewer: Cesium.Viewer, entity: E.IEntity): Cesium.Cartesian3 {\n if (entity.location && Carto.ValidateCarto(entity.location)) {\n const location = entity.location;\n return Cesium.Cartesian3.fromDegrees(location.longitude, location.latitude, location.altitude);\n }\n if (entity.geometry && typeof entity.geometry == \"object\") {\n const pointStr = entity.geometry.Point;\n if (pointStr && typeof pointStr == \"string\") {\n const points = Geometry.ParsePoints(pointStr);\n const point = points.length > 0 ? points[0] : null;\n if (point && Carto.ValidateCarto(point)) {\n return Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\n }\n }\n const lineStr = entity.geometry.LineString;\n if (lineStr && typeof lineStr == \"string\") {\n const points = Geometry.ParsePoints(lineStr);\n if (points.length > 0) {\n const posses = points.map(x => Cesium.Cartesian3.fromDegrees(x.longitude, x.latitude, x.altitude));\n const length = MeasureUtils.MeasurePolyline(posses);\n if (length > 0) {\n const point = DrawingUtils.PointAcrossPolyline(viewer, posses, length / 2);\n if (point && Cartes.ValidateCartes3(point)) {\n return point;\n }\n }\n else {\n return posses[0];\n }\n }\n }\n const pRings = entity.geometry.Polygon;\n if (pRings && typeof pRings == \"object\") {\n const boundary = pRings.find(x => x.Facing == Geometry.EPolygonRingType.Boundaries)\n if (boundary?.LinearRing) {\n const points = Geometry.ParsePoints(boundary.LinearRing);\n const point = Carto.GetCenter(points);\n if (point && Carto.ValidateCarto(point)) {\n return Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\n }\n }\n }\n }\n if (entity.boundaries) {\n const point: Carto.ICarto = {\n latitude: (entity.boundaries.minLatitude + entity.boundaries.maxLatitude) / 2, \n longitude: (entity.boundaries.minLongitude + entity.boundaries.maxLongitude) / 2, \n altitude: 0\n };\n if (point && Carto.ValidateCarto(point)) {\n return Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\n }\n }\n return <any>null;\n }\n\n /**\n * Returns entity and any associated parent/sibling entities as a flat array.\n * @param entity \n */\n export function GatherEntity(entity: Cesium.Entity): Cesium.Entity[] {\n if (entity instanceof Cesium.Entity) {\n const cEntity = entity as EntityRenderEngine.ICesiumEntityExt;\n const items: EntityRenderEngine.ICesiumEntityExt[] = [];\n traverseEntity(cEntity, items);\n return items;\n }\n return [entity];\n }\n}","import { EntitiesRenderManager } from \"./entities/entities-render-manager\";\nimport { EntitiesLoadedRenderManager } from \"./entities/entities-loaded-render-manager\";\nimport { EntitiesIdsRenderManager } from \"./entities/entities-ids-render-manager\";\nimport { EntityRenderManager } from \"./entities/entity-render-manager\";\nimport { EntityUtils } from \"../../utils/entity-utils\";\nimport { Entity, ZoomControl } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { TilesetCadRenderManager } from \"./tilesets/tileset-cad-render-manager\";\nimport { TilesetOsmRenderManager } from \"./tilesets/tileset-osm-render-manager\";\n\nexport namespace RenderManager {\n export interface IManager {\n Init(): Promise<void>;\n Dispose(): void;\n }\n\n export type Type = EntitiesRenderManager.Manager | \n EntitiesLoadedRenderManager.Manager | \n EntitiesIdsRenderManager.Manager | \n EntityRenderManager.Manager |\n TilesetCadRenderManager.Manager |\n TilesetOsmRenderManager.Manager;\n\n export namespace Utils {\n export function DetermineZoomItem(viewer: Cesium.Viewer, entity: Entity.IEntity, zoomControl: ZoomControl.IItem[]): ZoomControl.IItem {\n const pos = EntityUtils.GetPos(viewer, entity);\n if (!pos) {\n return <any>null;\n }\n const cameraPos = viewer.camera.position;\n const distance = Cesium.Cartesian3.distance(pos, cameraPos);\n return GetZoomControlFromDistance(zoomControl, distance);\n }\n \n export function GetZoomControlFromDistance(zoomControl: ZoomControl.IItem[], distance: number): ZoomControl.IItem {\n for (let i = 0; i < zoomControl.length; i++) {\n let zoomItem = zoomControl[i];\n if ((distance >= <number>zoomItem.MinZoom) && (distance <= <number>zoomItem.MaxZoom)) {\n return zoomItem;\n }\n }\n return <any>null;\n }\n\n export function GetZoomMinMax(zoomControl: ZoomControl.IItem[]): number[] {\n let min = 0;\n let max = 100;\n for (let i = 0; i < zoomControl.length; i++) {\n const zoomItem = zoomControl[i];\n if (zoomItem.MinZoom != null) {\n if (zoomItem.MinZoom < min) {\n min = zoomItem.MinZoom;\n }\n }\n if (zoomItem.MaxZoom != null) {\n if (zoomItem.MaxZoom > max) {\n max = zoomItem.MaxZoom;\n }\n }\n }\n return [min, max];\n }\n }\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();\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();\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();\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();\r\n const cEntities: IDictionary<ICesiumEntityExt> = {};\r\n const reqBody: EntityLod.Filter.IListParams = {\r\n \"strict\": false,\r\n \"externalSources\": false,\r\n \"Items\": []\r\n };\r\n\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\r\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\r\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\r\n let tags: EntityTag.ITag[] = [];\r\n if (tagIds && tagIds.length > 0) {\r\n tags = await EntityTag.GetListByIds(api, tagIds);\r\n }\r\n const mStyle = (style?.Settings as Style.IEntitySettings)?.polygonStyle ?? <any>{};\r\n let group = mStyle.lodGroup ? Calculator.GetValue(mStyle.lodGroup, entity, tags) : null;\r\n if (!group) {\r\n group = \"DEFAULT\";\r\n }\r\n let level = <number>+<any>zoomItem.LODLevel;\r\n if (!level) {\r\n level = 0;\r\n }\r\n let catId = <string>zoomItem.LODCategoryID;\r\n if (!catId) {\r\n catId = \"glb\";\r\n }\r\n reqBody.Items.push({\r\n \"entityId\": <string>entity.Bruce.ID,\r\n \"categoryId\": catId,\r\n \"group\": <string>group,\r\n \"level\": level\r\n });\r\n }\r\n\r\n const lodData = await EntityLod.GetLods(api, reqBody);\r\n\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n const zoomItem = params.zoomItems[<string>entity.Bruce.ID];\r\n const style = await getStyle(api, entity, <number>zoomItem.StyleID);\r\n const tagIds = <number[]>entity.Bruce[\"Layer.ID\"];\r\n let tags: EntityTag.ITag[] = [];\r\n if (tagIds && tagIds.length > 0) {\r\n tags = await EntityTag.GetListByIds(api, tagIds);\r\n }\r\n\r\n const lod = lodData.find(x => x.entityId == entity.Bruce.ID);\r\n if (!lod?.clientFileId) {\r\n continue;\r\n }\r\n const mStyle = (style?.Settings as Style.IEntitySettings)?.polygonStyle ?? <any>{};\r\n const cEntity = Render({\r\n entity: entity,\r\n style: mStyle,\r\n tags: tags,\r\n viewer: params.viewer,\r\n lodUrl: ClientFile.GetUrl(api, lod.clientFileId)\r\n })\r\n if (cEntity) {\r\n cEntity._renderGroup = getRenderGroupId(zoomItem);\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n }\r\n\r\n return cEntities;\r\n }\r\n }\r\n}","import { BruceApi, DelayQueue, Entity, EntityFilterGetter, IDictionary, MenuItem, ZoomControl } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\r\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\nimport { SharedGetters } from \"../common/shared-getters\";\r\n\r\n/**\r\n * Manager for rendering Bruce entities.\r\n * This will request entities based on setup menu item filter.\r\n */\r\nexport namespace EntitiesRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private sharedGetters: SharedGetters.Cache;\r\n private monitor: CesiumViewMonitor;\r\n private item: MenuItem.Item.IBruceEntities;\r\n private getter: EntityFilterGetter.Getter = <any>null;\r\n private getterSub: () => void = <any>null;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private renderedEntities: IDictionary<boolean> = {};\r\n private visualsManager: VisualsRegister.Register;\r\n private entityCheckQueue: DelayQueue = <any>null;\r\n private entityCheckRemoval: () => void = <any>null;\r\n private isRunningCheck = false;\r\n private viewMonitorRemoval: () => void = <any>null;\r\n\r\n\r\n constructor(\r\n viewer: Cesium.Viewer, \r\n visualsManager: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n monitor: CesiumViewMonitor,\r\n item: MenuItem.Item.IBruceEntities,\r\n sharedGetters: SharedGetters.Cache\r\n ) {\r\n this.viewer = viewer;\r\n this.sharedGetters = sharedGetters;\r\n this.monitor = monitor;\r\n this.apiGetter = apiGetter;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public async Init(): Promise<void> {\r\n if (this.disposed) {\r\n throw(new Error(\"This item is disposed.\"));\r\n }\r\n const api = this.apiGetter.getApi();\r\n this.getter = this.sharedGetters.GetOrCreateFilterGetter({\r\n api: api,\r\n attrFilter: this.item.BruceEntity.Filter ?? {},\r\n batchSize: 500,\r\n typeId: this.item.BruceEntity[\"EntityType.ID\"],\r\n monitor: this.monitor\r\n });\r\n const minMax = RenderManager.Utils.GetZoomMinMax(this.item.CameraZoomSettings);\r\n this.getter.IncludeMenuItem(this.item.id, [], minMax[0], minMax[1]);\r\n this.getterSub = this.getter.OnUpdate.Subscribe((entities) => {\r\n this.onGetterUpdate(entities);\r\n });\r\n this.viewMonitorRemoval = this.monitor.Updated().Subscribe(() => {\r\n this.entityCheckQueue.Call();\r\n });\r\n this.entityCheckQueue = new DelayQueue(() => {\r\n this.doEntityCheck();\r\n }, 3000);\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n if (this.getter) {\r\n this.getter.ExcludeMenuItem(this.item.id);\r\n }\r\n this.disposed = true;\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n this.entityCheckRemoval?.();\r\n this.viewMonitorRemoval?.();\r\n }\r\n\r\n private async doEntityCheck(): Promise<void> {\r\n if (this.isRunningCheck) {\r\n this.entityCheckQueue.Call();\r\n return;\r\n }\r\n this.isRunningCheck = true;\r\n const api = this.apiGetter.getApi();\r\n try {\r\n const ids = Object.keys(this.renderedEntities);\r\n if (this.disposed) {\r\n return;\r\n }\r\n if (ids.length > 0) { \r\n const CHECK_BATCH_SIZE = 150;\r\n const checkBatch = async() => {\r\n const entityIds = ids.splice(0, CHECK_BATCH_SIZE);\r\n const entities = await Entity.GetListByIds(api, entityIds);\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.distributeGenerateBatches(entities);\r\n };\r\n while (ids.length > 0) {\r\n await checkBatch();\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n this.isRunningCheck = false;\r\n }\r\n\r\n private distributeGenerateBatches(entities: Entity.IEntity[]): void {\r\n const BATCH_SIZE = 50;\r\n while (entities.length > 0) {\r\n const batch = entities.splice(0, BATCH_SIZE);\r\n this.onGetterUpdate(batch);\r\n }\r\n }\r\n\r\n private async onGetterUpdate(entities: Entity.IEntity[]): Promise<void> {\r\n 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 entity = entities[i];\r\n const id = <string>entity.Bruce.ID;\r\n const cEntity = cEntities[id];\r\n this.renderedEntities[id] = !!cEntity;\r\n if (cEntity) {\r\n const visual = this.visualsManager.GetRego(id, this.item.id)?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.Add({\r\n entityId: <string>id,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0,\r\n entityTypeId: entity.Bruce[\"EntityType.ID\"]\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\r\n }\r\n }\r\n }\r\n}","import { BatchedDataGetter, BruceApi, Entity, IDictionary, ZoomControl, MenuItem } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\r\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\n\r\n/**\r\n * Render manager for a group of pre-loaded entities.\r\n * The entities may or may not have records.\r\n * If the entities DON'T have records, it is recommended to avoid using the 3dmodel visualization as it will fail to locate LODs.\r\n */\r\nexport namespace EntitiesLoadedRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private item: MenuItem.Item.IEntitiesLoaded;\r\n private getter: BatchedDataGetter.Getter<Entity.IEntity> = <any>null;\r\n private monitor: CesiumViewMonitor;\r\n private getterSub: () => void = <any>null;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private renderedEntities: IDictionary<boolean> = {};\r\n private visualsManager: VisualsRegister.Register;\r\n\r\n\r\n constructor(\r\n viewer: Cesium.Viewer, \r\n visualsManager: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n monitor: CesiumViewMonitor,\r\n item: MenuItem.Item.IEntitiesLoaded\r\n ) {\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.monitor = monitor;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public async Init(): Promise<void> {\r\n if (this.disposed) {\r\n throw(new Error(\"This item is disposed.\"));\r\n }\r\n this.getter = new BatchedDataGetter.Getter<Entity.IEntity>(\r\n this.item.BruceEntity.Entities,\r\n this.monitor,\r\n 500\r\n );\r\n this.getterSub = this.getter.OnUpdate.Subscribe((entities) => {\r\n this.onGetterUpdate(entities);\r\n });\r\n this.getter.Start();\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n this.disposed = true;\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n }\r\n\r\n private async onGetterUpdate(entities: Entity.IEntity[]): Promise<void> {\r\n 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 entity = entities[i];\r\n const id = <string>entity.Bruce.ID;\r\n const cEntity = cEntities[id];\r\n this.renderedEntities[id] = !!cEntity;\r\n if (cEntity) {\r\n const visual = this.visualsManager.GetRego(id, this.item.id)?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.Add({\r\n entityId: <string>id,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0,\r\n entityTypeId: entity.Bruce[\"EntityType.ID\"]\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\r\n }\r\n }\r\n }\r\n}","import { BruceEvent, Cartes, IDictionary, ObjectUtils } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { EntityUtils } from \"../utils/entity-utils\";\nimport { EntityRenderEngine } from \"./entity-render-engine\";\nimport { IRenderAddon } from \"./render-addons/render-addon\";\n\ninterface IVisualExt {//extends Visual {\n _register?: VisualsRegister.Register;\n _rego?: VisualsRegister.IVisualRego;\n}\n\nfunction removeEntity(viewer: Cesium.Viewer, visual: VisualsRegister.Visual): void {\n unmarkEntity(visual);\n if (visual instanceof Cesium.Entity) {\n EntityRenderEngine.Remove(viewer, visual);\n }\n else if (visual instanceof Cesium.Primitive) {\n if (viewer.scene.primitives.contains(visual)) {\n viewer.scene.primitives.remove(visual);\n }\n }\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\n // No way to tell if changing show will crash it!\n try {\n visual.show = false;\n }\n catch (e) {\n console.error(e);\n }\n }\n}\n\nfunction updateCEntityShow(viewer: Cesium.Viewer, visual: EntityRenderEngine.ICesiumEntityExt, show: boolean) {\n if (visual._parentEntity) {\n updateCEntityShow(viewer, visual._parentEntity, show);\n }\n if (visual._siblingGraphics) {\n for (let i = 0; i < visual._siblingGraphics.length; i++) {\n const sibling = visual._siblingGraphics[i];\n updateCEntityShow(viewer, sibling, show);\n }\n }\n if (viewer.entities.contains(visual)) {\n visual.show = show;\n }\n}\n\nfunction updateEntityShow(\n viewer: Cesium.Viewer, \n visual: VisualsRegister.Visual, \n show: boolean\n): void {\n if (visual instanceof Cesium.Entity) {\n updateCEntityShow(viewer, visual, show);\n }\n else if (visual instanceof Cesium.Primitive) {\n if (viewer.scene.primitives.contains(visual)) {\n visual.show = show;\n }\n }\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\n // No way to tell if changing show will crash it!\n try {\n visual.show = show;\n }\n catch (e) {\n console.error(e);\n }\n }\n}\n\nfunction updateEntity(viewer: Cesium.Viewer, entityRegos: VisualsRegister.IVisualRego[], addons: IRenderAddon[]): void {\n let highestPriority: VisualsRegister.IVisualRego = <any>null;\n for (let i = 0; i < entityRegos.length; i++) {\n const rego = entityRegos[i];\n if (highestPriority === null || rego.priority > highestPriority.priority) {\n highestPriority = rego;\n }\n }\n for (let i = 0; i < entityRegos.length; i++) {\n const rego = entityRegos[i];\n const show = rego === highestPriority;\n rego.best = show;\n updateEntityShow(viewer, rego.visual, show);\n }\n if (addons) {\n for (let j = 0; j < addons.length; j++) {\n const addon = addons[j];\n addon.Render(entityRegos.map(x => x.visual));\n }\n }\n}\n\nfunction markEntity(register: VisualsRegister.Register, rego: VisualsRegister.IVisualRego, visual: VisualsRegister.Visual): void {\n const vis = <IVisualExt>visual;\n vis._register = register;\n vis._rego = rego;\n if (visual instanceof Cesium.Entity) {\n const visEnt = <EntityRenderEngine.ICesiumEntityExt>visual;\n if (visEnt._parentEntity) {\n markEntity(register, rego, visEnt._parentEntity);\n }\n if (visEnt._siblingGraphics) {\n for (let i = 0; i < visEnt._siblingGraphics.length; i++) {\n markEntity(register, rego, visEnt._siblingGraphics[i]);\n }\n }\n }\n}\n\nfunction unmarkEntity(visual: VisualsRegister.Visual): void {\n const vis = <IVisualExt>visual;\n vis._register = <any>null;\n if (visual instanceof Cesium.Entity) {\n const visEnt = <EntityRenderEngine.ICesiumEntityExt>visual;\n if (visEnt._parentEntity) {\n unmarkEntity(visEnt._parentEntity);\n }\n if (visEnt._siblingGraphics) {\n for (let i = 0; i < visEnt._siblingGraphics.length; i++) {\n unmarkEntity(visEnt._siblingGraphics[i]);\n }\n }\n }\n}\n\ninterface IColoredBillboard extends Cesium.BillboardGraphics {\n _orgColor?: Cesium.Color;\n}\n\ninterface IColoredPoint extends Cesium.PointGraphics {\n _orgColor?: Cesium.Color;\n}\n\ninterface IColoredPolygon extends Cesium.PolygonGraphics {\n _orgColor?: Cesium.Color;\n}\n\ninterface IColoredPolyline extends Cesium.PolylineGraphics {\n _orgColor?: Cesium.Color;\n}\n\ninterface IColoredModel extends Cesium.ModelGraphics {\n _orgColor?: Cesium.Color;\n}\n\ninterface IColoredEntityExt extends Cesium.Entity {\n point: IColoredPoint;\n polygon: IColoredPolygon;\n polyline: IColoredPolyline;\n model: IColoredModel;\n billboard: IColoredBillboard;\n}\n\ninterface IColoredFeatureExt extends Cesium.Cesium3DTileFeature {\n _orgColor?: Cesium.Color;\n}\n\nfunction select(visual: VisualsRegister.Visual): void {\n const color = Cesium.Color.fromAlpha(Cesium.Color.YELLOW, 0.5);\n if (visual instanceof Cesium.Entity) {\n const entities = EntityUtils.GatherEntity(visual);\n for (let i = 0; i < entities.length; i++) {\n const cEntity: IColoredEntityExt = <any>entities[i];\n if (cEntity.point) {\n cEntity.point._orgColor = <any>cEntity.point.color;\n cEntity.point.color = <any>color.clone();\n }\n if (cEntity.polyline) {\n cEntity.polyline._orgColor = <any>cEntity.polyline.material;\n cEntity.polyline.material = <any>color.clone();\n }\n if (cEntity.polygon) {\n cEntity.polygon._orgColor = <any>cEntity.polygon.material;\n cEntity.polygon.material = <any>color.clone();\n }\n if (cEntity.model) {\n cEntity.model._orgColor = <any>cEntity.model.color;\n cEntity.model.color = <any>color.clone();\n }\n if (cEntity.billboard) {\n cEntity.billboard._orgColor = <any>cEntity.billboard.color;\n cEntity.billboard.color = <any>color.clone();\n }\n }\n }\n else if (visual instanceof Cesium.Primitive) {\n // TODO. \n }\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\n const cPrim = <IColoredFeatureExt>visual;\n cPrim._orgColor = <any>cPrim.color;\n cPrim.color = <any>color.clone();\n }\n}\n\nfunction deselect(visual: VisualsRegister.Visual): void {\n if (visual instanceof Cesium.Entity) {\n const entities = EntityUtils.GatherEntity(visual);\n for (let i = 0; i < entities.length; i++) {\n const cEntity: IColoredEntityExt = <any>entities[i];\n if (cEntity.point) {\n cEntity.point.color = <any>cEntity.point._orgColor;\n }\n if (cEntity.polyline) {\n cEntity.polyline.material = <any>cEntity.polyline._orgColor;\n }\n if (cEntity.polygon) {\n cEntity.polygon.material = <any>cEntity.polygon._orgColor;\n }\n if (cEntity.model) {\n cEntity.model.color = <any>cEntity.model._orgColor;\n }\n if (cEntity.billboard) {\n cEntity.billboard.color = <any>cEntity.billboard._orgColor;\n }\n }\n }\n else if (visual instanceof Cesium.Primitive) {\n // TODO. \n }\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\n const cPrim = <IColoredFeatureExt>visual;\n cPrim.color = <any>cPrim._orgColor;\n }\n}\n\n/**\n * Manages a registry of all Bruce visuals being rendered by menu items.\n * If multiple stuff is registered with the same entity id, only the \"best\" one is left visible.\n */\nexport namespace VisualsRegister {\n export type Visual = Cesium.Entity | Cesium.Primitive | Cesium.Cesium3DTileFeature;\n\n export interface IVisualRego {\n entityId: string;\n entityTypeId?: string;\n menuItemId: string;\n visual: Visual;\n priority: number;\n sourceId?: number\n // Indicates if this is the best visual for the entity.\n // If multiple visuals are registered for the same entity, only the best one is left visible.\n best?: boolean;\n }\n \n export interface IVisualUpdate {\n rego: IVisualRego;\n isAdding: boolean;\n }\n\n export class Register {\n private id = ObjectUtils.UId();\n public get Id(): string {\n return this.id;\n }\n private viewer: Cesium.Viewer;\n private rego: IDictionary<IVisualRego[]> = {};\n private onUpdate: BruceEvent<IVisualUpdate> = <any>null;\n public get OnUpdate(): BruceEvent<IVisualUpdate> {\n if (!this.onUpdate) {\n this.onUpdate = new BruceEvent<IVisualUpdate>();\n }\n return this.onUpdate;\n }\n private selectedIds: string[] = [];\n private addons: IDictionary<IRenderAddon[]> = {};\n \n \n constructor(viewer: Cesium.Viewer) {\n this.viewer = viewer;\n }\n\n public AddAddon(entityId: string, addon: IRenderAddon): void {\n if (!this.addons[entityId]) {\n this.addons[entityId] = [];\n }\n this.addons[entityId].push(addon);\n const regos = this.rego[entityId];\n if (regos) {\n addon.Render(regos.map(x => x.visual))\n }\n }\n\n public GetAddons(entityId: string): IRenderAddon[] {\n return this.addons[entityId] || [];\n }\n\n public RemoveAddon(entityId: string, addonId: string): void {\n const addons = this.addons[entityId];\n if (addons) {\n for (let i = 0; i < addons.length; i++) {\n if (addons[i].Id === addonId) {\n addons[i].Dispose();\n addons.splice(i, 1);\n break;\n }\n }\n }\n }\n\n public RemoveAddons(entityId: string): void {\n const addons = this.addons[entityId];\n if (addons) {\n for (let i = 0; i < addons.length; i++) {\n addons[i].Dispose();\n }\n }\n this.addons[entityId] = [];\n }\n\n public Select(id: string): void {\n if (this.selectedIds.indexOf(id) === -1) {\n this.selectedIds.push(id);\n const regos = this.rego[id];\n if (regos) {\n for (let i = 0; i < regos.length; i++) {\n const rego = regos[i];\n select(rego.visual);\n }\n }\n }\n }\n\n public Deselect(id: string): void {\n const index = this.selectedIds.indexOf(id);\n if (index !== -1) {\n this.selectedIds.splice(index, 1);\n const regos = this.rego[id];\n if (regos) {\n for (let i = 0; i < regos.length; i++) {\n const rego = regos[i];\n deselect(rego.visual);\n }\n }\n }\n }\n\n public IsSelected(id: string): boolean {\n return this.selectedIds.indexOf(id) !== -1;\n }\n\n public ClearSelected(): void {\n for (let i = 0; i < this.selectedIds.length; i++) {\n const id = this.selectedIds[i];\n const regos = this.rego[id];\n if (regos) {\n for (let i = 0; i < regos.length; i++) {\n const rego = regos[i];\n deselect(rego.visual);\n }\n }\n }\n this.selectedIds = [];\n }\n \n public Add(rego: IVisualRego): void {\n this.Remove(rego.entityId, rego.menuItemId, false);\n const entityId = rego.entityId;\n const entityRegos = this.rego[entityId] ?? [];\n entityRegos.push(rego);\n this.rego[entityId] = entityRegos;\n markEntity(this, rego, rego.visual);\n updateEntity(this.viewer, this.rego[entityId], this.GetAddons(entityId));\n if (this.selectedIds.includes(entityId)) {\n select(rego.visual);\n }\n this.onUpdate?.Trigger({ rego: rego, isAdding: true });\n }\n \n public GetRego(entityId: string, menuItemId: string): IVisualRego {\n const entityRegos = this.rego[entityId];\n if (!entityRegos) {\n return <any>[];\n }\n return <any>entityRegos.find(r => r.menuItemId === menuItemId);\n }\n\n public GetRegos(entityId: string): IVisualRego[] {\n const entityRegos = this.rego[entityId];\n if (!entityRegos) {\n return <any>[];\n }\n return entityRegos;\n }\n\n public GetMenuItemRegos(menuItemId: string): IVisualRego[] {\n const visuals: IVisualRego[] = [];\n for (const entityId in this.rego) {\n const entityRegos = this.rego[entityId];\n if (entityRegos) {\n const rego = entityRegos.find(r => r.menuItemId === menuItemId);\n if (rego) {\n visuals.push(rego);\n }\n }\n }\n return visuals;\n }\n \n public RemoveByEntityId(id: string): void {\n const entityRegos = this.rego[id];\n if (!entityRegos) {\n return;\n }\n for (let i = 0; i < entityRegos.length; i++) {\n const rego = entityRegos[i];\n this.onUpdate?.Trigger({ rego: rego, isAdding: false });\n removeEntity(this.viewer, rego.visual);\n }\n this.rego[id] = [];\n delete this.rego[id];\n }\n \n public RemoveByMenuItemId(id: string): void {\n for (const entityId in this.rego) {\n const entityRegos = this.rego[entityId];\n if (entityRegos) {\n const rego = entityRegos.find(r => r.menuItemId === id);\n if (!rego) {\n continue;\n }\n this.onUpdate?.Trigger({ rego: rego, isAdding: false });\n removeEntity(this.viewer, rego.visual);\n const doesInclude = this.rego[entityId].find(r => r.menuItemId === id);\n if (doesInclude) {\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== id);\n updateEntity(this.viewer, this.rego[entityId], this.GetAddons(entityId));\n }\n }\n }\n }\n \n public Remove(entityId: string, menuItemId: string, _doUpdate: boolean = true): void {\n const entityRegos = this.rego[entityId];\n if (!entityRegos) {\n return;\n }\n const rego = entityRegos.find(r => r.menuItemId === menuItemId);\n if (!rego) {\n return;\n }\n this.onUpdate?.Trigger({ rego: rego, isAdding: false });\n removeEntity(this.viewer, rego.visual);\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== menuItemId);\n if (_doUpdate) {\n updateEntity(this.viewer, this.rego[entityId], this.GetAddons(entityId));\n }\n }\n \n /**\n * Returns an array of drilled visuals associated with this register.\n * The top array item is the first found.\n * @param cursor \n * @returns \n */\n public GetFromCursor(cursor: Cartes.ICartes2): IVisualRego[] {\n const found: IVisualRego[] = [];\n const picked = this.viewer.scene.drillPick(new Cesium.Cartesian2(cursor.x, cursor.y), 5);\n for (let i = 0; i < picked.length; i++) {\n const object = picked[i];\n const entity = <Visual>(object && object.id && object.id instanceof Cesium.Entity ? object.id : object);\n const visual = <IVisualExt>entity;\n if (visual?._register?.Id == this.id) {\n found.push(<IVisualRego>visual._rego);\n }\n }\n return found;\n }\n }\n}","import { BatchedDataGetter, BruceApi, Entity, IDictionary, MenuItem } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\r\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\n\r\n/**\r\n * Render manager for rendering an array of entity ids.\r\n * This will render them in batches to avoid overloading the viewer.\r\n */\r\nexport namespace EntitiesIdsRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private monitor: CesiumViewMonitor;\r\n private item: MenuItem.Item.IEntityIds;\r\n private getter: BatchedDataGetter.Getter<string> = <any>null;\r\n private getterSub: () => void = <any>null;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private renderedEntities: IDictionary<boolean> = {};\r\n private visualsManager: VisualsRegister.Register;\r\n\r\n\r\n constructor(\r\n viewer: Cesium.Viewer, \r\n visualsManager: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n monitor: CesiumViewMonitor,\r\n item: MenuItem.Item.IEntityIds\r\n ) {\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.monitor = monitor;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public async Init(): Promise<void> {\r\n if (this.disposed) {\r\n throw(new Error(\"This item is disposed.\"));\r\n }\r\n this.getter = new BatchedDataGetter.Getter<string>(\r\n this.item.BruceEntity.EntityIds,\r\n this.monitor,\r\n 500\r\n );\r\n this.getterSub = this.getter.OnUpdate.Subscribe((ids) => {\r\n this.onGetterUpdate(ids);\r\n });\r\n this.getter.Start();\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n this.disposed = true;\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n }\r\n\r\n private async onGetterUpdate(entityIds: string[]): Promise<void> {\r\n if (this.disposed) {\r\n return;\r\n }\r\n const api = this.apiGetter.getApi();\r\n const entities = await Entity.GetListByIds(api, entityIds);\r\n const cEntities = await EntityRenderEngine.Render({\r\n viewer: this.viewer, \r\n apiGetter: this.apiGetter, \r\n entities: entities,\r\n menuItemId: this.item.id,\r\n visualRegister: this.visualsManager,\r\n zoomControl: this.item.CameraZoomSettings\r\n });\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n const id = <string>entity.Bruce.ID;\r\n const cEntity = cEntities[id];\r\n this.renderedEntities[id] = !!cEntity;\r\n if (cEntity) {\r\n const visual = this.visualsManager.GetRego(id, this.item.id)?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.Add({\r\n entityId: <string>id,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0,\r\n entityTypeId: entity.Bruce[\"EntityType.ID\"]\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\r\n }\r\n }\r\n }\r\n}","import { BatchedDataGetter, BruceApi, Entity, IDictionary, MenuItem, ZoomControl } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\r\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\n\r\n/**\r\n * Manager for rendering a single Bruce entity.\r\n */\r\nexport namespace EntityRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private item: MenuItem.Item.IBruceEntity;\r\n private getter: BatchedDataGetter.Getter<string> = <any>null;\r\n private monitor: CesiumViewMonitor;\r\n private getterSub: () => void = <any>null;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private visualsManager: VisualsRegister.Register;\r\n\r\n\r\n constructor(\r\n viewer: Cesium.Viewer, \r\n visualsManager: VisualsRegister.Register, \r\n apiGetter: BruceApi.IGetter, \r\n monitor: CesiumViewMonitor, \r\n item: MenuItem.Item.IBruceEntity\r\n ) {\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.monitor = monitor;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public async Init(): Promise<void> {\r\n if (this.disposed) {\r\n throw(new Error(\"This item is disposed.\"));\r\n }\r\n this.getter = new BatchedDataGetter.Getter<string>(\r\n [this.item.BruceEntity.EntityId],\r\n this.monitor,\r\n 1\r\n );\r\n this.getterSub = this.getter.OnUpdate.Subscribe((ids) => {\r\n this.onGetterUpdate(ids[0]);\r\n });\r\n this.getter.Start();\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.disposed = true;\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n }\r\n\r\n private async onGetterUpdate(id: string): Promise<void> {\r\n if (this.disposed) {\r\n return;\r\n }\r\n const api = this.apiGetter.getApi();\r\n const entity = await Entity.Get(api, id);\r\n const cEntities = await EntityRenderEngine.Render({\r\n viewer: this.viewer, \r\n apiGetter: this.apiGetter,\r\n entities: [entity],\r\n menuItemId: this.item.id,\r\n visualRegister: this.visualsManager,\r\n zoomControl: this.item.CameraZoomSettings\r\n });\r\n const cEntity = cEntities[id];\r\n if (cEntity) {\r\n const visual = this.visualsManager.GetRego(id, this.item.id)?.visual;\r\n if (!visual || visual != cEntity) {\r\n this.visualsManager.Add({\r\n entityId: <string>entity.Bruce.ID,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0,\r\n entityTypeId: entity.Bruce[\"EntityType.ID\"]\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\r\n }\r\n }\r\n}","import { BruceApi, Calculator, Cartes, Carto, Color, Entity, EntityCoords, EntityType, IDictionary, Style, Tileset, TilesetCad, Transform } 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 coords?: EntityCoords.IEntityCoords;\r\n }\r\n\r\n export function ApplyPosition(\r\n cTileset: Cesium.Cesium3DTileset, \r\n tileset: Tileset.ITileset, \r\n coords: EntityCoords.IEntityCoords\r\n ): void {\r\n if (tileset.type == Tileset.EType.Cad) {\r\n const settings = tileset.settings as TilesetCad.ISettings;\r\n\r\n let location: Carto.ICarto;\r\n let transform: Transform.ITransform;\r\n\r\n // Position using root entity + ucs.\r\n if (coords?.ucs) {\r\n location = coords.ucs.location;\r\n transform = coords.transform as Transform.ITransform;\r\n }\r\n // Position using tileset.\r\n else {\r\n transform = settings.transform as Transform.ITransform;\r\n location = settings.location as Carto.ICarto;\r\n }\r\n\r\n if (!location?.latitude) {\r\n return;\r\n }\r\n\r\n transform = {\r\n heading: 0,\r\n pitch: 0,\r\n roll: 0,\r\n scale: 1,\r\n x: 0,\r\n y: 0,\r\n z: 0,\r\n ...transform\r\n }\r\n if (transform.scale <= 0) {\r\n transform.scale = 0.000001;\r\n }\r\n\r\n const pos = Cesium.Cartesian3.fromDegrees(\r\n location.longitude,\r\n location.latitude,\r\n location.altitude\r\n );\r\n const hpr = Cesium.HeadingPitchRoll.fromDegrees(\r\n transform.heading, \r\n transform.pitch, \r\n transform.roll, \r\n new Cesium.HeadingPitchRoll()\r\n );\r\n\r\n const root = cTileset.root;\r\n root.transform = Cesium.Transforms.headingPitchRollToFixedFrame(pos, hpr);\r\n\r\n const scaleMatrix = Cesium.Matrix4.fromScale(new Cesium.Cartesian3(\r\n transform.scale, \r\n transform.scale,\r\n transform.scale\r\n ), new Cesium.Matrix4());\r\n root.transform = Cesium.Matrix4.multiply(root.transform, scaleMatrix, root.transform);\r\n\r\n root.transform = Cesium.Matrix4.multiplyByTranslation(root.transform, new Cesium.Cartesian3(\r\n transform.x,\r\n transform.y,\r\n transform.z\r\n ), root.transform);\r\n\r\n // Force matrix to update\r\n (<any>root).updateTransform();\r\n }\r\n else {\r\n throw(\"Not implemented.\");\r\n }\r\n }\r\n\r\n export function ApplySettings(cTileset: Cesium.Cesium3DTileset, tileset: Tileset.ITileset): void {\r\n if (tileset.type == Tileset.EType.Cad) {\r\n const settings = tileset.settings as TilesetCad.ISettings;\r\n const maxScreenSpaceError = settings.maximumScreenSpaceError;\r\n if (maxScreenSpaceError || maxScreenSpaceError == 0) {\r\n cTileset.maximumScreenSpaceError = 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);\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 ApplyPosition(cTileset, params.tileset, params.coords as EntityCoords.IEntityCoords);\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, EntityCoords, MenuItem, Tileset, TilesetCad } from \"bruce-models\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\nimport * as Cesium from \"cesium\";\r\nimport { TilesetRenderEngine } from \"../../tileset-render-engine\";\r\n\r\n/**\r\n * Manager for rendering CAD tilesets.\r\n * CAD tilesets are referred to as \"MODEL\" tilesets in some other areas of Bruce code.\r\n */\r\nexport namespace TilesetCadRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private item: MenuItem.Item.ICadTileset;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private visualsManager: VisualsRegister.Register;\r\n private cTileset: Cesium.Cesium3DTileset = <any>null;\r\n private styler: TilesetRenderEngine.CadStyler = <any>null;\r\n\r\n \r\n constructor(viewer: Cesium.Viewer, visualsManager: VisualsRegister.Register, apiGetter: BruceApi.IGetter, item: MenuItem.Item.ICadTileset) {\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n \r\n public async Init(): Promise<void> {\r\n const tilesetId = this.item.tileset?.TilesetID;\r\n if (!tilesetId) {\r\n return;\r\n }\r\n\r\n const api = this.apiGetter.getApi();\r\n const tileset = await Tileset.Get(api, tilesetId);\r\n if (!tileset) {\r\n return;\r\n }\r\n\r\n const settings = <TilesetCad.ISettings>tileset.settings;\r\n const rootId = settings.rootEntityId;\r\n const coords: EntityCoords.IEntityCoords = await EntityCoords.GetEntityCoords(api, rootId);\r\n\r\n const cTileset = this.cTileset = TilesetRenderEngine.Render({\r\n apiGetter: this.apiGetter,\r\n tileset: tileset,\r\n viewer: this.viewer,\r\n coords: coords\r\n });\r\n cTileset.readyPromise.then(() => {\r\n 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 { Entity, EntityFilterGetter } from \"bruce-models\";\nimport { BruceApi } from \"bruce-models/dist/types/api/bruce-api\";\nimport { IDictionary } from \"bruce-models/dist/types/common/dictionary\";\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\n\nfunction createFilterGetterCacheKey(params: SharedGetters.IFilterGetterParams): string {\n let cacheKey = \"\";\n cacheKey += params.api.GetBaseUrl();\n cacheKey += params.typeId;\n cacheKey += params.batchSize;\n cacheKey += JSON.stringify(params.attrFilter);\n return cacheKey;\n}\n\nexport namespace SharedGetters {\n export interface IFilterGetterParams {\n api: BruceApi.Api;\n typeId: string;\n batchSize: number;\n attrFilter: Entity.Filter.V1.AttrFilter;\n monitor: CesiumViewMonitor;\n }\n\n export class Cache {\n private data: IDictionary<EntityFilterGetter.Getter> = {};\n\n\n public GetOrCreateFilterGetter(params: IFilterGetterParams): EntityFilterGetter.Getter {\n const cacheKey = createFilterGetterCacheKey(params);\n let getter = this.data[cacheKey];\n if (!getter) {\n getter = new EntityFilterGetter.Getter(\n params.api,\n params.monitor,\n params.typeId,\n params.batchSize,\n params.attrFilter\n );\n this.data[cacheKey] = getter;\n }\n return getter;\n }\n }\n}","import { BruceApi, Cartes, EntitySource, IDictionary, MenuItem, ObjectUtils } from \"bruce-models\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\nimport * as Cesium from \"cesium\";\r\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\r\n\r\ninterface ICesiumFeatureExtended extends Cesium.Cesium3DTileFeature {\r\n _orgColor: Cesium.Color;\r\n _counter: number;\r\n}\r\n\r\nconst MAX_BATCHES = 2;\r\nconst BATCH_SIZE = 30;\r\nconst BATCH_DELAY = 200;\r\nconst MAX_RANGE = 3000;\r\n\r\nexport namespace TilesetOsmRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private apiGetter: BruceApi.IGetter;\r\n private item: MenuItem.Item.IOsm;\r\n private monitor: CesiumViewMonitor;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private visualsManager: VisualsRegister.Register;\r\n private cTileset: Cesium.Cesium3DTileset = <any>null;\r\n\r\n private counter: number = 0;\r\n private get count(): number {\r\n return ++this.counter;\r\n }\r\n\r\n private _loadedCesiumEntities: IDictionary<VisualsRegister.IVisualRego> = {};\r\n private totalLoaded: number = 0;\r\n private featureQueue: ICesiumFeatureExtended[] = [];\r\n private sourceId: number = <any>null;\r\n private entityTypeId: string = <any>null;\r\n private queueCheckInterval: any = null;\r\n private processingQueue: number = 0;\r\n\r\n\r\n constructor(viewer: Cesium.Viewer, visualsManager: VisualsRegister.Register, apiGetter: BruceApi.IGetter, monitor: CesiumViewMonitor, item: MenuItem.Item.IOsm) {\r\n this.viewer = viewer;\r\n this.apiGetter = apiGetter;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n this.monitor = monitor;\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n clearInterval(this.queueCheckInterval);\r\n if (this.cTileset) {\r\n this.cTileset.show = false;\r\n }\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n this.featureQueue = [];\r\n }\r\n\r\n public async Init(): Promise<void> {\r\n const menuItem = this.item;\r\n this.sourceId = <number><any>menuItem.BruceEntity?.SourceId;\r\n this.entityTypeId = <string>menuItem.BruceEntity?.[\"EntityType.ID\"];\r\n\r\n this.cTileset = Cesium.createOsmBuildings();\r\n this.cTileset.show = true;\r\n\r\n if (this.sourceId) {\r\n if (menuItem.ghostLoading == true) {\r\n this.cTileset.style = new Cesium.Cesium3DTileStyle({\r\n color: \"rgba(255, 255, 250, 0.98)\"\r\n });\r\n }\r\n \r\n this.viewer.scene.primitives.add(this.cTileset);\r\n this.cTileset.tileLoad.addEventListener((tile) => {\r\n this.mapCTile(tile);\r\n });\r\n \r\n this.queueCheckInterval = setInterval(() => {\r\n if (this.featureQueue.length > 0) {\r\n this.processQueue();\r\n }\r\n }, 5000);\r\n }\r\n else {\r\n this.viewer.scene.primitives.add(this.cTileset);\r\n }\r\n }\r\n\r\n private async mapCTile(tile: Cesium.Cesium3DTile): Promise<void> {\r\n if (this.sourceId) {\r\n let content = tile.content;\r\n for (let i = 0; i < content.featuresLength; i++) {\r\n let feature: ICesiumFeatureExtended = <ICesiumFeatureExtended>content.getFeature(i);\r\n if (feature._counter == null) {\r\n feature._counter = this.count;\r\n }\r\n if (feature._orgColor == null) {\r\n feature._orgColor = feature.color;\r\n }\r\n this.featureQueue.push(feature);\r\n }\r\n this.processQueue();\r\n }\r\n }\r\n\r\n private async processQueue(): Promise<void> {\r\n if (this.processingQueue >= MAX_BATCHES) {\r\n return;\r\n }\r\n else if (this.Disposed) {\r\n return;\r\n }\r\n this.processingQueue += 1;\r\n \r\n let batch: ICesiumFeatureExtended[] = [];\r\n let rerun: boolean = false;\r\n \r\n try {\r\n batch = this.getVisualsForBatch();\r\n \r\n if (batch.length > 0) {\r\n await this.mapTileBatch(batch);\r\n }\r\n \r\n if (this.totalLoaded > 8000) {\r\n rerun = this.removeFarAwayBatch();\r\n }\r\n else {\r\n rerun = this.featureQueue.length > 0 && batch.length > 0;\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n finally {\r\n setTimeout(() => {\r\n this.processingQueue -= 1;\r\n if (rerun) {\r\n this.processQueue();\r\n }\r\n }, BATCH_DELAY);\r\n }\r\n }\r\n\r\n private getVisualsForBatch(): ICesiumFeatureExtended[] {\r\n const batch: ICesiumFeatureExtended[] = [];\r\n const features = this.featureQueue;\r\n const bounds = this.monitor.GetBounds();\r\n const rect = bounds?.east ? new Cesium.Rectangle(\r\n Cesium.Math.toRadians(bounds.west), \r\n Cesium.Math.toRadians(bounds.south), \r\n Cesium.Math.toRadians(bounds.east), \r\n Cesium.Math.toRadians(bounds.north)\r\n ) : null;\r\n\r\n if (rect) {\r\n for (let i = 0; i < features.length; i++) {\r\n const feature = features[i];\r\n if (feature) {\r\n const featureLon = feature.getProperty(\"cesium#longitude\");\r\n const featureLat = feature.getProperty(\"cesium#latitude\");\r\n if (featureLon && featureLat) {\r\n const carto = Cesium.Cartographic.fromDegrees(featureLon, featureLat, 0);\r\n const isIn = Cesium.Rectangle.contains(rect, carto);\r\n if (isIn) {\r\n const isClose = this.getIsVisualWithinRange(feature, MAX_RANGE);\r\n if (isClose) {\r\n batch.push(feature);\r\n if (batch.length >= BATCH_SIZE) {\r\n return batch;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return batch;\r\n }\r\n\r\n private getIsVisualWithinRange(visual: ICesiumFeatureExtended, range: number): boolean {\r\n const featureLon = visual.getProperty(\"cesium#longitude\");\r\n const featureLat = visual.getProperty(\"cesium#latitude\");\r\n if (featureLon && featureLat) {\r\n const pos = Cesium.Cartesian3.fromDegrees(featureLon, featureLat, 0);\r\n const camPoint = this.monitor.GetTarget();\r\n const camPos = camPoint?.latitude ? Cesium.Cartesian3.fromDegrees(camPoint.longitude, camPoint.latitude, camPoint.altitude) : null;\r\n if (camPos && Cartes.ValidateCartes3(camPos) && Cartes.ValidateCartes3(pos)) {\r\n let distance = Cesium.Cartesian3.distance(pos, camPos);\r\n if (distance != null && distance <= range) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private async mapTileBatch(features: ICesiumFeatureExtended[]): Promise<void> {\r\n const featureIds: string[] = [];\r\n const featureMap: ICesiumFeatureExtended[] = [];\r\n \r\n for (let i = 0; i < features.length; i++) {\r\n const feature = features[i];\r\n const featureId = feature.getProperty(\"elementId\");\r\n if (featureId) {\r\n featureMap.push(feature);\r\n featureIds.push(featureId + \"\");\r\n }\r\n\r\n const index = this.featureQueue.findIndex(x => x._counter == feature._counter);\r\n if (index > -1) {\r\n this.featureQueue.splice(index, 1);\r\n }\r\n }\r\n\r\n const api = this.apiGetter.getApi();\r\n const bIds = await EntitySource.GetEntityIdsBySourceKeys(api, this.sourceId, featureIds);\r\n\r\n for (let i = 0; i < featureIds.length; i++) {\r\n const id = featureIds[i];\r\n let bId = bIds[id];\r\n if (!bId) {\r\n bId = ObjectUtils.UId();\r\n }\r\n const feature = featureMap[i];\r\n if (this.item.ghostLoading == true) {\r\n feature.color = feature._orgColor;\r\n }\r\n const rego = {\r\n entityId: bId,\r\n menuItemId: this.item.id,\r\n priority: 0,\r\n visual: feature,\r\n entityTypeId: this.entityTypeId,\r\n sourceId: this.sourceId\r\n };\r\n this.visualsManager.Add(rego);\r\n this._loadedCesiumEntities[bId] = rego;\r\n }\r\n }\r\n\r\n private removeFarAwayBatch(): boolean {\r\n let removed = 0;\r\n let keys = Object.keys(this._loadedCesiumEntities);\r\n for (let i = 0; i < keys.length; i++) {\r\n let key = keys[i];\r\n let rego = this._loadedCesiumEntities[key];\r\n if (rego) {\r\n if (!this.getIsVisualWithinRange(rego.visual as ICesiumFeatureExtended, MAX_RANGE)) {\r\n this.visualsManager.Remove(rego.entityId, this.item.id);\r\n this._loadedCesiumEntities[key] = <any>null;\r\n delete this._loadedCesiumEntities[key];\r\n this.totalLoaded -= 1;\r\n removed += 1;\r\n \r\n if (removed >= BATCH_SIZE) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n \r\n return removed > 0;\r\n }\r\n }\r\n}","import { BruceApi, BruceEvent, MenuItem, ObjectUtils } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { EntitiesRenderManager } from \"./render-managers/entities/entities-render-manager\";\nimport { EntitiesLoadedRenderManager } from \"./render-managers/entities/entities-loaded-render-manager\";\nimport { RenderManager } from \"./render-managers/render-manager\";\nimport { VisualsRegister } from \"./visuals-register\";\nimport { EntitiesIdsRenderManager } from \"./render-managers/entities/entities-ids-render-manager\";\nimport { EntityRenderManager } from \"./render-managers/entities/entity-render-manager\";\nimport { TilesetCadRenderManager } from \"./render-managers/tilesets/tileset-cad-render-manager\";\nimport { SharedGetters } from \"./render-managers/common/shared-getters\";\nimport { CesiumViewMonitor } from \"../viewer/cesium-view-monitor\";\nimport { TilesetOsmRenderManager } from \"./render-managers/tilesets/tileset-osm-render-manager\";\n\ninterface IRenderedItem {\n id: string;\n type: MenuItem.EType;\n childIds: string[];\n item: MenuItem.IItem;\n renderManager: RenderManager.Type;\n}\n\n/**\n * Utility to keep track of enabled menu items within a Cesium viewer.\n */\nexport namespace MenuItemManager {\n export interface IMenuItemUpdate {\n itemId: string;\n isEnabling: boolean;\n }\n\n export interface IRenderParams {\n apiGetter: BruceApi.IGetter;\n item: MenuItem.IItem;\n }\n\n export class Manager {\n private viewer: Cesium.Viewer;\n public get Viewer(): Cesium.Viewer {\n return this.viewer;\n }\n private items: IRenderedItem[] = [];\n private visualsRegister: VisualsRegister.Register;\n public get VisualsRegister(): VisualsRegister.Register {\n return this.visualsRegister;\n }\n private onUpdate: BruceEvent<IMenuItemUpdate> = <any>null;\n public get OnUpdate(): BruceEvent<IMenuItemUpdate> {\n if (!this.onUpdate) {\n this.onUpdate = new BruceEvent<IMenuItemUpdate>();\n }\n return this.onUpdate;\n }\n private sharedGetters: SharedGetters.Cache;\n private sharedMonitor: CesiumViewMonitor;\n\n \n public constructor(viewer: Cesium.Viewer, visualsRegister?: VisualsRegister.Register) {\n this.viewer = viewer;\n if (!visualsRegister) {\n visualsRegister = new VisualsRegister.Register(viewer);\n }\n this.visualsRegister = visualsRegister;\n this.sharedGetters = new SharedGetters.Cache();\n this.sharedMonitor = new CesiumViewMonitor(this.viewer);\n }\n \n /**\n * Renders a given menu item and all ids children.\n * Will return the enabled item id.\n * @param params\n * @param recursive\n * @returns \n */\n public async RenderItem(params: IRenderParams, recursive: boolean = true): Promise<string> {\n let rItem = this.items.find(x => x.id == params.item.id);\n if (!rItem) {\n rItem = {\n id: params.item.id ?? ObjectUtils.UId(),\n childIds: [],\n item: params.item,\n renderManager: <any>null,\n type: params.item.Type\n }\n this.items.push(rItem);\n\n switch (params.item.Type) {\n case MenuItem.EType.Entities:\n rItem.renderManager = new EntitiesRenderManager.Manager(\n this.viewer, \n this.visualsRegister, \n params.apiGetter, \n this.sharedMonitor,\n <MenuItem.Item.IBruceEntities>params.item,\n this.sharedGetters\n );\n break;\n case MenuItem.EType.EntitiesLoaded:\n rItem.renderManager = new EntitiesLoadedRenderManager.Manager(\n this.viewer, \n this.visualsRegister, \n params.apiGetter, \n this.sharedMonitor, \n <MenuItem.Item.IEntitiesLoaded>params.item\n );\n break;\n case MenuItem.EType.EntitiesIds:\n rItem.renderManager = new EntitiesIdsRenderManager.Manager(\n this.viewer, \n this.visualsRegister, \n params.apiGetter, \n this.sharedMonitor,\n <MenuItem.Item.IEntityIds>params.item\n );\n break;\n case MenuItem.EType.Entity:\n rItem.renderManager = new EntityRenderManager.Manager(\n this.viewer, \n this.visualsRegister, \n params.apiGetter, \n this.sharedMonitor, \n <MenuItem.Item.IBruceEntity>params.item\n );\n break;\n case MenuItem.EType.CadTileset:\n rItem.renderManager = new TilesetCadRenderManager.Manager(this.viewer, this.visualsRegister, params.apiGetter, <MenuItem.Item.ICadTileset>params.item);\n break;\n case MenuItem.EType.Osm:\n rItem.renderManager = new TilesetOsmRenderManager.Manager(this.viewer, this.visualsRegister, params.apiGetter, this.sharedMonitor, <MenuItem.Item.IOsm>params.item);\n break;\n case MenuItem.EType.PointCloud:\n // TODO;\n break;\n case MenuItem.EType.EntityTileset:\n // TODO;\n break;\n case MenuItem.EType.Kml:\n // TODO;\n break;\n // Any \"none\" type can be ignored. These are just containers for other items.\n case MenuItem.EType.None:\n break;\n default:\n console.error(\"Menu item type is not implemented.\", params.item.Type);\n }\n \n if (rItem.renderManager) {\n await rItem.renderManager.Init();\n }\n }\n if (params.item.Children && recursive) {\n for (let i = 0; i < params.item.Children.length; i++) {\n const childId = await this.RenderItem({\n ...params,\n item: params.item.Children[i]\n });\n rItem.childIds.push(childId);\n }\n }\n this.onUpdate?.Trigger({ isEnabling: true, itemId: rItem.id });\n return rItem.id;\n }\n \n /**\n * Disables a menu item by ids id.\n * This will disable all children as well.\n * @param id \n * @param recursive\n */\n public async RemoveItemById(id: string, recursive: boolean = true): Promise<void> {\n const item = this.items.find(x => x.id === id);\n if (item) {\n if (recursive) {\n for (let i = 0; i < item.childIds.length; i++) {\n const child = this.items.find(x => x.id === item.childIds[i]);\n if (child) {\n await this.RemoveItemById(child.id);\n }\n }\n }\n try {\n item.renderManager?.Dispose();\n }\n catch (e) {\n console.error(e);\n }\n this.items = this.items.filter(x => x.id !== id);\n this.onUpdate?.Trigger({ isEnabling: false, itemId: item.id });\n }\n }\n\n public GetEnabledItemIds(): string[] {\n return this.items.map(x => x.id);\n }\n }\n}","import { BruceApi, Entity, MenuItem, ObjectUtils, ProjectView, ProjectViewBookmark, Tileset, ZoomControl } from \"bruce-models\";\r\nimport { MenuItemManager } from \"./menu-item-manager\";\r\n\r\n/**\r\n * Utility to help generate menu items for rendering various data.\r\n */\r\nexport namespace RenderHelper {\r\n export interface IParams {\r\n apiGetter: BruceApi.IGetter;\r\n manager: MenuItemManager.Manager;\r\n }\r\n\r\n export async function RenderEntities(params: IParams, entityIds: string[]): Promise<string> {\r\n const item: MenuItem.Item.IEntityIds = {\r\n Caption: \"Rendering Loaded Entities\",\r\n Type: <MenuItem.EType><any>MenuItem.EType.EntitiesLoaded,\r\n id: ObjectUtils.UId(),\r\n Children: [],\r\n BruceEntity: {\r\n EntityIds: entityIds\r\n },\r\n CameraZoomSettings: [\r\n {\r\n DisplayType: ZoomControl.EDisplayType.Model3D,\r\n LODCategoryID: \"glb\",\r\n LODLevel: 0,\r\n MaxZoom: 100000,\r\n MinZoom: 0,\r\n StyleID: 0 // 0 = Attempt to get entity type's default.\r\n }\r\n ]\r\n };\r\n return await params.manager.RenderItem({\r\n apiGetter: params.apiGetter,\r\n item: item\r\n });\r\n }\r\n\r\n export async function RenderEntityTypes(params: IParams, typeIds: string[]): Promise<string[]> {\r\n const renderedItemIds: string[] = [];\r\n for (let i = 0; i < typeIds.length; i++) {\r\n const typeId = typeIds[i];\r\n const menuItem = MenuItem.CreateFromTypeId(typeId, 0);\r\n const itemId = await params.manager.RenderItem({\r\n apiGetter: params.apiGetter,\r\n item: menuItem\r\n });\r\n renderedItemIds.push(itemId);\r\n }\r\n return renderedItemIds;\r\n }\r\n\r\n export async function RenderEntityFilter(params: IParams, filter: Entity.Filter.V1.IFilter): Promise<string> {\r\n const item: MenuItem.Item.IBruceEntities = {\r\n BruceEntity: {\r\n \"EntityType.ID\": <string>filter.entityTypeId,\r\n Filter: filter\r\n },\r\n Type: MenuItem.EType.Entities,\r\n Caption: \"Rendering Filtered Entities\",\r\n CameraZoomSettings: [\r\n {\r\n DisplayType: ZoomControl.EDisplayType.Model3D,\r\n LODCategoryID: \"glb\",\r\n LODLevel: 0,\r\n MaxZoom: 100000,\r\n MinZoom: 0,\r\n StyleID: 0 // 0 = Attempt to get entity type's default.\r\n }\r\n ],\r\n id: ObjectUtils.UId(),\r\n Children: [],\r\n showAllLayers: true,\r\n showAllLayersExcludeBelow: false,\r\n tagIds: []\r\n };\r\n return await params.manager.RenderItem({\r\n apiGetter: params.apiGetter,\r\n item: item\r\n });\r\n }\r\n\r\n export async function RenderMenuItems(params: IParams, menuItems: MenuItem.IItem[]): Promise<string[]> {\r\n const renderedItemIds: string[] = [];\r\n for (let i = 0; i < menuItems.length; i++) {\r\n const menuItem = menuItems[i];\r\n const itemId = await params.manager.RenderItem({\r\n apiGetter: params.apiGetter,\r\n item: menuItem\r\n });\r\n renderedItemIds.push(itemId);\r\n }\r\n return renderedItemIds;\r\n }\r\n\r\n export async function RenderTileset(params: IParams, tilesetId: string): Promise<string> {\r\n const api = params.apiGetter.getApi();\r\n const tileset = await Tileset.Get(api, tilesetId);\r\n if (tileset.type == Tileset.EType.Cad) {\r\n const menuItem: MenuItem.Item.ICadTileset = {\r\n Caption: \"Rendering Tileset\",\r\n FlyTo: true,\r\n id: ObjectUtils.UId(),\r\n tileset: {\r\n TilesetID: tilesetId\r\n },\r\n Type: MenuItem.EType.CadTileset,\r\n styleId: 0,\r\n Children: []\r\n };\r\n return await params.manager.RenderItem({\r\n item: menuItem,\r\n apiGetter: params.apiGetter\r\n });\r\n }\r\n else {\r\n throw(new Error(\"Tileset type not supported.\"));\r\n }\r\n }\r\n\r\n export async function RenderBookmarkItems(params: IParams, viewId: string, bookmarkId: string): Promise<string[]> {\r\n const api = params.apiGetter.getApi();\r\n const view = await ProjectView.Get(api, viewId);\r\n const bookmark = await ProjectViewBookmark.Get(api, viewId, bookmarkId);\r\n\r\n if (view.DataVersion != bookmark.DataVersion) {\r\n throw new Error(\"View and bookmark settings version mismatch.\");\r\n }\r\n\r\n let enabledIds: string[] = [];\r\n let menuItems: MenuItem.IItem[] = [];\r\n \r\n const version = view.DataVersion;\r\n if (view.Settings && bookmark.Settings) {\r\n if (version === 2) {\r\n const vSettings = view.Settings as ProjectView.V2.ISettings;\r\n const bSettings = bookmark.Settings as ProjectViewBookmark.V2.ISettings;\r\n menuItems = vSettings.menuItems;\r\n enabledIds = bSettings.menuItemIds;\r\n }\r\n else {\r\n const vSettings = view.Settings as ProjectView.V1.ISettings;\r\n const bSettings = bookmark.Settings as ProjectViewBookmark.V1.ISettings;\r\n menuItems = vSettings.LayersMenu;\r\n enabledIds = bSettings.selectedItemIds;\r\n }\r\n }\r\n \r\n const renderedItemIds: string[] = [];\r\n if (menuItems?.length && enabledIds?.length) {\r\n const traverseItems = async (item: MenuItem.IItem) => {\r\n if (enabledIds.includes(item.id)) {\r\n const itemId = await params.manager.RenderItem({\r\n item: item,\r\n apiGetter: params.apiGetter\r\n });\r\n renderedItemIds.push(itemId);\r\n }\r\n if (item.Children) {\r\n for (let i = 0; i < item.Children.length; i++) {\r\n await traverseItems(item.Children[i]);\r\n }\r\n }\r\n }\r\n for (let i = 0; i < menuItems.length; i++) {\r\n await traverseItems(menuItems[i]);\r\n }\r\n }\r\n return renderedItemIds;\r\n }\r\n}","import { ProjectViewTile, BruceApi, ProjectView, ProjectViewBookmark, ProjectViewLegacyTile, Tileset, TilesetExtTerrainTiles, TilesetMapTiles, TilesetExtMapTiles } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\n\r\nconst DEFAULT_BING_KEY = \"AqL0uYT5T84jiJeX55_b9zJeeP3MX2p1WLOHH4ljIEPZ7ZL2M81bYLzyYeSwuzzl\";\r\nconst DEFAULT_MAPBOX_KEY = \"pk.eyJ1IjoiYWxleHRodW5kZXIiLCJhIjoiY2psbHJxbnN5MTBvbzNxczZwMHNpeTI0MCJ9.fdoj2QW_7n8RV4e0NCFgZA\";\r\n\r\nconst re = /[\\0-\\x1F\\x7F-\\x9F\\xAD\\u0378\\u0379\\u037F-\\u0383\\u038B\\u038D\\u03A2\\u0528-\\u0530\\u0557\\u0558\\u0560\\u0588\\u058B-\\u058E\\u0590\\u05C8-\\u05CF\\u05EB-\\u05EF\\u05F5-\\u0605\\u061C\\u061D\\u06DD\\u070E\\u070F\\u074B\\u074C\\u07B2-\\u07BF\\u07FB-\\u07FF\\u082E\\u082F\\u083F\\u085C\\u085D\\u085F-\\u089F\\u08A1\\u08AD-\\u08E3\\u08FF\\u0978\\u0980\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09FC-\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A76-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF2-\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B55\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B78-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BFB-\\u0C00\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C34\\u0C3A-\\u0C3C\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5A-\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C77\\u0C80\\u0C81\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDD\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0D01\\u0D04\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D45\\u0D49\\u0D4F-\\u0D56\\u0D58-\\u0D5F\\u0D64\\u0D65\\u0D76-\\u0D78\\u0D80\\u0D81\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DF1\\u0DF5-\\u0E00\\u0E3B-\\u0E3E\\u0E5C-\\u0E80\\u0E83\\u0E85\\u0E86\\u0E89\\u0E8B\\u0E8C\\u0E8E-\\u0E93\\u0E98\\u0EA0\\u0EA4\\u0EA6\\u0EA8\\u0EA9\\u0EAC\\u0EBA\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F48\\u0F6D-\\u0F70\\u0F98\\u0FBD\\u0FCD\\u0FDB-\\u0FFF\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u137D-\\u137F\\u139A-\\u139F\\u13F5-\\u13FF\\u169D-\\u169F\\u16F1-\\u16FF\\u170D\\u1715-\\u171F\\u1737-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17DE\\u17DF\\u17EA-\\u17EF\\u17FA-\\u17FF\\u180F\\u181A-\\u181F\\u1878-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191D-\\u191F\\u192C-\\u192F\\u193C-\\u193F\\u1941-\\u1943\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DB-\\u19DD\\u1A1C\\u1A1D\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1A9F\\u1AAE-\\u1AFF\\u1B4C-\\u1B4F\\u1B7D-\\u1B7F\\u1BF4-\\u1BFB\\u1C38-\\u1C3A\\u1C4A-\\u1C4C\\u1C80-\\u1CBF\\u1CC8-\\u1CCF\\u1CF7-\\u1CFF\\u1DE7-\\u1DFB\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FC5\\u1FD4\\u1FD5\\u1FDC\\u1FF0\\u1FF1\\u1FF5\\u1FFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u2072\\u2073\\u208F\\u209D-\\u209F\\u20BB-\\u20CF\\u20F1-\\u20FF\\u218A-\\u218F\\u23F4-\\u23FF\\u2427-\\u243F\\u244B-\\u245F\\u2700\\u2B4D-\\u2B4F\\u2B5A-\\u2BFF\\u2C2F\\u2C5F\\u2CF4-\\u2CF8\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D71-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E3C-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u2FFF\\u3040\\u3097\\u3098\\u3100-\\u3104\\u312E-\\u3130\\u318F\\u31BB-\\u31BF\\u31E4-\\u31EF\\u321F\\u32FF\\u4DB6-\\u4DBF\\u9FCD-\\u9FFF\\uA48D-\\uA48F\\uA4C7-\\uA4CF\\uA62C-\\uA63F\\uA698-\\uA69E\\uA6F8-\\uA6FF\\uA78F\\uA794-\\uA79F\\uA7AB-\\uA7F7\\uA82C-\\uA82F\\uA83A-\\uA83F\\uA878-\\uA87F\\uA8C5-\\uA8CD\\uA8DA-\\uA8DF\\uA8FC-\\uA8FF\\uA954-\\uA95E\\uA97D-\\uA97F\\uA9CE\\uA9DA-\\uA9DD\\uA9E0-\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A\\uAA5B\\uAA7C-\\uAA7F\\uAAC3-\\uAADA\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F-\\uABBF\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBC2-\\uFBD2\\uFD40-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFE\\uFDFF\\uFE1A-\\uFE1F\\uFE27-\\uFE2F\\uFE53\\uFE67\\uFE6C-\\uFE6F\\uFE75\\uFEFD-\\uFF00\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFDF\\uFFE7\\uFFEF-\\uFFFB\\uFFFE\\uFFFF]/g;\r\n\r\n/**\r\n * Prepares a legacy imagery name for comparison.\r\n * Legacy data did not have ids... we do what we can.\r\n * @param name \r\n * @returns \r\n */\r\nfunction prepLegacyName(name: string): string {\r\n if (!name) {\r\n return \"\";\r\n }\r\n name = name.replace(/\\s/g, \"\");\r\n name = name.replace(re, \"\")\r\n name = name.toLowerCase();\r\n if (name === \"cwt\") {\r\n name = \"cesiumworldterrain\";\r\n }\r\n return name;\r\n}\r\n\r\n/**\r\n * Constructs an terrain provider for a default terrain type.\r\n * Warning: This does not add it to the viewer.\r\n * @param id \r\n * @returns \r\n */\r\nfunction renderDefaultTerrTile(id: ProjectViewTile.EDefaultTerrain): Cesium.TerrainProvider {\r\n let provider: Cesium.TerrainProvider;\r\n switch (id) {\r\n case ProjectViewTile.EDefaultTerrain.CesiumWorldTerrain:\r\n provider = Cesium.createWorldTerrain({\r\n requestVertexNormals: true,\r\n requestWaterMask: false\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultTerrain.FlatTerrain:\r\n provider = <any>new Cesium.EllipsoidTerrainProvider();\r\n break;\r\n case ProjectViewTile.EDefaultTerrain.LINZ:\r\n provider = <any>new Cesium.CesiumTerrainProvider({\r\n url: \"https://s3-ap-southeast-2.amazonaws.com/digitalnewzealand/PROD/Tilesets/nz-dem\",\r\n requestVertexNormals: true,\r\n });\r\n break;\r\n }\r\n return provider;\r\n}\r\n\r\n/**\r\n * Maps a legacy terrain's name to a default terrain id.\r\n * @param name \r\n * @returns \r\n */\r\nfunction legacyTerrIdToDefaultId(name: string): ProjectViewTile.EDefaultTerrain {\r\n name = prepLegacyName(name);\r\n switch (name) {\r\n case \"cesiumworldterrain\":\r\n return ProjectViewTile.EDefaultTerrain.CesiumWorldTerrain;\r\n case \"linz\":\r\n return ProjectViewTile.EDefaultTerrain.LINZ;\r\n case \"flatterrain\":\r\n return ProjectViewTile.EDefaultTerrain.FlatTerrain;\r\n }\r\n}\r\n\r\n/**\r\n * Returns if a given legacy terrain's name correspondings to a default source.\r\n * @param name \r\n * @returns \r\n */\r\nfunction isLegacyTerrainDefault(name: string): boolean {\r\n name = legacyTerrIdToDefaultId(name);\r\n return ProjectViewTile.DefaultTerrains.find(x => x.id == name) != null;\r\n}\r\n\r\n/**\r\n * Returns a best attempt at a unique id from a given legacy terrain source.\r\n * @param source \r\n * @returns \r\n */\r\nfunction createLegacyTerrId(source: ProjectViewLegacyTile.ITerrainSource): string {\r\n if (!source) {\r\n return \"\";\r\n }\r\n if (isLegacyTerrainDefault(source.Name)) {\r\n return source.Name;\r\n }\r\n if (source.SourceUrl) {\r\n return source.SourceUrl;\r\n }\r\n return \"\";\r\n}\r\n\r\n/**\r\n * Returns a best attempt at a unique id from a given legacy imagery source.\r\n * @param source \r\n * @returns \r\n */\r\nfunction createLegacyImageryId(source: ProjectViewLegacyTile.IMapSource): string {\r\n if (!source) {\r\n return \"\";\r\n }\r\n if (isLegacyImageryDefault(source.Name)) {\r\n return source.Name;\r\n }\r\n if (source.SourceUrl) {\r\n return source.SourceUrl;\r\n }\r\n return \"\";\r\n}\r\n\r\n/**\r\n * Turns Cesium collection of enabled imageries into an array.\r\n * @param viewer \r\n * @returns \r\n */\r\nfunction gatherEnabledImageries(viewer: Cesium.Viewer): Cesium.ImageryLayer[] {\r\n const collection = viewer.imageryLayers;\r\n const layers: Cesium.ImageryLayer[] = [];\r\n for (let i = 0; i < collection.length; i++) {\r\n const layer = collection.get(i);\r\n layers.push(layer);\r\n }\r\n return layers;\r\n}\r\n\r\n/**\r\n * Constructs an imagery provider for a default imagery type.\r\n * Warning: This does not add it to the viewer.\r\n * @param id \r\n * @returns \r\n */\r\nfunction renderDefaultMapTile(id: ProjectViewTile.EDefaultImagery): Cesium.ImageryProvider {\r\n let provider: Cesium.ImageryProvider;\r\n switch (id) {\r\n case ProjectViewTile.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 ProjectViewTile.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 ProjectViewTile.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 ProjectViewTile.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 ProjectViewTile.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 ProjectViewTile.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 ProjectViewTile.EDefaultImagery.EsriWorldImagery:\r\n provider = new Cesium.ArcGisMapServerImageryProvider({\r\n url:\"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer\",\r\n enablePickFeatures: false\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.EsriWorldStreetMap:\r\n provider = new Cesium.ArcGisMapServerImageryProvider({\r\n url:\"https://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer\",\r\n enablePickFeatures: false\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.EsriNationalGeographic:\r\n provider = new Cesium.ArcGisMapServerImageryProvider({\r\n url:\"https://services.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/\",\r\n enablePickFeatures: false\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.OpenStreetMap:\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: \"https://a.tile.openstreetmap.org/\"\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.StamenWaterColor:\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: \"https://stamen-tiles.a.ssl.fastly.net/watercolor/\"\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.StamenToner:\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: \"https://stamen-tiles.a.ssl.fastly.net/toner/\"\r\n });\r\n break;\r\n case ProjectViewTile.EDefaultImagery.Grid:\r\n provider = new Cesium.GridImageryProvider({\r\n tilingScheme: new Cesium.GeographicTilingScheme(),\r\n cells: 0,\r\n color: Cesium.Color.fromCssColorString(\"rgb(97, 151, 237)\"),\r\n glowColor: Cesium.Color.fromCssColorString(\"rgb(54, 54, 54)\"),\r\n glowWidth: 4,\r\n backgroundColor: Cesium.Color.TRANSPARENT,\r\n tileWidth: 256,\r\n tileHeight: 256,\r\n canvasSize: 256\r\n });\r\n break;\r\n }\r\n return provider;\r\n}\r\n\r\n/**\r\n * Maps a legacy imagery's name to a default imagery id.\r\n * @param name \r\n * @returns \r\n */\r\nfunction legacyMapIdToDefaultId(name: string): ProjectViewTile.EDefaultImagery {\r\n name = prepLegacyName(name);\r\n switch (name) {\r\n case \"bingmapsaerial\":\r\n return ProjectViewTile.EDefaultImagery.BingMapsAerial;\r\n case \"bingmapsaerialwithlabels\":\r\n return ProjectViewTile.EDefaultImagery.BingMapsAerialWithLabels;\r\n case \"bingmapsroads\":\r\n return ProjectViewTile.EDefaultImagery.BingMapsRoads;\r\n case \"mapboxsatellite\":\r\n return ProjectViewTile.EDefaultImagery.MapboxSatellite;\r\n case \"mapboxstreets\":\r\n return ProjectViewTile.EDefaultImagery.MapBoxStreets;\r\n case \"mapboxstreetsclassic\":\r\n return ProjectViewTile.EDefaultImagery.MapBoxStreetsClassic;\r\n case \"esriworldimagery\":\r\n return ProjectViewTile.EDefaultImagery.EsriWorldImagery;\r\n case \"esriworldstreetmap\":\r\n return ProjectViewTile.EDefaultImagery.EsriWorldStreetMap;\r\n case \"esrinationalgeographic\":\r\n return ProjectViewTile.EDefaultImagery.EsriNationalGeographic;\r\n case \"openstreetmap\":\r\n return ProjectViewTile.EDefaultImagery.OpenStreetMap;\r\n case \"stamenwatercolor\":\r\n return ProjectViewTile.EDefaultImagery.StamenWaterColor;\r\n case \"stamentoner\":\r\n return ProjectViewTile.EDefaultImagery.StamenToner;\r\n case \"grid\":\r\n return ProjectViewTile.EDefaultImagery.Grid;\r\n }\r\n}\r\n\r\n/**\r\n * Returns if a given legacy imagery's name correspondings to a default source.\r\n * @param name \r\n * @returns \r\n */\r\nfunction isLegacyImageryDefault(name: string): boolean {\r\n name = legacyMapIdToDefaultId(name);\r\n return ProjectViewTile.DefaultImagery.find(x => x.id == name) != null;\r\n}\r\n\r\nexport namespace TileRenderEngine {\r\n /**\r\n * Legacy data did name comparisons instead of ids.\r\n * We need to strip spacing, remove special characters, and make lowercase before comparison...\r\n * @param nameA \r\n * @param nameB \r\n */\r\n export function CompareLegacyNames(nameA: string, nameB: string): boolean {\r\n nameA = prepLegacyName(nameA);\r\n nameB = prepLegacyName(nameB);\r\n return nameA === nameB;\r\n }\r\n\r\n export namespace Map {\r\n export namespace V1 {\r\n export interface ILayerExt extends Cesium.ImageryLayer {\r\n _bId?: string;\r\n _bName?: string;\r\n }\r\n \r\n export interface IViewParams {\r\n bookmarkId: string;\r\n viewId: string;\r\n apiGetter: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n \r\n // TODO: How is render engine supposed to know about this?\r\n // We need a generic way for this information be feed from clients.\r\n ignoreIds?: string[];\r\n }\r\n \r\n export interface IParams {\r\n data: ProjectViewLegacyTile.IMapSource;\r\n apiGetter: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n }\r\n \r\n export function Render(params: IParams): ILayerExt {\r\n const enabled: ILayerExt[] = gatherEnabledImageries(params.viewer);\r\n const tile = params.data;\r\n const bId = createLegacyImageryId(tile);\r\n \r\n let layer: ILayerExt = <ILayerExt>enabled.find(x => x._bId == bId);\r\n if (layer) {\r\n // Already exists.\r\n }\r\n else if (isLegacyImageryDefault(tile.Name)) {\r\n const defaultId = legacyMapIdToDefaultId(tile.Name);\r\n const provider: Cesium.ImageryProvider = renderDefaultMapTile(defaultId);\r\n if (provider) {\r\n layer = <ILayerExt>new Cesium.ImageryLayer(provider);\r\n }\r\n }\r\n else if (tile.SourceUrl) {\r\n let provider: Cesium.ImageryProvider = <any>null;\r\n let min = tile.Minimum;\r\n let max = tile.Maximum;\r\n if (min != undefined && min <= -1) {\r\n min = undefined;\r\n }\r\n if (max != undefined && max <= -1) {\r\n max = undefined;\r\n }\r\n \r\n switch (tile.Type) {\r\n case \"BruceImagery\":\r\n provider = new Cesium.UrlTemplateImageryProvider({\r\n url: tile.SourceUrl,\r\n tileHeight: 256,\r\n tileWidth: 256\r\n });\r\n break;\r\n case \"ArcGisImagery\":\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: tile.SourceUrl,\r\n fileExtension: 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 layer._bName = tile.Name;\r\n if (!params.viewer.imageryLayers.contains(layer)) {\r\n params.viewer.imageryLayers.add(layer);\r\n }\r\n }\r\n return layer;\r\n }\r\n \r\n export async function RenderView(params: IViewParams): Promise<void> {\r\n const api = params.apiGetter.getApi();\r\n \r\n const view = await ProjectView.Get(api, params.viewId) as ProjectView.V1.IView;\r\n let bookmark: ProjectViewBookmark.V1.IBookmark = <any>null;\r\n if (params.bookmarkId) {\r\n bookmark = await ProjectViewBookmark.Get(api, params.viewId, params.bookmarkId) as ProjectViewBookmark.V1.IBookmark;\r\n }\r\n \r\n const vSettings = view.Settings;\r\n const bSettings = bookmark?.Settings;\r\n \r\n const data: ProjectViewLegacyTile.IMapSource[] = [];\r\n const dataNames: string[] = [];\r\n if (bSettings?.imagery) {\r\n for (let i = 0; i < bSettings.imagery.length; i++) {\r\n const source = bSettings.imagery[i];\r\n dataNames.push(source.title);\r\n }\r\n }\r\n else if (vSettings?.DefaultMapTiles) {\r\n dataNames.push(vSettings.DefaultMapTiles);\r\n }\r\n const tiles = vSettings?.CesiumMapSources ?? [];\r\n await ProjectViewLegacyTile.MergeMapTemplateData(params.apiGetter, tiles, vSettings?.CesiumMapSources == null);\r\n \r\n for (let i = 0; i < dataNames.length; i++) {\r\n const name = dataNames[i];\r\n for (let j = 0; j < tiles.length; j++) {\r\n const tile = tiles[j];\r\n if (CompareLegacyNames(tile.Name, name)) {\r\n data.push(tile);\r\n break;\r\n }\r\n } \r\n }\r\n \r\n let enabled: ILayerExt[] = gatherEnabledImageries(params.viewer);\r\n const layers: Cesium.ImageryLayer[] = [];\r\n \r\n // Gather layers we want to render.\r\n // Any new layer is added to viewer at the bottom.\r\n if (params.ignoreIds) {\r\n for (let i = 0; i < params.ignoreIds.length; i++) {\r\n const id = params.ignoreIds[i];\r\n const layer = enabled.find((x) => {\r\n const layer = x as ILayerExt;\r\n if (layer._bId === id) {\r\n return true;\r\n }\r\n });\r\n if (layer) {\r\n layers.push(layer);\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < data.length; i++) {\r\n const tile = data[i];\r\n const layer = Render({\r\n apiGetter: params.apiGetter,\r\n viewer: params.viewer,\r\n data: tile,\r\n });\r\n if (layer) {\r\n layers.push(layer);\r\n }\r\n }\r\n \r\n // Sort currently enabled (after new ones added) to match desired order.\r\n enabled = gatherEnabledImageries(params.viewer);\r\n enabled.sort((a, b) => {\r\n const indexA = layers.indexOf(a);\r\n const indexB = layers.indexOf(b);\r\n if (indexA < 0 && indexB < 0) {\r\n return 0;\r\n }\r\n if (indexA < 0) {\r\n return 1;\r\n }\r\n if (indexB < 0) {\r\n return -1;\r\n }\r\n return indexA - indexB;\r\n });\r\n \r\n // Move enabled layers to match desired order.\r\n // Remove any layers that aren't in enabled list.\r\n for (let i = 0; i < enabled.length; i++) {\r\n const layer = enabled[i];\r\n if (layers.includes(layer)) {\r\n params.viewer.imageryLayers.raiseToTop(layer);\r\n }\r\n else {\r\n params.viewer.imageryLayers.remove(layer);\r\n }\r\n }\r\n }\r\n }\r\n\r\n export namespace V2 {\r\n export interface IProviderExt extends Cesium.ImageryLayer {\r\n _bMeta?: ProjectViewTile.ITileMeta;\r\n }\r\n\r\n export interface IParams {\r\n apiGetter: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n tiles: ProjectViewTile.IBookmarkImagery[];\r\n }\r\n\r\n export async function GetOrCreateLayer(\r\n viewer: Cesium.Viewer, \r\n apiGetter: BruceApi.IGetter, \r\n meta: ProjectViewTile.ITileMeta\r\n ): Promise<Cesium.ImageryLayer> {\r\n // Don't create a new layer if one already exists.\r\n const enabled = gatherEnabledImageries(viewer);\r\n for (let i = 0; i < enabled.length; i++) {\r\n const layer = enabled[i];\r\n const layerMeta = (layer as IProviderExt)._bMeta;\r\n if (layerMeta && layerMeta.tilesetId === meta.tilesetId && layerMeta.accountId === meta.accountId) {\r\n return layer;\r\n }\r\n }\r\n\r\n const defaultImg = meta.accountId ? null : ProjectViewTile.DefaultImagery.find(\r\n x => x.id === meta.tilesetId\r\n );\r\n\r\n let provider: Cesium.ImageryProvider = <any>null;\r\n if (defaultImg) {\r\n provider = renderDefaultMapTile(defaultImg.id);\r\n }\r\n else {\r\n const api = apiGetter.getApi(meta.accountId);\r\n const tileset = await Tileset.Get(api, meta.tilesetId);\r\n if (tileset.type === Tileset.EType.GeoMap) {\r\n provider = new Cesium.TileMapServiceImageryProvider({\r\n url: Tileset.GetPublicFileUrl(api, meta.tilesetId, \"\"),\r\n fileExtension: \".png\"\r\n });\r\n }\r\n else if (tileset.type === Tileset.EType.ExternalGeoMap) {\r\n const settings = tileset.settings as TilesetExtMapTiles.ISettings;\r\n switch (settings.mapType) {\r\n case TilesetExtMapTiles.EType.CesiumIon:\r\n provider = new Cesium.IonImageryProvider({\r\n assetId: settings.ionId,\r\n // TODO\r\n accessToken: null\r\n });\r\n break;\r\n case TilesetExtMapTiles.EType.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 + settings.mapBoxAccount + \"/\" + settings.mapBoxStyleId +\r\n \"/tiles/256/{z}/{x}/{y}?access_token=\"\r\n + settings.mapBoxKey\r\n });\r\n break;\r\n case TilesetExtMapTiles.EType.OpenStreetMapImagery:\r\n provider = new Cesium.OpenStreetMapImageryProvider({\r\n url: settings.url,\r\n fileExtension: settings.sourceExt\r\n });\r\n break;\r\n case TilesetExtMapTiles.EType.TileMapImagery:\r\n provider = new Cesium.TileMapServiceImageryProvider({\r\n url: settings.url,\r\n fileExtension: settings.sourceExt\r\n });\r\n break;\r\n }\r\n }\r\n else if (tileset.type === Tileset.EType.EntitiesMap) {\r\n provider = new Cesium.UrlTemplateImageryProvider({\r\n url: Tileset.GetPublicFileUrl(api, meta.tilesetId, \"{z}/{x}/{y}.png\"),\r\n tileHeight: 256,\r\n tileWidth: 256\r\n });\r\n }\r\n }\r\n if (provider) {\r\n // We need some way to add meta without appending to layers.\r\n // Adding to layers triggers an event, if meta is missing then we'll not know what imagery is enabled.\r\n // In the meantime we use \"lowerToBottom\" to trigger a secondary event with updated data...\r\n const layer: IProviderExt = viewer.imageryLayers.addImageryProvider(provider);\r\n layer._bMeta = meta;\r\n viewer.imageryLayers.lowerToBottom(layer);\r\n return layer;\r\n }\r\n return null;\r\n }\r\n\r\n export async function Render(params: IParams) {\r\n // Ensure layers exist for all enabled sources.\r\n for (let i = 0; i < params.tiles.length; i++) {\r\n const enabled = params.tiles[i];\r\n await GetOrCreateLayer(params.viewer, params.apiGetter, {\r\n accountId: enabled.accountId,\r\n tilesetId: enabled.tilesetId,\r\n })\r\n }\r\n\r\n const curEnabled = params.viewer.imageryLayers;\r\n const toDisable: IProviderExt[] = [];\r\n const curEnabledArr: IProviderExt[] = [];\r\n\r\n for (let i = 0; i < curEnabled.length; i++) {\r\n const layer = curEnabled.get(i) as IProviderExt;\r\n const meta = layer?._bMeta;\r\n const disable = !params.tiles.find(x => x.accountId === meta?.accountId && x.tilesetId === meta?.tilesetId);\r\n if (disable) {\r\n toDisable.push(layer);\r\n }\r\n else {\r\n curEnabledArr.push(layer);\r\n }\r\n }\r\n for (let i = 0; i < toDisable.length; i++) {\r\n params.viewer.imageryLayers.remove(toDisable[i]);\r\n }\r\n\r\n for (let i = 0; i < params.tiles.length; i++) {\r\n const enabled = params.tiles[i];\r\n const layer = curEnabledArr.find(x => x._bMeta?.accountId === enabled.accountId && x._bMeta?.tilesetId === enabled.tilesetId);\r\n if (layer) {\r\n params.viewer.imageryLayers.raiseToTop(layer);\r\n layer.alpha = Number(enabled.alpha == null ? 1 : enabled.alpha);\r\n layer.brightness = Number(enabled.brightness == null ? 1 : enabled.brightness);\r\n layer.contrast = Number(enabled.contrast == null ? 1 : enabled.contrast);\r\n layer.hue = Number(enabled.hue == null ? 0 : enabled.hue);\r\n layer.saturation = Number(enabled.saturation == null ? 1 : enabled.saturation);\r\n layer.gamma = Number(enabled.gamma == null ? 1 : enabled.gamma);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n export namespace Terrain {\r\n export namespace V1 {\r\n export interface IProviderExt extends Cesium.CesiumTerrainProvider {\r\n _bId: string;\r\n _bName: string;\r\n }\r\n\r\n export interface IParams {\r\n data: ProjectViewLegacyTile.ITerrainSource;\r\n viewer: Cesium.Viewer;\r\n }\r\n \r\n export interface IViewParams {\r\n bookmarkId: string;\r\n viewId: string;\r\n apiGetter: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export function Render(params: IParams): void {\r\n const bId = createLegacyTerrId(params.data);\r\n const curProvider = params.viewer.terrainProvider as IProviderExt;\r\n if (curProvider._bId && curProvider._bId === bId) {\r\n return;\r\n }\r\n \r\n let provider: IProviderExt = <any>null;\r\n if (isLegacyTerrainDefault(params.data.Name)) {\r\n const id = legacyTerrIdToDefaultId(params.data.Name);\r\n provider = renderDefaultTerrTile(id) as IProviderExt;\r\n }\r\n else if (params.data.SourceUrl) {\r\n provider = <any>new Cesium.CesiumTerrainProvider({\r\n url: <string>params.data.SourceUrl,\r\n requestWaterMask: params.data.RequestWaterMask,\r\n requestVertexNormals: true\r\n });\r\n }\r\n if (provider) {\r\n provider._bId = bId;\r\n provider._bName = params.data?.Name;\r\n params.viewer.terrainProvider = provider;\r\n }\r\n }\r\n \r\n export async function RenderView(params: IViewParams): Promise<void> {\r\n const api = params.apiGetter.getApi();\r\n const view = await ProjectView.Get(api, params.viewId) as ProjectView.V1.IView;\r\n let bookmark: ProjectViewBookmark.V1.IBookmark = <any>null;\r\n if (params.bookmarkId) {\r\n bookmark = await ProjectViewBookmark.Get(api, params.viewId, params.bookmarkId) as ProjectViewBookmark.V1.IBookmark;\r\n }\r\n \r\n const vSettings = view.Settings;\r\n const bSettings = bookmark?.Settings;\r\n\r\n let terrainTiles = vSettings?.CesiumTerrainSources ?? [];\r\n let terrainTile: ProjectViewLegacyTile.ITerrainSource = <any>null;\r\n let terrainTileName: string = <any>null;\r\n if (bookmark?.Settings?.terrain) {\r\n terrainTileName = bSettings.terrain;\r\n }\r\n else {\r\n terrainTileName = <string>vSettings?.DefaultTerrain;\r\n }\r\n await ProjectViewLegacyTile.MergeTerrainTemplateData(params.apiGetter, terrainTiles, vSettings?.CesiumTerrainSources == null);\r\n for (let i = 0; i < terrainTiles.length; i++) {\r\n const tile = terrainTiles[i];\r\n if (TileRenderEngine.CompareLegacyNames(tile.Name, terrainTileName)) {\r\n terrainTile = tile;\r\n break;\r\n }\r\n }\r\n if (terrainTile) {\r\n Render({\r\n data: terrainTile,\r\n viewer: params.viewer,\r\n });\r\n }\r\n }\r\n }\r\n\r\n export namespace V2 {\r\n export interface IProviderExt extends Cesium.CesiumTerrainProvider {\r\n _bMeta?: ProjectViewTile.ITileMeta;\r\n }\r\n\r\n export interface IParams {\r\n apiGetter: BruceApi.IGetter;\r\n viewer: Cesium.Viewer;\r\n tile: ProjectViewTile.IBookmarkTerrain;\r\n }\r\n\r\n export async function Render(params: IParams): Promise<void> {\r\n // Already enabled.\r\n const enabledMeta = (params.viewer.terrainProvider as IProviderExt)?._bMeta;\r\n if (\r\n enabledMeta?.tilesetId === params.tile.tilesetId &&\r\n enabledMeta?.accountId === params.tile.accountId\r\n ) {\r\n return;\r\n }\r\n\r\n const defaultTerr = params.tile.accountId ? null : ProjectViewTile.DefaultTerrains.find(\r\n x => x.id === params.tile.tilesetId\r\n );\r\n\r\n let provider: IProviderExt = null;\r\n if (defaultTerr) {\r\n provider = renderDefaultTerrTile(defaultTerr.id) as IProviderExt;\r\n }\r\n else {\r\n const api = params.apiGetter.getApi(params.tile.accountId);\r\n const tileset = await Tileset.Get(api, params.tile.tilesetId);\r\n\r\n let url: string;\r\n let vertexes: boolean = true;\r\n if (tileset.type === Tileset.EType.Terrain) {\r\n url = Tileset.GetPublicFileUrl(api, tileset.id, \"\");\r\n }\r\n else if (tileset.type === Tileset.EType.ExternalTerrain) {\r\n const settings = tileset.settings as TilesetExtTerrainTiles.ISettings;\r\n url = settings.url;\r\n vertexes = settings.requestVertexNormals == null ? true : settings.requestVertexNormals;\r\n }\r\n else {\r\n console.error(\"Invalid tileset type.\", tileset);\r\n }\r\n \r\n if (url) {\r\n provider = new Cesium.CesiumTerrainProvider({\r\n url: url,\r\n requestVertexNormals: vertexes\r\n });\r\n }\r\n }\r\n\r\n if (provider) {\r\n provider._bMeta = {\r\n accountId: params.tile.accountId,\r\n tilesetId: params.tile.tilesetId\r\n };\r\n params.viewer.terrainProvider = provider;\r\n }\r\n }\r\n }\r\n }\r\n}","import { BruceApi, Camera, Carto, ProjectView, ProjectViewBookmark, ProjectViewTile, } from \"bruce-models\";\r\nimport { MenuItemManager } from \"./menu-item-manager\";\r\nimport { RenderHelper } from \"./render-helper\";\r\nimport * as Cesium from \"cesium\";\r\nimport { TileRenderEngine } from \"./tile-render-engine\";\r\n\r\nasync function renderV1(\r\n params: ViewRenderEngine.IRenderParams,\r\n bookmark: ProjectViewBookmark.V1.IBookmark,\r\n view: ProjectView.V1.IView\r\n) {\r\n const vSettings = view.Settings as ProjectView.V1.ISettings;\r\n const bSettings = bookmark?.Settings as ProjectViewBookmark.V1.ISettings;\r\n\r\n await TileRenderEngine.Terrain.V1.RenderView({\r\n apiGetter: params.apiGetter,\r\n bookmarkId: <string>params.bookmarkId,\r\n viewer: params.manager.Viewer,\r\n viewId: params.viewId,\r\n });\r\n\r\n await TileRenderEngine.Map.V1.RenderView({\r\n apiGetter: params.apiGetter,\r\n bookmarkId: <string>params.bookmarkId,\r\n viewer: params.manager.Viewer,\r\n viewId: params.viewId,\r\n ignoreIds: []\r\n });\r\n\r\n // TODO: Other scene settings.\r\n // TODO: Hidden entities.\r\n // TODO: Rendered relationships.\r\n\r\n let frustum = bSettings?.cameraFrustum;\r\n if (frustum == null) {\r\n frustum = Camera.EFrustum.Perspective;\r\n }\r\n const scene = params.manager.Viewer.scene;\r\n const curFrustum = scene.camera.frustum instanceof Cesium.OrthographicFrustum ? Camera.EFrustum.Orthographic : Camera.EFrustum.Perspective;\r\n if (curFrustum != frustum) {\r\n if (frustum == Camera.EFrustum.Perspective) {\r\n scene.camera.switchToPerspectiveFrustum();\r\n scene.screenSpaceCameraController.enableTilt = true;\r\n }\r\n else {\r\n scene.camera.switchToOrthographicFrustum();\r\n scene.screenSpaceCameraController.enableTilt = false;\r\n }\r\n params.skipTransition = true;\r\n }\r\n\r\n const camera = bookmark.Camera;\r\n const pos = Cesium.Cartesian3.fromDegrees(\r\n +camera.position.longitude, \r\n +camera.position.latitude, \r\n +camera.position.height\r\n );\r\n params.manager.Viewer.scene.camera.flyTo({\r\n destination: pos,\r\n orientation: {\r\n heading: +camera.heading,\r\n pitch: +camera.pitch,\r\n roll: +camera.roll\r\n },\r\n duration: params.skipTransition ? 0 : 2\r\n });\r\n\r\n let go = bookmark?.Settings?.groundOcclusion;\r\n if (go == null) {\r\n go = vSettings?.GroundOcclusion;\r\n }\r\n if (go == null) {\r\n go = false;\r\n }\r\n params.manager.Viewer.scene.globe.depthTestAgainstTerrain = go;\r\n\r\n const enabledItems = params.manager.GetEnabledItemIds();\r\n const newItemIds = bSettings?.selectedItemIds ?? [];\r\n for (const id of enabledItems) {\r\n if (newItemIds.indexOf(id) === -1) {\r\n params.manager.RemoveItemById(id);\r\n }\r\n }\r\n if (params.bookmarkId) {\r\n await RenderHelper.RenderBookmarkItems({\r\n apiGetter: params.apiGetter,\r\n manager: params.manager,\r\n }, params.viewId, params.bookmarkId);\r\n }\r\n}\r\n\r\nasync function renderV2(\r\n params: ViewRenderEngine.IRenderParams,\r\n bookmark: ProjectViewBookmark.V2.IBookmark,\r\n view: ProjectView.V2.IView\r\n) {\r\n const viewer = params.manager.Viewer;\r\n const scene = viewer.scene;\r\n\r\n const vSettings = view.Settings as ProjectView.V2.ISettings;\r\n const bSettings = (bookmark?.Settings ?? {}) as ProjectViewBookmark.V2.ISettings;\r\n const defaults = vSettings.defaults ?? {};\r\n\r\n let camera = (bookmark.Camera ?? {}) as ProjectViewBookmark.V2.ICamera;\r\n if (!Carto.ValidateCarto(camera)) {\r\n camera = {\r\n ...camera,\r\n altitude: defaults.camera?.altitude,\r\n latitude: defaults.camera?.latitude,\r\n longitude: defaults.camera?.longitude,\r\n heading: defaults.camera?.heading,\r\n pitch: defaults.camera?.pitch,\r\n roll: defaults.camera?.roll\r\n }\r\n }\r\n\r\n let newLens = camera.cameraFrustum;\r\n if (newLens == null) {\r\n newLens = defaults.camera?.cameraFrustum;\r\n }\r\n if (newLens == null) {\r\n // TODO: Need global default.\r\n newLens = Camera.EFrustum.Perspective;\r\n }\r\n const curLens = scene.camera.frustum instanceof Cesium.OrthographicFrustum ? \r\n Camera.EFrustum.Orthographic : \r\n Camera.EFrustum.Perspective;\r\n\r\n if (newLens != curLens) {\r\n if (newLens == Camera.EFrustum.Perspective) {\r\n scene.camera.switchToPerspectiveFrustum();\r\n scene.screenSpaceCameraController.enableTilt = true;\r\n }\r\n else {\r\n scene.camera.switchToOrthographicFrustum();\r\n scene.screenSpaceCameraController.enableTilt = false;\r\n }\r\n }\r\n\r\n let transition = params.skipTransition ? 0 : curLens === newLens ? camera.transition : 0;\r\n if (transition == null) {\r\n transition = defaults.camera?.transition;\r\n }\r\n if (transition == null) {\r\n // TODO: Need global default.\r\n transition = 2000;\r\n }\r\n\r\n if (Carto.ValidateCarto(camera)) {\r\n const pos = Cesium.Cartesian3.fromDegrees(\r\n +camera.longitude, \r\n +camera.latitude, \r\n +camera.altitude\r\n );\r\n scene.camera.flyTo({\r\n destination: pos,\r\n orientation: {\r\n heading: Cesium.Math.toRadians(+camera.heading),\r\n pitch: Cesium.Math.toRadians(+camera.pitch),\r\n roll: Cesium.Math.toRadians(+camera.roll)\r\n },\r\n duration: transition != 0 ? transition / 1000 : 0\r\n });\r\n }\r\n\r\n let gOcclusion = bSettings?.groundOcclusion;\r\n if (gOcclusion == null) {\r\n gOcclusion = defaults?.settings?.groundOcclusion;\r\n }\r\n if (gOcclusion == null) {\r\n // TODO: Need global default.\r\n gOcclusion = true;\r\n }\r\n scene.globe.depthTestAgainstTerrain = Boolean(gOcclusion);\r\n\r\n const terrain = bSettings?.terrain ?? defaults.settings?.terrain;\r\n if (terrain) {\r\n await TileRenderEngine.Terrain.V2.Render({\r\n apiGetter: params.apiGetter,\r\n tile: terrain,\r\n viewer: params.manager.Viewer,\r\n });\r\n }\r\n\r\n\r\n let imagery = bSettings.imagery ?? defaults.settings?.imagery;\r\n if (imagery == null) {\r\n // TODO: Need global default.\r\n imagery = [\r\n {\r\n accountId: null,\r\n tilesetId: ProjectViewTile.EDefaultImagery.MapboxSatellite,\r\n alpha: 1,\r\n brightness: 1,\r\n contrast: 1,\r\n gamma: 1,\r\n hue: 0,\r\n saturation: 1\r\n }\r\n ];\r\n }\r\n await TileRenderEngine.Map.V2.Render({\r\n apiGetter: params.apiGetter,\r\n tiles: imagery,\r\n viewer: params.manager.Viewer,\r\n });\r\n\r\n\r\n // Only disable menu items we don't want.\r\n // Otherwise we cause a flicker of rendered graphics.\r\n // Maybe TODO to such a function for menu item manager.\r\n const curEnabled = params.manager.GetEnabledItemIds();\r\n const newItemIds = bSettings?.menuItemIds ?? [];\r\n for (const id of curEnabled) {\r\n if (newItemIds.indexOf(id) === -1) {\r\n await params.manager.RemoveItemById(id);\r\n }\r\n }\r\n if (params.bookmarkId) {\r\n await RenderHelper.RenderBookmarkItems({\r\n apiGetter: params.apiGetter,\r\n manager: params.manager,\r\n }, params.viewId, params.bookmarkId);\r\n }\r\n}\r\n\r\nexport namespace ViewRenderEngine {\r\n export interface IRenderParams {\r\n viewId: string;\r\n bookmarkId?: string;\r\n skipTransition: boolean;\r\n apiGetter: BruceApi.IGetter;\r\n manager: MenuItemManager.Manager;\r\n }\r\n\r\n export async function Render(params: IRenderParams): Promise<void> {\r\n const api = params.apiGetter.getApi();\r\n const view = await ProjectView.Get(api, params.viewId);\r\n let bookmark = <any>null;\r\n if (params.bookmarkId) {\r\n bookmark = await ProjectViewBookmark.Get(api, params.viewId, params.bookmarkId);\r\n }\r\n if (bookmark && view.DataVersion != bookmark.DataVersion) {\r\n throw new Error(\"View and bookmark settings version mismatch.\");\r\n }\r\n const version = view.DataVersion;\r\n if (version === 2) {\r\n await renderV2(params, bookmark as ProjectViewBookmark.V2.IBookmark, view as ProjectView.V2.IView);\r\n }\r\n else {\r\n await renderV1(params, bookmark as ProjectViewBookmark.V1.IBookmark, view as ProjectView.V1.IView);\r\n }\r\n }\r\n}","import { DelayQueue, EntityType, MathUtils, ObjectUtils } from \"bruce-models\";\nimport * as Cesium from \"cesium\";\nimport { DrawingUtils } from \"../../utils/drawing-utils\";\nimport { VisualsRegister } from \"../visuals-register\";\nimport { IRenderAddon } from \"./render-addon\";\n\nfunction createContainer(viewer: Cesium.Viewer): HTMLElement {\n if (!viewer.canvas.parentElement) {\n return <any>null;\n }\n const container = document.createElement(\"div\");\n container.setAttribute(\"style\",\n `\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 1;\n `);\n (viewer.canvas.parentElement as HTMLElement).appendChild(container);\n return container;\n}\n\nfunction destroyContainer(container: HTMLElement): void {\n if (container?.parentElement && container.parentElement.contains(container)) {\n container.parentElement.removeChild(container);\n }\n}\n\ninterface IItem {\n element: HTMLElement;\n text: string;\n}\n\nnamespace MPolyline {\n export function Render(container: HTMLElement, viewer: Cesium.Viewer, entity: Cesium.Entity): IItem[] {\n const items: IItem[] = [];\n\n if (entity.polyline?.positions) {\n let pointsUnk = entity.polyline.positions;\n if (pointsUnk.getValue) {\n pointsUnk = pointsUnk.getValue(viewer.scene.lastRenderTime);\n }\n const points = <any>pointsUnk as Cesium.Cartesian3[];\n if (points && points.length) {\n let totalLength = 0;\n for (let i = 0; i < points.length; i++) {\n const p1 = points[i];\n const p2 = points[i + 1];\n if (p1 && p2) {\n totalLength += Cesium.Cartesian3.distance(p1, p2);\n }\n }\n if (totalLength <= 0) {\n return items;\n }\n\n const center = DrawingUtils.PointAcrossPolyline(viewer, points, totalLength / 2);\n const screenPos = viewer.scene.cartesianToCanvasCoordinates(center);\n\n if (screenPos) {\n const element = document.createElement(\"div\");\n element.setAttribute(\"style\",\n `\n position: absolute;\n top: ${screenPos.y}px;\n left: ${screenPos.x}px;\n color: white;\n font-size: 14px;\n z-index: 1;\n padding: 4px 6px;\n border-radius: 3px;\n background-color: black;\n color: white;\n `);\n const text = MathUtils.Round(totalLength, 3) + \"m\";\n element.innerText = text;\n const bounds = element.getBoundingClientRect();\n element.style.marginLeft = (-bounds.width / 2) + \"px\";\n element.style.marginTop = (-bounds.height - 10) + \"px\";\n container.appendChild(element);\n items.push({ element, text: text });\n }\n }\n }\n return items;\n }\n}\n\nnamespace MPoint {\n export function Render(container: HTMLElement, viewer: Cesium.Viewer, entity: Cesium.Entity): IItem[] {\n const items: IItem[] = [];\n\n if (entity?.position) {\n let posUnk: any = <any>entity.position;\n if (posUnk.getValue) {\n posUnk = posUnk.getValue(viewer.scene.lastRenderTime);\n }\n const pos = posUnk as Cesium.Cartesian3;\n if (!pos?.x) {\n return items;\n }\n\n const screenPos = viewer.scene.cartesianToCanvasCoordinates(pos);\n if (screenPos) {\n const element = document.createElement(\"div\");\n element.setAttribute(\"style\",\n `\n position: absolute;\n top: ${screenPos.y}px;\n left: ${screenPos.x}px;\n color: white;\n font-size: 14px;\n z-index: 1;\n padding: 4px 6px;\n border-radius: 3px;\n background-color: black;\n color: white;\n `);\n const point = Cesium.Cartographic.fromCartesian(pos);\n const lat = MathUtils.Round(Cesium.Math.toDegrees(point.latitude), 4);\n const lon = MathUtils.Round(Cesium.Math.toDegrees(point.longitude), 4);\n const alt = MathUtils.Round(Cesium.Math.toDegrees(point.height), 3);\n const text = `${lat}, ${lon}, ${alt}`;\n element.innerText = text;\n const bounds = element.getBoundingClientRect();\n // TODO: Account for billboard image size.\n element.style.marginLeft = (-bounds.width / 2) + \"px\";\n element.style.marginTop = (-bounds.height - 30) + \"px\";\n container.appendChild(element);\n items.push({ element, text: text });\n }\n }\n return items;\n }\n}\n\nfunction findVisual(visuals: VisualsRegister.Visual[]): VisualsRegister.Visual {\n visuals.sort((a, b) => {\n if (a.show && !b.show) {\n return -1;\n }\n if (!a.show && b.show) {\n return 1;\n }\n return 0;\n });\n for (let i = 0; i < visuals.length; i++) {\n const visual = visuals[i];\n if (visual instanceof Cesium.Entity) {\n return visual;\n }\n }\n return <any>null;\n}\n\n/**\n * Measure addon will render measurement details on the position of the 3d object.\n * For example it will add lengths to the line segments of a polyline.\n */\nexport class MeasureAddon implements IRenderAddon {\n public Id: string = ObjectUtils.UId();\n private visual: VisualsRegister.Visual = <any>null;\n private viewer: Cesium.Viewer;\n private cRenderListener: Cesium.Event.RemoveCallback;\n private updateQueue: DelayQueue;\n private items: IItem[] = [];\n private container: HTMLElement = <any>null;\n\n\n constructor(viewer: Cesium.Viewer) {\n this.viewer = viewer;\n this.cRenderListener = this.viewer.scene.postRender.addEventListener(() => {\n this.updateQueue.Call();\n });\n this.updateQueue = new DelayQueue(() => {\n this.doUpdate();\n }, 1000 / 60);\n }\n\n private doUpdate(): void {\n if (!this.container) {\n this.container = createContainer(this.viewer);\n }\n this.Remove();\n if (!this.container) {\n return;\n }\n const visual = this.visual;\n if (visual instanceof Cesium.Entity) {\n const entity = visual as Cesium.Entity;\n if (entity.polyline) {\n this.items = MPolyline.Render(this.container, this.viewer, entity);\n }\n else if (entity.point || entity.billboard) {\n this.items = MPoint.Render(this.container, this.viewer, entity);\n }\n // TODO: \n // - Polygon measurement.\n // - Polygon that is an angle measurement?\n // We'll need params for the addon that dictate what measurements we want to see.\n // Eg: I care about \"length\", \"area\" but not \"angle\" measurements in polygons.\n }\n else {\n // We don't support prims or tiles.\n }\n }\n\n public Render(visuals: VisualsRegister.Visual[]): void {\n const newVisual = findVisual(visuals);\n if (newVisual != this.visual) {\n this.Remove();\n }\n this.visual = newVisual;\n this.updateQueue.Call(true);\n }\n\n public Remove(): void {\n for (let i = 0; i < this.items.length; i++) {\n const item = this.items[i];\n if (item.element?.parentElement && item.element.parentElement.contains(item.element)) {\n item.element.parentElement.removeChild(item.element);\n }\n }\n this.items = [];\n }\n\n public Dispose(): void {\n this.cRenderListener();\n destroyContainer(this.container);\n }\n}","import { ProjectViewBookmark, ProjectViewTile } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { TileRenderEngine } from \"../rendering/tile-render-engine\";\r\n\r\nexport namespace ViewUtils {\r\n export function GatherLegacyMapTiles(viewer: Cesium.Viewer): ProjectViewBookmark.V1.IBookmarkImagery[] {\r\n const collection = viewer.imageryLayers;\r\n const tiles: ProjectViewBookmark.V1.IBookmarkImagery[] = [];\r\n for (let i = 0; i < collection.length; i++) {\r\n const layer = collection.get(i) as TileRenderEngine.Map.V1.ILayerExt;\r\n if (layer._bName) {\r\n tiles.push({\r\n alpha: layer.alpha,\r\n brightness: layer.brightness,\r\n contrast: layer.contrast,\r\n hue: layer.hue,\r\n saturation: layer.saturation,\r\n gamma: layer.gamma,\r\n title: layer._bName,\r\n });\r\n }\r\n }\r\n return tiles.reverse();\r\n }\r\n\r\n export function GatherLegacyTerrainTile(viewer: Cesium.Viewer): string {\r\n const enabled = viewer.terrainProvider as TileRenderEngine.Terrain.V1.IProviderExt;\r\n if (enabled?._bName) {\r\n return enabled._bName;\r\n }\r\n return \"flatterrain\";\r\n }\r\n\r\n export function GatherMapTiles(viewer: Cesium.Viewer): ProjectViewTile.IBookmarkImagery[] {\r\n const imagery = viewer.imageryLayers;\r\n const tiles: ProjectViewTile.IBookmarkImagery[] = [];\r\n for (let i = 0; i < imagery.length; i++) {\r\n const provider = imagery.get(i) as TileRenderEngine.Map.V2.IProviderExt;\r\n if (provider._bMeta) {\r\n const idCombo = provider._bMeta.accountId + provider._bMeta.tilesetId;\r\n if (!tiles.find(x => x.accountId + x.tilesetId === idCombo)) {\r\n tiles.push({\r\n accountId: provider._bMeta.accountId,\r\n tilesetId: provider._bMeta.tilesetId,\r\n alpha: provider.alpha,\r\n brightness: provider.brightness,\r\n contrast: provider.contrast,\r\n hue: provider.hue,\r\n saturation: provider.saturation,\r\n gamma: provider.gamma\r\n });\r\n }\r\n }\r\n }\r\n return tiles;\r\n }\r\n\r\n export function GatherTerrainTile(viewer: Cesium.Viewer): ProjectViewTile.IBookmarkTerrain {\r\n const provider = viewer.terrainProvider as TileRenderEngine.Terrain.V2.IProviderExt;\r\n if (provider._bMeta) {\r\n return {\r\n accountId: provider._bMeta.accountId,\r\n tilesetId: provider._bMeta.tilesetId,\r\n };\r\n }\r\n return null;\r\n }\r\n}"],"names":["Cesium.Cartesian2","Cesium.Cartographic","BruceEvent","Cesium.Math","Cesium.Viewer","Cesium.ArcGisMapServerImageryProvider","Cesium.ScreenSpaceEventType","ViewerUtils","Cesium.Cartesian3","Cesium.EllipsoidGeodesic","Carto","Geometry","Cartes","Cesium.Entity","RenderManager","Cesium.Color","Calculator","Cesium.HeightReference","Style","EntityType","ZoomControl","ClientFile","Cesium.HorizontalOrigin","Cesium.VerticalOrigin","EntityTag","Cesium.ClassificationType","Cesium.ArcType","Cesium.PolygonHierarchy","Cesium.ShadowMode","Cesium.PolylineGraphics","Cesium.HeadingPitchRoll","Cesium.Transforms","Cesium.ColorBlendMode","EntityLod","EntityRenderEngine","DelayQueue","Entity","EntitiesRenderManager","BatchedDataGetter","EntitiesLoadedRenderManager","Cesium.Primitive","Cesium.Cesium3DTileFeature","ObjectUtils","VisualsRegister","EntitiesIdsRenderManager","EntityRenderManager","colorToCColor","Tileset","Cesium.Matrix4","Cesium.Cesium3DTileset","EntityCoords","Cesium.HeadingPitchRange","TilesetCadRenderManager","EntityFilterGetter","SharedGetters","Cesium.createOsmBuildings","Cesium.Cesium3DTileStyle","Cesium.Rectangle","EntitySource","MenuItem","MenuItemManager","ProjectView","ProjectViewBookmark","RenderHelper","ProjectViewTile","Cesium.createWorldTerrain","Cesium.EllipsoidTerrainProvider","Cesium.CesiumTerrainProvider","Cesium.BingMapsImageryProvider","Cesium.BingMapsStyle","Cesium.MapboxImageryProvider","Cesium.OpenStreetMapImageryProvider","Cesium.GridImageryProvider","Cesium.GeographicTilingScheme","Cesium.ImageryLayer","Cesium.UrlTemplateImageryProvider","Cesium.TileMapServiceImageryProvider","ProjectViewLegacyTile","TilesetExtMapTiles","Cesium.IonImageryProvider","TileRenderEngine","Camera","Cesium.OrthographicFrustum","ViewRenderEngine","MathUtils","ViewUtils"],"mappings":"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"}