[Bf-blender-cvs] [f961ef3e6ba] functions: improve ui of Custom Emitter node
Jacques Lucke
noreply at git.blender.org
Tue Dec 10 23:20:59 CET 2019
Commit: f961ef3e6ba6184edf2cef78dd3debff18404a91
Author: Jacques Lucke
Date: Tue Dec 10 22:52:54 2019 +0100
Branches: functions
https://developer.blender.org/rBf961ef3e6ba6184edf2cef78dd3debff18404a91
improve ui of Custom Emitter node
===================================================================
M release/scripts/startup/nodes/base.py
M release/scripts/startup/nodes/bparticle_nodes/custom_emitter.py
M release/scripts/startup/nodes/function_nodes/groups.py
M release/scripts/startup/nodes/function_nodes/value.py
===================================================================
diff --git a/release/scripts/startup/nodes/base.py b/release/scripts/startup/nodes/base.py
index 2f9fe7ee02c..793e10993a7 100644
--- a/release/scripts/startup/nodes/base.py
+++ b/release/scripts/startup/nodes/base.py
@@ -119,8 +119,8 @@ class BaseNode:
def draw_advanced(self, layout):
pass
- def draw_socket(self, layout, socket, text, decl, index):
- decl.draw_socket(layout, socket, index)
+ def draw_socket(self, layout, socket, text, decl, index_in_decl):
+ decl.draw_socket(layout, socket, index_in_decl)
def draw_label(self):
if self.hide:
diff --git a/release/scripts/startup/nodes/bparticle_nodes/custom_emitter.py b/release/scripts/startup/nodes/bparticle_nodes/custom_emitter.py
index 54f099e8f2f..6eeef095848 100644
--- a/release/scripts/startup/nodes/bparticle_nodes/custom_emitter.py
+++ b/release/scripts/startup/nodes/bparticle_nodes/custom_emitter.py
@@ -1,14 +1,17 @@
import bpy
import uuid
from bpy.props import *
-from .. base import SimulationNode
+from .. base import SimulationNode, DataSocket
from .. node_builder import NodeBuilder
from .. types import type_infos
class CustomEmitterAttribute(bpy.types.PropertyGroup):
- attribute_name: StringProperty()
- attribute_type: StringProperty()
+ def sync_tree(self, context):
+ self.id_data.sync()
+
+ attribute_name: StringProperty(update=sync_tree)
+ attribute_type: StringProperty(update=sync_tree)
identifier: StringProperty()
is_list: NodeBuilder.VectorizedProperty()
@@ -23,8 +26,6 @@ class CustomEmitter(bpy.types.Node, SimulationNode):
type=CustomEmitterAttribute,
)
- new_attribute_name: StringProperty(default="My Attribute")
-
def declaration(self, builder: NodeBuilder):
for i, item in enumerate(self.attributes):
builder.vectorized_input(
@@ -37,12 +38,26 @@ class CustomEmitter(bpy.types.Node, SimulationNode):
builder.influences_output("emitter", "Emitter")
def draw(self, layout):
- layout.prop(self, "new_attribute_name")
self.invoke_type_selection(layout, "add_attribute", "Add Attribute", mode="BASE")
+ def draw_socket(self, layout, socket, text, decl, index_in_decl):
+ if isinstance(socket, DataSocket):
+ index = list(self.inputs).index(socket)
+ item = self.attributes[index]
+ col = layout.column(align=True)
+ row = col.row(align=True)
+ row.prop(item, "attribute_name", text="")
+ self.invoke_type_selection(row, "set_attribute_type", "", icon="SETTINGS", mode="BASE", settings=(index, ))
+ if hasattr(socket, "draw_property"):
+ socket.draw_property(col, self, "")
+ else:
+ decl.draw_socket(layout, socket, index_in_decl)
+
def add_attribute(self, data_type):
item = self.attributes.add()
item.identifier = str(uuid.uuid4())
- item.attribute_name = self.new_attribute_name
+ item.attribute_name = "My Attribute"
item.attribute_type = data_type
- self.sync_tree()
+
+ def set_attribute_type(self, data_type, index):
+ self.attributes[index].attribute_type = data_type
diff --git a/release/scripts/startup/nodes/function_nodes/groups.py b/release/scripts/startup/nodes/function_nodes/groups.py
index 511157c3593..5365e62ba1b 100644
--- a/release/scripts/startup/nodes/function_nodes/groups.py
+++ b/release/scripts/startup/nodes/function_nodes/groups.py
@@ -63,7 +63,7 @@ class GroupInputNode(bpy.types.Node, BaseNode):
self.invoke_type_selection(layout, "set_data_type", "Select Type")
- def draw_socket(self, layout, socket, text, decl, index):
+ def draw_socket(self, layout, socket, text, decl, index_in_decl):
row = layout.row(align=True)
row.prop(self, "input_name", text="")
row.prop(self, "display_settings", text="", icon="SETTINGS")
@@ -119,7 +119,7 @@ class GroupOutputNode(bpy.types.Node, BaseNode):
if self.interface_type == "DATA":
self.invoke_type_selection(layout, "set_type_type", "Select Type")
- def draw_socket(self, layout, socket, text, decl, index):
+ def draw_socket(self, layout, socket, text, decl, index_in_decl):
row = layout.row(align=True)
row.prop(self, "output_name", text="")
row.prop(self, "display_settings", text="", icon="SETTINGS")
diff --git a/release/scripts/startup/nodes/function_nodes/value.py b/release/scripts/startup/nodes/function_nodes/value.py
index 128724e568e..d386c6c7f0b 100644
--- a/release/scripts/startup/nodes/function_nodes/value.py
+++ b/release/scripts/startup/nodes/function_nodes/value.py
@@ -8,7 +8,7 @@ class ValueNode(bpy.types.Node, FunctionNode):
bl_idname = "fn_ValueNode"
bl_label = "Value"
- data_type = StringProperty(
+ data_type: StringProperty(
name="Data Type",
default="Float",
update=FunctionNode.sync_tree,
@@ -17,7 +17,7 @@ class ValueNode(bpy.types.Node, FunctionNode):
def declaration(self, builder: NodeBuilder):
builder.fixed_output("value", "Value", self.data_type)
- def draw_socket(self, layout, socket, text, decl, index):
+ def draw_socket(self, layout, socket, text, decl, index_in_decl):
row = layout.row(align=True)
if hasattr(socket, "draw_property"):
socket.draw_property(row, self, "")
More information about the Bf-blender-cvs
mailing list