[Bf-blender-cvs] [4b2c92f8e07] temp-sculpt-cavity-mask: temp-sculpt-cavity-mask: Cleanup UI

Joseph Eagar noreply at git.blender.org
Tue Aug 9 21:17:42 CEST 2022


Commit: 4b2c92f8e07fe23182dc1f4e775c1305dff6f260
Author: Joseph Eagar
Date:   Tue Aug 9 12:15:59 2022 -0700
Branches: temp-sculpt-cavity-mask
https://developer.blender.org/rB4b2c92f8e07fe23182dc1f4e775c1305dff6f260

temp-sculpt-cavity-mask: Cleanup UI

* Rename "Bake Cavity" to "Mask From Cavity"
* Mask from cavity operator's redo panel now
  edits automasking properties if "Use Automasking Settings"
  is on.

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

M	release/scripts/startup/bl_ui/space_view3d.py
M	release/scripts/startup/bl_ui/space_view3d_toolbar.py
M	source/blender/editors/sculpt_paint/sculpt.c
M	source/blender/editors/sculpt_paint/sculpt_automasking.cc
M	source/blender/editors/sculpt_paint/sculpt_ops.c
M	tests/python/bl_run_operators.py

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

diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index 1c34c3b38fe..0e4bc81cbc7 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -3280,7 +3280,7 @@ class VIEW3D_MT_mask(Menu):
 
         layout.separator()
 
-        props = layout.operator("sculpt.bake_cavity", text="Mask From Cavity")
+        props = layout.operator("sculpt.mask_from_cavity", text="Mask From Cavity")
         props.use_automask_settings = False
 
         layout.separator()
diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
index ea674d3c99a..caa91fe5315 100644
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@ -1029,9 +1029,9 @@ class VIEW3D_PT_sculpt_cavity_bake(Panel, View3DPaintPanel):
         tool_settings = context.tool_settings
         sculpt = tool_settings.sculpt
 
-        layout.prop(WindowManager.operator_properties_last("sculpt.bake_cavity"), "mix_mode")
-        layout.prop(WindowManager.operator_properties_last("sculpt.bake_cavity"), "factor")
-        props = layout.operator("sculpt.bake_cavity")
+        layout.prop(WindowManager.operator_properties_last("sculpt.mask_from_cavity"), "mix_mode")
+        layout.prop(WindowManager.operator_properties_last("sculpt.mask_from_cavity"), "factor")
+        props = layout.operator("sculpt.mask_from_cavity")
         props.use_automask_settings = True
 
 # TODO, move to space_view3d.py
diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c
index 11f4f72916c..7caf13285b9 100644
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@ -5649,6 +5649,10 @@ static int sculpt_brush_stroke_modal(bContext *C, wmOperator *op, const wmEvent
   return paint_stroke_modal(C, op, event, (struct PaintStroke **)&op->customdata);
 }
 
+static void empty_operator_ui(bContext *C, wmOperator *op)
+{
+}
+
 void SCULPT_OT_brush_stroke(wmOperatorType *ot)
 {
   /* Identifiers. */
@@ -5662,9 +5666,10 @@ void SCULPT_OT_brush_stroke(wmOperatorType *ot)
   ot->exec = sculpt_brush_stroke_exec;
   ot->poll = SCULPT_poll;
   ot->cancel = sculpt_brush_stroke_cancel;
+  ot->ui = empty_operator_ui;
 
   /* Flags (sculpt does own undo? (ton)). */
-  ot->flag = OPTYPE_BLOCKING;
+  ot->flag = OPTYPE_BLOCKING | OPTYPE_UNDO | OPTYPE_REGISTER;
 
   /* Properties. */
 
diff --git a/source/blender/editors/sculpt_paint/sculpt_automasking.cc b/source/blender/editors/sculpt_paint/sculpt_automasking.cc
index 1d788aea846..a30fe7c29b4 100644
--- a/source/blender/editors/sculpt_paint/sculpt_automasking.cc
+++ b/source/blender/editors/sculpt_paint/sculpt_automasking.cc
@@ -211,16 +211,6 @@ static void sculpt_calc_blurred_cavity(SculptSession *ss,
                                        int steps,
                                        PBVHVertRef vertex)
 {
-  if (steps == 0) {
-    int index = BKE_pbvh_vertex_to_index(ss->pbvh, vertex);
-
-    ss->cavity[index].factor = sculpt_cavity_calc_factor(
-        ss, automasking, SCULPT_calc_cavity(ss, vertex));
-    ss->cavity[index].stroke_id = ss->stroke_id;
-
-    return;
-  }
-
   float sno1[3];
   float sno2[3];
   float sco1[3];
@@ -228,6 +218,11 @@ static void sculpt_calc_blurred_cavity(SculptSession *ss,
   float len1_sum = 0.0f, len2_sum = 0.0f;
   int sco1_len = 0, sco2_len = 0;
 
+  /* Steps starts at 1, but API and user interface
+   * are zero-based.
+   */
+  steps++;
+
   zero_v3(sno1);
   zero_v3(sno2);
   zero_v3(sco1);
@@ -640,7 +635,7 @@ static void SCULPT_automasking_cache_settings_update(AutomaskingCache *automaski
   automasking->settings.flags = sculpt_automasking_mode_effective_bits(sd, brush);
   automasking->settings.initial_face_set = SCULPT_active_face_set_get(ss);
   automasking->settings.cavity_factor = sd->automasking_cavity_factor;
-  automasking->settings.cavity_blur_steps = sd->automasking_cavity_blur_steps + 1;
+  automasking->settings.cavity_blur_steps = sd->automasking_cavity_blur_steps;
   automasking->settings.cavity_curve = sd->automasking_cavity_curve;
 }
 
diff --git a/source/blender/editors/sculpt_paint/sculpt_ops.c b/source/blender/editors/sculpt_paint/sculpt_ops.c
index e4b785a8687..b2e57e23133 100644
--- a/source/blender/editors/sculpt_paint/sculpt_ops.c
+++ b/source/blender/editors/sculpt_paint/sculpt_ops.c
@@ -97,6 +97,7 @@
 
 #include "RNA_access.h"
 #include "RNA_define.h"
+#include "RNA_path.h"
 
 #include "UI_interface.h"
 #include "UI_resources.h"
@@ -1059,7 +1060,7 @@ static int sculpt_bake_cavity_exec(bContext *C, wmOperator *op)
   BKE_sculpt_update_object_for_edit(depsgraph, ob, true, true, false);
   SCULPT_vertex_random_access_ensure(ss);
 
-  SCULPT_undo_push_begin(ob, "Bake Cavity");
+  SCULPT_undo_push_begin(ob, "Mask From Cavity");
 
   CavityBakeMixMode mode = RNA_enum_get(op->ptr, "mix_mode");
   float factor = RNA_float_get(op->ptr, "mix_factor");
@@ -1071,42 +1072,49 @@ static int sculpt_bake_cavity_exec(bContext *C, wmOperator *op)
 
   AutomaskBakeTaskData tdata;
 
-  /* Fool SCULPT_is_automasking_enabled into thinking that automasking is enabled, even if it's
-   * not.
+  /* Set up automasking settings.
    */
   Sculpt sd2 = *sd;
-  sd2.automasking_flags = BRUSH_AUTOMASKING_CAVITY_NORMAL;
-
-  tdata.ob = ob;
-  tdata.mode = mode;
-  tdata.factor = factor;
-  tdata.ss = ss;
-  tdata.nodes = nodes;
-  tdata.automasking = SCULPT_automasking_cache_init(&sd2, brush, ob);
 
+  /* Override cavity mask settings if use_automask_settings is false. */
   if (!RNA_boolean_get(op->ptr, "use_automask_settings")) {
     if (RNA_boolean_get(op->ptr, "invert")) {
-      tdata.automasking->settings.flags = BRUSH_AUTOMASKING_CAVITY_INVERTED;
+      sd2.automasking_flags = BRUSH_AUTOMASKING_CAVITY_INVERTED;
     }
     else {
-      tdata.automasking->settings.flags = BRUSH_AUTOMASKING_CAVITY_NORMAL;
+      sd2.automasking_flags = BRUSH_AUTOMASKING_CAVITY_NORMAL;
     }
 
     if (RNA_boolean_get(op->ptr, "use_curve")) {
-      tdata.automasking->settings.flags |= BRUSH_AUTOMASKING_CAVITY_USE_CURVE;
+      sd2.automasking_flags |= BRUSH_AUTOMASKING_CAVITY_USE_CURVE;
     }
 
-    tdata.automasking->settings.cavity_blur_steps = RNA_int_get(op->ptr, "blur_steps");
-    tdata.automasking->settings.cavity_factor = RNA_float_get(op->ptr, "factor");
+    sd2.automasking_cavity_blur_steps = RNA_int_get(op->ptr, "blur_steps");
+    sd2.automasking_cavity_factor = RNA_float_get(op->ptr, "factor");
 
-    if (RNA_boolean_get(op->ptr, "use_automask_settings")) {
-      tdata.automasking->settings.cavity_curve = sd->automasking_cavity_curve;
-    }
-    else {
-      tdata.automasking->settings.cavity_curve = sd->automasking_cavity_curve_op;
+    sd2.automasking_cavity_curve = sd->automasking_cavity_curve_op;
+  }
+  else {
+    sd2.automasking_flags &= BRUSH_AUTOMASKING_CAVITY_ALL | BRUSH_AUTOMASKING_CAVITY_USE_CURVE;
+
+    /* Ensure cavity mask is actually enabled. */
+    if (!(sd2.automasking_flags & BRUSH_AUTOMASKING_CAVITY_ALL)) {
+      sd2.automasking_flags |= BRUSH_AUTOMASKING_CAVITY_NORMAL;
     }
   }
 
+  /* Create copy of brush with cleared automasking settings. */
+  Brush brush2 = *brush;
+  brush2.automasking_flags = 0;
+  brush2.automasking_boundary_edges_propagation_steps = 1;
+
+  tdata.ob = ob;
+  tdata.mode = mode;
+  tdata.factor = factor;
+  tdata.ss = ss;
+  tdata.nodes = nodes;
+  tdata.automasking = SCULPT_automasking_cache_init(&sd2, &brush2, ob);
+
   ss->stroke_id++;
 
   TaskParallelSettings settings;
@@ -1131,19 +1139,40 @@ static int sculpt_bake_cavity_exec(bContext *C, wmOperator *op)
 static void cavity_bake_ui(bContext *C, wmOperator *op)
 {
   uiLayout *layout = op->layout;
+  Scene *scene = CTX_data_scene(C);
+  Sculpt *sd = scene->toolsettings ? scene->toolsettings->sculpt : NULL;
 
   uiLayoutSetPropSep(layout, true);
   uiLayoutSetPropDecorate(layout, false);
+  bool use_curve;
+
+  if (!sd || !RNA_boolean_get(op->ptr, "use_automask_settings")) {
+    uiItemR(layout, op->ptr, "mix_mode", 0, NULL, ICON_NONE);
+    uiItemR(layout, op->ptr, "mix_factor", 0, NULL, ICON_NONE);
+    uiItemR(layout, op->ptr, "factor", 0, NULL, ICON_NONE);
+    uiItemR(layout, op->ptr, "use_automask_settings", 0, NULL, ICON_NONE);
+    uiItemR(layout, op->ptr, "blur_steps", 0, NULL, ICON_NONE);
+    uiItemR(layout, op->ptr, "invert", 0, NULL, ICON_NONE);
+    uiItemR(layout, op->ptr, "use_curve", 0, NULL, ICON_NONE);
+
+    use_curve = RNA_boolean_get(op->ptr, "use_curve");
+  }
+  else {
+    PointerRNA sculpt_ptr;
+
+    RNA_pointer_create(&scene->id, &RNA_Sculpt, sd, &sculpt_ptr);
+    uiItemR(layout, op->ptr, "mix_mode", 0, NULL, ICON_NONE);
+    uiItemR(layout, op->ptr, "mix_factor", 0, NULL, ICON_NONE);
+    uiItemR(layout, &sculpt_ptr, "automasking_cavity_factor", 0, NULL, ICON_NONE);
+    uiItemR(layout, op->ptr, "use_automask_settings", 0, NULL, ICON_NONE);
+    uiItemR(layout, &sculpt_ptr, "automasking_cavity_blur_steps", 0, NULL, ICON_NONE);
+    uiItemR(layout, &sculpt_ptr, "use_automasking_cavity_inverted", 0, NULL, ICON_NONE);
+    uiItemR(layout, &sculpt_ptr, "use_automasking_custom_cavity_curve", 0, NULL, ICON_NONE);
 
-  uiItemR(layout, op->ptr, "mix_mode", 0, NULL, ICON_NONE);
-  uiItemR(layout, op->ptr, "mix_factor", 0, NULL, ICON_NONE);
-  uiItemR(layout, op->ptr, "factor", 0, NULL, ICON_NONE);
-  uiItemR(layout, op->ptr, "use_automask_settings", 0, NULL, ICON_NONE);
-  uiItemR(layout, op->ptr, "blur_steps", 0, NULL, ICON_NONE);
-  uiItemR(layout, op->ptr, "invert", 0, NULL, ICON_NONE);
-  uiItemR(layout, op->ptr, "use_curve", 0, NULL, ICON_NONE);
+    use_curve = RNA_boolean_get(&sculpt_ptr, "use_automasking_custom_cavity_curve");
+  }
 
-  if (RNA_boolean_get(op->ptr, "use_curve")) {
+  if (use_curve) {
     Scene *scene = CTX_data_scene(C);
     PointerRNA sculpt_ptr;
 
@@ -1165,11 +1194,11 @@ static void cavity_bake_ui(bContext *C, wmOperator *op)
   // row = uiLayoutRow(layout, false);
 }
 
-static void SCULPT_OT_bake_cavity(wmOperatorType *ot)
+static void SCULPT_OT_mask_from_cavi

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list