def make_extra_category_menus(): global extra_category_menu_classes extra_categories = get_extra_categories() menu_classes = [] for category in extra_categories: if category.identifier in extra_category_menu_classes: clazz = extra_category_menu_classes[category.identifier] menu_classes.append(clazz) else: class NODEVIEW_MT_ExtraCategoryMenu(bpy.types.Menu): bl_label = category.name def draw(self, context): nodes = [[item.nodetype] for item in self.category_items] layout_draw_categories(self.layout, nodes) class_name = "NODEVIEW_MT_EX_" + category.identifier items = list(category.items(None)) menu_class = type(class_name, (NODEVIEW_MT_ExtraCategoryMenu, ), {'category_items': items}) menu_classes.append(menu_class) extra_category_menu_classes[category.identifier] = menu_class bpy.utils.register_class(menu_class) return menu_classes
def generate(self, context): nonlocal std_categories extra_categories = get_extra_categories() n = len(std_categories) all_categories = std_categories[:] for category in extra_categories: n += 1 all_categories.append((category.identifier, category.name, category.name, n)) return all_categories
def gather_extra_nodes(idx, datastorage, context): extra_categories = get_extra_categories() for cat in extra_categories: for node in cat.items(context): description = SvDocstring(node.get_node_class().__doc__).get_shorthand() showstring = node.label + ensure_short_description(description) datastorage.append((str(idx), showstring,'',idx)) loop_reverse[node.label] = node.nodetype idx +=1
def draw(self, context): # dont show up in other tree menu (needed because we bypassed poll by appending manually) tree_type = context.space_data.tree_type if not tree_type in sv_tree_types: return layout = self.layout layout.operator_context = 'INVOKE_REGION_WIN' if self.bl_idname == 'NODEVIEW_MT_Dynamic_Menu': layout.operator("node.sv_extra_search", text="Search", icon='OUTLINER_DATA_FONT') layout.separator() layout.menu("NODEVIEW_MT_AddGenerators", **icon('OBJECT_DATAMODE')) layout.menu("NODEVIEW_MT_AddCurves", **icon('OUTLINER_OB_CURVE')) layout.menu("NODEVIEW_MT_AddSurfaces", **icon('SURFACE_DATA')) layout.menu("NODEVIEW_MT_AddFields", **icon('OUTLINER_OB_FORCE_FIELD')) layout.menu("NODEVIEW_MT_AddTransforms", **icon('ORIENTATION_LOCAL')) layout.menu("NODEVIEW_MT_AddAnalyzers", **icon('VIEWZOOM')) layout.menu("NODEVIEW_MT_AddModifiers", **icon('MODIFIER')) layout.menu("NODEVIEW_MT_AddCAD", **icon('TOOL_SETTINGS')) layout.separator() layout.menu("NODEVIEW_MT_AddNumber", **icon("SV_NUMBER")) layout.menu("NODEVIEW_MT_AddVector", **icon("SV_VECTOR")) layout.menu("NODEVIEW_MT_AddMatrix", **icon('EMPTY_AXIS')) layout.menu("NODEVIEW_MT_AddQuaternion", **icon('SV_QUATERNION')) layout.menu("NODEVIEW_MT_AddLogic", **icon("SV_LOGIC")) layout.menu("NODEVIEW_MT_AddListOps", **icon('NLA')) layout.menu("NODEVIEW_MT_AddDictionary", icon='OUTLINER_OB_FONT') layout.separator() layout.menu("NODEVIEW_MT_AddViz", **icon('RESTRICT_VIEW_OFF')) layout.menu("NODEVIEW_MT_AddText", icon='TEXT') layout.menu("NODEVIEW_MT_AddScene", **icon('SCENE_DATA')) layout.menu("NODEVIEW_MT_AddLayout", icon='NODETREE') layout.menu("NODE_MT_category_SVERCHOK_BPY_Data", icon="BLENDER") layout.separator() layout.menu("NODEVIEW_MT_AddNetwork", **icon("SYSTEM")) layout.menu("NODEVIEW_MT_AddBetas", **icon("SV_BETA")) layout.menu("NODEVIEW_MT_AddAlphas", **icon("SV_ALPHA")) layout.separator() layout.menu("NODE_MT_category_SVERCHOK_GROUPS", icon="RNA") layout.menu("NODEVIEW_MT_AddPresetOps", icon="SETTINGS") extra_categories = get_extra_categories() if extra_categories: layout.separator() for category in extra_categories: layout.menu("NODEVIEW_MT_EX_" + category.identifier)
def draw(self, context): # dont show up in other tree menu (needed because we bypassed poll by appending manually) tree_type = context.space_data.tree_type if not tree_type in sv_tree_types: return layout = self.layout layout.operator_context = 'INVOKE_REGION_WIN' # if self.bl_idname == 'NODEVIEW_MT_Dynamic_Menu': layout.operator("node.sv_extra_search", text="Search", icon='OUTLINER_DATA_FONT') for item in menu_structure: if item[0] == 'separator': layout.separator() else: if "Add" in item[0]: name = item[0].split("Add")[1] if name in node_cats: if category_has_nodes(name): layout.menu(item[0], **icon(item[1])) else: layout.menu(item[0], **icon(item[1])) else: # print('AA', globals()[item[0]].bl_label) layout.menu(item[0], **icon(item[1])) extra_categories = get_extra_categories() if extra_categories: layout.separator() for category in extra_categories: layout.menu("NODEVIEW_MT_EX_" + category.identifier) if extra_category_providers: for provider in extra_category_providers: if hasattr(provider, 'use_custom_menu') and provider.use_custom_menu: layout.menu(provider.custom_menu)
def get_cat_list(): extra_categories = get_extra_categories() cat_list = std_menu[:] cat_list.extend(extra_categories) return cat_list