Brushstroke Tools: Initial Version #328
@ -17,8 +17,21 @@ class BSBST_OT_draw(bpy.types.Operator):
|
|||||||
bl_label = "Custom Draw"
|
bl_label = "Custom Draw"
|
||||||
bl_options = {'REGISTER', 'UNDO'}
|
bl_options = {'REGISTER', 'UNDO'}
|
||||||
|
|
||||||
brush_color: bpy.props.FloatVectorProperty(name='Brush Color', size=3, subtype='COLOR', default=(.0,.0,.0), soft_min=0, soft_max=1, update=None)
|
brush_color: bpy.props.FloatVectorProperty(name='Brush Color',
|
||||||
brush_smear: bpy.props.FloatProperty(name='Smear', subtype='FACTOR', default=0, min=0, max=1, update=None)
|
size=3,
|
||||||
|
subtype='COLOR',
|
||||||
|
default=(.0,.0,.0),
|
||||||
|
soft_min=0,
|
||||||
|
soft_max=1,
|
||||||
|
update=None,
|
||||||
|
)
|
||||||
|
brush_smear: bpy.props.FloatProperty(name='Smear',
|
||||||
|
subtype='FACTOR',
|
||||||
|
default=0,
|
||||||
|
min=0,
|
||||||
|
max=1,
|
||||||
|
update=None,
|
||||||
|
)
|
||||||
|
|
||||||
ng_process = None
|
ng_process = None
|
||||||
|
|
||||||
|
@ -351,7 +351,8 @@ class BSBST_OT_preset_remove_mod(bpy.types.Operator):
|
|||||||
|
|
||||||
class BSBST_OT_preset_toggle_attribute(bpy.types.Operator):
|
class BSBST_OT_preset_toggle_attribute(bpy.types.Operator):
|
||||||
"""
|
"""
|
||||||
Toggle use_attribute property for a socket on a specific object's modifier. (Workaround due to how these are actually stored as integer in Blender)
|
Toggle use_attribute property for a socket on a specific object's modifier.
|
||||||
|
(Workaround due to how these are actually stored as integer in Blender)
|
||||||
"""
|
"""
|
||||||
bl_idname = "brushstroke_tools.preset_toggle_attribute"
|
bl_idname = "brushstroke_tools.preset_toggle_attribute"
|
||||||
bl_label = "Toggle Attribute"
|
bl_label = "Toggle Attribute"
|
||||||
@ -371,7 +372,8 @@ class BSBST_OT_preset_toggle_attribute(bpy.types.Operator):
|
|||||||
override = context.copy()
|
override = context.copy()
|
||||||
override['object'] = settings.preset_object
|
override['object'] = settings.preset_object
|
||||||
with context.temp_override(**override):
|
with context.temp_override(**override):
|
||||||
bpy.ops.object.geometry_nodes_input_attribute_toggle(input_name=self.input_name, modifier_name=self.modifier_name)
|
bpy.ops.object.geometry_nodes_input_attribute_toggle(input_name=self.input_name,
|
||||||
|
modifier_name=self.modifier_name)
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
classes = [
|
classes = [
|
||||||
|
@ -37,9 +37,15 @@ def draw_panel_ui_recursive(panel, panel_name, mod, items):
|
|||||||
else:
|
else:
|
||||||
input_row.prop(mod, f'["{v.identifier}"]', text=k)
|
input_row.prop(mod, f'["{v.identifier}"]', text=k)
|
||||||
if is_preset:
|
if is_preset:
|
||||||
toggle = input_row.operator('brushstroke_tools.preset_toggle_attribute', text='', depress=mod[f'{v.identifier}_use_attribute'], icon='SPREADSHEET')
|
toggle = input_row.operator('brushstroke_tools.preset_toggle_attribute',
|
||||||
|
text='',
|
||||||
|
depress=mod[f'{v.identifier}_use_attribute'],
|
||||||
|
icon='SPREADSHEET')
|
||||||
else:
|
else:
|
||||||
toggle = input_row.operator('object.geometry_nodes_input_attribute_toggle', text='', depress=mod[f'{v.identifier}_use_attribute'], icon='SPREADSHEET')
|
toggle = input_row.operator('object.geometry_nodes_input_attribute_toggle',
|
||||||
|
text='',
|
||||||
|
depress=mod[f'{v.identifier}_use_attribute'],
|
||||||
|
icon='SPREADSHEET')
|
||||||
toggle.modifier_name = mod.name
|
toggle.modifier_name = mod.name
|
||||||
toggle.input_name = v.identifier
|
toggle.input_name = v.identifier
|
||||||
else:
|
else:
|
||||||
|
@ -2,14 +2,19 @@ import os
|
|||||||
import bpy
|
import bpy
|
||||||
from bpy.app.handlers import persistent
|
from bpy.app.handlers import persistent
|
||||||
|
|
||||||
ng_list = [ ".brushstroke_tools.processing",
|
ng_list = [
|
||||||
|
".brushstroke_tools.processing",
|
||||||
".brushstroke_tools.deformation",
|
".brushstroke_tools.deformation",
|
||||||
".brushstroke_tools.surface_fill",
|
".brushstroke_tools.surface_fill",
|
||||||
".brushstroke_tools.surface_draw",
|
".brushstroke_tools.surface_draw",
|
||||||
".brushstroke_tools.geometry_input",
|
".brushstroke_tools.geometry_input",
|
||||||
]
|
]
|
||||||
|
|
||||||
linkable_sockets = [bpy.types.NodeTreeInterfaceSocketObject, bpy.types.NodeTreeInterfaceSocketMaterial, bpy.types.NodeTreeInterfaceSocketVector]
|
linkable_sockets = [
|
||||||
|
bpy.types.NodeTreeInterfaceSocketObject,
|
||||||
|
bpy.types.NodeTreeInterfaceSocketMaterial,
|
||||||
|
bpy.types.NodeTreeInterfaceSocketVector
|
||||||
|
]
|
||||||
|
|
||||||
@persistent
|
@persistent
|
||||||
def refresh_preset(dummy):
|
def refresh_preset(dummy):
|
||||||
|
Loading…
Reference in New Issue
Block a user