[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