[Bf-blender-cvs] [76de0eeb958] sculpt-dev: Sculpt: Add mask filter tool and target step count

Pablo Dobarro noreply at git.blender.org
Fri Feb 26 14:58:59 CET 2021


Commit: 76de0eeb958570bd5d33b1e468078e0d3934bdca
Author: Pablo Dobarro
Date:   Wed Feb 24 20:00:02 2021 +0100
Branches: sculpt-dev
https://developer.blender.org/rB76de0eeb958570bd5d33b1e468078e0d3934bdca

Sculpt: Add mask filter tool and target step count

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

M	release/scripts/presets/keyconfig/keymap_data/blender_default.py
M	release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
M	source/blender/editors/sculpt_paint/sculpt_filter_mask.c

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

diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index 479bbf110d0..5c8f21053ac 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -6621,6 +6621,16 @@ def km_3d_view_tool_sculpt_mesh_filter(params):
         ]},
     )
 
+def km_3d_view_tool_sculpt_ipmask_filter(params):
+    return (
+        "3D View Tool: Sculpt, IPMask Filter",
+        {"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
+        {"items": [
+            ("sculpt.ipmask_filter", {"type": params.tool_tweak, "value": 'ANY'},
+             None)
+        ]},
+    )
+
 
 def km_3d_view_tool_sculpt_cloth_filter(params):
     return (
@@ -7241,6 +7251,7 @@ def generate_keymaps(params=None):
         km_3d_view_tool_sculpt_lasso_project(params),
         km_3d_view_tool_sculpt_box_project(params),
         km_3d_view_tool_sculpt_mesh_filter(params),
+        km_3d_view_tool_sculpt_ipmask_filter(params),
         km_3d_view_tool_sculpt_cloth_filter(params),
         km_3d_view_tool_sculpt_color_filter(params),
         km_3d_view_tool_sculpt_mask_by_color(params),
diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
index 74c636ac1e6..e04c87af2ec 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
@@ -1480,6 +1480,21 @@ class _defs_sculpt:
             draw_settings=draw_settings,
         )
 
+    @ToolDef.from_fn
+    def ipmask_filter():
+        def draw_settings(_context, layout, tool):
+            props = tool.operator_properties("sculpt.ipmask_filter")
+            layout.prop(props, "type", expand=False)
+
+        return dict(
+            idname="builtin.ipmask_filter",
+            label="IPMask Filter",
+            icon="ops.sculpt.ipmask_filter",
+            widget=None,
+            keymap=(),
+            draw_settings=draw_settings,
+        )
+
     @ToolDef.from_fn
     def cloth_filter():
         def draw_settings(_context, layout, tool):
@@ -2872,6 +2887,7 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel):
             None,
             _defs_sculpt.mesh_filter,
             _defs_sculpt.cloth_filter,
+            _defs_sculpt.ipmask_filter,
             lambda context: (
                 (_defs_sculpt.color_filter,)
                 if context is None or (
diff --git a/source/blender/editors/sculpt_paint/sculpt_filter_mask.c b/source/blender/editors/sculpt_paint/sculpt_filter_mask.c
index 68304c87bf2..0e0d75c451d 100644
--- a/source/blender/editors/sculpt_paint/sculpt_filter_mask.c
+++ b/source/blender/editors/sculpt_paint/sculpt_filter_mask.c
@@ -354,6 +354,33 @@ static int sculpt_ipmask_filter_exec(bContext *C, wmOperator *op)
     return OPERATOR_FINISHED;
 }
 
+#define IPMASK_FILTER_STEP_SENSITIVITY 0.05f
+
+static int sculpt_ipmask_filter_modal(bContext *C, wmOperator *op, const wmEvent *event)
+{
+  Object *ob = CTX_data_active_object(C);
+  Depsgraph *depsgraph = CTX_data_depsgraph_pointer(C);
+  SculptSession *ss = ob->sculpt;
+  Sculpt *sd = CTX_data_tool_settings(C)->sculpt;
+
+  if (event->type == LEFTMOUSE && event->val == KM_RELEASE) {
+    SCULPT_filter_cache_free(ss);
+    SCULPT_undo_push_end();
+    SCULPT_flush_update_done(C, ob, SCULPT_UPDATE_MASK);
+    return OPERATOR_FINISHED;
+  }
+
+  BKE_sculpt_update_object_for_edit(depsgraph, ob, true, true, false);
+
+  const float len = event->x - event->prevclickx;
+  const int target_step = len * IPMASK_FILTER_STEP_SENSITIVITY * UI_DPI_FAC;
+
+  printf("TARGET STEP %d\n", target_step);
+
+
+  return OPERATOR_RUNNING_MODAL;
+}
+
 void SCULPT_OT_ipmask_filter(struct wmOperatorType *ot)
 {
   /* Identifiers. */
@@ -364,6 +391,7 @@ void SCULPT_OT_ipmask_filter(struct wmOperatorType *ot)
   /* API callbacks. */
   ot->exec = sculpt_ipmask_filter_exec;
   ot->invoke = sculpt_ipmask_filter_invoke;
+  ot->modal = sculpt_ipmask_filter_modal;
   ot->poll = SCULPT_mode_poll;
 
   ot->flag = OPTYPE_REGISTER;
@@ -384,12 +412,6 @@ void SCULPT_OT_ipmask_filter(struct wmOperatorType *ot)
               "Number of times that the filter is going to be applied",
               1,
               100);
-  RNA_def_boolean(
-      ot->srna,
-      "auto_iteration_count",
-      false,
-      "Auto Iteration Count",
-      "Use a automatic number of iterations based on the number of vertices of the sculpt");
 }
 
 /******************************************************************************************/



More information about the Bf-blender-cvs mailing list