[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