{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/overlays/echarts/index.ts"],"sourcesContent":["/*\n * @Author: zouyaoji@https://github.com/zouyaoji\n * @Date: 2021-10-11 15:52:55\n * @LastEditTime: 2023-04-15 14:05:13\n * @LastEditors: zouyaoji 370681295@qq.com\n * @Description:\n * @FilePath: \\vue-cesium\\packages\\components\\overlays\\echarts\\index.ts\n */\nimport type { CSSProperties, WatchStopHandle, PropType } from 'vue'\nimport { defineComponent, getCurrentInstance, ref, h, reactive, createCommentVNode, watch, onUnmounted, nextTick } from 'vue'\nimport type { VcComponentInternalInstance, VcComponentPublicInstance, VcReadyObject } from '@vue-cesium/utils/types'\nimport { useCommon } from '@vue-cesium/composables'\nimport { hSlot } from '@vue-cesium/utils/private/render'\nimport * as echarts from 'echarts'\nimport { EChartsType, EChartsOption } from 'echarts'\nimport { commonEmits } from '@vue-cesium/utils/emits'\n\nexport const echartsOverlayProps = {\n  options: {\n    type: Object as PropType<EChartsOption>,\n    required: true\n  },\n  autoHidden: {\n    type: Boolean,\n    default: true\n  },\n  customClass: String,\n  coordinateSystem: {\n    type: String,\n    default: 'cesium'\n  }\n}\nconst emits = {\n  ...commonEmits,\n  mouseenter: (evt: MouseEvent) => true,\n  mouseleave: (evt: MouseEvent) => true,\n  click: (evt: MouseEvent) => true\n}\nexport default defineComponent({\n  name: 'VcOverlayEcharts',\n  props: echartsOverlayProps,\n  emits: ['beforeLoad', 'ready', 'destroyed', 'mouseenter', 'mouseleave', 'click'],\n  setup(props, ctx) {\n    // state\n    const instance = getCurrentInstance() as VcComponentInternalInstance\n    instance.cesiumClass = 'VcOverlayEcharts'\n    instance.cesiumEvents = []\n    const commonState = useCommon(props, ctx, instance)\n    if (commonState === void 0) {\n      return\n    }\n    const { $services } = commonState\n    const canRender = ref(false)\n    const rootRef = ref<HTMLElement>()\n    const rootStyle = reactive<CSSProperties>({\n      left: '0px',\n      top: '0px',\n      pointerEvents: 'none',\n      position: 'absolute'\n    })\n    let chart: EChartsType\n    const visible = ref(true)\n    // watcch\n    let unwatchFns: Array<WatchStopHandle> = []\n    unwatchFns.push(\n      watch(\n        () => props.options,\n        val => {\n          commonState.reload()\n        }\n      )\n    )\n\n    // methods\n    instance.createCesiumObject = async () => {\n      return rootRef.value\n    }\n    instance.mount = async () => {\n      const { viewer } = $services\n      canRender.value = true\n\n      nextTick(() => {\n        echarts.registerCoordinateSystem(props.coordinateSystem, getE3CoordinateSystem(viewer))\n        if (rootRef.value) {\n          chart = echarts.init(rootRef.value)\n\n          setCharts()\n          viewer.scene.postRender.addEventListener(onPreRender)\n        }\n      })\n\n      return true\n    }\n\n    instance.unmount = async () => {\n      const { viewer } = $services\n      viewer.scene.postRender.removeEventListener(onPreRender)\n      canRender.value = false\n      return true\n    }\n\n    const onPreRender = () => {\n      if (visible.value) {\n        const { viewer } = $services\n        chart.resize({\n          width: viewer.canvas.width,\n          height: viewer.canvas.height\n        })\n      }\n    }\n\n    const setCharts = () => {\n      if (visible.value && props.options) {\n        chart.setOption(props.options)\n      }\n    }\n    const getE3CoordinateSystem = (viewer: Cesium.Viewer) => {\n      const CoordSystem = function CoordSystem(this: any, viewer) {\n        this.viewer = viewer\n        this._mapOffset = [0, 0]\n      }\n\n      CoordSystem.create = function (ecModel) {\n        ecModel.eachSeries(function (seriesModel) {\n          if (seriesModel.get('coordinateSystem') === props.coordinateSystem) {\n            seriesModel.coordinateSystem = new CoordSystem(viewer)\n          }\n        })\n        return []\n      }\n\n      CoordSystem.getDimensionsInfo = function () {\n        return ['x', 'y']\n      }\n\n      CoordSystem.dimensions = ['x', 'y']\n      CoordSystem.prototype.dimensions = ['x', 'y']\n      CoordSystem.prototype.setMapOffset = function setMapOffset(mapOffset) {\n        this._mapOffset = mapOffset\n      }\n      CoordSystem.prototype.dataToPoint = function (data) {\n        const result = []\n        const cartesian3 = Cesium.Cartesian3.fromDegrees(data[0], data[1])\n        if (!cartesian3) {\n          return result\n        }\n\n        if (props.autoHidden) {\n          const up = Cesium.Ellipsoid.WGS84.geodeticSurfaceNormal(cartesian3, new Cesium.Cartesian3())\n          const cd = this.viewer.camera.direction\n          if (Cesium.Cartesian3.dot(up, cd) >= 0) {\n            return result\n          }\n        }\n\n        const coords = this.viewer.scene.cartesianToCanvasCoordinates(cartesian3)\n        if (!coords) {\n          return result\n        }\n        return [coords.x - this._mapOffset[0], coords.y - this._mapOffset[1]]\n      }\n      CoordSystem.prototype.pointToData = function (pt) {\n        const mapOffset = this._mapOffset\n        const ellipsoid = viewer.scene.globe.ellipsoid\n        const car3 = new Cesium.Cartesian3(pt[1] + mapOffset[1], pt[2] + mapOffset[2], 0)\n        const cart = ellipsoid.cartesianToCartographic(car3)\n        return cart ? [cart.longitude, cart.latitude] : [0, 0]\n      }\n      CoordSystem.prototype.getviewerRect = function () {\n        const canvas = this.viewer.canvas\n        return new echarts.graphic.BoundingRect(0, 0, canvas.width, canvas.height)\n      }\n      CoordSystem.prototype.getRoamTransform = function () {\n        return echarts.matrix.create()\n      }\n\n      return CoordSystem\n    }\n\n    const renderContent = () => {\n      if (canRender.value) {\n        return h(\n          'div',\n          {\n            ref: rootRef,\n            class: `vc-echart-container${props.customClass ? ' ' + props.customClass : ''}`,\n            style: rootStyle,\n            onMouseenter: onMouseenter,\n            onMouseleave: onMouseleave,\n            onClick: onClick\n          },\n          hSlot(ctx.slots.default)\n        )\n      } else {\n        return createCommentVNode('v-if')\n      }\n    }\n\n    const onClick = evt => {\n      ctx.emit('click', evt)\n    }\n\n    const onMouseenter = evt => {\n      ctx.emit('mouseenter', evt)\n    }\n\n    const onMouseleave = evt => {\n      ctx.emit('mouseleave', evt)\n    }\n\n    // life cycle\n    onUnmounted(() => {\n      unwatchFns.forEach(item => item())\n      unwatchFns = []\n    })\n\n    return () => renderContent()\n  }\n})\n\nexport type VcOverlayEchartsEmits = typeof emits\nexport interface VcOverlayEchartsProps {\n  /**\n   * Specify the configuration items of the Echarts.\n   */\n  options: EChartsOption\n  /**\n   * Specify whether Echart elements are automatically hidden when they are on the back of the viewer.\n   * Default value: true\n   */\n  autoHidden?: boolean\n  /**\n   * Specify div class of echart.\n   */\n  customClass?: string\n  /**\n   * Specify the name of the custom coordinate system when Echart is initialized.\n   * Default value: cesium\n   */\n  coordinateSystem?: string\n  /**\n   * Triggers before the VcOverlayEcharts is loaded.\n   */\n  onBeforeLoad?: (instance: VcComponentInternalInstance) => void\n  /**\n   * Triggers when the VcOverlayEcharts 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 VcOverlayEcharts is destroyed.\n   */\n  onDestroyed?: (instance: VcComponentInternalInstance) => void\n}\n\nexport type VcOverlayEchartsRef = VcComponentPublicInstance<VcOverlayEchartsProps>\n"],"names":["CoordSystem","viewer"],"mappings":"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"}