subclip static method
AnimationClip
subclip(
- AnimationClip sourceClip,
- String name,
- int startFrame,
- int endFrame, {
- int fps = 30,
Creates a new clip, containing only the segment of the original clip between the given frames.
Implementation
static AnimationClip subclip(AnimationClip sourceClip, String name, int startFrame, int endFrame, {int fps = 30}) {
final clip = sourceClip.clone();
clip.name = name;
final List<KeyframeTrack> tracks = [];
for (int i = 0; i < clip.tracks.length; ++i) {
final track = clip.tracks[i];
final valueSize = track.getValueSize();
final List<num> times = [];
final List<num> values = [];
for (int j = 0; j < track.times.length; ++j) {
final frame = track.times[j] * fps;
if (frame < startFrame || frame >= endFrame) continue;
times.add(track.times[j]);
for (int k = 0; k < valueSize; ++k) {
values.add(track.values[j * valueSize + k]);
}
}
if (times.isEmpty) continue;
track.times = times;//AnimationUtils.convertArray(times, track.times.runtimeType.toString());
track.values = values;//AnimationUtils.convertArray(values, track.values.runtimeType.toString());
tracks.add(track);
}
clip.tracks = tracks;
// find minimum .times value across all tracks in the trimmed clip
double minStartTime = double.infinity;
for (int i = 0; i < clip.tracks.length; ++i) {
if (minStartTime > clip.tracks[i].times[0]) {
minStartTime = clip.tracks[i].times[0].toDouble();
}
}
// shift all tracks such that clip begins at t=0
for (int i = 0; i < clip.tracks.length; ++i) {
clip.tracks[i].shift(-1 * minStartTime);
}
clip.resetDuration();
return clip;
}