UNPKG

casc-cesium

Version:

Vue 3.x components for CesiumJS.

1 lines 21.8 kB
{"version":3,"file":"Viewshed.mjs","sources":["../../../../../packages/shared/analyses/Viewshed.ts"],"sourcesContent":["/*\n * @Author: zouyaoji@https://github.com/zouyaoji\n * @Date: 2022-04-16 18:52:39\n * @LastEditTime: 2022-05-14 22:42:17\n * @LastEditors: zouyaoji\n * @Description:\n * @FilePath: \\vue-cesium@next\\packages\\shared\\analyses\\Viewshed.ts\n */\n\nimport { VcViewshedOpts } from 'casc-cesium-utils/drawing-types'\nimport { DebugCameraPrimitive } from '../src'\n\nclass Viewshed {\n _scene: Cesium.Scene\n _frustum: Cesium.PerspectiveFrustum\n _spotLightCamera: Cesium.Camera\n _viewshedShadowMap: Cesium.ShadowMap\n _debugCameraPrimitive: DebugCameraPrimitive\n _enabledChangedEvent: Cesium.Event\n _position: Cesium.Cartesian3\n _offsetHeight: number\n _visibleColor: Cesium.Color\n _invisibleColor: Cesium.Color\n _showGridLine: boolean\n _fovH: number\n _fovV: number\n constructor(scene: Cesium.Scene, options?: VcViewshedOpts) {\n const {\n defined,\n DeveloperError,\n PerspectiveFrustum,\n Math: CesiumMath,\n Camera,\n ShadowMap,\n ShadowMode,\n Event,\n Cartesian3,\n defaultValue,\n Color\n } = Cesium\n if (!defined(scene)) {\n throw new DeveloperError('scene is required.')\n }\n this._scene = scene\n this._frustum = new PerspectiveFrustum()\n this._frustum.fov = CesiumMath.PI / 3\n this._frustum.aspectRatio = 3\n this._frustum.near = 1\n this._frustum.far = 400\n this._spotLightCamera = new Camera(this._scene)\n this._frustum.clone(this._spotLightCamera.frustum as Cesium.PerspectiveFrustum)\n this._viewshedShadowMap = new ShadowMap({\n context: (this._scene as any).context,\n lightCamera: this._spotLightCamera,\n cascadesEnabled: !1\n } as any)\n options = options || {}\n this._scene.globe.shadows = ShadowMode.ENABLED\n ;(this._viewshedShadowMap as any)._terrainBias.depthBias = 0\n this._debugCameraPrimitive = new DebugCameraPrimitive({})\n this._enabledChangedEvent = new Event()\n this._position = new Cartesian3()\n this._offsetHeight = defaultValue(options.offsetHeight, 1.8)\n this._visibleColor = defaultValue(options.visibleColor, new Color(0, 1, 0, 1))\n this._invisibleColor = defaultValue(options.invisibleColor, new Color(1, 0, 0, 1))\n ;(this._viewshedShadowMap as any)._viewshedColors = {\n visible: this._visibleColor,\n invisible: this._invisibleColor\n }\n this._showGridLine = options.showGridLine\n this._debugCameraPrimitive.show = this._showGridLine\n this._debugCameraPrimitive.lineColor = defaultValue(options.lineColor, new Color(1, 1, 1, 0.4))\n this._debugCameraPrimitive.faceColor = defaultValue(options.faceColor, new Color(1, 1, 1, 0.1))\n }\n\n get frustum() {\n return this._frustum\n }\n\n get fovH() {\n return this._fovH\n }\n set fovH(e) {\n if (isNaN(e) || void 0 === e || null == e || e < 0 || e >= Math.PI) {\n throw new Error('fovH must be in the range [0, PI).')\n }\n this._fovH = Number(e)\n this.frustum.aspectRatio = Math.tan(0.5 * this._fovH) / Math.tan(0.5 * this._fovV)\n this.frustum.fov = this._fovH > this._fovV ? this._fovH : this._fovV\n }\n\n get fovV() {\n return this._fovV\n }\n set fovV(e) {\n if (isNaN(e) || void 0 === e || null == e || e < 0 || e >= Math.PI) {\n throw new Error('fovV must be in the range [0, PI).')\n }\n\n this._fovV = Number(e)\n this.frustum.aspectRatio = Math.tan(0.5 * this._fovH) / Math.tan(0.5 * this._fovV)\n this.frustum.fov = this._fovH > this._fovV ? this._fovH : this._fovV\n }\n\n get near() {\n return this.frustum.near\n }\n set near(e) {\n this.frustum.near !== e && (this.frustum.near = e)\n }\n\n get far() {\n return this.far.near\n }\n set far(e) {\n this.frustum.far !== e && (this.frustum.far = e)\n }\n\n get position() {\n return this._position\n }\n set position(e) {\n if (e instanceof Cesium.Cartesian3) {\n this.setView({\n destination: e.clone(),\n orientation: {\n heading: this._spotLightCamera.heading,\n pitch: this._spotLightCamera.pitch,\n roll: this._spotLightCamera.roll\n }\n })\n }\n }\n\n get offsetHeight() {\n return this._offsetHeight\n }\n set offsetHeight(e) {\n if (isNaN(e) || null == e || null == e) {\n throw new Error('Unacceptable offset.')\n }\n\n this._offsetHeight = Number(e)\n this.setView({\n destination: this._position,\n orientation: {\n heading: this._spotLightCamera.heading,\n pitch: this._spotLightCamera.pitch,\n roll: this._spotLightCamera.roll\n }\n })\n }\n\n get heading() {\n return this._spotLightCamera.heading\n }\n set heading(e) {\n this._spotLightCamera.heading !== e &&\n this._spotLightCamera.setView({\n destination: this._spotLightCamera.positionWC,\n orientation: {\n heading: e,\n pitch: this._spotLightCamera.pitch,\n roll: this._spotLightCamera.roll\n }\n })\n }\n\n get pitch() {\n return this._spotLightCamera.pitch\n }\n set pitch(e) {\n this._spotLightCamera.pitch !== e &&\n this._spotLightCamera.setView({\n destination: this._spotLightCamera.positionWC,\n orientation: {\n heading: this._spotLightCamera.heading,\n pitch: e,\n roll: this._spotLightCamera.roll\n }\n })\n }\n\n get roll() {\n return this._spotLightCamera.roll\n }\n set roll(e) {\n this._spotLightCamera.roll !== e &&\n this._spotLightCamera.setView({\n destination: this._spotLightCamera.positionWC,\n orientation: {\n heading: this._spotLightCamera.heading,\n pitch: this._spotLightCamera.pitch,\n roll: e\n }\n })\n }\n\n get shadowMap() {\n return this._viewshedShadowMap\n }\n\n get lightCamera() {\n return this._spotLightCamera\n }\n\n get enabled() {\n return this._viewshedShadowMap.enabled\n }\n set enabled(e) {\n if (this._viewshedShadowMap.enabled !== e) {\n if (e) {\n // this._debugCameraPrimitive.show = true\n this._viewshedShadowMap.enabled = true\n this._viewshedShadowMap._pointLightRadius = this._spotLightCamera.frustum.far\n } else {\n // this._debugCameraPrimitive.show = false\n this._viewshedShadowMap.enabled = false\n }\n this._enabledChangedEvent.raiseEvent(e)\n }\n }\n\n get enabledChangedEvent() {\n return this._enabledChangedEvent\n }\n\n get visibleColor() {\n return this._visibleColor\n }\n set visibleColor(e: Cesium.Color) {\n this._visibleColor = e\n ;(this._viewshedShadowMap as any)._viewshedColors.visible = e\n }\n\n get invisibleColor() {\n return this._invisibleColor\n }\n set invisibleColor(e: Cesium.Color) {\n this._invisibleColor = e\n ;(this._viewshedShadowMap as any)._viewshedColors.invisible = e\n }\n\n get showGridLine() {\n return this._showGridLine\n }\n set showGridLine(e) {\n this._showGridLine = e\n this._debugCameraPrimitive.show = e\n }\n\n get faceColor() {\n return this._debugCameraPrimitive.faceColor\n }\n set faceColor(e) {\n this._debugCameraPrimitive.faceColor = e\n }\n\n get lineColor() {\n return this._debugCameraPrimitive.lineColor\n }\n set lineColor(e) {\n this._debugCameraPrimitive.lineColor = e\n }\n\n update(frameState) {\n if (this._viewshedShadowMap.enabled) {\n const { ShadowMode, Matrix3, Matrix4, Math: CesiumMath } = Cesium\n this._scene.globe.shadows !== ShadowMode.ENABLED && (this._scene.globe.shadows = ShadowMode.ENABLED)\n frameState.shadowMaps.unshift(this._viewshedShadowMap)\n if (!this._frustum.equals(this._spotLightCamera.frustum as Cesium.PerspectiveFrustum)) {\n this._frustum.clone(this._spotLightCamera.frustum as Cesium.PerspectiveFrustum)\n this._viewshedShadowMap._pointLightRadius = this._frustum.far\n ;(this.shadowMap as any)._boundingSphere.radius = Math.random()\n }\n\n if (this._debugCameraPrimitive.show) {\n const modelMatrix = this._debugCameraPrimitive.modelMatrix\n Matrix4.clone(this._spotLightCamera.inverseViewMatrix, modelMatrix)\n const r0 = Matrix3.fromRotationZ(0.5 * CesiumMath.PI)\n const r1 = Matrix3.fromRotationY(0.5 * CesiumMath.PI)\n const rotation = new Matrix3()\n Matrix3.multiply(r0, r1, rotation)\n Matrix4.multiplyByMatrix3(modelMatrix, rotation, modelMatrix)\n Matrix4.multiplyByUniformScale(modelMatrix, this._spotLightCamera.frustum.far, modelMatrix)\n const frustum = this._spotLightCamera.frustum as Cesium.PerspectiveFrustum\n this._debugCameraPrimitive.fovV = frustum.aspectRatio <= 1 ? frustum.fov : 2 * Math.atan(Math.tan(0.5 * frustum.fov) / frustum.aspectRatio)\n this._debugCameraPrimitive.fovH = 1 < frustum.aspectRatio ? frustum.fov : 2 * Math.atan(Math.tan(0.5 * frustum.fov) * frustum.aspectRatio)\n this._debugCameraPrimitive.segmentH = parseInt(String(this._debugCameraPrimitive.fovH / (Math.PI / 30))) || 1\n this._debugCameraPrimitive.segmentV = parseInt(String(this._debugCameraPrimitive.fovV / (Math.PI / 30))) || 1\n this._debugCameraPrimitive.update(frameState)\n }\n }\n }\n\n setView(options) {\n options = options || {}\n const destination = options.destination\n if (destination instanceof Cesium.Cartesian3) {\n this._position = destination.clone()\n const offsetHeight = this._offsetHeight\n const cartographic = Cesium.Cartographic.fromCartesian(destination, this._scene.globe.ellipsoid)\n if (cartographic) {\n cartographic.height = cartographic.height + offsetHeight\n const cartesian = Cesium.Cartesian3.fromRadians(\n cartographic.longitude,\n cartographic.latitude,\n cartographic.height,\n this._scene.globe.ellipsoid\n )\n options.destination = cartesian\n }\n }\n\n this._spotLightCamera.setView(options)\n }\n\n isDestroyed() {\n return false\n }\n\n destroy() {\n this._debugCameraPrimitive && this._debugCameraPrimitive.destroy()\n this._viewshedShadowMap && this._viewshedShadowMap.destroy()\n Cesium.destroyObject(this)\n }\n}\n\nexport default Viewshed\n"],"names":[],"mappings":"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"}