{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/overlays/wind/index.ts"],"sourcesContent":["/*\n * @Author: zouyaoji@https://github.com/zouyaoji\n * @Date: 2021-10-28 13:42:09\n * @LastEditTime: 2022-03-09 23:31:53\n * @LastEditors: zouyaoji\n * @Description: from 3D-Wind-Field - https://github.com/RaymanNg/3D-Wind-Field\n * @FilePath: \\vue-cesium@next\\packages\\components\\overlays\\wind\\index.ts\n */\nimport type { PropType, WatchStopHandle } from 'vue'\nimport { useCommon } from 'casc-cesium-composables'\nimport type { VcComponentInternalInstance, VcComponentPublicInstance, VcReadyObject } from 'casc-cesium-utils/types'\nimport { computed, createCommentVNode, defineComponent, getCurrentInstance, onUnmounted, watch } from 'vue'\nimport ParticleSystem from './particleSystem'\nimport { viewRectangleToLonLatRange } from './util'\nimport { kebabCase } from 'casc-cesium-utils/util'\nimport { commonEmits } from 'casc-cesium-utils/emits'\nimport { ParticleSystemOptions, VcWindData, ViewerParameters } from './types'\nimport { makeCartesian2 } from 'casc-cesium-utils/cesium-helpers'\nimport { regularGrid } from './grid/regular'\n\nexport const windmapOverlayProps = {\n  show: {\n    type: Boolean,\n    default: true\n  },\n  data: {\n    type: Object as PropType<VcWindData>,\n    required: true\n  },\n  options: {\n    type: Object as PropType<ParticleSystemOptions>,\n    default: () =>\n      ({\n        maxParticles: 64 * 64,\n        particleHeight: 100.0,\n        fadeOpacity: 0.996,\n        dropRate: 0.003,\n        dropRateBump: 0.01,\n        speedFactor: 1.0,\n        lineWidth: 4.0\n      } as ParticleSystemOptions)\n  },\n  viewerParameters: Object as PropType<ViewerParameters>\n}\nexport default defineComponent({\n  name: 'VcOverlayWindmap',\n  props: windmapOverlayProps,\n  emits: commonEmits,\n  setup(props, ctx) {\n    // state\n    const instance = getCurrentInstance() as VcComponentInternalInstance\n    instance.cesiumClass = 'VcOverlayHtml'\n    instance.cesiumEvents = []\n    const commonState = useCommon(props, ctx, instance)\n    if (commonState === void 0) {\n      return\n    }\n\n    const { $services } = commonState\n    let viewerParameters: ViewerParameters\n    let globeBoundingSphere: Cesium.BoundingSphere\n    let primitiveCollection: Cesium.PrimitiveCollection\n    let grid\n\n    // computed\n    const particleSystemOptions = computed<ParticleSystemOptions>(() => {\n      // make sure maxParticles is exactly the square of particlesTextureSize\n      const particlesTextureSize = Math.ceil(Math.sqrt(props.options.maxParticles))\n      const maxParticles = particlesTextureSize * particlesTextureSize\n      return {\n        particlesTextureSize: particlesTextureSize,\n        maxParticles: maxParticles,\n        particleHeight: props.options.particleHeight,\n        fadeOpacity: props.options.fadeOpacity,\n        dropRate: props.options.dropRate,\n        dropRateBump: props.options.dropRateBump,\n        speedFactor: props.options.speedFactor,\n        lineWidth: props.options.lineWidth\n      }\n    })\n\n    // watcch\n    let unwatchFns: Array<WatchStopHandle> = []\n    unwatchFns.push(\n      watch(\n        () => props.show,\n        val => {\n          primitiveCollection.show = val\n        }\n      )\n    )\n\n    unwatchFns.push(\n      watch(\n        () => props.data,\n        val => {\n          ;(instance.proxy as VcComponentPublicInstance).reload()\n        }\n      )\n    )\n\n    unwatchFns.push(\n      watch(\n        () => particleSystemOptions.value,\n        val => {\n          const particleSystem = instance.cesiumObject as ParticleSystem\n          if (!particleSystem) return\n          particleSystem.applyParticleSystemOptions(val)\n        },\n        {\n          deep: true\n        }\n      )\n    )\n\n    unwatchFns.push(\n      watch(\n        () => props.viewerParameters,\n        val => {\n          updateViewerParameters()\n          const particleSystem = instance.cesiumObject as ParticleSystem\n          particleSystem.applyViewerParameters(viewerParameters)\n        },\n        {\n          deep: true\n        }\n      )\n    )\n\n    // methods\n    instance.createCesiumObject = async () => {\n      const { viewer } = $services\n      primitiveCollection = new Cesium.PrimitiveCollection()\n      // use a smaller earth radius to make sure distance to camera > 0\n      globeBoundingSphere = new Cesium.BoundingSphere(Cesium.Cartesian3.ZERO, 0.99 * 6378137.0)\n      viewerParameters = {\n        lonRange: new Cesium.Cartesian2(),\n        latRange: new Cesium.Cartesian2(),\n        pixelSize: 0.0\n      }\n      const sequenceLon = { start: props.data.lon.array[0], delta: props.data.lon.delta, size: props.data.lon.array.length }\n      const sequenceLat = { start: props.data.lat.array[0], delta: props.data.lat.delta, size: props.data.lat.array.length }\n      grid = regularGrid(sequenceLon, sequenceLat)\n      updateViewerParameters()\n      return new ParticleSystem((viewer.scene as any).context, props.data, particleSystemOptions.value, viewerParameters)\n    }\n\n    instance.mount = async () => {\n      const { viewer } = $services\n      viewer.scene.primitives.add(primitiveCollection)\n      const scene = viewer.scene\n      const camera = scene.camera\n      addPrimitives()\n      camera.moveStart.addEventListener(moveStartListener)\n      camera.moveEnd.addEventListener(moveEndListener)\n      window.addEventListener('resize', resizeListener)\n      scene.preRender.addEventListener(preRenderListener)\n      return true\n    }\n\n    instance.unmount = async () => {\n      removePrimitives()\n      const { viewer } = $services\n      const scene = viewer.scene\n      const camera = scene.camera\n      removePrimitives()\n      viewer.scene.primitives.remove(primitiveCollection)\n      camera.moveStart.removeEventListener(moveStartListener)\n      camera.moveEnd.removeEventListener(moveEndListener)\n      window.removeEventListener('resize', resizeListener)\n      scene.preRender.removeEventListener(preRenderListener)\n      return true\n    }\n\n    const addPrimitives = () => {\n      const particleSystem = instance.cesiumObject as ParticleSystem\n\n      // the order of primitives.add() should respect the dependency of primitives\n      primitiveCollection.add(particleSystem.particlesComputing.primitives.calculateSpeed)\n      primitiveCollection.add(particleSystem.particlesComputing.primitives.updatePosition)\n      primitiveCollection.add(particleSystem.particlesComputing.primitives.postProcessingPosition)\n\n      primitiveCollection.add(particleSystem.particlesRendering.primitives.segments)\n      primitiveCollection.add(particleSystem.particlesRendering.primitives.trails)\n      primitiveCollection.add(particleSystem.particlesRendering.primitives.screen)\n    }\n\n    const removePrimitives = () => {\n      const particleSystem = instance.cesiumObject as ParticleSystem\n      primitiveCollection.remove(particleSystem.particlesComputing.primitives.calculateSpeed)\n      primitiveCollection.remove(particleSystem.particlesComputing.primitives.updatePosition)\n      primitiveCollection.remove(particleSystem.particlesComputing.primitives.postProcessingPosition)\n\n      primitiveCollection.remove(particleSystem.particlesRendering.primitives.segments)\n      primitiveCollection.remove(particleSystem.particlesRendering.primitives.trails)\n      primitiveCollection.remove(particleSystem.particlesRendering.primitives.screen)\n    }\n\n    const moveStartListener = () => {\n      primitiveCollection.show = false\n    }\n\n    const moveEndListener = () => {\n      updateViewerParameters()\n      const particleSystem = instance.cesiumObject as ParticleSystem\n      particleSystem.applyViewerParameters(viewerParameters)\n      primitiveCollection.show = true\n    }\n\n    let resized = false\n    const resizeListener = () => {\n      resized = true\n      primitiveCollection.show = false\n      primitiveCollection.removeAll()\n    }\n\n    const preRenderListener = () => {\n      if (resized) {\n        const { viewer } = $services\n        const scene = viewer.scene\n        const particleSystem = instance.cesiumObject as ParticleSystem\n        particleSystem.canvasResize((scene as any).context)\n        resized = false\n        addPrimitives()\n        primitiveCollection.show = true\n      }\n    }\n\n    const updateViewerParameters = () => {\n      const { viewer } = $services\n      const scene = viewer.scene\n      const camera = scene.camera\n\n      if (\n        Cesium.defined(props.viewerParameters) &&\n        Cesium.defined(props.viewerParameters.latRange) &&\n        Cesium.defined(props.viewerParameters.lonRange)\n      ) {\n        viewerParameters.lonRange = makeCartesian2(props.viewerParameters.lonRange)\n        viewerParameters.latRange = makeCartesian2(props.viewerParameters.latRange)\n      } else {\n        const viewRectangle = camera.computeViewRectangle(scene.globe.ellipsoid)\n        const lonLatRange = viewRectangleToLonLatRange(viewRectangle)\n        ;(viewerParameters.lonRange as Cesium.Cartesian2).x = lonLatRange.lon.min\n        ;(viewerParameters.lonRange as Cesium.Cartesian2).y = lonLatRange.lon.max\n        ;(viewerParameters.latRange as Cesium.Cartesian2).x = lonLatRange.lat.min\n        ;(viewerParameters.latRange as Cesium.Cartesian2).y = lonLatRange.lat.max\n      }\n\n      const pixelSize =\n        Cesium.defined(props.viewerParameters) && Cesium.defined(props.viewerParameters.pixelSize)\n          ? props.viewerParameters.pixelSize\n          : camera.getPixelSize(globeBoundingSphere, scene.drawingBufferWidth, scene.drawingBufferHeight)\n\n      if (pixelSize > 0) {\n        viewerParameters.pixelSize = pixelSize\n      }\n    }\n\n    const getNearestUV = (longitude: number, latitude: number) => {\n      const index = grid.closest(longitude, latitude)\n      if (Cesium.defined(index)) {\n        return [props.data.U.array[index], props.data.V.array[index]]\n      }\n      return undefined\n    }\n\n    // life cycle\n    onUnmounted(() => {\n      unwatchFns.forEach(item => item())\n      unwatchFns = []\n    })\n\n    // expose public methods\n    Object.assign(instance.proxy, {\n      getNearestUV\n    })\n\n    return () => createCommentVNode(kebabCase(instance.proxy?.$options.name || 'v-if'))\n  }\n})\n\nexport interface VcOverlayWindmapProps {\n  /**\n   * Specify wind map data.\n   */\n  data: VcWindData\n  /**\n   * Specify whether to display the wind map.\n   * Default value: true\n   */\n  show?: boolean\n  /**\n   * Specify the rendering parameters of the wind map.\n   */\n  options?: ParticleSystemOptions\n  /**\n   * Specify the wind field display range.\n   */\n  viewerParameters?: ViewerParameters\n  /**\n   * Triggers before the VcOverlayWindmap is loaded.\n   */\n  onBeforeLoad?: (instance: VcComponentInternalInstance) => void\n  /**\n   * Triggers when the VcOverlayWindmap is successfully loaded.\n   */\n  onReady?: (readyObject: VcReadyObject) => void\n  /**\n   * Triggers when the component load failed.\n   */\n  onUnready?: (e: any) => void\n  /**\n   * Triggers when the VcOverlayWindmap is destroyed.\n   */\n  onDestroyed?: (instance: VcComponentInternalInstance) => void\n}\n\nexport interface VcOverlayWindmapRef extends VcComponentPublicInstance<VcOverlayWindmapProps> {\n  /**\n   * Get near UV values.\n   * @param longitude longitude (degrees)\n   * @param latitude latitude (degrees)\n   */\n  getNearestUV: (longitude: number, latitude: number) => [number, number]\n}\n"],"names":[],"mappings":"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"}