bruce-cesium 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bruce-cesium.es5.js +335 -199
- package/dist/bruce-cesium.es5.js.map +1 -1
- package/dist/bruce-cesium.umd.js +310 -203
- package/dist/bruce-cesium.umd.js.map +1 -1
- package/dist/lib/rendering/entity-render-engine.js.map +1 -1
- package/dist/lib/rendering/menu-item-manager.js +26 -0
- package/dist/lib/rendering/menu-item-manager.js.map +1 -1
- package/dist/lib/rendering/render-helper.js +3 -0
- package/dist/lib/rendering/render-helper.js.map +1 -1
- package/dist/lib/rendering/render-managers/entities/entities-ids-render-manager.js +5 -1
- package/dist/lib/rendering/render-managers/entities/entities-ids-render-manager.js.map +1 -1
- package/dist/lib/rendering/render-managers/entities/entities-loaded-render-manager.js +6 -1
- package/dist/lib/rendering/render-managers/entities/entities-loaded-render-manager.js.map +1 -1
- package/dist/lib/rendering/render-managers/entities/entities-render-manager.js +5 -1
- package/dist/lib/rendering/render-managers/entities/entities-render-manager.js.map +1 -1
- package/dist/lib/rendering/render-managers/entities/entity-render-manager.js +4 -1
- package/dist/lib/rendering/render-managers/entities/entity-render-manager.js.map +1 -1
- package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js +5 -4
- package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js.map +1 -1
- package/dist/lib/rendering/tileset-render-engine.js +1 -1
- package/dist/lib/rendering/tileset-render-engine.js.map +1 -1
- package/dist/lib/rendering/visuals-register.js +166 -139
- package/dist/lib/rendering/visuals-register.js.map +1 -1
- package/dist/lib/utils/drawing-utils.js +8 -0
- package/dist/lib/utils/drawing-utils.js.map +1 -1
- package/dist/lib/utils/entity-utils.js +33 -0
- package/dist/lib/utils/entity-utils.js.map +1 -1
- package/dist/lib/utils/measure-utils.js +6 -0
- package/dist/lib/utils/measure-utils.js.map +1 -1
- package/dist/lib/viewer/cesium-view-monitor.js +3 -0
- package/dist/lib/viewer/cesium-view-monitor.js.map +1 -1
- package/dist/lib/viewer/viewer-utils.js +10 -0
- package/dist/lib/viewer/viewer-utils.js.map +1 -1
- package/dist/types/rendering/entity-render-engine.d.ts +5 -5
- package/dist/types/rendering/menu-item-manager.d.ts +17 -1
- package/dist/types/rendering/render-helper.d.ts +3 -0
- package/dist/types/rendering/render-managers/entities/entities-ids-render-manager.d.ts +5 -1
- package/dist/types/rendering/render-managers/entities/entities-loaded-render-manager.d.ts +6 -1
- package/dist/types/rendering/render-managers/entities/entities-render-manager.d.ts +5 -1
- package/dist/types/rendering/render-managers/entities/entity-render-manager.d.ts +4 -1
- package/dist/types/rendering/render-managers/tilesets/tileset-cad-render-manager.d.ts +5 -1
- package/dist/types/rendering/tileset-render-engine.d.ts +2 -2
- package/dist/types/rendering/visuals-register.d.ts +38 -20
- package/dist/types/utils/drawing-utils.d.ts +8 -0
- package/dist/types/utils/entity-utils.d.ts +12 -0
- package/dist/types/utils/measure-utils.d.ts +6 -0
- package/dist/types/viewer/cesium-view-monitor.d.ts +3 -0
- package/dist/types/viewer/viewer-utils.d.ts +10 -0
- package/package.json +1 -1
|
@@ -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/render-managers/entities/entities-ids-render-manager.ts","../src/rendering/render-managers/entities/entity-render-manager.ts","../src/rendering/tileset-render-engine.ts","../src/rendering/render-managers/tilesets/tileset-cad-render-manager.ts","../src/rendering/menu-item-manager.ts","../src/rendering/render-helper.ts","../src/rendering/visuals-register.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\nexport class CesiumViewMonitor implements ViewMonitor.IMonitor {\r\n private viewer: Cesium.Viewer;\r\n private pendingTimeout: any;\r\n private checkInterval: any;\r\n private target: Carto.ICarto = <any>null;\r\n private bounds: Bounds.IReqBounds = <any>null;\r\n private disposed: boolean = false;\r\n private updatedEvent: BruceEvent<ViewMonitor.IArea> = <any>null;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n\r\n\r\n public constructor(viewer: Cesium.Viewer) {\r\n this.viewer = viewer;\r\n this.checkInterval = setInterval(() => {\r\n this.updateQueue();\r\n },\r\n POSITION_CHECK_TIMER);\r\n }\r\n\r\n public Updated(): BruceEvent<ViewMonitor.IArea> {\r\n if (!this.updatedEvent) {\r\n this.updatedEvent = new BruceEvent();\r\n }\r\n return this.updatedEvent;\r\n }\r\n\r\n public GetBounds(): Bounds.IReqBounds {\r\n return this.bounds;\r\n }\r\n\r\n public GetTarget(): Carto.ICarto {\r\n return this.target;\r\n }\r\n\r\n public DoUpdate(): void {\r\n this.tryEmitUpdate();\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.disposed = true;\r\n clearInterval(this.checkInterval);\r\n }\r\n\r\n private tryDoUpdate(): ESearchStatus {\r\n let viewRect: Bounds.IReqBounds = <any>null;\r\n let center: Carto.ICarto = <any>null;\r\n\r\n const camera = this.viewer.camera;\r\n const terrainHeight = this.viewer.scene.globe.getHeight(camera.positionCartographic);\r\n const cameraPosition = this.viewer.camera.positionCartographic;\r\n\r\n // We are almost at the ground, screw horizon, just load around.\r\n if (terrainHeight && ((cameraPosition.height - terrainHeight) < DEFAULT_GROUNDED_HEIGHT)) {\r\n\r\n // View area calculation.\r\n viewRect = <any>{};\r\n const viewRectRad: Bounds.IReqBounds = netScanViewForBoundaries(this.viewer);\r\n if\r\n (\r\n viewRectRad &&\r\n viewRectRad.east &&\r\n viewRectRad.west &&\r\n viewRectRad.north &&\r\n viewRectRad.south\r\n ) {\r\n viewRect.east = Cesium.Math.toDegrees(Math.max(viewRectRad.east, cameraPosition.longitude));\r\n viewRect.west = Cesium.Math.toDegrees(Math.min(viewRectRad.west, cameraPosition.longitude));\r\n viewRect.south = Cesium.Math.toDegrees(Math.min(viewRectRad.south, cameraPosition.latitude));\r\n viewRect.north = Cesium.Math.toDegrees(Math.max(viewRectRad.north, cameraPosition.latitude));\r\n }\r\n else {\r\n viewRect.east = cameraPosition.longitude;\r\n viewRect.west = cameraPosition.longitude;\r\n viewRect.south = cameraPosition.latitude;\r\n viewRect.north = cameraPosition.latitude;\r\n }\r\n center = <any>{};\r\n center.latitude = Cesium.Math.toDegrees(camera.positionCartographic.latitude);\r\n center.longitude = Cesium.Math.toDegrees(camera.positionCartographic.longitude);\r\n }\r\n else {\r\n // View area calculation.\r\n const windowPosition = new Cesium.Cartesian2(\r\n this.viewer.container.clientWidth / 2,\r\n this.viewer.container.clientHeight / 2\r\n );\r\n const intersection = getAdjustedGroundIntersectionOfCameraRay(this.viewer, windowPosition);\r\n\r\n let point = null;\r\n if (intersection) {\r\n point = (<any> Cesium.Cartographic).fromCartesian(intersection, this.viewer.scene.globe.ellipsoid);\r\n }\r\n if (point) {\r\n center = <any>{};\r\n center.latitude = Cesium.Math.toDegrees(point.latitude);\r\n center.longitude = Cesium.Math.toDegrees(point.longitude);\r\n\r\n let viewRectRad: Bounds.IReqBounds = netScanViewForBoundaries(this.viewer);\r\n if (viewRectRad) {\r\n viewRect = <any>{};\r\n viewRect.east = Cesium.Math.toDegrees(viewRectRad.east);\r\n viewRect.west = Cesium.Math.toDegrees(viewRectRad.west);\r\n viewRect.south = Cesium.Math.toDegrees(viewRectRad.south);\r\n viewRect.north = Cesium.Math.toDegrees(viewRectRad.north);\r\n }\r\n }\r\n }\r\n\r\n // Minimal field of view.\r\n if (viewRect) {\r\n const centerLong = (viewRect.east + viewRect.west) / 2;\r\n const centerLat = (viewRect.north + viewRect.south) / 2;\r\n viewRect.east = Math.max(viewRect.east, centerLong + (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\r\n viewRect.west = Math.min(viewRect.west, centerLong - (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\r\n viewRect.south = Math.min(viewRect.south, centerLat - (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\r\n viewRect.north = Math.max(viewRect.north, centerLat + (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\r\n }\r\n\r\n if (center && viewRect) {\r\n if (\r\n (!this.target || (this.target && !arePosEqual(this.target, center))) ||\r\n (!this.bounds || (this.bounds && !areBoundsEqual(this.bounds, viewRect)))\r\n ) {\r\n this.target = center;\r\n this.bounds = viewRect;\r\n return ESearchStatus.LocationChanged;\r\n }\r\n return ESearchStatus.LocationFound;\r\n }\r\n return ESearchStatus.LocationMissing;\r\n }\r\n\r\n private tryEmitUpdate() {\r\n const searchResult = this.tryDoUpdate();\r\n if (searchResult == ESearchStatus.LocationChanged) {\r\n const interest: ViewMonitor.IArea = {\r\n \tbounds: this.bounds,\r\n \ttarget: this.target\r\n };\r\n this.updatedEvent?.Trigger(interest);\r\n }\r\n else if (searchResult == ESearchStatus.LocationMissing) {\r\n this.updateQueue();\r\n }\r\n }\r\n\r\n private queuePosition(lag: number) {\r\n if (this.pendingTimeout) {\r\n clearTimeout(this.pendingTimeout);\r\n }\r\n this.pendingTimeout = setTimeout(() => {\r\n if (!this.disposed) {\r\n this.tryEmitUpdate();\r\n }\r\n }, lag);\r\n }\r\n\r\n private updateQueue() {\r\n this.queuePosition(TIME_LAG);\r\n }\r\n}","import * as Cesium from \"cesium\";\r\n\r\ninterface IWidget {\r\n isDestroyed: () => boolean;\r\n destroy: () => void;\r\n}\r\n\r\nexport namespace ViewerUtils {\r\n export interface IViewContainer extends HTMLElement {\r\n _cViewer?: Cesium.Viewer;\r\n }\r\n\r\n export function InitViewer(container: HTMLElement): Cesium.Viewer {\r\n if ((<IViewContainer>container)._cViewer) {\r\n throw new Error(\"Container already has a viewer.\");\r\n }\r\n const cViewer = new Cesium.Viewer(container, {\r\n imageryProvider: new Cesium.ArcGisMapServerImageryProvider({\r\n url: \"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer\",\r\n enablePickFeatures: false\r\n })\r\n });\r\n cViewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);\r\n cViewer.camera.percentageChanged = 0.05;\r\n ViewerUtils.DestroyWidget(cViewer.timeline);\r\n ViewerUtils.DestroyWidget(cViewer.vrButton);\r\n ViewerUtils.DestroyWidget(cViewer.sceneModePicker);\r\n ViewerUtils.DestroyWidget(cViewer.homeButton);\r\n ViewerUtils.DestroyWidget(cViewer.fullscreenButton);\r\n ViewerUtils.DestroyWidget(cViewer.baseLayerPicker);\r\n ViewerUtils.StyleContainer(cViewer);\r\n (<IViewContainer>container)._cViewer = cViewer;\r\n return cViewer;\r\n }\r\n\r\n export function GetViewerFromContainer(container: HTMLElement): Cesium.Viewer {\r\n return <any>(<IViewContainer>container)._cViewer;\r\n }\r\n\r\n export function DestroyWidget(widget: IWidget): void {\r\n if (widget && !widget.isDestroyed()) {\r\n widget.destroy();\r\n }\r\n }\r\n\r\n export function StyleContainer(viewer: Cesium.Viewer) {\r\n const container = viewer.container;\r\n const genContainer = container.getElementsByClassName(\"cesium-viewer\")?.[0];\r\n if (genContainer) {\r\n const children = genContainer.children;\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i] as HTMLElement;\r\n if (!child.classList.contains(\"cesium-viewer-cesiumWidgetContainer\")) {\r\n child.style.display = \"none\";\r\n }\r\n }\r\n }\r\n\r\n const canvas = viewer.canvas as HTMLElement;\r\n canvas.style.width = \"100%\";\r\n canvas.style.height = \"100%\";\r\n\r\n const widget = canvas.parentElement as HTMLElement;\r\n widget.style.width = \"100%\";\r\n widget.style.height = \"100%\";\r\n widget.style.touchAction = \"none\";\r\n\r\n const widgetContainer = widget.parentElement as HTMLElement;\r\n widgetContainer.style.width = \"100%\";\r\n widgetContainer.style.height = \"100%\";\r\n\r\n const viewerContainer = widgetContainer.parentElement as HTMLElement;\r\n viewerContainer.style.fontFamily = \"sans-serif\";\r\n viewerContainer.style.fontSize = \"16px\";\r\n viewerContainer.style.overflow = \"hidden\";\r\n viewerContainer.style.display = \"block\";\r\n viewerContainer.style.position = \"relative\";\r\n viewerContainer.style.top = \"0\";\r\n viewerContainer.style.left = \"0\";\r\n viewerContainer.style.width = \"100%\";\r\n viewerContainer.style.height = \"100%\";\r\n }\r\n}","import * as Cesium from \"cesium\";\r\n\r\nexport namespace DrawingUtils {\r\n export function PointAcrossPolyline(viewer: Cesium.Viewer, positions: Cesium.Cartesian3[], distance: number): Cesium.Cartesian3 {\r\n if (positions.length > 1) {\r\n let currentDistance = 0;\r\n for (let i = 0; i < positions.length - 1; i++) {\r\n const length = Cesium.Cartesian3.distance(positions[i], positions[i + 1]);\r\n if (length + currentDistance >= distance) {\r\n const carto1 = Cesium.Cartographic.fromCartesian(positions[i]);\r\n const carto2 = Cesium.Cartographic.fromCartesian(positions[i + 1]);\r\n const geodesic = new Cesium.EllipsoidGeodesic(carto1, carto2, viewer.scene.globe.ellipsoid);\r\n const position = geodesic.interpolateUsingSurfaceDistance(distance - currentDistance);\r\n const height = (carto1.height + carto2.height) / 2;\r\n return Cesium.Cartesian3.fromRadians(position.longitude, position.latitude, height);\r\n }\r\n else {\r\n currentDistance += length;\r\n }\r\n }\r\n }\r\n else if (positions.length > 0) {\r\n return positions[0];\r\n }\r\n else {\r\n return <any>null;\r\n }\r\n return positions[positions.length - 1];\r\n }\r\n}","import * as Cesium from \"cesium\";\r\n\r\nexport namespace MeasureUtils {\r\n export function MeasurePolyline(posses: Cesium.Cartesian3[]): number {\r\n if (posses.length < 2) {\r\n return 0;\r\n }\r\n let totalLength = 0;\r\n let pos1 = null;\r\n let pos2 = null;\r\n for (let i = 0; i < posses.length; i++) {\r\n if (pos1 == null) {\r\n pos1 = posses[i];\r\n }\r\n else if (pos2 == null) {\r\n pos2 = posses[i];\r\n totalLength += Cesium.Cartesian3.distance(pos1, pos2);\r\n pos1 = pos2;\r\n pos2 = null;\r\n }\r\n }\r\n return totalLength;\r\n }\r\n}","import { Cartes, Carto, Entity as E, Geometry } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { DrawingUtils } from \"./drawing-utils\";\r\nimport { MeasureUtils } from \"./measure-utils\";\r\n\r\nexport namespace EntityUtils {\r\n export function GetPos(viewer: Cesium.Viewer, entity: E.IEntity): Cesium.Cartesian3 {\r\n if (entity.location && Carto.ValidateCarto(entity.location)) {\r\n const location = entity.location;\r\n return Cesium.Cartesian3.fromDegrees(location.longitude, location.latitude, location.altitude);\r\n }\r\n if (entity.geometry && typeof entity.geometry == \"object\") {\r\n const pointStr = entity.geometry.Point;\r\n if (pointStr && typeof pointStr == \"string\") {\r\n const points = Geometry.ParsePoints(pointStr);\r\n const point = points.length > 0 ? points[0] : null;\r\n if (point && Carto.ValidateCarto(point)) {\r\n return Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\r\n }\r\n }\r\n const lineStr = entity.geometry.LineString;\r\n if (lineStr && typeof lineStr == \"string\") {\r\n const points = Geometry.ParsePoints(lineStr);\r\n if (points.length > 0) {\r\n const posses = points.map(x => Cesium.Cartesian3.fromDegrees(x.longitude, x.latitude, x.altitude));\r\n const length = MeasureUtils.MeasurePolyline(posses);\r\n if (length > 0) {\r\n const point = DrawingUtils.PointAcrossPolyline(viewer, posses, length / 2);\r\n if (point && Cartes.ValidateCartes3(point)) {\r\n return point;\r\n }\r\n }\r\n else {\r\n return posses[0];\r\n }\r\n }\r\n }\r\n const pRings = entity.geometry.Polygon;\r\n if (pRings && typeof pRings == \"object\") {\r\n const boundary = pRings.find(x => x.Facing == Geometry.EPolygonRingType.Boundaries)\r\n if (boundary?.LinearRing) {\r\n const points = Geometry.ParsePoints(boundary.LinearRing);\r\n const point = Carto.GetCenter(points);\r\n if (point && Carto.ValidateCarto(point)) {\r\n return Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\r\n }\r\n }\r\n }\r\n }\r\n if (entity.boundaries) {\r\n const point: Carto.ICarto = {\r\n latitude: (entity.boundaries.minLatitude + entity.boundaries.maxLatitude) / 2, \r\n longitude: (entity.boundaries.minLongitude + entity.boundaries.maxLongitude) / 2, \r\n altitude: 0\r\n };\r\n if (point && Carto.ValidateCarto(point)) {\r\n return Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\r\n }\r\n }\r\n return <any>null;\r\n }\r\n}","import { EntitiesRenderManager } from \"./entities/entities-render-manager\";\r\nimport { EntitiesLoadedRenderManager } from \"./entities/entities-loaded-render-manager\";\r\nimport { EntitiesIdsRenderManager } from \"./entities/entities-ids-render-manager\";\r\nimport { EntityRenderManager } from \"./entities/entity-render-manager\";\r\nimport { EntityUtils } from \"../../utils/entity-utils\";\r\nimport { Entity, ZoomControl } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { TilesetCadRenderManager } from \"./tilesets/tileset-cad-render-manager\";\r\n\r\nexport namespace RenderManager {\r\n export interface IManager {\r\n Init(): Promise<void>;\r\n Dispose(): void;\r\n }\r\n\r\n export type Type = EntitiesRenderManager.Manager | \r\n EntitiesLoadedRenderManager.Manager | \r\n EntitiesIdsRenderManager.Manager | \r\n EntityRenderManager.Manager |\r\n TilesetCadRenderManager.Manager;\r\n\r\n export namespace Utils {\r\n export function DetermineZoomItem(viewer: Cesium.Viewer, entity: Entity.IEntity, zoomControl: ZoomControl.IItem[]): ZoomControl.IItem {\r\n const pos = EntityUtils.GetPos(viewer, entity);\r\n if (!pos) {\r\n return <any>null;\r\n }\r\n const cameraPos = viewer.camera.position;\r\n const distance = Cesium.Cartesian3.distance(pos, cameraPos);\r\n return GetZoomControlFromDistance(zoomControl, distance);\r\n }\r\n \r\n export function GetZoomControlFromDistance(zoomControl: ZoomControl.IItem[], distance: number): ZoomControl.IItem {\r\n for (let i = 0; i < zoomControl.length; i++) {\r\n let zoomItem = zoomControl[i];\r\n if ((distance >= <number>zoomItem.MinZoom) && (distance <= <number>zoomItem.MaxZoom)) {\r\n return zoomItem;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n }\r\n}","import * as Cesium from \"cesium\";\r\nimport { Entity, BruceApi, ZoomControl, Style, EntityTag, Calculator, Color, Geometry, Carto, EntityLod, EntityType, IDictionary, ClientFile } from \"bruce-models\";\r\nimport { EntityUtils } from \"../utils/entity-utils\";\r\nimport { RenderManager } from \"./render-managers/render-manager\";\r\nimport { VisualsRegister } from \"./visuals-register\";\r\n\r\nfunction colorToCColor(color: Color.IColor): Cesium.Color {\r\n return new Cesium.Color(\r\n color.red ? color.red/255 : 0, \r\n color.green ? color.green/255 : 0, \r\n color.blue ? color.blue/255 : 0, \r\n color.alpha\r\n );\r\n}\r\n\r\nfunction getPolygonStyleExtrusion(pStyle: any, entity: Entity.IEntity, tags: EntityTag.ITag[], heightRef: Cesium.HeightReference): number {\r\n const attrPath = pStyle.extrusionPath;\r\n if (!pStyle.useExtrusion || !attrPath) {\r\n return <any>null;\r\n }\r\n try {\r\n const extrusion = +Calculator.GetValue(attrPath, entity, tags);\r\n if (!extrusion && extrusion != 0) {\r\n return <any>null;\r\n }\r\n /* \r\n Cesium extrudes in strange way.\r\n If you want something that is 50 meters above sea, and 5 meters tall,\r\n You need to extrude by 55 meters, if you extrude by 5 it will extrude from sea and look flat.\r\n */\r\n const height = <number>entity.location?.altitude;\r\n return heightRef == Cesium.HeightReference.RELATIVE_TO_GROUND ? extrusion + height : extrusion;\r\n } \r\n catch (e) {\r\n console.error(e);\r\n }\r\n return 0;\r\n}\r\n\r\ninterface IExtrusionData {\r\n value: number;\r\n exHeightRef: Cesium.HeightReference;\r\n posses: Cesium.Cartesian3[];\r\n}\r\n\r\nfunction getPolygonExtrusion(\r\n entity: Entity.IEntity, \r\n tags: EntityTag.ITag[], \r\n ring: Geometry.IPolygonRing,\r\n posses: Cesium.Cartesian3[], \r\n heightRef: Cesium.HeightReference, \r\n pStyle: any\r\n): IExtrusionData {\r\n const data: IExtrusionData = {\r\n value: <any>undefined,\r\n exHeightRef: Cesium.HeightReference.RELATIVE_TO_GROUND,\r\n posses: <any>null\r\n }\r\n\r\n // Step 1. Try get using style.\r\n const extrusion = getPolygonStyleExtrusion(pStyle, entity, tags, heightRef);\r\n if (extrusion) {\r\n if (heightRef == Cesium.HeightReference.NONE) {\r\n // Let's normalize all point heights to be the same (at entity altitude).\r\n // This let's us have a consistent extrusion height, and be adjustable easier by user.\r\n let alt = <number>entity?.location?.altitude;\r\n if (!alt) {\r\n alt = 0;\r\n }\r\n\r\n const points = posses.map(x => Cesium.Cartographic.fromCartesian(x));\r\n points.forEach((point) => {\r\n point.height = alt;\r\n });\r\n posses = points.map(x => Cesium.Cartesian3.fromRadians(x.longitude, x.latitude, x.height));\r\n }\r\n }\r\n // Step 2. Try get using geometry data.\r\n else {\r\n data.exHeightRef = <any>undefined;\r\n if (ring.Height && ring.Height > 0) {\r\n const points = posses.map(x => Cesium.Cartographic.fromCartesian(x));\r\n if (points.length <= 0) {\r\n data.value = ring.Height;\r\n }\r\n else {\r\n let highest: number = <any>null; \r\n for (let i = 0; i < points.length; i++) {\r\n let pointHeight = points[i].height;\r\n if (pointHeight > highest || highest === null) {\r\n highest = pointHeight;\r\n }\r\n }\r\n highest = (highest === null ? 0 : highest) + ring.Height;\r\n data.value = highest;\r\n }\r\n data.exHeightRef = Cesium.HeightReference.NONE;\r\n }\r\n }\r\n\r\n data.posses = posses;\r\n return data;\r\n}\r\n\r\nfunction getHeightRef(style: any): Cesium.HeightReference {\r\n let heightRef = Cesium.HeightReference.CLAMP_TO_GROUND;\r\n const altOptionId = style?.altitudeOption?.id;\r\n if (altOptionId == 1) {\r\n heightRef = Cesium.HeightReference.NONE;\r\n }\r\n else if (altOptionId == 2) {\r\n heightRef = Cesium.HeightReference.RELATIVE_TO_GROUND;\r\n }\r\n return heightRef;\r\n}\r\n\r\nfunction getZIndex(style: any, entity: Entity.IEntity, tags: EntityTag.ITag[]): number {\r\n let zIndex = style?.zIndex ? +Calculator.GetValue(style?.zIndex, entity, tags) : 0;\r\n if (zIndex == null) {\r\n zIndex = 0;\r\n }\r\n return zIndex;\r\n}\r\n\r\nasync function getStyle(api: BruceApi, 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): EntityRenderEngine.ICesiumEntityExt {\r\n const visuals = visualRegister.GetVisuals(entityId, menuItemId);\r\n return visuals.length > 0 ? visuals[0] : <any>null;\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 api: BruceApi;\r\n viewer: Cesium.Viewer; \r\n visualRegister: VisualsRegister;\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 api: params.api,\r\n viewer: params.viewer,\r\n entities: [],\r\n zoomItems: <IDictionary<ZoomControl.IItem>>{},\r\n menuItemId: params.menuItemId,\r\n visualRegister: params.visualRegister\r\n }\r\n\r\n const cEntities: IDictionary<ICesiumEntityExt> = {};\r\n const models: Entity.IEntity[] = [];\r\n const polygons: Entity.IEntity[] = [];\r\n const polylines: Entity.IEntity[] = [];\r\n const points: Entity.IEntity[] = [];\r\n\r\n // Initial sorting.\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n const id = <string>entity.Bruce.ID;\r\n\r\n const zoomItem = RenderManager.Utils.DetermineZoomItem(params.viewer, entity, params.zoomControl);\r\n let displayType = zoomItem?.DisplayType;\r\n if (!displayType) {\r\n displayType = ZoomControl.EDisplayType.Hidden;\r\n }\r\n if (displayType != ZoomControl.EDisplayType.Hidden) {\r\n const newRenderId = getRenderGroupId(zoomItem);\r\n const existing = getExistingCEntity(id, params.menuItemId, zoomItem, params.visualRegister);\r\n const oldRenderId = existing?._renderGroup;\r\n \r\n if (newRenderId == oldRenderId) {\r\n cEntities[id] = existing;\r\n }\r\n else {\r\n if (displayType == ZoomControl.EDisplayType.Model3D) {\r\n models.push(entity);\r\n }\r\n else if (displayType == ZoomControl.EDisplayType.Geometry) {\r\n polygons.push(entity);\r\n }\r\n else {\r\n points.push(entity);\r\n }\r\n groupRenderParams.zoomItems[id] = zoomItem;\r\n }\r\n }\r\n }\r\n\r\n // Keep trying to render things in order of hard-coded priority system.\r\n if (models.length > 0) {\r\n const mParams: Model3d.IGroupParams = {\r\n ...groupRenderParams,\r\n entities: models\r\n };\r\n const mEntities = await Model3d.RenderGroup(mParams);\r\n for (let i = 0; i < mParams.entities.length; i++) {\r\n const entity = mParams.entities[i];\r\n const id = <string>entity.Bruce.ID;\r\n const cEntity = mEntities[id];\r\n if (cEntity) {\r\n cEntities[id] = cEntity;\r\n }\r\n else {\r\n polygons.push(entity);\r\n }\r\n }\r\n }\r\n if (polygons.length > 0) {\r\n const pParams: Polygon.IGroupParams = {\r\n ...groupRenderParams,\r\n entities: models\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: models\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: models\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 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 api: BruceApi;\r\n menuItemId: string;\r\n entities: Entity.IEntity[];\r\n zoomItems: IDictionary<ZoomControl.IItem>;\r\n visualRegister: VisualsRegister;\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\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\r\n const cEntity: ICesiumEntityExt = 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 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 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(params.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(params.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 });\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 api: BruceApi;\r\n menuItemId: string;\r\n entities: Entity.IEntity[];\r\n zoomItems: IDictionary<ZoomControl.IItem>;\r\n visualRegister: VisualsRegister;\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 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(params.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(params.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 api: BruceApi;\r\n menuItemId: string;\r\n entities: Entity.IEntity[];\r\n zoomItems: IDictionary<ZoomControl.IItem>;\r\n visualRegister: VisualsRegister;\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 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(params.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(params.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 api: BruceApi;\r\n menuItemId: string;\r\n entities: Entity.IEntity[];\r\n zoomItems: IDictionary<ZoomControl.IItem>;\r\n visualRegister: VisualsRegister;\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 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(params.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(params.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(params.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(params.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(params.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(params.api, lod.clientFileId)\r\n })\r\n if (cEntity) {\r\n cEntity._renderGroup = getRenderGroupId(zoomItem);\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n }\r\n\r\n return cEntities;\r\n }\r\n }\r\n}","import { BruceApi, DelayQueue, Entity, EntityFilterGetter, IDictionary, MenuItem, ZoomControl } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\r\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\n\r\nexport namespace EntitiesRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private api: BruceApi;\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;\r\n\r\n private entityCheckQueue: DelayQueue = <any>null;\r\n private entityCheckRemoval: () => void = <any>null;\r\n private isRunningCheck = false;\r\n private viewMonitorRemoval: () => void = <any>null;\r\n\r\n\r\n constructor(viewer: Cesium.Viewer, visualsManager: VisualsRegister, api: BruceApi, item: MenuItem.Item.IBruceEntities) {\r\n this.viewer = viewer;\r\n this.api = api;\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 EntityFilterGetter.Getter(\r\n this.api,\r\n new CesiumViewMonitor(this.viewer),\r\n this.item.BruceEntity[\"EntityType.ID\"],\r\n 500,\r\n {}\r\n );\r\n this.getter.IncludeMenuItem(this.item.id, [], 0, 100000);\r\n this.getterSub = this.getter.OnUpdate.Subscribe((entities) => {\r\n this.onGetterUpdate(entities);\r\n });\r\n this.viewMonitorRemoval = new CesiumViewMonitor(this.viewer).Updated().Subscribe(() => {\r\n this.entityCheckQueue.Call();\r\n });\r\n this.entityCheckQueue = new DelayQueue(() => {\r\n this.doEntityCheck();\r\n }, 3000);\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n this.disposed = true;\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n this.entityCheckRemoval?.();\r\n this.viewMonitorRemoval?.();\r\n }\r\n\r\n private async doEntityCheck(): Promise<void> {\r\n if (this.isRunningCheck) {\r\n this.entityCheckQueue.Call();\r\n return;\r\n }\r\n this.isRunningCheck = true;\r\n 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(this.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 api: this.api, \r\n entities: entities,\r\n menuItemId: this.item.id,\r\n visualRegister: this.visualsManager,\r\n zoomControl: this.item.CameraZoomSettings\r\n });\r\n for (let i = 0; i < entities.length; i++) {\r\n const id = <string>entities[i].Bruce.ID;\r\n const cEntity = cEntities[id];\r\n this.renderedEntities[id] = !!cEntity;\r\n if (cEntity) {\r\n const visuals = this.visualsManager.GetVisuals(id, this.item.id);\r\n if (visuals.length != 1 || (visuals.length > 0 && visuals[0] != cEntity)) {\r\n this.visualsManager.Add({\r\n entityId: <string>id,\r\n menuItemId: this.item.id,\r\n visuals: [cEntity],\r\n priority: 0\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\r\n }\r\n }\r\n }\r\n}","import { BatchedDataGetter, BruceApi, Entity, IDictionary, ZoomControl, MenuItem } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\r\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\n\r\nexport namespace EntitiesLoadedRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private api: BruceApi;\r\n private item: MenuItem.Item.IEntitiesLoaded;\r\n private getter: BatchedDataGetter.Getter<Entity.IEntity> = <any>null;\r\n private getterSub: () => void = <any>null;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private renderedEntities: IDictionary<boolean> = {};\r\n private visualsManager: VisualsRegister;\r\n\r\n\r\n constructor(viewer: Cesium.Viewer, visualsManager: VisualsRegister, api: BruceApi, item: MenuItem.Item.IEntitiesLoaded) {\r\n this.viewer = viewer;\r\n this.api = api;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public async Init(): Promise<void> {\r\n if (this.disposed) {\r\n throw(new Error(\"This item is disposed.\"));\r\n }\r\n this.getter = new BatchedDataGetter.Getter<Entity.IEntity>(\r\n this.item.BruceEntity.Entities,\r\n new CesiumViewMonitor(this.viewer),\r\n 500\r\n );\r\n this.getterSub = this.getter.OnUpdate.Subscribe((entities) => {\r\n this.onGetterUpdate(entities);\r\n });\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n this.disposed = true;\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n }\r\n\r\n private async onGetterUpdate(entities: Entity.IEntity[]): Promise<void> {\r\n if (this.disposed) {\r\n return;\r\n }\r\n const cEntities = await EntityRenderEngine.Render({\r\n viewer: this.viewer, \r\n api: this.api, \r\n entities: entities,\r\n menuItemId: this.item.id,\r\n visualRegister: this.visualsManager,\r\n zoomControl: this.item.CameraZoomSettings\r\n });\r\n for (let i = 0; i < entities.length; i++) {\r\n const id = <string>entities[i].Bruce.ID;\r\n const cEntity = cEntities[id];\r\n this.renderedEntities[id] = !!cEntity;\r\n if (cEntity) {\r\n const visuals = this.visualsManager.GetVisuals(id, this.item.id);\r\n if (visuals.length != 1 || (visuals.length > 0 && visuals[0] != cEntity)) {\r\n this.visualsManager.Add({\r\n entityId: <string>id,\r\n menuItemId: this.item.id,\r\n visuals: [cEntity],\r\n priority: 0\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\r\n }\r\n }\r\n }\r\n}","import { BatchedDataGetter, BruceApi, Entity, IDictionary, MenuItem } 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\nexport namespace EntitiesIdsRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private api: BruceApi;\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;\r\n\r\n\r\n constructor(viewer: Cesium.Viewer, visualsManager: VisualsRegister, api: BruceApi, item: MenuItem.Item.IEntityIds) {\r\n this.viewer = viewer;\r\n this.api = api;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public async Init(): Promise<void> {\r\n if (this.disposed) {\r\n throw(new Error(\"This item is disposed.\"));\r\n }\r\n this.getter = new BatchedDataGetter.Getter<string>(\r\n this.item.BruceEntity.EntityIds,\r\n new CesiumViewMonitor(this.viewer),\r\n 500\r\n );\r\n this.getterSub = this.getter.OnUpdate.Subscribe((ids) => {\r\n this.onGetterUpdate(ids);\r\n });\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n this.disposed = true;\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n }\r\n\r\n private async onGetterUpdate(entityIds: string[]): Promise<void> {\r\n if (this.disposed) {\r\n return;\r\n }\r\n const entities = await Entity.GetListByIds(this.api, entityIds);\r\n const cEntities = await EntityRenderEngine.Render({\r\n viewer: this.viewer, \r\n api: this.api, \r\n entities: entities,\r\n menuItemId: this.item.id,\r\n visualRegister: this.visualsManager,\r\n zoomControl: this.item.CameraZoomSettings\r\n });\r\n for (let i = 0; i < entities.length; i++) {\r\n const id = <string>entities[i].Bruce.ID;\r\n const cEntity = cEntities[id];\r\n this.renderedEntities[id] = !!cEntity;\r\n if (cEntity) {\r\n const visuals = this.visualsManager.GetVisuals(id, this.item.id);\r\n if (visuals.length != 1 || (visuals.length > 0 && visuals[0] != cEntity)) {\r\n this.visualsManager.Add({\r\n entityId: <string>id,\r\n menuItemId: this.item.id,\r\n visuals: [cEntity],\r\n priority: 0\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\r\n }\r\n }\r\n }\r\n}","import { BatchedDataGetter, BruceApi, Entity, IDictionary, MenuItem, ZoomControl } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\r\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\n\r\nexport namespace EntityRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private api: BruceApi;\r\n private item: MenuItem.Item.IBruceEntity;\r\n private getter: BatchedDataGetter.Getter<string> = <any>null;\r\n private getterSub: () => void = <any>null;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private visualsManager: VisualsRegister;\r\n\r\n\r\n constructor(viewer: Cesium.Viewer, visualsManager: VisualsRegister, api: BruceApi, item: MenuItem.Item.IBruceEntity) {\r\n this.viewer = viewer;\r\n this.api = api;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public async Init(): Promise<void> {\r\n if (this.disposed) {\r\n throw(new Error(\"This item is disposed.\"));\r\n }\r\n this.getter = new BatchedDataGetter.Getter<string>(\r\n [this.item.BruceEntity.EntityId],\r\n new CesiumViewMonitor(this.viewer),\r\n 1\r\n );\r\n this.getterSub = this.getter.OnUpdate.Subscribe((ids) => {\r\n this.onGetterUpdate(ids[0]);\r\n });\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.disposed = true;\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n }\r\n\r\n private async onGetterUpdate(id: string): Promise<void> {\r\n if (this.disposed) {\r\n return;\r\n }\r\n const entity = await Entity.Get(this.api, id);\r\n const cEntities = await EntityRenderEngine.Render({\r\n viewer: this.viewer, \r\n api: this.api, \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 visuals = this.visualsManager.GetVisuals(id, this.item.id);\r\n if (visuals.length != 1 || (visuals.length > 0 && visuals[0] != cEntity)) {\r\n this.visualsManager.Add({\r\n entityId: <string>entity.Bruce.ID,\r\n menuItemId: this.item.id,\r\n visuals: [cEntity],\r\n priority: 0\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\r\n }\r\n }\r\n}","import { BruceApi, Calculator, Carto, Color, Entity, EntityType, IDictionary, Style, Tileset, TilesetCad } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { IVisualRego } 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 api: BruceApi;\r\n tileset: Tileset.ITileset;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export function ApplySettings(cTileset: Cesium.Cesium3DTileset, tileset: Tileset.ITileset): void {\r\n if (tileset.type == Tileset.EType.Cad) {\r\n const settings = tileset.settings as TilesetCad.ISettings;\r\n const root = cTileset.root;\r\n let transform = settings.transform;\r\n if (!transform) {\r\n transform = {\r\n heading: 0,\r\n pitch: 0,\r\n roll: 0,\r\n scale: 1\r\n };\r\n }\r\n const point = <Carto.ICarto>settings.location;\r\n const pos = Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\r\n const hpr = Cesium.HeadingPitchRoll.fromDegrees(transform.heading, transform.pitch, transform.roll, new Cesium.HeadingPitchRoll());\r\n root.transform = Cesium.Transforms.headingPitchRollToFixedFrame(pos, hpr);\r\n \r\n let scale = +transform?.scale;\r\n if (!scale || scale <= 0) {\r\n scale = 0.000001;\r\n }\r\n let scaleMatrix = Cesium.Matrix4.fromScale(new Cesium.Cartesian3(scale, scale, scale), new Cesium.Matrix4());\r\n root.transform = Cesium.Matrix4.multiply(root.transform, scaleMatrix, root.transform);\r\n \r\n // Force matrix to update\r\n (<any>root).updateTransform();\r\n \r\n const maxScreenSpaceError = settings.maximumScreenSpaceError;\r\n if (maxScreenSpaceError || maxScreenSpaceError == 0) {\r\n cTileset.maximumScreenSpaceError = maxScreenSpaceError;\r\n }\r\n }\r\n else {\r\n throw(\"Not implemented.\");\r\n }\r\n }\r\n\r\n export function Render(params: IParams): Cesium.Cesium3DTileset {\r\n if (params.tileset.type == Tileset.EType.Cad) {\r\n const cTileset = new Cesium.Cesium3DTileset({\r\n url: Tileset.GetPublicFileUrl(params.api, params.tileset.id, \"tileset.json\") + \"?generation=\" + params.tileset.generateVersion\r\n });\r\n params.viewer.scene.primitives.add(cTileset);\r\n cTileset.readyPromise.then(() => {\r\n ApplySettings(cTileset, params.tileset);\r\n });\r\n return cTileset;\r\n }\r\n else {\r\n throw(\"Not implemented.\");\r\n }\r\n }\r\n\r\n export class CadStyler {\r\n private api: BruceApi;\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<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, 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: 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: 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(): IVisualRego[] {\r\n const BATCH_SIZE = 30;\r\n const batchHashes = this.recordLoadQueue.splice(0, BATCH_SIZE);\r\n const entities: 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: 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: IVisualRego): void {\r\n this.styleTilesetFeatureFullData(entity, <any>null); \r\n }\r\n\r\n private styleTilesetFeatureFullData(entity: 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.visuals.length > 0 ? entity.visuals[0] : null;\r\n if (visual && visual instanceof Cesium.Cesium3DTileFeature) {\r\n visual.color = cColor;\r\n }\r\n }\r\n }\r\n\r\n private getTilesetFeatureStyle(entityId: string, entityTypeId: string): Style.IEntitySettings {\r\n // Locate what style is applicable to the feature.\r\n let style: Style.IStyle = <any>null;\r\n if (entityTypeId) {\r\n style = <Style.IStyle>this.styleMapping.find(x => x.EntityTypeID == entityTypeId)?.style;\r\n }\r\n if (!style) {\r\n style = this.fallbackStyle;\r\n }\r\n if (!style) {\r\n return <any>null;\r\n }\r\n if (!(<Style.IEntitySettings>style.Settings)?.modelStyle?.customize) {\r\n return <any>null;\r\n }\r\n return <Style.IEntitySettings>style.Settings;\r\n }\r\n\r\n private getTilesetFeatureNeedsFullData(entityId: string, entityTypeId: string): boolean {\r\n const style = this.getTilesetFeatureStyle(entityId, entityTypeId);\r\n if (!style) {\r\n return false;\r\n }\r\n const fill = style?.modelStyle?.fillColor;\r\n if (!fill || fill.length <= 0) {\r\n return false;\r\n }\r\n return fill[0].type != 0;\r\n }\r\n }\r\n}","import { BruceApi, MenuItem, Tileset, Color } from \"bruce-models\";\r\nimport { IVisualRego, 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\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 TilesetCadRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private api: BruceApi;\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;\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, api: BruceApi, item: MenuItem.Item.ICadTileset) {\r\n this.viewer = viewer;\r\n this.api = api;\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 const tileset = await Tileset.Get(this.api, tilesetId);\r\n if (!tileset) {\r\n return;\r\n }\r\n\r\n const cTileset = this.cTileset = TilesetRenderEngine.Render({\r\n api: this.api,\r\n tileset: tileset,\r\n viewer: this.viewer\r\n });\r\n cTileset.readyPromise.then(() => {\r\n this.onCTilesetLoad();\r\n });\r\n cTileset.tileLoad.addEventListener((tile) => {\r\n this.mapCTile(tile);\r\n });\r\n this.styler = new TilesetRenderEngine.CadStyler(this.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): 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: IVisualRego = {\r\n entityId: <any>null,\r\n entityTypeId: <any>null,\r\n menuItemId: this.item.id,\r\n priority: 0,\r\n visuals: [feature]\r\n };\r\n if (version == 1) {\r\n const pathStr = (<Cesium.Cesium3DTileFeature><any>feature).getProperty(\"BrucePath\");\r\n if (pathStr != undefined) {\r\n let path = pathStr.split(\"|\");\r\n let entityTypeId = this.getEntityTypeByPath(path);\r\n rego.entityTypeId = entityTypeId;\r\n rego.entityId = path[path.length - 1];\r\n }\r\n }\r\n else if (version == 2) {\r\n const geomId = +feature.getProperty(\"GeomId\");\r\n if (geomId != null && (!!geomId || geomId == 0)) {\r\n const meta = this.getMetaByGeomId(geomId, feature.tileset);\r\n if (meta) {\r\n rego.entityId = meta.id;\r\n rego.entityTypeId = meta.typeId;\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"Unhandled tileset tree version = \" + version);\r\n }\r\n if (rego?.entityId) {\r\n this.visualsManager.Add(rego);\r\n return rego;\r\n }\r\n return <any>null;\r\n }\r\n\r\n private getMetaByGeomId(geomId: number, tileset: Cesium.Cesium3DTileset): { id: string, typeId: string } {\r\n let modelTree: any = tileset?.extensions?.modelTree;\r\n return this.digMetaByGeomId(geomId, modelTree, []);\r\n }\r\n \r\n private digMetaByGeomId(geomId: number, branch: any, path: string[]): { id: string, typeId: string } {\r\n path = [].concat(<any>path);\r\n path.push(branch.id);\r\n\r\n if (branch.geomId == geomId) {\r\n return { id: path[path.length - 1], typeId: branch.typeId };\r\n }\r\n else if (branch.children) {\r\n for (let i = 0; i < branch.children.length; i++) {\r\n let meta = this.digMetaByGeomId(geomId, branch.children[i], path);\r\n if (meta) {\r\n return meta;\r\n }\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n private getEntityTypeByPath(path: string[]): string {\r\n let modelTree: any = this.cTileset?.extensions?.modelTree;\r\n if (modelTree) {\r\n let data = this.digModelTreeByPath(modelTree, path);\r\n if (data) {\r\n return data.typeId;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n \r\n private digModelTreeByPath(branch: any, path: string[]): any {\r\n // Dereference.\r\n path = JSON.parse(JSON.stringify(path));\r\n \r\n if (path.length <= 0) {\r\n return null;\r\n }\r\n let pathTop = path.splice(0, 1)[0];\r\n if (pathTop != branch.id) {\r\n return null;\r\n }\r\n else if (path.length == 0 && pathTop == branch.id) {\r\n return branch;\r\n }\r\n else if (branch.children) {\r\n for (let i = 0; i < branch.children.length; i++) {\r\n let foundPath = this.digModelTreeByPath(branch.children[i], path);\r\n if (foundPath) {\r\n return foundPath;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.disposed = true;\r\n if (this.cTileset) {\r\n this.cTileset.show = false;\r\n }\r\n this.styler.Dispose();\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n }\r\n }\r\n}","import { BruceApi, MenuItem, ObjectUtils } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntitiesRenderManager } from \"./render-managers/entities/entities-render-manager\";\r\nimport { EntitiesLoadedRenderManager } from \"./render-managers/entities/entities-loaded-render-manager\";\r\nimport { RenderManager } from \"./render-managers/render-manager\";\r\nimport { VisualsRegister } from \"./visuals-register\";\r\nimport { EntitiesIdsRenderManager } from \"./render-managers/entities/entities-ids-render-manager\";\r\nimport { EntityRenderManager } from \"./render-managers/entities/entity-render-manager\";\r\nimport { TilesetCadRenderManager } from \"./render-managers/tilesets/tileset-cad-render-manager\";\r\n\r\ninterface IRenderedItem {\r\n id: string;\r\n type: MenuItem.EType;\r\n childIds: string[];\r\n item: MenuItem.IItem;\r\n renderManager: RenderManager.Type;\r\n}\r\n\r\nexport class MenuItemManager {\r\n private viewer: Cesium.Viewer;\r\n private items: IRenderedItem[] = [];\r\n private visualsRegister: VisualsRegister;\r\n\r\n\r\n public constructor(viewer: Cesium.Viewer, visualsRegister: VisualsRegister) {\r\n this.viewer = viewer;\r\n this.visualsRegister = visualsRegister;\r\n }\r\n\r\n public async RenderItem(api: BruceApi, item: MenuItem.IItem): Promise<string> {\r\n const rItem: IRenderedItem = {\r\n id: item.id ?? ObjectUtils.UId(),\r\n childIds: [],\r\n item: item,\r\n renderManager: <any>null,\r\n type: item.Type\r\n }\r\n switch (item.Type) {\r\n case MenuItem.EType.Entities:\r\n rItem.renderManager = new EntitiesRenderManager.Manager(this.viewer, this.visualsRegister, api, <MenuItem.Item.IBruceEntities>item);\r\n break;\r\n case MenuItem.EType.EntitiesLoaded:\r\n rItem.renderManager = new EntitiesLoadedRenderManager.Manager(this.viewer, this.visualsRegister, api, <MenuItem.Item.IEntitiesLoaded>item);\r\n break;\r\n case MenuItem.EType.EntitiesIds:\r\n rItem.renderManager = new EntitiesIdsRenderManager.Manager(this.viewer, this.visualsRegister, api, <MenuItem.Item.IEntityIds>item);\r\n break;\r\n case MenuItem.EType.Entity:\r\n rItem.renderManager = new EntityRenderManager.Manager(this.viewer, this.visualsRegister, api, <MenuItem.Item.IBruceEntity>item);\r\n case MenuItem.EType.CadTileset:\r\n rItem.renderManager = new TilesetCadRenderManager.Manager(this.viewer, this.visualsRegister, api, <MenuItem.Item.ICadTileset>item);\r\n break;\r\n case MenuItem.EType.Osm:\r\n // TODO;\r\n break;\r\n case MenuItem.EType.PointCloud:\r\n // TODO;\r\n break;\r\n case MenuItem.EType.EntityTileset:\r\n // TODO;\r\n break;\r\n case MenuItem.EType.Kml:\r\n // TODO;\r\n break;\r\n // Any \"none\" type can be ignored. These are just containers for other items.\r\n case MenuItem.EType.None:\r\n case <any>\"\":\r\n case null:\r\n break;\r\n default:\r\n throw(\"Menu item type is not implemented.\");\r\n }\r\n if (rItem.renderManager) {\r\n await rItem.renderManager.Init();\r\n }\r\n this.items.push(rItem);\r\n if (item.Children) {\r\n for (let i = 0; i < item.Children.length; i++) {\r\n const childId = await this.RenderItem(api, item.Children[i]);\r\n rItem.childIds.push(childId);\r\n }\r\n }\r\n return rItem.id;\r\n }\r\n\r\n public async RemoveItemById(id: string): Promise<void> {\r\n const item = this.items.find(x => x.id === id);\r\n if (item) {\r\n for (let i = 0; i < item.childIds.length; i++) {\r\n const child = this.items.find(x => x.id === item.childIds[i]);\r\n if (child) {\r\n await this.RemoveItemById(child.id);\r\n }\r\n }\r\n try {\r\n item.renderManager.Dispose();\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n this.items = this.items.filter(x => x.id !== id);\r\n }\r\n }\r\n}","import { BruceApi, Entity, MenuItem, ObjectUtils, Tileset, ZoomControl } from \"bruce-models\";\r\nimport { MenuItemManager } from \"./menu-item-manager\";\r\nimport * as Cesium from \"cesium\";\r\n\r\nexport namespace RenderHelper {\r\n export async function RenderEntities(manager: MenuItemManager, api: BruceApi, 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 manager.RenderItem(api, item);\r\n }\r\n\r\n export async function RenderEntityTypes(manager: MenuItemManager, api: BruceApi, typeIds: string[]): Promise<string> {\r\n const groupItem: MenuItem.IItem = {\r\n Caption: \"Rendering Entity Types\",\r\n Type: MenuItem.EType.None,\r\n id: ObjectUtils.UId(),\r\n Children: []\r\n };\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 groupItem.Children?.push(menuItem);\r\n }\r\n return await manager.RenderItem(api, groupItem);\r\n }\r\n\r\n export async function RenderEntityFilter(viewer: Cesium.Viewer, api: BruceApi, filter: Entity.Filter.V1.IFilter): Promise<string> {\r\n throw(new Error(\"Not implemented.\"));\r\n }\r\n\r\n export async function RenderBookmark(viewer: Cesium.Viewer, api: BruceApi, viewId: string, bookmarkId: string): Promise<string> {\r\n throw(new Error(\"Not implemented.\"));\r\n }\r\n\r\n export async function RenderMenuItems(manager: MenuItemManager, api: BruceApi, menuItems: MenuItem.IItem[]): Promise<string> {\r\n const groupItem: MenuItem.IItem = {\r\n Caption: \"Rendering Menu Items\",\r\n Type: MenuItem.EType.None,\r\n id: ObjectUtils.UId(),\r\n Children: []\r\n };\r\n for (let i = 0; i < menuItems.length; i++) {\r\n const menuItem = menuItems[i];\r\n groupItem.Children?.push(menuItem);\r\n }\r\n return await manager.RenderItem(api, groupItem);\r\n }\r\n\r\n export async function RenderTileset(manager: MenuItemManager, api: BruceApi, tilesetId: string): Promise<string> {\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 manager.RenderItem(api, menuItem);\r\n }\r\n else {\r\n throw(new Error(\"Tileset type not supported.\"));\r\n }\r\n }\r\n}","import { Cartes, IDictionary, ObjectUtils } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityRenderEngine } from \"./entity-render-engine\";\r\n\r\ntype Visual = Cesium.Entity | Cesium.Primitive | Cesium.Cesium3DTileFeature;\r\n\r\ninterface IVisualExt {//extends Visual {\r\n _register?: VisualsRegister;\r\n _rego?: IVisualRego;\r\n}\r\n\r\nexport interface IVisualRego {\r\n entityId: string;\r\n entityTypeId?: string;\r\n menuItemId: string;\r\n visuals: Visual[];\r\n priority: number;\r\n}\r\n\r\nfunction removeEntity(viewer: Cesium.Viewer, visuals: Visual[]): void {\r\n unmarkEntity(visuals);\r\n for (let i = 0; i < visuals.length; i++) {\r\n const visual = visuals[i];\r\n if (visual instanceof Cesium.Entity) {\r\n EntityRenderEngine.Remove(viewer, visual);\r\n }\r\n else if (visual instanceof Cesium.Primitive) {\r\n viewer.scene.primitives.remove(visual);\r\n }\r\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\r\n visual.show = false;\r\n }\r\n }\r\n}\r\n\r\nfunction updateCEntityShow(viewer: Cesium.Viewer, visual: EntityRenderEngine.ICesiumEntityExt, show: boolean) {\r\n if (visual._parentEntity) {\r\n updateCEntityShow(viewer, visual._parentEntity, show);\r\n }\r\n if (visual._siblingGraphics) {\r\n for (let i = 0; i < visual._siblingGraphics.length; i++) {\r\n const sibling = visual._siblingGraphics[i];\r\n updateCEntityShow(viewer, sibling, show);\r\n }\r\n }\r\n visual.show = show;\r\n}\r\n\r\nfunction updateEntityShow(viewer: Cesium.Viewer, visual: Visual, show: boolean): void {\r\n if (visual instanceof Cesium.Entity) {\r\n updateCEntityShow(viewer, visual, show);\r\n }\r\n else if (visual instanceof Cesium.Primitive) {\r\n visual.show = show;\r\n }\r\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\r\n visual.show = show;\r\n }\r\n}\r\n\r\nfunction updateEntity(viewer: Cesium.Viewer, entityRegos: IVisualRego[]): void {\r\n let highestPriority: IVisualRego = <any>null;\r\n for (let i = 0; i < entityRegos.length; i++) {\r\n const rego = entityRegos[i];\r\n if (highestPriority === null || rego.priority > highestPriority.priority) {\r\n highestPriority = rego;\r\n }\r\n }\r\n for (let i = 0; i < entityRegos.length; i++) {\r\n const rego = entityRegos[i];\r\n for (let j = 0; j < rego.visuals.length; j++) {\r\n const visual = rego.visuals[j];\r\n updateEntityShow(viewer, visual, rego === highestPriority);\r\n }\r\n }\r\n}\r\n\r\nfunction markEntity(register: VisualsRegister, rego: IVisualRego, visuals: Visual[]): void {\r\n for (let i = 0; i < visuals.length; i++) {\r\n const visual = visuals[i];\r\n const vis = <IVisualExt>visual;\r\n vis._register = register;\r\n vis._rego = rego;\r\n if (visual instanceof Cesium.Entity) {\r\n const visEnt = <EntityRenderEngine.ICesiumEntityExt>visual;\r\n if (visEnt._parentEntity) {\r\n markEntity(register, rego, [visEnt._parentEntity]);\r\n }\r\n if (visEnt._siblingGraphics) {\r\n markEntity(register, rego, visEnt._siblingGraphics);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction unmarkEntity(visuals: Visual[]): void {\r\n for (let i = 0; i < visuals.length; i++) {\r\n const visual = visuals[i];\r\n const vis = <IVisualExt>visual;\r\n vis._register = <any>null;\r\n if (visual instanceof Cesium.Entity) {\r\n const visEnt = <EntityRenderEngine.ICesiumEntityExt>visual;\r\n if (visEnt._parentEntity) {\r\n unmarkEntity([visEnt._parentEntity]);\r\n }\r\n if (visEnt._siblingGraphics) {\r\n unmarkEntity(visEnt._siblingGraphics);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport class VisualsRegister {\r\n private id = ObjectUtils.UId();\r\n public get Id(): string {\r\n return this.id;\r\n }\r\n private viewer: Cesium.Viewer;\r\n private rego: IDictionary<IVisualRego[]> = {};\r\n\r\n\r\n constructor(viewer: Cesium.Viewer) {\r\n this.viewer = viewer;\r\n }\r\n\r\n public Add(rego: IVisualRego): void {\r\n this.Remove(rego.entityId, rego.menuItemId, false);\r\n const entityId = rego.entityId;\r\n const entityRegos = this.rego[entityId] ?? [];\r\n entityRegos.push(rego);\r\n this.rego[entityId] = entityRegos;\r\n markEntity(this, rego, rego.visuals);\r\n updateEntity(this.viewer, this.rego[entityId]);\r\n }\r\n\r\n public GetVisuals(entityId: string, menuItemId: string): Visual[] {\r\n const entityRegos = this.rego[entityId];\r\n if (!entityRegos) {\r\n return <any>[];\r\n }\r\n const visuals = <any>entityRegos.find(r => r.menuItemId === menuItemId)?.visuals;\r\n return visuals ?? [];\r\n }\r\n\r\n public RemoveByEntityId(id: string): void {\r\n const entityRegos = this.rego[id];\r\n if (!entityRegos) {\r\n return;\r\n }\r\n for (let i = 0; i < entityRegos.length; i++) {\r\n const rego = entityRegos[i];\r\n removeEntity(this.viewer, rego.visuals);\r\n }\r\n this.rego[id] = [];\r\n delete this.rego[id];\r\n }\r\n\r\n public RemoveByMenuItemId(id: string): void {\r\n for (const entityId in this.rego) {\r\n const entityRegos = this.rego[entityId];\r\n if (entityRegos) {\r\n const rego = entityRegos.find(r => r.menuItemId === id);\r\n if (!rego) {\r\n continue;\r\n }\r\n removeEntity(this.viewer, rego.visuals);\r\n const doesInclude = this.rego[entityId].find(r => r.menuItemId === id);\r\n if (doesInclude) {\r\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== id);\r\n updateEntity(this.viewer, this.rego[entityId]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n public Remove(entityId: string, menuItemId: string, _doUpdate: boolean = true): void {\r\n const entityRegos = this.rego[entityId];\r\n if (!entityRegos) {\r\n return;\r\n }\r\n const rego = entityRegos.find(r => r.menuItemId === menuItemId);\r\n if (!rego) {\r\n return;\r\n }\r\n for (let i = 0; i < rego.visuals.length; i++) {\r\n const visual = rego.visuals[i];\r\n if (visual instanceof Cesium.Entity) {\r\n this.viewer.entities.remove(visual);\r\n }\r\n else if (visual instanceof Cesium.Primitive) {\r\n this.viewer.scene.primitives.remove(visual);\r\n }\r\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\r\n visual.show = false;\r\n }\r\n }\r\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== menuItemId);\r\n if (_doUpdate) {\r\n updateEntity(this.viewer, this.rego[entityId]);\r\n }\r\n }\r\n\r\n public GetFromCursor(cursor: Cartes.ICartes2): IVisualRego[] {\r\n const found: IVisualRego[] = [];\r\n const picked = this.viewer.scene.drillPick(new Cesium.Cartesian2(cursor.x, cursor.y), 5);\r\n for (let i = 0; i < picked.length; i++) {\r\n const object = picked[i];\r\n const entity = <Visual>(object && object.id && object.id instanceof Cesium.Entity ? object.id : object);\r\n const visual = <IVisualExt>entity;\r\n if (visual?._register?.Id == this.id) {\r\n found.push(<IVisualRego>visual._rego);\r\n }\r\n }\r\n return found;\r\n }\r\n}"],"names":["Cesium.Cartesian2","Cesium.Cartographic","BruceEvent","Cesium.Math","Cesium.Viewer","Cesium.ArcGisMapServerImageryProvider","Cesium.ScreenSpaceEventType","ViewerUtils","Cesium.Cartesian3","Cesium.EllipsoidGeodesic","Carto","Geometry","Cartes","RenderManager","Cesium.Color","Calculator","Cesium.HeightReference","Style","EntityType","ZoomControl","Cesium.Entity","EntityTag","Cesium.ClassificationType","Cesium.ArcType","Cesium.PolygonHierarchy","Cesium.ShadowMode","Cesium.PolylineGraphics","Cesium.HeadingPitchRoll","Cesium.Transforms","Cesium.ColorBlendMode","EntityLod","ClientFile","EntityRenderEngine","EntityFilterGetter","DelayQueue","Entity","EntitiesRenderManager","BatchedDataGetter","EntitiesLoadedRenderManager","EntitiesIdsRenderManager","EntityRenderManager","colorToCColor","Tileset","Cesium.Matrix4","Cesium.Cesium3DTileset","Cesium.Cesium3DTileFeature","Cesium.HeadingPitchRange","TilesetCadRenderManager","ObjectUtils","MenuItem","RenderHelper","Cesium.Primitive"],"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/menu-item-manager.ts","../src/rendering/render-helper.ts"],"sourcesContent":["import { Bounds, BruceEvent, Carto, ViewMonitor } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\n\r\nconst TIME_LAG = 300;\r\nconst POSITION_CHECK_TIMER = 950;\r\nconst DEFAULT_GROUNDED_HEIGHT = 300;\r\nconst MINIMUM_VIEW_AREA_SIZE_DEGREES = 0.01;\r\nconst NET_STEP_PERCENT = 5;\r\nconst BORDER_STEPS = 3;\r\n\r\nenum ESearchStatus {\r\n LocationFound = 1,\r\n LocationChanged = 2,\r\n LocationMissing = 3\r\n}\r\n\r\nfunction netScanViewForBoundaries(viewer: Cesium.Viewer): Bounds.IReqBounds {\r\n let maxLong = - 2 * Math.PI;\r\n let minLong = 2 * Math.PI;\r\n let maxLat = -2 * Math.PI;\r\n let minLat = 2 * Math.PI;\r\n let found = 0;\r\n\r\n const updateMinMaxForPoint = (stepX: number, stepY: number) => {\r\n const x = Math.round(0 + (viewer.container.clientWidth / 100) * (stepX * NET_STEP_PERCENT));\r\n const y = Math.round(0 + (viewer.container.clientHeight / 100) * (stepY * NET_STEP_PERCENT));\r\n const winPos = new Cesium.Cartesian2(x, y);\r\n try {\r\n let intersection = getAdjustedGroundIntersectionOfCameraRay(viewer, winPos);\r\n if (intersection) {\r\n let point = (<any> Cesium.Cartographic).fromCartesian(intersection, viewer.scene.globe.ellipsoid);\r\n maxLong = Math.max(maxLong, point.longitude);\r\n maxLat = Math.max(maxLat, point.latitude);\r\n minLong = Math.min(minLong, point.longitude);\r\n minLat = Math.min(minLat, point.latitude);\r\n found++;\r\n }\r\n }\r\n catch {\r\n\r\n }\r\n };\r\n\r\n // Outer circle.\r\n updateMinMaxForPoint(BORDER_STEPS, BORDER_STEPS);\r\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS, BORDER_STEPS);\r\n updateMinMaxForPoint(BORDER_STEPS, (100 / NET_STEP_PERCENT) - BORDER_STEPS);\r\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS, (100 / NET_STEP_PERCENT) - BORDER_STEPS);\r\n\r\n // Inner circle.\r\n updateMinMaxForPoint(BORDER_STEPS * 2, BORDER_STEPS * 2);\r\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS * 2, BORDER_STEPS * 2);\r\n updateMinMaxForPoint(BORDER_STEPS * 2, (100 / NET_STEP_PERCENT) - BORDER_STEPS * 2);\r\n updateMinMaxForPoint((100 / NET_STEP_PERCENT) - BORDER_STEPS * 2, (100 / NET_STEP_PERCENT) - BORDER_STEPS * 2);\r\n\r\n if (found > 0) {\r\n const viewRect: Bounds.IReqBounds = {\r\n east: maxLong,\r\n west: minLong,\r\n north: maxLat,\r\n south: minLat\r\n };\r\n return viewRect;\r\n }\r\n return <any>null;\r\n}\r\n\r\nfunction getAdjustedGroundIntersectionOfCameraRay(viewer: Cesium.Viewer, screenPos: Cesium.Cartesian2): Cesium.Cartesian3 {\r\n const ray = viewer.camera.getPickRay(screenPos);\r\n const intersection = ray ? viewer.scene.globe.pick(ray, viewer.scene) : null;\r\n if (intersection) {\r\n return intersection;\r\n }\r\n return <any>null;\r\n}\r\n\r\nfunction areBoundsEqual(a: Bounds.IReqBounds, b: Bounds.IReqBounds): boolean {\r\n return a.north == b.north && a.south == b.south && a.east == b.east && a.west == b.west;\r\n}\r\n\r\nfunction arePosEqual(a: Carto.ICarto, b: Carto.ICarto): boolean {\r\n return a.latitude == b.latitude && a.longitude == b.longitude;\r\n}\r\n\r\n/**\r\n * Monitors and emits events when the Cesium view changes.\r\n */\r\nexport class CesiumViewMonitor implements ViewMonitor.IMonitor {\r\n private viewer: Cesium.Viewer;\r\n private pendingTimeout: any;\r\n private checkInterval: any;\r\n private target: Carto.ICarto = <any>null;\r\n private bounds: Bounds.IReqBounds = <any>null;\r\n private disposed: boolean = false;\r\n private updatedEvent: BruceEvent<ViewMonitor.IArea> = <any>null;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n\r\n\r\n public constructor(viewer: Cesium.Viewer) {\r\n this.viewer = viewer;\r\n this.checkInterval = setInterval(() => {\r\n this.updateQueue();\r\n },\r\n POSITION_CHECK_TIMER);\r\n }\r\n\r\n public Updated(): BruceEvent<ViewMonitor.IArea> {\r\n if (!this.updatedEvent) {\r\n this.updatedEvent = new BruceEvent();\r\n }\r\n return this.updatedEvent;\r\n }\r\n\r\n public GetBounds(): Bounds.IReqBounds {\r\n return this.bounds;\r\n }\r\n\r\n public GetTarget(): Carto.ICarto {\r\n return this.target;\r\n }\r\n\r\n public DoUpdate(): void {\r\n this.tryEmitUpdate();\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.disposed = true;\r\n clearInterval(this.checkInterval);\r\n }\r\n\r\n private tryDoUpdate(): ESearchStatus {\r\n let viewRect: Bounds.IReqBounds = <any>null;\r\n let center: Carto.ICarto = <any>null;\r\n\r\n const camera = this.viewer.camera;\r\n const terrainHeight = this.viewer.scene.globe.getHeight(camera.positionCartographic);\r\n const cameraPosition = this.viewer.camera.positionCartographic;\r\n\r\n // We are almost at the ground, screw horizon, just load around.\r\n if (terrainHeight && ((cameraPosition.height - terrainHeight) < DEFAULT_GROUNDED_HEIGHT)) {\r\n\r\n // View area calculation.\r\n viewRect = <any>{};\r\n const viewRectRad: Bounds.IReqBounds = netScanViewForBoundaries(this.viewer);\r\n if\r\n (\r\n viewRectRad &&\r\n viewRectRad.east &&\r\n viewRectRad.west &&\r\n viewRectRad.north &&\r\n viewRectRad.south\r\n ) {\r\n viewRect.east = Cesium.Math.toDegrees(Math.max(viewRectRad.east, cameraPosition.longitude));\r\n viewRect.west = Cesium.Math.toDegrees(Math.min(viewRectRad.west, cameraPosition.longitude));\r\n viewRect.south = Cesium.Math.toDegrees(Math.min(viewRectRad.south, cameraPosition.latitude));\r\n viewRect.north = Cesium.Math.toDegrees(Math.max(viewRectRad.north, cameraPosition.latitude));\r\n }\r\n else {\r\n viewRect.east = cameraPosition.longitude;\r\n viewRect.west = cameraPosition.longitude;\r\n viewRect.south = cameraPosition.latitude;\r\n viewRect.north = cameraPosition.latitude;\r\n }\r\n center = <any>{};\r\n center.latitude = Cesium.Math.toDegrees(camera.positionCartographic.latitude);\r\n center.longitude = Cesium.Math.toDegrees(camera.positionCartographic.longitude);\r\n }\r\n else {\r\n // View area calculation.\r\n const windowPosition = new Cesium.Cartesian2(\r\n this.viewer.container.clientWidth / 2,\r\n this.viewer.container.clientHeight / 2\r\n );\r\n const intersection = getAdjustedGroundIntersectionOfCameraRay(this.viewer, windowPosition);\r\n\r\n let point = null;\r\n if (intersection) {\r\n point = (<any> Cesium.Cartographic).fromCartesian(intersection, this.viewer.scene.globe.ellipsoid);\r\n }\r\n if (point) {\r\n center = <any>{};\r\n center.latitude = Cesium.Math.toDegrees(point.latitude);\r\n center.longitude = Cesium.Math.toDegrees(point.longitude);\r\n\r\n let viewRectRad: Bounds.IReqBounds = netScanViewForBoundaries(this.viewer);\r\n if (viewRectRad) {\r\n viewRect = <any>{};\r\n viewRect.east = Cesium.Math.toDegrees(viewRectRad.east);\r\n viewRect.west = Cesium.Math.toDegrees(viewRectRad.west);\r\n viewRect.south = Cesium.Math.toDegrees(viewRectRad.south);\r\n viewRect.north = Cesium.Math.toDegrees(viewRectRad.north);\r\n }\r\n }\r\n }\r\n\r\n // Minimal field of view.\r\n if (viewRect) {\r\n const centerLong = (viewRect.east + viewRect.west) / 2;\r\n const centerLat = (viewRect.north + viewRect.south) / 2;\r\n viewRect.east = Math.max(viewRect.east, centerLong + (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\r\n viewRect.west = Math.min(viewRect.west, centerLong - (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\r\n viewRect.south = Math.min(viewRect.south, centerLat - (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\r\n viewRect.north = Math.max(viewRect.north, centerLat + (MINIMUM_VIEW_AREA_SIZE_DEGREES / 2));\r\n }\r\n\r\n if (center && viewRect) {\r\n if (\r\n (!this.target || (this.target && !arePosEqual(this.target, center))) ||\r\n (!this.bounds || (this.bounds && !areBoundsEqual(this.bounds, viewRect)))\r\n ) {\r\n this.target = center;\r\n this.bounds = viewRect;\r\n return ESearchStatus.LocationChanged;\r\n }\r\n return ESearchStatus.LocationFound;\r\n }\r\n return ESearchStatus.LocationMissing;\r\n }\r\n\r\n private tryEmitUpdate() {\r\n const searchResult = this.tryDoUpdate();\r\n if (searchResult == ESearchStatus.LocationChanged) {\r\n const interest: ViewMonitor.IArea = {\r\n \tbounds: this.bounds,\r\n \ttarget: this.target\r\n };\r\n this.updatedEvent?.Trigger(interest);\r\n }\r\n else if (searchResult == ESearchStatus.LocationMissing) {\r\n this.updateQueue();\r\n }\r\n }\r\n\r\n private queuePosition(lag: number) {\r\n if (this.pendingTimeout) {\r\n clearTimeout(this.pendingTimeout);\r\n }\r\n this.pendingTimeout = setTimeout(() => {\r\n if (!this.disposed) {\r\n this.tryEmitUpdate();\r\n }\r\n }, lag);\r\n }\r\n\r\n private updateQueue() {\r\n this.queuePosition(TIME_LAG);\r\n }\r\n}","import * as Cesium from \"cesium\";\r\n\r\ninterface IWidget {\r\n isDestroyed: () => boolean;\r\n destroy: () => void;\r\n}\r\n\r\nexport namespace ViewerUtils {\r\n export interface IViewContainer extends HTMLElement {\r\n _cViewer?: Cesium.Viewer;\r\n }\r\n\r\n /**\r\n * Creates a Cesium viewer in a given HTML container and returns it.\r\n * This will kill all widgets in the process.\r\n * @param container \r\n * @returns \r\n */\r\n export function InitViewer(container: HTMLElement): Cesium.Viewer {\r\n if ((<IViewContainer>container)._cViewer) {\r\n throw new Error(\"Container already has a viewer.\");\r\n }\r\n const cViewer = new Cesium.Viewer(container, {\r\n imageryProvider: new Cesium.ArcGisMapServerImageryProvider({\r\n url: \"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer\",\r\n enablePickFeatures: false\r\n })\r\n });\r\n cViewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);\r\n cViewer.camera.percentageChanged = 0.05;\r\n ViewerUtils.DestroyWidget(cViewer.timeline);\r\n ViewerUtils.DestroyWidget(cViewer.vrButton);\r\n ViewerUtils.DestroyWidget(cViewer.sceneModePicker);\r\n ViewerUtils.DestroyWidget(cViewer.homeButton);\r\n ViewerUtils.DestroyWidget(cViewer.fullscreenButton);\r\n ViewerUtils.DestroyWidget(cViewer.baseLayerPicker);\r\n ViewerUtils.StyleContainer(cViewer);\r\n (<IViewContainer>container)._cViewer = cViewer;\r\n return cViewer;\r\n }\r\n\r\n export function GetViewerFromContainer(container: HTMLElement): Cesium.Viewer {\r\n return <any>(<IViewContainer>container)._cViewer;\r\n }\r\n\r\n export function DestroyWidget(widget: IWidget): void {\r\n if (widget && !widget.isDestroyed()) {\r\n widget.destroy();\r\n }\r\n }\r\n\r\n /**\r\n * Hides all unnecessary elements from the Cesium viewer container.\r\n * @param viewer \r\n */\r\n export function StyleContainer(viewer: Cesium.Viewer) {\r\n const container = viewer.container;\r\n const genContainer = container.getElementsByClassName(\"cesium-viewer\")?.[0];\r\n if (genContainer) {\r\n const children = genContainer.children;\r\n for (let i = 0; i < children.length; i++) {\r\n const child = children[i] as HTMLElement;\r\n if (!child.classList.contains(\"cesium-viewer-cesiumWidgetContainer\")) {\r\n child.style.display = \"none\";\r\n }\r\n }\r\n }\r\n\r\n const canvas = viewer.canvas as HTMLElement;\r\n canvas.style.width = \"100%\";\r\n canvas.style.height = \"100%\";\r\n\r\n const widget = canvas.parentElement as HTMLElement;\r\n widget.style.width = \"100%\";\r\n widget.style.height = \"100%\";\r\n widget.style.touchAction = \"none\";\r\n\r\n const widgetContainer = widget.parentElement as HTMLElement;\r\n widgetContainer.style.width = \"100%\";\r\n widgetContainer.style.height = \"100%\";\r\n\r\n const viewerContainer = widgetContainer.parentElement as HTMLElement;\r\n viewerContainer.style.fontFamily = \"sans-serif\";\r\n viewerContainer.style.fontSize = \"16px\";\r\n viewerContainer.style.overflow = \"hidden\";\r\n viewerContainer.style.display = \"block\";\r\n viewerContainer.style.position = \"relative\";\r\n viewerContainer.style.top = \"0\";\r\n viewerContainer.style.left = \"0\";\r\n viewerContainer.style.width = \"100%\";\r\n viewerContainer.style.height = \"100%\";\r\n }\r\n}","import * as Cesium from \"cesium\";\r\n\r\nexport namespace DrawingUtils {\r\n /**\r\n * Returns the point across a polyline at a given distance.\r\n * If the distance exceeds the length of the line, the point will be placed at the end of the line.\r\n * @param viewer \r\n * @param positions \r\n * @param distance \r\n * @returns \r\n */\r\n export function PointAcrossPolyline(viewer: Cesium.Viewer, positions: Cesium.Cartesian3[], distance: number): Cesium.Cartesian3 {\r\n if (positions.length > 1) {\r\n let currentDistance = 0;\r\n for (let i = 0; i < positions.length - 1; i++) {\r\n const length = Cesium.Cartesian3.distance(positions[i], positions[i + 1]);\r\n if (length + currentDistance >= distance) {\r\n const carto1 = Cesium.Cartographic.fromCartesian(positions[i]);\r\n const carto2 = Cesium.Cartographic.fromCartesian(positions[i + 1]);\r\n const geodesic = new Cesium.EllipsoidGeodesic(carto1, carto2, viewer.scene.globe.ellipsoid);\r\n const position = geodesic.interpolateUsingSurfaceDistance(distance - currentDistance);\r\n const height = (carto1.height + carto2.height) / 2;\r\n return Cesium.Cartesian3.fromRadians(position.longitude, position.latitude, height);\r\n }\r\n else {\r\n currentDistance += length;\r\n }\r\n }\r\n }\r\n else if (positions.length > 0) {\r\n return positions[0];\r\n }\r\n else {\r\n return <any>null;\r\n }\r\n return positions[positions.length - 1];\r\n }\r\n}","import * as Cesium from \"cesium\";\r\n\r\nexport namespace MeasureUtils {\r\n /**\r\n * Returns the total distance in meters between an array of points.\r\n * This distance is NOT following the terrain.\r\n * @param posses \r\n * @returns \r\n */\r\n export function MeasurePolyline(posses: Cesium.Cartesian3[]): number {\r\n if (posses.length < 2) {\r\n return 0;\r\n }\r\n let totalLength = 0;\r\n let pos1 = null;\r\n let pos2 = null;\r\n for (let i = 0; i < posses.length; i++) {\r\n if (pos1 == null) {\r\n pos1 = posses[i];\r\n }\r\n else if (pos2 == null) {\r\n pos2 = posses[i];\r\n totalLength += Cesium.Cartesian3.distance(pos1, pos2);\r\n pos1 = pos2;\r\n pos2 = null;\r\n }\r\n }\r\n return totalLength;\r\n }\r\n}","import { Cartes, Carto, Entity as E, Geometry } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityRenderEngine } from \"../rendering/entity-render-engine\";\r\nimport { DrawingUtils } from \"./drawing-utils\";\r\nimport { MeasureUtils } from \"./measure-utils\";\r\n\r\nfunction traverseEntity(cEntity: EntityRenderEngine.ICesiumEntityExt, arr: EntityRenderEngine.ICesiumEntityExt[]): void {\r\n if (cEntity._parentEntity) {\r\n traverseEntity(cEntity._parentEntity, arr);\r\n }\r\n if (cEntity._siblingGraphics) {\r\n for (let i = 0; i < cEntity._siblingGraphics.length; i++) {\r\n const sibling = cEntity._siblingGraphics[i];\r\n traverseEntity(sibling, arr);\r\n }\r\n }\r\n arr.push(cEntity);\r\n}\r\n\r\nexport namespace EntityUtils {\r\n /**\r\n * Returns an entity's position.\r\n * This will attempt to calculate it from multiple sources of data.\r\n * @param viewer \r\n * @param entity \r\n * @returns \r\n */\r\n export function GetPos(viewer: Cesium.Viewer, entity: E.IEntity): Cesium.Cartesian3 {\r\n if (entity.location && Carto.ValidateCarto(entity.location)) {\r\n const location = entity.location;\r\n return Cesium.Cartesian3.fromDegrees(location.longitude, location.latitude, location.altitude);\r\n }\r\n if (entity.geometry && typeof entity.geometry == \"object\") {\r\n const pointStr = entity.geometry.Point;\r\n if (pointStr && typeof pointStr == \"string\") {\r\n const points = Geometry.ParsePoints(pointStr);\r\n const point = points.length > 0 ? points[0] : null;\r\n if (point && Carto.ValidateCarto(point)) {\r\n return Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\r\n }\r\n }\r\n const lineStr = entity.geometry.LineString;\r\n if (lineStr && typeof lineStr == \"string\") {\r\n const points = Geometry.ParsePoints(lineStr);\r\n if (points.length > 0) {\r\n const posses = points.map(x => Cesium.Cartesian3.fromDegrees(x.longitude, x.latitude, x.altitude));\r\n const length = MeasureUtils.MeasurePolyline(posses);\r\n if (length > 0) {\r\n const point = DrawingUtils.PointAcrossPolyline(viewer, posses, length / 2);\r\n if (point && Cartes.ValidateCartes3(point)) {\r\n return point;\r\n }\r\n }\r\n else {\r\n return posses[0];\r\n }\r\n }\r\n }\r\n const pRings = entity.geometry.Polygon;\r\n if (pRings && typeof pRings == \"object\") {\r\n const boundary = pRings.find(x => x.Facing == Geometry.EPolygonRingType.Boundaries)\r\n if (boundary?.LinearRing) {\r\n const points = Geometry.ParsePoints(boundary.LinearRing);\r\n const point = Carto.GetCenter(points);\r\n if (point && Carto.ValidateCarto(point)) {\r\n return Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\r\n }\r\n }\r\n }\r\n }\r\n if (entity.boundaries) {\r\n const point: Carto.ICarto = {\r\n latitude: (entity.boundaries.minLatitude + entity.boundaries.maxLatitude) / 2, \r\n longitude: (entity.boundaries.minLongitude + entity.boundaries.maxLongitude) / 2, \r\n altitude: 0\r\n };\r\n if (point && Carto.ValidateCarto(point)) {\r\n return Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n /**\r\n * Returns entity and any associated parent/sibling entities as a flat array.\r\n * @param entity \r\n */\r\n export function GatherEntity(entity: Cesium.Entity): Cesium.Entity[] {\r\n if (entity instanceof Cesium.Entity) {\r\n const cEntity = entity as EntityRenderEngine.ICesiumEntityExt;\r\n const items: EntityRenderEngine.ICesiumEntityExt[] = [];\r\n traverseEntity(cEntity, items);\r\n return items;\r\n }\r\n return [entity];\r\n }\r\n}","import { EntitiesRenderManager } from \"./entities/entities-render-manager\";\r\nimport { EntitiesLoadedRenderManager } from \"./entities/entities-loaded-render-manager\";\r\nimport { EntitiesIdsRenderManager } from \"./entities/entities-ids-render-manager\";\r\nimport { EntityRenderManager } from \"./entities/entity-render-manager\";\r\nimport { EntityUtils } from \"../../utils/entity-utils\";\r\nimport { Entity, ZoomControl } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { TilesetCadRenderManager } from \"./tilesets/tileset-cad-render-manager\";\r\n\r\nexport namespace RenderManager {\r\n export interface IManager {\r\n Init(): Promise<void>;\r\n Dispose(): void;\r\n }\r\n\r\n export type Type = EntitiesRenderManager.Manager | \r\n EntitiesLoadedRenderManager.Manager | \r\n EntitiesIdsRenderManager.Manager | \r\n EntityRenderManager.Manager |\r\n TilesetCadRenderManager.Manager;\r\n\r\n export namespace Utils {\r\n export function DetermineZoomItem(viewer: Cesium.Viewer, entity: Entity.IEntity, zoomControl: ZoomControl.IItem[]): ZoomControl.IItem {\r\n const pos = EntityUtils.GetPos(viewer, entity);\r\n if (!pos) {\r\n return <any>null;\r\n }\r\n const cameraPos = viewer.camera.position;\r\n const distance = Cesium.Cartesian3.distance(pos, cameraPos);\r\n return GetZoomControlFromDistance(zoomControl, distance);\r\n }\r\n \r\n export function GetZoomControlFromDistance(zoomControl: ZoomControl.IItem[], distance: number): ZoomControl.IItem {\r\n for (let i = 0; i < zoomControl.length; i++) {\r\n let zoomItem = zoomControl[i];\r\n if ((distance >= <number>zoomItem.MinZoom) && (distance <= <number>zoomItem.MaxZoom)) {\r\n return zoomItem;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n }\r\n}","import * as Cesium from \"cesium\";\r\nimport { Entity, BruceApi, ZoomControl, Style, EntityTag, Calculator, Color, Geometry, Carto, EntityLod, EntityType, IDictionary, ClientFile } from \"bruce-models\";\r\nimport { EntityUtils } from \"../utils/entity-utils\";\r\nimport { RenderManager } from \"./render-managers/render-manager\";\r\nimport { VisualsRegister } from \"./visuals-register\";\r\n\r\nfunction colorToCColor(color: Color.IColor): Cesium.Color {\r\n return new Cesium.Color(\r\n color.red ? color.red/255 : 0, \r\n color.green ? color.green/255 : 0, \r\n color.blue ? color.blue/255 : 0, \r\n color.alpha\r\n );\r\n}\r\n\r\nfunction getPolygonStyleExtrusion(pStyle: any, entity: Entity.IEntity, tags: EntityTag.ITag[], heightRef: Cesium.HeightReference): number {\r\n const attrPath = pStyle.extrusionPath;\r\n if (!pStyle.useExtrusion || !attrPath) {\r\n return <any>null;\r\n }\r\n try {\r\n const extrusion = +Calculator.GetValue(attrPath, entity, tags);\r\n if (!extrusion && extrusion != 0) {\r\n return <any>null;\r\n }\r\n /* \r\n Cesium extrudes in strange way.\r\n If you want something that is 50 meters above sea, and 5 meters tall,\r\n You need to extrude by 55 meters, if you extrude by 5 it will extrude from sea and look flat.\r\n */\r\n const height = <number>entity.location?.altitude;\r\n return heightRef == Cesium.HeightReference.RELATIVE_TO_GROUND ? extrusion + height : extrusion;\r\n } \r\n catch (e) {\r\n console.error(e);\r\n }\r\n return 0;\r\n}\r\n\r\ninterface IExtrusionData {\r\n value: number;\r\n exHeightRef: Cesium.HeightReference;\r\n posses: Cesium.Cartesian3[];\r\n}\r\n\r\nfunction getPolygonExtrusion(\r\n entity: Entity.IEntity, \r\n tags: EntityTag.ITag[], \r\n ring: Geometry.IPolygonRing,\r\n posses: Cesium.Cartesian3[], \r\n heightRef: Cesium.HeightReference, \r\n pStyle: any\r\n): IExtrusionData {\r\n const data: IExtrusionData = {\r\n value: <any>undefined,\r\n exHeightRef: Cesium.HeightReference.RELATIVE_TO_GROUND,\r\n posses: <any>null\r\n }\r\n\r\n // Step 1. Try get using style.\r\n const extrusion = getPolygonStyleExtrusion(pStyle, entity, tags, heightRef);\r\n if (extrusion) {\r\n if (heightRef == Cesium.HeightReference.NONE) {\r\n // Let's normalize all point heights to be the same (at entity altitude).\r\n // This let's us have a consistent extrusion height, and be adjustable easier by user.\r\n let alt = <number>entity?.location?.altitude;\r\n if (!alt) {\r\n alt = 0;\r\n }\r\n\r\n const points = posses.map(x => Cesium.Cartographic.fromCartesian(x));\r\n points.forEach((point) => {\r\n point.height = alt;\r\n });\r\n posses = points.map(x => Cesium.Cartesian3.fromRadians(x.longitude, x.latitude, x.height));\r\n }\r\n }\r\n // Step 2. Try get using geometry data.\r\n else {\r\n data.exHeightRef = <any>undefined;\r\n if (ring.Height && ring.Height > 0) {\r\n const points = posses.map(x => Cesium.Cartographic.fromCartesian(x));\r\n if (points.length <= 0) {\r\n data.value = ring.Height;\r\n }\r\n else {\r\n let highest: number = <any>null; \r\n for (let i = 0; i < points.length; i++) {\r\n let pointHeight = points[i].height;\r\n if (pointHeight > highest || highest === null) {\r\n highest = pointHeight;\r\n }\r\n }\r\n highest = (highest === null ? 0 : highest) + ring.Height;\r\n data.value = highest;\r\n }\r\n data.exHeightRef = Cesium.HeightReference.NONE;\r\n }\r\n }\r\n\r\n data.posses = posses;\r\n return data;\r\n}\r\n\r\nfunction getHeightRef(style: any): Cesium.HeightReference {\r\n let heightRef = Cesium.HeightReference.CLAMP_TO_GROUND;\r\n const altOptionId = style?.altitudeOption?.id;\r\n if (altOptionId == 1) {\r\n heightRef = Cesium.HeightReference.NONE;\r\n }\r\n else if (altOptionId == 2) {\r\n heightRef = Cesium.HeightReference.RELATIVE_TO_GROUND;\r\n }\r\n return heightRef;\r\n}\r\n\r\nfunction getZIndex(style: any, entity: Entity.IEntity, tags: EntityTag.ITag[]): number {\r\n let zIndex = style?.zIndex ? +Calculator.GetValue(style?.zIndex, entity, tags) : 0;\r\n if (zIndex == null) {\r\n zIndex = 0;\r\n }\r\n return zIndex;\r\n}\r\n\r\nasync function getStyle(api: BruceApi, 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 const visuals = visualRegister.GetVisuals(entityId, menuItemId);\r\n return visuals.length > 0 ? visuals[0] : <any>null;\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 api: BruceApi;\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 api: params.api,\r\n viewer: params.viewer,\r\n entities: [],\r\n zoomItems: <IDictionary<ZoomControl.IItem>>{},\r\n menuItemId: params.menuItemId,\r\n visualRegister: params.visualRegister\r\n }\r\n\r\n const cEntities: IDictionary<ICesiumEntityExt> = {};\r\n const models: Entity.IEntity[] = [];\r\n const polygons: Entity.IEntity[] = [];\r\n const polylines: Entity.IEntity[] = [];\r\n const points: Entity.IEntity[] = [];\r\n\r\n // Initial sorting.\r\n for (let i = 0; i < params.entities.length; i++) {\r\n const entity = params.entities[i];\r\n const id = <string>entity.Bruce.ID;\r\n\r\n const zoomItem = RenderManager.Utils.DetermineZoomItem(params.viewer, entity, params.zoomControl);\r\n let displayType = zoomItem?.DisplayType;\r\n if (!displayType) {\r\n displayType = ZoomControl.EDisplayType.Hidden;\r\n }\r\n if (displayType != ZoomControl.EDisplayType.Hidden) {\r\n const newRenderId = getRenderGroupId(zoomItem);\r\n const existing = getExistingCEntity(id, params.menuItemId, zoomItem, params.visualRegister);\r\n const oldRenderId = existing?._renderGroup;\r\n \r\n if (newRenderId == oldRenderId) {\r\n cEntities[id] = existing;\r\n }\r\n else {\r\n if (displayType == ZoomControl.EDisplayType.Model3D) {\r\n models.push(entity);\r\n }\r\n else if (displayType == ZoomControl.EDisplayType.Geometry) {\r\n polygons.push(entity);\r\n }\r\n else {\r\n points.push(entity);\r\n }\r\n groupRenderParams.zoomItems[id] = zoomItem;\r\n }\r\n }\r\n }\r\n\r\n // Keep trying to render things in order of hard-coded priority system.\r\n if (models.length > 0) {\r\n const mParams: Model3d.IGroupParams = {\r\n ...groupRenderParams,\r\n entities: models\r\n };\r\n const mEntities = await Model3d.RenderGroup(mParams);\r\n for (let i = 0; i < mParams.entities.length; i++) {\r\n const entity = mParams.entities[i];\r\n const id = <string>entity.Bruce.ID;\r\n const cEntity = mEntities[id];\r\n if (cEntity) {\r\n cEntities[id] = cEntity;\r\n }\r\n else {\r\n polygons.push(entity);\r\n }\r\n }\r\n }\r\n if (polygons.length > 0) {\r\n const pParams: Polygon.IGroupParams = {\r\n ...groupRenderParams,\r\n entities: models\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: models\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: models\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 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 api: BruceApi;\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\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\r\n const cEntity: ICesiumEntityExt = 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 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 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(params.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(params.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 });\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 api: BruceApi;\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 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(params.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(params.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 api: BruceApi;\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 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(params.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(params.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 api: BruceApi;\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 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(params.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(params.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(params.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(params.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(params.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(params.api, lod.clientFileId)\r\n })\r\n if (cEntity) {\r\n cEntity._renderGroup = getRenderGroupId(zoomItem);\r\n cEntities[<string>entity.Bruce.ID] = cEntity;\r\n }\r\n }\r\n\r\n return cEntities;\r\n }\r\n }\r\n}","import { BruceApi, DelayQueue, Entity, EntityFilterGetter, IDictionary, MenuItem, ZoomControl } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\r\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\n\r\n/**\r\n * Manager for rendering Bruce entities.\r\n * This will request entities based on setup menu item filter.\r\n */\r\nexport namespace EntitiesRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private api: BruceApi;\r\n private item: MenuItem.Item.IBruceEntities;\r\n private getter: EntityFilterGetter.Getter = <any>null;\r\n private getterSub: () => void = <any>null;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private renderedEntities: IDictionary<boolean> = {};\r\n private visualsManager: VisualsRegister.Register;\r\n\r\n private entityCheckQueue: DelayQueue = <any>null;\r\n private entityCheckRemoval: () => void = <any>null;\r\n private isRunningCheck = false;\r\n private viewMonitorRemoval: () => void = <any>null;\r\n\r\n\r\n constructor(viewer: Cesium.Viewer, visualsManager: VisualsRegister.Register, api: BruceApi, item: MenuItem.Item.IBruceEntities) {\r\n this.viewer = viewer;\r\n this.api = api;\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 EntityFilterGetter.Getter(\r\n this.api,\r\n new CesiumViewMonitor(this.viewer),\r\n this.item.BruceEntity[\"EntityType.ID\"],\r\n 500,\r\n {}\r\n );\r\n this.getter.IncludeMenuItem(this.item.id, [], 0, 100000);\r\n this.getterSub = this.getter.OnUpdate.Subscribe((entities) => {\r\n this.onGetterUpdate(entities);\r\n });\r\n this.viewMonitorRemoval = new CesiumViewMonitor(this.viewer).Updated().Subscribe(() => {\r\n this.entityCheckQueue.Call();\r\n });\r\n this.entityCheckQueue = new DelayQueue(() => {\r\n this.doEntityCheck();\r\n }, 3000);\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n this.disposed = true;\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n this.entityCheckRemoval?.();\r\n this.viewMonitorRemoval?.();\r\n }\r\n\r\n private async doEntityCheck(): Promise<void> {\r\n if (this.isRunningCheck) {\r\n this.entityCheckQueue.Call();\r\n return;\r\n }\r\n this.isRunningCheck = true;\r\n 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(this.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 api: this.api, \r\n entities: entities,\r\n menuItemId: this.item.id,\r\n visualRegister: this.visualsManager,\r\n zoomControl: this.item.CameraZoomSettings\r\n });\r\n for (let i = 0; i < entities.length; i++) {\r\n const id = <string>entities[i].Bruce.ID;\r\n const cEntity = cEntities[id];\r\n this.renderedEntities[id] = !!cEntity;\r\n if (cEntity) {\r\n const visuals = this.visualsManager.GetVisuals(id, this.item.id);\r\n if (visuals.length != 1 || (visuals.length > 0 && visuals[0] != cEntity)) {\r\n this.visualsManager.Add({\r\n entityId: <string>id,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\r\n }\r\n }\r\n }\r\n}","import { BatchedDataGetter, BruceApi, Entity, IDictionary, ZoomControl, MenuItem } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\r\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\n\r\n/**\r\n * Render manager for a group of pre-loaded entities.\r\n * The entities may or may not have records.\r\n * If the entities DON'T have records, it is recommended to avoid using the 3dmodel visualization as it will fail to locate LODs.\r\n */\r\nexport namespace EntitiesLoadedRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private api: BruceApi;\r\n private item: MenuItem.Item.IEntitiesLoaded;\r\n private getter: BatchedDataGetter.Getter<Entity.IEntity> = <any>null;\r\n private getterSub: () => void = <any>null;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private renderedEntities: IDictionary<boolean> = {};\r\n private visualsManager: VisualsRegister.Register;\r\n\r\n\r\n constructor(viewer: Cesium.Viewer, visualsManager: VisualsRegister.Register, api: BruceApi, item: MenuItem.Item.IEntitiesLoaded) {\r\n this.viewer = viewer;\r\n this.api = api;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public async Init(): Promise<void> {\r\n if (this.disposed) {\r\n throw(new Error(\"This item is disposed.\"));\r\n }\r\n this.getter = new BatchedDataGetter.Getter<Entity.IEntity>(\r\n this.item.BruceEntity.Entities,\r\n new CesiumViewMonitor(this.viewer),\r\n 500\r\n );\r\n this.getterSub = this.getter.OnUpdate.Subscribe((entities) => {\r\n this.onGetterUpdate(entities);\r\n });\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n this.disposed = true;\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n }\r\n\r\n private async onGetterUpdate(entities: Entity.IEntity[]): Promise<void> {\r\n if (this.disposed) {\r\n return;\r\n }\r\n const cEntities = await EntityRenderEngine.Render({\r\n viewer: this.viewer, \r\n api: this.api, \r\n entities: entities,\r\n menuItemId: this.item.id,\r\n visualRegister: this.visualsManager,\r\n zoomControl: this.item.CameraZoomSettings\r\n });\r\n for (let i = 0; i < entities.length; i++) {\r\n const id = <string>entities[i].Bruce.ID;\r\n const cEntity = cEntities[id];\r\n this.renderedEntities[id] = !!cEntity;\r\n if (cEntity) {\r\n const visuals = this.visualsManager.GetVisuals(id, this.item.id);\r\n if (visuals.length != 1 || (visuals.length > 0 && visuals[0] != cEntity)) {\r\n this.visualsManager.Add({\r\n entityId: <string>id,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\r\n }\r\n }\r\n }\r\n}","import { BruceEvent, Cartes, IDictionary, ObjectUtils } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityRenderEngine } from \"./entity-render-engine\";\r\n\r\ntype Visual = Cesium.Entity | Cesium.Primitive | Cesium.Cesium3DTileFeature;\r\n\r\ninterface IVisualExt {//extends Visual {\r\n _register?: VisualsRegister.Register;\r\n _rego?: VisualsRegister.IVisualRego;\r\n}\r\n\r\nfunction removeEntity(viewer: Cesium.Viewer, visual: Visual): void {\r\n unmarkEntity(visual);\r\n if (visual instanceof Cesium.Entity) {\r\n EntityRenderEngine.Remove(viewer, visual);\r\n }\r\n else if (visual instanceof Cesium.Primitive) {\r\n if (viewer.scene.primitives.contains(visual)) {\r\n viewer.scene.primitives.remove(visual);\r\n }\r\n }\r\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\r\n // No way to tell if changing show will crash it!\r\n try {\r\n visual.show = false;\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n}\r\n\r\nfunction updateCEntityShow(viewer: Cesium.Viewer, visual: EntityRenderEngine.ICesiumEntityExt, show: boolean) {\r\n if (visual._parentEntity) {\r\n updateCEntityShow(viewer, visual._parentEntity, show);\r\n }\r\n if (visual._siblingGraphics) {\r\n for (let i = 0; i < visual._siblingGraphics.length; i++) {\r\n const sibling = visual._siblingGraphics[i];\r\n updateCEntityShow(viewer, sibling, show);\r\n }\r\n }\r\n if (viewer.entities.contains(visual)) {\r\n visual.show = show;\r\n }\r\n}\r\n\r\nfunction updateEntityShow(viewer: Cesium.Viewer, visual: Visual, show: boolean): void {\r\n if (visual instanceof Cesium.Entity) {\r\n updateCEntityShow(viewer, visual, show);\r\n }\r\n else if (visual instanceof Cesium.Primitive) {\r\n if (viewer.scene.primitives.contains(visual)) {\r\n visual.show = show;\r\n }\r\n }\r\n else if (visual instanceof Cesium.Cesium3DTileFeature) {\r\n // No way to tell if changing show will crash it!\r\n try {\r\n visual.show = show;\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n}\r\n\r\nfunction updateEntity(viewer: Cesium.Viewer, entityRegos: VisualsRegister.IVisualRego[]): void {\r\n let highestPriority: VisualsRegister.IVisualRego = <any>null;\r\n for (let i = 0; i < entityRegos.length; i++) {\r\n const rego = entityRegos[i];\r\n if (highestPriority === null || rego.priority > highestPriority.priority) {\r\n highestPriority = rego;\r\n }\r\n }\r\n for (let i = 0; i < entityRegos.length; i++) {\r\n const rego = entityRegos[i];\r\n updateEntityShow(viewer, rego.visual, rego === highestPriority);\r\n }\r\n}\r\n\r\nfunction markEntity(register: VisualsRegister.Register, rego: VisualsRegister.IVisualRego, visual: Visual): void {\r\n const vis = <IVisualExt>visual;\r\n vis._register = register;\r\n vis._rego = rego;\r\n if (visual instanceof Cesium.Entity) {\r\n const visEnt = <EntityRenderEngine.ICesiumEntityExt>visual;\r\n if (visEnt._parentEntity) {\r\n markEntity(register, rego, visEnt._parentEntity);\r\n }\r\n if (visEnt._siblingGraphics) {\r\n for (let i = 0; i < visEnt._siblingGraphics.length; i++) {\r\n markEntity(register, rego, visEnt._siblingGraphics[i]);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction unmarkEntity(visual: Visual): void {\r\n const vis = <IVisualExt>visual;\r\n vis._register = <any>null;\r\n if (visual instanceof Cesium.Entity) {\r\n const visEnt = <EntityRenderEngine.ICesiumEntityExt>visual;\r\n if (visEnt._parentEntity) {\r\n unmarkEntity(visEnt._parentEntity);\r\n }\r\n if (visEnt._siblingGraphics) {\r\n for (let i = 0; i < visEnt._siblingGraphics.length; i++) {\r\n unmarkEntity(visEnt._siblingGraphics[i]);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Manages a registry of all Bruce visuals being rendered by menu items.\r\n * If multiple stuff is registered with the same entity id, only the \"best\" one is left visible.\r\n */\r\nexport namespace VisualsRegister {\r\n export interface IVisualRego {\r\n entityId: string;\r\n entityTypeId?: string;\r\n menuItemId: string;\r\n visual: Visual;\r\n priority: number;\r\n }\r\n \r\n export interface IVisualUpdate {\r\n rego: IVisualRego;\r\n isAdding: boolean;\r\n }\r\n\r\n export class Register {\r\n private id = ObjectUtils.UId();\r\n public get Id(): string {\r\n return this.id;\r\n }\r\n private viewer: Cesium.Viewer;\r\n private rego: IDictionary<IVisualRego[]> = {};\r\n private onUpdate: BruceEvent<IVisualUpdate> = <any>null;\r\n public get OnUpdate(): BruceEvent<IVisualUpdate> {\r\n return this.onUpdate;\r\n }\r\n \r\n \r\n constructor(viewer: Cesium.Viewer) {\r\n this.viewer = viewer;\r\n }\r\n \r\n public Add(rego: IVisualRego): void {\r\n this.Remove(rego.entityId, rego.menuItemId, false);\r\n const entityId = rego.entityId;\r\n const entityRegos = this.rego[entityId] ?? [];\r\n entityRegos.push(rego);\r\n this.rego[entityId] = entityRegos;\r\n markEntity(this, rego, rego.visual);\r\n updateEntity(this.viewer, this.rego[entityId]);\r\n this.onUpdate?.Trigger({ rego: rego, isAdding: true });\r\n }\r\n \r\n public GetVisuals(entityId: string, menuItemId: string): Visual[] {\r\n const entityRegos = this.rego[entityId];\r\n if (!entityRegos) {\r\n return <any>[];\r\n }\r\n const visuals = <any>entityRegos.find(r => r.menuItemId === menuItemId)?.visual;\r\n return visuals ?? [];\r\n }\r\n \r\n public RemoveByEntityId(id: string): void {\r\n const entityRegos = this.rego[id];\r\n if (!entityRegos) {\r\n return;\r\n }\r\n for (let i = 0; i < entityRegos.length; i++) {\r\n const rego = entityRegos[i];\r\n this.onUpdate?.Trigger({ rego: rego, isAdding: false });\r\n removeEntity(this.viewer, rego.visual);\r\n }\r\n this.rego[id] = [];\r\n delete this.rego[id];\r\n }\r\n \r\n public RemoveByMenuItemId(id: string): void {\r\n for (const entityId in this.rego) {\r\n const entityRegos = this.rego[entityId];\r\n if (entityRegos) {\r\n const rego = entityRegos.find(r => r.menuItemId === id);\r\n if (!rego) {\r\n continue;\r\n }\r\n this.onUpdate?.Trigger({ rego: rego, isAdding: false });\r\n removeEntity(this.viewer, rego.visual);\r\n const doesInclude = this.rego[entityId].find(r => r.menuItemId === id);\r\n if (doesInclude) {\r\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== id);\r\n updateEntity(this.viewer, this.rego[entityId]);\r\n }\r\n }\r\n }\r\n }\r\n \r\n public Remove(entityId: string, menuItemId: string, _doUpdate: boolean = true): void {\r\n const entityRegos = this.rego[entityId];\r\n if (!entityRegos) {\r\n return;\r\n }\r\n const rego = entityRegos.find(r => r.menuItemId === menuItemId);\r\n if (!rego) {\r\n return;\r\n }\r\n this.onUpdate?.Trigger({ rego: rego, isAdding: false });\r\n removeEntity(this.viewer, rego.visual);\r\n this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== menuItemId);\r\n if (_doUpdate) {\r\n updateEntity(this.viewer, this.rego[entityId]);\r\n }\r\n }\r\n \r\n /**\r\n * Returns an array of drilled visuals associated with this register.\r\n * The top array item is the first found.\r\n * @param cursor \r\n * @returns \r\n */\r\n public GetFromCursor(cursor: Cartes.ICartes2): IVisualRego[] {\r\n const found: IVisualRego[] = [];\r\n const picked = this.viewer.scene.drillPick(new Cesium.Cartesian2(cursor.x, cursor.y), 5);\r\n for (let i = 0; i < picked.length; i++) {\r\n const object = picked[i];\r\n const entity = <Visual>(object && object.id && object.id instanceof Cesium.Entity ? object.id : object);\r\n const visual = <IVisualExt>entity;\r\n if (visual?._register?.Id == this.id) {\r\n found.push(<IVisualRego>visual._rego);\r\n }\r\n }\r\n return found;\r\n }\r\n }\r\n}","import { BatchedDataGetter, BruceApi, Entity, IDictionary, MenuItem } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\r\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\n\r\n/**\r\n * Render manager for rendering an array of entity ids.\r\n * This will render them in batches to avoid overloading the viewer.\r\n */\r\nexport namespace EntitiesIdsRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private api: BruceApi;\r\n private item: MenuItem.Item.IEntityIds;\r\n private getter: BatchedDataGetter.Getter<string> = <any>null;\r\n private getterSub: () => void = <any>null;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private renderedEntities: IDictionary<boolean> = {};\r\n private visualsManager: VisualsRegister.Register;\r\n\r\n\r\n constructor(viewer: Cesium.Viewer, visualsManager: VisualsRegister.Register, api: BruceApi, item: MenuItem.Item.IEntityIds) {\r\n this.viewer = viewer;\r\n this.api = api;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public async Init(): Promise<void> {\r\n if (this.disposed) {\r\n throw(new Error(\"This item is disposed.\"));\r\n }\r\n this.getter = new BatchedDataGetter.Getter<string>(\r\n this.item.BruceEntity.EntityIds,\r\n new CesiumViewMonitor(this.viewer),\r\n 500\r\n );\r\n this.getterSub = this.getter.OnUpdate.Subscribe((ids) => {\r\n this.onGetterUpdate(ids);\r\n });\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n this.disposed = true;\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n }\r\n\r\n private async onGetterUpdate(entityIds: string[]): Promise<void> {\r\n if (this.disposed) {\r\n return;\r\n }\r\n const entities = await Entity.GetListByIds(this.api, entityIds);\r\n const cEntities = await EntityRenderEngine.Render({\r\n viewer: this.viewer, \r\n api: this.api, \r\n entities: entities,\r\n menuItemId: this.item.id,\r\n visualRegister: this.visualsManager,\r\n zoomControl: this.item.CameraZoomSettings\r\n });\r\n for (let i = 0; i < entities.length; i++) {\r\n const id = <string>entities[i].Bruce.ID;\r\n const cEntity = cEntities[id];\r\n this.renderedEntities[id] = !!cEntity;\r\n if (cEntity) {\r\n const visuals = this.visualsManager.GetVisuals(id, this.item.id);\r\n if (visuals.length != 1 || (visuals.length > 0 && visuals[0] != cEntity)) {\r\n this.visualsManager.Add({\r\n entityId: <string>id,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\r\n }\r\n }\r\n }\r\n}","import { BatchedDataGetter, BruceApi, Entity, IDictionary, MenuItem, ZoomControl } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntityRenderEngine } from \"../../entity-render-engine\";\r\nimport { CesiumViewMonitor } from \"../../../viewer/cesium-view-monitor\";\r\nimport { VisualsRegister } from \"../../visuals-register\";\r\nimport { RenderManager } from \"../render-manager\";\r\n\r\n/**\r\n * Manager for rendering a single Bruce entity.\r\n */\r\nexport namespace EntityRenderManager {\r\n export class Manager implements RenderManager.IManager {\r\n private viewer: Cesium.Viewer;\r\n private api: BruceApi;\r\n private item: MenuItem.Item.IBruceEntity;\r\n private getter: BatchedDataGetter.Getter<string> = <any>null;\r\n private getterSub: () => void = <any>null;\r\n private disposed: boolean = false;\r\n public get Disposed(): boolean {\r\n return this.disposed;\r\n }\r\n private visualsManager: VisualsRegister.Register;\r\n\r\n\r\n constructor(viewer: Cesium.Viewer, visualsManager: VisualsRegister.Register, api: BruceApi, item: MenuItem.Item.IBruceEntity) {\r\n this.viewer = viewer;\r\n this.api = api;\r\n this.item = item;\r\n this.visualsManager = visualsManager;\r\n }\r\n\r\n public async Init(): Promise<void> {\r\n if (this.disposed) {\r\n throw(new Error(\"This item is disposed.\"));\r\n }\r\n this.getter = new BatchedDataGetter.Getter<string>(\r\n [this.item.BruceEntity.EntityId],\r\n new CesiumViewMonitor(this.viewer),\r\n 1\r\n );\r\n this.getterSub = this.getter.OnUpdate.Subscribe((ids) => {\r\n this.onGetterUpdate(ids[0]);\r\n });\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.disposed = true;\r\n this.getterSub?.();\r\n this.getterSub = <any>null;\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n }\r\n\r\n private async onGetterUpdate(id: string): Promise<void> {\r\n if (this.disposed) {\r\n return;\r\n }\r\n const entity = await Entity.Get(this.api, id);\r\n const cEntities = await EntityRenderEngine.Render({\r\n viewer: this.viewer, \r\n api: this.api, \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 visuals = this.visualsManager.GetVisuals(id, this.item.id);\r\n if (visuals.length != 1 || (visuals.length > 0 && visuals[0] != cEntity)) {\r\n this.visualsManager.Add({\r\n entityId: <string>entity.Bruce.ID,\r\n menuItemId: this.item.id,\r\n visual: cEntity,\r\n priority: 0\r\n });\r\n }\r\n }\r\n else {\r\n this.visualsManager.Remove(id, this.item.id);\r\n }\r\n }\r\n }\r\n}","import { BruceApi, Calculator, Carto, Color, Entity, EntityType, IDictionary, Style, Tileset, TilesetCad } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { VisualsRegister } from \"./visuals-register\";\r\n\r\nfunction colorToCColor(color: Color.IColor): Cesium.Color {\r\n return new Cesium.Color(\r\n color.red ? color.red/255 : 0, \r\n color.green ? color.green/255 : 0, \r\n color.blue ? color.blue/255 : 0, \r\n color.alpha\r\n );\r\n}\r\n\r\nexport namespace TilesetRenderEngine {\r\n export interface IParams {\r\n api: BruceApi;\r\n tileset: Tileset.ITileset;\r\n viewer: Cesium.Viewer;\r\n }\r\n\r\n export function ApplySettings(cTileset: Cesium.Cesium3DTileset, tileset: Tileset.ITileset): void {\r\n if (tileset.type == Tileset.EType.Cad) {\r\n const settings = tileset.settings as TilesetCad.ISettings;\r\n const root = cTileset.root;\r\n let transform = settings.transform;\r\n if (!transform) {\r\n transform = {\r\n heading: 0,\r\n pitch: 0,\r\n roll: 0,\r\n scale: 1\r\n };\r\n }\r\n const point = <Carto.ICarto>settings.location;\r\n const pos = Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);\r\n const hpr = Cesium.HeadingPitchRoll.fromDegrees(transform.heading, transform.pitch, transform.roll, new Cesium.HeadingPitchRoll());\r\n root.transform = Cesium.Transforms.headingPitchRollToFixedFrame(pos, hpr);\r\n \r\n let scale = +transform?.scale;\r\n if (!scale || scale <= 0) {\r\n scale = 0.000001;\r\n }\r\n let scaleMatrix = Cesium.Matrix4.fromScale(new Cesium.Cartesian3(scale, scale, scale), new Cesium.Matrix4());\r\n root.transform = Cesium.Matrix4.multiply(root.transform, scaleMatrix, root.transform);\r\n \r\n // Force matrix to update\r\n (<any>root).updateTransform();\r\n \r\n const maxScreenSpaceError = settings.maximumScreenSpaceError;\r\n if (maxScreenSpaceError || maxScreenSpaceError == 0) {\r\n cTileset.maximumScreenSpaceError = maxScreenSpaceError;\r\n }\r\n }\r\n else {\r\n throw(\"Not implemented.\");\r\n }\r\n }\r\n\r\n export function Render(params: IParams): Cesium.Cesium3DTileset {\r\n if (params.tileset.type == Tileset.EType.Cad) {\r\n const cTileset = new Cesium.Cesium3DTileset({\r\n url: Tileset.GetPublicFileUrl(params.api, params.tileset.id, \"tileset.json\") + \"?generation=\" + params.tileset.generateVersion\r\n });\r\n params.viewer.scene.primitives.add(cTileset);\r\n cTileset.readyPromise.then(() => {\r\n ApplySettings(cTileset, params.tileset);\r\n });\r\n return cTileset;\r\n }\r\n else {\r\n throw(\"Not implemented.\");\r\n }\r\n }\r\n\r\n export class CadStyler {\r\n private api: BruceApi;\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, cTileset: Cesium.Cesium3DTileset, fallbackStyleId: number, styleMapping: any[]) {\r\n this.api = api;\r\n this.cTileset = cTileset;\r\n this.fallbackStyleId = fallbackStyleId;\r\n this.styleMapping = styleMapping;\r\n this.loadStyles();\r\n }\r\n\r\n public QueueEntities(entities: VisualsRegister.IVisualRego[]): void {\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n this.queueTilesetFeatureStyle(entity);\r\n }\r\n if (this.recordLoadQueue.length > 0) {\r\n this.processQueue();\r\n }\r\n }\r\n\r\n private async processQueue(): Promise<void> {\r\n const MAX_BATCHES = 2;\r\n const BATCH_DELAY = 200;\r\n\r\n if (this.runningQueues >= MAX_BATCHES) {\r\n return;\r\n }\r\n else if (this.disposed) {\r\n return;\r\n }\r\n this.runningQueues += 1;\r\n \r\n let batch: VisualsRegister.IVisualRego[] = [];\r\n let rerun: boolean = false;\r\n try {\r\n batch = this.getEntitiesForQueue();\r\n\r\n const entityIds = batch.map(x => x.entityId);\r\n if (entityIds.length > 0) {\r\n const entities = await Entity.GetListByIds(this.api, entityIds);\r\n for (let i = 0; i < entities.length; i++) {\r\n const record = entities[i];\r\n const feature = batch.find(x => x?.entityId == record?.Bruce?.ID);\r\n if (feature) {\r\n this.styleTilesetFeatureFullData(feature, record);\r\n }\r\n }\r\n rerun = batch.length > 0;\r\n }\r\n }\r\n finally {\r\n setTimeout(() => {\r\n this.runningQueues -= 1;\r\n if (rerun) {\r\n this.processQueue();\r\n }\r\n }, BATCH_DELAY);\r\n }\r\n }\r\n\r\n private getEntitiesForQueue(): VisualsRegister.IVisualRego[] {\r\n const BATCH_SIZE = 30;\r\n const batchHashes = this.recordLoadQueue.splice(0, BATCH_SIZE);\r\n const entities: VisualsRegister.IVisualRego[] = [];\r\n for (let i = 0; i < batchHashes.length; i++) {\r\n const id = batchHashes[i];\r\n const entity = this.loadedEntities[id];\r\n if (entity) {\r\n entities.push(entity);\r\n }\r\n }\r\n return entities;\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.disposed = true;\r\n clearInterval(this.queueLoadInterval);\r\n clearInterval(this.queueCheckInterval);\r\n }\r\n\r\n private async loadStyles(): Promise<void> {\r\n let fallbackStyleId = this.fallbackStyleId;\r\n if (fallbackStyleId && fallbackStyleId > 0) {\r\n try {\r\n let data = await Style.Get(this.api, fallbackStyleId);\r\n this.fallbackStyle = data;\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n \r\n // Load styles in the style mapping\r\n let styleMapping = this.styleMapping;\r\n if (!styleMapping) {\r\n styleMapping = [];\r\n }\r\n this.styleMapping = styleMapping;\r\n \r\n // It is default style.\r\n // We have to get all possible entity type ids and append them to mapping.\r\n if (!fallbackStyleId) {\r\n try {\r\n const modelTree = this.cTileset?.extensions?.modelTree;\r\n if (modelTree) {\r\n const entityTypeIds = this.getEntityTypeIdsFromModelTree(modelTree);\r\n for (let i = 0; i < entityTypeIds.length; i++) {\r\n const entityTypeId = entityTypeIds[i];\r\n if (styleMapping.findIndex(x => x.EntityTypeID == entityTypeId) <= -1) {\r\n styleMapping.push({\r\n EntityTypeID: entityTypeId,\r\n StyleID: null,\r\n style: <any>null\r\n });\r\n }\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n \r\n for (let i = 0; i < styleMapping.length; i++) {\r\n if (this.disposed) {\r\n break;\r\n }\r\n \r\n let styleMap = styleMapping[i];\r\n if (!styleMap.style) {\r\n let styleId = styleMap.StyleID;\r\n \r\n // Get default style of the entity type.\r\n if (!styleId) {\r\n try {\r\n let entityType = await EntityType.Get(this.api, styleMap.EntityTypeID);\r\n styleId = entityType?.[\"DisplaySetting.ID\"];\r\n }\r\n catch (e) {\r\n console.error(e); \r\n }\r\n }\r\n \r\n if (styleId) {\r\n try {\r\n let data = await Style.Get(this.api, styleId);\r\n if (data) {\r\n styleMap.style = data;\r\n styleMap.StyleID = styleId;\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n \r\n if (styleMap.EntityTypeID && styleMap.style) {\r\n this.styleMappingsLoaded[styleMap.EntityTypeID] = true;\r\n this.processTilesetFeatureCheckQueue();\r\n this.processQueue();\r\n }\r\n }\r\n this.styleMappingLoaded = true;\r\n\r\n if (!this.disposed) {\r\n await this.processTilesetFeatureCheckQueue();\r\n this.processQueue();\r\n }\r\n }\r\n\r\n private getEntityTypeIdsFromModelTree(modelTree: any): string[] {\r\n const entityTypeIds: string[] = [];\r\n this.digEntityTypeIdsFromModelTreeBranch(modelTree, entityTypeIds);\r\n return entityTypeIds;\r\n }\r\n \r\n private digEntityTypeIdsFromModelTreeBranch(branch: any, arr: string[]): void {\r\n if (branch) {\r\n // Does not yet include this entity type id.\r\n if (branch.typeId && !arr.includes(branch.typeId)) {\r\n arr.push(branch.typeId);\r\n }\r\n \r\n if (branch.children) {\r\n for (let i = 0; i < branch.children.length; i++) {\r\n let child = branch.children[i];\r\n this.digEntityTypeIdsFromModelTreeBranch(child, arr);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private async processTilesetFeatureCheckQueue(): Promise<void> {\r\n const BATCH_CHECK_SIZE = 1000;\r\n\r\n return new Promise((res) => {\r\n clearInterval(this.queueCheckInterval);\r\n this.queueCheckInterval = setInterval(() => {\r\n if (this.disposed) {\r\n clearInterval(this.queueCheckInterval);\r\n res();\r\n return;\r\n }\r\n \r\n // Construct batch for loaded styles.\r\n let batch = [];\r\n \r\n if (this.styleMappingLoaded) {\r\n batch = this.recordCheckQueue.splice(0, BATCH_CHECK_SIZE);\r\n }\r\n else {\r\n for (let i = 0; i < this.recordCheckQueue.length; i++) {\r\n let hash = this.recordCheckQueue[i];\r\n let entity = this.loadedEntities[hash];\r\n if (entity) {\r\n let entityTypeId = entity.entityTypeId;\r\n if (entityTypeId) {\r\n if (this.styleMappingsLoaded[entityTypeId] == true) {\r\n batch.push(hash);\r\n }\r\n }\r\n }\r\n \r\n if (batch.length >= BATCH_CHECK_SIZE) {\r\n break;\r\n }\r\n }\r\n \r\n for (let i = 0; i < batch.length; i++) {\r\n let hash = batch[i];\r\n let index = this.recordCheckQueue.findIndex(x => x == hash);\r\n if (index > -1) {\r\n this.recordCheckQueue.splice(index, 1);\r\n }\r\n }\r\n }\r\n \r\n if (batch.length) {\r\n for (let i = 0; i < batch.length; i++) {\r\n let item = batch[i];\r\n let entity = this.loadedEntities[item];\r\n if (entity) {\r\n this.queueTilesetFeatureStyle(entity);\r\n }\r\n }\r\n }\r\n else {\r\n clearInterval(this.queueCheckInterval);\r\n res();\r\n }\r\n }, 50);\r\n });\r\n }\r\n\r\n private queueTilesetFeatureStyle(entity: VisualsRegister.IVisualRego): void {\r\n if (this.styleMappingLoaded || this.styleMappingsLoaded[<string>entity.entityTypeId] == true) {\r\n const needsData = this.getTilesetFeatureNeedsFullData(entity.entityId, <string>entity.entityTypeId);\r\n if (needsData) {\r\n if (this.recordLoadQueue.findIndex(x => x == entity.entityId)) {\r\n this.recordLoadQueue.push(entity.entityId);\r\n }\r\n }\r\n else {\r\n this.styleTilesetFeature(entity);\r\n }\r\n }\r\n else {\r\n this.recordCheckQueue.push(entity.entityId);\r\n }\r\n }\r\n\r\n private styleTilesetFeature(entity: VisualsRegister.IVisualRego): void {\r\n this.styleTilesetFeatureFullData(entity, <any>null); \r\n }\r\n\r\n private styleTilesetFeatureFullData(entity: VisualsRegister.IVisualRego, data: Entity.IEntity): void {\r\n const style = <Style.IEntitySettings>this.getTilesetFeatureStyle(entity.entityId, <string>entity.entityTypeId);\r\n if (!style) {\r\n return;\r\n }\r\n const bColor = <Color.IColor>(style.modelStyle?.fillColor ? Calculator.GetValue(style.modelStyle.fillColor, data, []) : null);\r\n if (bColor != null) {\r\n const cColor = colorToCColor(bColor);\r\n const visual = entity.visual;\r\n if (visual && visual instanceof Cesium.Cesium3DTileFeature) {\r\n visual.color = cColor;\r\n }\r\n }\r\n }\r\n\r\n private getTilesetFeatureStyle(entityId: string, entityTypeId: string): Style.IEntitySettings {\r\n // Locate what style is applicable to the feature.\r\n let style: Style.IStyle = <any>null;\r\n if (entityTypeId) {\r\n style = <Style.IStyle>this.styleMapping.find(x => x.EntityTypeID == entityTypeId)?.style;\r\n }\r\n if (!style) {\r\n style = this.fallbackStyle;\r\n }\r\n if (!style) {\r\n return <any>null;\r\n }\r\n if (!(<Style.IEntitySettings>style.Settings)?.modelStyle?.customize) {\r\n return <any>null;\r\n }\r\n return <Style.IEntitySettings>style.Settings;\r\n }\r\n\r\n private getTilesetFeatureNeedsFullData(entityId: string, entityTypeId: string): boolean {\r\n const style = this.getTilesetFeatureStyle(entityId, entityTypeId);\r\n if (!style) {\r\n return false;\r\n }\r\n const fill = style?.modelStyle?.fillColor;\r\n if (!fill || fill.length <= 0) {\r\n return false;\r\n }\r\n return fill[0].type != 0;\r\n }\r\n }\r\n}","import { BruceApi, MenuItem, Tileset, Color } 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 api: BruceApi;\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, api: BruceApi, item: MenuItem.Item.ICadTileset) {\r\n this.viewer = viewer;\r\n this.api = api;\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 const tileset = await Tileset.Get(this.api, tilesetId);\r\n if (!tileset) {\r\n return;\r\n }\r\n\r\n const cTileset = this.cTileset = TilesetRenderEngine.Render({\r\n api: this.api,\r\n tileset: tileset,\r\n viewer: this.viewer\r\n });\r\n cTileset.readyPromise.then(() => {\r\n this.onCTilesetLoad();\r\n });\r\n cTileset.tileLoad.addEventListener((tile) => {\r\n this.mapCTile(tile);\r\n });\r\n this.styler = new TilesetRenderEngine.CadStyler(this.api, this.cTileset, <number>this.item.styleId, <any[]>this.item.StyleMapping);\r\n }\r\n\r\n private onCTilesetLoad(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n if (this.item.FlyTo) {\r\n this.viewer.zoomTo(\r\n this.cTileset,\r\n new Cesium.HeadingPitchRange(0.0, -0.5, this.cTileset.boundingSphere.radius / 4.0)\r\n );\r\n }\r\n }\r\n\r\n private mapCTile(tile: Cesium.Cesium3DTile): void {\r\n const content = tile.content;\r\n for (let i = 0; i < content.featuresLength; i++) {\r\n const feature = content.getFeature(i);\r\n \r\n let rego = this.mapTilesetFeature(feature);\r\n if (rego?.entityId) {\r\n this.styler.QueueEntities([rego]);\r\n }\r\n }\r\n }\r\n\r\n private mapTilesetFeature(feature: Cesium.Cesium3DTileFeature): VisualsRegister.IVisualRego {\r\n let version = feature?.tileset?.extensions?.modelTree?.version;\r\n if (!version) {\r\n version = 1;\r\n }\r\n \r\n let rego: VisualsRegister.IVisualRego = {\r\n entityId: <any>null,\r\n entityTypeId: <any>null,\r\n menuItemId: this.item.id,\r\n priority: 0,\r\n visual: feature\r\n };\r\n if (version == 1) {\r\n const pathStr = (<Cesium.Cesium3DTileFeature><any>feature).getProperty(\"BrucePath\");\r\n if (pathStr != undefined) {\r\n let path = pathStr.split(\"|\");\r\n let entityTypeId = this.getEntityTypeByPath(path);\r\n rego.entityTypeId = entityTypeId;\r\n rego.entityId = path[path.length - 1];\r\n }\r\n }\r\n else if (version == 2) {\r\n const geomId = +feature.getProperty(\"GeomId\");\r\n if (geomId != null && (!!geomId || geomId == 0)) {\r\n const meta = this.getMetaByGeomId(geomId, feature.tileset);\r\n if (meta) {\r\n rego.entityId = meta.id;\r\n rego.entityTypeId = meta.typeId;\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"Unhandled tileset tree version = \" + version);\r\n }\r\n if (rego?.entityId) {\r\n this.visualsManager.Add(rego);\r\n return rego;\r\n }\r\n return <any>null;\r\n }\r\n\r\n private getMetaByGeomId(geomId: number, tileset: Cesium.Cesium3DTileset): { id: string, typeId: string } {\r\n let modelTree: any = tileset?.extensions?.modelTree;\r\n return this.digMetaByGeomId(geomId, modelTree, []);\r\n }\r\n \r\n private digMetaByGeomId(geomId: number, branch: any, path: string[]): { id: string, typeId: string } {\r\n path = [].concat(<any>path);\r\n path.push(branch.id);\r\n\r\n if (branch.geomId == geomId) {\r\n return { id: path[path.length - 1], typeId: branch.typeId };\r\n }\r\n else if (branch.children) {\r\n for (let i = 0; i < branch.children.length; i++) {\r\n let meta = this.digMetaByGeomId(geomId, branch.children[i], path);\r\n if (meta) {\r\n return meta;\r\n }\r\n }\r\n }\r\n return <any>null;\r\n }\r\n\r\n private getEntityTypeByPath(path: string[]): string {\r\n let modelTree: any = this.cTileset?.extensions?.modelTree;\r\n if (modelTree) {\r\n let data = this.digModelTreeByPath(modelTree, path);\r\n if (data) {\r\n return data.typeId;\r\n }\r\n }\r\n return <any>null;\r\n }\r\n \r\n private digModelTreeByPath(branch: any, path: string[]): any {\r\n // Dereference.\r\n path = JSON.parse(JSON.stringify(path));\r\n \r\n if (path.length <= 0) {\r\n return null;\r\n }\r\n let pathTop = path.splice(0, 1)[0];\r\n if (pathTop != branch.id) {\r\n return null;\r\n }\r\n else if (path.length == 0 && pathTop == branch.id) {\r\n return branch;\r\n }\r\n else if (branch.children) {\r\n for (let i = 0; i < branch.children.length; i++) {\r\n let foundPath = this.digModelTreeByPath(branch.children[i], path);\r\n if (foundPath) {\r\n return foundPath;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n public Dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n this.disposed = true;\r\n if (this.cTileset) {\r\n this.cTileset.show = false;\r\n }\r\n this.styler.Dispose();\r\n this.visualsManager.RemoveByMenuItemId(this.item.id);\r\n }\r\n }\r\n}","import { BruceApi, MenuItem, ObjectUtils } from \"bruce-models\";\r\nimport * as Cesium from \"cesium\";\r\nimport { EntitiesRenderManager } from \"./render-managers/entities/entities-render-manager\";\r\nimport { EntitiesLoadedRenderManager } from \"./render-managers/entities/entities-loaded-render-manager\";\r\nimport { RenderManager } from \"./render-managers/render-manager\";\r\nimport { VisualsRegister } from \"./visuals-register\";\r\nimport { EntitiesIdsRenderManager } from \"./render-managers/entities/entities-ids-render-manager\";\r\nimport { EntityRenderManager } from \"./render-managers/entities/entity-render-manager\";\r\nimport { TilesetCadRenderManager } from \"./render-managers/tilesets/tileset-cad-render-manager\";\r\n\r\ninterface IRenderedItem {\r\n id: string;\r\n type: MenuItem.EType;\r\n childIds: string[];\r\n item: MenuItem.IItem;\r\n renderManager: RenderManager.Type;\r\n}\r\n\r\n/**\r\n * Utility to keep track of enabled menu items within a Cesium viewer.\r\n */\r\nexport class MenuItemManager {\r\n private viewer: Cesium.Viewer;\r\n private items: IRenderedItem[] = [];\r\n private visualsRegister: VisualsRegister.Register;\r\n public get VisualsRegister(): VisualsRegister.Register {\r\n return this.visualsRegister;\r\n }\r\n\r\n\r\n public constructor(viewer: Cesium.Viewer, visualsRegister?: VisualsRegister.Register) {\r\n this.viewer = viewer;\r\n if (!visualsRegister) {\r\n visualsRegister = new VisualsRegister.Register(viewer);\r\n }\r\n this.visualsRegister = visualsRegister;\r\n }\r\n\r\n /**\r\n * Renders a given menu item and all ids children.\r\n * Will return the enabled item id.\r\n * @param api \r\n * @param item \r\n * @returns \r\n */\r\n public async RenderItem(api: BruceApi, item: MenuItem.IItem): Promise<string> {\r\n const rItem: IRenderedItem = {\r\n id: item.id ?? ObjectUtils.UId(),\r\n childIds: [],\r\n item: item,\r\n renderManager: <any>null,\r\n type: item.Type\r\n }\r\n switch (item.Type) {\r\n case MenuItem.EType.Entities:\r\n rItem.renderManager = new EntitiesRenderManager.Manager(this.viewer, this.visualsRegister, api, <MenuItem.Item.IBruceEntities>item);\r\n break;\r\n case MenuItem.EType.EntitiesLoaded:\r\n rItem.renderManager = new EntitiesLoadedRenderManager.Manager(this.viewer, this.visualsRegister, api, <MenuItem.Item.IEntitiesLoaded>item);\r\n break;\r\n case MenuItem.EType.EntitiesIds:\r\n rItem.renderManager = new EntitiesIdsRenderManager.Manager(this.viewer, this.visualsRegister, api, <MenuItem.Item.IEntityIds>item);\r\n break;\r\n case MenuItem.EType.Entity:\r\n rItem.renderManager = new EntityRenderManager.Manager(this.viewer, this.visualsRegister, api, <MenuItem.Item.IBruceEntity>item);\r\n case MenuItem.EType.CadTileset:\r\n rItem.renderManager = new TilesetCadRenderManager.Manager(this.viewer, this.visualsRegister, api, <MenuItem.Item.ICadTileset>item);\r\n break;\r\n case MenuItem.EType.Osm:\r\n // TODO;\r\n break;\r\n case MenuItem.EType.PointCloud:\r\n // TODO;\r\n break;\r\n case MenuItem.EType.EntityTileset:\r\n // TODO;\r\n break;\r\n case MenuItem.EType.Kml:\r\n // TODO;\r\n break;\r\n // Any \"none\" type can be ignored. These are just containers for other items.\r\n case MenuItem.EType.None:\r\n case <any>\"\":\r\n case null:\r\n break;\r\n default:\r\n throw(\"Menu item type is not implemented.\");\r\n }\r\n if (rItem.renderManager) {\r\n await rItem.renderManager.Init();\r\n }\r\n this.items.push(rItem);\r\n if (item.Children) {\r\n for (let i = 0; i < item.Children.length; i++) {\r\n const childId = await this.RenderItem(api, item.Children[i]);\r\n rItem.childIds.push(childId);\r\n }\r\n }\r\n return rItem.id;\r\n }\r\n\r\n /**\r\n * Disables a menu item by ids id.\r\n * This will disable all children as well.\r\n * @param id \r\n */\r\n public async RemoveItemById(id: string): Promise<void> {\r\n const item = this.items.find(x => x.id === id);\r\n if (item) {\r\n for (let i = 0; i < item.childIds.length; i++) {\r\n const child = this.items.find(x => x.id === item.childIds[i]);\r\n if (child) {\r\n await this.RemoveItemById(child.id);\r\n }\r\n }\r\n try {\r\n item.renderManager.Dispose();\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n this.items = this.items.filter(x => x.id !== id);\r\n }\r\n }\r\n}","import { BruceApi, Entity, MenuItem, ObjectUtils, Tileset, ZoomControl } from \"bruce-models\";\r\nimport { MenuItemManager } from \"./menu-item-manager\";\r\nimport * as Cesium from \"cesium\";\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 async function RenderEntities(manager: MenuItemManager, api: BruceApi, 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 manager.RenderItem(api, item);\r\n }\r\n\r\n export async function RenderEntityTypes(manager: MenuItemManager, api: BruceApi, typeIds: string[]): Promise<string> {\r\n const groupItem: MenuItem.IItem = {\r\n Caption: \"Rendering Entity Types\",\r\n Type: MenuItem.EType.None,\r\n id: ObjectUtils.UId(),\r\n Children: []\r\n };\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 groupItem.Children?.push(menuItem);\r\n }\r\n return await manager.RenderItem(api, groupItem);\r\n }\r\n\r\n export async function RenderEntityFilter(viewer: Cesium.Viewer, api: BruceApi, filter: Entity.Filter.V1.IFilter): Promise<string> {\r\n throw(new Error(\"Not implemented.\"));\r\n }\r\n\r\n export async function RenderBookmark(viewer: Cesium.Viewer, api: BruceApi, viewId: string, bookmarkId: string): Promise<string> {\r\n throw(new Error(\"Not implemented.\"));\r\n }\r\n\r\n export async function RenderMenuItems(manager: MenuItemManager, api: BruceApi, menuItems: MenuItem.IItem[]): Promise<string> {\r\n const groupItem: MenuItem.IItem = {\r\n Caption: \"Rendering Menu Items\",\r\n Type: MenuItem.EType.None,\r\n id: ObjectUtils.UId(),\r\n Children: []\r\n };\r\n for (let i = 0; i < menuItems.length; i++) {\r\n const menuItem = menuItems[i];\r\n groupItem.Children?.push(menuItem);\r\n }\r\n return await manager.RenderItem(api, groupItem);\r\n }\r\n\r\n export async function RenderTileset(manager: MenuItemManager, api: BruceApi, tilesetId: string): Promise<string> {\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 manager.RenderItem(api, menuItem);\r\n }\r\n else {\r\n throw(new Error(\"Tileset type not supported.\"));\r\n }\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","EntityTag","Cesium.ClassificationType","Cesium.ArcType","Cesium.PolygonHierarchy","Cesium.ShadowMode","Cesium.PolylineGraphics","Cesium.HeadingPitchRoll","Cesium.Transforms","Cesium.ColorBlendMode","EntityLod","ClientFile","EntityRenderEngine","EntityFilterGetter","DelayQueue","Entity","EntitiesRenderManager","BatchedDataGetter","EntitiesLoadedRenderManager","Cesium.Primitive","Cesium.Cesium3DTileFeature","ObjectUtils","VisualsRegister","EntitiesIdsRenderManager","EntityRenderManager","colorToCColor","Tileset","Cesium.Matrix4","Cesium.Cesium3DTileset","Cesium.HeadingPitchRange","TilesetCadRenderManager","MenuItem","RenderHelper"],"mappings":"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"}
|