vue-cesium
Version:
Vue 3.x components for CesiumJS.
1 lines • 11.5 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/analyses/flood/index.ts"],"sourcesContent":["/*\n * @Author: zouyaoji@https://github.com/zouyaoji\n * @Date: 2021-12-31 10:30:21\n * @LastEditTime: 2022-08-22 20:31:30\n * @LastEditors: zouyaoji\n * @Description:\n * @FilePath: \\vue-cesium@next\\packages\\components\\analyses\\flood\\index.ts\n */\nimport { defineComponent, getCurrentInstance, PropType, ref, h, createCommentVNode, WatchStopHandle, onUnmounted, watch } from 'vue'\nimport { polygonHierarchy } from '@vue-cesium/utils/cesium-props'\nimport { VcColor, VcComponentInternalInstance, VcComponentPublicInstance, VcPolygonHierarchy, VcReadyObject } from '@vue-cesium/utils/types'\nimport { makeColor } from '@vue-cesium/utils/cesium-helpers'\nimport { VcPrimitiveClassification } from '@vue-cesium/components/primitives'\nimport { VcGeometryInstance } from '@vue-cesium/components/geometry-instance'\nimport { VcGeometryPolygon } from '@vue-cesium/components/geometries'\nimport { getInstanceListener, getVcParentInstance } from '@vue-cesium/utils/private/vm'\nimport { useCommon } from '@vue-cesium/composables'\nimport { commonEmits } from '@vue-cesium/utils/emits'\n\nconst emits = {\n ...commonEmits,\n stop: (evt: Cesium.ClassificationPrimitive) => true\n}\nexport default defineComponent({\n name: 'VcAnalysisFlood',\n props: {\n minHeight: {\n type: Number,\n default: -1\n },\n maxHeight: {\n type: Number,\n default: 8888\n },\n speed: {\n type: Number,\n default: 10\n },\n loop: {\n type: Boolean,\n default: false\n },\n color: {\n type: [Object, Array, String] as PropType<VcColor>,\n default: 'rgba(40,150,200,0.6)'\n },\n ...polygonHierarchy\n },\n emits: emits,\n setup(props: VcAnalysisFloodProps, ctx) {\n const instance = getCurrentInstance() as VcComponentInternalInstance\n instance.cesiumClass = 'VcAnalysisFlood'\n instance.cesiumEvents = []\n\n const commonState = useCommon(props, ctx, instance)\n if (commonState === void 0) {\n return\n }\n\n const { emit } = ctx\n\n const canRender = ref(false)\n\n const vcParent = getVcParentInstance(instance)\n ;(vcParent.proxy as VcComponentPublicInstance).creatingPromise?.then(() => {\n canRender.value = true\n })\n\n const flooding = ref(false)\n const attributes = ref<any>(null)\n const extrudedHeight = ref(-1)\n const childRef = ref<Cesium.ClassificationPrimitive>(null)\n let stoped = false\n\n // watcch\n let unwatchFns: Array<WatchStopHandle> = []\n unwatchFns.push(\n watch(\n () => props.minHeight,\n val => {\n extrudedHeight.value = val\n }\n )\n )\n\n // methods\n instance.createCesiumObject = async () => {\n const { ColorGeometryInstanceAttribute } = Cesium\n\n attributes.value = {\n color: ColorGeometryInstanceAttribute.fromColor(makeColor(props.color) as Cesium.Color)\n }\n\n return childRef.value\n }\n\n instance.mount = async () => {\n const { viewer } = commonState.$services\n viewer.clock.onTick.addEventListener(onClockTick)\n return true\n }\n\n instance.unmount = async () => {\n const { viewer } = commonState.$services\n viewer.clock.onTick.removeEventListener(onClockTick)\n extrudedHeight.value = -1\n flooding.value = false\n return true\n }\n\n const onClockTick = () => {\n if (flooding.value) {\n if (extrudedHeight.value <= props.maxHeight) {\n extrudedHeight.value += props.speed\n stoped = false\n } else {\n const listener = getInstanceListener(instance, 'stop')\n listener && emit('stop', childRef.value)\n stoped = true\n if (props.loop) {\n extrudedHeight.value = props.minHeight\n } else {\n flooding.value = false\n }\n }\n }\n }\n\n const start = (height?: number) => {\n extrudedHeight.value = Cesium.defined(height) ? height : props.minHeight\n flooding.value = true\n }\n\n const pause = () => {\n flooding.value = !flooding.value\n if (stoped) {\n extrudedHeight.value = props.minHeight\n }\n }\n\n const stop = () => {\n extrudedHeight.value = -1\n flooding.value = false\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 start,\n pause,\n stop,\n getCurrentHeight: () => extrudedHeight.value\n })\n\n return () => {\n if (canRender.value) {\n const { createGuid } = Cesium\n\n return h(\n VcPrimitiveClassification,\n {\n asynchronous: false,\n ref: childRef\n },\n () =>\n h(\n VcGeometryInstance,\n {\n id: createGuid(),\n attributes: attributes.value\n },\n () =>\n h(VcGeometryPolygon, {\n extrudedHeight: extrudedHeight.value,\n polygonHierarchy: props.polygonHierarchy\n })\n )\n )\n } else {\n return createCommentVNode('v-if')\n }\n }\n }\n})\n\nexport interface VcAnalysisFloodProps {\n /**\n * Specify the minimum elevation.\n * Default value: -1\n */\n minHeight?: number\n /**\n * Specify the maximum elevation.\n * Default value: 8888\n */\n maxHeight?: number\n /**\n * Specify the height to increase each frame.\n * Default value: 10\n */\n speed?: number\n /**\n * Specify whether to restart after reaching the maximum height.\n * Default value: false\n */\n loop?: boolean\n /**\n * Specify the VcColor of water.\n * Default value: rgba(40,150,200,0.6)\n */\n color?: VcColor\n /**\n * Specify ths VcPolygonHierarchy of polygon.\n */\n polygonHierarchy: VcPolygonHierarchy\n /**\n * Triggers before the VcAnalysisFlood is loaded.\n */\n onBeforeLoad?: (instance: VcComponentInternalInstance) => void\n /**\n * Triggers when the VcAnalysisFlood 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 VcAnalysisFlood is destroyed.\n */\n onDestroyed?: (instance: VcComponentInternalInstance) => void\n /**\n * Triggers when the maxHeight is reached.\n */\n onStop?: (evt: Cesium.ClassificationPrimitive) => void\n}\n\nexport interface VcAnalysisFloodRef extends VcComponentPublicInstance<VcAnalysisFloodProps> {\n /**\n * Start flood analysis\n */\n start: (height?: number) => void\n /**\n * Pause flood analysis\n */\n pause: () => void\n /**\n * Stop flood analysis\n */\n stop: (removeLatest?: boolean) => void\n /**\n * Get the extrudedHeight value.\n */\n getCurrentHeight: () => number\n}\n"],"names":[],"mappings":"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"}