{"version":3,"file":"use-drawing-point.mjs","sources":["../../../../../packages/composables/use-drawing/use-drawing-point.ts"],"sourcesContent":["/*\n * @Author: zouyaoji@https://github.com/zouyaoji\n * @Date: 2021-10-19 11:34:26\n * @LastEditTime: 2022-07-14 22:02:46\n * @LastEditors: zouyaoji\n * @Description:\n * @FilePath: \\vue-cesium@next\\packages\\composables\\use-drawing\\use-drawing-point.ts\n */\n\nimport { VcOverlayHtml } from 'casc-cesium-components/overlays'\nimport { VcCollectionBillboard, VcCollectionLabel, VcCollectionPoint, VcCollectionPrimitive } from 'casc-cesium-components/primitive-collections'\nimport { VcBtn, VcTooltip } from 'casc-cesium-components/ui'\nimport { useLocale } from '../use-locale'\nimport { DrawStatus, MeasureUnits } from 'casc-cesium-shared'\nimport { makeCartesian3 } from 'casc-cesium-utils/cesium-helpers'\nimport { VcPointDrawing } from 'casc-cesium-utils/drawing-types'\nimport { VcComponentInternalInstance, VcDrawingProvider } from 'casc-cesium-utils/types'\nimport { getCurrentInstance, nextTick, onUnmounted, ref, VNode, watch, WatchStopHandle, h } from 'vue'\nimport useCommon from '../use-common'\nimport useDrawingAction from './use-drawing-action'\nimport { VcAnalysesRef, VcDrawingsRef, VcMeasurementsRef } from 'casc-cesium-components'\nimport { platform } from 'casc-cesium-utils/platform'\n\nexport default function (props, ctx, cmpName: string) {\n  const instance = getCurrentInstance() as VcComponentInternalInstance\n\n  const commonState = useCommon(props, ctx, instance)\n  if (commonState === void 0) {\n    return\n  }\n\n  const { t } = useLocale()\n  const $services = commonState.$services as VcDrawingProvider\n  const { emit } = ctx\n\n  const {\n    drawingType,\n    drawTip,\n    drawTipOpts,\n    drawStatus,\n    canShowDrawTip,\n    drawTipPosition,\n    showEditor,\n    editorPosition,\n    mouseoverPoint,\n    editingPoint,\n    primitiveCollectionRef,\n    editorType,\n    onMouseoverPoints,\n    onMouseoutPoints,\n    onMouseenterEditor,\n    onMouseleaveEditor,\n    onPrimitiveCollectionReady,\n    onVcCollectionPointReady,\n    onVcCollectionLabelReady\n  } = useDrawingAction(props, ctx, instance, cmpName, $services)\n\n  const renderDatas = ref<Array<VcPointDrawing>>([])\n  let restorePosition\n  let unwatchFns: Array<WatchStopHandle> = []\n\n  if (cmpName === 'VcDrawingPin' && props.billboardOpts.image === '') {\n    props.billboardOpts.image = Cesium.buildModuleUrl('Assets/Textures/pin.svg')\n  }\n\n  // watch\n  unwatchFns.push(\n    watch(\n      () => props.editable,\n      val => {\n        const { drawingFabInstance, selectedDrawingActionInstance } = $services\n        if (val && selectedDrawingActionInstance?.name === drawingType) {\n          const drawingFabInstanceVm = drawingFabInstance?.proxy as VcDrawingsRef | VcMeasurementsRef | VcAnalysesRef\n          drawingFabInstanceVm.toggleAction(selectedDrawingActionInstance)\n        }\n      }\n    )\n  )\n\n  const convert2Degrees = (position, point, scene) => {\n    const cart = Cesium.Cartographic.fromCartesian(position, scene.globe.ellipsoid)\n    const positionDegrees = [Cesium.Math.toDegrees(cart.longitude), Cesium.Math.toDegrees(cart.latitude), cart.height] as [number, number, number]\n    point.positionDegrees = positionDegrees\n  }\n\n  const startNew = () => {\n    const { Cartesian3 } = Cesium\n    const point: VcPointDrawing = {\n      drawStatus: DrawStatus.Drawing,\n      show: false,\n      position: new Cartesian3(),\n      lng: 0,\n      lat: 0,\n      height: 0,\n      slope: 0,\n      pointOpts: {},\n      labelOpts: {},\n      billboardOpts: {}\n    }\n\n    renderDatas.value.push(point)\n    drawStatus.value = DrawStatus.Drawing\n    canShowDrawTip.value = true\n    drawTip.value = drawTipOpts.value.drawingTipStart\n  }\n\n  const stop = (removeLatest = true) => {\n    if (removeLatest && drawStatus.value === DrawStatus.Drawing) {\n      renderDatas.value.pop()\n    }\n\n    const index = editingPoint.value ? editingPoint.value._vcPolylineIndx : renderDatas.value.length - 1\n    const point: VcPointDrawing = renderDatas.value[index]\n    if (point) {\n      point.drawStatus = DrawStatus.AfterDraw\n    }\n\n    drawStatus.value = DrawStatus.AfterDraw\n    canShowDrawTip.value = false\n    drawTipPosition.value = [0, 0, 0]\n  }\n\n  const handleMouseClick = (movement, options?) => {\n    const { viewer, drawingFabInstance, getWorldPosition, selectedDrawingActionInstance } = $services\n    const drawingFabInstanceVm = drawingFabInstance?.proxy as VcDrawingsRef | VcMeasurementsRef | VcAnalysesRef\n    if (options.button === 2 && options.ctrl) {\n      const drawingsOption = drawingFabInstanceVm?.getDrawingActionInstance(drawingType)\n      drawingFabInstanceVm?.toggleAction(drawingsOption)\n      nextTick(() => {\n        emit(\n          'drawEvt',\n          {\n            name: drawingType,\n            finished: true,\n            windowPoistion: movement,\n            type: 'cancel'\n          },\n          viewer\n        )\n      })\n      return\n    }\n\n    // if (drawStatus.value === DrawStatus.AfterDraw) {\n    //   startNew()\n    // }\n\n    const index = editingPoint.value ? editingPoint.value._vcPolylineIndx : renderDatas.value.length - 1\n    const point: VcPointDrawing = renderDatas.value[index]\n\n    if (options.button === 2 && editingPoint.value) {\n      drawingFabInstanceVm.editingActionName = undefined\n      renderDatas.value[index] = restorePosition\n      drawStatus.value = DrawStatus.AfterDraw\n      renderDatas.value[index].drawStatus = DrawStatus.AfterDraw\n      editingPoint.value = undefined\n      drawTip.value = drawTipOpts.value.drawingTipStart\n      nextTick(() => {\n        emit(\n          'drawEvt',\n          {\n            name: drawingType,\n            index,\n            renderDatas,\n            finished: true,\n            windowPoistion: movement,\n            type: 'cancel'\n          },\n          viewer\n        )\n      })\n      return\n    }\n\n    if (options.button !== 0) {\n      return\n    }\n\n    const { defined } = Cesium\n    let type = 'new'\n    if (drawStatus.value === DrawStatus.BeforeDraw) {\n      const scene = viewer.scene\n      const position = getWorldPosition(scene, movement, {} as any)\n\n      if (!defined(position)) {\n        return\n      }\n\n      point.position = position\n      point.show = true\n      point.drawStatus = DrawStatus.AfterDraw\n      drawStatus.value = DrawStatus.AfterDraw\n      drawTip.value = drawTipOpts.value.drawingTipStart\n\n      nextTick(() => {\n        emit(\n          'drawEvt',\n          {\n            index,\n            renderDatas,\n            name: drawingType,\n            finished: true,\n            position,\n            windowPoistion: movement,\n            type\n          },\n          viewer\n        )\n      })\n    } else {\n      drawStatus.value = DrawStatus.AfterDraw\n      point.drawStatus = DrawStatus.AfterDraw\n\n      const scene = viewer.scene\n\n      if (platform().hasTouch === true) {\n        const position = getWorldPosition(scene, movement, {} as any)\n        convert2Degrees(position, point, scene)\n        if (defined(position)) {\n          point.position = position\n          point.show = true\n        }\n      }\n\n      if (editingPoint.value) {\n        editingPoint.value = undefined\n        drawingFabInstanceVm.editingActionName = undefined\n        canShowDrawTip.value = false\n        type = editorType.value\n      } else {\n        if (props.mode === 1) {\n          nextTick(() => {\n            drawingFabInstanceVm.toggleAction(selectedDrawingActionInstance)\n          })\n        }\n      }\n\n      if (selectedDrawingActionInstance) {\n        drawTip.value = drawTipOpts.value.drawingTipStart\n        canShowDrawTip.value = true\n      }\n\n      nextTick(() => {\n        emit(\n          'drawEvt',\n          {\n            index,\n            renderDatas,\n            name: drawingType,\n            finished: true,\n            position: renderDatas.value[index].position,\n            positionDegrees: renderDatas.value[index].positionDegrees,\n            windowPoistion: movement,\n            type\n          },\n          viewer\n        )\n      })\n    }\n  }\n\n  const handleMouseMove = movement => {\n    const { viewer, getWorldPosition } = $services\n    const scene = viewer.scene\n    const { defined, SceneMode } = Cesium\n\n    if (scene.mode !== SceneMode.MORPHING) {\n      const position = getWorldPosition(scene, movement, {} as any)\n\n      if (!defined(position)) {\n        return\n      }\n\n      drawTipPosition.value = position\n\n      if (drawStatus.value === DrawStatus.AfterDraw) {\n        startNew()\n      }\n\n      if (drawStatus.value !== DrawStatus.Drawing) {\n        return\n      }\n\n      const index = editingPoint.value ? editingPoint.value._vcPolylineIndx : renderDatas.value.length - 1\n      const point: VcPointDrawing = renderDatas.value[index]\n      point.position = position\n      convert2Degrees(position, point, scene)\n      getMeasurementResult(point, movement)\n      const type = editingPoint.value ? editorType.value : 'new'\n      nextTick(() => {\n        emit(\n          'drawEvt',\n          {\n            index,\n            renderDatas,\n            name: drawingType,\n            finished: false,\n            position,\n            positionDegrees: point.positionDegrees,\n            windowPoistion: movement,\n            type\n          },\n          viewer\n        )\n      })\n    }\n  }\n\n  const getMeasurementResult = (point: VcPointDrawing, movement?) => {\n    const { viewer } = $services\n    const scene = viewer.scene\n    const { defined, defaultValue, Math: CesiumMath, SceneMode } = Cesium\n    const ellipsoid = scene.frameState.mapProjection.ellipsoid as Cesium.Ellipsoid\n    const positionCartographic = ellipsoid.cartesianToCartographic(point.position, {} as any)\n    const globe = scene.globe\n    let height = defined(globe) ? defaultValue(globe.getHeight(positionCartographic), 0) : 0\n    height = props.heightReference === 0 ? positionCartographic.height : positionCartographic.height - height\n    CesiumMath.equalsEpsilon(height, 0, CesiumMath.EPSILON3) && (height = 0)\n    let slope = 0\n\n    if (scene.mode !== SceneMode.SCENE2D) {\n      if (!movement) {\n        movement = scene.cartesianToCanvasCoordinates(point.position, {} as any)\n      }\n      slope = getSlope(scene, movement)\n    }\n\n    point.show = true\n    point.lng = positionCartographic.longitude\n    point.lat = positionCartographic.latitude\n    point.height = height\n    point.slope = slope\n  }\n\n  const getSlope = (scene: Cesium.Scene, movement: Cesium.Cartesian2) => {\n    const { getWorldPosition } = $services\n    const { defined, Cartesian2, Cartesian3, Math: CesiumMath } = Cesium\n    const position = getWorldPosition(scene, movement, {} as any)\n    if (defined(position)) {\n      const cameraPosition = scene.camera.position\n      const distance = Cartesian3.distance(position, cameraPosition)\n      const scratchCartesian3s = [new Cartesian3(), new Cartesian3(), new Cartesian3(), new Cartesian3(), new Cartesian3()]\n      const normalScratch = new Cartesian3()\n      const surfaceNormalScratch = new Cartesian3()\n      if (!(1e4 < distance)) {\n        const p0 = scratchCartesian3s[0]\n        const p1 = scratchCartesian3s[1]\n        const p2 = scratchCartesian3s[2]\n        const p3 = scratchCartesian3s[3]\n        let surfaceNormal = scene.frameState.mapProjection.ellipsoid.geodeticSurfaceNormal(position, normalScratch)\n        surfaceNormal = Cartesian3.negate(surfaceNormal, surfaceNormal)\n        const u = Cartesian2.clone(movement, scratchCartesian3s[0])\n        u.x -= 2\n        u.y -= 2\n        const d = Cartesian2.clone(movement, scratchCartesian3s[1])\n        d.x -= 2\n        d.y += 2\n        const h = Cartesian2.clone(movement, scratchCartesian3s[2])\n        h.x += 2\n        h.y += 2\n        const p = Cartesian2.clone(movement, scratchCartesian3s[3])\n        p.x += 2\n        p.y -= 2\n\n        const T = getWorldPosition(scene, u, p0)\n        const x = getWorldPosition(scene, d, p1)\n        const b = getWorldPosition(scene, h, p2)\n        const E = getWorldPosition(scene, p, p3)\n        let m, f, g, _, y, C, v, S\n        if (defined(T)) {\n          m = Cartesian3.subtract(T, position, p0)\n          f = Cartesian3.magnitude(m) / distance <= 0.05 ? Cartesian3.normalize(m, p0) : undefined\n        }\n        if (defined(x)) {\n          g = Cartesian3.subtract(x, position, p1)\n          _ = Cartesian3.magnitude(g) / distance <= 0.05 ? Cartesian3.normalize(g, p1) : undefined\n        }\n        if (defined(b)) {\n          y = Cartesian3.subtract(b, position, p2)\n          C = Cartesian3.magnitude(y) / distance <= 0.05 ? Cartesian3.normalize(y, p2) : undefined\n        }\n        if (defined(E)) {\n          v = Cartesian3.subtract(E, position, p3)\n          S = Cartesian3.magnitude(v) / distance <= 0.05 ? Cartesian3.normalize(v, p3) : undefined\n        }\n\n        let P = Cartesian3.clone(Cartesian3.ZERO, surfaceNormalScratch)\n        let A = scratchCartesian3s[4]\n\n        if (defined(f) && defined(_)) {\n          A = Cartesian3.normalize(Cartesian3.cross(f, _, A), A)\n          P = Cartesian3.add(P, A, P)\n        }\n\n        if (defined(_) && defined(C)) {\n          A = Cartesian3.normalize(Cartesian3.cross(_, C, A), A)\n          P = Cartesian3.add(P, A, P)\n        }\n\n        if (defined(C) && defined(S)) {\n          A = Cartesian3.normalize(Cartesian3.cross(C, S, A), A)\n          P = Cartesian3.add(P, A, P)\n        }\n\n        if (defined(S) && defined(f)) {\n          A = Cartesian3.normalize(Cartesian3.cross(S, f, A), A)\n          P = Cartesian3.add(P, A, P)\n        }\n        if (!P.equals(Cartesian3.ZERO)) {\n          P = Cartesian3.normalize(P, P)\n          return CesiumMath.asinClamped(Math.abs(Math.sin(Cartesian3.angleBetween(P, surfaceNormal))))\n        }\n      }\n    }\n    return 0\n  }\n\n  const onEditorClick = e => {\n    editorPosition.value = [0, 0, 0]\n    showEditor.value = false\n\n    if (!props.editable) {\n      return\n    }\n    editorType.value = e\n    const { viewer, drawingFabInstance } = $services\n    const drawingFabInstanceVm = drawingFabInstance?.proxy as VcDrawingsRef | VcMeasurementsRef | VcAnalysesRef\n    if (e === 'move') {\n      drawTip.value = drawTipOpts.value.drawingTipEditing\n      drawStatus.value = DrawStatus.Drawing\n      editingPoint.value = mouseoverPoint.value\n      canShowDrawTip.value = true\n      restorePosition = Object.assign({}, renderDatas.value[editingPoint.value._vcPolylineIndx])\n      drawingFabInstanceVm.editingActionName = drawingType\n    } else if (e === 'remove') {\n      const index = mouseoverPoint.value._vcPolylineIndx\n      renderDatas.value.splice(index, 1)\n    } else {\n      const index = mouseoverPoint.value._vcPolylineIndx\n      const polyline = renderDatas.value[index]\n      props.editorOpts?.[e]?.callback?.(index, polyline)\n    }\n\n    emit(\n      'editorEvt',\n      {\n        type: e,\n        name: drawingType,\n        renderDatas,\n        index: mouseoverPoint.value._vcPolylineIndx\n      },\n      viewer\n    )\n  }\n\n  const clear = () => {\n    renderDatas.value = []\n    stop()\n  }\n\n  const getLabelText = (point: VcPointDrawing) => {\n    const { viewer } = $services\n    const scene = viewer.scene\n    const positionCartographic = (scene.frameState.mapProjection.ellipsoid as Cesium.Ellipsoid).cartesianToCartographic(point.position, {} as any)\n    if (!Cesium.defined(positionCartographic)) {\n      return ''\n    }\n\n    return (\n      `${t('vc.measurement.point.lng')}${MeasureUnits.angleToString(\n        positionCartographic.longitude,\n        props.measureUnits?.angleUnits,\n        props.locale,\n        props.decimals?.lng\n      )}\\n` +\n      `${t('vc.measurement.point.lat')}${MeasureUnits.angleToString(\n        positionCartographic.latitude,\n        props.measureUnits?.angleUnits,\n        props.locale,\n        props.decimals?.lat\n      )}\\n` +\n      `${t('vc.measurement.point.height')}${MeasureUnits.distanceToString(\n        point.height,\n        props.measureUnits?.distanceUnits,\n        props.locale,\n        props.decimals?.height\n      )}\\n` +\n      `${t('vc.measurement.point.slope')}${MeasureUnits.angleToString(\n        point.slope,\n        props.measureUnits?.slopeUnits,\n        props.locale,\n        props.decimals?.slope\n      )}`\n    )\n  }\n\n  if (props.preRenderDatas && props.preRenderDatas.length) {\n    const { viewer } = $services\n    props.preRenderDatas.forEach(preRenderData => {\n      const pointDrawing: VcPointDrawing = {\n        drawStatus: DrawStatus.AfterDraw,\n        show: true,\n        position: makeCartesian3(preRenderData) as Cesium.Cartesian3,\n        lng: 0,\n        lat: 0,\n        height: 0,\n        slope: 0,\n\n        pointOpts: {},\n        labelOpts: {},\n        billboardOpts: {}\n      }\n      const cart = Cesium.Cartographic.fromCartesian(pointDrawing.position, viewer.scene.globe.ellipsoid)\n      pointDrawing.positionDegrees = [Cesium.Math.toDegrees(cart.longitude), Cesium.Math.toDegrees(cart.latitude), cart.height] as [\n        number,\n        number,\n        number\n      ]\n\n      getMeasurementResult(pointDrawing)\n\n      renderDatas.value.push(pointDrawing)\n    })\n  }\n\n  // life cycle\n  onUnmounted(() => {\n    unwatchFns.forEach(item => item())\n    unwatchFns = []\n  })\n\n  // expose public methods\n  const publicMethods = { renderDatas, startNew, stop, clear, handleMouseClick, handleMouseMove }\n  Object.assign(instance.proxy, publicMethods)\n\n  return () => {\n    const { createGuid } = Cesium\n    const children: Array<VNode> = []\n    const pointsRender: Array<any> = []\n    const labelsRender: Array<any> = []\n    const billboardsRender: Array<any> = []\n    renderDatas.value.forEach((point, index) => {\n      const pointOpts = Object.assign({}, props.pointOpts, point.pointOpts)\n      pointsRender.push({\n        position: point.position,\n        id: createGuid(),\n        _vcPolylineIndx: index, // for editor\n        ...pointOpts,\n        show: (point.show && props.pointOpts?.show) || props.editable || point.drawStatus === DrawStatus.Drawing\n      })\n\n      const labelsOpts = Object.assign({}, props.labelOpts, point.labelOpts)\n\n      if (props.showLabel) {\n        if (cmpName === 'VcDrawingPin') {\n          const billboardOpts = Object.assign({}, props.billboardOpts, point.billboardOpts)\n          billboardsRender.push({\n            position: point.position,\n            id: createGuid(),\n            _vcPolylineIndx: index, // for editor\n            ...billboardOpts\n          })\n\n          labelsOpts.text &&\n            labelsRender.push({\n              position: point.position,\n              id: createGuid(),\n              ...labelsOpts\n            })\n        } else {\n          labelsRender.push({\n            position: point.position,\n            id: createGuid(),\n            text: getLabelText(point),\n            ...labelsOpts\n          })\n        }\n      }\n    })\n    children.push(\n      h(VcCollectionPoint, {\n        enableMouseEvent: props.enableMouseEvent,\n        points: pointsRender,\n        onMouseover: onMouseoverPoints,\n        onMouseout: onMouseoutPoints,\n        onReady: onVcCollectionPointReady\n      })\n    )\n    // ;(cmpName.includes('VcMeasurement') || cmpName === 'VcDrawingPin') &&\n    children.push(\n      h(VcCollectionLabel, {\n        enableMouseEvent: props.enableMouseEvent,\n        labels: labelsRender,\n        onReady: onVcCollectionLabelReady\n      })\n    )\n\n    cmpName === 'VcDrawingPin' &&\n      children.push(\n        h(VcCollectionBillboard, {\n          enableMouseEvent: props.enableMouseEvent,\n          billboards: billboardsRender\n        })\n      )\n\n    if (props.drawtip?.show && canShowDrawTip.value) {\n      const { viewer } = $services\n      children.push(\n        h(\n          VcOverlayHtml,\n          {\n            position: drawTipPosition.value,\n            pixelOffset: props.drawtip?.pixelOffset,\n            teleport: {\n              to: viewer.container\n            }\n          },\n          () =>\n            h(\n              'div',\n              {\n                class: 'vc-drawtip vc-tooltip--style'\n              },\n              drawTip.value\n            )\n        )\n      )\n    }\n\n    if (showEditor.value) {\n      const buttons: Array<VNode> = []\n      if (mouseoverPoint.value) {\n        const editorOpts = props.editorOpts\n        for (const key in editorOpts) {\n          if (!Array.isArray(editorOpts[key]) && typeof editorOpts[key] !== 'number') {\n            const opts = {\n              ...editorOpts[key]\n            }\n            delete opts.color\n\n            buttons.push(\n              h(\n                VcBtn,\n                {\n                  style: { color: editorOpts[key].color, background: editorOpts[key].background },\n                  ...opts,\n                  onclick: onEditorClick.bind(undefined, key)\n                },\n                () =>\n                  h(\n                    VcTooltip,\n                    {\n                      ...editorOpts[key].tooltip\n                    },\n                    () => h('strong', null, editorOpts[key].tooltip?.tip || t(`vc.drawing.editor.${key}`))\n                  )\n              )\n            )\n          }\n        }\n      }\n\n      const { viewer } = $services\n      children.push(\n        h(\n          VcOverlayHtml,\n          {\n            position: editorPosition.value,\n            pixelOffset: props.editorOpts?.pixelOffset,\n            teleport: {\n              to: viewer.container\n            },\n            onMouseenter: onMouseenterEditor,\n            onMouseleave: onMouseleaveEditor\n          },\n          () =>\n            h(\n              'div',\n              {\n                class: 'vc-editor'\n              },\n              buttons\n            )\n        )\n      )\n    }\n    return h(\n      VcCollectionPrimitive,\n      {\n        ref: primitiveCollectionRef,\n        show: props.show,\n        onReady: onPrimitiveCollectionReady\n      },\n      () => children\n    )\n  }\n}\n"],"names":[],"mappings":"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"}