UNPKG

vue-cesium

Version:
1 lines 11.2 kB
{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/primitive-collections/cloud-collection/index.ts"],"sourcesContent":["/*\n * @Author: zouyaoji@https://github.com/zouyaoji\n * @Date: 2022-01-28 10:49:53\n * @LastEditTime: 2022-03-20 00:06:02\n * @LastEditors: zouyaoji\n * @Description:\n * @FilePath: \\vue-cesium@next\\packages\\components\\primitive-collections\\cloud-collection\\index.ts\n */\nimport type { PropType, WatchStopHandle } from 'vue'\nimport { createCommentVNode, defineComponent, getCurrentInstance, h, onUnmounted, watch } from 'vue'\nimport type { VcComponentInternalInstance, VcComponentPublicInstance, VcPosition, VcReadyObject } from '@vue-cesium/utils/types'\nimport { usePrimitiveCollections } from '@vue-cesium/composables'\nimport { cloneDeep, differenceBy } from 'lodash-unified'\nimport { show } from '@vue-cesium/utils/cesium-props'\nimport { addCustomProperty, kebabCase } from '@vue-cesium/utils/util'\nimport { hSlot } from '@vue-cesium/utils/private/render'\nimport { commonEmits } from '@vue-cesium/utils/emits'\nimport type { VcCumulusCloudProps } from '../cloud'\nimport VcCumulusCloud from '../cloud'\n\nexport const cloudCollectionProps = {\n ...show,\n noiseDetail: {\n type: Number,\n default: 16.0\n },\n noiseOffset: {\n type: Object as PropType<VcPosition>\n },\n debugBillboards: {\n type: Boolean,\n default: false\n },\n debugEllipsoids: {\n type: Boolean,\n default: false\n },\n clouds: {\n type: Array as PropType<Array<VcCumulusCloudProps>>,\n default: () => []\n }\n}\nexport default defineComponent({\n name: 'VcCollectionCloud',\n props: cloudCollectionProps,\n emits: commonEmits,\n setup(props, ctx) {\n // state\n const instance = getCurrentInstance() as VcComponentInternalInstance\n instance.cesiumClass = 'CloudCollection'\n const primitiveCollectionsState = usePrimitiveCollections(props, ctx, instance)\n\n if (primitiveCollectionsState === void 0) {\n return\n }\n\n // watcher\n instance.alreadyListening.push('clouds')\n let unwatchFns: Array<WatchStopHandle> = []\n unwatchFns.push(\n watch(\n () => cloneDeep(props.clouds),\n (newVal, oldVal) => {\n if (!instance.mounted) {\n return\n }\n\n const cloudCollection = instance.cesiumObject as Cesium.CloudCollection\n\n if (newVal.length === oldVal.length) {\n // 视为修改操作\n // Treated as modified\n const modifies: Array<any> = []\n for (let i = 0; i < newVal.length; i++) {\n const options = newVal[i]\n const oldOptions = oldVal[i]\n\n if (JSON.stringify(options) !== JSON.stringify(oldOptions)) {\n modifies.push({\n newOptions: options,\n oldOptions: oldOptions\n })\n }\n }\n\n modifies.forEach(modify => {\n const modifyCloud = cloudCollection._clouds.find(v => v.id === modify.oldOptions.id)\n modifyCloud &&\n Object.keys(modify.newOptions).forEach(prop => {\n if (modify.oldOptions[prop] !== modify.newOptions[prop]) {\n modifyCloud[prop] = primitiveCollectionsState.transformProp(prop, modify.newOptions[prop])\n }\n })\n })\n } else {\n const addeds: any = differenceBy(newVal, oldVal, 'id')\n const deletes: any = differenceBy(oldVal, newVal, 'id')\n const deleteClouds: Array<Cesium.CumulusCloud> = []\n for (let i = 0; i < deletes.length; i++) {\n const deleteCloud = cloudCollection._clouds.find(v => v.id === deletes[i].id)\n deleteCloud && deleteClouds.push(deleteCloud)\n }\n\n deleteClouds.forEach(v => {\n cloudCollection.remove(v)\n })\n\n addClouds(cloudCollection, addeds)\n }\n },\n {\n deep: true\n }\n )\n )\n // methods\n const addClouds = (cloudCollection: Cesium.CloudCollection, clouds) => {\n for (let i = 0; i < clouds.length; i++) {\n const cloudOptions = clouds[i] as Cesium.CumulusCloud\n cloudOptions.id = Cesium.defined(cloudOptions.id) ? cloudOptions.id : Cesium.createGuid()\n const cloudOptionsTransform = primitiveCollectionsState.transformProps(cloudOptions, VcCumulusCloud.props)\n const cloud = cloudCollection.add(cloudOptionsTransform)\n addCustomProperty(cloud, cloudOptionsTransform)\n }\n }\n\n instance.createCesiumObject = async () => {\n const options = primitiveCollectionsState.transformProps(props, VcCumulusCloud.props)\n const cloudCollection = new Cesium.CloudCollection(options as any)\n addClouds(cloudCollection, props.clouds)\n return cloudCollection\n }\n\n // life cycle\n onUnmounted(() => {\n unwatchFns.forEach(item => item())\n unwatchFns = []\n })\n\n const name = instance.proxy?.$options.name || ''\n return () =>\n ctx.slots.default\n ? h(\n 'i',\n {\n class: kebabCase(name),\n style: { display: 'none !important' }\n },\n hSlot(ctx.slots.default)\n )\n : createCommentVNode(kebabCase(name))\n }\n})\n\nexport type VcCollectionCloudProps = {\n /**\n * Whether to display the clouds.\n * Default value: true\n */\n show?: boolean\n /**\n * Desired amount of detail in the noise texture.\n * Default value: 16.0\n */\n noiseDetail?: number\n /**\n * Desired translation of data in noise texture.\n * Default value: {x: 0, y: 0, z: 0}\n */\n noiseOffset?: VcPosition\n /**\n * For debugging only. Determines if the billboards are rendered with an opaque color.\n * Default value: false\n */\n debugBillboards?: boolean\n /**\n * For debugging only. Determines if the clouds will be rendered as opaque ellipsoids.\n * Default value: false\n */\n debugEllipsoids?: boolean\n /**\n * Specifies an array of cumulus collections. The array object structure is the same as the [vc-cumulus-cloud](https://zouyaoji.top/vue-cesium/#/en-US/component/primitives/vc-collection-cloud#vccumuluscloud-props) component properties.\n */\n clouds?: Array<VcCumulusCloudProps>\n /**\n * Triggers before the VcCollectionCloud is loaded.\n */\n onBeforeLoad?: (instance: VcComponentInternalInstance) => void\n /**\n * Triggers when the VcCollectionCloud 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 VcCollectionCloud is destroyed.\n */\n onDestroyed?: (instance: VcComponentInternalInstance) => void\n}\n\nexport type VcCollectionCloudRef = VcComponentPublicInstance<VcCollectionCloudProps>\n"],"names":["VcCumulusCloud"],"mappings":"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"}