diff --git a/operators/__init__.py b/operators/__init__.py index 0a6e768..591fa71 100755 --- a/operators/__init__.py +++ b/operators/__init__.py @@ -3,6 +3,7 @@ from . import ( outputs_setup, outputs_search_and_replace, visibility_conflicts, + simplify_conflicts, ) mods = ( @@ -10,6 +11,7 @@ mods = ( outputs_setup, outputs_search_and_replace, visibility_conflicts, + simplify_conflicts, ) def register(): diff --git a/operators/simplify_conflicts.py b/operators/simplify_conflicts.py index eda3cd6..f55dc66 100644 --- a/operators/simplify_conflicts.py +++ b/operators/simplify_conflicts.py @@ -118,6 +118,13 @@ class RT_OT_list_object_affected_by_simplify(Operator): layout.use_property_decorate = False layout.use_property_split = True render = context.scene.render + + # Get current simplify settings + simplify_viewport = render.simplify_subdivision + simplify_render = render.simplify_subdivision_render + max_child_particles = min(render.simplify_child_particles, render.simplify_child_particles_render) + volume_limit_resolution = render.simplify_volumes + ## Show simplify settings # layout.label(text="Simplify Settings:") @@ -126,7 +133,7 @@ class RT_OT_list_object_affected_by_simplify(Operator): layout.label(text="Render:") bpy.types.RENDER_PT_simplify_render.draw(self, context) - + layout.separator() if not self.ob_list: @@ -146,8 +153,15 @@ class RT_OT_list_object_affected_by_simplify(Operator): if data['type'] == 'SUBSURF': mod = data['modifier'] + # Check if currently affected by simplify + viewport_limited = mod.levels > simplify_viewport + render_limited = mod.render_levels > simplify_render + is_currently_affected = viewport_limited or render_limited + # Modifier name row row = col.row() + row.active = is_currently_affected + 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) @@ -161,21 +175,37 @@ class RT_OT_list_object_affected_by_simplify(Operator): op.object_name = obj.name op.modifier_name = mod.name row.label(text="Viewport:") - row.prop(mod, "levels", text="") + + # Create subrow for viewport setting + subrow = row.row() + subrow.active = viewport_limited + subrow.prop(mod, "levels", text="") # Render levels row (indented) row = col.row() + row.active = is_currently_affected # Indent to match row.label(text=' ', icon='BLANK1') row.label(text=' ', icon='BLANK1') row.label(text="Render:") - row.prop(mod, "render_levels", text="") + + # Create subrow for render setting + subrow = row.row() + subrow.active = render_limited + subrow.prop(mod, "render_levels", text="") elif data['type'] == 'MULTIRES': mod = data['modifier'] + # Check if currently affected by simplify + viewport_limited = mod.levels > simplify_viewport + render_limited = mod.render_levels > simplify_render + is_currently_affected = viewport_limited or render_limited + # Modifier name row row = col.row() + row.active = is_currently_affected + 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) @@ -189,18 +219,32 @@ class RT_OT_list_object_affected_by_simplify(Operator): op.object_name = obj.name op.modifier_name = mod.name row.label(text="Viewport:") - row.prop(mod, "levels", text="") + + # Create subrow for viewport setting + subrow = row.row() + subrow.active = viewport_limited + subrow.prop(mod, "levels", text="") # Render levels row (indented) row = col.row() - # Indent to match + row.active = is_currently_affected + # Indent to match row.label(text=' ', icon='BLANK1') row.label(text=' ', icon='BLANK1') row.label(text="Render:") - row.prop(mod, "render_levels", text="") + + # Create subrow for render setting + subrow = row.row() + subrow.active = render_limited + subrow.prop(mod, "render_levels", text="") elif data['type'] == 'PARTICLE': + # Check if currently affected by simplify + is_currently_affected = max_child_particles < 1.0 + row = col.row() + row.active = is_currently_affected + 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) @@ -210,9 +254,12 @@ class RT_OT_list_object_affected_by_simplify(Operator): 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']}") + + # Create subrow for particle info + subrow = row.row() + subrow.label(text=f"Particles: {psys.name}", icon='PARTICLES') + subrow.label(text=f"Type: {data['particle_type']}") + subrow.label(text=f"Count: {data['count']}") elif data['type'] == 'HAIR': row = col.row() @@ -225,8 +272,11 @@ class RT_OT_list_object_affected_by_simplify(Operator): 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']}") + + # Create subrow for hair info + subrow = row.row() + subrow.label(text=f"Hair: {mod.name}", icon='HAIR') + subrow.label(text=f"Node Group: {data['node_group']}") elif data['type'] == 'SUBSURFACE': row = col.row() @@ -239,8 +289,11 @@ class RT_OT_list_object_affected_by_simplify(Operator): 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}") + + # Create subrow for material info + subrow = row.row() + subrow.label(text=f"Material: {mat.name}", icon='MATERIAL') + subrow.label(text=f"Subsurface: {data['subsurface_value']:.3f}") elif data['type'] == 'VOLUME_MAT': row = col.row() @@ -253,10 +306,18 @@ class RT_OT_list_object_affected_by_simplify(Operator): row.label(text=' ', icon='BLANK1') mat = data['material'] - row.label(text=f"Volume Material: {mat.name}", icon='MATERIAL') + + # Create subrow for volume material info + subrow = row.row() + subrow.label(text=f"Volume Material: {mat.name}", icon='MATERIAL') elif data['type'] == 'VOLUME_OBJ': + # Check if currently affected by simplify + is_currently_affected = volume_limit_resolution < 1.0 + row = col.row() + row.active = is_currently_affected + 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) @@ -265,7 +326,9 @@ class RT_OT_list_object_affected_by_simplify(Operator): # Subsequent rows, show empty space row.label(text=' ', icon='BLANK1') - row.label(text="Volume Object", icon='VOLUME_DATA') + # Create subrow for volume object info + subrow = row.row() + subrow.label(text="Volume Object", icon='VOLUME_DATA') def execute(self, context): return {'FINISHED'} diff --git a/ui.py b/ui.py index 0165aad..64576fc 100755 --- a/ui.py +++ b/ui.py @@ -32,8 +32,8 @@ class RT_PT_visibility_check(Panel): layout.operator("rt.list_collection_visibility_conflicts", text="List Collections Visibility Conflicts", icon="OUTLINER_COLLECTION") - # layout.separator() - # layout.operator("rt.list_object_affected_by_simplify", text="List Object Affected By Simplify", icon="MOD_SIMPLIFY") + layout.separator() + layout.operator("rt.list_object_affected_by_simplify", text="List Object Affected By Simplify", icon="MOD_SIMPLIFY") ## Unused, only exposed in Create output panel