| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- from bpy.types import Panel, Menu
- def TellClasses():
- return [
- MantisActiveTreePanel,
- MantisNodeGroupsMenu,
- MantisAddArmature,
- ]
- # 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):
- layout = self.layout
- layout.separator() # Optional: Adds a separator before your submenu
- layout.menu("NODE_MT_add_mantis_groups")
- # Function to append Mantis Component Packs to armature add menu
- def armature_add_menu_draw(self, context):
- layout = self.layout
- layout.separator()
- layout.menu("VIEW3D_MT_armature_add_mantis_packs")
- # Function to append Mantis to Import Menu
- def import_menu_draw(self, context):
- self.layout.operator("mantis.import_tree")
- 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 MantisAddArmature(Menu):
- """Menu to show the user's component pack library in the Add Armature menu"""
- bl_idname= "VIEW3D_MT_armature_add_mantis_packs"
- bl_label = "Mantis Rigs"
- def draw(self, context):
- # start showing the mantis packs
- from .preferences import get_bl_addon_object
- bl_mantis_addon = get_bl_addon_object()
- if bl_mantis_addon:
- components_path = bl_mantis_addon.preferences.ComponentsLibraryFolder
- # now we're clear to do the menu function
- layout = self.layout
- from .utilities import get_component_library_items
- component_items = get_component_library_items()
- for component_item in component_items:
- # how to "EXEC_DEFAULT" here?
- operator_settings = layout.operator( operator="mantis.import_tree_no_menu", text=component_item[1])
- from os import path as os_path
- operator_settings.filepath = os_path.join(components_path, component_item[0])
- 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")
|