UNPKG

vue-cesium

Version:
1 lines 12 kB
{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/primitive-collections/label-collection/index.ts"],"sourcesContent":["import type { ExtractPropTypes, PropType, VNode, WatchStopHandle } from 'vue'\nimport { createCommentVNode, defineComponent, getCurrentInstance, h, onUnmounted, watch } from 'vue'\nimport type { VcComponentInternalInstance, VcComponentPublicInstance, VcPickEvent, VcReadyObject } from '@vue-cesium/utils/types'\nimport { usePrimitiveCollections } from '@vue-cesium/composables'\nimport { cloneDeep, differenceBy } from 'lodash-unified'\nimport { modelMatrix, debugShowBoundingVolume, scene, blendOption, show, enableMouseEvent } from '@vue-cesium/utils/cesium-props'\nimport { addCustomProperty, kebabCase } from '@vue-cesium/utils/util'\nimport { hSlot } from '@vue-cesium/utils/private/render'\nimport { primitiveCollectionEmits } from '@vue-cesium/utils/emits'\nimport { VcLabelProps } from '../label'\n\nexport const labelCollectionProps = {\n ...modelMatrix,\n ...debugShowBoundingVolume,\n ...scene,\n ...blendOption,\n ...show,\n ...enableMouseEvent,\n labels: {\n type: Array as PropType<Array<VcLabelProps>>,\n default: () => []\n }\n}\nexport default defineComponent({\n name: 'VcCollectionLabel',\n props: labelCollectionProps,\n emits: primitiveCollectionEmits,\n setup(props, ctx) {\n // state\n const instance = getCurrentInstance() as VcComponentInternalInstance\n instance.cesiumClass = 'LabelCollection'\n const primitiveCollectionsState = usePrimitiveCollections(props, ctx, instance)\n\n if (primitiveCollectionsState === void 0) {\n return\n }\n\n // watcher\n instance.alreadyListening.push('labels')\n let unwatchFns: Array<WatchStopHandle> = []\n unwatchFns.push(\n watch(\n () => cloneDeep(props.labels),\n (newVal, oldVal) => {\n if (!instance.mounted) {\n return\n }\n const labelCollection = instance.cesiumObject 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] = 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 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 },\n {\n deep: true\n }\n )\n )\n // methods\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 = primitiveCollectionsState.transformProps(labelOptions)\n const label = labelCollection.add(labelOptionsTransform)\n addCustomProperty(label, labelOptionsTransform)\n }\n }\n\n instance.createCesiumObject = async () => {\n const options = primitiveCollectionsState.transformProps(props)\n const labelCollection = new Cesium.LabelCollection(options)\n addLabels(labelCollection, props.labels)\n return labelCollection\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 VcCollectionLabelProps = {\n /**\n * Must be passed in for labels that use the height reference property or will be depth tested against the globe.\n */\n scene?: Cesium.Scene\n /**\n * The label blending option. The default is used for rendering both opaque and translucent labels. However, if either all of the labels are completely opaque or all are completely translucent, setting the technique to BlendOption.OPAQUE or BlendOption.TRANSLUCENT can improve performance by up to 2x.\n */\n blendOption?: number | Cesium.BlendOption\n /**\n * Determines if the labels in the collection will be shown.\n * Default Value: true\n */\n show?: boolean\n /**\n * The 4x4 transformation matrix that transforms each label from model to world coordinates.\n */\n modelMatrix?: Cesium.Matrix4\n /**\n * For debugging only. Determines if this primitive's commands' bounding spheres are shown.\n * Default Value: false\n */\n debugShowBoundingVolume?: boolean\n /**\n * Specifies whether to respond to mouse pick events.\n * Default Value: true\n */\n enableMouseEvent?: boolean\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 * Triggers before the VcCollectionLabel is loaded.\n */\n onBeforeLoad?: (instance: VcComponentInternalInstance) => void\n /**\n * Triggers when the VcCollectionLabel 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 VcCollectionLabel is destroyed.\n */\n onDestroyed?: (instance: VcComponentInternalInstance) => void\n /**\n * Triggers when the mouse is pressed on this collection.\n */\n onMousedown?: (evt: VcPickEvent) => void\n /**\n * Triggers when the mouse bounces up on this collection.\n */\n onMouseup?: (evt: VcPickEvent) => void\n /**\n * Triggers when the mouse clicks on this collection.\n */\n onClick?: (evt: VcPickEvent) => void\n /**\n * Triggers when the mouse clicks outside this collection.\n */\n onClickout?: (evt: VcPickEvent) => void\n /**\n * Triggers when the left mouse button double-clicks this collection.\n */\n onDblclick?: (evt: VcPickEvent) => void\n /**\n * Triggers when the mouse moves on this collection.\n */\n onMousemove?: (evt: VcPickEvent) => void\n /**\n * Triggers when the mouse moves over to this collection.\n */\n onMouseover?: (evt: VcPickEvent) => void\n /**\n * Triggers when the mouse moves out of this collection.\n */\n onMouseout?: (evt: VcPickEvent) => void\n}\n\nexport type VcCollectionLabelRef = VcComponentPublicInstance<VcCollectionLabelProps>\n\nexport interface VcCollectionLabelSlots {\n /**\n * Slot for vc-label.\n */\n default: () => VNode[]\n}\n"],"names":[],"mappings":"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"}