Fix #99635: Make last frame of motion path range inclusive
The issue described was that the motion path didn't display the last frame of a scene. This PR makes the user facing motion path range inclusive on both ends. E.g. when the user specifies a motion path from 1-24 the will now get all 24 frames, whereas previously the motion path would end at frame 23. This also makes the `Scene Frame Range` option work properly since that had the same issue. Now it displays the actual full scene range. Internally, the `bMotionPath` is still exclusive on the upper bound. It is just the `bAnimVizSettings` range that has been modified. Pull Request: https://projects.blender.org/blender/blender/pulls/118611
This commit is contained in:
committed by
Christoph Lendenfeld
parent
bcbd62a57e
commit
a102d3e454
@@ -141,8 +141,9 @@ bMotionPath *animviz_verify_motionpaths(ReportList *reports,
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const int expected_length = avs->path_ef - avs->path_sf;
|
||||
BLI_assert(expected_length > 0); /* Because the `if` above. */
|
||||
/* Adding 1 because the avs range is inclusive on both ends. */
|
||||
const int expected_length = (avs->path_ef - avs->path_sf) + 1;
|
||||
BLI_assert(expected_length > 1); /* Because the `if` above. */
|
||||
|
||||
/* If there is already a motionpath, just return that, provided its settings
|
||||
* are ok (saves extra free+alloc). */
|
||||
@@ -159,7 +160,7 @@ bMotionPath *animviz_verify_motionpaths(ReportList *reports,
|
||||
/* Only reuse a path if it was already a valid path, and of the expected length. */
|
||||
if (mpath->start_frame != mpath->end_frame && mpath->length == expected_length) {
|
||||
mpath->start_frame = avs->path_sf;
|
||||
mpath->end_frame = avs->path_ef;
|
||||
mpath->end_frame = avs->path_ef + 1;
|
||||
return mpath;
|
||||
}
|
||||
|
||||
@@ -173,7 +174,7 @@ bMotionPath *animviz_verify_motionpaths(ReportList *reports,
|
||||
|
||||
/* Copy mpath settings from the viz settings. */
|
||||
mpath->start_frame = avs->path_sf;
|
||||
mpath->end_frame = avs->path_ef;
|
||||
mpath->end_frame = avs->path_ef + 1;
|
||||
mpath->length = expected_length;
|
||||
|
||||
if (avs->path_bakeflag & MOTIONPATH_BAKE_HEADS) {
|
||||
|
||||
@@ -93,7 +93,7 @@ static void motion_path_get_frame_range_to_draw(bAnimVizSettings *avs,
|
||||
}
|
||||
else {
|
||||
start = avs->path_sf;
|
||||
end = avs->path_ef;
|
||||
end = avs->path_ef + 1;
|
||||
}
|
||||
|
||||
if (start > end) {
|
||||
|
||||
@@ -57,9 +57,9 @@ typedef struct bMotionPath {
|
||||
/** The number of cached verts. */
|
||||
int length;
|
||||
|
||||
/** For drawing paths, the start frame number. */
|
||||
/** For drawing paths, the start frame number. Inclusive.*/
|
||||
int start_frame;
|
||||
/** For drawing paths, the end frame number. */
|
||||
/** For drawing paths, the end frame number. Exclusive. */
|
||||
int end_frame;
|
||||
|
||||
/** Optional custom color. */
|
||||
@@ -113,7 +113,7 @@ typedef struct bAnimVizSettings {
|
||||
short path_bakeflag;
|
||||
char _pad[4];
|
||||
|
||||
/** Start and end frames of path-calculation range. */
|
||||
/** Start and end frames of path-calculation range. Both are inclusive.*/
|
||||
int path_sf, path_ef;
|
||||
/** Number of frames before/after current frame to show. */
|
||||
int path_bc, path_ac;
|
||||
|
||||
Reference in New Issue
Block a user