Page MenuHome

Dope Sheet: rewrite computation of keyframe hold blocks.
ClosedPublic

Authored by Alexander Gavrilov (angavrilov) on Oct 13 2018, 7:23 PM.

Details

Summary

Computation of hold blocks was done by storing ranges (with start and
an end, and likely overlapping) in a tree keyed only by the block start.
This cannot work well, and there even were comments that it is not
reliable in complex cases.

A much better way to deal with it is to split all ranges so they don't
overlap. The most thorough way of doing this is to split at all and every
known keyframe, and in this case the data can actually be stored in the
key column data structures, avoiding the need for a second tree.

In practice, splitting requires a pass to copy this data to newly added
keys, and the necessity to loop over all keyframes in the range being
added. Both are linear and don't add excess algorithmic complexity.

Diff Detail

Repository
rB Blender
Branch
temp-angavrilov-keyblock-refactor (branched from blender2.8)
Build Status
Buildable 2227
Build 2227: arc lint + arc unit

Event Timeline

Adding annotations for interpolation would require a robust way to compute summaries for information located between keyframes. Currently there already is such information, namely holds; but the approach leaves much to be desired. This is intended as a technical rewrite to create a robust approach, but it fixes a small copy&paste bug with hold line thickness.

From a UI perspective, this seems good. Accepted.

This revision is now accepted and ready to land.Oct 15 2018, 11:48 AM
This revision was automatically updated to reflect the committed changes.