[Bf-blender-cvs] [185c80e9ba5] functions: data type socket builder

Jacques Lucke noreply at git.blender.org
Tue Mar 12 18:29:42 CET 2019


Commit: 185c80e9ba5a2d332c9fed54f988e2ebf262479b
Author: Jacques Lucke
Date:   Tue Mar 12 17:20:10 2019 +0100
Branches: functions
https://developer.blender.org/rB185c80e9ba5a2d332c9fed54f988e2ebf262479b

data type socket builder

===================================================================

M	release/scripts/startup/function_nodes/base.py
M	release/scripts/startup/function_nodes/socket_decl.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 f8da8f4dbf5..20d71943669 100644
--- a/release/scripts/startup/function_nodes/base.py
+++ b/release/scripts/startup/function_nodes/base.py
@@ -47,9 +47,9 @@ class FunctionNode(BaseNode):
     def init(self, context):
         inputs, outputs = self.get_sockets()
         for socket_decl in inputs:
-            socket_decl.generate(self, self.inputs)
+            socket_decl.build(self, self.inputs)
         for socket_decl in outputs:
-            socket_decl.generate(self, self.outputs)
+            socket_decl.build(self, self.outputs)
 
     def get_sockets():
         return [], []
diff --git a/release/scripts/startup/function_nodes/socket_decl.py b/release/scripts/startup/function_nodes/socket_decl.py
index 43eb2ab60e3..543495a738a 100644
--- a/release/scripts/startup/function_nodes/socket_decl.py
+++ b/release/scripts/startup/function_nodes/socket_decl.py
@@ -3,7 +3,7 @@ from dataclasses import dataclass
 from . sockets import info
 
 class SocketDeclBase:
-    def generate(self, node, node_sockets):
+    def build(self, node, node_sockets):
         raise NotImplementedError()
 
 class FixedSocketDecl(SocketDeclBase):
@@ -11,19 +11,24 @@ class FixedSocketDecl(SocketDeclBase):
         self.display_name = display_name
         self.data_type = data_type
 
-    def generate(self, node, node_sockets):
-        idname = info.to_idname(self.data_type)
-        return node_sockets.new(idname, self.display_name)
+    def build(self, node, node_sockets):
+        return info.build(
+            self.data_type,
+            node_sockets,
+            self.display_name)
 
 class ListSocketDecl(SocketDeclBase):
     def __init__(self, display_name: str, type_property: str):
         self.display_name = display_name
         self.type_property = type_property
 
-    def generate(self, node, node_sockets):
+    def build(self, node, node_sockets):
         base_type = getattr(node, self.type_property)
-        idname = info.to_list_idname(base_type)
-        return node_sockets.new(idname, self.display_name)
+        list_type = info.to_list(base_type)
+        return info.build(
+            list_type,
+            node_sockets,
+            self.display_name)
 
     @classmethod
     def Property(cls):
@@ -34,10 +39,12 @@ class BaseSocketDecl(SocketDeclBase):
         self.display_name = display_name
         self.type_property = type_property
 
-    def generate(self, node, node_sockets):
+    def build(self, node, node_sockets):
         data_type = getattr(node, self.type_property)
-        idname = info.to_idname(data_type)
-        return node_sockets.new(idname, self.display_name)
+        return info.build(
+            data_type,
+            node_sockets,
+            self.display_name)
 
     @classmethod
     def Property(cls):
diff --git a/release/scripts/startup/function_nodes/sockets.py b/release/scripts/startup/function_nodes/sockets.py
index bf80c589d9d..a33463438c2 100644
--- a/release/scripts/startup/function_nodes/sockets.py
+++ b/release/scripts/startup/function_nodes/sockets.py
@@ -5,7 +5,6 @@ from bpy.props import *
 class FloatSocket(bpy.types.NodeSocket, DataSocket):
     bl_idname = "fn_FloatSocket"
     bl_label = "Float Socket"
-    color = (0, 0.3, 0.5, 1)
 
     value: FloatProperty(
         name="Value",
@@ -15,10 +14,12 @@ 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)
+
 class IntegerSocket(bpy.types.NodeSocket, DataSocket):
     bl_idname = "fn_IntegerSocket"
     bl_label = "Integer Socket"
-    color = (0, 0, 0, 1)
 
     value: IntProperty(
         name="Value",
@@ -28,10 +29,12 @@ 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, 0.7, 0.5, 1)
+
 class VectorSocket(bpy.types.NodeSocket, DataSocket):
     bl_idname = "fn_VectorSocket"
     bl_label = "Vector Socket"
-    color = (0, 0, 0.5, 1)
 
     value: FloatVectorProperty(
         name="Value",
@@ -42,28 +45,55 @@ class VectorSocket(bpy.types.NodeSocket, DataSocket):
     def draw_property(self, layout, node, text):
         layout.column().prop(self, "value", text=text)
 
-class FloatListSocket(bpy.types.NodeSocket, DataSocket):
-    bl_idname = "fn_FloatListSocket"
-    bl_label = "Float List Socket"
-    color = (0, 0.3, 0.5, 0.5)
+    def draw_color(self, context, node):
+        return (0, 0, 0.5, 1)
+
+class CustomColoredSocket(bpy.types.NodeSocket, DataSocket):
+    bl_idname = "fn_CustomColoredSocket"
+    bl_label = "Custom Colored Socket"
+
+    color: FloatVectorProperty(
+        size=4,
+        subtype='COLOR',
+        soft_min=0.0,
+        soft_max=1.0)
+
+    def draw_color(self, context, node):
+        return self.color
+
+class SocketBuilder:
+    def build(self, node_sockets, name):
+        raise NotImplementedError()
+
+class UniqueSocketBuilder(SocketBuilder):
+    def __init__(self, socket_cls):
+        self.socket_cls = socket_cls
 
-class VectorListSocket(bpy.types.NodeSocket, DataSocket):
-    bl_idname = "fn_VectorListSocket"
-    bl_label = "Vector List Socket"
-    color = (0, 0, 0.5, 0.5)
+    def build(self, node_sockets, name):
+        return node_sockets.new(self.socket_cls.bl_idname, name)
+
+class ColoredSocketBuilder(SocketBuilder):
+    def __init__(self, color):
+        self.color = color
+
+    def build(self, node_sockets, name):
+        socket = node_sockets.new("fn_CustomColoredSocket", name)
+        socket.color = self.color
+        return socket
 
 class DataTypesInfo:
     def __init__(self):
         self.data_types = set()
-        self.cls_by_data_type = dict()
+        self.builder_by_data_type = dict()
         self.list_by_base = dict()
         self.base_by_list = dict()
 
-    def insert_data_type(self, data_type, socket_cls):
+    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.cls_by_data_type[data_type] = socket_cls
+        self.builder_by_data_type[data_type] = builder
 
     def insert_list_relation(self, base_type, list_type):
         assert self.is_data_type(base_type)
@@ -91,33 +121,22 @@ class DataTypesInfo:
         assert self.is_list(data_type)
         return self.base_by_list[data_type]
 
-    def to_cls(self, data_type):
+    def to_builder(self, data_type):
         assert self.is_data_type(data_type)
-        return self.cls_by_data_type[data_type]
-
-    def to_list_cls(self, data_type):
-        return self.to_cls(self.to_list(data_type))
-
-    def to_base_cls(self, data_type):
-        return self.to_cls(self.to_base(data_type))
-
-    def to_idname(self, data_type):
-        return self.to_cls(data_type).bl_idname
-
-    def to_list_idname(self, data_type):
-        return self.to_list_cls(data_type).bl_idname
+        return self.builder_by_data_type[data_type]
 
-    def to_base_idname(self, data_type):
-        return self.to_base_cls(data_type).bl_idname
+    def build(self, data_type, node_sockets, name):
+        builder = self.to_builder(data_type)
+        return builder.build(node_sockets, name)
 
 
 info = DataTypesInfo()
 
-info.insert_data_type("Float", FloatSocket)
-info.insert_data_type("Vector", VectorSocket)
-info.insert_data_type("Integer", VectorSocket)
-info.insert_data_type("Float List", FloatListSocket)
-info.insert_data_type("Vector List", VectorListSocket)
+info.insert_data_type("Float", UniqueSocketBuilder(FloatSocket))
+info.insert_data_type("Vector", UniqueSocketBuilder(VectorSocket))
+info.insert_data_type("Integer", UniqueSocketBuilder(VectorSocket))
+info.insert_data_type("Float List", ColoredSocketBuilder((0, 0.3, 0.5, 0.5)))
+info.insert_data_type("Vector List", ColoredSocketBuilder((0, 0, 0.5, 0.5)))
 
 info.insert_list_relation("Float", "Float List")
 info.insert_list_relation("Vector", "Vector List")
\ No newline at end of file



More information about the Bf-blender-cvs mailing list