Commit: 7b0aca2a530fb1a42367eebf595a1c6ca93dba7d Author: Charlie Jolly Date: Tue Feb 11 15:31:40 2020 +0000 Branches: master https://developer.blender.org/rB7b0aca2a530fb1a42367eebf595a1c6ca93dba7d
Nodes: Add dynamic label support for Math Nodes Reviewed By: brecht Differential Revision: https://developer.blender.org/D6375 =================================================================== M release/scripts/startup/bl_ui/space_node.py M source/blender/blenkernel/BKE_node.h M source/blender/blenkernel/intern/node.c M source/blender/editors/space_node/node_draw.c M source/blender/makesdna/DNA_node_types.h M source/blender/makesrna/intern/rna_nodetree.c M source/blender/nodes/composite/nodes/node_composite_math.c M source/blender/nodes/intern/node_socket.c M source/blender/nodes/intern/node_util.c M source/blender/nodes/intern/node_util.h M source/blender/nodes/shader/nodes/node_shader_math.c M source/blender/nodes/texture/nodes/node_texture_math.c =================================================================== diff --git a/release/scripts/startup/bl_ui/space_node.py b/release/scripts/startup/bl_ui/space_node.py index 2ce81ba8359..55ec8306e16 100644 --- a/release/scripts/startup/bl_ui/space_node.py +++ b/release/scripts/startup/bl_ui/space_node.py @@ -530,7 +530,7 @@ class NODE_PT_active_node_properties(Panel): layout.label(text="Inputs:") for socket in value_inputs: row = layout.row() - socket.draw(context, row, node, iface_(socket.name, socket.bl_rna.translation_context)) + socket.draw(context, row, node, iface_(socket.label if socket.label else socket.name, socket.bl_rna.translation_context)) class NODE_PT_texture_mapping(Panel): diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h index 1c479c92ef5..278e8ec1d89 100644 --- a/source/blender/blenkernel/BKE_node.h +++ b/source/blender/blenkernel/BKE_node.h @@ -740,6 +740,7 @@ void BKE_node_preview_set_pixel( * \{ */ void nodeLabel(struct bNodeTree *ntree, struct bNode *node, char *label, int maxlen); +const char *nodeSocketLabel(const struct bNodeSocket *sock); int nodeGroupPoll(struct bNodeTree *nodetree, struct bNodeTree *grouptree); diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index 64897d05c96..2a8c9f2a40b 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -3574,6 +3574,12 @@ void nodeLabel(bNodeTree *ntree, bNode *node, char *label, int maxlen) } } +/* Get node socket label if it is set */ +const char *nodeSocketLabel(const bNodeSocket *sock) +{ + return (sock->label[0] != '\0') ? sock->label : sock->name; +} + static void node_type_base_defaults(bNodeType *ntype) { /* default size values */ diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c index 2202eee3a53..755e2cc1618 100644 --- a/source/blender/editors/space_node/node_draw.c +++ b/source/blender/editors/space_node/node_draw.c @@ -354,6 +354,8 @@ void node_from_view(struct bNode *node, float x, float y, float *rx, float *ry) nodeFromView(node, x, y, rx, ry); } + + /* based on settings in node, sets drawing rect info. each redraw! */ static void node_update_basis(const bContext *C, bNodeTree *ntree, bNode *node) { @@ -409,8 +411,8 @@ static void node_update_basis(const bContext *C, bNodeTree *ntree, bNode *node) /* align output buttons to the right */ row = uiLayoutRow(layout, 1); uiLayoutSetAlignment(row, UI_LAYOUT_ALIGN_RIGHT); - - nsock->typeinfo->draw((bContext *)C, row, &sockptr, &nodeptr, IFACE_(nsock->name)); + const char *socket_label = nodeSocketLabel(nsock); + nsock->typeinfo->draw((bContext *)C, row, &sockptr, &nodeptr, IFACE_(socket_label)); UI_block_align_end(node->block); UI_block_layout_resolve(node->block, NULL, &buty); @@ -535,7 +537,8 @@ static void node_update_basis(const bContext *C, bNodeTree *ntree, bNode *node) row = uiLayoutRow(layout, 1); - nsock->typeinfo->draw((bContext *)C, row, &sockptr, &nodeptr, IFACE_(nsock->name)); + const char *socket_label = nodeSocketLabel(nsock); + nsock->typeinfo->draw((bContext *)C, row, &sockptr, &nodeptr, IFACE_(socket_label)); UI_block_align_end(node->block); UI_block_layout_resolve(node->block, NULL, &buty); diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h index 22202717b0c..559048ab8cf 100644 --- a/source/blender/makesdna/DNA_node_types.h +++ b/source/blender/makesdna/DNA_node_types.h @@ -116,6 +116,9 @@ typedef struct bNodeSocket { char display_shape; char _pad[3]; + /** Custom dynamic defined label, MAX_NAME. */ + char label[64]; + /** Cached data from execution. */ void *cache; diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c index 68e3e522dff..180bf96dd90 100644 --- a/source/blender/makesrna/intern/rna_nodetree.c +++ b/source/blender/makesrna/intern/rna_nodetree.c @@ -7891,6 +7891,11 @@ static void rna_def_node_socket(BlenderRNA *brna) RNA_def_struct_name_property(srna, prop); RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocket_update"); + prop = RNA_def_property(srna, "label", PROP_STRING, PROP_NONE); + RNA_def_property_string_sdna(prop, NULL, "label"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Label", "Custom dynamic defined socket label"); + prop = RNA_def_property(srna, "identifier", PROP_STRING, PROP_NONE); RNA_def_property_string_sdna(prop, NULL, "identifier"); RNA_def_property_clear_flag(prop, PROP_EDITABLE); diff --git a/source/blender/nodes/composite/nodes/node_composite_math.c b/source/blender/nodes/composite/nodes/node_composite_math.c index 741c0e48806..3efb650c6eb 100644 --- a/source/blender/nodes/composite/nodes/node_composite_math.c +++ b/source/blender/nodes/composite/nodes/node_composite_math.c @@ -32,43 +32,6 @@ static bNodeSocketTemplate cmp_node_math_in[] = { static bNodeSocketTemplate cmp_node_math_out[] = {{SOCK_FLOAT, 0, N_("Value")}, {-1, 0, ""}}; -static void node_shader_update_math(bNodeTree *UNUSED(ntree), bNode *node) -{ - bNodeSocket *sock = BLI_findlink(&node->inputs, 1); - nodeSetSocketAvailability(sock, - !ELEM(node->custom1, - NODE_MATH_SQRT, - NODE_MATH_SIGN, - NODE_MATH_CEIL, - NODE_MATH_SINE, - NODE_MATH_ROUND, - NODE_MATH_FLOOR, - NODE_MATH_COSINE, - NODE_MATH_ARCSINE, - NODE_MATH_TANGENT, - NODE_MATH_ABSOLUTE, - NODE_MATH_RADIANS, - NODE_MATH_DEGREES, - NODE_MATH_FRACTION, - NODE_MATH_ARCCOSINE, - NODE_MATH_ARCTANGENT) && - !ELEM(node->custom1, - NODE_MATH_INV_SQRT, - NODE_MATH_TRUNC, - NODE_MATH_EXPONENT, - NODE_MATH_COSH, - NODE_MATH_SINH, - NODE_MATH_TANH)); - bNodeSocket *sock2 = BLI_findlink(&node->inputs, 2); - nodeSetSocketAvailability(sock2, - ELEM(node->custom1, - NODE_MATH_COMPARE, - NODE_MATH_MULTIPLY_ADD, - NODE_MATH_WRAP, - NODE_MATH_SMOOTH_MIN, - NODE_MATH_SMOOTH_MAX)); -} - void register_node_type_cmp_math(void) { static bNodeType ntype; @@ -76,7 +39,7 @@ void register_node_type_cmp_math(void) cmp_node_type_base(&ntype, CMP_NODE_MATH, "Math", NODE_CLASS_CONVERTOR, 0); node_type_socket_templates(&ntype, cmp_node_math_in, cmp_node_math_out); node_type_label(&ntype, node_math_label); - node_type_update(&ntype, node_shader_update_math); + node_type_update(&ntype, node_math_update); nodeRegisterType(&ntype); } diff --git a/source/blender/nodes/intern/node_socket.c b/source/blender/nodes/intern/node_socket.c index 3485bd41660..13f9039379d 100644 --- a/source/blender/nodes/intern/node_socket.c +++ b/source/blender/nodes/intern/node_socket.c @@ -276,6 +276,11 @@ void node_socket_copy_default_value(bNodeSocket *to, const bNodeSocket *from) } node_socket_init_default_value(to); + /* use label instead of name if it has been set */ + if (from->label[0] != '\0') { + BLI_strncpy(to->name, from->label, NODE_MAXSTR); + } + switch (from->typeinfo->type) { case SOCK_FLOAT: { bNodeSocketValueFloat *toval = to->default_value; diff --git a/source/blender/nodes/intern/node_util.c b/source/blender/nodes/intern/node_util.c index b16c814ade9..7d029e7a400 100644 --- a/source/blender/nodes/intern/node_util.c +++ b/source/blender/nodes/intern/node_util.c @@ -77,6 +77,102 @@ void *node_initexec_curves(bNodeExecContext *UNUSED(context), return NULL; /* unused return */ } +/**** Updates ****/ + +void node_sock_label(bNodeSocket *sock, const char *name) +{ + BLI_strncpy(sock->label, name, MAX_NAME); +} + +void node_math_update(bNodeTree *UNUSED(ntree), bNode *node) +{ + bNodeSocket *sock1 = BLI_findlink(&node->inputs, 0); + bNodeSocket *sock2 = BLI_findlink(&node->inputs, 1); + bNodeSocket *sock3 = BLI_findlink(&node->inputs, 2); + nodeSetSocketAvailability(sock2, + !ELEM(node->custom1, + NODE_MATH_SQRT, + NODE_MATH_SIGN, + NODE_MATH_CEIL, + NODE_MATH_SINE, + NODE_MATH_ROUND, + NODE_MATH_FLOOR, + NODE_MATH_COSINE, + NODE_MATH_ARCSINE, + NODE_MATH_TANGENT, + NODE_MATH_ABSOLUTE, + NODE_MATH_RADIANS, + NODE_MATH_DEGREES, + NODE_MATH_FRACTION, + NODE_MATH_ARCCOSINE, + NODE_MATH_ARCTANGENT) && + !ELEM(node->custom1, + NODE_MATH_INV_SQRT, + NODE_MATH_TRUNC, + NODE_MATH_EXPONENT, + NODE_MATH_COSH, + NODE_MATH_SINH, + NODE_MATH_TANH)); + nodeSetSocketAvailability(sock3, + ELEM(node->custom1, + @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list [email protected] https://lists.blender.org/mailman/listinfo/bf-blender-cvs
