UNPKG

casc-cesium

Version:

Vue 3.x components for CesiumJS.

1 lines 38.4 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 'casc-cesium-utils/types'\nimport CameraFlightPath from './CameraFlightPath'\nimport { getInstanceListener, $ } from 'casc-cesium-utils/private/vm'\nimport type { VcTooltipRef } from 'casc-cesium-components/ui'\nimport { isObject } from 'casc-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":[],"mappings":"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"}