[Bf-blender-cvs] [6979cc61e97] greasepencil-object: WIP: Calculate falloff factor

Antonio Vazquez noreply at git.blender.org
Thu Nov 30 20:13:40 CET 2017


Commit: 6979cc61e9763dd04bc0a48dc77b0758d3dc0e88
Author: Antonio Vazquez
Date:   Thu Nov 30 20:03:59 2017 +0100
Branches: greasepencil-object
https://developer.blender.org/rB6979cc61e9763dd04bc0a48dc77b0758d3dc0e88

WIP: Calculate falloff factor

===================================================================

M	source/blender/editors/gpencil/gpencil_brush.c

===================================================================

diff --git a/source/blender/editors/gpencil/gpencil_brush.c b/source/blender/editors/gpencil/gpencil_brush.c
index 88aaab7099e..f57665e0f86 100644
--- a/source/blender/editors/gpencil/gpencil_brush.c
+++ b/source/blender/editors/gpencil/gpencil_brush.c
@@ -60,6 +60,7 @@
 #include "BKE_report.h"
 #include "BKE_screen.h"
 #include "BKE_object_deform.h"
+#include "BKE_colortools.h"
 
 #include "UI_interface.h"
 
@@ -142,6 +143,7 @@ typedef struct tGP_BrushEditData {
 	wmTimer *timer;
 	bool timerTick; /* is this event from a timer */
 	int vrgroup;    /* active vertex group */
+	float falloff;  /* multiframe falloff factor */
 } tGP_BrushEditData;
 
 
@@ -244,7 +246,9 @@ static float gp_brush_influence_calc(tGP_BrushEditData *gso, const int radius, c
 		
 		influence *= fac;
 	}
-	
+	/* apply multiframe falloff */
+	influence *= gso->falloff;
+
 	/* return influence */
 	return influence;
 }
@@ -1448,18 +1452,49 @@ static bool gpsculpt_brush_apply_standard(bContext *C, tGP_BrushEditData *gso)
 	/* Find visible strokes, and perform operations on those if hit */
 	float diff_mat[4][4];
 	Object *obact = CTX_data_active_object(C);     
+	ToolSettings *ts = CTX_data_tool_settings(C);
 	bGPdata *gpd = gso->gpd;
 	bool is_multiedit = (bool)GPENCIL_MULTIEDIT_SESSIONS_ON(gpd);
 
 	CTX_DATA_BEGIN(C, bGPDlayer *, gpl, editable_gpencil_layers)
 	{
+		/* init multiframe falloff options */
+		int f_init = 0;
+		int f_end = 0;
+		gso->falloff = 1.0f;
+
 		bGPDframe *init_gpf = gpl->actframe;
 		if (is_multiedit) {
 			init_gpf = gpl->frames.first;
+			if (ts->gp_sculpt.flag & GP_BRUSHEDIT_FLAG_FRAME_FALLOFF) {
+				BKE_gp_get_range_selected(gpl, &f_init, &f_end);
+			}
+			/* initialize curve */
+			curvemapping_initialize(ts->gp_sculpt.cur_falloff);
 		}
 
 		for (bGPDframe *gpf = init_gpf; gpf; gpf = gpf->next) {
 			if ((gpf == gpl->actframe) || ((gpf->flag & GP_FRAME_SELECT) && (is_multiedit))) {
+				
+				/* compute multiframe falloff factor*/
+				if ((is_multiedit) && (ts->gp_sculpt.flag & GP_BRUSHEDIT_FLAG_FRAME_FALLOFF)) {
+					float fnum = 0.5f; /* default mid curve */
+					/* frames to the right of the active frame */
+					if (gpf->framenum < gpl->actframe->framenum) {
+						fnum = (float)(gpf->framenum - f_init) / (gpl->actframe->framenum - f_init);
+						fnum *= 0.5f;
+						gso->falloff = curvemapping_evaluateF(ts->gp_sculpt.cur_falloff, 0, fnum);
+					}
+					/* frames to the left of the active frame */
+					else if (gpf->framenum > gpl->actframe->framenum) {
+						fnum = (float)(gpf->framenum - gpl->actframe->framenum) / (f_end - gpl->actframe->framenum);
+						fnum *= 0.5f;
+						gso->falloff = curvemapping_evaluateF(ts->gp_sculpt.cur_falloff, 0, fnum + 0.5f);
+					}
+					else {
+						gso->falloff = 1.0f;
+					}
+				}
 
 				/* calculate difference matrix */
 				ED_gpencil_parent_location(obact, gpd, gpl, diff_mat);



More information about the Bf-blender-cvs mailing list