[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