Animation: Move Snapping to Scene #109015

Merged
Christoph Lendenfeld merged 35 commits from ChrisLend/blender:frame_snapping into main 2023-09-05 10:07:02 +02:00
6 changed files with 20 additions and 20 deletions
Showing only changes of commit d9a28d7aad - Show all commits

View File

@ -308,7 +308,10 @@ class DOPESHEET_PT_snapping(Panel):
layout = self.layout
col = layout.column()
col.label(text="Snap To")
col.prop(context.tool_settings, "snap_anim_element", expand=True)
tool_settings = context.tool_settings
col.prop(tool_settings, "snap_anim_element", expand=True)
if tool_settings.snap_anim_element not in ('MARKER', ):
col.prop(tool_settings, "use_snap_time_absolute")
class DOPESHEET_PT_proportional_edit(Panel):

View File

@ -112,7 +112,7 @@ class GRAPH_PT_snapping(Panel):
col.label(text="Snap To")
tool_settings = context.tool_settings
col.prop(tool_settings, "snap_anim_element", expand=True)
if tool_settings.snap_anim_element in ('FRAME', 'SECOND'):
if tool_settings.snap_anim_element not in ('MARKER', ):
col.prop(tool_settings, "use_snap_time_absolute")

View File

@ -53,7 +53,10 @@ class NLA_PT_snapping(Panel):
layout = self.layout
col = layout.column()
col.label(text="Snap To")
col.prop(context.tool_settings, "snap_anim_element", expand=True)
tool_settings = context.tool_settings
col.prop(tool_settings, "snap_anim_element", expand=True)
if tool_settings.snap_anim_element not in ('MARKER', ):
col.prop(tool_settings, "use_snap_time_absolute")
class NLA_PT_filters(DopesheetFilterPopoverBase, Panel):
@ -370,6 +373,7 @@ classes = (
NLA_MT_channel_context_menu,
NLA_PT_filters,
NLA_PT_action,
NLA_PT_snapping,
)
if __name__ == "__main__": # only for live edit.

View File

@ -622,13 +622,13 @@ static void recalcData_actedit(TransInfo *t)
/* Flush 2d vector. */
TransDataContainer *tc = TRANS_DATA_CONTAINER_FIRST_SINGLE(t);
eSnapMode autosnap = t->tsnap.mode;
eSnapMode snap_mode = t->tsnap.mode;
TransData *td;
TransData2D *td2d;
int i = 0;
for (td = tc->data, td2d = tc->data_2d; i < tc->data_len; i++, td++, td2d++) {
if (t->tsnap.flag && (t->state != TRANS_CANCEL) && !(td->flag & TD_NOTIMESNAP)) {
transform_snap_anim_flush_data(t, td, eSnapMode(autosnap), td->loc);
transform_snap_anim_flush_data(t, td, snap_mode, td->loc);
}
/* Constrain Y. */

View File

@ -43,30 +43,26 @@ static void headerTimeTranslate(TransInfo *t, char str[UI_MAX_DRAW_STR])
outputNumInput(&(t->num), tvec, &t->scene->unit);
}
else {
eSnapMode autosnap = t->tsnap.mode;
eSnapMode snap_mode = t->tsnap.mode;
float ival = TRANS_DATA_CONTAINER_FIRST_OK(t)->data->ival;
float val = ival + t->values_final[0];
snapFrameTransform(t, autosnap, ival, val, &val);
snapFrameTransform(t, snap_mode, ival, val, &val);
float delta_x = val - ival;
if (ELEM(autosnap, SACTSNAP_SECOND, SACTSNAP_TSTEP)) {
if (ELEM(snap_mode, SCE_SNAP_TO_SECOND)) {
nathanvegdahl marked this conversation as resolved Outdated

Probably this can just be snap_mode == SCE_SNAP_TO_SECOND now.

Probably this can just be `snap_mode == SCE_SNAP_TO_SECOND` now.
/* Convert to seconds. */
const Scene *scene = t->scene;
const double secf = FPS;
delta_x /= secf;
val /= secf;
delta_x /= FPS;
val /= FPS;
}
if (autosnap == SACTSNAP_FRAME) {
if (snap_mode == SCE_SNAP_TO_FRAME) {
BLI_snprintf(&tvec[0], NUM_STR_REP_LEN, "%.2f (%.4f)", delta_x, val);
}
else if (autosnap == SACTSNAP_SECOND) {
else if (snap_mode == SCE_SNAP_TO_SECOND) {
BLI_snprintf(&tvec[0], NUM_STR_REP_LEN, "%.2f sec (%.4f)", delta_x, val);
}
else if (autosnap == SACTSNAP_TSTEP) {
BLI_snprintf(&tvec[0], NUM_STR_REP_LEN, "%.4f sec", delta_x);
}
else {
BLI_snprintf(&tvec[0], NUM_STR_REP_LEN, "%.4f", delta_x);
}

View File

@ -148,7 +148,7 @@ bool transformModeUseSnap(const TransInfo *t)
if (t->mode == TFM_RESIZE) {
return (ts->snap_transform_mode_flag & SCE_SNAP_TRANSFORM_MODE_SCALE) != 0;
}
if (ELEM(t->mode, TFM_VERT_SLIDE, TFM_EDGE_SLIDE, TFM_SEQ_SLIDE)) {
if (ELEM(t->mode, TFM_VERT_SLIDE, TFM_EDGE_SLIDE, TFM_SEQ_SLIDE, TFM_TIME_TRANSLATE)) {
return true;
}
@ -784,9 +784,6 @@ static void initSnappingMode(TransInfo *t)
t->tsnap.seq_context = transform_snap_sequencer_data_alloc(t);
}
}
else if (ELEM(t->spacetype, SPACE_GRAPH, SPACE_NLA, SPACE_ACTION)) {
t->tsnap.mode = snap_mode_from_spacetype(t);
}
}
void initSnapping(TransInfo *t, wmOperator *op)