| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- from bpy.types import Panel, Menu
- def TellClasses():
- return [
- MantisActiveTreePanel,
- MantisNodeGroupsMenu,
- ]
- # Function to append submenu to context menu
- def node_context_menu_draw(self, context):
- layout = self.layout
- layout.separator() # Optional: Adds a separator before your submenu
- layout.operator_context = "INVOKE_DEFAULT"
- layout.operator("mantis.nodes_cleanup", text='Sort Selected Nodes')
- layout.operator("mantis.connect_nodes_to_input")
- layout.operator("mantis.select_nodes_of_type")
- layout.operator("mantis.import_from_component_library")
- # layout.menu('NODE_MT_context_menu_mantis')
- # Function to append submenu to node add menu
- def node_add_menu_draw(self, context):
- # NODE_MT_add
- layout = self.layout
- layout.separator() # Optional: Adds a separator before your submenu
- layout.menu("NODE_MT_add_mantis_groups")
- # layout.menu('NODE_MT_context_menu_mantis')
- class MantisNodeGroupsMenu(Menu):
- """Menu to show available node groups"""
- bl_idname= "NODE_MT_add_mantis_groups"
- bl_label = "Components"
- def draw(self, context):
- node_tree = None
- # just gonna do the same thing we do in poll operators
- if not context.space_data:
- return
- if not hasattr(context.space_data, "path"):
- return
- try:
- node_tree = context.space_data.path[0].node_tree
- except IndexError: # not in the UI, for example, in a script instead.
- return
- if node_tree is None: # because the space is right but there is no selected tree.
- return
- # now we're clear to do the menu function
- layout = self.layout
- from bpy import data
- for ng in data.node_groups:
- if ng.bl_idname in ['MantisTree', 'SchemaTree']:
- if ng.name == node_tree.name and ng.bl_idname == node_tree.bl_idname:
- continue # don't add the node group into itself.
- if ng.contains_tree(node_tree):
- continue # don't create an infinite loop of node trees
- operator_settings = layout.operator(
- "mantis.add_component", text=ng.name,
- icon='NODE', emboss=False,)
- operator_settings.node_group_tree_name=ng.name
- operator_settings.tree_invoked = node_tree.name
- class MantisActiveTreePanel(Panel):
- """N-Panel menu for Mantis"""
- bl_label = "Active Tree"
- bl_idname = "MANTIS_PT_active_tree"
- bl_space_type = 'NODE_EDITOR'
- bl_region_type = 'UI'
- bl_category = "Mantis"
- bl_context = "scene"
-
- @classmethod
- def poll(cls, context):
- area = context.area
- if not area: return False
- if not area.spaces: return False
- spc = area.spaces[0]
- if spc.type != "NODE_EDITOR":
- return False
- if not spc.node_tree:
- return False
- if spc.node_tree.bl_idname != "MantisTree":
- return False
- return True
-
- def draw(self, context):
- area = context.area
- spc = area.spaces[0]
- nt = spc.node_tree
- layout = self.layout
- layout.label(text=f"Tree Hash: {nt.hash}")
- layout.prop(nt, "do_live_update", text='Live Updates',)
- layout.operator("mantis.invalidate_node_tree")
- layout.operator("mantis.execute_node_tree")
- layout.operator("mantis.force_display_update", text='Force Display Update')
- layout.operator("mantis.import_from_component_library")
|