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 77 additions and 12 deletions
Showing only changes of commit e666f55059 - Show all commits

View File

@ -140,7 +140,7 @@ class BSBST_OT_new_brushstrokes(bpy.types.Operator):
for mod in brushstrokes_object.modifiers:
mod.show_group_selector = False
'''# enter mode and tool context
# enter mode and tool context
if settings.curve_mode == 'GP':
bpy.ops.object.mode_set(mode='PAINT_GREASE_PENCIL')
@ -149,7 +149,7 @@ class BSBST_OT_new_brushstrokes(bpy.types.Operator):
else:
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.wm.tool_set_by_id(name="brushstroke_tools.draw")
'''
return {"FINISHED"}
class BSBST_OT_init_preset(bpy.types.Operator):
@ -166,17 +166,46 @@ class BSBST_OT_init_preset(bpy.types.Operator):
settings = context.scene.BSBST_settings
return settings.preset_object is None
def execute(self, context):
def init_fill(self, context):
settings = context.scene.BSBST_settings
utils.ensure_resources()
preset_name = f'BSBST-PRESET_{settings.brushstroke_method}'
preset_object = bpy.data.objects.new(preset_name, bpy.data.hair_curves.new(preset_name))
settings.preset_object = preset_object
preset_object = settings.preset_object
# add modifiers
mod = preset_object.modifiers.new('Brushstrokes Deformation', 'NODES')
## input
mod = preset_object.modifiers.new('Input', 'NODES')
mod.node_group = bpy.data.node_groups['.brushstroke_tools.geometry_input']
mod_info = settings.preset_object.modifier_info.get(mod.name)
if not mod_info:
mod_info = settings.preset_object.modifier_info.add()
mod_info.name = mod.name
socket_info = mod_info.socket_info.get('Socket_2')
if not socket_info:
socket_info = mod_info.socket_info.add()
socket_info.name = 'Socket_2'
socket_info.link_context = True
## brushstrokes
mod = preset_object.modifiers.new('Brushstrokes', 'NODES')
mod.node_group = bpy.data.node_groups['.brushstroke_tools.surface_fill']
mod_info = settings.preset_object.modifier_info.get(mod.name)
if not mod_info:
mod_info = settings.preset_object.modifier_info.add()
mod_info.name = mod.name
return
def init_draw(self, context):
settings = context.scene.BSBST_settings
preset_object = settings.preset_object
SimonThommes marked this conversation as resolved Outdated

It's not really necessary to have empty return statements.

It's not really necessary to have empty return statements.
# add modifiers
## deformation
mod = preset_object.modifiers.new('Deformation', 'NODES')
mod.node_group = bpy.data.node_groups['.brushstroke_tools.deformation']
mod_info = settings.preset_object.modifier_info.get(mod.name)
@ -190,6 +219,37 @@ class BSBST_OT_init_preset(bpy.types.Operator):
socket_info.name = 'Socket_2'
socket_info.link_context = True
## brushstrokes
mod = preset_object.modifiers.new('Brushstrokes', 'NODES')
mod.node_group = bpy.data.node_groups['.brushstroke_tools.surface_draw']
mod_info = settings.preset_object.modifier_info.get(mod.name)
if not mod_info:
mod_info = settings.preset_object.modifier_info.add()
mod_info.name = mod.name
socket_info = mod_info.socket_info.get('Socket_2')
if not socket_info:
socket_info = mod_info.socket_info.add()
socket_info.name = 'Socket_2'
socket_info.link_context = True
return
def execute(self, context):
settings = context.scene.BSBST_settings
utils.ensure_resources()
preset_name = f'BSBST-PRESET_{settings.brushstroke_method}'
preset_object = bpy.data.objects.new(preset_name, bpy.data.hair_curves.new(preset_name))
settings.preset_object = preset_object
if settings.brushstroke_method == "SURFACE_FILL":
self.init_fill(context)
elif settings.brushstroke_method == "SURFACE_DRAW":
self.init_draw(context)
return {"FINISHED"}
class BSBST_OT_make_preset(bpy.types.Operator):

View File

@ -2,7 +2,12 @@ import os
import bpy
from bpy.app.handlers import persistent
ng_list = [".brushstroke_tools.processing", ".brushstroke_tools.deformation"]
ng_list = [ ".brushstroke_tools.processing",
".brushstroke_tools.deformation",
".brushstroke_tools.surface_fill",
".brushstroke_tools.surface_draw",
".brushstroke_tools.geometry_input",
]
linkable_sockets = [bpy.types.NodeTreeInterfaceSocketObject, bpy.types.NodeTreeInterfaceSocketMaterial]