UNPKG

vue-cesium

Version:
1 lines 37.6 kB
{"version":3,"file":"use-compass.mjs","sources":["../../../../../../packages/components/controls/compass/use-compass.ts"],"sourcesContent":["import { ref } from 'vue'\nimport type { AnyFunction, VcComponentInternalInstance } from '@vue-cesium/utils/types'\nimport CameraFlightPath from './CameraFlightPath'\nimport { getInstanceListener, $ } from '@vue-cesium/utils/private/vm'\nimport type { VcTooltipRef } from '@vue-cesium/components/ui'\nimport { isObject } from '@vue-cesium/utils/util'\n\nexport default function (props, { emit }, vcInstance: VcComponentInternalInstance) {\n // state\n const vectorScratch: any = {}\n const oldTransformScratch: any = {}\n const newTransformScratch: any = {}\n const centerScratch: any = {}\n\n let unsubscribeFromPostRender: AnyFunction<void>\n let unsubscribeFromClockTick: AnyFunction<void>\n\n let orbitMouseMoveFunction: EventListener\n let orbitMouseUpFunction: EventListener\n let orbitTickFunction: EventListener\n\n const heading = ref(0)\n const orbitCursorAngle = ref(0)\n const orbitCursorOpacity = ref(0)\n\n let isOrbiting = false\n let orbitLastTimestamp = 0\n let orbitFrame: any = {}\n let orbitIsLook = false\n\n let rotateMouseUpFunction: AnyFunction<void>\n let rotateMouseMoveFunction: AnyFunction<void>\n let isRotating = false\n let rotateInitialCursorAngle = 0\n let rotateFrame: any = {}\n let rotateIsLook = false\n let rotateInitialCameraAngle = 0\n let rotateInitialCameraDistance: any = {}\n\n const iconOuterTooltipRef = ref<VcTooltipRef>(null)\n const iconInnerTooltipRef = ref<VcTooltipRef>(null)\n\n // methods\n const handleMouseDown = (e: MouseEvent | TouchEvent) => {\n if (e.stopPropagation) e.stopPropagation()\n if (e.preventDefault) e.preventDefault()\n\n $(iconOuterTooltipRef)?.hide()\n $(iconInnerTooltipRef)?.hide()\n\n const { SceneMode, Cartesian2 } = Cesium\n const scene = vcInstance.viewer.scene\n if (scene.mode === SceneMode.MORPHING) {\n return true\n }\n\n const compassElement = e.currentTarget as HTMLElement\n const compassRectangle = compassElement.getBoundingClientRect()\n const maxDistance = compassRectangle.width / 2.0\n const center = new Cartesian2((compassRectangle.right - compassRectangle.left) / 2.0, (compassRectangle.bottom - compassRectangle.top) / 2.0)\n let clickLocation\n if (e instanceof MouseEvent) {\n clickLocation = new Cartesian2(e.clientX - compassRectangle.left, e.clientY - compassRectangle.top)\n } else if (e instanceof TouchEvent) {\n clickLocation = new Cartesian2(e.changedTouches[0].clientX - compassRectangle.left, e.changedTouches[0].clientY - compassRectangle.top)\n }\n const vector = Cartesian2.subtract(clickLocation, center, vectorScratch)\n const distanceFromCenter = Cartesian2.magnitude(vector)\n const distanceFraction = distanceFromCenter / maxDistance\n const nominalTotalRadius = 145\n const norminalGyroRadius = 50\n\n if (distanceFraction < norminalGyroRadius / nominalTotalRadius) {\n orbit(compassElement, vector)\n } else if (distanceFraction < 1.0) {\n rotate(compassElement, vector)\n } else {\n return true\n }\n }\n const handleDoubleClick = e => {\n const { Cartesian2, Cartesian3, defined, Ellipsoid, Matrix4, Ray, SceneMode, Transforms } = Cesium\n const { viewer } = vcInstance\n const scene = viewer.scene\n const camera = scene.camera\n const sscc = scene.screenSpaceCameraController\n\n if (scene.mode === SceneMode.MORPHING || !sscc.enableInputs) {\n return true\n }\n if (scene.mode === SceneMode.COLUMBUS_VIEW && !sscc.enableTranslate) {\n return\n }\n if (scene.mode === SceneMode.SCENE3D || scene.mode === SceneMode.COLUMBUS_VIEW) {\n if (!sscc.enableLook) {\n return\n }\n\n if (scene.mode === SceneMode.SCENE3D) {\n if (!sscc.enableRotate) {\n return\n }\n }\n }\n\n const windowPosition = new Cartesian2()\n windowPosition.x = scene.canvas.clientWidth / 2\n windowPosition.y = scene.canvas.clientHeight / 2\n const pickRayScratch = new Ray()\n const ray = camera.getPickRay(windowPosition, pickRayScratch)\n\n const center = scene.globe.pick(ray, scene, centerScratch)\n if (!isObject(center) || !defined(center)) {\n // Globe is barely visible, so reset to home view.\n viewer.camera.flyHome()\n return\n }\n\n const listener = getInstanceListener(vcInstance, 'compassEvt')\n listener &&\n emit('compassEvt', {\n type: 'reset',\n camera: viewer.camera,\n status: 'start',\n target: e.currentTarget\n })\n const rotateFrame = Transforms.eastNorthUpToFixedFrame(center, viewer.scene.globe.ellipsoid)\n const lookVector = Cartesian3.subtract(center, camera.position, new Cartesian3())\n const flight = CameraFlightPath.createTween(scene, {\n destination: Matrix4.multiplyByPoint(rotateFrame, new Cartesian3(0.0, 0.0, Cartesian3.magnitude(lookVector)), new Cartesian3()),\n direction: Matrix4.multiplyByPointAsVector(rotateFrame, new Cartesian3(0.0, 0.0, -1.0), new Cartesian3()),\n up: Matrix4.multiplyByPointAsVector(rotateFrame, new Cartesian3(0.0, 1.0, 0.0), new Cartesian3()),\n duration: props.duration,\n complete: () => {\n listener &&\n emit('compassEvt', {\n type: 'reset',\n camera: viewer.camera,\n status: 'end',\n target: e.currentTarget\n })\n },\n cancel: () => {\n listener &&\n emit('compassEvt', {\n type: 'reset',\n camera: viewer.camera,\n status: 'cancel',\n target: e.currentTarget\n })\n }\n })\n ;(scene as any).tweens.add(flight)\n }\n const resetRotater = () => {\n orbitCursorOpacity.value = 0\n orbitCursorAngle.value = 0\n }\n // state methods\n const viewerChange = () => {\n const { defined } = Cesium\n if (defined(vcInstance.viewer)) {\n if (unsubscribeFromPostRender) {\n unsubscribeFromPostRender()\n ;(unsubscribeFromPostRender as any) = undefined\n }\n\n unsubscribeFromPostRender = vcInstance.viewer.scene.postRender.addEventListener(function () {\n if (heading.value !== vcInstance.viewer.scene.camera.heading) {\n heading.value = vcInstance.viewer.scene.camera.heading\n }\n })\n } else {\n if (unsubscribeFromPostRender) {\n unsubscribeFromPostRender()\n ;(unsubscribeFromPostRender as any) = undefined\n }\n }\n }\n\n const orbit = (compassElement: HTMLElement, cursorVector: Cesium.Cartesian2) => {\n const { Cartesian2, Cartesian3, defined, getTimestamp, Math: CesiumMath, Matrix4, Ray, SceneMode, Transforms } = Cesium\n let scene = vcInstance.viewer.scene\n let camera = scene.camera\n const sscc = scene.screenSpaceCameraController\n // do not orbit if it is disabled\n if (scene.mode === SceneMode.MORPHING || !sscc.enableInputs) {\n return\n }\n\n switch (scene.mode) {\n case SceneMode.COLUMBUS_VIEW:\n if (sscc.enableLook) {\n break\n }\n if (!sscc.enableTranslate || !sscc.enableTilt) {\n return\n }\n break\n case SceneMode.SCENE3D:\n if (sscc.enableLook) {\n break\n }\n if (!sscc.enableTilt || !sscc.enableRotate) {\n return\n }\n break\n case Cesium.SceneMode.SCENE2D:\n if (!sscc.enableTranslate) {\n return\n }\n break\n }\n const listener = getInstanceListener(vcInstance, 'compassEvt')\n listener &&\n emit('compassEvt', {\n type: 'orbit',\n camera: scene.camera,\n status: 'start',\n target: compassElement\n })\n\n // Remove existing event handlers, if any.\n document.removeEventListener('mousemove', orbitMouseMoveFunction, false)\n document.removeEventListener('mouseup', orbitMouseUpFunction, false)\n document.removeEventListener('touchmove', orbitMouseMoveFunction, false)\n document.removeEventListener('touchend', orbitMouseUpFunction, false)\n\n if (defined(orbitTickFunction)) {\n vcInstance.viewer.clock.onTick.removeEventListener(orbitTickFunction)\n }\n\n ;(orbitMouseMoveFunction as any) = undefined\n ;(orbitMouseUpFunction as any) = undefined\n ;(orbitTickFunction as any) = undefined\n\n isOrbiting = true\n orbitLastTimestamp = getTimestamp()\n\n const windowPosition = new Cartesian2()\n windowPosition.x = scene.canvas.clientWidth / 2\n windowPosition.y = scene.canvas.clientHeight / 2\n const pickRayScratch = new Ray()\n const ray = camera.getPickRay(windowPosition, pickRayScratch)\n\n const center = scene.globe.pick(ray, scene, centerScratch)\n if (!defined(center)) {\n orbitFrame = Transforms.eastNorthUpToFixedFrame(camera.positionWC, scene.globe.ellipsoid, newTransformScratch)\n orbitIsLook = true\n } else {\n orbitFrame = Transforms.eastNorthUpToFixedFrame(center || new Cesium.Cartesian3(), scene.globe.ellipsoid, newTransformScratch)\n orbitIsLook = false\n }\n\n orbitTickFunction = function (e) {\n const timestamp = getTimestamp()\n const deltaT = timestamp - orbitLastTimestamp\n const rate = ((orbitCursorOpacity.value - 0.5) * 2.5) / 1000\n const distance = deltaT * rate\n\n const angle = orbitCursorAngle.value + CesiumMath.PI_OVER_TWO\n const x = Math.cos(angle) * distance\n const y = Math.sin(angle) * distance\n\n scene = vcInstance.viewer.scene\n camera = scene.camera\n\n const oldTransform = Matrix4.clone(camera.transform, oldTransformScratch)\n camera.lookAtTransform(orbitFrame)\n if (orbitIsLook) {\n camera.look(Cartesian3.UNIT_Z, -x)\n camera.look(camera.right, -y)\n } else {\n camera.rotateLeft(x)\n camera.rotateUp(y)\n }\n\n camera.lookAtTransform(oldTransform)\n orbitLastTimestamp = timestamp\n }\n\n function updateAngleAndOpacity(vector, compassWidth) {\n const angle = Math.atan2(-vector.y, vector.x)\n orbitCursorAngle.value = CesiumMath.zeroToTwoPi(angle - CesiumMath.PI_OVER_TWO)\n const distance = Cartesian2.magnitude(vector)\n const maxDistance = compassWidth / 2.0\n const distanceFraction = Math.min(distance / maxDistance, 1.0)\n const easedOpacity = 0.5 * distanceFraction * distanceFraction + 0.5\n orbitCursorOpacity.value = easedOpacity\n }\n\n orbitMouseMoveFunction = function (e: Event) {\n const compassRectangle = compassElement.getBoundingClientRect()\n const center = new Cartesian2((compassRectangle.right - compassRectangle.left) / 2.0, (compassRectangle.bottom - compassRectangle.top) / 2.0)\n let clickLocation\n if (e instanceof MouseEvent) {\n clickLocation = new Cartesian2(e.clientX - compassRectangle.left, e.clientY - compassRectangle.top)\n } else if (e instanceof TouchEvent) {\n clickLocation = new Cartesian2(e.changedTouches[0].clientX - compassRectangle.left, e.changedTouches[0].clientY - compassRectangle.top)\n }\n const vector = Cartesian2.subtract(clickLocation, center, vectorScratch)\n updateAngleAndOpacity(vector, compassRectangle.width)\n listener &&\n emit('compassEvt', {\n type: 'orbit',\n camera: scene.camera,\n status: 'changing',\n target: compassElement\n })\n }\n\n orbitMouseUpFunction = function (e) {\n // TODO: if mouse didn't move, reset view to looking down, north is up?\n\n isOrbiting = false\n document.removeEventListener('mousemove', orbitMouseMoveFunction, false)\n document.removeEventListener('mouseup', orbitMouseUpFunction, false)\n document.removeEventListener('touchmove', orbitMouseMoveFunction, false)\n document.removeEventListener('touchend', orbitMouseUpFunction, false)\n\n if (defined(orbitTickFunction)) {\n vcInstance.viewer.clock.onTick.removeEventListener(orbitTickFunction)\n }\n\n ;(orbitMouseMoveFunction as any) = undefined\n ;(orbitMouseUpFunction as any) = undefined\n ;(orbitTickFunction as any) = undefined\n\n resetRotater()\n\n listener &&\n emit('compassEvt', {\n type: 'orbit',\n camera: scene.camera,\n status: 'end',\n target: compassElement\n })\n }\n\n document.addEventListener('mousemove', orbitMouseMoveFunction, false)\n document.addEventListener('mouseup', orbitMouseUpFunction, false)\n document.addEventListener('touchmove', orbitMouseMoveFunction, false)\n document.addEventListener('touchend', orbitMouseUpFunction, false)\n unsubscribeFromClockTick = vcInstance.viewer.clock.onTick.addEventListener(orbitTickFunction)\n updateAngleAndOpacity(cursorVector, compassElement.getBoundingClientRect().width)\n }\n\n const rotate = (compassElement: HTMLElement, cursorVector: Cesium.Cartesian2) => {\n if (!props.enableCompassOuterRing) {\n return\n }\n\n const scene = vcInstance.viewer.scene\n let camera = scene.camera\n const sscc = scene.screenSpaceCameraController\n // do not rotate in 2D mode or if rotating is disabled\n if (scene.mode === Cesium.SceneMode.MORPHING || scene.mode === Cesium.SceneMode.SCENE2D || !sscc.enableInputs) {\n return\n }\n if (!sscc.enableLook && (scene.mode === Cesium.SceneMode.COLUMBUS_VIEW || (scene.mode === Cesium.SceneMode.SCENE3D && !sscc.enableRotate))) {\n return\n }\n // Remove existing event handlers, if any.\n document.removeEventListener('mousemove', rotateMouseMoveFunction, false)\n document.removeEventListener('touchmove', rotateMouseMoveFunction, false)\n document.removeEventListener('mouseup', rotateMouseUpFunction, false)\n document.removeEventListener('touchend', rotateMouseUpFunction, false)\n const { Cartesian2, Cartesian3, defined, Math: CesiumMath, Matrix4, Ray, Transforms } = Cesium\n ;(rotateMouseMoveFunction as any) = undefined\n ;(rotateMouseUpFunction as any) = undefined\n\n const listener = getInstanceListener(vcInstance, 'compassEvt')\n listener &&\n emit('compassEvt', {\n type: 'rotate',\n camera: scene.camera,\n status: 'start',\n target: compassElement\n })\n\n isRotating = true\n rotateInitialCursorAngle = Math.atan2(-cursorVector.y, cursorVector.x)\n\n const windowPosition = new Cartesian2()\n windowPosition.x = scene.canvas.clientWidth / 2\n windowPosition.y = scene.canvas.clientHeight / 2\n const pickRayScratch = new Ray()\n const ray = camera.getPickRay(windowPosition, pickRayScratch)\n\n const viewCenter = scene.globe.pick(ray, scene, centerScratch)\n if (!defined(viewCenter)) {\n rotateFrame = Transforms.eastNorthUpToFixedFrame(camera.positionWC, scene.globe.ellipsoid, newTransformScratch)\n rotateIsLook = true\n } else {\n rotateFrame = Transforms.eastNorthUpToFixedFrame(viewCenter || new Cartesian3(), scene.globe.ellipsoid, newTransformScratch)\n rotateIsLook = false\n }\n\n let oldTransform = Matrix4.clone(camera.transform, oldTransformScratch)\n camera.lookAtTransform(rotateFrame)\n rotateInitialCameraAngle = Math.atan2(camera.position.y, camera.position.x)\n rotateInitialCameraDistance = Cartesian3.magnitude(new Cartesian3(camera.position.x, camera.position.y, 0.0))\n camera.lookAtTransform(oldTransform)\n\n rotateMouseMoveFunction = function (e: MouseEvent | TouchEvent) {\n const compassRectangle = compassElement.getBoundingClientRect()\n const center = new Cartesian2((compassRectangle.right - compassRectangle.left) / 2.0, (compassRectangle.bottom - compassRectangle.top) / 2.0)\n let clickLocation\n if (e instanceof MouseEvent) {\n clickLocation = new Cartesian2(e.clientX - compassRectangle.left, e.clientY - compassRectangle.top)\n } else if (e instanceof TouchEvent) {\n clickLocation = new Cartesian2(e.changedTouches[0].clientX - compassRectangle.left, e.changedTouches[0].clientY - compassRectangle.top)\n }\n const vector = Cartesian2.subtract(clickLocation, center, vectorScratch)\n const angle = Math.atan2(-vector.y, vector.x)\n\n const angleDifference = angle - rotateInitialCursorAngle\n const newCameraAngle = CesiumMath.zeroToTwoPi(rotateInitialCameraAngle - angleDifference)\n\n camera = vcInstance.viewer.scene.camera\n\n oldTransform = Matrix4.clone(camera.transform, oldTransformScratch)\n camera.lookAtTransform(rotateFrame)\n const currentCameraAngle = Math.atan2(camera.position.y, camera.position.x)\n camera.rotateRight(newCameraAngle - currentCameraAngle)\n camera.lookAtTransform(oldTransform)\n listener &&\n emit('compassEvt', {\n type: 'rotate',\n camera: scene.camera,\n status: 'changing',\n target: compassElement\n })\n }\n\n rotateMouseUpFunction = function (e) {\n isRotating = false\n document.removeEventListener('mousemove', rotateMouseMoveFunction, false)\n document.removeEventListener('touchmove', rotateMouseMoveFunction, false)\n document.removeEventListener('mouseup', rotateMouseUpFunction, false)\n document.removeEventListener('touchend', rotateMouseUpFunction, false)\n ;(rotateMouseMoveFunction as any) = undefined\n ;(rotateMouseUpFunction as any) = undefined\n\n listener &&\n emit('compassEvt', {\n type: 'rotate',\n camera: scene.camera,\n status: 'end',\n target: compassElement\n })\n }\n\n document.addEventListener('mousemove', rotateMouseMoveFunction, false)\n document.addEventListener('touchmove', rotateMouseMoveFunction, false)\n document.addEventListener('mouseup', rotateMouseUpFunction, false)\n document.addEventListener('touchend', rotateMouseUpFunction, false)\n }\n\n const onTooltipBeforeShow = e => {\n if (rotateMouseMoveFunction !== undefined || orbitMouseMoveFunction !== undefined) {\n e.cancel = true\n }\n }\n\n const load = async viewer => {\n vcInstance.viewer = viewer\n viewerChange()\n return true\n }\n\n const unload = async () => {\n document.removeEventListener('mousemove', orbitMouseMoveFunction, false)\n document.removeEventListener('mouseup', orbitMouseUpFunction, false)\n document.removeEventListener('touchmove', orbitMouseMoveFunction, false)\n document.removeEventListener('touchend', orbitMouseUpFunction, false)\n unsubscribeFromClockTick && unsubscribeFromClockTick()\n unsubscribeFromPostRender && unsubscribeFromPostRender()\n return true\n }\n\n return {\n heading,\n orbitCursorAngle,\n orbitCursorOpacity,\n handleDoubleClick,\n handleMouseDown,\n resetRotater,\n onTooltipBeforeShow,\n viewerChange,\n load,\n unload,\n iconOuterTooltipRef,\n iconInnerTooltipRef\n }\n}\n"],"names":["rotateFrame","center"],"mappings":"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"}