vue-cesium
Version:
Vue 3.x components for CesiumJS.
1 lines • 48.2 kB
Source Map (JSON)
{"version":3,"file":"use-compass.mjs","sources":["../../../../../../packages/components/controls/navigation-sm/use-compass.ts"],"sourcesContent":["import { ref } from 'vue'\nimport type { AnyFunction, VcComponentInternalInstance } from '@vue-cesium/utils/types'\nimport CameraFlightPath from '../compass/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 rotateEastMouseUpFunction: AnyFunction<void>\n let rotateEastTickFunction: AnyFunction<void>\n\n const heading = ref(0)\n\n let isrotateEasting = false\n let rotateEastLastTimestamp = 0\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 let screenSpaceEventHandler: Cesium.ScreenSpaceEventHandler\n\n let tiltMouseMoveFunction: AnyFunction<void>\n let tiltMouseUpFunction: AnyFunction<void>\n let isTilting = false\n let tiltFrame: any = {}\n let tiltInitialCursorAngle = 0\n const tiltbarLeft = ref(56)\n const tiltbarTop = ref(3)\n let clickStartPosition\n\n const tooltipRef = ref<VcTooltipRef>(null)\n\n // methods\n const handleMouseDown = (e: Event) => {\n if (e.stopPropagation) e.stopPropagation()\n if (e.preventDefault) e.preventDefault()\n\n $(tooltipRef)?.hide()\n\n const { Cartesian2, SceneMode, Math: CesiumMath } = Cesium\n const scene = vcInstance.viewer.scene\n if (scene.mode === SceneMode.MORPHING) {\n return true\n }\n const compassElement = e.currentTarget as HTMLElement\n const compassRectangle = (e.currentTarget as HTMLElement).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 clickStartPosition = new Cartesian2(e.clientX, e.clientY)\n } else if (e instanceof TouchEvent) {\n clickLocation = new Cartesian2(e.changedTouches[0].clientX - compassRectangle.left, e.changedTouches[0].clientY - compassRectangle.top)\n clickStartPosition = new Cartesian2(e.changedTouches[0].clientX, e.changedTouches[0].clientY)\n }\n const vector = Cartesian2.subtract(clickLocation, center, vectorScratch)\n\n const distanceFromCenter = Cartesian2.magnitude(vector)\n\n if (distanceFromCenter > 30 && distanceFromCenter < 45) {\n rotate(compassElement, vector)\n } else if (!(distanceFromCenter > 50 && distanceFromCenter < 70)) {\n rotateEast(compassElement, vector)\n } else {\n const angle = CesiumMath.PI_OVER_TWO - Math.atan2(-vector.y, vector.x)\n angle >= 0 && angle <= CesiumMath.PI_OVER_TWO && tilt(compassElement, vector)\n }\n }\n\n const handleMouseUp = event => {\n const { Cartesian2, Math: CesiumMath } = Cesium\n const compassRectangle = event.currentTarget.getBoundingClientRect()\n const center = new Cartesian2((compassRectangle.right - compassRectangle.left) / 2.0, (compassRectangle.bottom - compassRectangle.top) / 2.0)\n const clickLocation =\n event.type === 'mouseup'\n ? new Cartesian2(event.clientX - compassRectangle.left, event.clientY - compassRectangle.top)\n : new Cartesian2(event.changedTouches[0].clientX - compassRectangle.left, event.changedTouches[0].clientY - compassRectangle.top)\n const vector = Cartesian2.subtract(clickLocation, center, vectorScratch)\n const magnitude = Cartesian2.magnitude(vector)\n if (magnitude > 30 && magnitude < 45) {\n const angle = CesiumMath.toDegrees(Math.atan2(-vector.y, vector.x))\n const clickStartPositionUp =\n event.type === 'mouseup'\n ? new Cartesian2(event.clientX, event.clientY)\n : new Cartesian2(event.changedTouches[0].clientX, event.changedTouches[0].clientY)\n const dX = clickStartPositionUp.x - clickStartPosition.x\n const dY = clickStartPositionUp.y - clickStartPosition.y\n const distance = Math.sqrt(dX * dX + dY * dY)\n if (distance > 5) {\n return\n }\n const headingDegree = CesiumMath.toDegrees(heading.value)\n const m = Math.abs(angle - headingDegree)\n const scene = vcInstance.viewer.scene\n if ((angle > 0 && headingDegree > 0 && headingDegree < 90 && m > 80 && m < 100) || (m > 260 && m < 280)) {\n scene.camera.flyTo({\n destination: scene.camera.position,\n orientation: {\n heading: 0,\n pitch: scene.camera.pitch\n }\n })\n }\n }\n }\n const handleDoubleClick = e => {\n const { Cartesian2, Cartesian3, defined, 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 (!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 || new Cartesian3(), viewer.scene.globe.ellipsoid)\n const lookVector = Cartesian3.subtract(center || new Cartesian3(), 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\n // 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 rotateEast = (compassElement: HTMLElement, cursorVector: Cesium.Cartesian2) => {\n const { defined, getTimestamp, SceneMode, Math: CesiumMath, ScreenSpaceEventType } = Cesium\n const scene = vcInstance.viewer.scene\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\n screenSpaceEventHandler.removeInputAction(ScreenSpaceEventType.LEFT_UP)\n if (defined(rotateEastTickFunction)) {\n vcInstance.viewer.clock.onTick.removeEventListener(rotateEastTickFunction)\n }\n\n ;(rotateEastMouseUpFunction as any) = undefined\n ;(rotateEastTickFunction as any) = undefined\n\n isrotateEasting = true\n rotateEastLastTimestamp = getTimestamp()\n\n let angle = CesiumMath.PI_OVER_TWO - Math.atan2(-cursorVector.y, cursorVector.x)\n const quarterPI = Math.PI / 4\n let roateDirection = 0\n const roateType = {\n LEFT: 1,\n RIGHT: 2,\n UP: 3,\n DOWN: 4\n }\n roateDirection =\n angle >= -quarterPI && quarterPI >= angle\n ? roateType.DOWN\n : angle >= quarterPI && 3 * quarterPI >= angle\n ? roateType.RIGHT\n : angle >= 3 * quarterPI && 5 * quarterPI >= angle\n ? roateType.UP\n : roateType.LEFT\n\n const listener = getInstanceListener(vcInstance, 'compassEvt')\n let type = `rotateEast`\n switch (roateDirection) {\n case roateType.LEFT:\n type = 'rotateWest'\n break\n case roateType.RIGHT:\n type = 'rotateEast'\n break\n case roateType.UP:\n type = 'rotateNorth'\n break\n case roateType.DOWN:\n type = 'rotateSouth'\n }\n\n listener &&\n emit('compassEvt', {\n type: type,\n camera: scene.camera,\n status: 'start',\n target: compassElement\n })\n\n rotateEastTickFunction = function (e) {\n const scene = vcInstance.viewer.scene\n const camera = scene.camera\n const timestamp = getTimestamp()\n angle = 20 * Math.abs(camera.positionCartographic.height / 6378317) * 0.0005\n switch (roateDirection) {\n case roateType.LEFT:\n camera.rotateLeft(angle)\n break\n case roateType.RIGHT:\n camera.rotateRight(angle)\n break\n case roateType.UP:\n camera.rotate(camera.right, -angle)\n break\n case roateType.DOWN:\n camera.rotate(camera.right, angle)\n }\n rotateEastLastTimestamp = timestamp\n listener &&\n emit('compassEvt', {\n type: type,\n camera: scene.camera,\n status: 'changing',\n target: compassElement\n })\n }\n\n rotateEastMouseUpFunction = function (e) {\n // TODO: if mouse didn't move, reset view to looking down, north is up?\n\n isrotateEasting = false\n screenSpaceEventHandler.removeInputAction(ScreenSpaceEventType.LEFT_UP)\n defined(rotateEastTickFunction) && vcInstance.viewer.clock.onTick.removeEventListener(rotateEastTickFunction)\n ;(rotateEastMouseUpFunction as any) = undefined\n ;(rotateEastTickFunction as any) = undefined\n\n listener &&\n emit('compassEvt', {\n type: type,\n camera: scene.camera,\n status: 'end',\n target: compassElement\n })\n }\n\n screenSpaceEventHandler.setInputAction(rotateEastMouseUpFunction, ScreenSpaceEventType.LEFT_UP)\n unsubscribeFromClockTick = vcInstance.viewer.clock.onTick.addEventListener(rotateEastTickFunction)\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 tilt = (compassElement: HTMLElement, cursorVector: Cesium.Cartesian2) => {\n const { Cartesian2, defined, Math: CesiumMath, Matrix4, ScreenSpaceEventType, Transforms } = Cesium\n // Remove existing event handlers, if any.\n screenSpaceEventHandler.removeInputAction(ScreenSpaceEventType.MOUSE_MOVE)\n screenSpaceEventHandler.removeInputAction(ScreenSpaceEventType.LEFT_UP)\n ;(tiltMouseMoveFunction as any) = undefined\n ;(tiltMouseUpFunction as any) = undefined\n tiltInitialCursorAngle = CesiumMath.PI_OVER_TWO - Math.atan2(-cursorVector.y, cursorVector.x)\n tiltInitialCursorAngle = tiltInitialCursorAngle < 0 ? 0 : tiltInitialCursorAngle\n tiltInitialCursorAngle = tiltInitialCursorAngle > CesiumMath.PI_OVER_TWO ? CesiumMath.PI_OVER_TWO : tiltInitialCursorAngle\n isTilting = true\n const scene = vcInstance.viewer.scene\n const camera = scene.camera\n const windowPosition = new Cartesian2()\n windowPosition.x = scene.canvas.clientWidth / 2\n windowPosition.y = scene.canvas.clientHeight / 2\n let pickPosition = camera.pickEllipsoid(windowPosition, scene.globe.ellipsoid)\n if (!defined(pickPosition)) {\n for (; windowPosition.y < scene.canvas.clientHeight; ) {\n windowPosition.y += 5\n pickPosition = camera.pickEllipsoid(windowPosition, scene.globe.ellipsoid)\n }\n }\n\n const listener = getInstanceListener(vcInstance, 'compassEvt')\n listener &&\n emit('compassEvt', {\n type: 'tilt',\n camera: scene.camera,\n status: 'start',\n target: compassElement\n })\n\n isObject(pickPosition) && defined(pickPosition) && (tiltFrame = Transforms.eastNorthUpToFixedFrame(pickPosition, scene.globe.ellipsoid))\n tiltMouseMoveFunction = e => {\n isTilting = true\n const compassRectangle = compassElement.getBoundingClientRect()\n const center = new Cesium.Cartesian2(\n (compassRectangle.right - compassRectangle.left) / 2.0,\n (compassRectangle.bottom - compassRectangle.top) / 2.0\n )\n const endPosition = Cartesian2.clone(e.endPosition)\n const vector = Cartesian2.subtract(endPosition, center, vectorScratch)\n let angle = CesiumMath.PI_OVER_TWO - Math.atan2(-vector.y, vector.x)\n angle = angle < 0 ? 0 : angle\n angle = angle > CesiumMath.PI_OVER_TWO ? CesiumMath.PI_OVER_TWO : angle\n const camera = vcInstance.viewer.scene.camera\n const oldTransform = Matrix4.clone(camera.transform, oldTransformScratch)\n camera.lookAtTransform(tiltFrame)\n const rotateUpAngle = angle - tiltInitialCursorAngle\n camera.rotateUp(rotateUpAngle)\n tiltInitialCursorAngle = angle\n camera.lookAtTransform(oldTransform)\n let level = Math.ceil(angle / (Math.PI / 40))\n level = level > 19 ? 19 : level\n const position = getPoints()[level]\n tiltbarLeft.value = position.x\n tiltbarTop.value = position.y\n listener &&\n emit('compassEvt', {\n type: 'tilt',\n camera: scene.camera,\n status: 'changing',\n target: compassElement\n })\n }\n\n tiltMouseUpFunction = function (e) {\n isTilting = false\n screenSpaceEventHandler.removeInputAction(ScreenSpaceEventType.MOUSE_MOVE)\n screenSpaceEventHandler.removeInputAction(ScreenSpaceEventType.LEFT_UP)\n ;(tiltMouseMoveFunction as any) = undefined\n ;(tiltMouseUpFunction as any) = undefined\n listener &&\n emit('compassEvt', {\n type: 'tilt',\n camera: scene.camera,\n status: 'end',\n target: compassElement\n })\n }\n\n screenSpaceEventHandler.setInputAction(tiltMouseMoveFunction, ScreenSpaceEventType.MOUSE_MOVE)\n screenSpaceEventHandler.setInputAction(tiltMouseUpFunction, ScreenSpaceEventType.LEFT_UP)\n }\n\n const onTooltipBeforeShow = e => {\n if (rotateMouseMoveFunction !== undefined) {\n e.cancel = true\n }\n }\n\n const getTiltbarPosition = () => {\n const { Math: CesiumMath } = Cesium\n const pitch = CesiumMath.PI_OVER_TWO + vcInstance.viewer.scene.camera.pitch\n const length = Math.PI / 2 / 20\n let level = Math.floor(pitch / length)\n level = level > 19 ? 19 : level\n level = level < 0 ? 0 : level\n tiltbarLeft.value = getPoints()[level].x\n tiltbarTop.value = getPoints()[level].y\n }\n\n const load = async (viewer: Cesium.Viewer, el) => {\n vcInstance.viewer = viewer\n heading.value = viewer.scene.camera.heading\n viewerChange()\n screenSpaceEventHandler = new Cesium.ScreenSpaceEventHandler(el)\n getTiltbarPosition()\n return true\n }\n\n const unload = async () => {\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\n unsubscribeFromClockTick && unsubscribeFromClockTick()\n unsubscribeFromPostRender && unsubscribeFromPostRender()\n screenSpaceEventHandler?.destroy()\n return true\n }\n\n return {\n heading,\n handleDoubleClick,\n handleMouseDown,\n handleMouseUp,\n onTooltipBeforeShow,\n viewerChange,\n load,\n unload,\n tiltbarLeft,\n tiltbarTop,\n tooltipRef\n }\n}\n\nfunction getPoints() {\n return [\n {\n x: 56,\n y: 3\n },\n {\n x: 59,\n y: 4\n },\n {\n x: 64,\n y: 5\n },\n {\n x: 69,\n y: 6\n },\n {\n x: 74,\n y: 7\n },\n {\n x: 79,\n y: 9\n },\n {\n x: 84,\n y: 12\n },\n {\n x: 89,\n y: 15\n },\n {\n x: 92,\n y: 19\n },\n {\n x: 94,\n y: 20\n },\n {\n x: 99,\n y: 25\n },\n {\n x: 104,\n y: 34\n },\n {\n x: 106,\n y: 40\n },\n {\n x: 107,\n y: 44\n },\n {\n x: 107,\n y: 46\n },\n {\n x: 107,\n y: 48\n },\n {\n x: 107,\n y: 50\n },\n {\n x: 107,\n y: 52\n },\n {\n x: 107,\n y: 54\n },\n {\n x: 107,\n y: 56\n }\n ]\n}\n"],"names":["rotateFrame","scene","camera"],"mappings":"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"}