[Bf-blender-cvs] [b52af3a0317] functions: refactor frontend data type definition system
Jacques Lucke
noreply at git.blender.org
Thu Mar 21 11:12:47 CET 2019
Commit: b52af3a03171b9d671d0080e43ead1d5ac60512d
Author: Jacques Lucke
Date: Thu Mar 21 11:12:35 2019 +0100
Branches: functions
https://developer.blender.org/rBb52af3a03171b9d671d0080e43ead1d5ac60512d
refactor frontend data type definition system
===================================================================
M release/scripts/startup/function_nodes/base.py
M release/scripts/startup/function_nodes/sockets.py
M release/scripts/startup/function_nodes/types.py
A release/scripts/startup/function_nodes/types_base.py
===================================================================
diff --git a/release/scripts/startup/function_nodes/base.py b/release/scripts/startup/function_nodes/base.py
index 1b155624a8a..58c7043720a 100644
--- a/release/scripts/startup/function_nodes/base.py
+++ b/release/scripts/startup/function_nodes/base.py
@@ -257,3 +257,6 @@ class DataSocket(BaseSocket):
def restore_state(self, state):
pass
+ def draw_color(self, context, node):
+ from . types import type_infos
+ return type_infos.get_socket_color(self.data_type)
diff --git a/release/scripts/startup/function_nodes/sockets.py b/release/scripts/startup/function_nodes/sockets.py
index b609a5872ed..1a1d85fae79 100644
--- a/release/scripts/startup/function_nodes/sockets.py
+++ b/release/scripts/startup/function_nodes/sockets.py
@@ -12,6 +12,7 @@ class OperatorSocket(bpy.types.NodeSocket, BaseSocket):
class FloatSocket(bpy.types.NodeSocket, DataSocket):
bl_idname = "fn_FloatSocket"
bl_label = "Float Socket"
+ socket_color = (0, 0.3, 0.5, 1)
value: FloatProperty(
name="Value",
@@ -21,9 +22,6 @@ class FloatSocket(bpy.types.NodeSocket, DataSocket):
def draw_property(self, layout, node, text):
layout.prop(self, "value", text=text)
- def draw_color(self, context, node):
- return (0, 0.3, 0.5, 1)
-
def get_state(self):
return self.value
@@ -33,6 +31,7 @@ class FloatSocket(bpy.types.NodeSocket, DataSocket):
class IntegerSocket(bpy.types.NodeSocket, DataSocket):
bl_idname = "fn_IntegerSocket"
bl_label = "Integer Socket"
+ socket_color = (0.3, 0.7, 0.5, 1)
value: IntProperty(
name="Value",
@@ -42,9 +41,6 @@ class IntegerSocket(bpy.types.NodeSocket, DataSocket):
def draw_property(self, layout, node, text):
layout.prop(self, "value", text=text)
- def draw_color(self, context, node):
- return (0.3, 0.7, 0.5, 1)
-
def get_state(self):
return self.value
@@ -54,6 +50,7 @@ class IntegerSocket(bpy.types.NodeSocket, DataSocket):
class VectorSocket(bpy.types.NodeSocket, DataSocket):
bl_idname = "fn_VectorSocket"
bl_label = "Vector Socket"
+ socket_color = (0, 0, 0.5, 1)
value: FloatVectorProperty(
name="Value",
@@ -64,9 +61,6 @@ class VectorSocket(bpy.types.NodeSocket, DataSocket):
def draw_property(self, layout, node, text):
layout.column().prop(self, "value", text=text)
- def draw_color(self, context, node):
- return (0, 0, 0.5, 1)
-
def get_state(self):
return tuple(self.value)
@@ -83,5 +77,3 @@ class CustomColoredSocket(bpy.types.NodeSocket, DataSocket):
soft_min=0.0,
soft_max=1.0)
- def draw_color(self, context, node):
- return self.color
diff --git a/release/scripts/startup/function_nodes/types.py b/release/scripts/startup/function_nodes/types.py
index 6e25d078fde..525c7daedec 100644
--- a/release/scripts/startup/function_nodes/types.py
+++ b/release/scripts/startup/function_nodes/types.py
@@ -1,3 +1,9 @@
+from . types_base import (
+ DataTypesInfo,
+ UniqueSocketBuilder,
+ ColoredSocketBuilder,
+)
+
from . sockets import (
FloatSocket,
IntegerSocket,
@@ -5,100 +11,6 @@ from . sockets import (
CustomColoredSocket,
)
-class SocketBuilder:
- def build(self, node_sockets, name):
- raise NotImplementedError()
-
-class UniqueSocketBuilder(SocketBuilder):
- def __init__(self, socket_cls):
- self.socket_cls = socket_cls
-
- def build(self, node_sockets, name, identifier):
- return node_sockets.new(
- self.socket_cls.bl_idname,
- name,
- identifier=identifier)
-
-class ColoredSocketBuilder(SocketBuilder):
- def __init__(self, color):
- self.color = color
-
- def build(self, node_sockets, name, identifier):
- socket = node_sockets.new(
- "fn_CustomColoredSocket",
- name,
- identifier=identifier)
- socket.color = self.color
- return socket
-
-class DataTypesInfo:
- def __init__(self):
- self.data_types = set()
- self.builder_by_data_type = dict()
- self.list_by_base = dict()
- self.base_by_list = dict()
-
- def insert_data_type(self, data_type, builder):
- assert data_type not in self.data_types
- assert isinstance(builder, SocketBuilder)
-
- self.data_types.add(data_type)
- self.builder_by_data_type[data_type] = builder
-
- def insert_list_relation(self, base_type, list_type):
- assert self.is_data_type(base_type)
- assert self.is_data_type(list_type)
- assert base_type not in self.list_by_base
- assert list_type not in self.base_by_list
-
- self.list_by_base[base_type] = list_type
- self.base_by_list[list_type] = base_type
-
- def is_data_type(self, data_type):
- return data_type in self.data_types
-
- def is_base(self, data_type):
- return data_type in self.list_by_base
-
- def is_list(self, data_type):
- return data_type in self.base_by_list
-
- def to_list(self, data_type):
- assert self.is_base(data_type)
- return self.list_by_base[data_type]
-
- def to_base(self, data_type):
- assert self.is_list(data_type)
- return self.base_by_list[data_type]
-
- def to_builder(self, data_type):
- assert self.is_data_type(data_type)
- return self.builder_by_data_type[data_type]
-
- def build(self, data_type, node_sockets, name, identifier):
- builder = self.to_builder(data_type)
- socket = builder.build(node_sockets, name, identifier)
- socket.data_type = data_type
- return socket
-
- def get_data_type_items(self):
- items = []
- for data_type in self.data_types:
- items.append((data_type, data_type, ""))
- return items
-
- def get_base_type_items(self):
- items = []
- for data_type in self.list_by_base.keys():
- items.append((data_type, data_type, ""))
- return items
-
- def get_data_type_items_cb(self):
- def callback(_1, _2):
- return self.get_data_type_items()
- return callback
-
-
type_infos = DataTypesInfo()
type_infos.insert_data_type("Float", UniqueSocketBuilder(FloatSocket))
diff --git a/release/scripts/startup/function_nodes/types.py b/release/scripts/startup/function_nodes/types_base.py
similarity index 74%
copy from release/scripts/startup/function_nodes/types.py
copy to release/scripts/startup/function_nodes/types_base.py
index 6e25d078fde..afb35cadbfe 100644
--- a/release/scripts/startup/function_nodes/types.py
+++ b/release/scripts/startup/function_nodes/types_base.py
@@ -1,35 +1,5 @@
-from . sockets import (
- FloatSocket,
- IntegerSocket,
- VectorSocket,
- CustomColoredSocket,
-)
-
-class SocketBuilder:
- def build(self, node_sockets, name):
- raise NotImplementedError()
-
-class UniqueSocketBuilder(SocketBuilder):
- def __init__(self, socket_cls):
- self.socket_cls = socket_cls
-
- def build(self, node_sockets, name, identifier):
- return node_sockets.new(
- self.socket_cls.bl_idname,
- name,
- identifier=identifier)
-
-class ColoredSocketBuilder(SocketBuilder):
- def __init__(self, color):
- self.color = color
-
- def build(self, node_sockets, name, identifier):
- socket = node_sockets.new(
- "fn_CustomColoredSocket",
- name,
- identifier=identifier)
- socket.color = self.color
- return socket
+# Type Info Container
+#####################################
class DataTypesInfo:
def __init__(self):
@@ -40,7 +10,7 @@ class DataTypesInfo:
def insert_data_type(self, data_type, builder):
assert data_type not in self.data_types
- assert isinstance(builder, SocketBuilder)
+ assert isinstance(builder, DataSocketBuilder)
self.data_types.add(data_type)
self.builder_by_data_type[data_type] = builder
@@ -98,16 +68,45 @@ class DataTypesInfo:
return self.get_data_type_items()
return callback
+ def get_socket_color(self, data_type):
+ builder = self.to_builder(data_type)
+ return builder.get_color()
+
-type_infos = DataTypesInfo()
+# Data Socket Builders
+##################################3
-type_infos.insert_data_type("Float", UniqueSocketBuilder(FloatSocket))
-type_infos.insert_data_type("Vector", UniqueSocketBuilder(VectorSocket))
-type_infos.insert_data_type("Integer", UniqueSocketBuilder(IntegerSocket))
-type_infos.insert_data_type("Float List", ColoredSocketBuilder((0, 0.3, 0.5, 0.5)))
-type_infos.insert_data_type("Vector List", ColoredSocketBuilder((0, 0, 0.5, 0.5)))
-type_infos.insert_data_type("Integer List", ColoredSocketBuilder((0.3, 0.7, 0.5, 0.5)))
+class DataSocketBuilder:
+ def build(self, node_sockets, name):
+ raise NotImplementedError()
+
+ def get_color(self, socket):
+ raise NotImplementedError()
+
+class UniqueSocketBuilder(DataSocketBuilder):
+ def __init__(self, socket_cls):
+ self.socket_cls = socket_cls
+
+ def build(self, node_sockets, name, identifier):
+ return node_sockets.new(
+ self.socket_cls.bl_idname,
+ name,
+ identifier=identifier)
+
+ def get_color(self):
+ return self.socket_cls.socket_color
+
+class ColoredSocketBuilder(DataSocketBuilder):
+ def __init__(self, color):
+ self.color = color
+
+ def build(self, node_sockets, name, identifier):
+ socket = node_sockets.new(
+ "fn_CustomColoredSocket",
+ name,
+ identifier=identifier)
+ socket.color = self.color
+ return socket
-type_infos.insert_list_relation("Float", "Float List")
-type_infos.insert_list_relation("Vector", "Vector List")
-type_infos.insert_list_relation("Integer", "Integer List")
\ No newline at end of file
+ def get_color(self):
+ return self.color
\ No newline at end of file
More information about the Bf-blender-cvs
mailing list