Class KeyframesManager
java.lang.Object
gaiasky.util.camera.rec.KeyframesManager
- All Implemented Interfaces:
IObserver
Manages the camera keyframes in Gaia Sky, providing functionality for creating, loading, saving, and exporting
camera paths. This class acts as a central hub for camera recording and playback operations, coordinating
between the user interface, the camera system, and external processing scripts.
Key responsibilities include:
- Keyframe Management: Maintaining a synchronized list of
Keyframeobjects that define camera position, orientation, and timing. - Persistence: Loading from and saving to
.gkf(Gaia Sky Keyframes) files. - Path Generation: Converting keyframes into smooth camera paths using different interpolation methods such as Linear, Catmull-Rom Spline, or B-Spline.
- Playback Control: Managing the
Camcorder.RecorderState(IDLE, PLAYING, STEPPING) and advancing the camera along the path frame by frame. - External Integration: Providing an interface to run the
OptFlowCamPython script for advanced camera path optimization and conversion. - Event Handling: Implementing
IObserverto respond to system-wide events like saving, exporting, or frame updates.
This class follows the Singleton pattern, accessible via the instance field.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classstatic enum -
Field Summary
FieldsModifier and TypeFieldDescriptionThe current camera path, used for direct playback.Reference to current camera orientation.static KeyframesManagerSingleton.Current keyframes.Reference to current camera position.Play state.Reference to current time.Reference to current camera orientation. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbooleanChecks that all keyframe timings fall perfectly on a frame, so that t(kf) * FPS % 1 = 0 holds.voidclean()Cleans the current configuration of keyframes.voidexportKeyframesFile(List<Keyframe> keyframes, String fileName, boolean overwrite) longGets the frame number of the given keyframe using the current target frame rate setting.static voidbooleanisIdle()booleanbooleanloadKeyframesFile(Path file) voidEvent notification call.voidpause()Sets the manager in pause mode.voidplay()Sets the manager in play mode.voidRe-generates the camera path object from the current keyframes list.voidrunOptFlowCamScript(Path scriptLocation, Path outputFile, boolean overwrite) Runs the OptFlowCam script at the given location with the current keyframes, with the given output file.double[]samplePaths(com.badlogic.gdx.utils.Array<com.badlogic.gdx.utils.Array<Vector3D>> pointsSep, double[] points, int samplesPerSegment, KeyframesManager.PathType pathType) voidsaveKeyframesFile(List<Keyframe> keyframes, String fileName, boolean overwrite, boolean notification) voidskip(long frame) Skips to the given frame.voidstepping()Sets the manager in stepping mode.
-
Field Details
-
instance
Singleton. -
keyframes
-
pos
Reference to current camera position. -
dir
Reference to current camera orientation. -
up
Reference to current camera orientation. -
t
Reference to current time. -
currentPath
The current camera path, used for direct playback. -
state
Play state.
-
-
Constructor Details
-
KeyframesManager
public KeyframesManager()
-
-
Method Details
-
initialize
public static void initialize() -
regenerateCameraPath
public void regenerateCameraPath()Re-generates the camera path object from the current keyframes list. -
clean
public void clean()Cleans the current configuration of keyframes. -
getFrameNumber
Gets the frame number of the given keyframe using the current target frame rate setting.- Parameters:
kf- The keyframe.- Returns:
- The frame number corresponding to exactly this keyframe if the keyframe is valid and in the keyframes list, otherwise -1. The frame number is in [0,n-1].
-
loadKeyframesFile
- Throws:
RuntimeException
-
saveKeyframesFile
-
samplePaths
public double[] samplePaths(com.badlogic.gdx.utils.Array<com.badlogic.gdx.utils.Array<Vector3D>> pointsSep, double[] points, int samplesPerSegment, KeyframesManager.PathType pathType) -
exportKeyframesFile
-
play
public void play()Sets the manager in play mode. -
isPlaying
public boolean isPlaying() -
pause
public void pause()Sets the manager in pause mode. -
isIdle
public boolean isIdle() -
stepping
public void stepping()Sets the manager in stepping mode. -
isStepping
public boolean isStepping() -
skip
public void skip(long frame) Skips to the given frame.- Parameters:
frame- The frame number.
-
checkKeyframeTimings
public boolean checkKeyframeTimings()Checks that all keyframe timings fall perfectly on a frame, so that t(kf) * FPS % 1 = 0 holds.- Returns:
- True if the keyframe timings are consistent with the camcorder FPS setting.
-
runOptFlowCamScript
Runs the OptFlowCam script at the given location with the current keyframes, with the given output file. This version checks for Python/Pipenv, installs dependencies, and then runs the script.- Parameters:
scriptLocation- The location of the OptFlowCam script. This location must contain aoptflowcam_convert.pyfile.outputFile- Path to the output camera path (.gsc) file.overwrite- Whether to overwrite the output file if it exists. If false, a new file name will be created from the provided one.
-
notify
-