[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