{"version":3,"file":"use-zoom-control.mjs","sources":["../../../../../../packages/components/controls/navigation-sm/use-zoom-control.ts"],"sourcesContent":["import type { AnyFunction, VcComponentInternalInstance, VcViewerProvider } from 'casc-cesium-utils/types'\nimport { $, getInstanceListener } from 'casc-cesium-utils/private/vm'\nimport { ref } from 'vue'\nimport type { VcTooltipRef } from 'casc-cesium-components/ui'\nimport { isObject } from 'casc-cesium-utils/util'\n\nexport default function (props, { emit }, vcInstance: VcComponentInternalInstance, $services: VcViewerProvider) {\n  // state\n  const zoombarTop = ref(65)\n  const zoomInTooltipRef = ref<VcTooltipRef>(null)\n  const zoomOutTooltipRef = ref<VcTooltipRef>(null)\n  const zoomBarTooltipRef = ref<VcTooltipRef>(null)\n  let screenSpaceEventHandler: Cesium.ScreenSpaceEventHandler\n\n  let zoominTickFunction: AnyFunction<void>\n  let zoominMouseUpFunction: AnyFunction<void>\n  let isZoomin = false\n  let zoominLastTimestamp = 0\n  let unsubscribeFromClockTickZoomin: AnyFunction<void>\n\n  let zoomoutTickFunction: AnyFunction<void>\n  let zoomoutMouseUpFunction: AnyFunction<void>\n  let iszoomout = false\n  let zoomoutLastTimestamp = 0\n  let unsubscribeFromClockTickZoomout: AnyFunction<void>\n\n  let zoomBarScrollMouseMoveFunction: AnyFunction<void>\n  let zoomBarScrollMouseUpFunction: AnyFunction<void>\n  let zoombarTickFunction: AnyFunction<void>\n  let isZoomBarScrolling = false\n  let unsubscribeFromClockTickZoomBar: AnyFunction<void>\n  let container: HTMLElement\n\n  // methods\n  const handleZoomInMouseDown = e => {\n    const { defined, getTimestamp, SceneMode, ScreenSpaceEventType } = Cesium\n    const { viewer } = $services\n    $(zoomInTooltipRef)?.hide()\n    $(zoomOutTooltipRef)?.hide()\n    $(zoomBarTooltipRef)?.hide()\n    screenSpaceEventHandler.removeInputAction(ScreenSpaceEventType.LEFT_UP)\n    defined(zoominTickFunction) && viewer.clock.onTick.removeEventListener(zoominTickFunction)\n    ;(zoominMouseUpFunction as any) = undefined\n    ;(zoominTickFunction as any) = undefined\n    isZoomin = true\n    zoominLastTimestamp = getTimestamp()\n    const scene = viewer.scene\n    const camera = scene.camera\n    zoominTickFunction = () => {\n      viewer.scene.mode === SceneMode.COLUMBUS_VIEW ? camera.zoomIn() : handlezoom(1)\n    }\n\n    zoominMouseUpFunction = () => {\n      isZoomin = false\n      screenSpaceEventHandler.removeInputAction(ScreenSpaceEventType.LEFT_UP)\n      defined(zoominTickFunction) && viewer.clock.onTick.removeEventListener(zoominTickFunction)\n      ;(zoominMouseUpFunction as any) = undefined\n      ;(zoominTickFunction as any) = undefined\n    }\n\n    screenSpaceEventHandler.setInputAction(zoominMouseUpFunction, ScreenSpaceEventType.LEFT_UP)\n    unsubscribeFromClockTickZoomin = viewer.clock.onTick.addEventListener(zoominTickFunction)\n  }\n\n  const handleZoomOutMouseDown = event => {\n    $(zoomInTooltipRef)?.hide()\n    $(zoomOutTooltipRef)?.hide()\n    $(zoomBarTooltipRef)?.hide()\n    const { defined, getTimestamp, SceneMode, ScreenSpaceEventType } = Cesium\n    const { viewer } = $services\n    screenSpaceEventHandler.removeInputAction(ScreenSpaceEventType.LEFT_UP)\n    defined(zoomoutTickFunction) && viewer.clock.onTick.removeEventListener(zoomoutTickFunction)\n    ;(zoomoutMouseUpFunction as any) = undefined\n    ;(zoomoutTickFunction as any) = undefined\n    iszoomout = false\n    zoomoutLastTimestamp = getTimestamp()\n    const scene = viewer.scene\n    const camera = scene.camera\n    zoomoutTickFunction = () => {\n      viewer.scene.mode === SceneMode.COLUMBUS_VIEW ? camera.zoomOut() : handlezoom(-1)\n    }\n\n    zoomoutMouseUpFunction = () => {\n      iszoomout = false\n      screenSpaceEventHandler.removeInputAction(ScreenSpaceEventType.LEFT_UP)\n      defined(zoomoutTickFunction) && viewer.clock.onTick.removeEventListener(zoomoutTickFunction)\n      ;(zoomoutMouseUpFunction as any) = undefined\n      ;(zoomoutTickFunction as any) = undefined\n    }\n\n    screenSpaceEventHandler.setInputAction(zoomoutMouseUpFunction, ScreenSpaceEventType.LEFT_UP)\n    unsubscribeFromClockTickZoomout = viewer.clock.onTick.addEventListener(zoomoutTickFunction)\n  }\n\n  const handleZoomBarScrollMouseDown = event => {\n    $(zoomInTooltipRef)?.hide()\n    $(zoomOutTooltipRef)?.hide()\n    $(zoomBarTooltipRef)?.hide()\n    const { Cartesian2, defined, SceneMode } = Cesium\n    const { viewer } = $services\n    document.removeEventListener('mousemove', zoomBarScrollMouseMoveFunction, false)\n    document.removeEventListener('touchmove', zoomBarScrollMouseMoveFunction, false)\n    document.removeEventListener('mouseup', zoomBarScrollMouseUpFunction, false)\n    document.removeEventListener('touchend', zoomBarScrollMouseUpFunction, false)\n    defined(zoombarTickFunction) && viewer.clock.onTick.removeEventListener(zoombarTickFunction)\n    ;(zoomBarScrollMouseUpFunction as any) = undefined\n    ;(zoombarTickFunction as any) = undefined\n    isZoomBarScrolling = true\n    const scene = viewer.scene\n    const camera = scene.camera\n\n    zoombarTickFunction = () => {\n      const zoomOffset = zoombarTop.value - 65\n      if (zoomOffset > 0) {\n        if (viewer.scene.mode === SceneMode.COLUMBUS_VIEW) {\n          camera.zoomOut()\n        } else {\n          handlezoom(-1)\n        }\n      } else if (zoomOffset < 0) {\n        if (viewer.scene.mode === SceneMode.COLUMBUS_VIEW) {\n          camera.zoomIn()\n        } else {\n          handlezoom(1)\n        }\n      }\n    }\n    zoomBarScrollMouseMoveFunction = e => {\n      const zoombarTopMove = zoombarTop.value\n      const clientRect = e.target.parentElement.getBoundingClientRect()\n      const rectNavigation = container.getBoundingClientRect()\n      const endPosition = new Cesium.Cartesian2()\n      endPosition.x = e.type === 'touchmove' ? e.changedTouches[0].clientX - rectNavigation.left : e.clientX - rectNavigation.left\n      endPosition.y = e.type === 'touchmove' ? e.changedTouches[0].clientY - rectNavigation.top : e.clientY - rectNavigation.top\n      const padding = new Cartesian2(clientRect.width - endPosition.x, clientRect.height - endPosition.y)\n      let offset = padding.y - 16\n      offset = offset < 0 ? 0 : offset\n      offset = offset > 120 ? 120 : offset\n      zoombarTop.value = 120 - offset\n\n      const zoomFlag = zoombarTop.value - zoombarTopMove\n      if (zoomFlag > 0) {\n        if (viewer.scene.mode === SceneMode.COLUMBUS_VIEW) {\n          camera.zoomOut()\n        } else {\n          handlezoom(-1)\n        }\n      } else {\n        if (viewer.scene.mode === SceneMode.COLUMBUS_VIEW) {\n          camera.zoomIn()\n        } else {\n          handlezoom(1)\n        }\n      }\n    }\n\n    zoomBarScrollMouseUpFunction = () => {\n      isZoomBarScrolling = false\n      document.removeEventListener('mousemove', zoomBarScrollMouseMoveFunction, false)\n      document.removeEventListener('touchmove', zoomBarScrollMouseMoveFunction, false)\n      document.removeEventListener('mouseup', zoomBarScrollMouseUpFunction, false)\n      document.removeEventListener('touchend', zoomBarScrollMouseUpFunction, false)\n      defined(zoombarTickFunction) && viewer.clock.onTick.removeEventListener(zoombarTickFunction)\n      ;(zoomBarScrollMouseUpFunction as any) = undefined\n      ;(zoomBarScrollMouseMoveFunction as any) = undefined\n      ;(zoombarTickFunction as any) = undefined\n      zoombarTop.value = 65\n    }\n    document.addEventListener('mousemove', zoomBarScrollMouseMoveFunction, false)\n    document.addEventListener('touchmove', zoomBarScrollMouseMoveFunction, false)\n    document.addEventListener('mouseup', zoomBarScrollMouseUpFunction, false)\n    document.addEventListener('touchend', zoomBarScrollMouseUpFunction, false)\n    unsubscribeFromClockTickZoomBar = viewer.clock.onTick.addEventListener(zoombarTickFunction)\n  }\n\n  const handlezoom = i => {\n    const { Cartesian2, Cartesian3, defined, Ellipsoid, Math } = Cesium\n    const { viewer } = $services\n    const scene = viewer.scene\n    const camera = scene.camera\n    const canvas = scene.canvas\n    const centerPixel = new Cartesian2()\n    centerPixel.x = canvas.clientWidth / 2\n    centerPixel.y = canvas.clientHeight / 2\n    const centerPosition = pickGlobe(centerPixel)\n    if (defined(centerPosition)) {\n      const distance = Cartesian3.distance(camera.position, centerPosition)\n      let factor = 0.0618 * i * 0.2\n      factor = distance > 300 ? factor : 2 * factor\n      const amount = distance * factor\n      const direction = new Cartesian3()\n      Cartesian3.subtract(centerPosition, camera.position, direction)\n      const cameraRight = Cartesian3.clone(camera.right)\n      const dot = Cartesian3.dot(direction, cameraRight)\n      const movementVector = new Cartesian3()\n      Cartesian3.multiplyByScalar(cameraRight, dot, movementVector)\n      Cartesian3.subtract(direction, movementVector, direction)\n      Cartesian3.normalize(direction, direction)\n      camera.move(direction, amount)\n      const centerPositionNormal = new Cartesian3()\n      Cartesian3.normalize(centerPosition, centerPositionNormal)\n\n      const pickPosition = camera.pickEllipsoid(centerPixel, viewer.scene.globe.ellipsoid)\n      if (\n        isObject(pickPosition) &&\n        defined(pickPosition) &&\n        !isNaN(pickPosition.x) &&\n        !isNaN(pickPosition.y) &&\n        !isNaN(pickPosition.z) &&\n        !(camera.positionCartographic.height < 0)\n      ) {\n        Cartesian3.normalize(pickPosition, pickPosition)\n        const angle = Cartesian3.angleBetween(centerPositionNormal, pickPosition)\n        if (!Math.equalsEpsilon(angle, 0, Math.EPSILON10)) {\n          const axis = Cartesian3.cross(centerPositionNormal, pickPosition, new Cartesian3())\n          camera.rotate(axis, angle)\n          const listener = getInstanceListener(vcInstance, 'zoomEvt')\n          listener &&\n            emit('zoomEvt', {\n              type: i === 1 ? 'zoomIn' : 'zoomOut',\n              camera: viewer.camera,\n              status: 'end'\n            })\n        }\n      }\n    }\n  }\n\n  const pickGlobe = mousePosition => {\n    const { defined, Cartesian3 } = Cesium\n    const { viewer } = $services\n    const scene = viewer.scene\n    const globe = scene.globe\n    const camera = scene.camera\n    if (defined(globe)) {\n      let depthIntersection\n      if (scene.pickPositionSupported) {\n        depthIntersection = scene.pickPositionWorldCoordinates(mousePosition)\n      }\n      const ray = camera.getPickRay(mousePosition)\n      const rayIntersection = globe.pick(ray, scene)\n      const pickDistance = defined(depthIntersection) ? Cartesian3.distance(depthIntersection, camera.positionWC) : Number.POSITIVE_INFINITY\n      const rayDistance =\n        isObject(rayIntersection) && defined(rayIntersection) ? Cartesian3.distance(rayIntersection, camera.positionWC) : Number.POSITIVE_INFINITY\n      return rayDistance > pickDistance ? depthIntersection : rayIntersection\n    }\n  }\n\n  const onTooltipBeforeShow = e => {\n    if (zoomBarScrollMouseMoveFunction !== undefined || zoominTickFunction !== undefined || zoomoutTickFunction !== undefined) {\n      e.cancel = true\n    }\n  }\n\n  const load = el => {\n    container = el\n    screenSpaceEventHandler = new Cesium.ScreenSpaceEventHandler(el)\n    return true\n  }\n\n  const unload = () => {\n    document.removeEventListener('mousemove', zoomBarScrollMouseMoveFunction, false)\n    document.removeEventListener('touchmove', zoomBarScrollMouseMoveFunction, false)\n    document.removeEventListener('mouseup', zoomBarScrollMouseUpFunction, false)\n    document.removeEventListener('touchend', zoomBarScrollMouseUpFunction, false)\n    unsubscribeFromClockTickZoomin?.()\n    unsubscribeFromClockTickZoomout?.()\n    unsubscribeFromClockTickZoomBar?.()\n    screenSpaceEventHandler?.destroy()\n    return true\n  }\n\n  return {\n    handleZoomInMouseDown,\n    handleZoomOutMouseDown,\n    handleZoomBarScrollMouseDown,\n    load,\n    unload,\n    zoombarTop,\n    zoomInTooltipRef,\n    zoomOutTooltipRef,\n    zoomBarTooltipRef,\n    onTooltipBeforeShow\n  }\n}\n"],"names":[],"mappings":"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"}