From fa9b05149c2ca3915a4fb2670c87a648d927336c Mon Sep 17 00:00:00 2001 From: Sebastian Parborg Date: Fri, 2 Apr 2021 14:44:26 +0200 Subject: Fix T84520: Make the different weight paint code paths exclusive to each other Before this change, you could have the new sculpt symmetry code and the older weight paint symmetry code active at the same time. This would lead to users easily trashing their weigh paint data if they were not careful when switching between modes. Now the specific weight paint symmetry code is an exclusive toggle so the user can't accidentally mirror strokes and vertex groups at the same time. This also paves the way of supporting Y and Z symmetry in the future for weight groups mirroring if we decide to add it in the future. Reviewed By: Sybren Differential Revision: http://developer.blender.org/D10426 --- source/blender/editors/sculpt_paint/paint_vertex.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to '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 fc52f6fea7c..f634e6ad026 100644 --- a/source/blender/editors/sculpt_paint/paint_vertex.c +++ b/source/blender/editors/sculpt_paint/paint_vertex.c @@ -769,8 +769,8 @@ static void do_weight_paint_vertex_single( MDeformVert *dv_mirr; MDeformWeight *dw_mirr; - /* from now on we can check if mirrors enabled if this var is -1 and not bother with the flag */ - if (me->editflag & ME_EDIT_VERTEX_GROUPS_X_SYMMETRY) { + /* Check if we should mirror vertex groups (X-axis). */ + if (ME_USING_MIRROR_X_VERTEX_GROUPS(me)) { index_mirr = mesh_get_x_mirror_vert(ob, NULL, index, topology); vgroup_mirr = wpi->mirror.index; @@ -979,8 +979,8 @@ static void do_weight_paint_vertex_multi( float curw, curw_real, oldw, neww, change, curw_mirr, change_mirr; float dw_rel_free, dw_rel_locked; - /* from now on we can check if mirrors enabled if this var is -1 and not bother with the flag */ - if (me->editflag & ME_EDIT_VERTEX_GROUPS_X_SYMMETRY) { + /* Check if we should mirror vertex groups (X-axis). */ + if (ME_USING_MIRROR_X_VERTEX_GROUPS(me)) { index_mirr = mesh_get_x_mirror_vert(ob, NULL, index, topology); if (!ELEM(index_mirr, -1, index)) { @@ -1629,7 +1629,7 @@ static bool wpaint_stroke_test_start(bContext *C, wmOperator *op, const float mo int i; bDeformGroup *dg; - if (me->editflag & ME_EDIT_VERTEX_GROUPS_X_SYMMETRY) { + if (ME_USING_MIRROR_X_VERTEX_GROUPS(me)) { BKE_object_defgroup_mirror_selection( ob, defbase_tot, defbase_sel, defbase_sel, &defbase_tot_sel); } @@ -2191,7 +2191,7 @@ static void wpaint_paint_leaves(bContext *C, /* NOTE: current mirroring code cannot be run in parallel */ TaskParallelSettings settings; - const bool use_threading = ((me->editflag & ME_EDIT_VERTEX_GROUPS_X_SYMMETRY) == 0); + const bool use_threading = !ME_USING_MIRROR_X_VERTEX_GROUPS(me); BKE_pbvh_parallel_range_settings(&settings, use_threading, totnode); switch ((eBrushWeightPaintTool)brush->weightpaint_tool) { @@ -2322,6 +2322,13 @@ static void wpaint_do_symmetrical_brush_actions( cache->symmetry = symm; + if (me->editflag & ME_EDIT_MIRROR_VERTEX_GROUPS) { + /* We don't do any symmetry strokes when mirroing vertex groups. */ + copy_v3_v3(cache->true_last_location, cache->true_location); + cache->is_last_valid = true; + return; + } + /* symm is a bit combination of XYZ - 1 is mirror * X; 2 is Y; 3 is XY; 4 is Z; 5 is XZ; 6 is YZ; 7 is XYZ */ for (i = 1; i <= symm; i++) { -- cgit v1.2.3