From 352027ad8c114719f28553090a6e4ad8ba08b854 Mon Sep 17 00:00:00 2001 From: pullusb Date: Thu, 8 Jun 2023 12:39:39 +0200 Subject: [PATCH] exclude layer buttons 1.3.5 - added: button to exclude viewlayers and nodes by selection or by hided layers --- CHANGELOG.md | 4 ++ OP_manage_outputs.py | 3 +- OP_merge_layers.py | 80 ++++++++++++++++++++++++++ __init__.py | 2 +- app_templates/GP_Render/startup.blend | Bin 1162884 -> 1162884 bytes fn.py | 73 +++++++++++++---------- ui.py | 3 + 7 files changed, 134 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d08ce76..caa7822 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,10 @@ Activate / deactivate layer opacity according to prefix Activate / deactivate all masks using MA layers --> +1.3.5 + +- added: button to exclude viewlayers and nodes by selection or by hided layers + 1.3.4 - added: multi object merge diff --git a/OP_manage_outputs.py b/OP_manage_outputs.py index 1dc3606..7472f01 100644 --- a/OP_manage_outputs.py +++ b/OP_manage_outputs.py @@ -26,7 +26,8 @@ class GPEXP_OT_mute_toggle_output_nodes(bpy.types.Operator): class GPEXP_OT_number_outputs(bpy.types.Operator): bl_idname = "gp.number_outputs" bl_label = "Number Outputs" - bl_description = "(Re)Number the outputs to have ordered file by name in export directories\nCtrl+Clic : Delete numbering" + bl_description = "(Re)Number the outputs to have ordered file by name in export directories\ + \nCtrl+Clic : Delete numbering" bl_options = {"REGISTER"} @classmethod diff --git a/OP_merge_layers.py b/OP_merge_layers.py index 8f61b57..fb0f246 100644 --- a/OP_merge_layers.py +++ b/OP_merge_layers.py @@ -274,6 +274,85 @@ class GPEXP_OT_merge_viewlayers_to_active(bpy.types.Operator): self.report(*ret) return {"FINISHED"} +class GPEXP_OT_remove_viewlayer_on_selected(bpy.types.Operator): + bl_idname = "gp.remove_viewlayer_on_selected" + bl_label = "Exclude Viewlayer" + bl_description = "Set exclude view layers on selected gp layers\ + \nRemove associated nodes in Render scene nodetree\ + \nCtrl + Click : Affect selected GP objects, not only active" + bl_options = {"REGISTER"} + + @classmethod + def poll(cls, context): + return context.object and context.object.type == 'GPENCIL' + + # multi_object : bpy.props.BoolProperty(default=True, options={'SKIP_SAVE'}) + remove_all_hidden : bpy.props.BoolProperty(default=False, options={'SKIP_SAVE'}) + + @classmethod + def description(cls, context, properties) -> str: + if properties.remove_all_hidden: + return "Set HIDDEN gp layers to 'exclude' viewlayers\ + \nremoving associated nodes in Render scene nodetree\ + \nCtrl + Click : Affect selected GP objects, else only active" + else: + return "Set SELECTED gp layers to 'exclude' viewlayers\ + \nremoving associated nodes in Render scene nodetree\ + \nCtrl + Click : Affect selected GP objects, else only active" + + def invoke(self, context, event): + self.multi_object = event.ctrl + return self.execute(context) + + def execute(self, context): + ob = context.object + + ## Force use of render scene (?) + rd_scn = bpy.data.scenes.get('Render') + if not rd_scn: + self.report({'ERROR'}, 'No render scene found') + return {'CANCELLED'} + + if self.remove_all_hidden: + if self.multi_object: + layers = [l for ob in context.selected_objects if ob.type == 'GPENCIL' for l in ob.data.layers if l.hide] + else: + layers = [l for l in ob.data.layers if l.select] + + else: + if self.multi_object: + layers = [l for ob in context.selected_objects if ob.type == 'GPENCIL' for l in ob.data.layers if l.select] + else: + layers = [l for l in ob.data.layers if l.select] + + if not layers: + self.report({'ERROR'}, 'Some layers need to be selected to exclude render viewlayer') + return {'CANCELLED'} + + layers = list(set(layers)) + + ## Prepare report / prints in console + exclude_message = ['Layer list set to exclude:'] + print('\nLayer list to exclude:') + for l in layers: + vl_name = l.viewlayer_render if l.viewlayer_render else 'None' + mess = f'{l.id_data.name}: {l.info} (previous: {vl_name})' + print(mess) + exclude_message.append(mess) + + view_layers = [rd_scn.view_layers.get(l.viewlayer_render) for l in layers\ + if l.viewlayer_render and rd_scn.view_layers.get(l.viewlayer_render)] + + ## remove nodes associated with those viewlayers + fn.remove_nodes_by_viewlayer(view_layers, scene=rd_scn) + + ## Set selected those layer viewlayer exclude + for l in layers: + l.viewlayer_render = fn.get_view_layer('exclude').name + + fn.show_message_box(exclude_message) + return {"FINISHED"} + class GPEXP_OT_merge_preview_ouput(bpy.types.Operator): bl_idname = "gp.merge_preview_ouput" bl_label = "Merge Preview Output" @@ -429,6 +508,7 @@ GPEXP_OT_merge_viewlayers_to_active, GPEXP_OT_auto_merge_adjacent_prefix, GPEXP_OT_merge_selected_dopesheet_layers,# unused GPEXP_OT_merge_selected_viewlayer_nodes, +GPEXP_OT_remove_viewlayer_on_selected, GPEXP_OT_merge_preview_ouput, ) diff --git a/__init__.py b/__init__.py index 380f83e..e5ce3ff 100644 --- a/__init__.py +++ b/__init__.py @@ -2,7 +2,7 @@ bl_info = { "name": "GP Render", "description": "Organise export of gp layers through compositor output", "author": "Samuel Bernou", - "version": (1, 3, 4), + "version": (1, 3, 5), "blender": (2, 93, 0), "location": "View3D", "warning": "", diff --git a/app_templates/GP_Render/startup.blend b/app_templates/GP_Render/startup.blend index 042b184dcd2a6a41f1c65d82c0d9a9c53df2bd36..ecf43efe198cbf1e1e16b13dda45025dd795e37c 100644 GIT binary patch delta 70914 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

SvAZV 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 a{-Eh#`K4vZU!E^9ymz7kH|K}dZ2EtkW7PBj diff --git a/fn.py b/fn.py index 217ec14..b075625 100644 --- a/fn.py +++ b/fn.py @@ -410,32 +410,18 @@ def get_frames_bbox(node_tree): return frames_bbox - ## -- nodes helper functions -def merge_gplayer_viewlayers(ob=None, act=None, layers=None): - '''ob is not needed if active and layers are passed''' - if ob is None: - ob = bpy.context.object - if act is None: - act = ob.data.layers.active - if layers is None: - layers = [l for l in ob.data.layers if l.select and l != act] +def remove_nodes_by_viewlayer(viewlayer_list, scene=None): + '''Take a list of viewlayer and optionaly a scene to target nodetree + remove nodes related to this viewlayer in nodetree + ''' - rd_scn = bpy.data.scenes.get('Render') - if not rd_scn: - return ({'ERROR'}, 'Viewlayers needs to be generated first!') + scene = scene or bpy.context.scene - if not act.viewlayer_render: - return ({'ERROR'}, f'Active layer {act.info} has no viewlayer assigned') + vl_names = [v.name for v in viewlayer_list] - # list layers and viewlayers - vls = [rd_scn.view_layers.get(l.viewlayer_render) for l in layers - if l.viewlayer_render and l.viewlayer_render != act.viewlayer_render and rd_scn.view_layers.get(l.viewlayer_render)] - - vl_names = [v.name for v in vls] - - for n in reversed(rd_scn.node_tree.nodes): + for n in reversed(scene.node_tree.nodes): if n.type == 'R_LAYERS' and n.layer in vl_names: for lnk in n.outputs[0].links: grp = lnk.to_node @@ -468,20 +454,49 @@ def merge_gplayer_viewlayers(ob=None, act=None, layers=None): ngroup.outputs.remove(ngroup.outputs[i]) break - # remove render_layer node - rd_scn.node_tree.nodes.remove(n) + # Remove render_layer node + scene.node_tree.nodes.remove(n) - # assign view layer from active to selected +def merge_gplayer_viewlayers(ob=None, act=None, layers=None): + '''ob is not needed if active and layers are passed''' + if ob is None: + ob = bpy.context.object + if act is None: + act = ob.data.layers.active + if layers is None: + layers = [l for l in ob.data.layers if l.select and l != act] + + if act is None: + return ({'ERROR'}, 'Active layer not found. Should be active layer on active object!') + + rd_scn = bpy.data.scenes.get('Render') + if not rd_scn: + return ({'ERROR'}, 'Viewlayers needs to be generated first!') + + if not act.viewlayer_render: + return ({'ERROR'}, f'Active layer {act.info} has no viewlayer assigned') + + # list layers and viewlayers + vls = [rd_scn.view_layers.get(l.viewlayer_render) for l in layers + if l.viewlayer_render and l.viewlayer_render != act.viewlayer_render and rd_scn.view_layers.get(l.viewlayer_render)] + + # Remove viewlayer related nodes + remove_nodes_by_viewlayer(vls, rd_scn) + + # Assign view layer from active to selected for l in layers: l.viewlayer_render = act.viewlayer_render - ## delete unused_vl + ## Delete unused viewlayers () - # used_vl_name = [n.layer for n in rd_scn.node_tree.nodes if n.type == 'R_LAYERS' and n.layer] + used_vl_name = [n.layer for n in rd_scn.node_tree.nodes if n.type == 'R_LAYERS' and n.layer] for vl in vls: - rd_scn.view_layers.remove(vl) - # if not vl.name in used_vl_name: - # rd_scn.view_layers.remove(vl) + # rd_scn.view_layers.remove(vl) + if vl.name == 'exclude': + # keep exclude + continue + if not vl.name in used_vl_name: + rd_scn.view_layers.remove(vl) def group_adjacent_layer_prefix_rlayer(ob, excluded_prefix=[], first_name=True): '''Set viewlayer and renderlayers by Gp layer adjacent prefix diff --git a/ui.py b/ui.py index b612fc0..d3d9cc8 100644 --- a/ui.py +++ b/ui.py @@ -213,6 +213,9 @@ class GPEXP_PT_gp_dopesheet_ui(Panel): row.enabled= ct > 1 col.operator('gpexp.auto_merge_adjacent_prefix', icon='SELECT_EXTEND') + row = col.row(align=True) + row.operator('gp.remove_viewlayer_on_selected', text=f'Exclude {ct} layers', icon='X').remove_all_hidden = False + row.operator('gp.remove_viewlayer_on_selected', text='', icon='HIDE_ON').remove_all_hidden = True ## all and objects layout.separator()