{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/primitives/viewshed/index.ts"],"sourcesContent":["import { createCommentVNode, defineComponent, getCurrentInstance, onUnmounted, PropType, watch, WatchStopHandle } from 'vue'\nimport type { VcColor, VcComponentInternalInstance } from 'casc-cesium-utils/types'\nimport { useCommon } from 'casc-cesium-composables'\nimport { scene } from 'casc-cesium-utils/cesium-props'\nimport { kebabCase } from 'casc-cesium-utils/util'\nimport { commonEmits } from 'casc-cesium-utils/emits'\nimport { Viewshed } from 'casc-cesium-shared'\nimport { makeColor } from 'casc-cesium-utils/cesium-helpers'\nimport fragmentShader from 'casc-cesium-shared/shaders/Viewshed'\n\nexport const viewshedProps = {\n  ...scene,\n  fovH: {\n    type: Number,\n    default: 90\n  },\n  fovV: {\n    type: Number,\n    default: 60\n  },\n  offsetHeight: {\n    type: Number,\n    default: 1.8\n  },\n  visibleColor: {\n    type: [Object, Array, String] as PropType<VcColor>,\n    default: '#00ff00'\n  },\n  invisibleColor: {\n    type: [Object, Array, String] as PropType<VcColor>,\n    default: '#ff0000'\n  },\n  showGridLine: {\n    type: Boolean,\n    default: true\n  },\n  lineColor: {\n    type: [Object, Array, String] as PropType<VcColor>,\n    default: 'rgba(255,255,255,0.4)'\n  },\n  faceColor: {\n    type: [Object, Array, String] as PropType<VcColor>,\n    default: 'rgba(255,255,255,0.1)'\n  },\n  show: {\n    type: Boolean,\n    default: true\n  },\n  startPosition: {\n    type: Object as PropType<Cesium.Cartesian3>\n  },\n  endPosition: {\n    type: Object as PropType<Cesium.Cartesian3>\n  },\n  fragmentShader: {\n    type: String,\n    default: fragmentShader\n  },\n  uniforms: Object\n}\n\nexport default defineComponent({\n  name: 'VcViewshed',\n  props: viewshedProps,\n  emits: commonEmits,\n  setup(props, ctx) {\n    // state\n    const instance = getCurrentInstance() as VcComponentInternalInstance\n    instance.cesiumClass = 'VcViewshed'\n    // state\n    const commonState = useCommon(props, ctx, instance)\n    if (commonState === void 0) {\n      return\n    }\n\n    const unwatchFns: Array<WatchStopHandle> = []\n    let attachedViewshedStage: Cesium.PostProcessStage\n\n    unwatchFns.push(\n      watch(\n        [() => props.startPosition, () => props.endPosition],\n        ([newStartPosition, newEndPosition]) => {\n          if (!instance.mounted) {\n            return\n          }\n          updateViewshed(newStartPosition, newEndPosition)\n        },\n        {\n          deep: true\n        }\n      )\n    )\n\n    unwatchFns.push(\n      watch(\n        () => props.fovH,\n        val => {\n          if (!instance.mounted) {\n            return\n          }\n\n          const viewshed = instance.cesiumObject as Viewshed\n          viewshed.fovH = val\n        }\n      )\n    )\n\n    unwatchFns.push(\n      watch(\n        () => props.fovV,\n        val => {\n          if (!instance.mounted) {\n            return\n          }\n\n          const viewshed = instance.cesiumObject as Viewshed\n          viewshed.fovV = val\n        }\n      )\n    )\n\n    unwatchFns.push(\n      watch(\n        () => props.fovV,\n        val => {\n          if (!instance.mounted) {\n            return\n          }\n\n          const viewshed = instance.cesiumObject as Viewshed\n          viewshed.fovV = val\n        }\n      )\n    )\n\n    unwatchFns.push(\n      watch(\n        () => props.offsetHeight,\n        val => {\n          if (!instance.mounted) {\n            return\n          }\n\n          const viewshed = instance.cesiumObject as Viewshed\n          viewshed.offsetHeight = val\n        }\n      )\n    )\n\n    unwatchFns.push(\n      watch(\n        () => props.visibleColor,\n        val => {\n          if (!instance.mounted) {\n            return\n          }\n\n          const viewshed = instance.cesiumObject as Viewshed\n          viewshed.visibleColor = makeColor(val) as Cesium.Color\n        }\n      )\n    )\n\n    unwatchFns.push(\n      watch(\n        () => props.invisibleColor,\n        val => {\n          if (!instance.mounted) {\n            return\n          }\n\n          const viewshed = instance.cesiumObject as Viewshed\n          viewshed.invisibleColor = makeColor(val) as Cesium.Color\n        }\n      )\n    )\n\n    unwatchFns.push(\n      watch(\n        () => props.showGridLine,\n        val => {\n          if (!instance.mounted) {\n            return\n          }\n\n          const viewshed = instance.cesiumObject as Viewshed\n          viewshed.showGridLine = val\n        }\n      )\n    )\n\n    unwatchFns.push(\n      watch(\n        () => props.show,\n        val => {\n          if (!instance.mounted) {\n            return\n          }\n\n          const viewshed = instance.cesiumObject as Viewshed\n          viewshed.enabled = val\n        }\n      )\n    )\n\n    // life cycle\n    onUnmounted(() => {\n      unwatchFns.forEach(item => item())\n      unwatchFns.length = 0\n    })\n\n    // methods\n    instance.createCesiumObject = async () => {\n      const viewer = commonState.$services.viewer\n      const viewshed = new Viewshed(viewer.scene, {\n        fovH: 120,\n        fovV: 60,\n        offsetHeight: 1.8,\n        visibleColor: makeColor(props.visibleColor),\n        invisibleColor: makeColor(props.invisibleColor),\n        showGridLine: props.showGridLine\n      })\n\n      ;(viewshed._viewshedShadowMap as any).cascadesEnabled = false\n      viewshed._viewshedShadowMap.softShadows = false\n      viewshed._viewshedShadowMap.normalOffset = false\n      ;(viewshed._viewshedShadowMap as any).fromLightSource = false\n      viewshed._viewshedShadowMap.enabled = false\n      viewshed.fovH = Cesium.Math.toRadians(props.fovH)\n      viewshed.fovV = Cesium.Math.toRadians(props.fovV)\n      viewshed.offsetHeight = props.offsetHeight\n      viewshed.showGridLine = props.showGridLine\n      viewshed.enabled = props.show\n      viewshed.lineColor = makeColor(props.lineColor) as Cesium.Color\n      viewshed.faceColor = makeColor(props.faceColor) as Cesium.Color\n      return viewshed\n    }\n\n    instance.mount = async () => {\n      const viewer = commonState.$services.viewer\n      const viewshed = instance.cesiumObject as Viewshed\n      const { Cartesian4, PostProcessStage, Cartesian2 } = Cesium\n\n      updateViewshed(props.startPosition, props.endPosition)\n      attachedViewshedStage = new PostProcessStage({\n        fragmentShader: props.fragmentShader,\n        uniforms: props.uniforms || {\n          u_color1: function () {\n            return viewshed.visibleColor\n          },\n          u_color2: function () {\n            return viewshed.invisibleColor\n          },\n          u_isShed: function () {\n            return viewshed.shadowMap.enabled\n          },\n          u_radius: function () {\n            return viewshed.lightCamera.frustum.far\n          },\n          shadowMap_depthTexture: function () {\n            return viewshed.shadowMap.enabled ? viewshed.shadowMap._shadowMapTexture : (viewer.scene as any).context.defaultTexture\n          },\n          shadowMap_matrix: function () {\n            return viewshed.shadowMap._shadowMapMatrix\n          },\n          shadowMap_cascadeSplits: function () {\n            return (viewshed.shadowMap as any)._cascadeSplits\n          },\n          shadowMap_cascadeMatrices: function () {\n            return (viewshed.shadowMap as any)._cascadeMatrices\n          },\n          shadowMap_lightDirectionEC: function () {\n            return (viewshed.shadowMap as any)._lightDirectionEC\n          },\n          shadowMap_lightPositionEC: function () {\n            return viewshed.shadowMap._lightPositionEC\n          },\n          shadowMap_cascadeDistances: function () {\n            return (viewshed.shadowMap as any)._cascadeDistances\n          },\n          shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness: function () {\n            const e = viewshed.shadowMap._pointBias\n            return Cartesian4.fromElements(e.normalOffsetScale, viewshed.shadowMap._distance, viewshed.shadowMap.maximumDistance, 0, new Cartesian4())\n          },\n          shadowMap_texelSizeDepthBiasAndNormalShadingSmooth: function () {\n            const e = viewshed.shadowMap._pointBias\n            const t = new Cartesian2()\n            t.x = 1 / viewshed.shadowMap._textureSize.x\n            t.y = 1 / viewshed.shadowMap._textureSize.y\n            return Cartesian4.fromElements(t.x, t.y, e.depthBias, e.normalShadingSmooth, new Cartesian4())\n          },\n          czzj: function () {\n            return (viewshed.lightCamera.frustum as Cesium.PerspectiveFrustum).fov\n          },\n          spzj: function () {\n            return (viewshed.lightCamera.frustum as Cesium.PerspectiveFrustum).fov\n          },\n          mixNum: function () {\n            return 0.5\n          },\n          shadowMap_lightUp: function () {\n            return viewshed.lightCamera.up\n          },\n          shadowMap_lightDir: function () {\n            return viewshed.lightCamera.direction\n          },\n          shadowMap_lightRight: function () {\n            return viewshed.lightCamera.right\n          }\n        }\n      })\n\n      viewer.scene.postProcessStages.add(attachedViewshedStage)\n      const primitives = commonState.$services.primitives\n      return primitives && primitives.add(viewshed)\n    }\n\n    instance.unmount = async () => {\n      const viewer = commonState.$services.viewer\n      attachedViewshedStage && viewer.scene.postProcessStages.remove(attachedViewshedStage)\n\n      const primitives = commonState.$services.primitives\n      const viewshed = instance.cesiumObject as Viewshed\n      return primitives && primitives.remove(viewshed)\n    }\n\n    const updateViewshed = (startPosition, endPosition) => {\n      const viewshed = instance.cesiumObject as Viewshed\n      const { Cartesian3 } = Cesium\n      let diffrence = Cartesian3.subtract(endPosition, startPosition, new Cartesian3())\n      const magnitudeSquared = Cartesian3.magnitudeSquared(diffrence)\n      const distance = Cartesian3.distance(endPosition, startPosition)\n\n      if (magnitudeSquared < 0.01 || viewshed.frustum.near > distance) {\n        viewshed.enabled = false\n      } else {\n        viewshed.enabled = true\n        diffrence = Cartesian3.normalize(diffrence, diffrence)\n        const up = Cartesian3.normalize(endPosition, new Cartesian3())\n\n        viewshed.setView({\n          destination: startPosition,\n          orientation: {\n            direction: diffrence,\n            up: up\n          }\n        })\n        viewshed.frustum.far = Math.max(distance, 1.1)\n      }\n    }\n\n    return () => createCommentVNode(kebabCase(instance.proxy?.$options.name || ''))\n  }\n})\n"],"names":[],"mappings":"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"}