From a61cb143555d288a048ab854707270c4beb0ee20 Mon Sep 17 00:00:00 2001 From: Ilya Portnov Date: Sun, 3 Dec 2017 14:13:09 +0500 Subject: [PATCH 1/2] Change the way of accessing registered node classes. * Move menu module registration even later * Add exceptions for NodeReroute class refs #1895, #1874. --- __init__.py | 4 ++-- menu.py | 12 +++++++++--- utils/__init__.py | 4 +++- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/__init__.py b/__init__.py index 921738e1b..93d291cdf 100755 --- a/__init__.py +++ b/__init__.py @@ -166,8 +166,6 @@ def register(): if hasattr(m, "register"): #print("Registering module: {}".format(m.__name__)) m.register() - # We have to register menu module after all nodes are registered - menu.register() # this is used to access preferences, should/could be hidden # in an interface data_structure.SVERCHOK_NAME = __name__ @@ -176,6 +174,8 @@ def register(): ascii_print.logo() node_defaults.register_defaults() auto_gather_node_classes() + # We have to register menu module after all nodes are registered + menu.register() if reload_event: data_structure.RELOAD_EVENT = True menu.reload_menu() diff --git a/menu.py b/menu.py index fa65abc72..c265fd827 100644 --- a/menu.py +++ b/menu.py @@ -133,7 +133,7 @@ class SverchNodeItem(object): return self.get_node_class().bl_rna.name def get_node_class(self): - return getattr(bpy.types, self.nodetype) + return get_node_class_reference(self.nodetype) def get_idname(self): return get_node_idname_for_operator(self.nodetype) @@ -191,9 +191,13 @@ class SverchNodeItem(object): def get_node_idname_for_operator(nodetype): """Select valid bl_idname for node to create node adding operator bl_idname.""" - rna = getattr(bpy.types, nodetype).bl_rna + rna = get_node_class_reference(nodetype) + if not rna: + raise Exception("Can't find registered node {}".format(nodetype)) if hasattr(rna, 'bl_idname'): return rna.bl_idname.lower() + elif nodetype == "NodeReroute": + return "node_reroute" else: return rna.name.lower() @@ -204,11 +208,13 @@ def draw_add_node_operator(layout, nodetype, label=None, icon_name=None, params= """ default_context = bpy.app.translations.contexts.default - node_rna = getattr(bpy.types, nodetype).bl_rna + node_rna = get_node_class_reference(nodetype) if label is None: if hasattr(node_rna, 'bl_label'): label = node_rna.bl_label + elif nodetype == "NodeReroute": + label = "Reroute" else: label = node_rna.name diff --git a/utils/__init__.py b/utils/__init__.py index c998d9b98..faf071133 100644 --- a/utils/__init__.py +++ b/utils/__init__.py @@ -85,5 +85,7 @@ def get_node_class_reference(bl_idname): # formerly stuff like: # cls = getattr(bpy.types, self.cls_bl_idname, None) + if bl_idname == "NodeReroute": + return getattr(bpy.types, bl_idname) # this will also return a Nonetype if the ref isn't found, and the class ref if found - return node_classes.get(bl_idname) \ No newline at end of file + return node_classes.get(bl_idname) -- GitLab From 3ee334f4b6e0fecd3a220a7db9fc11c57255baef Mon Sep 17 00:00:00 2001 From: Ilya Portnov Date: Sun, 3 Dec 2017 15:03:51 +0500 Subject: [PATCH 2/2] Add .bl_rna --- menu.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/menu.py b/menu.py index c265fd827..af983fac2 100644 --- a/menu.py +++ b/menu.py @@ -208,7 +208,7 @@ def draw_add_node_operator(layout, nodetype, label=None, icon_name=None, params= """ default_context = bpy.app.translations.contexts.default - node_rna = get_node_class_reference(nodetype) + node_rna = get_node_class_reference(nodetype).bl_rna if label is None: if hasattr(node_rna, 'bl_label'): -- GitLab