[Bf-blender-cvs] [10b78013eb3] temp-attribute-processor: support default mode again and have separate default attribute name
Jacques Lucke
noreply at git.blender.org
Tue Jun 22 05:25:05 CEST 2021
Commit: 10b78013eb318af046daafe5a55f9576fe13b951
Author: Jacques Lucke
Date: Thu Jun 10 12:07:37 2021 +0200
Branches: temp-attribute-processor
https://developer.blender.org/rB10b78013eb318af046daafe5a55f9576fe13b951
support default mode again and have separate default attribute name
===================================================================
M source/blender/blenkernel/intern/node.cc
M source/blender/editors/space_node/node_buttons.c
M source/blender/editors/space_node/node_group.cc
M source/blender/makesdna/DNA_node_types.h
M source/blender/makesrna/intern/rna_nodetree.c
M source/blender/nodes/geometry/nodes/node_geo_attribute_processor.cc
===================================================================
diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc
index 3d146497a9c..338be7c3560 100644
--- a/source/blender/blenkernel/intern/node.cc
+++ b/source/blender/blenkernel/intern/node.cc
@@ -480,6 +480,7 @@ static void write_node_socket_interface(BlendWriter *writer, bNodeSocket *sock)
}
write_node_socket_default_value(writer, sock);
+ BLO_write_string(writer, sock->default_attribute_name);
}
/* this is only direct data, tree itself should have been written */
@@ -653,6 +654,7 @@ static void direct_link_node_socket(BlendDataReader *reader, bNodeSocket *sock)
sock->typeinfo = nullptr;
BLO_read_data_address(reader, &sock->storage);
BLO_read_data_address(reader, &sock->default_value);
+ BLO_read_data_address(reader, &sock->default_attribute_name);
sock->total_inputs = 0; /* Clear runtime data set before drawing. */
sock->cache = nullptr;
}
@@ -2150,6 +2152,9 @@ static void node_socket_copy(bNodeSocket *sock_dst, const bNodeSocket *sock_src,
socket_id_user_increment(sock_dst);
}
}
+ if (sock_src->default_attribute_name) {
+ sock_dst->default_attribute_name = (char *)MEM_dupallocN(sock_src->default_attribute_name);
+ }
sock_dst->stack_index = 0;
/* XXX some compositor node (e.g. image, render layers) still store
@@ -3102,6 +3107,9 @@ static void node_socket_interface_free(bNodeTree *UNUSED(ntree),
}
MEM_freeN(sock->default_value);
}
+ if (sock->default_attribute_name) {
+ MEM_freeN(sock->default_attribute_name);
+ }
}
static void free_localized_node_groups(bNodeTree *ntree)
diff --git a/source/blender/editors/space_node/node_buttons.c b/source/blender/editors/space_node/node_buttons.c
index 336b0c46a81..6ab31373e32 100644
--- a/source/blender/editors/space_node/node_buttons.c
+++ b/source/blender/editors/space_node/node_buttons.c
@@ -165,6 +165,10 @@ static void draw_socket_list(const bContext *C,
if (socket->typeinfo->interface_draw) {
socket->typeinfo->interface_draw((bContext *)C, layout, &socket_ptr);
}
+
+ if (ntree->type == NTREE_ATTRIBUTE) {
+ uiItemR(layout, &socket_ptr, "default_attribute_name", 0, "Attribute", ICON_NONE);
+ }
}
}
diff --git a/source/blender/editors/space_node/node_group.cc b/source/blender/editors/space_node/node_group.cc
index be8a30c8b54..3c87533e86e 100644
--- a/source/blender/editors/space_node/node_group.cc
+++ b/source/blender/editors/space_node/node_group.cc
@@ -1146,7 +1146,7 @@ static int node_group_interface_add_invoke(bContext *C,
wmOperator *op,
const wmEvent *UNUSED(event))
{
- return WM_operator_props_dialog_popup(C, op, 200);
+ return WM_operator_props_dialog_popup(C, op, 300);
}
static int node_group_interface_add_exec(bContext *C, wmOperator *op)
@@ -1169,7 +1169,8 @@ static int node_group_interface_add_exec(bContext *C, wmOperator *op)
NODE_SOCKET_TYPES_END;
BLI_assert(socket_idname != nullptr);
- ntreeAddSocketInterface(ntree, in_out, socket_idname, name);
+ bNodeSocket *sock = ntreeAddSocketInterface(ntree, in_out, socket_idname, name);
+ sock->default_attribute_name = RNA_string_get_alloc(op->ptr, "attribute_name", nullptr, 0);
if (name != nullptr) {
MEM_freeN(name);
@@ -1207,8 +1208,11 @@ static const EnumPropertyItem *node_group_interface_add_type_items(bContext *C,
static void node_group_interface_add_ui(bContext *UNUSED(C), wmOperator *op)
{
uiLayout *layout = op->layout;
+ uiLayoutSetPropSep(layout, true);
+ uiLayoutSetPropDecorate(layout, false);
uiLayoutSetActivateInit(layout, true);
uiItemR(layout, op->ptr, "name", 0, "Name", ICON_NONE);
+ uiItemR(layout, op->ptr, "attribute_name", 0, "Default Attribute", ICON_NONE);
uiItemR(layout, op->ptr, "type", 0, "Type", ICON_NONE);
}
@@ -1233,6 +1237,7 @@ void NODE_OT_group_interface_add(wmOperatorType *ot)
RNA_def_enum(ot->srna, "in_out", rna_enum_node_socket_in_out_items, SOCK_IN, "Socket Side", "");
RNA_def_string(ot->srna, "name", nullptr, MAX_NAME, "Name", "Name of the new interface socket");
+ RNA_def_string(ot->srna, "attribute_name", nullptr, MAX_NAME, "Attribute Name", "");
prop = RNA_def_property(ot->srna, "type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_funcs_runtime(prop, nullptr, nullptr, node_group_interface_add_type_items);
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index 22ebf9eee91..59fada43bdd 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -114,6 +114,7 @@ typedef struct bNodeSocket {
/** Default input value used for unlinked sockets. */
void *default_value;
+ char *default_attribute_name;
/* execution data */
/** Local stack index. */
@@ -1384,6 +1385,10 @@ typedef struct AttributeProcessorOutputSettings {
struct AttributeProcessorOutputSettings *next, *prev;
char *identifier;
+
+ /* GeometryNodeAttributeProcessorOutputMode. */
+ uint8_t output_mode;
+ char _pad[7];
} AttributeProcessorOutputSettings;
typedef struct NodeGeometryAttributeProcessor {
@@ -1916,8 +1921,14 @@ typedef enum GeometryNodeAttributeTransferMapMode {
typedef enum GeometryNodeAttributeProcessorInputMode {
GEO_NODE_ATTRIBUTE_PROCESSOR_INPUT_MODE_VALUE = 0,
GEO_NODE_ATTRIBUTE_PROCESSOR_INPUT_MODE_ATTRIBUTE = 1,
+ GEO_NODE_ATTRIBUTE_PROCESSOR_INPUT_MODE_DEFAULT = 2,
} GeometryNodeAttributeProcessorInputMode;
+typedef enum GeometryNodeAttributeProcessorOutputMode {
+ GEO_NODE_ATTRIBUTE_PROCESSOR_OUTPUT_MODE_ATTRIBUTE = 0,
+ GEO_NODE_ATTRIBUTE_PROCESSOR_OUTPUT_MODE_DEFAULT = 1,
+} GeometryNodeAttributeProcessorOutputMode;
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index 8b0bfe789d1..1186bcce3e2 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -9998,6 +9998,11 @@ static void def_geo_attribute_processor_group_input(BlenderRNA *brna)
0,
"Attribute",
"Pass a attribute name into the group"},
+ {GEO_NODE_ATTRIBUTE_PROCESSOR_INPUT_MODE_DEFAULT,
+ "DEFAULT",
+ 0,
+ "Default",
+ "Use the default attribute name or default value if the attribute does not exist"},
{0, NULL, 0, NULL, NULL},
};
@@ -10020,6 +10025,20 @@ static void def_geo_attribute_processor_group_input(BlenderRNA *brna)
static void def_geo_attribute_processor_group_output(BlenderRNA *brna)
{
+ static EnumPropertyItem input_mode_items[] = {
+ {GEO_NODE_ATTRIBUTE_PROCESSOR_OUTPUT_MODE_ATTRIBUTE,
+ "ATTRIBUTE",
+ 0,
+ "Attribute",
+ "Specify the attribute the result should be stored in"},
+ {GEO_NODE_ATTRIBUTE_PROCESSOR_OUTPUT_MODE_DEFAULT,
+ "DEFAULT",
+ 0,
+ "Default",
+ "Use the default attribute name for the output"},
+ {0, NULL, 0, NULL, NULL},
+ };
+
StructRNA *srna;
PropertyRNA *prop;
@@ -10029,6 +10048,12 @@ static void def_geo_attribute_processor_group_output(BlenderRNA *brna)
prop = RNA_def_property(srna, "identifier", PROP_STRING, PROP_NONE);
RNA_def_property_ui_text(prop, "identifier", "Identifier of the matching socket in the group");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
+ prop = RNA_def_property(srna, "output_mode", PROP_ENUM, PROP_NONE);
+ RNA_def_property_ui_text(prop, "Output Mode", "Where the group output is stored");
+ RNA_def_property_enum_items(prop, input_mode_items);
+ RNA_def_property_update(
+ prop, NC_NODE | NA_EDITED, "rna_GeometryNodeAttributeProcessor_mode_update");
}
static void def_geo_attribute_processor(StructRNA *srna)
@@ -10338,6 +10363,10 @@ static void rna_def_node_socket_interface(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Tooltip", "Socket tooltip");
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketInterface_update");
+ prop = RNA_def_property(srna, "default_attribute_name", PROP_STRING, PROP_NONE);
+ RNA_def_property_ui_text(prop, "Default Attribute Name", "");
+ RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketInterface_update");
+
prop = RNA_def_property(srna, "is_output", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_NodeSocket_is_output_get", NULL);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
diff --git a/source/blender/nodes/geometry/nodes/node_geo_attribute_processor.cc b/source/blender/nodes/geometry/nodes/node_geo_attribute_processor.cc
index 9095285ca71..0600332f8db 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_attribute_processor.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_attribute_processor.cc
@@ -27,6 +27,7 @@
#include "UI_resources.h"
#include "NOD_node_tree_multi_function.hh"
+#include "NOD_type_callbacks.hh"
#include "FN_multi_function_network_evaluation.hh"
@@ -34,6 +35,9 @@
static void geo_node_attribute_processor_layout(uiLayout *layout, bContext *C, PointerRNA *ptr)
{
+ uiLayoutSetPropSep(layout, true);
+ uiLayoutSetPropDecorate(layout, false);
+
bNode *node = (bNode *)ptr->data;
NodeGeometryAttributeProcessor *storage = (NodeGeometryAttributeProcessor *)node->storage;
@@ -49,17 +53,33 @@ static void geo_node_attribute_processor_layout(uiLayout *layout, bContext *C, P
return;
}
- uiLayout *col = uiLayoutColumn(layout, false);
+ {
+ uiLayout *col = uiLayoutColumn(layout, false);
- bNodeSocket *interface_socket = (bNodeSocket *)group->inputs.first;
- AttributeProcessorInputSettings *input_settings = (AttributeProcessorInputSettings *)
- storage->inputs_settings.first;
- for (; interface_socket && input_settings;
- interface_socket = interface_socket->next, input_settings = input_settings->next) {
- PointerRNA input_ptr;
- RNA_pointer_create(
- ptr->owner_id, &RNA_AttributeProcessorInputSettings, input_settings, &input_ptr);
- uiItemR(col, &input_ptr, "input_mode", 0, interface_socket->name, ICON_NONE);
+ bNodeSocket *interface_socket = (b
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list