[Bf-blender-cvs] [255e1fe1497] functions: data type info

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


Commit: 255e1fe1497f1f1b842d89173b7802eb4c91ebfc
Author: Jacques Lucke
Date:   Tue Mar 12 16:48:00 2019 +0100
Branches: functions
https://developer.blender.org/rB255e1fe1497f1f1b842d89173b7802eb4c91ebfc

data type info

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

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/socket_decl.py b/release/scripts/startup/function_nodes/socket_decl.py
index 29f2c1cbaf9..43eb2ab60e3 100644
--- a/release/scripts/startup/function_nodes/socket_decl.py
+++ b/release/scripts/startup/function_nodes/socket_decl.py
@@ -1,6 +1,6 @@
 from bpy.props import *
 from dataclasses import dataclass
-from . sockets import socket_cls_from_data_type, to_base_idname, to_list_idname
+from . sockets import info
 
 class SocketDeclBase:
     def generate(self, node, node_sockets):
@@ -12,8 +12,8 @@ class FixedSocketDecl(SocketDeclBase):
         self.data_type = data_type
 
     def generate(self, node, node_sockets):
-        socket_cls = socket_cls_from_data_type(self.data_type)
-        return node_sockets.new(socket_cls.bl_idname, self.display_name)
+        idname = info.to_idname(self.data_type)
+        return node_sockets.new(idname, self.display_name)
 
 class ListSocketDecl(SocketDeclBase):
     def __init__(self, display_name: str, type_property: str):
@@ -22,7 +22,7 @@ class ListSocketDecl(SocketDeclBase):
 
     def generate(self, node, node_sockets):
         base_type = getattr(node, self.type_property)
-        idname = to_list_idname(base_type)
+        idname = info.to_list_idname(base_type)
         return node_sockets.new(idname, self.display_name)
 
     @classmethod
@@ -36,8 +36,8 @@ class BaseSocketDecl(SocketDeclBase):
 
     def generate(self, node, node_sockets):
         data_type = getattr(node, self.type_property)
-        socket_cls = socket_cls_from_data_type(data_type)
-        return node_sockets.new(socket_cls.bl_idname, self.display_name)
+        idname = info.to_idname(data_type)
+        return node_sockets.new(idname, 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 697258f52c1..bf80c589d9d 100644
--- a/release/scripts/startup/function_nodes/sockets.py
+++ b/release/scripts/startup/function_nodes/sockets.py
@@ -52,34 +52,72 @@ class VectorListSocket(bpy.types.NodeSocket, DataSocket):
     bl_label = "Vector List Socket"
     color = (0, 0, 0.5, 0.5)
 
-def socket_cls_from_data_type(data_type):
-    return data_types[data_type]
-
-def to_base_idname(value):
-    return base_idnames[value]
-
-def to_list_idname(value):
-    return list_idnames[value]
-
-base_idnames = {
-    "Float List" : "fn_FloatSocket",
-    "Vector List" : "fn_VectorSocket"
-}
-
-list_idnames = {
-    "Float" : "fn_FloatListSocket",
-    "Vector" : "fn_VectorListSocket",
-}
-
-list_relations = [
-    (FloatSocket, FloatListSocket),
-    (VectorSocket, VectorListSocket),
-]
-
-data_types = {
-    "Float" : FloatSocket,
-    "Integer" : IntegerSocket,
-    "Vector" : VectorSocket,
-    "Float List" : FloatListSocket,
-    "Vector List" : VectorListSocket,
-}
\ No newline at end of file
+class DataTypesInfo:
+    def __init__(self):
+        self.data_types = set()
+        self.cls_by_data_type = dict()
+        self.list_by_base = dict()
+        self.base_by_list = dict()
+
+    def insert_data_type(self, data_type, socket_cls):
+        assert data_type not in self.data_types
+
+        self.data_types.add(data_type)
+        self.cls_by_data_type[data_type] = socket_cls
+
+    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_cls(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
+
+    def to_base_idname(self, data_type):
+        return self.to_base_cls(data_type).bl_idname
+
+
+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_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