[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