From 4626f5c15dd96c479fb070746170933523dd6dc5 Mon Sep 17 00:00:00 2001 From: pullusb Date: Tue, 22 Jul 2025 16:16:38 +0200 Subject: [PATCH] more dynamic UI --- operators/simplify_conflicts.py | 133 ++++++++++++++++++++++---------- 1 file changed, 94 insertions(+), 39 deletions(-) diff --git a/operators/simplify_conflicts.py b/operators/simplify_conflicts.py index 0ab00a0..eda3cd6 100644 --- a/operators/simplify_conflicts.py +++ b/operators/simplify_conflicts.py @@ -20,7 +20,7 @@ class RT_OT_list_object_affected_by_simplify(Operator): render = context.scene.render simplify_viewport = render.simplify_subdivision simplify_render = render.simplify_subdivision_render - max_child_particles = render.simplify_child_particles + max_child_particles = min(render.simplify_child_particles, render.simplify_child_particles_render) volume_limit_resolution = render.simplify_volumes for obj in context.scene.objects: @@ -115,6 +115,8 @@ class RT_OT_list_object_affected_by_simplify(Operator): def draw(self, context): layout = self.layout + layout.use_property_decorate = False + layout.use_property_split = True render = context.scene.render ## Show simplify settings # layout.label(text="Simplify Settings:") @@ -124,19 +126,6 @@ class RT_OT_list_object_affected_by_simplify(Operator): layout.label(text="Render:") bpy.types.RENDER_PT_simplify_render.draw(self, context) - # row = box.row() - # row.label(text="Current Simplify Settings:", icon='SETTINGS') - - # col = box.column(align=True) - # row = col.row() - # # row.label(text=f"Enabled: {render.use_simplify}") - # row.prop(render, "use_simplify") # Enabled - # row = col.row() - # # row.label(text=f"Viewport Subdivision: {render.simplify_subdivision}") - # row.prop(render, "simplify_subdivision") # Viewport - # row = col.row() - # # row.label(text=f"Render Subdivision: {render.simplify_subdivision_render}") - # row.prop(render, "simplify_subdivision_render") # Render layout.separator() @@ -153,63 +142,129 @@ class RT_OT_list_object_affected_by_simplify(Operator): obj, affected_data, icon = obj_data for i, data in enumerate(affected_data): - row = col.row() - - if i == 0: - # Show object name and icon for first item - op = row.operator('rt.select_object_by_name', text=obj.name, icon=icon, emboss=False) - op.object_name = obj.name - else: - # Subsequent rows, show empty space - row.label(text=' ', icon='BLANK1') - # Show the specific affected feature if data['type'] == 'SUBSURF': mod = data['modifier'] - row.label(text=f"SubSurf: {mod.name}", icon='MOD_SUBSURF') - # Show viewport levels - sub_row = row.row(align=True) - sub_row.label(text=f"V: {data['viewport_current']}→{data['viewport_limited']}") - + # Modifier name row + row = col.row() + if i == 0: + # Show object name and icon for first item + op = row.operator('rt.select_object_by_name', text=obj.name, icon=icon, emboss=False) + op.object_name = obj.name + else: + # Subsequent rows, show empty space + row.label(text=' ', icon='BLANK1') - # Show render levels - sub_row = row.row(align=True) - sub_row.label(text=f"R: {data['render_current']}→{data['render_limited']}") + # Modifier name as operator + Viewport levels on same row + op = row.operator('rt.select_object_by_name', text=mod.name, icon='MOD_SUBSURF', emboss=False) + op.object_name = obj.name + op.modifier_name = mod.name + row.label(text="Viewport:") + row.prop(mod, "levels", text="") + + # Render levels row (indented) + row = col.row() + # Indent to match + row.label(text=' ', icon='BLANK1') + row.label(text=' ', icon='BLANK1') + row.label(text="Render:") + row.prop(mod, "render_levels", text="") elif data['type'] == 'MULTIRES': mod = data['modifier'] - row.label(text=f"Multires: {mod.name}", icon='MOD_MULTIRES') + + # Modifier name row + row = col.row() + if i == 0: + # Show object name and icon for first item + op = row.operator('rt.select_object_by_name', text=obj.name, icon=icon, emboss=False) + op.object_name = obj.name + else: + # Subsequent rows, show empty space + row.label(text=' ', icon='BLANK1') - # Show viewport levels - sub_row = row.row(align=True) - sub_row.label(text=f"V: {data['viewport_current']}→{data['viewport_limited']}") + # Modifier name as operator + Viewport levels on same row + op = row.operator('rt.select_object_by_name', text=mod.name, icon='MOD_MULTIRES', emboss=False) + op.object_name = obj.name + op.modifier_name = mod.name + row.label(text="Viewport:") + row.prop(mod, "levels", text="") - # Show render levels - sub_row = row.row(align=True) - sub_row.label(text=f"R: {data['render_current']}→{data['render_limited']}") + # Render levels row (indented) + row = col.row() + # Indent to match + row.label(text=' ', icon='BLANK1') + row.label(text=' ', icon='BLANK1') + row.label(text="Render:") + row.prop(mod, "render_levels", text="") elif data['type'] == 'PARTICLE': + row = col.row() + if i == 0: + # Show object name and icon for first item + op = row.operator('rt.select_object_by_name', text=obj.name, icon=icon, emboss=False) + op.object_name = obj.name + else: + # Subsequent rows, show empty space + row.label(text=' ', icon='BLANK1') + psys = data['particle_system'] row.label(text=f"Particles: {psys.name}", icon='PARTICLES') row.label(text=f"Type: {data['particle_type']}") row.label(text=f"Count: {data['count']}") elif data['type'] == 'HAIR': + row = col.row() + if i == 0: + # Show object name and icon for first item + op = row.operator('rt.select_object_by_name', text=obj.name, icon=icon, emboss=False) + op.object_name = obj.name + else: + # Subsequent rows, show empty space + row.label(text=' ', icon='BLANK1') + mod = data['modifier'] row.label(text=f"Hair: {mod.name}", icon='HAIR') row.label(text=f"Node Group: {data['node_group']}") elif data['type'] == 'SUBSURFACE': + row = col.row() + if i == 0: + # Show object name and icon for first item + op = row.operator('rt.select_object_by_name', text=obj.name, icon=icon, emboss=False) + op.object_name = obj.name + else: + # Subsequent rows, show empty space + row.label(text=' ', icon='BLANK1') + mat = data['material'] row.label(text=f"Material: {mat.name}", icon='MATERIAL') row.label(text=f"Subsurface: {data['subsurface_value']:.3f}") elif data['type'] == 'VOLUME_MAT': + row = col.row() + if i == 0: + # Show object name and icon for first item + op = row.operator('rt.select_object_by_name', text=obj.name, icon=icon, emboss=False) + op.object_name = obj.name + else: + # Subsequent rows, show empty space + row.label(text=' ', icon='BLANK1') + mat = data['material'] row.label(text=f"Volume Material: {mat.name}", icon='MATERIAL') elif data['type'] == 'VOLUME_OBJ': + row = col.row() + if i == 0: + # Show object name and icon for first item + op = row.operator('rt.select_object_by_name', text=obj.name, icon=icon, emboss=False) + op.object_name = obj.name + else: + # Subsequent rows, show empty space + row.label(text=' ', icon='BLANK1') + row.label(text="Volume Object", icon='VOLUME_DATA') def execute(self, context):