[Bf-blender-cvs] [7388e103b78] temp-weight_mirror: Make the different weight paint code paths exclusive to each other

Sebastian Parborg noreply at git.blender.org
Thu Feb 18 17:19:41 CET 2021


Commit: 7388e103b785d8ff99b5a5c7e04f76c45a829135
Author: Sebastian Parborg
Date:   Thu Feb 18 17:17:36 2021 +0100
Branches: temp-weight_mirror
https://developer.blender.org/rB7388e103b785d8ff99b5a5c7e04f76c45a829135

Make the different weight paint code paths exclusive to each other

Before 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.
(As the UI part for it is done)

See https://developer.blender.org/D10426

===================================================================

M	release/scripts/startup/bl_ui/space_view3d_toolbar.py
M	source/blender/draw/intern/draw_cache_impl_mesh.c
M	source/blender/editors/object/object_vgroup.c
M	source/blender/editors/sculpt_paint/paint_vertex.c
M	source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c
M	source/blender/editors/sculpt_paint/paint_vertex_weight_utils.c
M	source/blender/makesdna/DNA_mesh_types.h
M	source/blender/makesrna/intern/rna_mesh.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
index f93a6f3346b..eb9ed7c6d87 100644
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@ -127,9 +127,13 @@ def draw_vpaint_symmetry(layout, vpaint, mesh):
     col = layout.column()
     row = col.row(heading="Mirror", align=True)
     row.prop(mesh, "use_mirror_x", text="X", toggle=True)
+    row = row.row(align=True)
+    row.active = not mesh.use_mirror_vertex_groups
     row.prop(mesh, "use_mirror_y", text="Y", toggle=True)
     row.prop(mesh, "use_mirror_z", text="Z", toggle=True)
 
+    col = layout.column()
+    col.active = not mesh.use_mirror_vertex_groups
     col.prop(vpaint, "radial_symmetry", text="Radial")
 
 
@@ -964,9 +968,9 @@ class VIEW3D_PT_tools_weightpaint_symmetry(Panel, View3DPaintPanel):
         draw_vpaint_symmetry(layout, wpaint, mesh)
 
         col = layout.column(align=True)
-        col.prop(mesh, 'use_mirror_vertex_group_x', text="Vertex Group X")
+        col.prop(mesh, 'use_mirror_vertex_groups')
         row = col.row()
-        row.active = mesh.use_mirror_vertex_group_x
+        row.active = mesh.use_mirror_vertex_groups
         row.prop(mesh, "use_mirror_topology")
 
 
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 "
+                       

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list