[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