[Bf-blender-cvs] [76beed9068e] sculpt-dev: Sculpt: More brush engine stuff, got automasking to work with it

Joseph Eagar noreply at git.blender.org
Tue Sep 21 04:42:45 CEST 2021


Commit: 76beed9068e53e3d393e1c16f61efe8fd6edceda
Author: Joseph Eagar
Date:   Mon Sep 20 14:10:35 2021 -0700
Branches: sculpt-dev
https://developer.blender.org/rB76beed9068e53e3d393e1c16f61efe8fd6edceda

Sculpt: More brush engine stuff, got automasking to work with it

* Sculpt now has an API to get brush channel settings.
  If a sculpt cache exists it will use the channels there
  (ss->cache->channels_final), otherwise it pulls them
  from a brush and Sculpt toolsettings. Exampes:

  float f = SCULPT_get_float(ss, "setting", sd, brush);
  itn i = SCULPT_get_int(ss, "setting", sd, brush);

* Improved the UI a bit

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

M	release/scripts/startup/bl_ui/properties_paint_common.py
M	release/scripts/startup/bl_ui/space_view3d_toolbar.py
M	source/blender/blenkernel/BKE_brush_engine.h
M	source/blender/blenkernel/intern/brush_engine.c
M	source/blender/blenkernel/intern/brush_engine_presets.c
M	source/blender/editors/sculpt_paint/sculpt.c
M	source/blender/editors/sculpt_paint/sculpt_automasking.c
M	source/blender/editors/sculpt_paint/sculpt_intern.h
M	source/blender/makesrna/intern/rna_access.c
M	source/blender/makesrna/intern/rna_brush_engine.c

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

diff --git a/release/scripts/startup/bl_ui/properties_paint_common.py b/release/scripts/startup/bl_ui/properties_paint_common.py
index dacde89a72c..c656df2fa81 100644
--- a/release/scripts/startup/bl_ui/properties_paint_common.py
+++ b/release/scripts/startup/bl_ui/properties_paint_common.py
@@ -108,7 +108,8 @@ class UnifiedPaintPanel:
         return None
 
     @staticmethod
-    def channel_unified(layout, context, brush, prop_name, icon='NONE', pressure=True, text=None, slider=False, header=False, expand=None):
+    def channel_unified(layout, context, brush, prop_name, icon='NONE', pressure=True, text=None,
+                        slider=False, header=False, expand=None, toolsettings_only=False):
         """ Generalized way of adding brush options to the UI,
             along with their pen pressure setting and global toggle, if they exist. """
         ch = brush.channels.channels[prop_name]
@@ -119,6 +120,9 @@ class UnifiedPaintPanel:
         #if ch.ui_expanded:
         #    layout = layout.box().column() #.column() is a bit more compact
 
+        if ch.type == "BITMASK":
+            layout = layout.box()
+
         row = layout.row(align=True)
 
         typeprop = "float_value"
@@ -139,18 +143,35 @@ class UnifiedPaintPanel:
             text = text.strip()
 
         path = ""
+        is_toolset = False
 
-        if ch.inherit:
+        if ch.inherit or toolsettings_only:
             sd = context.tool_settings.sculpt
             #ensure channel exists in tool settings channel set
             sd.channels.ensure(ch)
 
             finalch = sd.channels.channels[prop_name]
+            is_toolset = True
             path = "tool_settings.sculpt.channels.channels[\"%s\"]" % ch.idname
         else:
             path = "tool_settings.sculpt.brush.channels.channels[\"%s\"]" % ch.idname
 
-        if expand is not None:
+        if ch.type == "BITMASK":
+            row.label(text=text)
+
+            if header:
+                row.prop_menu_enum(finalch, typeprop)
+            else:
+                col = layout.column()
+                col.emboss = "NONE"
+                for item in finalch.enum_items:
+                    if item.identifier in finalch.flags_value:
+                        itemicon = "CHECKBOX_HLT"
+                    else:
+                        itemicon = "CHECKBOX_DEHLT"
+                    col.prop_enum(finalch, typeprop, item.identifier, icon=itemicon)
+
+        elif expand is not None:
             row.prop(finalch, typeprop, icon=icon, text=text, slider=slider, expand=expand)
         else:
             row.prop(finalch, typeprop, icon=icon, text=text, slider=slider)
@@ -166,7 +187,15 @@ class UnifiedPaintPanel:
         #    # NOTE: We don't draw UnifiedPaintSettings in the header to reduce clutter. D5928#136281
         #    row.prop(ups, unified_name, text="", icon='BRUSHES_ALL')
         if not header and ch.type != "BOOL":
-            row.prop(ch, "inherit", text="", icon='BRUSHES_ALL')
+            if ch.type == "BITMASK" and not toolsettings_only and ch == finalch:
+                row.prop(ch, "inherit_if_unset", text="Combine With Defaults")
+
+            if not toolsettings_only:
+                row.prop(ch, "inherit", text="", icon='BRUSHES_ALL')
+
+            if ch.type == "BITMASK":
+                return
+
             row.prop(ch, "ui_expanded", text="", icon="TRIA_DOWN" if ch.ui_expanded else "TRIA_RIGHT")
 
             if ch.ui_expanded:
@@ -1163,6 +1192,18 @@ def brush_settings_advanced(layout, context, brush, popover=False):
         use_accumulate = capabilities.has_accumulate
         use_frontface = True
 
+        UnifiedPaintPanel.channel_unified(
+                layout.column(),
+                context,
+                brush,
+                "automasking", expand=False)
+        UnifiedPaintPanel.channel_unified(
+                layout.column(),
+                context,
+                brush,
+                "automasking_boundary_edges_propagation_steps")
+
+        """
         col = layout.column(heading="Auto-Masking", align=True)
 
         # topology automasking
@@ -1183,6 +1224,7 @@ def brush_settings_advanced(layout, context, brush, popover=False):
         col.prop(brush, "use_automasking_boundary_edges", text="Mesh Boundary")
         col.prop(brush, "use_automasking_boundary_face_sets", text="Face Sets Boundary")
         col.prop(brush, "automasking_boundary_edges_propagation_steps")
+        """
 
         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 7990878f48d..64170b8faa8 100644
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@ -951,11 +951,26 @@ class VIEW3D_PT_sculpt_options(Panel, View3DPaintPanel):
 
         col.separator()
 
+        brush = sculpt.brush
+        UnifiedPaintPanel.channel_unified(
+                layout.column(),
+                context,
+                brush,
+                "automasking", toolsettings_only=True)
+        UnifiedPaintPanel.channel_unified(
+                layout.column(),
+                context,
+                brush,
+                "automasking_boundary_edges_propagation_steps",
+                toolsettings_only=True)
+
+        """
         col = layout.column(heading="Auto-Masking", align=True)
         col.prop(sculpt, "use_automasking_topology", text="Topology")
         col.prop(sculpt, "use_automasking_face_sets", text="Face Sets")
         col.prop(sculpt, "use_automasking_boundary_edges", text="Mesh Boundary")
         col.prop(sculpt, "use_automasking_boundary_face_sets", text="Face Sets Boundary")
+        """
 
         col.separator()
         col.operator("sculpt.set_limit_surface")
diff --git a/source/blender/blenkernel/BKE_brush_engine.h b/source/blender/blenkernel/BKE_brush_engine.h
index eaf56f89751..f91b41d8a02 100644
--- a/source/blender/blenkernel/BKE_brush_engine.h
+++ b/source/blender/blenkernel/BKE_brush_engine.h
@@ -150,16 +150,18 @@ void BKE_brush_resolve_channels(struct Brush *brush, struct Sculpt *sd);
 
 void BKE_brush_channelset_set_final_int(BrushChannelSet *brushset,
                                         BrushChannelSet *toolset,
-                                        char *idname,
+                                        const char *idname,
                                         int value);
 
 int BKE_brush_channelset_get_final_int(BrushChannelSet *brushset,
                                        BrushChannelSet *toolset,
-                                       char *idname,
+                                       const char *idname,
                                        BrushMappingData *mapdata);
 
-int BKE_brush_channelset_get_int(BrushChannelSet *chset, char *idname, BrushMappingData *mapdata);
-bool BKE_brush_channelset_set_int(BrushChannelSet *chset, char *idname, int val);
+int BKE_brush_channelset_get_int(BrushChannelSet *chset,
+                                 const char *idname,
+                                 BrushMappingData *mapdata);
+bool BKE_brush_channelset_set_int(BrushChannelSet *chset, const char *idname, int val);
 
 void BKE_brush_channel_set_int(BrushChannel *ch, int val);
 float BKE_brush_channel_get_int(BrushChannel *ch, BrushMappingData *mapdata);
@@ -172,18 +174,18 @@ void BKE_brush_channel_set_float(BrushChannel *ch, float val);
 
 /* mapdata may be NULL */
 float BKE_brush_channelset_get_float(BrushChannelSet *chset,
-                                     char *idname,
+                                     const char *idname,
                                      BrushMappingData *mapdata);
-bool BKE_brush_channelset_set_float(BrushChannelSet *chset, char *idname, float val);
+bool BKE_brush_channelset_set_float(BrushChannelSet *chset, const char *idname, float val);
 
 float BKE_brush_channelset_get_final_float(BrushChannelSet *child,
                                            BrushChannelSet *parent,
-                                           char *idname,
+                                           const char *idname,
                                            BrushMappingData *mapdata);
 
 void BKE_brush_channelset_set_final_float(BrushChannelSet *child,
                                           BrushChannelSet *parent,
-                                          char *idname,
+                                          const char *idname,
                                           float value);
 
 void BKE_brush_init_toolsettings(struct Sculpt *sd);
diff --git a/source/blender/blenkernel/intern/brush_engine.c b/source/blender/blenkernel/intern/brush_engine.c
index 550751cad83..d6d6692f06f 100644
--- a/source/blender/blenkernel/intern/brush_engine.c
+++ b/source/blender/blenkernel/intern/brush_engine.c
@@ -641,7 +641,9 @@ void BKE_brush_resolve_channels(Brush *brush, Sculpt *sd)
   BKE_brush_channelset_merge(brush->channels_final, brush->channels, sd->channels);
 }
 
-int BKE_brush_channelset_get_int(BrushChannelSet *chset, char *idname, BrushMappingData *mapdata)
+int BKE_brush_channelset_get_int(BrushChannelSet *chset,
+                                 const char *idname,
+                                 BrushMappingData *mapdata)
 {
   BrushChannel *ch = BKE_brush_channelset_lookup(chset, idname);
 
@@ -709,7 +711,7 @@ void BKE_brush_channel_set_int(BrushChannel *ch, int val)
 
 int BKE_brush_channelset_get_final_int(BrushChannelSet *brushset,
                                        BrushChannelSet *toolset,
-                                       char *idname,
+                                       const char *idname,
                                        BrushMappingData *mapdata)
 {
   BrushChannel *ch = BKE_brush_channelset_lookup(brushset, idname);
@@ -733,7 +735,7 @@ int BKE_brush_channelset_get_final_int(BrushChannelSet *brushset,
 
 void BKE_brush_channelset_set_final_int(BrushChannelSet *brushset,
                                         BrushChannelSet *toolset,
-                                        char *idname,
+                                        const char *idname,
                                         int val

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list