[Bf-blender-cvs] [20f9248222b] functions: simple node search
Jacques Lucke
noreply at git.blender.org
Sun Mar 10 16:28:32 CET 2019
Commit: 20f9248222b9f31e4eb4eb316b15a9af535ad20e
Author: Jacques Lucke
Date: Sun Mar 10 14:16:59 2019 +0100
Branches: functions
https://developer.blender.org/rB20f9248222b9f31e4eb4eb316b15a9af535ad20e
simple node search
===================================================================
M release/scripts/startup/function_nodes/base.py
A release/scripts/startup/function_nodes/search.py
A release/scripts/startup/function_nodes/utils/generic.py
===================================================================
diff --git a/release/scripts/startup/function_nodes/base.py b/release/scripts/startup/function_nodes/base.py
index 7e30d4ab903..c9cc9b8f94a 100644
--- a/release/scripts/startup/function_nodes/base.py
+++ b/release/scripts/startup/function_nodes/base.py
@@ -1,11 +1,11 @@
import bpy
+from . utils.generic import iter_subclasses_recursive
class FunctionNodeTree(bpy.types.NodeTree):
bl_idname = "FunctionNodeTree"
bl_icon = "MOD_DATA_TRANSFER"
bl_label = "Function Nodes"
-bpy.utils.register_class(FunctionNodeTree)
class BaseNode:
def draw_buttons(self, context, layout):
@@ -27,6 +27,10 @@ class BaseNode:
def draw_socket(self, socket, layout, text):
socket.draw_self(layout, self, text)
+ @classmethod
+ def iter_final_subclasses(cls):
+ yield from filter(lambda x: issubclass(x, bpy.types.Node), iter_subclasses_recursive(cls))
+
class BaseSocket:
color = (0, 0, 0, 0)
diff --git a/release/scripts/startup/function_nodes/search.py b/release/scripts/startup/function_nodes/search.py
new file mode 100644
index 00000000000..0b108e8648d
--- /dev/null
+++ b/release/scripts/startup/function_nodes/search.py
@@ -0,0 +1,32 @@
+import bpy
+from bpy.props import *
+from . base import BaseNode
+
+class NodeSearch(bpy.types.Operator):
+ bl_idname = "fn.node_search"
+ bl_label = "Node Search"
+ bl_options = {'REGISTER', 'UNDO'}
+ bl_property = "item"
+
+ def get_search_items(self, context):
+ items = []
+ for cls in BaseNode.iter_final_subclasses():
+ item = (cls.bl_idname, cls.bl_label, "")
+ items.append(item)
+ return items
+
+ item: EnumProperty(items = get_search_items)
+
+ @classmethod
+ def poll(cls, context):
+ try: return context.space_data.node_tree.bl_idname == "FunctionNodeTree"
+ except: return False
+
+ def invoke(self, context, event):
+ context.window_manager.invoke_search_popup(self)
+ return {'CANCELLED'}
+
+ def execute(self, context):
+ idname = self.item
+ bpy.ops.node.add_node('INVOKE_DEFAULT', type=idname, use_transform=True)
+ return {'FINISHED'}
diff --git a/release/scripts/startup/function_nodes/utils/generic.py b/release/scripts/startup/function_nodes/utils/generic.py
new file mode 100644
index 00000000000..39468182b06
--- /dev/null
+++ b/release/scripts/startup/function_nodes/utils/generic.py
@@ -0,0 +1,4 @@
+def iter_subclasses_recursive(cls):
+ for sub in cls.__subclasses__():
+ yield sub
+ yield from iter_subclasses_recursive(sub)
\ No newline at end of file
More information about the Bf-blender-cvs
mailing list