Brushstroke Tools: Initial Version #328

Merged
Simon Thommes merged 229 commits from SimonThommes/blender-studio-tools:brushstroke_tools-initial-version into main 2024-11-06 15:03:47 +01:00
3 changed files with 32 additions and 1 deletions
Showing only changes of commit 1a09a1df63 - Show all commits

View File

@ -166,6 +166,25 @@ def set_active_context_brushstrokes_index(self, value):
if 'BSBST_material' in bs_ob.keys(): if 'BSBST_material' in bs_ob.keys():
settings.context_material = bs_ob['BSBST_material'] settings.context_material = bs_ob['BSBST_material']
def get_brush_style(self):
name = self.node_tree.nodes['Brush Style'].node_tree.name
return '.'.join(name.split('.')[1:])
def set_brush_style(self, value):
ng = bpy.data.node_groups.get(f'BSBST-brushstroke.{value}')
self.node_tree.nodes['Brush Style'].node_tree = ng
self["brush_style"] = value
def get_brush_style_items(self, context, edit_text):
items = []
for ng in bpy.data.node_groups:
if not ng.type == 'SHADER':
continue
if not ng.name.startswith('BSBST-brushstroke.'):
continue
items += [('.'.join(ng.name.split('.')[1:]), ng.name)]
return items
def link_context_type_items(self, context): def link_context_type_items(self, context):
items = [ items = [
('SURFACE_OBJECT', 'Surface Object', 'Link socket preset to context surface object', 'OUTLINER_OB_SURFACE', 1),\ ('SURFACE_OBJECT', 'Surface Object', 'Link socket preset to context surface object', 'OUTLINER_OB_SURFACE', 1),\
@ -263,6 +282,7 @@ def register():
bpy.utils.register_class(c) bpy.utils.register_class(c)
bpy.types.Scene.BSBST_settings = bpy.props.PointerProperty(type=BSBST_Settings) bpy.types.Scene.BSBST_settings = bpy.props.PointerProperty(type=BSBST_Settings)
bpy.types.Object.modifier_info = bpy.props.CollectionProperty(type=BSBST_modifier_info) bpy.types.Object.modifier_info = bpy.props.CollectionProperty(type=BSBST_modifier_info)
bpy.types.Material.brush_style = bpy.props.StringProperty(get=get_brush_style, set=set_brush_style, search=get_brush_style_items, search_options={'SORT'})
bpy.app.handlers.depsgraph_update_post.append(find_context_brushstrokes) bpy.app.handlers.depsgraph_update_post.append(find_context_brushstrokes)

View File

@ -125,12 +125,23 @@ def draw_panel_ui_recursive(panel, panel_name, mod, items, display_mode, hide_pa
col.prop(s, 'hide_ui', icon_only=True, icon='UNPINNED' if s.hide_ui else 'PINNED', emboss=False) col.prop(s, 'hide_ui', icon_only=True, icon='UNPINNED' if s.hide_ui else 'PINNED', emboss=False)
def draw_material_settings(layout, material): def draw_material_settings(layout, material):
settings = bpy.context.scene.BSBST_settings
layout.prop(material.node_tree.nodes['Opacity'].outputs[0], 'default_value', text='Opacity') layout.prop(material.node_tree.nodes['Opacity'].outputs[0], 'default_value', text='Opacity')
layout.prop(material.node_tree.nodes['Use Strength'], 'mute', text='Use Brush Strength', invert_checkbox=True) layout.prop(material.node_tree.nodes['Use Strength'], 'mute', text='Use Brush Strength', invert_checkbox=True)
layout.prop(material.node_tree.nodes['Color Variation'].inputs[0], 'default_value', text='Color Variation') layout.prop(material.node_tree.nodes['Color Variation'].inputs[0], 'default_value', text='Color Variation')
layout.prop(material.node_tree.nodes['Principled BSDF'].inputs[1], 'default_value', text='Metallic') layout.prop(material.node_tree.nodes['Principled BSDF'].inputs[1], 'default_value', text='Metallic')
layout.prop(material.node_tree.nodes['Principled BSDF'].inputs[2], 'default_value', text='Roughness') layout.prop(material.node_tree.nodes['Principled BSDF'].inputs[2], 'default_value', text='Roughness')
layout.prop(material.node_tree.nodes['Bump'], 'mute', text='Bump', invert_checkbox=True)
layout.prop(material.node_tree.nodes['Bump'].inputs[0], 'default_value', text='Bump Strength')
brush_header, brush_panel = layout.panel('brush_panel', default_closed = True)
brush_header.label(text='Brush Style', icon='BRUSHES_ALL')
if brush_panel:
#brush_panel.prop_search(material.node_tree.nodes['Brush Style'], 'node_tree', settings, 'styles', icon='BRUSHES_ALL')
#brush_panel.template_node_inputs(material.node_tree.nodes['Brush Style'])
brush_panel.prop(material, 'brush_style')
brush_panel.template_node_inputs(material.node_tree.nodes['Brush Curve'])
effects_header, effects_panel = layout.panel('effects_panel', default_closed = True) effects_header, effects_panel = layout.panel('effects_panel', default_closed = True)
effects_header.label(text='Effects', icon='SHADERFX') effects_header.label(text='Effects', icon='SHADERFX')