[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