casc-cesium
Version:
Vue 3.x components for CesiumJS.
1 lines • 30.8 kB
Source Map (JSON)
{"version":3,"file":"CameraFlightPath.mjs","sources":["../../../../../../packages/components/controls/compass/CameraFlightPath.ts"],"sourcesContent":["import { AnyFunction } from 'casc-cesium-utils/types'\n/**\n * Creates tweens for camera flights.\n * <br /><br />\n * Mouse interaction is disabled during flights.\n *\n * @private\n */\nclass CameraFlightPath {\n static createTween(scene, options) {\n const { Cartesian2, Cartesian3, defaultValue, defined, DeveloperError, EasingFunction, Math: CesiumMath, SceneMode } = Cesium\n options = defaultValue(options, {})\n let destination = options.destination\n\n // >>includeStart('debug', pragmas.debug);\n if (!defined(scene)) {\n throw new DeveloperError('scene is required.')\n }\n if (!defined(destination)) {\n throw new DeveloperError('destination is required.')\n }\n // >>includeEnd('debug');\n const mode = scene.mode\n\n if (mode === SceneMode.MORPHING) {\n return emptyFlight()\n }\n\n const convert = defaultValue(options.convert, true)\n const projection = scene.mapProjection\n const ellipsoid = projection.ellipsoid\n const maximumHeight = options.maximumHeight\n const flyOverLongitude = options.flyOverLongitude\n const flyOverLongitudeWeight = options.flyOverLongitudeWeight\n const pitchAdjustHeight = options.pitchAdjustHeight\n let easingFunction = options.easingFunction\n\n if (convert && mode !== SceneMode.SCENE3D) {\n ellipsoid.cartesianToCartographic(destination, scratchCartographic)\n destination = projection.project(scratchCartographic, scratchDestination)\n }\n\n const camera = scene.camera\n const transform = options.endTransform\n if (defined(transform)) {\n camera._setTransform(transform)\n }\n\n let duration = options.duration\n if (!defined(duration)) {\n duration = Math.ceil(Cartesian3.distance(camera.position, destination) / 1000000.0) + 2.0\n duration = Math.min(duration, 3.0)\n }\n\n const heading = defaultValue(options.heading, 0.0)\n const pitch = defaultValue(options.pitch, -CesiumMath.PI_OVER_TWO)\n const roll = defaultValue(options.roll, 0.0)\n\n const controller = scene.screenSpaceCameraController\n controller.enableInputs = false\n\n const complete = wrapCallback(controller, options.complete)\n const cancel = wrapCallback(controller, options.cancel)\n\n const frustum = camera.frustum\n\n let empty = scene.mode === SceneMode.SCENE2D\n empty = empty && Cartesian2.equalsEpsilon(camera.position, destination, CesiumMath.EPSILON6)\n empty =\n empty && CesiumMath.equalsEpsilon(Math.max(frustum.right - frustum.left, frustum.top - frustum.bottom), destination.z, CesiumMath.EPSILON6)\n\n empty = empty || (scene.mode !== SceneMode.SCENE2D && Cartesian3.equalsEpsilon(destination, camera.position, CesiumMath.EPSILON10))\n\n empty =\n empty &&\n CesiumMath.equalsEpsilon(CesiumMath.negativePiToPi(heading), CesiumMath.negativePiToPi(camera.heading), CesiumMath.EPSILON10) &&\n CesiumMath.equalsEpsilon(CesiumMath.negativePiToPi(pitch), CesiumMath.negativePiToPi(camera.pitch), CesiumMath.EPSILON10) &&\n CesiumMath.equalsEpsilon(CesiumMath.negativePiToPi(roll), CesiumMath.negativePiToPi(camera.roll), CesiumMath.EPSILON10)\n\n if (empty) {\n return emptyFlight(complete, cancel)\n }\n\n const updateFunctions = new Array(4)\n updateFunctions[SceneMode.SCENE2D] = createUpdate2D\n updateFunctions[SceneMode.SCENE3D] = createUpdate3D\n updateFunctions[SceneMode.COLUMBUS_VIEW] = createUpdateCV\n\n if (duration <= 0.0) {\n const newOnComplete = function () {\n const update = updateFunctions[mode](\n scene,\n 1.0,\n destination,\n heading,\n pitch,\n roll,\n maximumHeight,\n flyOverLongitude,\n flyOverLongitudeWeight,\n pitchAdjustHeight\n )\n update({ time: 1.0 })\n\n if (typeof complete === 'function') {\n complete()\n }\n }\n return emptyFlight(newOnComplete, cancel)\n }\n\n const update = updateFunctions[mode](\n scene,\n duration,\n destination,\n heading,\n pitch,\n roll,\n maximumHeight,\n flyOverLongitude,\n flyOverLongitudeWeight,\n pitchAdjustHeight\n )\n\n if (!defined(easingFunction)) {\n const startHeight = camera.positionCartographic.height\n const endHeight = mode === SceneMode.SCENE3D ? ellipsoid.cartesianToCartographic(destination).height : destination.z\n\n if (startHeight > endHeight && startHeight > 11500.0) {\n easingFunction = EasingFunction.CUBIC_OUT\n } else {\n easingFunction = EasingFunction.QUINTIC_IN_OUT\n }\n }\n\n return {\n duration: duration,\n easingFunction: easingFunction,\n startObject: {\n time: 0.0\n },\n stopObject: {\n time: duration\n },\n update: update,\n complete: complete,\n cancel: cancel\n }\n }\n}\n\nfunction getAltitude(frustum, dx, dy) {\n const { PerspectiveFrustum, PerspectiveOffCenterFrustum } = Cesium\n let near\n let top\n let right\n if (frustum instanceof PerspectiveFrustum) {\n const tanTheta = Math.tan(0.5 * frustum.fovy)\n near = frustum.near\n top = frustum.near * tanTheta\n right = frustum.aspectRatio * top\n return Math.max((dx * near) / right, (dy * near) / top)\n } else if (frustum instanceof PerspectiveOffCenterFrustum) {\n near = frustum.near\n top = frustum.top\n right = frustum.right\n return Math.max((dx * near) / right, (dy * near) / top)\n }\n\n return Math.max(dx, dy)\n}\n\nconst scratchCart: any = {}\nconst scratchCart2: any = {}\n\nfunction createPitchFunction(startPitch, endPitch, heightFunction, pitchAdjustHeight) {\n const { defined, Math: CesiumMath } = Cesium\n if (defined(pitchAdjustHeight) && heightFunction(0.5) > pitchAdjustHeight) {\n const startHeight = heightFunction(0.0)\n const endHeight = heightFunction(1.0)\n const middleHeight = heightFunction(0.5)\n\n const d1 = middleHeight - startHeight\n const d2 = middleHeight - endHeight\n\n return function (time) {\n const altitude = heightFunction(time)\n if (time <= 0.5) {\n const t1 = (altitude - startHeight) / d1\n return CesiumMath.lerp(startPitch, -CesiumMath.PI_OVER_TWO, t1)\n }\n\n const t2 = (altitude - endHeight) / d2\n return CesiumMath.lerp(-CesiumMath.PI_OVER_TWO, endPitch, 1 - t2)\n }\n }\n return function (time) {\n return CesiumMath.lerp(startPitch, endPitch, time)\n }\n}\n\nfunction createHeightFunction(\n camera: Cesium.Camera,\n destination: Cesium.Cartesian3,\n startHeight: number,\n endHeight: number,\n optionAltitude\n): AnyFunction<any> {\n const { Cartesian3, defined, Math: CesiumMath } = Cesium\n let altitude = optionAltitude\n const maxHeight = Math.max(startHeight, endHeight)\n\n if (!defined(altitude)) {\n const start = camera.position\n const end = destination\n const up = camera.up\n const right = camera.right\n const frustum = camera.frustum\n\n const diff = Cartesian3.subtract(start, end, scratchCart)\n const verticalDistance = Cartesian3.magnitude(Cartesian3.multiplyByScalar(up, Cartesian3.dot(diff, up), scratchCart2))\n const horizontalDistance = Cartesian3.magnitude(Cartesian3.multiplyByScalar(right, Cartesian3.dot(diff, right), scratchCart2))\n\n altitude = Math.min(getAltitude(frustum, verticalDistance, horizontalDistance) * 0.2, 1000000000.0)\n }\n\n if (maxHeight < altitude) {\n const power = 8.0\n const factor = 1000000.0\n\n const s = -Math.pow((altitude - startHeight) * factor, 1.0 / power)\n const e = Math.pow((altitude - endHeight) * factor, 1.0 / power)\n\n return function (t) {\n const x = t * (e - s) + s\n return -Math.pow(x, power) / factor + altitude\n }\n }\n\n return function (t) {\n return CesiumMath.lerp(startHeight, endHeight, t)\n }\n}\n\nfunction adjustAngleForLERP(startAngle: number, endAngle: number) {\n const { Math: CesiumMath } = Cesium\n if (CesiumMath.equalsEpsilon(startAngle, CesiumMath.TWO_PI, CesiumMath.EPSILON11)) {\n startAngle = 0.0\n }\n\n if (endAngle > startAngle + Math.PI) {\n startAngle += CesiumMath.TWO_PI\n } else if (endAngle < startAngle - Math.PI) {\n startAngle -= CesiumMath.TWO_PI\n }\n\n return startAngle\n}\n\nconst scratchStart: any = {}\n\nfunction createUpdateCV(\n scene: Cesium.Scene,\n duration: number,\n destination: Cesium.Cartesian3,\n heading: number,\n pitch: number,\n roll: number,\n optionAltitude\n) {\n const { Cartesian2, Cartesian3, Math: CesiumMath } = Cesium\n const camera = scene.camera\n\n const start = Cartesian3.clone(camera.position, scratchStart)\n const startPitch = camera.pitch\n const startHeading = adjustAngleForLERP(camera.heading, heading)\n const startRoll = adjustAngleForLERP(camera.roll, roll)\n\n const heightFunction = createHeightFunction(camera, destination, start.z, destination.z, optionAltitude)\n\n function update(value) {\n const time = value.time / duration\n\n camera.setView({\n orientation: {\n heading: CesiumMath.lerp(startHeading, heading, time),\n pitch: CesiumMath.lerp(startPitch, pitch, time),\n roll: CesiumMath.lerp(startRoll, roll, time)\n }\n })\n\n Cartesian2.lerp(start, destination, time, camera.position)\n camera.position.z = heightFunction(time)\n }\n return update\n}\n\nfunction useLongestFlight(startCart, destCart) {\n const { Math: CesiumMath } = Cesium\n if (startCart.longitude < destCart.longitude) {\n startCart.longitude += CesiumMath.TWO_PI\n } else {\n destCart.longitude += CesiumMath.TWO_PI\n }\n}\n\nfunction useShortestFlight(startCart, destCart) {\n const { Math: CesiumMath } = Cesium\n const diff = startCart.longitude - destCart.longitude\n if (diff < -CesiumMath.PI) {\n startCart.longitude += CesiumMath.TWO_PI\n } else if (diff > CesiumMath.PI) {\n destCart.longitude += CesiumMath.TWO_PI\n }\n}\n\nconst scratchStartCart: any = {}\nconst scratchEndCart: any = {}\n\nfunction createUpdate3D(\n scene: Cesium.Scene,\n duration,\n destination,\n heading,\n pitch,\n roll,\n optionAltitude,\n optionFlyOverLongitude,\n optionFlyOverLongitudeWeight,\n optionPitchAdjustHeight\n) {\n const { Cartesian3, Cartographic, defined, Math: CesiumMath } = Cesium\n const camera = scene.camera\n const projection = scene.mapProjection\n const ellipsoid = projection.ellipsoid\n\n const startCart = Cartographic.clone(camera.positionCartographic, scratchStartCart)\n const startPitch = camera.pitch\n const startHeading = adjustAngleForLERP(camera.heading, heading)\n const startRoll = adjustAngleForLERP(camera.roll, roll)\n\n const destCart = ellipsoid.cartesianToCartographic(destination, scratchEndCart)\n startCart.longitude = CesiumMath.zeroToTwoPi(startCart.longitude)\n destCart.longitude = CesiumMath.zeroToTwoPi(destCart.longitude)\n\n let useLongFlight = false\n\n if (defined(optionFlyOverLongitude)) {\n const hitLon = CesiumMath.zeroToTwoPi(optionFlyOverLongitude)\n\n const lonMin = Math.min(startCart.longitude, destCart.longitude)\n const lonMax = Math.max(startCart.longitude, destCart.longitude)\n\n const hitInside = hitLon >= lonMin && hitLon <= lonMax\n\n if (defined(optionFlyOverLongitudeWeight)) {\n // Distance inside (0...2Pi)\n const din = Math.abs(startCart.longitude - destCart.longitude)\n // Distance outside (0...2Pi)\n const dot = CesiumMath.TWO_PI - din\n\n const hitDistance = hitInside ? din : dot\n const offDistance = hitInside ? dot : din\n\n if (hitDistance < offDistance * optionFlyOverLongitudeWeight && !hitInside) {\n useLongFlight = true\n }\n } else if (!hitInside) {\n useLongFlight = true\n }\n }\n\n if (useLongFlight) {\n useLongestFlight(startCart, destCart)\n } else {\n useShortestFlight(startCart, destCart)\n }\n\n const heightFunction = createHeightFunction(camera, destination, startCart.height, destCart.height, optionAltitude)\n const pitchFunction = createPitchFunction(startPitch, pitch, heightFunction, optionPitchAdjustHeight)\n\n // Isolate scope for update function.\n // to have local copies of vars used in lerp\n // Othervise, if you call nex\n // createUpdate3D (createAnimationTween)\n // before you played animation, variables will be overwriten.\n function isolateUpdateFunction() {\n const startLongitude = startCart.longitude\n const destLongitude = destCart.longitude\n const startLatitude = startCart.latitude\n const destLatitude = destCart.latitude\n\n return function update(value) {\n const time = value.time / duration\n\n const position = Cartesian3.fromRadians(\n CesiumMath.lerp(startLongitude, destLongitude, time),\n CesiumMath.lerp(startLatitude, destLatitude, time),\n heightFunction(time),\n scene.globe.ellipsoid\n )\n\n camera.setView({\n destination: position,\n orientation: {\n heading: CesiumMath.lerp(startHeading, heading, time),\n pitch: pitchFunction(time),\n roll: CesiumMath.lerp(startRoll, roll, time)\n }\n })\n }\n }\n return isolateUpdateFunction()\n}\n\nfunction createUpdate2D(scene, duration, destination, heading, pitch, roll, optionAltitude) {\n const { Cartesian2, Cartesian3, Math: CesiumMath } = Cesium\n const camera = scene.camera\n\n const start = Cartesian3.clone(camera.position, scratchStart)\n const startHeading = adjustAngleForLERP(camera.heading, heading)\n\n const startHeight = camera.frustum.right - camera.frustum.left\n const heightFunction = createHeightFunction(camera, destination, startHeight, destination.z, optionAltitude)\n\n function update(value) {\n const time = value.time / duration\n\n camera.setView({\n orientation: {\n heading: CesiumMath.lerp(startHeading, heading, time)\n }\n })\n\n Cartesian2.lerp(start, destination, time, camera.position)\n\n const zoom = heightFunction(time)\n\n const frustum = camera.frustum\n const ratio = frustum.top / frustum.right\n\n const incrementAmount = (zoom - (frustum.right - frustum.left)) * 0.5\n frustum.right += incrementAmount\n frustum.left -= incrementAmount\n frustum.top = ratio * frustum.right\n frustum.bottom = -frustum.top\n }\n return update\n}\n\nconst scratchCartographic = {}\nconst scratchDestination = {}\n\nfunction emptyFlight(complete?, cancel?) {\n return {\n startObject: {},\n stopObject: {},\n duration: 0.0,\n complete: complete,\n cancel: cancel\n }\n}\n\nfunction wrapCallback(controller, cb) {\n function wrapped() {\n if (typeof cb === 'function') {\n cb()\n }\n\n controller.enableInputs = true\n }\n return wrapped\n}\n\nexport default CameraFlightPath\n"],"names":[],"mappings":"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"}