UNPKG

vue-cesium

Version:
1 lines 13.2 kB
{"version":3,"file":"use-zoom-control.mjs","sources":["../../../../../../packages/components/controls/zoom-control/use-zoom-control.ts"],"sourcesContent":["import type { VcCamera, VcComponentInternalInstance, VcViewerProvider } from '@vue-cesium/utils/types'\nimport { flyToCamera, heightToLevel } from '@vue-cesium/utils/cesium-helpers'\nimport { $, getInstanceListener } from '@vue-cesium/utils/private/vm'\nimport { ref } from 'vue'\nimport type { VcTooltipRef } from '@vue-cesium/components/ui'\n\nexport default function (props, { emit }, vcInstance: VcComponentInternalInstance, $services: VcViewerProvider) {\n // state\n const zoomInTooltipRef = ref<VcTooltipRef>(null)\n const zoomOutTooltipRef = ref<VcTooltipRef>(null)\n const resetTooltipRef = ref<VcTooltipRef>(null)\n\n const zoomIn = (e?: MouseEvent) => {\n zoom(1 / props.zoomAmount, e)\n }\n\n const zoomOut = (e?: MouseEvent) => {\n zoom(props.zoomAmount, e)\n }\n\n const zoom = (relativeAmount, e?: MouseEvent) => {\n $(zoomInTooltipRef)?.hide()\n $(zoomOutTooltipRef)?.hide()\n\n const { Cartesian3, defined, IntersectionTests, Ray, SceneMode } = Cesium\n const { viewer } = $services\n if (defined(viewer)) {\n const scene = viewer.scene\n const sscc = scene.screenSpaceCameraController\n // do not zoom if it is disabled\n if (!sscc.enableInputs || !sscc.enableZoom) {\n return\n }\n // TODO\n if (scene.mode === SceneMode.COLUMBUS_VIEW && !sscc.enableTranslate) {\n return\n }\n\n const camera = scene.camera\n let orientation\n\n switch (scene.mode) {\n case SceneMode.MORPHING: {\n break\n }\n case SceneMode.SCENE2D: {\n camera.zoomIn(camera.positionCartographic.height * (1 - relativeAmount))\n break\n }\n default: {\n let focus\n\n if (defined(viewer.trackedEntity)) {\n focus = new Cesium.Cartesian3()\n } else {\n focus = getCameraFocus(viewer.scene)\n }\n\n if (!Cesium.defined(focus)) {\n // Camera direction is not pointing at the globe, so use the ellipsoid horizon point as\n // the focal point.\n const ray = new Ray(\n camera.worldToCameraCoordinatesPoint(scene.globe.ellipsoid.cartographicToCartesian(camera.positionCartographic)),\n camera.directionWC\n )\n focus = IntersectionTests.grazingAltitudeLocation(ray, scene.globe.ellipsoid)\n\n orientation = {\n heading: camera.heading,\n pitch: camera.pitch,\n roll: camera.roll\n }\n } else {\n orientation = {\n direction: camera.direction,\n up: camera.up\n }\n }\n const cartesian3Scratch = new Cartesian3()\n const direction = Cartesian3.subtract(camera.position, focus, cartesian3Scratch)\n const movementVector = Cartesian3.multiplyByScalar(direction, relativeAmount, direction)\n const endPosition = Cartesian3.add(focus, movementVector, focus)\n const type = relativeAmount < 1 ? 'zoomIn' : 'zoomOut'\n const target = e.currentTarget\n const level = heightToLevel(camera.positionCartographic.height).toFixed(0)\n const listener = getInstanceListener(vcInstance, 'zoomEvt')\n listener &&\n emit('zoomEvt', {\n type: type,\n camera: viewer.camera,\n status: 'start',\n target: target,\n level\n })\n if (Cesium.defined(viewer.trackedEntity) || scene.mode === SceneMode.COLUMBUS_VIEW) {\n // sometimes flyTo does not work (jumps to wrong position) so just set the position without any animation\n // do not use flyTo when tracking an entity because during animatiuon the position of the entity may change\n camera.position = endPosition\n } else {\n camera.flyTo({\n destination: endPosition,\n orientation: orientation,\n duration: props.duration,\n convert: false,\n complete: () => {\n listener &&\n emit('zoomEvt', {\n type: type,\n camera: viewer.camera,\n status: 'end',\n target,\n level\n })\n },\n cancel: () => {\n listener &&\n emit('zoomEvt', {\n type: type,\n camera: viewer.camera,\n status: 'cancel',\n target,\n level\n })\n }\n })\n }\n }\n }\n }\n }\n\n const zoomReset = (e?: MouseEvent) => {\n $(resetTooltipRef)?.hide()\n const { viewer } = $services\n const scene = viewer.scene\n const sscc = scene.screenSpaceCameraController\n if (!sscc.enableInputs) {\n return\n }\n\n if (Cesium.defined(viewer.trackedEntity)) {\n // when tracking do not reset to default view but to default view of tracked entity\n const trackedEntity = viewer.trackedEntity\n viewer.trackedEntity = undefined\n viewer.trackedEntity = trackedEntity\n } else {\n const listener = getInstanceListener(vcInstance, 'zoomEvt')\n const target = e?.currentTarget\n const level = heightToLevel(viewer.camera.positionCartographic.height).toFixed(0)\n // reset to a default position or view defined in the options\n listener &&\n emit('zoomEvt', {\n type: 'zoomReset',\n camera: viewer.camera,\n status: 'start',\n target,\n level\n })\n\n const complete = () => {\n listener &&\n emit('zoomEvt', {\n type: 'zoomReset',\n camera: viewer.camera,\n status: 'end',\n target,\n level\n })\n }\n const cancel = () => {\n listener &&\n emit('zoomEvt', {\n type: 'zoomReset',\n camera: viewer.camera,\n status: 'cancel',\n target,\n level\n })\n }\n\n const resetView: VcCamera = props.defaultResetView\n const options = {\n duration: props.durationReset,\n complete: complete,\n cancel: cancel\n }\n flyToCamera(viewer, resetView, options)\n }\n }\n\n const getCameraFocus = (scene: Cesium.Scene) => {\n const { defined, IntersectionTests, Ray } = Cesium\n const ray = new Ray(scene.camera.positionWC, scene.camera.directionWC)\n const intersections = IntersectionTests.rayEllipsoid(ray, scene.globe.ellipsoid)\n if (defined(intersections)) {\n return Ray.getPoint(ray, intersections.start)\n }\n // Camera direction is not pointing at the globe, so use the ellipsoid horizon point as\n // the focal point.\n return IntersectionTests.grazingAltitudeLocation(ray, scene.globe.ellipsoid)\n }\n\n return {\n zoomIn,\n zoomOut,\n zoomReset,\n zoomInTooltipRef,\n zoomOutTooltipRef,\n resetTooltipRef\n }\n}\n"],"names":[],"mappings":"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"}