Added global checks to popup and then launch individual checks
0.5.1
This commit is contained in:
+45
-29
@@ -1,7 +1,8 @@
|
||||
import bpy
|
||||
|
||||
from bpy.types import Operator
|
||||
from .. import fn
|
||||
from .simplify_conflicts import list_simplify_affected_objects
|
||||
from .visibility_conflicts import get_viewlayer_collections_with_visiblity_conflict
|
||||
|
||||
## WIP : checker operator to perform all check at once (sometimes a limited version of the check) to expose useful solving operators.
|
||||
|
||||
@@ -9,20 +10,19 @@ from .simplify_conflicts import list_simplify_affected_objects
|
||||
|
||||
class RT_OT_scene_checker(Operator):
|
||||
bl_idname = "rt.scene_checker"
|
||||
bl_label = "Check Scene "
|
||||
bl_label = "Check Scene For Render Issues"
|
||||
bl_description = "Check / correct some aspect of the scene and objects, properties, etc. and report"
|
||||
bl_options = {"REGISTER"}
|
||||
|
||||
## List of possible actions calls :
|
||||
# set scene res
|
||||
# set scene percentage at 100:
|
||||
# Disabled animation
|
||||
# Objects visibility conflict
|
||||
# Objects modifiers visibility conflict
|
||||
## checkes and possible actions calls :
|
||||
# list_object_visibility_conflicts
|
||||
# list_modifier_visibility
|
||||
# list_collection_visibility_conflicts
|
||||
# list_object_affected_by_simplify
|
||||
|
||||
apply_fixes : bpy.props.BoolProperty(name="Apply Fixes", default=False,
|
||||
description="Apply possible fixes instead of just listing (pop the list again in fix mode)",
|
||||
options={'SKIP_SAVE'})
|
||||
# apply_fixes : bpy.props.BoolProperty(name="Apply Fixes", default=False,
|
||||
# description="Apply possible fixes instead of just listing (pop the list again in fix mode)",
|
||||
# options={'SKIP_SAVE'})
|
||||
|
||||
def invoke(self, context, event):
|
||||
self.ctrl = event.ctrl
|
||||
@@ -30,7 +30,7 @@ class RT_OT_scene_checker(Operator):
|
||||
|
||||
def execute(self, context):
|
||||
problems = []
|
||||
|
||||
print('-- Scene Checks --')
|
||||
## Old method : Apply fixes based on pref (inverted by ctrl key)
|
||||
# # If Ctrl is pressed, invert behavior (invert boolean)
|
||||
# apply ^= self.ctrl
|
||||
@@ -49,7 +49,7 @@ class RT_OT_scene_checker(Operator):
|
||||
viz_ct += 1
|
||||
print(f'{o.name} : viewlayer {hv} - viewport {vp} - render {rd}')
|
||||
if viz_ct:
|
||||
problems.append(['rt.list_object_visibility_conflicts', f'{viz_ct} objects visibility conflicts (details in console)', 'OBJECT_DATAMODE'])
|
||||
problems.append(['rt.list_object_visibility_conflicts', f'{viz_ct} objects visibility conflicts', 'OBJECT_DATAMODE'])
|
||||
|
||||
## GP modifiers visibility conflict
|
||||
mod_viz_ct = 0
|
||||
@@ -61,33 +61,44 @@ class RT_OT_scene_checker(Operator):
|
||||
mod_viz_ct += 1
|
||||
print(f'{o.name} - modifier {m.name}: viewport {vp} != render {rd}')
|
||||
if mod_viz_ct:
|
||||
problems.append(['rt.list_modifier_visibility', f'{mod_viz_ct} modifiers visibility conflicts (details in console)', 'MODIFIER_DATA'])
|
||||
problems.append(['rt.list_modifier_visibility', f'{mod_viz_ct} modifiers visibility conflicts', 'MODIFIER_DATA'])
|
||||
|
||||
## Collection
|
||||
# TODO: add check for collection visibility conflicts
|
||||
|
||||
|
||||
if conflicts := get_viewlayer_collections_with_visiblity_conflict(context):
|
||||
print('\nCollection visibility conflicts:')
|
||||
for vc in conflicts:
|
||||
vl = 'Yes' if vc.hide_viewport else 'No'
|
||||
vp = 'Yes' if vc.collection.hide_viewport else 'No'
|
||||
rd = 'Yes' if vc.collection.hide_render else 'No'
|
||||
print(f'{vc.name}: viewlayer {vl} - viewport {vp} - render {rd}')
|
||||
problems.append(['rt.list_collection_visibility_conflicts', f'{len(conflicts)} collections visibility conflicts', 'GROUP'])
|
||||
|
||||
## Simplify affected object
|
||||
if context.scene.render.use_simplify and list_simplify_affected_objects(context):
|
||||
problems.append(['rt.list_object_affected_by_simplify', 'Some objects are affected by simplify (details in console)', 'MOD_SIMPLIFY'])
|
||||
if context.scene.render.use_simplify and (conflicts := list_simplify_affected_objects(context)):
|
||||
print('\nSimplify affected objects:')
|
||||
# Conflict list model : [[obj, [{type: "SUBSURF", ..}, {..}], icon], ..]
|
||||
for item_l in conflicts:
|
||||
print(f'{item_l[0].name} : {[m.get("type", "issue") for m in item_l[1]]}')
|
||||
problems.append(['rt.list_object_affected_by_simplify', f'{len(conflicts)} objects affected by simplify', 'MOD_SIMPLIFY'])
|
||||
|
||||
|
||||
#### --- print fix/problems report
|
||||
if problems:
|
||||
print('===File check===')
|
||||
for p in problems:
|
||||
if isinstance(p, str):
|
||||
print(p)
|
||||
else:
|
||||
print(p[0])
|
||||
## List checks
|
||||
# for p in problems:
|
||||
# if isinstance(p, str):
|
||||
# print(p)
|
||||
# else:
|
||||
# print(p[0])
|
||||
|
||||
if not self.apply_fixes:
|
||||
## button to call the operator again with apply_fixes set to True
|
||||
problems.append(['OPERATOR', 'gp.file_checker', 'Apply Fixes', 'FORWARD', {'apply_fixes': True}])
|
||||
# if not self.apply_fixes:
|
||||
# ## button to call the operator again with apply_fixes set to True
|
||||
# problems.append(['OPERATOR', 'gp.file_checker', 'Apply Fixes', 'FORWARD', {'apply_fixes': True}])
|
||||
|
||||
# Show in viewport
|
||||
title = "Changed Settings" if apply else "Checked Settings (nothing changed)"
|
||||
# title = "Changed Settings" if apply else "Checked Settings (nothing changed)"
|
||||
title = "Visibility checks report (details in console)"
|
||||
fn.show_message_box(problems, _title = title, _icon = 'INFO')
|
||||
else:
|
||||
self.report({'INFO'}, 'All good')
|
||||
@@ -97,4 +108,9 @@ class RT_OT_scene_checker(Operator):
|
||||
# endregion
|
||||
|
||||
|
||||
# RT_OT_scene_checker,
|
||||
def register():
|
||||
bpy.utils.register_class(RT_OT_scene_checker)
|
||||
|
||||
|
||||
def unregister():
|
||||
bpy.utils.unregister_class(RT_OT_scene_checker)
|
||||
|
||||
Reference in New Issue
Block a user