[Bf-blender-cvs] [06762eefcf1] sculpt-dev: Sculpt IPMask: Start implementing exec callback
Pablo Dobarro
noreply at git.blender.org
Wed Mar 17 01:53:20 CET 2021
Commit: 06762eefcf17286baec53b08adb3d8ce642254c4
Author: Pablo Dobarro
Date: Tue Mar 16 20:42:12 2021 +0100
Branches: sculpt-dev
https://developer.blender.org/rB06762eefcf17286baec53b08adb3d8ce642254c4
Sculpt IPMask: Start implementing exec callback
===================================================================
M source/blender/editors/sculpt_paint/sculpt_filter_mask.c
===================================================================
diff --git a/source/blender/editors/sculpt_paint/sculpt_filter_mask.c b/source/blender/editors/sculpt_paint/sculpt_filter_mask.c
index ba3c9f787d0..7425b860d7c 100644
--- a/source/blender/editors/sculpt_paint/sculpt_filter_mask.c
+++ b/source/blender/editors/sculpt_paint/sculpt_filter_mask.c
@@ -319,6 +319,7 @@ void SCULPT_OT_mask_filter(struct wmOperatorType *ot)
/******************************************************************************************/
/* Interactive Preview Mask Filter */
+
#define SCULPT_IPMASK_FILTER_MIN_MULTITHREAD 1000
#define SCULPT_IPMASK_FILTER_GRANULARITY 100
@@ -331,31 +332,6 @@ typedef enum eSculptIPMaskFilterType {
IPMASK_FILTER_INVERT,
} eSculptIPMaskFilterType;
-static EnumPropertyItem prop_ipmask_filter_types[] = {
- {IPMASK_FILTER_SMOOTH_SHARPEN,
- "SMOOTH_SHARPEN",
- 0,
- "Smooth/Sharpen",
- "Smooth and sharpen the mask"},
- {IPMASK_FILTER_GROW_SHRINK, "GROW_SHRINK", 0, "Grow/Shrink", "Grow and shirnk the mask"},
- {IPMASK_FILTER_HARDER_SOFTER,
- "HARDER_SOFTER",
- 0,
- "Harder/Softer",
- "Makes the entire mask harder or softer"},
- {IPMASK_FILTER_ADD_SUBSTRACT,
- "ADD_SUBSTRACT",
- 0,
- "Add/Substract",
- "Adds or substract a value to the mask"},
- {IPMASK_FILTER_CONTRAST,
- "CONTRAST",
- 0,
- "Contrast",
- "Increases or decreases the contrast of the mask"},
- {IPMASK_FILTER_INVERT, "INVERT", 0, "Invert", "Inverts the mask"},
- {0, NULL, 0, NULL, NULL},
-};
typedef enum MaskFilterStepDirectionType {
MASK_FILTER_STEP_DIRECTION_FORWARD,
@@ -1039,6 +1015,41 @@ static int sculpt_ipmask_filter_invoke(bContext *C, wmOperator *op, const wmEven
}
static int sculpt_ipmask_filter_exec(bContext *C, wmOperator *op)
{
+ Object *ob = CTX_data_active_object(C);
+ Sculpt *sd = CTX_data_tool_settings(C)->sculpt;
+ SculptSession *ss = ob->sculpt;
+ Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
+
+ const int filter_type = RNA_enum_get(op->ptr, "filter_type");
+ const bool use_step_interpolation = RNA_boolean_get(op->ptr, "use_step_interpolation");
+ const int iteration_count = RNA_int_get(op->ptr, "iterations");
+ const float strength = RNA_float_get(op->ptr, "strength");
+
+ SCULPT_undo_push_begin(ob, "mask filter");
+ BKE_sculpt_update_object_for_edit(depsgraph, ob, true, true, false);
+
+ PBVHNode **nodes;
+ int totnode;
+ BKE_pbvh_search_gather(ss->pbvh, NULL, NULL, &nodes, &totnode);
+ for (int i = 0; i < totnode; i++) {
+ SCULPT_undo_push_node(ob, nodes[i], SCULPT_UNDO_MASK);
+ }
+
+ if (sculpt_ipmask_filter_uses_apply_from_original(filter_type)) {
+ sculpt_ipmask_apply_from_original_mask_data(ob, filter_type, strength);
+ }
+ else {
+ sculpt_ipmask_filter_update_to_target_step(
+ ss, 1, iteration_count, 0.0f);
+ }
+
+ for (int i = 0; i < totnode; i++) {
+ BKE_pbvh_node_mark_update_mask(nodes[i]);
+ }
+
+ SCULPT_filter_cache_free(ss);
+ SCULPT_undo_push_end();
+ SCULPT_flush_update_done(C, ob, SCULPT_UPDATE_MASK);
return OPERATOR_FINISHED;
}
@@ -1058,6 +1069,47 @@ void SCULPT_OT_ipmask_filter(struct wmOperatorType *ot)
ot->flag = OPTYPE_REGISTER;
+
+static EnumPropertyItem prop_ipmask_filter_types[] = {
+ {IPMASK_FILTER_SMOOTH_SHARPEN,
+ "SMOOTH_SHARPEN",
+ 0,
+ "Smooth/Sharpen",
+ "Smooth and sharpen the mask"},
+ {IPMASK_FILTER_GROW_SHRINK, "GROW_SHRINK", 0, "Grow/Shrink", "Grow and shirnk the mask"},
+ {IPMASK_FILTER_HARDER_SOFTER,
+ "HARDER_SOFTER",
+ 0,
+ "Harder/Softer",
+ "Makes the entire mask harder or softer"},
+ {IPMASK_FILTER_ADD_SUBSTRACT,
+ "ADD_SUBSTRACT",
+ 0,
+ "Add/Substract",
+ "Adds or substract a value to the mask"},
+ {IPMASK_FILTER_CONTRAST,
+ "CONTRAST",
+ 0,
+ "Contrast",
+ "Increases or decreases the contrast of the mask"},
+ {IPMASK_FILTER_INVERT, "INVERT", 0, "Invert", "Inverts the mask"},
+ {0, NULL, 0, NULL, NULL},
+};
+
+static EnumPropertyItem prop_ipmask_filter_direction_types[] = {
+ {MASK_FILTER_STEP_DIRECTION_FORWARD,
+ "FORWARD",
+ 0,
+ "Forward",
+ "Apply the filter in the forward direction"},
+ {MASK_FILTER_STEP_DIRECTION_BACKWARD,
+ "BACKWARD",
+ 0,
+ "Backward",
+ "Apply the filter in the backward direction"},
+ {0, NULL, 0, NULL, NULL},
+};
+
/* RNA. */
RNA_def_enum(ot->srna,
"filter_type",
@@ -1080,6 +1132,8 @@ void SCULPT_OT_ipmask_filter(struct wmOperatorType *ot)
true,
"Step Interpolation",
"Calculate and render intermediate values between multiple full steps of the filter");
+ RNA_def_float(
+ ot->srna, "strength", 1.0f, -10.0f, 10.0f, "Strength", "Filter strength", -10.0f, 10.0f);
}
/******************************************************************************************/
More information about the Bf-blender-cvs
mailing list