[Bf-blender-cvs] [6699590] master: Weight Paint: Multi-paint support for blur tool
Alexander Gavrilov
noreply at git.blender.org
Wed Jan 20 22:35:41 CET 2016
Commit: 6699590a0254c56d11bef2592d610abcc21344cd
Author: Alexander Gavrilov
Date: Tue Jan 19 14:56:28 2016 +0300
Branches: master
https://developer.blender.org/rB6699590a0254c56d11bef2592d610abcc21344cd
Weight Paint: Multi-paint support for blur tool
Use the collective weight when using blurring.
This brings blur in sync with the rest of multi-paint modifications.
Also, blur has no business calling `defvert_verify_index` anyway when
it simply wants to read weights.
===================================================================
M source/blender/editors/sculpt_paint/paint_vertex.c
===================================================================
diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c
index 496055b..78363ef 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex.c
+++ b/source/blender/editors/sculpt_paint/paint_vertex.c
@@ -2042,6 +2042,19 @@ static bool wpaint_stroke_test_start(bContext *C, wmOperator *op, const float UN
return true;
}
+static float wpaint_blur_weight_single(MDeformVert *dv, WeightPaintInfo *wpi)
+{
+ return defvert_find_weight(dv, wpi->active.index);
+}
+
+static float wpaint_blur_weight_multi(MDeformVert *dv, WeightPaintInfo *wpi)
+{
+ float weight = BKE_defvert_multipaint_collective_weight(
+ dv, wpi->defbase_tot, wpi->defbase_sel, wpi->defbase_tot_sel, wpi->do_auto_normalize);
+ CLAMP(weight, 0.0f, 1.0f);
+ return weight;
+}
+
static void wpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, PointerRNA *itemptr)
{
Scene *scene = CTX_data_scene(C);
@@ -2063,11 +2076,8 @@ static void wpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P
bool use_face_sel;
bool use_depth;
- MDeformWeight *(*dw_func)(MDeformVert *, const int) =
- (brush->vertexpaint_tool == PAINT_BLEND_BLUR) ?
- ((wp->flag & VP_ONLYVGROUP) ?
- (MDeformWeight *(*)(MDeformVert *, const int))defvert_find_index :
- defvert_verify_index) : NULL;
+ float (*blur_weight_func)(MDeformVert *, WeightPaintInfo *) =
+ wpd->do_multipaint ? wpaint_blur_weight_multi : wpaint_blur_weight_single;
const float pressure = RNA_float_get(itemptr, "pressure");
const float brush_size_pressure = BKE_brush_size_get(scene, brush) * (BKE_brush_use_size_pressure(scene, brush) ? pressure : 1.0f);
@@ -2168,8 +2178,8 @@ static void wpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P
const unsigned int vidx = v_idx_var; \
const float fac = calc_vp_strength_col_dl(wp, vc, wpd->vertexcosnos[vidx].co, mval, brush_size_pressure, NULL); \
if (fac > 0.0f) { \
- MDeformWeight *dw = dw_func(&me->dvert[vidx], wpi.active.index); \
- paintweight += dw ? (dw->weight * fac) : 0.0f; \
+ float weight = blur_weight_func(&me->dvert[vidx], &wpi); \
+ paintweight += weight * fac; \
totw += fac; \
} \
} (void)0
More information about the Bf-blender-cvs
mailing list