vue-cesium
Version:
Vue 3.x components for CesiumJS.
1 lines • 20.2 kB
Source Map (JSON)
{"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 '@vue-cesium/composables'\nimport type { VcComponentInternalInstance, VcComponentPublicInstance, VcReadyObject } from '@vue-cesium/utils/types'\nimport { computed, createCommentVNode, defineComponent, getCurrentInstance, onUnmounted, watch } from 'vue'\nimport ParticleSystem from './particleSystem'\nimport { viewRectangleToLonLatRange } from './util'\nimport { kebabCase } from '@vue-cesium/utils/util'\nimport { commonEmits } from '@vue-cesium/utils/emits'\nimport { ParticleSystemOptions, VcWindData, ViewerParameters } from './types'\nimport { makeCartesian2 } from '@vue-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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"}