diff options
Diffstat (limited to 'source')
7 files changed, 31 insertions, 20 deletions
diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c index 04bfb667d24..d4386d71481 100644 --- a/source/blender/draw/intern/draw_cache_impl_mesh.c +++ b/source/blender/draw/intern/draw_cache_impl_mesh.c @@ -397,7 +397,7 @@ static void drw_mesh_weight_state_extract(Object *ob, wstate->flags |= DRW_MESH_WEIGHT_STATE_MULTIPAINT | (ts->auto_normalize ? DRW_MESH_WEIGHT_STATE_AUTO_NORMALIZE : 0); - if (me->editflag & ME_EDIT_VERTEX_GROUPS_X_SYMMETRY) { + if ((me->editflag & ME_EDIT_MIRROR_VERTEX_GROUPS) && (me->symmetry & ME_SYMMETRY_X)) { BKE_object_defgroup_mirror_selection(ob, wstate->defgroup_len, wstate->defgroup_sel, diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c index 2296e158cc8..1347eb1431f 100644 --- a/source/blender/editors/object/object_vgroup.c +++ b/source/blender/editors/object/object_vgroup.c @@ -1751,7 +1751,7 @@ static bool *vgroup_selected_get(Object *ob) /* Mirror the selection if X Mirror is enabled. */ Mesh *me = BKE_mesh_from_object(ob); - if (me && (me->editflag & ME_EDIT_VERTEX_GROUPS_X_SYMMETRY) != 0) { + if (me && (me->editflag & ME_EDIT_MIRROR_VERTEX_GROUPS) && (me->symmetry & ME_SYMMETRY_X)) { BKE_object_defgroup_mirror_selection(ob, defbase_tot, mask, mask, &sel_count); } } diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c index f45c244f675..34d6f1d532b 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->editflag & ME_EDIT_MIRROR_VERTEX_GROUPS) && (me->symmetry & ME_SYMMETRY_X)) { 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->editflag & ME_EDIT_MIRROR_VERTEX_GROUPS) && (me->symmetry & ME_SYMMETRY_X)) { 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->editflag & ME_EDIT_MIRROR_VERTEX_GROUPS) && (me->symmetry & ME_SYMMETRY_X)) { BKE_object_defgroup_mirror_selection( ob, defbase_tot, defbase_sel, defbase_sel, &defbase_tot_sel); } @@ -2195,7 +2195,8 @@ 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->editflag & ME_EDIT_MIRROR_VERTEX_GROUPS) && + (me->symmetry & ME_SYMMETRY_X)); BKE_pbvh_parallel_range_settings(&settings, use_threading, totnode); switch ((eBrushWeightPaintTool)brush->weightpaint_tool) { @@ -2326,6 +2327,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++) { diff --git a/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c b/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c index 8277b485578..7df141ac363 100644 --- a/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c +++ b/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c @@ -235,7 +235,7 @@ static int weight_sample_invoke(bContext *C, wmOperator *op, const wmEvent *even vc.obact, defbase_tot, &defbase_tot_sel); if (defbase_tot_sel > 1) { - if (me->editflag & ME_EDIT_VERTEX_GROUPS_X_SYMMETRY) { + if ((me->editflag & ME_EDIT_MIRROR_VERTEX_GROUPS) && (me->symmetry & ME_SYMMETRY_X)) { BKE_object_defgroup_mirror_selection( vc.obact, defbase_tot, defbase_sel, defbase_sel, &defbase_tot_sel); } @@ -461,7 +461,7 @@ static bool weight_paint_set(Object *ob, float paintweight) vgroup_active = ob->actdef - 1; /* if mirror painting, find the other group */ - if (me->editflag & ME_EDIT_VERTEX_GROUPS_X_SYMMETRY) { + if ((me->editflag & ME_EDIT_MIRROR_VERTEX_GROUPS) && (me->symmetry & ME_SYMMETRY_X)) { vgroup_mirror = ED_wpaint_mirror_vgroup_ensure(ob, vgroup_active); } @@ -489,7 +489,8 @@ static bool weight_paint_set(Object *ob, float paintweight) dw_prev->weight = dw->weight; /* set the undo weight */ dw->weight = paintweight; - if (me->editflag & ME_EDIT_VERTEX_GROUPS_X_SYMMETRY) { /* x mirror painting */ + if (me->symmetry & ME_SYMMETRY_X) { + /* x mirror painting */ int j = mesh_get_x_mirror_vert(ob, NULL, vidx, topology); if (j >= 0) { /* copy, not paint again */ diff --git a/source/blender/editors/sculpt_paint/paint_vertex_weight_utils.c b/source/blender/editors/sculpt_paint/paint_vertex_weight_utils.c index a8ba87ac483..1d31348504d 100644 --- a/source/blender/editors/sculpt_paint/paint_vertex_weight_utils.c +++ b/source/blender/editors/sculpt_paint/paint_vertex_weight_utils.c @@ -118,7 +118,7 @@ bool ED_wpaint_ensure_data(bContext *C, } if (flag & WPAINT_ENSURE_MIRROR) { - if (me->editflag & ME_EDIT_VERTEX_GROUPS_X_SYMMETRY) { + if ((me->editflag & ME_EDIT_MIRROR_VERTEX_GROUPS) && (me->symmetry & ME_SYMMETRY_X)) { int mirror = ED_wpaint_mirror_vgroup_ensure(ob, ob->actdef - 1); if (vgroup_index) { vgroup_index->mirror = mirror; diff --git a/source/blender/makesdna/DNA_mesh_types.h b/source/blender/makesdna/DNA_mesh_types.h index c2337b28e54..850eecf6dc8 100644 --- a/source/blender/makesdna/DNA_mesh_types.h +++ b/source/blender/makesdna/DNA_mesh_types.h @@ -263,7 +263,7 @@ enum { /* me->editflag */ enum { - ME_EDIT_VERTEX_GROUPS_X_SYMMETRY = 1 << 0, + ME_EDIT_MIRROR_VERTEX_GROUPS = 1 << 0, ME_EDIT_MIRROR_Y = 1 << 1, /* unused so far */ ME_EDIT_MIRROR_Z = 1 << 2, /* unused so far */ @@ -275,9 +275,9 @@ enum { /* we cant have both flags enabled at once, * flags defined in DNA_scene_types.h */ #define ME_EDIT_PAINT_SEL_MODE(_me) \ - (((_me)->editflag & ME_EDIT_PAINT_FACE_SEL) ? \ - SCE_SELECT_FACE : \ - ((_me)->editflag & ME_EDIT_PAINT_VERT_SEL) ? SCE_SELECT_VERTEX : 0) + (((_me)->editflag & ME_EDIT_PAINT_FACE_SEL) ? SCE_SELECT_FACE : \ + ((_me)->editflag & ME_EDIT_PAINT_VERT_SEL) ? SCE_SELECT_VERTEX : \ + 0) /* me->flag */ enum { diff --git a/source/blender/makesrna/intern/rna_mesh.c b/source/blender/makesrna/intern/rna_mesh.c index f51bd2f9678..4ec8f0a8565 100644 --- a/source/blender/makesrna/intern/rna_mesh.c +++ b/source/blender/makesrna/intern/rna_mesh.c @@ -3289,10 +3289,12 @@ static void rna_def_mesh(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Z", "Enable symmetry in the Z axis"); RNA_def_property_update(prop, 0, "rna_Mesh_update_draw"); - prop = RNA_def_property(srna, "use_mirror_vertex_group_x", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "editflag", ME_EDIT_VERTEX_GROUPS_X_SYMMETRY); - RNA_def_property_ui_text( - prop, "Vertex Groups X Symmetry", "Mirror the left/right vertex groups when painting"); + prop = RNA_def_property(srna, "use_mirror_vertex_groups", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "editflag", ME_EDIT_MIRROR_VERTEX_GROUPS); + RNA_def_property_ui_text(prop, + "Mirror Vertex Groups", + "Mirror the left/right vertex groups when painting. The symmetry axis " + "is determined by the symmetry settings"); RNA_def_property_update(prop, 0, "rna_Mesh_update_draw"); /* End Symmetry */ |