{"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 '@vue-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    })\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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"}