[Bf-blender-cvs] [513b7b3c783] functions: add outputs dynamically
Jacques Lucke
noreply at git.blender.org
Wed Feb 20 17:21:19 CET 2019
Commit: 513b7b3c783366aafb9d95b63967d359fd31ec7e
Author: Jacques Lucke
Date: Wed Feb 20 14:21:54 2019 +0100
Branches: functions
https://developer.blender.org/rB513b7b3c783366aafb9d95b63967d359fd31ec7e
add outputs dynamically
===================================================================
M release/scripts/startup/function_nodes/__init__.py
M release/scripts/startup/function_nodes/base.py
A release/scripts/startup/function_nodes/node_operators.py
M release/scripts/startup/function_nodes/nodes/function_input.py
M release/scripts/startup/function_nodes/nodes/function_output.py
===================================================================
diff --git a/release/scripts/startup/function_nodes/__init__.py b/release/scripts/startup/function_nodes/__init__.py
index f64bb7d6c88..8877382c5fc 100644
--- a/release/scripts/startup/function_nodes/__init__.py
+++ b/release/scripts/startup/function_nodes/__init__.py
@@ -3,4 +3,5 @@ def register():
from . import base
from . import sockets
from . import nodes
- from . import menu
\ No newline at end of file
+ from . import menu
+ from . import node_operators
\ No newline at end of file
diff --git a/release/scripts/startup/function_nodes/base.py b/release/scripts/startup/function_nodes/base.py
index b0b960d8b9e..d4eb0ebc46d 100644
--- a/release/scripts/startup/function_nodes/base.py
+++ b/release/scripts/startup/function_nodes/base.py
@@ -7,8 +7,22 @@ class FunctionNodeTree(bpy.types.NodeTree):
bpy.utils.register_class(FunctionNodeTree)
+class BaseNode:
+ def draw_buttons(self, context, layout):
+ self.draw(layout)
+
+ def draw(self, layout):
+ pass
+
+ def invoke_function(self, layout, function_name, text, *, settings=tuple()):
+ assert isinstance(settings, tuple)
+ props = layout.operator("fn.node_operator", text=text)
+ props.tree_name = self.id_data.name
+ props.node_name = self.name
+ props.function_name = function_name
+ props.settings_repr = repr(settings)
-class FunctionNode:
+class FunctionNode(BaseNode):
def init(self, context):
inputs, outputs = self.get_sockets()
for idname, name in inputs:
@@ -19,12 +33,6 @@ class FunctionNode:
def get_sockets():
return [], []
- def draw_buttons(self, context, layout):
- self.draw(layout)
-
- def draw(self, layout):
- pass
-
class DataSocket:
color = (0, 0, 0, 0)
diff --git a/release/scripts/startup/function_nodes/node_operators.py b/release/scripts/startup/function_nodes/node_operators.py
new file mode 100644
index 00000000000..ea9919b3962
--- /dev/null
+++ b/release/scripts/startup/function_nodes/node_operators.py
@@ -0,0 +1,29 @@
+import bpy
+from bpy.props import *
+
+class NodeOperator(bpy.types.Operator):
+ bl_idname = "fn.node_operator"
+ bl_label = "Generic Node Operator"
+ bl_options = {"INTERNAL"}
+
+ tree_name: StringProperty()
+ node_name: StringProperty()
+ function_name: StringProperty()
+ settings_repr: StringProperty()
+
+ def execute(self, context):
+ tree = bpy.data.node_groups.get(self.tree_name)
+ if tree is None:
+ return {"CANCELLED"}
+
+ node = tree.nodes.get(self.node_name)
+ if node is None:
+ return {"CANCELLED"}
+
+ function = getattr(node, self.function_name)
+ settings = eval(self.settings_repr)
+ function(*settings)
+
+ return {"FINISHED"}
+
+bpy.utils.register_class(NodeOperator)
\ No newline at end of file
diff --git a/release/scripts/startup/function_nodes/nodes/function_input.py b/release/scripts/startup/function_nodes/nodes/function_input.py
index f1cca3bba58..28b4d6e6642 100644
--- a/release/scripts/startup/function_nodes/nodes/function_input.py
+++ b/release/scripts/startup/function_nodes/nodes/function_input.py
@@ -1,6 +1,7 @@
import bpy
+from .. base import BaseNode
-class FunctionInputNode(bpy.types.Node):
+class FunctionInputNode(BaseNode, bpy.types.Node):
bl_idname = "fn_FunctionInputNode"
bl_label = "Function Input"
diff --git a/release/scripts/startup/function_nodes/nodes/function_output.py b/release/scripts/startup/function_nodes/nodes/function_output.py
index 6193c84d29f..5490ba27e7d 100644
--- a/release/scripts/startup/function_nodes/nodes/function_output.py
+++ b/release/scripts/startup/function_nodes/nodes/function_output.py
@@ -1,10 +1,20 @@
import bpy
+from .. base import BaseNode
-class FunctionOutputNode(bpy.types.Node):
+class FunctionOutputNode(BaseNode, bpy.types.Node):
bl_idname = "fn_FunctionOutputNode"
bl_label = "Function Output"
def init(self, context):
- self.inputs.new("fn_VectorSocket", "Position")
+ pass
+
+ def draw(self, layout):
+ self.invoke_function(layout, "new_socket",
+ "New Float", settings=("fn_FloatSocket", ))
+ self.invoke_function(layout, "new_socket",
+ "New Vector", settings=("fn_VectorSocket", ))
+
+ def new_socket(self, idname):
+ self.inputs.new(idname, "Output")
bpy.utils.register_class(FunctionOutputNode)
\ No newline at end of file
More information about the Bf-blender-cvs
mailing list