[Bf-blender-cvs] [d7204633003] functions: support nicer drawing of sockets
Jacques Lucke
noreply at git.blender.org
Sat Dec 14 13:15:43 CET 2019
Commit: d720463300377d7ab33815f907a8cf693c55a6d9
Author: Jacques Lucke
Date: Sat Dec 14 12:18:17 2019 +0100
Branches: functions
https://developer.blender.org/rBd720463300377d7ab33815f907a8cf693c55a6d9
support nicer drawing of sockets
===================================================================
M release/scripts/startup/nodes/declaration/fixed_type.py
M release/scripts/startup/nodes/declaration/vectorized.py
M release/scripts/startup/nodes/function_nodes/object_mesh.py
M release/scripts/startup/nodes/node_builder.py
M release/scripts/startup/nodes/sockets.py
===================================================================
diff --git a/release/scripts/startup/nodes/declaration/fixed_type.py b/release/scripts/startup/nodes/declaration/fixed_type.py
index 22dec2cde85..49c62858e90 100644
--- a/release/scripts/startup/nodes/declaration/fixed_type.py
+++ b/release/scripts/startup/nodes/declaration/fixed_type.py
@@ -2,19 +2,22 @@ from . base import SocketDeclBase, NoDefaultValue
from .. types import type_infos
class FixedSocketDecl(SocketDeclBase):
- def __init__(self, node, identifier: str, display_name: str, data_type: str, default):
+ def __init__(self, node, identifier: str, display_name: str, data_type: str, default, socket_settings: dict):
self.node = node
self.identifier = identifier
self.display_name = display_name
self.data_type = data_type
self.default = default
+ self.socket_settings = socket_settings
def build(self, node_sockets):
- return [type_infos.build(
- self.data_type,
- node_sockets,
- self.display_name,
- self.identifier)]
+ socket = type_infos.build(self.data_type,
+ node_sockets,
+ self.display_name,
+ self.identifier)
+ for name, value in self.socket_settings.items():
+ setattr(socket, name, value)
+ return [socket]
def init_default(self, node_sockets):
if self.default is not NoDefaultValue:
@@ -24,6 +27,10 @@ class FixedSocketDecl(SocketDeclBase):
def validate(self, sockets):
if len(sockets) != 1:
return False
+ socket = sockets[0]
+ for name, value in self.socket_settings.items():
+ if getattr(socket, name) != value:
+ return False
return self._data_socket_test(sockets[0],
self.display_name, self.data_type, self.identifier)
diff --git a/release/scripts/startup/nodes/declaration/vectorized.py b/release/scripts/startup/nodes/declaration/vectorized.py
index 62bb4b31a8c..250d54bf811 100644
--- a/release/scripts/startup/nodes/declaration/vectorized.py
+++ b/release/scripts/startup/nodes/declaration/vectorized.py
@@ -7,17 +7,26 @@ from .. utils.generic import getattr_recursive
class VectorizedDeclBase:
def build(self, node_sockets):
data_type, name = self.get_type_and_name()
- return [type_infos.build(
+ socket =type_infos.build(
data_type,
node_sockets,
name,
- self.identifier)]
+ self.identifier)
+ for prop_name, value in self.socket_settings.items():
+ setattr(socket, prop_name, value)
+ return [socket]
def validate(self, sockets):
if len(sockets) != 1:
return False
+
+ socket = sockets[0]
+ for prop_name, value in self.socket_settings.items():
+ if getattr(socket, prop_name) != value:
+ return False
+
data_type, name = self.get_type_and_name()
- return self._data_socket_test(sockets[0],
+ return self._data_socket_test(socket,
name, data_type, self.identifier)
def amount(self):
@@ -34,7 +43,7 @@ class VectorizedInputDecl(VectorizedDeclBase, SocketDeclBase):
def __init__(self,
node, identifier, prop_name,
base_name, list_name,
- base_type, default):
+ base_type, default, socket_settings):
self.node = node
self.identifier = identifier
self.prop_name = prop_name
@@ -43,6 +52,7 @@ class VectorizedInputDecl(VectorizedDeclBase, SocketDeclBase):
self.base_type = base_type
self.list_type = type_infos.to_list(base_type)
self.default = default
+ self.socket_settings = socket_settings
def init_default(self, node_sockets):
if self.default is not NoDefaultValue:
@@ -67,7 +77,7 @@ class VectorizedOutputDecl(VectorizedDeclBase, SocketDeclBase):
def __init__(self,
node, identifier, input_prop_names,
base_name, list_name,
- base_type):
+ base_type, socket_settings):
self.node = node
self.identifier = identifier
self.input_prop_names = input_prop_names
@@ -75,6 +85,7 @@ class VectorizedOutputDecl(VectorizedDeclBase, SocketDeclBase):
self.list_name = list_name
self.base_type = base_type
self.list_type = type_infos.to_list(base_type)
+ self.socket_settings = socket_settings
def is_vectorized(self):
for prop_name in self.input_prop_names:
diff --git a/release/scripts/startup/nodes/function_nodes/object_mesh.py b/release/scripts/startup/nodes/function_nodes/object_mesh.py
index 55a7516914d..c1848e56f52 100644
--- a/release/scripts/startup/nodes/function_nodes/object_mesh.py
+++ b/release/scripts/startup/nodes/function_nodes/object_mesh.py
@@ -8,7 +8,7 @@ class ObjectMeshNode(bpy.types.Node, FunctionNode):
bl_label = "Object Mesh"
def declaration(self, builder):
- builder.fixed_input("object", "Object", "Object")
+ builder.fixed_input("object", "Object", "Object", display_name=False)
builder.fixed_output("vertex_locations", "Vertex Locations", "Vector List")
@@ -28,7 +28,7 @@ class ClosestLocationOnObjectNode(bpy.types.Node, FunctionNode):
use_list__position: NodeBuilder.VectorizedProperty()
def declaration(self, builder: NodeBuilder):
- builder.vectorized_input("object", "use_list__object", "Object", "Objects", "Object")
+ builder.vectorized_input("object", "use_list__object", "Object", "Objects", "Object", display_name=False)
builder.vectorized_input("position", "use_list__position", "Position", "Positions", "Vector")
vectorize_props = ["use_list__object", "use_list__position"]
@@ -68,7 +68,8 @@ class GetWeightOnSurfaceNode(bpy.types.Node, FunctionNode):
def declaration(self, builder: NodeBuilder):
builder.vectorized_input("surface_hook", "use_list__surface_hook", "Surface Hook", "Surface Hooks", "Surface Hook")
- builder.vectorized_input("vertex_group_name", "use_list__vertex_group_name", "Name", "Names", "Text", default="Group")
+ builder.vectorized_input("vertex_group_name", "use_list__vertex_group_name", "Name", "Names", "Text",
+ default="Group", display_name=False, display_icon="GROUP_VERTEX")
builder.vectorized_output("weight", ["use_list__surface_hook", "use_list__vertex_group_name"], "Weight", "Weights", "Float")
@@ -81,7 +82,7 @@ class GetImageColorOnSurfaceNode(bpy.types.Node, FunctionNode):
def declaration(self, builder: NodeBuilder):
builder.vectorized_input("surface_hook", "use_list__surface_hook", "Surface Hook", "Surface Hooks", "Surface Hook")
- builder.vectorized_input("image", "use_list__image", "Image", "Images", "Image")
+ builder.vectorized_input("image", "use_list__image", "Image", "Images", "Image", display_name=False)
builder.vectorized_output("color", ["use_list__surface_hook", "use_list__image"], "Color", "Colors", "Color")
@@ -100,7 +101,7 @@ class SampleObjectSurfaceNode(bpy.types.Node, FunctionNode):
)
def declaration(self, builder: NodeBuilder):
- builder.fixed_input("object", "Object", "Object")
+ builder.fixed_input("object", "Object", "Object", display_name=False)
builder.fixed_input("amount", "Amount", "Integer", default=10)
builder.fixed_input("seed", "Seed", "Integer")
if self.weight_mode == "VERTEX_WEIGHTS":
diff --git a/release/scripts/startup/nodes/node_builder.py b/release/scripts/startup/nodes/node_builder.py
index bbdb0bdb7c7..67ce6e70ed6 100644
--- a/release/scripts/startup/nodes/node_builder.py
+++ b/release/scripts/startup/nodes/node_builder.py
@@ -88,12 +88,14 @@ class NodeBuilder:
# Fixed Data Types
###################################
- def fixed_input(self, identifier, name, data_type, *, default=NoDefaultValue):
- decl = FixedSocketDecl(self.node, identifier, name, data_type, default)
+ def fixed_input(self, identifier, name, data_type,
+ *, default=NoDefaultValue, **kwargs):
+ decl = FixedSocketDecl(self.node, identifier, name, data_type, default, kwargs)
self._add_input(decl)
- def fixed_output(self, identifier, name, data_type, *, default=NoDefaultValue):
- decl = FixedSocketDecl(self.node, identifier, name, data_type, default)
+ def fixed_output(self, identifier, name, data_type,
+ *, default=NoDefaultValue, **kwargs):
+ decl = FixedSocketDecl(self.node, identifier, name, data_type, default, kwargs)
self._add_output(decl)
def fixed_pass_through(self, identifier, name, data_type, *, default=NoDefaultValue):
@@ -149,17 +151,19 @@ class NodeBuilder:
def VectorizedProperty():
return VectorizedInputDecl.Property()
- def vectorized_input(self, identifier, prop_name, base_name, list_name, base_type, *, default=NoDefaultValue):
+ def vectorized_input(self, identifier, prop_name, base_name, list_name, base_type,
+ *, default=NoDefaultValue, **kwargs):
decl = VectorizedInputDecl(
self.node, identifier, prop_name,
base_name, list_name, base_type,
- default)
+ default, kwargs)
self._add_input(decl)
- def vectorized_output(self, identifier, input_prop_names, base_name, list_name, base_type):
+ def vectorized_output(self, identifier, input_prop_names, base_name, list_name, base_type,
+ **kwargs):
decl = VectorizedOutputDecl(
self.node, identifier, input_prop_names,
- base_name, list_name, base_type)
+ base_name, list_name, base_type, kwargs)
self._add_output(decl)
diff --git a/release/scripts/startup/nodes/sockets.py b/release/scripts/startup/nodes/sockets.py
index e4c98a5ff5c..5072259dd23 100644
--- a/release/scripts/startup/nodes/sockets.py
+++ b/release/scripts/startup/nodes/sockets.py
@@ -101,7 +101,11 @@ class ObjectSocket(bpy.types.NodeSocket, DataS
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list