[Bf-blender-cvs] [cddcc54f32c] sculpt-dev: Sculpt-dev: fix brush input mapping inheritance

Joseph Eagar noreply at git.blender.org
Tue Nov 16 22:31:05 CET 2021


Commit: cddcc54f32c72c2b81ff1d54d4559994d722c517
Author: Joseph Eagar
Date:   Tue Nov 16 13:26:39 2021 -0800
Branches: sculpt-dev
https://developer.blender.org/rBcddcc54f32c72c2b81ff1d54d4559994d722c517

Sculpt-dev: fix brush input mapping inheritance

* Brush input mappings now have three
  inheritance mode: "always", "never" and
  "channel" (use channel's inheritance mode).
* Note that the UI exposes a single inherit icon,
  which just toggles between "always" and
  "never," to lessen user confusion.
* Brush mappings default to "never" inheritance
  mode.
* Fixed wrong node update flag in bke_pbvh_insert_face_finalize
  leading to disappearing parts of the mesh.

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

M	release/datafiles/blender_icons_geom.py
M	release/datafiles/icons/ops.mesh.polybuild_hover.dat
M	release/scripts/presets/keyconfig/keymap_data/blender_default.py
M	release/scripts/startup/bl_ui/properties_paint_common.py
M	release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
M	release/scripts/startup/bl_ui/space_view3d.py
M	release/scripts/startup/bl_ui/space_view3d_toolbar.py
M	source/blender/blenkernel/BKE_blender_version.h
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/blenkernel/intern/pbvh.c
M	source/blender/blenkernel/intern/pbvh_bmesh.c
M	source/blender/blenloader/intern/versioning_300.c
M	source/blender/editors/datafiles/CMakeLists.txt
M	source/blender/makesdna/DNA_sculpt_brush_types.h
M	source/blender/makesrna/intern/rna_brush_engine.c

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

diff --git a/release/datafiles/blender_icons_geom.py b/release/datafiles/blender_icons_geom.py
index 33bc64f942e..8280728c658 100644
--- a/release/datafiles/blender_icons_geom.py
+++ b/release/datafiles/blender_icons_geom.py
@@ -116,14 +116,24 @@ def object_child_map(objects):
     return objects_children
 
 import sys
+def get_active_vcol(me):
+  vcol = me.vertex_colors.active
+  if not vcol and len(me.vertex_colors) > 0:
+    vcol = me.vertex_colors[0]
+  
+  return vcol
+  
 def mesh_data_lists_from_mesh(me, material_colors):
     me_loops = me.loops[:]
-    me_loops_color = me.vertex_colors.active.data[:]
+    me_loops_color = get_active_vcol(me)
+    me_loops_color = me_loops_color.data[:] if me_loops_color else None
     me_verts = me.vertices[:]
     me_polys = me.polygons[:]
-
+  
     tris_data = []
-
+    
+    white = [1, 1, 1, 1]
+    
     for p in me_polys:
         # Note, all faces are handled, backfacing/zero area is checked just before writing.
         material_index = p.material_index
@@ -135,22 +145,25 @@ def mesh_data_lists_from_mesh(me, material_colors):
         l_sta = p.loop_start
         l_len = p.loop_total
         loops_poly = me_loops[l_sta:l_sta + l_len]
-        color_poly = me_loops_color[l_sta:l_sta + l_len]
+        color_poly = me_loops_color[l_sta:l_sta + l_len] if me_loops_color else None
         i0 = 0
         i1 = 1
 
         # we only write tris now
         assert(len(loops_poly) == 3)
-
+        
         for i2 in range(2, l_len):
             l0 = loops_poly[i0]
             l1 = loops_poly[i1]
             l2 = loops_poly[i2]
-
-            c0 = color_poly[i0]
-            c1 = color_poly[i1]
-            c2 = color_poly[i2]
-
+            
+            if color_poly:
+              c0 = color_poly[i0]
+              c1 = color_poly[i1]
+              c2 = color_poly[i2]
+            else:
+              c1 = c2 = c3 = white
+              
             v0 = me_verts[l0.vertex_index]
             v1 = me_verts[l1.vertex_index]
             v2 = me_verts[l2.vertex_index]
diff --git a/release/datafiles/icons/ops.mesh.polybuild_hover.dat b/release/datafiles/icons/ops.mesh.polybuild_hover.dat
index e69de29bb2d..3cd3b1105d1 100644
Binary files a/release/datafiles/icons/ops.mesh.polybuild_hover.dat and b/release/datafiles/icons/ops.mesh.polybuild_hover.dat differ
diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index baf1c2a18ea..0386aae0530 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -6298,13 +6298,11 @@ def km_3d_view_tool_sculpt_cloth_filter(params):
         {"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
         {"items": [("sculpt.cloth_filter", params.tool_maybe_tweak_event, None)]},)
 
-
 def km_3d_view_tool_sculpt_color_filter(params):
     return ("3D View Tool: Sculpt, Color Filter",
         {"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
         {"items": [("sculpt.color_filter", params.tool_maybe_tweak_event, None)]},)
 
-
 def km_3d_view_tool_sculpt_mask_by_color(params):
     return ("3D View Tool: Sculpt, Mask by Color",
         {"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
diff --git a/release/scripts/startup/bl_ui/properties_paint_common.py b/release/scripts/startup/bl_ui/properties_paint_common.py
index 6332332ac63..728795ebf74 100644
--- a/release/scripts/startup/bl_ui/properties_paint_common.py
+++ b/release/scripts/startup/bl_ui/properties_paint_common.py
@@ -494,14 +494,20 @@ class UnifiedPaintPanel:
             sd.channels.ensure(ch)
 
             finalch = sd.channels[prop_name]
-            if ch.mappings["PRESSURE"].inherit:
-                pressurech = finalch
 
             is_toolset = True
             path = "tool_settings.sculpt.channels[\"%s\"]" % ch.idname
         else:
             path = "tool_settings.sculpt.brush.channels[\"%s\"]" % ch.idname
 
+        if not (ch.inherit and ch.mappings["PRESSURE"].inherit_mode == "NEVER"):
+            pressurech = finalch
+
+            if pressurech == ch and ch.mappings["PRESSURE"].inherit_mode == "ALWAYS":
+                sd = context.tool_settings.sculpt
+                sd.channels.ensure(ch)
+                pressurech = sd.channels[ch.idname]
+
         if show_reorder:
             props = row.operator("brush.change_channel_order", text="", icon="TRIA_UP")
             props.channel = ch.idname
@@ -609,9 +615,15 @@ class UnifiedPaintPanel:
 
                 for i, mp in enumerate(ch.mappings):
                     mp0 = mp
-                    if mp.inherit:
+
+                    if mp.inherit_mode != "NEVER":
                         mp = finalch.mappings[i]
 
+                        if mp.inherit_mode == "ALWAYS" and finalch == ch:
+                            sd = context.tool_settings.sculpt
+                            sd.channels.ensure(ch)
+                            mp = sd.channels[ch.idname].mappings[i]
+
                     row2 = layout.row(align=True)
                     row2.use_property_split = False
                     row2.use_property_decorate = False
@@ -626,7 +638,14 @@ class UnifiedPaintPanel:
                     row2.prop(mp0, "ui_expanded", text="", emboss=False, icon="DOWNARROW_HLT" if mp.ui_expanded else "RIGHTARROW")
 
                     row2.label(text=name)
+
+                    #row3 = row2.row(align=True)
+                    #row3.prop_enum(mp0, "inherit_mode", "ALWAYS", icon="BRUSHES_ALL", text="")
+                    #row3.prop_enum(mp0, "inherit_mode", "NEVER", icon="FORWARD", text="")
+                    #row3.prop_enum(mp0, "inherit_mode", "USE_CHANNEL", icon="FORWARD", text="")
+
                     row2.prop(mp0, "inherit", text="", icon="BRUSHES_ALL")
+                    
                     row2.prop(mp, "enabled", text="", icon="STYLUS_PRESSURE")
                     row2.prop(mp, "invert", text="", icon="ARROW_LEFTRIGHT")
 
@@ -643,7 +662,7 @@ class UnifiedPaintPanel:
                         
                         row = col.row(align=True)
 
-                        if mp0.inherit or toolsettings_only:
+                        if mp0.inherit_mode == "ALWAYS" or (mp0.inherit_mode == "USE_CHANNEL" and ch.inherits):
                             path2 = path + ".mappings[\"%s\"].curve" % (mp.type)
                         else:
                             brushpath = "tool_settings.sculpt.brush.channels[\"%s\"]" % ch.idname
diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
index 1631bc99bf8..27e8b982589 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
@@ -1161,9 +1161,15 @@ class _defs_sculpt:
     @staticmethod
     def generate_from_brushes(context):
         exclude_filter = {}
+
         # Use 'bpy.context' instead of 'context' since it can be None.
         prefs = bpy.context.preferences
 
+        # don't hide this behind experimental option in sculpt branch?
+        # joeedh
+        #if not prefs.experimental.use_sculpt_uvsmooth:
+        #    exclude_filter["UV_SMOOTH"] = True
+
         return generate_from_enum_ex(context,
             idname_prefix="builtin_brush.",
             icon_prefix="brush.sculpt.",
@@ -1396,6 +1402,7 @@ class _defs_sculpt:
     def color_filter():
         def draw_settings(_context, layout, tool):
             props = tool.operator_properties("sculpt.color_filter")
+
             layout.prop(props, "type", expand=False)
             if props.type == 'FILL':
                 layout.prop(props, "fill_color", expand=False)
@@ -2587,13 +2594,8 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel):
             _defs_sculpt.mesh_filter,
             _defs_sculpt.cloth_filter,
             _defs_sculpt.ipmask_filter,
-            lambda context: ((_defs_sculpt.color_filter,)
-                if context is None
-                else ()),
-            None,
-            lambda context: ((_defs_sculpt.mask_by_color,)
-                if context is None
-                else ()),
+            _defs_sculpt.color_filter,
+            _defs_sculpt.mask_by_color,
             None,
             _defs_sculpt.face_set_edit,
             None,
diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index 38c54bd7719..0bbb48e8fa2 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -290,8 +290,22 @@ class _draw_tool_settings_context_mode:
                     text, row.ui_units_x = name_size_overrides[ch.idname]
 
                 row.prop(final_ch, "value", slider=True, expand=False, text=text)
-                if final_ch.type in ["FLOAT", "INT"]:
-                    row.prop(final_ch.mappings["PRESSURE"], "enabled", text="", icon="STYLUS_PRESSURE")
+
+                sd = context.tool_settings.sculpt
+                sd.channels.ensure(ch)
+
+                if ch.mappings["PRESSURE"].inherit_mode != "NEVER":
+                    pressurech = final_ch
+
+                    if final_ch == ch and ch.mappings["PRESSURE"].inherit_mode == "ALWAYS":
+                        sd = context.tool_settings.sculpt
+                        sd.channels.ensure(ch)
+                        pressurech = sd.channels[ch.idname]
+                else:
+                    pressurech = ch
+
+                if ch.type in ["FLOAT", "INT"]:
+                    row.prop(pressurech.mappings["PRESSURE"], "enabled", text="", icon="STYLUS_PRESSURE")
                 
                 #UnifiedPaintPanel.channel_unified(row, context, brush,
                 #ch.idname, header=True)
diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
index 2b42168189f..b7abd7bafed 100644
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@ -1143,13 +1143,13 @@ class VIEW3D_PT_sculpt_dyntopo(Panel, View3DPaintPanel):
         col2 = col.r

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list