vue-cesium
Version:
Vue 3.x components for CesiumJS.
1 lines • 29.6 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/primitives/primitive-cluster/index.ts"],"sourcesContent":["/*\n * @Author: zouyaoji@https://github.com/zouyaoji\n * @Date: 2023-05-31 16:51:54\n * @Description: Do not edit\n * @LastEditors: zouyaoji 370681295@qq.com\n * @LastEditTime: 2023-08-16 22:46:10\n * @FilePath: \\vue-cesium\\packages\\components\\primitives\\primitive-cluster\\index.ts\n */\nimport { createCommentVNode, defineComponent, getCurrentInstance, h, onUnmounted, PropType, watch, WatchStopHandle } from 'vue'\nimport type { VcComponentInternalInstance, VcComponentPublicInstance, VcPickEvent, VcReadyObject } from '@vue-cesium/utils/types'\nimport { usePrimitives } from '@vue-cesium/composables'\nimport { VcBillboardProps, VcLabelProps, VcPointProps } from '@vue-cesium/components/primitive-collections'\n\nimport { show, enableMouseEvent } from '@vue-cesium/utils/cesium-props'\nimport { addCustomProperty, kebabCase } from '@vue-cesium/utils/util'\nimport { primitiveEmits } from '@vue-cesium/utils/emits'\nimport { PrimitiveCluster } from '@vue-cesium/shared'\nimport { hSlot } from '@vue-cesium/utils/private/render'\nimport { cloneDeep, differenceBy } from 'lodash-unified'\n\nexport const primitiveClusterProps = {\n ...show,\n enabled: {\n type: Boolean,\n default: true\n },\n pixelRange: {\n type: Number,\n default: 80\n },\n minimumClusterSize: {\n type: Number,\n default: 2\n },\n clusterBillboards: {\n type: Boolean,\n default: true\n },\n clusterLabels: {\n type: Boolean,\n default: true\n },\n clusterPoints: {\n type: Boolean,\n default: true\n },\n billboards: {\n type: Array as PropType<Array<VcBillboardProps>>,\n default: () => []\n },\n labels: {\n type: Array as PropType<Array<VcLabelProps>>,\n default: () => []\n },\n points: {\n type: Array as PropType<Array<VcPointProps>>,\n default: () => []\n },\n ...enableMouseEvent\n}\nexport default defineComponent({\n name: 'VcPrimitiveCluster',\n props: primitiveClusterProps,\n emits: {\n ...primitiveEmits,\n clusterEvent: (ids: string[], cluster: { billboard: Cesium.Billboard; label: Cesium.Label; point: Cesium.PointPrimitive }) => true\n },\n setup(props, ctx) {\n // state\n const instance = getCurrentInstance() as VcComponentInternalInstance\n instance.cesiumClass = 'VcPrimitiveCluster'\n instance.cesiumEvents = ['clusterEvent']\n const primitivesState = usePrimitives(props, ctx, instance)\n\n const unwatchFns: Array<WatchStopHandle> = []\n\n unwatchFns.push(\n watch(\n () => props.show,\n val => {\n const primitiveCluster = instance.cesiumObject as PrimitiveCluster\n primitiveCluster.show = val\n }\n )\n )\n\n unwatchFns.push(\n watch(\n () => props.enabled,\n val => {\n const primitiveCluster = instance.cesiumObject as PrimitiveCluster\n primitiveCluster.enabled = val\n }\n )\n )\n\n unwatchFns.push(\n watch(\n () => props.minimumClusterSize,\n val => {\n const primitiveCluster = instance.cesiumObject as PrimitiveCluster\n primitiveCluster.minimumClusterSize = val\n }\n )\n )\n\n unwatchFns.push(\n watch(\n () => props.clusterBillboards,\n val => {\n const primitiveCluster = instance.cesiumObject as PrimitiveCluster\n primitiveCluster.clusterBillboards = val\n instance.proxy['reload']()\n }\n )\n )\n\n unwatchFns.push(\n watch(\n () => props.clusterLabels,\n val => {\n const primitiveCluster = instance.cesiumObject as PrimitiveCluster\n primitiveCluster.clusterLabels = val\n instance.proxy['reload']()\n }\n )\n )\n\n unwatchFns.push(\n watch(\n () => props.clusterBillboards,\n val => {\n const primitiveCluster = instance.cesiumObject as PrimitiveCluster\n primitiveCluster.clusterPoints = val\n instance.proxy['reload']()\n }\n )\n )\n\n unwatchFns.push(\n watch(\n () => cloneDeep(props.billboards),\n (newVal, oldVal) => {\n if (!instance.mounted) {\n return\n }\n const primitiveCluster = instance.cesiumObject as PrimitiveCluster\n const billboardCollection = primitiveCluster._billboardCollection as Cesium.BillboardCollection\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 modifyBillboard = billboardCollection._billboards.find(v => v?.id === modify.oldOptions.id)\n modifyBillboard &&\n Object.keys(modify.newOptions).forEach(prop => {\n if (modify.oldOptions[prop] !== modify.newOptions[prop]) {\n modifyBillboard[prop] = primitivesState?.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 deleteBillboards: Array<Cesium.Billboard> = []\n for (let i = 0; i < deletes.length; i++) {\n const deleteBillboard = billboardCollection._billboards.find(v => v.id === deletes[i].id)\n deleteBillboard && deleteBillboards.push(deleteBillboard)\n }\n\n deleteBillboards.forEach(v => {\n billboardCollection.remove(v)\n })\n addBillboards(billboardCollection, addeds)\n\n setTimeout(() => {\n primitivesState.$services.viewer.scene.camera.changed.raiseEvent()\n })\n }\n },\n {\n deep: true\n }\n )\n )\n\n unwatchFns.push(\n watch(\n () => cloneDeep(props.labels),\n (newVal, oldVal) => {\n if (!instance.mounted) {\n return\n }\n const primitiveCluster = instance.cesiumObject as PrimitiveCluster\n const labelCollection = primitiveCluster._labelCollection as Cesium.LabelCollection\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 modifyLabel = labelCollection._labels.find(v => v.id === modify.oldOptions.id)\n modifyLabel &&\n Object.keys(modify.newOptions).forEach(prop => {\n if (modify.oldOptions[prop] !== modify.newOptions[prop]) {\n modifyLabel[prop] = primitivesState.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 deleteLabels: Array<Cesium.Label> = []\n for (let i = 0; i < deletes.length; i++) {\n const deleteLabel = labelCollection._labels.find(v => v.id === deletes[i].id)\n deleteLabel && deleteLabels.push(deleteLabel)\n }\n\n deleteLabels.forEach(v => {\n labelCollection.remove(v)\n })\n\n addLabels(labelCollection, addeds)\n\n setTimeout(() => {\n primitivesState.$services.viewer.scene.camera.changed.raiseEvent()\n })\n }\n },\n {\n deep: true\n }\n )\n )\n\n unwatchFns.push(\n watch(\n () => cloneDeep(props.points),\n (newVal, oldVal) => {\n if (!instance.mounted) {\n return\n }\n const primitiveCluster = instance.cesiumObject as PrimitiveCluster\n const pointCollection = primitiveCluster._pointCollection as Cesium.PointPrimitiveCollection\n if (newVal.length === oldVal.length) {\n // 视为修改操作\n // Treated as modified\n const modifies: Array<{\n newOptions: any\n oldOptions: any\n }> = []\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 modifyPoint = pointCollection._pointPrimitives.find(v => v && v.id === modify.oldOptions.id)\n modifyPoint &&\n Object.keys(modify.newOptions).forEach(prop => {\n if (modify.oldOptions[prop] !== modify.newOptions[prop]) {\n modifyPoint[prop] = primitivesState.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 deletePoints: Array<Cesium.PointPrimitive> = []\n for (let i = 0; i < deletes.length; i++) {\n const deletePoint = pointCollection._pointPrimitives.find(v => v.id === deletes[i].id)\n deletePoint && deletePoints.push(deletePoint)\n }\n\n deletePoints.forEach(v => {\n pointCollection.remove(v)\n })\n\n addPoints(pointCollection, addeds)\n\n setTimeout(() => {\n primitivesState.$services.viewer.scene.camera.changed.raiseEvent()\n })\n }\n },\n {\n deep: true\n }\n )\n )\n\n instance.createCesiumObject = async () => {\n const primitiveCluster = new PrimitiveCluster({\n show: props.show,\n enabled: props.enabled,\n pixelRange: props.pixelRange,\n minimumClusterSize: props.minimumClusterSize,\n clusterBillboards: props.clusterBillboards,\n clusterLabels: props.clusterLabels,\n clusterPoints: props.clusterPoints\n })\n\n const billboardCollection = new Cesium.BillboardCollection()\n addBillboards(billboardCollection, props.billboards)\n\n const labelCollection = new Cesium.LabelCollection()\n addLabels(labelCollection, props.labels)\n\n const pointCollection = new Cesium.PointPrimitiveCollection()\n addPoints(pointCollection, props.points)\n\n primitiveCluster._billboardCollection = billboardCollection\n primitiveCluster._labelCollection = labelCollection\n primitiveCluster._pointCollection = pointCollection\n\n primitiveCluster._initialize(primitivesState.$services.viewer.scene)\n\n setTimeout(() => {\n primitivesState.$services.viewer.scene.camera.changed.raiseEvent()\n })\n\n return primitiveCluster\n }\n\n const addPoints = (pointCollection: Cesium.PointPrimitiveCollection, points) => {\n for (let i = 0; i < points.length; i++) {\n const pointOptions = points[i] as Cesium.PointPrimitive\n pointOptions.id = Cesium.defined(pointOptions.id) ? pointOptions.id : Cesium.createGuid()\n const pointOptionsTransform = primitivesState.transformProps(pointOptions)\n const point = pointCollection.add(pointOptionsTransform)\n\n addCustomProperty(point, pointOptionsTransform)\n }\n }\n\n const addBillboards = (billboardCollection: Cesium.BillboardCollection, billboards) => {\n for (let i = 0; i < billboards.length; i++) {\n const billboardOptions = billboards[i] as Cesium.Billboard\n billboardOptions.id = Cesium.defined(billboardOptions.id) ? billboardOptions.id : Cesium.createGuid()\n const billboardOptionsTransform = primitivesState.transformProps(billboardOptions)\n const billboard = billboardCollection.add(billboardOptionsTransform)\n addCustomProperty(billboard, billboardOptionsTransform)\n }\n }\n\n const addLabels = (labelCollection: Cesium.LabelCollection, labels) => {\n for (let i = 0; i < labels.length; i++) {\n const labelOptions = labels[i] as Cesium.Label\n labelOptions.id = Cesium.defined(labelOptions.id) ? labelOptions.id : Cesium.createGuid()\n const labelOptionsTransform = primitivesState.transformProps(labelOptions)\n const label = labelCollection.add(labelOptionsTransform)\n addCustomProperty(label, labelOptionsTransform)\n }\n }\n\n // life cycle\n onUnmounted(() => {\n unwatchFns.forEach(item => item())\n unwatchFns.length = 0\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 VcPrimitiveClusterProps = {\n /**\n * Determines if this primitive will be shown.\n * Default value: true\n */\n show?: boolean\n /**\n * Specify whether clustering is enabled.\n */\n enabled?: boolean\n /**\n * Specify the pixel range to extend the screen space bounding box.\n * Default value: 80\n */\n pixelRange?: number\n /**\n * Specify the minimum number of screen space objects that can be clustered.\n * Default value: 2\n */\n minimumClusterSize?: number\n /**\n * Specify whether clustering billboard primitive is enabled.\n * Default value: true\n */\n clusterBillboards?: boolean\n /**\n * Specify whether clustering label primitive is enabled.\n * Default value: true\n */\n clusterLabels?: boolean\n /**\n * Specify whether clustering point primitive is enabled.\n * Default value: true\n */\n clusterPoints?: boolean\n /**\n * Specify an array of billboard collections. The structure of the array object is the same as the attribute of the [vc-billboard](https://zouyaoji.top/vue-cesium/#/en-US/component/primitives/vc-collection-billboard#vcbillboard-props) component.\n */\n billboards?: Array<VcBillboardProps>\n /**\n * Specify an array of label collections. The structure of the array object is the same as the attribute of the [vc-label](https://zouyaoji.top/vue-cesium/#/en-US/component/primitives/vc-collection-label#vclabel-props) component.\n */\n labels?: Array<VcLabelProps>\n /**\n * Specify an array of points collections. The structure of the array object is the same as the attribute of the [vc-point](https://zouyaoji.top/vue-cesium/#/en-US/component/primitives/vc-collection-point#vcpoint-props) component.\n */\n points?: Array<VcPointProps>\n /**\n * Specifies whether to respond to mouse pick events.\n * Default Value: true\n */\n enableMouseEvent?: boolean\n /**\n * Triggers before the component is loaded.\n */\n onBeforeLoad?: (instance: VcComponentInternalInstance) => void\n /**\n * Triggers when the component 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 component is destroyed.\n */\n onDestroyed?: (instance: VcComponentInternalInstance) => void\n /**\n * Triggers when the mouse is pressed on this primitive.\n */\n onMousedown?: (evt: VcPickEvent) => void\n /**\n * Triggers when the mouse bounces up on this primitive.\n */\n onMouseup?: (evt: VcPickEvent) => void\n /**\n * Triggers when the mouse clicks on this primitive.\n */\n onClick?: (evt: VcPickEvent) => void\n /**\n * Triggers when the mouse clicks outside this primitive.\n */\n onClickout?: (evt: VcPickEvent) => void\n /**\n * Triggers when the left mouse button double-clicks this primitive.\n */\n onDblclick?: (evt: VcPickEvent) => void\n /**\n * Triggers when the mouse moves on this primitive.\n */\n onMousemove?: (evt: VcPickEvent) => void\n /**\n * Triggers when the mouse moves over to this primitive.\n */\n onMouseover?: (evt: VcPickEvent) => void\n /**\n * Triggers when the mouse moves out of this primitive.\n */\n onMouseout?: (evt: VcPickEvent) => void\n}\n\nexport type VcPrimitiveClusterRef = VcComponentPublicInstance<VcPrimitiveClusterProps>\n"],"names":["PrimitiveCluster"],"mappings":"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"}