[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