Brushstroke Tools: Initial Version #328
@ -75,7 +75,7 @@ class BSBST_OT_new_brushstrokes(bpy.types.Operator):
|
||||
brushstrokes_object = self.new_brushstrokes_object(context, name)
|
||||
flow_is_required = settings.brushstroke_method == 'SURFACE_FILL'
|
||||
if flow_is_required:
|
||||
flow_object = self.new_flow_object(context, f'{name}-FLOW')
|
||||
flow_object = self.new_flow_object(context, utils.flow_name(name))
|
||||
|
||||
# attach surface object pointer
|
||||
if surface_object:
|
||||
|
@ -6,6 +6,9 @@ from bpy.app.handlers import persistent
|
||||
def find_context_brushstrokes(dummy):
|
||||
context = bpy.context
|
||||
settings = context.scene.BSBST_settings
|
||||
len_prev = len(settings.context_brushstrokes)
|
||||
name_prev = settings.context_brushstrokes[settings.active_context_brushstrokes_index].name if len_prev else ''
|
||||
idx = settings.active_context_brushstrokes_index
|
||||
# identify context brushstrokes
|
||||
for el in range(len(settings.context_brushstrokes)):
|
||||
settings.context_brushstrokes.remove(0)
|
||||
@ -27,6 +30,11 @@ def find_context_brushstrokes(dummy):
|
||||
bs = settings.context_brushstrokes.add()
|
||||
bs.name = ob.name
|
||||
bs.method = ob['BSBST_method']
|
||||
if name_prev == ob.name:
|
||||
idx = len(settings.context_brushstrokes)-1
|
||||
if len_prev == len(settings.context_brushstrokes):
|
||||
settings.active_context_brushstrokes_index = idx
|
||||
|
||||
settings.active_context_brushstrokes_index = max(min(settings.active_context_brushstrokes_index, len(settings.context_brushstrokes)-1), 0)
|
||||
SimonThommes marked this conversation as resolved
Outdated
|
||||
return
|
||||
|
||||
@ -45,6 +53,24 @@ def update_brushstroke_method(self, context):
|
||||
preset_object = bpy.data.objects.get(preset_name)
|
||||
settings.preset_object = preset_object
|
||||
return
|
||||
|
||||
def get_brushstroke_name(self):
|
||||
return self["name"]
|
||||
|
||||
def set_brushstroke_name(self, value):
|
||||
prev_name = self.get('name')
|
||||
self["name"] = value
|
||||
if not prev_name:
|
||||
return
|
||||
ob = bpy.data.objects.get(prev_name)
|
||||
if not ob:
|
||||
return
|
||||
ob.name = value
|
||||
flow_ob = utils.get_flow_object(ob)
|
||||
if flow_ob:
|
||||
flow_ob.name = utils.flow_name(value)
|
||||
return
|
||||
|
||||
class BSBST_link_context_setting(bpy.types.PropertyGroup):
|
||||
name: bpy.props.StringProperty(default='')
|
||||
link_context: bpy.props.BoolProperty(default=False)
|
||||
@ -54,7 +80,7 @@ class BSBST_socket_info(bpy.types.PropertyGroup):
|
||||
socket_info: bpy.props.CollectionProperty(type=BSBST_link_context_setting)
|
||||
|
||||
class BSBST_context_brushstrokes(bpy.types.PropertyGroup):
|
||||
name: bpy.props.StringProperty(default='')
|
||||
name: bpy.props.StringProperty(default='', get=get_brushstroke_name, set=set_brushstroke_name)
|
||||
method: bpy.props.StringProperty(default='')
|
||||
|
||||
class BSBST_Settings(bpy.types.PropertyGroup):
|
||||
|
@ -64,7 +64,7 @@ class BSBST_UL_brushstroke_objects(bpy.types.UIList):
|
||||
method_icon = 'OUTLINER_OB_FORCE_FIELD'
|
||||
elif context_brushstroke.method == 'SURFACE_DRAW':
|
||||
method_icon = 'OUTLINER_DATA_GP_LAYER'
|
||||
layout.label(text=context_brushstroke.name, icon=method_icon)
|
||||
layout.prop(context_brushstroke, 'name', text='', emboss=False, icon=method_icon)
|
||||
else:
|
||||
layout.label(text="", translate=False, icon_value=icon)
|
||||
elif self.layout_type == 'GRID':
|
||||
|
@ -119,6 +119,9 @@ def context_brushstrokes(context):
|
||||
settings = context.scene.BSBST_settings
|
||||
return settings.context_brushstrokes
|
||||
|
||||
def flow_name(name):
|
||||
return f'{name}-FLOW'
|
||||
|
||||
def register():
|
||||
bpy.app.handlers.depsgraph_update_post.append(refresh_preset)
|
||||
|
||||
SimonThommes marked this conversation as resolved
Outdated
Jacques Lucke
commented
Would recommend using Would recommend using `x not in y` instead of `not x in y` for improved readability.
https://stackoverflow.com/a/3481700
|
||||
|
Loading…
Reference in New Issue
Block a user
Generally, the code would be easier to read if line lengths were more limited. E.g. for Blender we have a 120 line length limit. That also makes it easier to have two files open next to each other. Such limits can be enforced automatically with auto-formatters like
autopep8
(what we currently use in Blender) or e.g.black
.