GPencil: New filter in Onion by keyframe type

This new filter allows to select only some type of keyframe (keyframe, breakdown, etc).

This was a request of artists that are used to work with other 2D softwares.

Also some cleanup to remove aninmatable option to some properties.
This commit is contained in:
Antonio Vazquez 2019-05-16 14:00:31 +02:00
parent 86eefefdc1
commit c0d743238d
4 changed files with 57 additions and 1 deletions

View File

@ -258,6 +258,7 @@ class DATA_PT_gpencil_onion_skinning(DataButtonsPanel, Panel):
col = layout.column()
col.prop(gpd, "onion_mode")
col.prop(gpd, "onion_factor", text="Opacity", slider=True)
col.prop(gpd, "onion_keyframe_type")
if gpd.onion_mode == 'ABSOLUTE':
col = layout.column(align=True)

View File

@ -1229,6 +1229,7 @@ static void gpencil_draw_onionskins(GpencilBatchCache *cache,
int last = gpf->framenum;
colflag = (bool)gpd->onion_flag & GP_ONION_GHOST_PREVCOL;
const short onion_keytype = gpd->onion_keytype;
/* -------------------------------
* 1) Draw Previous Frames First
@ -1249,6 +1250,10 @@ static void gpencil_draw_onionskins(GpencilBatchCache *cache,
if ((mode == GP_ONION_MODE_SELECTED) && ((gf->flag & GP_FRAME_SELECT) == 0)) {
continue;
}
/* verify keyframe type */
if ((onion_keytype > -1) && (gf->key_type != onion_keytype)) {
continue;
}
/* absolute range */
if (mode == GP_ONION_MODE_ABSOLUTE) {
if ((gpf->framenum - gf->framenum) > step) {
@ -1305,6 +1310,10 @@ static void gpencil_draw_onionskins(GpencilBatchCache *cache,
if ((mode == GP_ONION_MODE_SELECTED) && ((gf->flag & GP_FRAME_SELECT) == 0)) {
continue;
}
/* verify keyframe type */
if ((onion_keytype > -1) && (gf->key_type != onion_keytype)) {
continue;
}
/* absolute range */
if (mode == GP_ONION_MODE_ABSOLUTE) {
if ((gf->framenum - gpf->framenum) > step) {

View File

@ -518,7 +518,8 @@ typedef struct bGPdata {
/** Draw mode for strokes (eGP_DrawMode). */
short draw_mode;
char _pad3[2];
/** Keyframe type for onion filter (eBezTriple_KeyframeType plus All option) */
short onion_keytype;
bGPgrid grid;

View File

@ -76,6 +76,36 @@ static EnumPropertyItem rna_enum_gpencil_onion_modes_items[] = {
{0, NULL, 0, NULL, NULL},
};
const EnumPropertyItem rna_enum_onion_keyframe_type_items[] = {
{-1, "ALL", ICON_ACTION, "All Types", "Include all Keyframe types"},
{BEZT_KEYTYPE_KEYFRAME,
"KEYFRAME",
ICON_KEYTYPE_KEYFRAME_VEC,
"Keyframe",
"Normal keyframe - e.g. for key poses"},
{BEZT_KEYTYPE_BREAKDOWN,
"BREAKDOWN",
ICON_KEYTYPE_BREAKDOWN_VEC,
"Breakdown",
"A breakdown pose - e.g. for transitions between key poses"},
{BEZT_KEYTYPE_MOVEHOLD,
"MOVING_HOLD",
ICON_KEYTYPE_MOVING_HOLD_VEC,
"Moving Hold",
"A keyframe that is part of a moving hold"},
{BEZT_KEYTYPE_EXTREME,
"EXTREME",
ICON_KEYTYPE_EXTREME_VEC,
"Extreme",
"An 'extreme' pose, or some other purpose as needed"},
{BEZT_KEYTYPE_JITTER,
"JITTER",
ICON_KEYTYPE_JITTER_VEC,
"Jitter",
"A filler or baked keyframe for keying on ones, or some other purpose as needed"},
{0, NULL, 0, NULL, NULL},
};
static const EnumPropertyItem rna_enum_gplayer_move_type_items[] = {
{-1, "UP", 0, "Up", ""},
{1, "DOWN", 0, "Down", ""},
@ -1737,6 +1767,7 @@ static void rna_def_gpencil_data(BlenderRNA *brna)
RNA_def_property_int_sdna(prop, NULL, "gstep");
RNA_def_property_range(prop, 0, 120);
RNA_def_property_int_default(prop, 1);
RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0);
RNA_def_property_ui_text(prop,
"Frames Before",
"Maximum number of frames to show before current frame "
@ -1747,6 +1778,7 @@ static void rna_def_gpencil_data(BlenderRNA *brna)
RNA_def_property_int_sdna(prop, NULL, "gstep_next");
RNA_def_property_range(prop, 0, 120);
RNA_def_property_int_default(prop, 1);
RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0);
RNA_def_property_ui_text(prop,
"Frames After",
"Maximum number of frames to show after current frame "
@ -1756,6 +1788,7 @@ static void rna_def_gpencil_data(BlenderRNA *brna)
prop = RNA_def_property(srna, "use_ghost_custom_colors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(
prop, NULL, "onion_flag", GP_ONION_GHOST_PREVCOL | GP_ONION_GHOST_NEXTCOL);
RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0);
RNA_def_property_ui_text(prop, "Use Custom Ghost Colors", "Use custom colors for ghost frames");
RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update");
@ -1779,6 +1812,7 @@ static void rna_def_gpencil_data(BlenderRNA *brna)
prop = RNA_def_property(srna, "use_ghosts_always", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "onion_flag", GP_ONION_GHOST_ALWAYS);
RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0);
RNA_def_property_ui_text(prop,
"Always Show Ghosts",
"Ghosts are shown in renders and animation playback. Useful for "
@ -1788,17 +1822,27 @@ static void rna_def_gpencil_data(BlenderRNA *brna)
prop = RNA_def_property(srna, "onion_mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "onion_mode");
RNA_def_property_enum_items(prop, rna_enum_gpencil_onion_modes_items);
RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0);
RNA_def_property_ui_text(prop, "Mode", "Mode to display frames");
RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update");
prop = RNA_def_property(srna, "onion_keyframe_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "onion_keytype");
RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0);
RNA_def_property_enum_items(prop, rna_enum_onion_keyframe_type_items);
RNA_def_property_ui_text(prop, "Filter By Type", "Type of keyframe (for filtering)");
RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update");
prop = RNA_def_property(srna, "use_onion_fade", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "onion_flag", GP_ONION_FADE);
RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0);
RNA_def_property_ui_text(
prop, "Fade", "Display onion keyframes with a fade in color transparency");
RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update");
prop = RNA_def_property(srna, "use_onion_loop", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "onion_flag", GP_ONION_LOOP);
RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0);
RNA_def_property_ui_text(prop,
"Loop",
"Display first onion keyframes using next frame color to show "
@ -1809,6 +1853,7 @@ static void rna_def_gpencil_data(BlenderRNA *brna)
RNA_def_property_float_sdna(prop, NULL, "onion_factor");
RNA_def_property_float_default(prop, 0.5f);
RNA_def_property_range(prop, 0.0, 1.0f);
RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0);
RNA_def_property_ui_text(prop, "Onion Opacity", "Change fade opacity of displayed onion frames");
RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update");