[Bf-blender-cvs] [95ccb248572] functions: implement custom search terms for nodes

Jacques Lucke noreply at git.blender.org
Fri Mar 22 11:57:57 CET 2019


Commit: 95ccb24857238213dba4857513d3269d5a8dc90a
Author: Jacques Lucke
Date:   Fri Mar 22 10:21:01 2019 +0100
Branches: functions
https://developer.blender.org/rB95ccb24857238213dba4857513d3269d5a8dc90a

implement custom search terms for nodes

===================================================================

M	release/scripts/startup/function_nodes/base.py
M	release/scripts/startup/function_nodes/nodes/float_math.py
M	release/scripts/startup/function_nodes/search.py

===================================================================

diff --git a/release/scripts/startup/function_nodes/base.py b/release/scripts/startup/function_nodes/base.py
index 58c7043720a..6d494e2d894 100644
--- a/release/scripts/startup/function_nodes/base.py
+++ b/release/scripts/startup/function_nodes/base.py
@@ -74,6 +74,9 @@ class NodeStorage:
 _storage_per_node = {}
 
 class BaseNode:
+    search_terms = tuple()
+    search_terms_only = False
+
     def init(self, context):
         from . update import managed_update
         with managed_update():
@@ -83,6 +86,12 @@ class BaseNode:
             for decl in outputs:
                 decl.build(self, self.outputs)
 
+    @classmethod
+    def get_search_terms(cls):
+        if not cls.search_terms_only:
+            yield (cls.bl_label, dict())
+        yield from cls.search_terms
+
     def refresh(self, context=None):
         from . update import update_function_trees
         self.rebuild_and_try_keep_state()
diff --git a/release/scripts/startup/function_nodes/nodes/float_math.py b/release/scripts/startup/function_nodes/nodes/float_math.py
index 1421610a40c..959c00225a1 100644
--- a/release/scripts/startup/function_nodes/nodes/float_math.py
+++ b/release/scripts/startup/function_nodes/nodes/float_math.py
@@ -14,6 +14,11 @@ class FloatMathNode(bpy.types.Node, FunctionNode):
     bl_idname = "fn_FloatMathNode"
     bl_label = "Float Math"
 
+    search_terms = (
+        ("Add Floats", {"operation" : "ADD"}),
+        ("Multiply Floats", {"operation" : "MULTIPLY"}),
+    )
+
     operation: EnumProperty(
         name="Operation",
         items=operation_items,
diff --git a/release/scripts/startup/function_nodes/search.py b/release/scripts/startup/function_nodes/search.py
index 9a9ce5d9a83..883c7914e57 100644
--- a/release/scripts/startup/function_nodes/search.py
+++ b/release/scripts/startup/function_nodes/search.py
@@ -10,9 +10,10 @@ class NodeSearch(bpy.types.Operator):
 
     def get_search_items(self, context):
         items = []
-        for cls in BaseNode.iter_final_subclasses():
-            item = (cls.bl_idname, cls.bl_label, "")
-            items.append(item)
+        for node_cls in BaseNode.iter_final_subclasses():
+            for search_term, settings in node_cls.get_search_terms():
+                item = encode_search_item(node_cls.bl_idname, search_term, settings)
+                items.append(item)
         return items
 
     item: EnumProperty(items=get_search_items)
@@ -27,6 +28,20 @@ class NodeSearch(bpy.types.Operator):
         return {'CANCELLED'}
 
     def execute(self, context):
-        idname = self.item
-        bpy.ops.node.add_node('INVOKE_DEFAULT', type=idname, use_transform=True)
+        idname, settings = decode_search_item(self.item)
+        op_settings = []
+        for key, value in settings.items():
+            item = {"name" : key, "value" : repr(value)}
+            op_settings.append(item)
+        bpy.ops.node.add_node('INVOKE_DEFAULT', type=idname, use_transform=True, settings=op_settings)
         return {'FINISHED'}
+
+
+def encode_search_item(idname, search_term, settings):
+    identifier = idname + ":" + repr(settings)
+    return (identifier, search_term, "")
+
+def decode_search_item(identifier):
+    idname, settings_repr = identifier.split(":", 1)
+    settings = eval(settings_repr)
+    return idname, settings
\ No newline at end of file



More information about the Bf-blender-cvs mailing list