diff --git a/OP_auto_build.py b/OP_auto_build.py index 8c62dad..431da25 100644 --- a/OP_auto_build.py +++ b/OP_auto_build.py @@ -63,7 +63,7 @@ class GPEXP_OT_render_auto_build(bpy.types.Operator): def execute(self, context): print('-- Auto-build Render scene --\n') - ## TODO: add colors to layers (specified in ENV or hardcoded for now...) + ## TODO: Add colors to layers (specified in ENV or hardcoded for now...) ## Option: Maybe find a way to create a color from prefix hash ? (always give unique color with same prefix on other project!) render_scn = bpy.data.scenes.get('Render') @@ -103,8 +103,21 @@ class GPEXP_OT_render_auto_build(bpy.types.Operator): if not render_scn: self.report({'ERROR'}, 'No render scene found') return {'CANCELLED'} + context.window.scene = render_scn + ## Group all adjacent layer type + print('Group all adjacent layer type') + for ob in ob_list: + fn.group_adjacent_layer_prefix_rlayer(ob, excluded_prefix=['GP', 'PO', 'RG'], first_name=True) + + bpy.ops.gp_export.render_scene_setup() # next render scene setup at once + + ## attempt to refresh scene + # render_scn.node_tree.nodes.update() + # context.view_layer.update() + # context.scene.update_tag() + ## Change to GP workspace (if needed) if context.window.workspace.name != 'GP Render': print('Change to GP workspace') @@ -121,41 +134,12 @@ class GPEXP_OT_render_auto_build(bpy.types.Operator): if ret != {'FINISHED'}: print('No GP render workspace available') - ## Group all adjacent layer type - print('Group all adjacent layer type') - for ob in ob_list: - fn.group_adjacent_layer_prefix_rlayer(ob, excluded_prefix=['GP', 'PO', 'RG'], first_name=True) - - # bpy.ops.gp_export.render_scene_setup() # next render scene setup at once - - ## Renumber File outputs - print('Renumber File outputs') - for fo in render_scn.node_tree.nodes: - if fo.type == 'OUTPUT_FILE': - fn.renumber_keep_existing(fo) - - ## Swap to bg_cam (if any) - if render_scn.objects.get('bg_cam') and (not render_scn.camera or render_scn.camera.name != 'bg_cam'): - print('Swap to bg cam') - bpy.ops.gp.swap_render_cams() - - ## Go to camera view in visible viewports - if render_scn.camera: - print('Go to camera view in visible viewports') - for window in bpy.context.window_manager.windows: - screen = window.screen - for area in screen.areas: - if area.type == 'VIEW_3D': - area.spaces.active.region_3d.view_perspective = 'CAMERA' - - ## Clean compo Tree - print('Clean compo Tree') - # bpy.ops.gp.clean_compo_tree('INVOKE_DEFAULT', use_render_scene=True) - bpy.ops.gp.clean_compo_tree('EXEC_DEFAULT', use_render_scene=True) + bpy.app.timers.register(batch_setup_render_scene, first_interval=0.001) ## Trigger check file before finishing ? # bpy.ops.gp.check_render_scene('INVOKE_DEFAULT') ## Note: After all these operation, a ctrl+Z might crash + print('\nDone.') return {"FINISHED"} diff --git a/OP_clean.py b/OP_clean.py index d2e2228..05185ee 100644 --- a/OP_clean.py +++ b/OP_clean.py @@ -111,7 +111,7 @@ class GPEXP_OT_clean_compo_tree(bpy.types.Operator): # box.prop(self, 'fo_clear_disconnected') def execute(self, context): - if self.use_render_scene: + if self.use_render_scene: render = bpy.data.scenes.get('Render') if not render: print('SKIP clean_compo_tree, No "Render" scene !') @@ -120,6 +120,8 @@ class GPEXP_OT_clean_compo_tree(bpy.types.Operator): render = context.scene nodes = render.node_tree.nodes + for n in nodes: + n.update() if self.clear_unused_view_layers: used_rlayer_names = [n.layer for n in nodes if n.type == 'R_LAYERS'] for rl in reversed(render.view_layers):