[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