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
2 changed files with 12 additions and 4 deletions
Showing only changes of commit a2485dcd43 - Show all commits

View File

@ -2,7 +2,7 @@ import bpy
from . import utils from . import utils
class BSBST_OT_new_brushstrokes(bpy.types.Operator): class BSBST_OT_new_brushstrokes(bpy.types.Operator):
""" Create new object according to type. """ Create new object according to method and type.
Link to correct collection. Link to correct collection.
Attach to selection context if applicable. Attach to selection context if applicable.
Assign selected modifier setup. Enter correct context for editing. Assign selected modifier setup. Enter correct context for editing.
@ -134,7 +134,8 @@ class BSBST_OT_init_preset(bpy.types.Operator):
settings = context.scene.BSBST_settings settings = context.scene.BSBST_settings
utils.ensure_resources() utils.ensure_resources()
preset_object = bpy.data.objects.new('BSBST_PRESET', bpy.data.hair_curves.new('BSBST_PRESET')) 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 settings.preset_object = preset_object
# add modifiers # add modifiers
@ -172,7 +173,8 @@ class BSBST_OT_make_preset(bpy.types.Operator):
settings = context.scene.BSBST_settings settings = context.scene.BSBST_settings
if not settings.preset_object: if not settings.preset_object:
settings.preset_object = bpy.data.objects.new('BSBST_PRESET', bpy.data.hair_curves.new('BSBST_PRESET')) preset_name = f'BSBST-PRESET_{settings.brushstroke_method}'
settings.preset_object = bpy.data.objects.new(preset_name, bpy.data.hair_curves.new(preset_name))
else: else:
for mod in settings.preset_object.modifiers[:]: for mod in settings.preset_object.modifiers[:]:
settings.preset_object.modifiers.remove(mod) settings.preset_object.modifiers.remove(mod)

View File

@ -1,5 +1,11 @@
import bpy import bpy
def update_brushstroke_method(self, context):
settings = context.scene.BSBST_settings
preset_name = f'BSBST-PRESET_{settings.brushstroke_method}'
preset_object = bpy.data.objects.get(preset_name)
settings.preset_object = preset_object
return
class BSBST_link_context_setting(bpy.types.PropertyGroup): class BSBST_link_context_setting(bpy.types.PropertyGroup):
name: bpy.props.StringProperty(default='') name: bpy.props.StringProperty(default='')
link_context: bpy.props.BoolProperty(default=False) link_context: bpy.props.BoolProperty(default=False)
@ -13,7 +19,7 @@ class BSBST_Settings(bpy.types.PropertyGroup):
preset_object: bpy.props.PointerProperty(type=bpy.types.Object, name="Preset Object") preset_object: bpy.props.PointerProperty(type=bpy.types.Object, name="Preset Object")
preset_material: bpy.props.PointerProperty(type=bpy.types.Material, name="Preset Material") preset_material: bpy.props.PointerProperty(type=bpy.types.Material, name="Preset Material")
assign_materials: bpy.props.BoolProperty(name='Assign Modifier Materials', default=True) assign_materials: bpy.props.BoolProperty(name='Assign Modifier Materials', default=True)
brushstroke_method: bpy.props.EnumProperty(default='SURFACE_FILL', brushstroke_method: bpy.props.EnumProperty(default='SURFACE_FILL', update=update_brushstroke_method,
items= [('SURFACE_FILL', 'Fill', 'Use surface fill method for new brushstroke object', 'OUTLINER_OB_FORCE_FIELD', 0),\ items= [('SURFACE_FILL', 'Fill', 'Use surface fill method for new brushstroke object', 'OUTLINER_OB_FORCE_FIELD', 0),\
('SURFACE_DRAW', 'Draw', 'Use surface draw method for new brushstroke object', 'OUTLINER_DATA_GP_LAYER', 1), ('SURFACE_DRAW', 'Draw', 'Use surface draw method for new brushstroke object', 'OUTLINER_DATA_GP_LAYER', 1),
]) ])