GPencil: New option to set steps in Interpolate Sequence
Sometimes interpolate all frames is not convenient and it's better, for example, interpolate in twos. The new parameter allows to define the number of frame for each step, by default is set to 1 as before. {F8812621} This is a request of animators to improve interpolate tools. Reviewed By: mendio Maniphest Tasks: T80190 Differential Revision: https://developer.blender.org/D8723 239b0b
This commit is contained in:
parent
767916eefc
commit
97871e16ff
Notes:
blender-bot
2023-04-04 07:45:26 +02:00
Referenced by issue #80190, GPencil: Add Step option to Interpolate Sequence
|
@ -1702,6 +1702,7 @@ class VIEW3D_PT_tools_grease_pencil_interpolate(Panel):
|
|||
|
||||
col = layout.column(align=True)
|
||||
col.label(text="Sequence Options:")
|
||||
col.prop(settings, "step")
|
||||
col.prop(settings, "type")
|
||||
if settings.type == 'CUSTOM':
|
||||
# TODO: Options for loading/saving curve presets?
|
||||
|
|
|
@ -546,6 +546,14 @@ void blo_do_versions_290(FileData *fd, Library *UNUSED(lib), Main *bmain)
|
|||
* \note Keep this message at the bottom of the function.
|
||||
*/
|
||||
{
|
||||
/* Set the minimum sequence interpolate for grease pencil. */
|
||||
if (!DNA_struct_elem_find(fd->filesdna, "GP_Interpolate_Settings", "int", "step")) {
|
||||
LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
|
||||
ToolSettings *ts = scene->toolsettings;
|
||||
ts->gp_interpolate.step = 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* Keep this block, even when empty. */
|
||||
}
|
||||
}
|
||||
|
|
|
@ -949,6 +949,7 @@ static int gpencil_interpolate_seq_exec(bContext *C, wmOperator *op)
|
|||
|
||||
GP_Interpolate_Settings *ipo_settings = &ts->gp_interpolate;
|
||||
eGP_Interpolate_SettingsFlag flag = ipo_settings->flag;
|
||||
const int step = ipo_settings->step;
|
||||
|
||||
/* cannot interpolate if not between 2 frames */
|
||||
if (ELEM(NULL, actframe, actframe->next)) {
|
||||
|
@ -990,7 +991,7 @@ static int gpencil_interpolate_seq_exec(bContext *C, wmOperator *op)
|
|||
nextFrame = gpl->actframe->next;
|
||||
|
||||
/* Loop over intermediary frames and create the interpolation */
|
||||
for (cframe = prevFrame->framenum + 1; cframe < nextFrame->framenum; cframe++) {
|
||||
for (cframe = prevFrame->framenum + step; cframe < nextFrame->framenum; cframe += step) {
|
||||
bGPDframe *interFrame = NULL;
|
||||
float factor;
|
||||
|
||||
|
|
|
@ -1137,6 +1137,9 @@ typedef struct GP_Interpolate_Settings {
|
|||
float back;
|
||||
/** BEZT_IPO_ELASTIC. */
|
||||
float amplitude, period;
|
||||
/* Step between sequence interpolated frames. */
|
||||
int step;
|
||||
char _pad[4];
|
||||
|
||||
/** Custom interpolation curve (for use with GP_IPO_CURVEMAP). */
|
||||
struct CurveMapping *custom_ipo;
|
||||
|
|
|
@ -2631,6 +2631,12 @@ static void rna_def_gpencil_interpolate(BlenderRNA *brna)
|
|||
prop, "Type", "Interpolation method to use the next time 'Interpolate Sequence' is run");
|
||||
RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL);
|
||||
|
||||
prop = RNA_def_property(srna, "step", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_range(prop, 1, MAXFRAME);
|
||||
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||
RNA_def_property_ui_text(prop, "Step", "Number of frames between generated interpolated frames");
|
||||
RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL);
|
||||
|
||||
/* easing */
|
||||
prop = RNA_def_property(srna, "easing", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_sdna(prop, NULL, "easing");
|
||||
|
|
Loading…
Reference in New Issue