import bpy from bpy.types import Panel # from .preferences import get_addon_prefs # Node view panel class GPEXP_PT_gp_node_ui(Panel): bl_space_type = "NODE_EDITOR" # "VIEW_3D" bl_region_type = "UI" bl_category = "View" bl_label = "Gpencil Render Manager" def draw(self, context): layout = self.layout row = layout.row() ct = len([n for n in context.scene.node_tree.nodes if n.type == 'R_LAYERS' and n.select]) txt = f'Merge {ct} Layer Nodes' row.operator('gp.merge_selected_viewlayer_nodes', icon='NODETREE', text=txt) row.enabled = ct > 1 layout.separator() row=layout.row() row.operator('gp.mute_toggle_output_nodes', icon='NODE_INSERT_ON', text='Mute').mute = True row.operator('gp.mute_toggle_output_nodes', icon='NODE_INSERT_OFF', text='Unmute').mute = False layout.separator() col=layout.column() col.operator('gp.clear_render_tree', icon='X', text='Clear Render Tree') col.operator('gp.clear_render_tree', icon='X', text='Clear Delete Render Scene').mode = "COMPLETE" # layout.operator('gp.add_object_to_render', icon='RENDERLAYERS', text='Layer To Render').mode = 'ALL' # layout.operator('gp.add_object_to_render', icon='RENDERLAYERS', text='Layer To Render').mode = 'SELECTED' # layout.operator('gp.merge_layers', icon='X', text='Merge selected nodes') class GPEXP_PT_gp_dopesheet_ui(Panel): bl_space_type = 'DOPESHEET_EDITOR' bl_region_type = 'UI' # bl_category = "Item" bl_parent_id='DOPESHEET_PT_gpencil_mode' bl_label = "Gpencil Render Manager" @classmethod def poll(cls, context): return context.object and context.object.type == 'GPENCIL' def draw(self, context): layout = self.layout layout.label(text=context.object.name) ct = len([l for l in context.object.data.layers if l.select]) txt = f'Merge {ct} layers' # merge layers from dopesheet layout.operator('gp.merge_selected_dopesheet_layers', text=txt, ) layout.enabled= ct > 1 def manager_ui(self, context): '''appended to DATA_PT_gpencil_layers''' layout = self.layout ## On layers if context.object and context.object.type == 'GPENCIL': txt = f'{len([l for l in context.object.data.layers if l.select])} Layer(s) To Render' else: txt = 'Layer To Render' layout.operator('gp.add_layer_to_render', icon='RENDERLAYERS', text=txt) ## On objects # txt = 'Selected Object To Render' if context.scene.name != 'Render': txt = f'{len([o for o in context.selected_objects if o.type == "GPENCIL" and o.select_get()])} Selected Object(s) To Render' layout.operator('gp.add_object_to_render', icon='RENDERLAYERS', text=txt).mode='SELECTED' layout.operator('gp.add_object_to_render', icon='RENDERLAYERS', text='All GP at once').mode='ALL' # ## function to append in a menu # def palette_manager_menu(self, context): # """Palette menu to append in existing menu""" # # GPENCIL_MT_material_context_menu # layout = self.layout # # {'EDIT_GPENCIL', 'PAINT_GPENCIL','SCULPT_GPENCIL','WEIGHT_GPENCIL', 'VERTEX_GPENCIL'} # layout.separator() # prefs = get_addon_prefs() # layout.operator("", text='do stuff from material submenu', icon='MATERIAL') #-# REGISTER classes=( GPEXP_PT_gp_node_ui, GPEXP_PT_gp_dopesheet_ui, ) def register(): for cls in classes: bpy.utils.register_class(cls) bpy.types.DATA_PT_gpencil_layers.prepend(manager_ui) def unregister(): bpy.types.DATA_PT_gpencil_layers.remove(manager_ui) for cls in reversed(classes): bpy.utils.unregister_class(cls)