[Bf-blender-cvs] [81d5383ce2b] functions: save socket states
Jacques Lucke
noreply at git.blender.org
Wed Mar 20 19:07:42 CET 2019
Commit: 81d5383ce2baf982a060b0bb29df2b4f70acd846
Author: Jacques Lucke
Date: Wed Mar 20 19:07:35 2019 +0100
Branches: functions
https://developer.blender.org/rB81d5383ce2baf982a060b0bb29df2b4f70acd846
save socket states
===================================================================
M release/scripts/startup/function_nodes/base.py
M release/scripts/startup/function_nodes/sockets.py
===================================================================
diff --git a/release/scripts/startup/function_nodes/base.py b/release/scripts/startup/function_nodes/base.py
index b40c76e84e4..7bade2e64a3 100644
--- a/release/scripts/startup/function_nodes/base.py
+++ b/release/scripts/startup/function_nodes/base.py
@@ -21,6 +21,7 @@ class NodeStorage:
def __init__(self, node):
self.node = node
self.set_current_declaration(*node.get_sockets())
+ self.input_value_storage = dict()
def set_current_declaration(self, inputs, outputs):
self.inputs_decl = inputs
@@ -49,6 +50,22 @@ class NodeStorage:
self.decl_per_socket[socket] = decl
self.decl_index_per_socket[socket] = i
+ def store_socket_states(self):
+ for socket in self.node.inputs:
+ if not isinstance(socket, DataSocket):
+ continue
+ storage_id = (socket.data_type, socket.identifier)
+ self.input_value_storage[storage_id] = socket.get_state()
+
+ def try_restore_socket_states(self):
+ for socket in self.node.inputs:
+ if not isinstance(socket, DataSocket):
+ continue
+ storage_id = (socket.data_type, socket.identifier)
+ if storage_id in self.input_value_storage:
+ socket.restore_state(self.input_value_storage[storage_id])
+
+
_storage_per_node = {}
class BaseNode:
@@ -65,6 +82,7 @@ class BaseNode:
self._try_set_state(state)
def rebuild(self):
+ self.storage.store_socket_states()
self.inputs.clear()
self.outputs.clear()
@@ -74,6 +92,7 @@ class BaseNode:
for decl in outputs:
decl.build(self, self.outputs)
self.storage.set_current_declaration(inputs, outputs)
+ self.storage.try_restore_socket_states()
def _get_state(self):
links_per_input = defaultdict(set)
@@ -170,7 +189,7 @@ class BaseNode:
#########################
@property
- def storage(self):
+ def storage(self) -> NodeStorage:
if self not in _storage_per_node:
_storage_per_node[self] = NodeStorage(self)
return _storage_per_node[self]
@@ -215,3 +234,9 @@ class DataSocket(BaseSocket):
else:
layout.label(text=text)
+ def get_state(self):
+ return None
+
+ def restore_state(self, state):
+ pass
+
diff --git a/release/scripts/startup/function_nodes/sockets.py b/release/scripts/startup/function_nodes/sockets.py
index cac39a92887..83214eaaee6 100644
--- a/release/scripts/startup/function_nodes/sockets.py
+++ b/release/scripts/startup/function_nodes/sockets.py
@@ -24,6 +24,12 @@ class FloatSocket(bpy.types.NodeSocket, DataSocket):
def draw_color(self, context, node):
return (0, 0.3, 0.5, 1)
+ def get_state(self):
+ return self.value
+
+ def restore_state(self, state):
+ self.value = state
+
class IntegerSocket(bpy.types.NodeSocket, DataSocket):
bl_idname = "fn_IntegerSocket"
bl_label = "Integer Socket"
@@ -39,6 +45,12 @@ class IntegerSocket(bpy.types.NodeSocket, DataSocket):
def draw_color(self, context, node):
return (0.3, 0.7, 0.5, 1)
+ def get_state(self):
+ return self.value
+
+ def restore_state(self, state):
+ self.value = state
+
class VectorSocket(bpy.types.NodeSocket, DataSocket):
bl_idname = "fn_VectorSocket"
bl_label = "Vector Socket"
@@ -55,6 +67,12 @@ class VectorSocket(bpy.types.NodeSocket, DataSocket):
def draw_color(self, context, node):
return (0, 0, 0.5, 1)
+ def get_state(self):
+ return tuple(self.value)
+
+ def restore_state(self, state):
+ self.value = state
+
class CustomColoredSocket(bpy.types.NodeSocket, DataSocket):
bl_idname = "fn_CustomColoredSocket"
bl_label = "Custom Colored Socket"
More information about the Bf-blender-cvs
mailing list