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. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs