[Bf-blender-cvs] [ea63d431f12] greasepencil-object: New Onion Skinning Loop option
Antonio Vazquez
noreply at git.blender.org
Sat Mar 17 16:48:58 CET 2018
Commit: ea63d431f1299df89f049a6804c3c29c3cd69276
Author: Antonio Vazquez
Date: Sat Mar 17 16:48:46 2018 +0100
Branches: greasepencil-object
https://developer.blender.org/rBea63d431f1299df89f049a6804c3c29c3cd69276
New Onion Skinning Loop option
When draw an animation with a loop it's very useful to have an indication of the first frame.
Some changes in the order of the parameters too.
===================================================================
M release/scripts/startup/bl_ui/properties_grease_pencil_common.py
M source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
M source/blender/makesdna/DNA_gpencil_types.h
M source/blender/makesrna/intern/rna_gpencil.c
===================================================================
diff --git a/release/scripts/startup/bl_ui/properties_grease_pencil_common.py b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
index 8c85473c9cf..7a338236e3b 100644
--- a/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
+++ b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
@@ -1025,6 +1025,10 @@ class GreasePencilOnionPanel:
row.active = gpd.use_onion_skinning
row.prop(gpd, "onion_mode", expand=True)
+ row = layout.row(align=True)
+ row.active = gpd.use_onion_skinning
+ row.prop(gpd, "onion_factor", text="Opacity", slider=True)
+
split = layout.split(percentage=0.5)
split.active = gpd.use_onion_skinning
@@ -1048,14 +1052,13 @@ class GreasePencilOnionPanel:
row.active = gpd.onion_mode in ('ABSOLUTE', 'RELATIVE')
row.prop(gpd, "ghost_after_range", text="After")
- # - fade
- split = layout.split(percentage=0.5)
- split.active = gpd.use_onion_skinning
- sub = split.column(align=True)
- sub.prop(gpd, "use_onion_fade", text="Fade")
-
- sub = split.column(align=True)
- sub.prop(gpd, "onion_factor", text="Opacity", slider=True)
+ # - fade and loop
+ row = layout.row()
+ row.active = gpd.use_onion_skinning
+ row.prop(gpd, "use_onion_fade", text="Fade")
+ subrow = row.row()
+ subrow.active = gpd.onion_mode == 'SELECTED'
+ subrow.prop(gpd, "use_onion_loop", text="Loop")
# -----------------
# layer override
diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
index 7e59e49d962..4eb51f2b694 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
@@ -958,6 +958,8 @@ static void gpencil_draw_onionskins(
int step = 0;
int mode = 0;
bool colflag = false;
+ bGPDframe *gpf_loop = NULL;
+ int last = gpf->framenum;
if (gpl->onion_flag & GP_LAYER_ONION_OVERRIDE) {
if (gpl->onion_flag & GP_LAYER_GHOST_PREVCOL) {
@@ -1030,6 +1032,11 @@ static void gpencil_draw_onionskins(
color[3] = fac;
}
+ /* if loop option, save the frame to use later */
+ if ((mode == GP_ONION_MODE_SELECTED) && (gpd->onion_flag & GP_ONION_LOOP)) {
+ gpf_loop = gf;
+ }
+
gpencil_get_onion_alpha(color, gpd, gpl);
gpencil_draw_onion_strokes(cache, e_data, vedata, ob, gpd, gpl, gf, color[3], color, colflag);
}
@@ -1097,6 +1104,18 @@ static void gpencil_draw_onionskins(
gpencil_get_onion_alpha(color, gpd, gpl);
gpencil_draw_onion_strokes(cache, e_data, vedata, ob, gpd, gpl, gf, color[3], color, colflag);
+ if (last < gf->framenum) {
+ last = gf->framenum;
+ }
+ }
+
+ /* Draw first frame in blue for loop mode */
+ if ((gpd->onion_flag & GP_ONION_LOOP) && (gpf_loop != NULL)) {
+ if ((last == gpf->framenum) || (gpf->next == NULL)) {
+ gpencil_get_onion_alpha(color, gpd, gpl);
+ gpencil_draw_onion_strokes(cache, e_data, vedata, ob, gpd, gpl,
+ gpf_loop, color[3], color, colflag);
+ }
}
}
diff --git a/source/blender/makesdna/DNA_gpencil_types.h b/source/blender/makesdna/DNA_gpencil_types.h
index cb06fb9f630..68e524d91d7 100644
--- a/source/blender/makesdna/DNA_gpencil_types.h
+++ b/source/blender/makesdna/DNA_gpencil_types.h
@@ -456,6 +456,8 @@ typedef enum eGPD_OnionFlag {
GP_ONION_GHOST_ALWAYS = (1 << 2),
/* use fade color in onion skin */
GP_ONION_FADE = (1 << 3),
+ /* Loop showing first frame after last frame */
+ GP_ONION_LOOP = (1 << 4),
} eGPD_OnionFlag;
/* gpd->onion_mode */
diff --git a/source/blender/makesrna/intern/rna_gpencil.c b/source/blender/makesrna/intern/rna_gpencil.c
index 0fb2e9d8d69..37f943b3543 100644
--- a/source/blender/makesrna/intern/rna_gpencil.c
+++ b/source/blender/makesrna/intern/rna_gpencil.c
@@ -1619,6 +1619,12 @@ static void rna_def_gpencil_data(BlenderRNA *brna)
"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_property_ui_text(prop, "Loop",
+ "Display first onion keyframes using next frame color to show indication of loop start frame");
+ RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update");
+
prop = RNA_def_property(srna, "onion_factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "onion_factor");
RNA_def_property_float_default(prop, 0.5f);
More information about the Bf-blender-cvs
mailing list