[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