casc-cesium
Version:
Vue 3.x components for CesiumJS.
1 lines • 13.5 kB
Source Map (JSON)
{"version":3,"file":"use-zoom-control.mjs","sources":["../../../../../../packages/components/controls/zoom-control/use-zoom-control.ts"],"sourcesContent":["import type { VcCamera, VcComponentInternalInstance, VcViewerProvider } from 'casc-cesium-utils/types'\nimport { flyToCamera, heightToLevel } from 'casc-cesium-utils/cesium-helpers'\nimport { $, getInstanceListener } from 'casc-cesium-utils/private/vm'\nimport { ref } from 'vue'\nimport type { VcTooltipRef } from 'casc-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 => {\n zoom(1 / props.zoomAmount, e)\n }\n\n const zoomOut = e => {\n zoom(props.zoomAmount, e)\n }\n\n const zoom = (relativeAmount, e) => {\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 => {\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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"}