{"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 '@vue-cesium/utils/types'\nimport { useCommon } from '@vue-cesium/composables'\nimport { scene } from '@vue-cesium/utils/cesium-props'\nimport { kebabCase } from '@vue-cesium/utils/util'\nimport { commonEmits } from '@vue-cesium/utils/emits'\nimport { Viewshed } from '@vue-cesium/shared'\nimport { makeColor } from '@vue-cesium/utils/cesium-helpers'\nimport fragmentShader from '@vue-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  },\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      const webgl2 = commonState.$services.viewer.scene.context?.webgl2\n      let shaderSourceText = fragmentShader\n      if (!webgl2) {\n        shaderSourceText = shaderSourceText.replace('in vec2 v_textureCoordinates;', 'varying vec2 v_textureCoordinates;')\n        shaderSourceText = shaderSourceText.replace(/texture\\(/g, 'texture2D(')\n        shaderSourceText = shaderSourceText.replace(/out_FragColor/g, 'gl_FragColor')\n      }\n\n      updateViewshed(props.startPosition, props.endPosition)\n      attachedViewshedStage = new PostProcessStage({\n        fragmentShader: props.fragmentShader || shaderSourceText,\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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"}