From cfdff4fb6331d1bffdafda645d9fbce4aca04901 Mon Sep 17 00:00:00 2001 From: Antonio Vazquez Date: Sat, 2 May 2020 10:47:45 +0200 Subject: GPencil: Improve Market Chisel angle algorithm With the previous commit, the angle effect was too subtle. Now the effect is more visible, --- source/blender/editors/gpencil/gpencil_paint.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c index 0f7091b8b46..561104b0b98 100644 --- a/source/blender/editors/gpencil/gpencil_paint.c +++ b/source/blender/editors/gpencil/gpencil_paint.c @@ -3151,7 +3151,6 @@ static void gp_brush_angle_segment(tGPsdata *p, tGPspoint *pt_prev, tGPspoint *p float mvec[2]; float fac; - float mpressure; /* angle vector of the brush with full thickness */ float v0[2] = {cos(angle), sin(angle)}; @@ -3159,11 +3158,9 @@ static void gp_brush_angle_segment(tGPsdata *p, tGPspoint *pt_prev, tGPspoint *p mvec[0] = pt->x - pt_prev->x; mvec[1] = pt->y - pt_prev->y; normalize_v2(mvec); - fac = 1.0f - fabs(dot_v2v2(v0, mvec)); /* 0.0 to 1.0 */ /* interpolate with previous point for smoother transitions */ - mpressure = interpf(pt->pressure - (sen * fac), pt_prev->pressure, 0.3f); - pt->pressure = mpressure; + pt->pressure = interpf(pt->pressure - (sen * fac), pt_prev->pressure, 0.5f); CLAMP(pt->pressure, pt_prev->pressure * 0.5f, 1.0f); } @@ -3241,6 +3238,7 @@ static void gpencil_add_arc_points(tGPsdata *p, float mval[2], int segments) corner[0] = midpoint[0] - (cp1[0] - midpoint[0]); corner[1] = midpoint[1] - (cp1[1] - midpoint[1]); + tGPspoint *pt_step = pt_prev; for (int i = 0; i < segments; i++) { pt = &points[idx_prev + i - 1]; pt->x = corner[0] + (end[0] - corner[0]) * sinf(a) + (start[0] - corner[0]) * cosf(a); @@ -3250,6 +3248,14 @@ static void gpencil_add_arc_points(tGPsdata *p, float mval[2], int segments) pt->pressure = pt_prev->pressure; pt->strength = pt_prev->strength; + /* Apply angle of stroke to brush size to interpolated points but slightly attenuated.. */ + if (brush_settings->draw_angle_factor != 0.0f) { + gp_brush_angle_segment(p, pt_step, pt); + CLAMP(pt->pressure, pt_prev->pressure * 0.8f, 1.0f); + /* Use the previous interpolated point for next segment. */ + pt_step = pt; + } + /* Apply randomness to pressure. */ if (brush_settings->draw_random_press > 0.0f) { float rand = BLI_rng_get_float(p->rng) * 2.0f - 1.0f; -- cgit v1.2.3