From 0dea1d7418fdb815d3b0c274297bcd6af32527df Mon Sep 17 00:00:00 2001 From: illua1 Date: Tue, 21 Mar 2023 22:54:27 +0300 Subject: [PATCH 1/8] init commit --- source/blender/blenkernel/BKE_node.h | 6 ++ source/blender/blenkernel/BKE_node_runtime.hh | 5 ++ source/blender/blenkernel/intern/node.cc | 89 +++++++++++++++++++ .../editors/space_node/link_drag_search.cc | 5 +- source/blender/makesdna/DNA_node_types.h | 2 + .../nodes/intern/socket_search_link.cc | 7 +- 6 files changed, 112 insertions(+), 2 deletions(-) diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h index 4c39b0a1947..67febe35676 100644 --- a/source/blender/blenkernel/BKE_node.h +++ b/source/blender/blenkernel/BKE_node.h @@ -732,6 +732,12 @@ bNode *node_copy_with_mapping(bNodeTree *dst_tree, bNode *node_copy(bNodeTree *dst_tree, const bNode &src_node, int flag, bool use_unique); +/** + * Move socket default_value from TO_SOCKET to FROM_SOCKET or some other other place specified for + * FROM_NODE. + */ +void node_link_move_default_value_back(const bContext &C, bNodeTree &tree, const bNodeLink &link); + /** * Free the node itself. * diff --git a/source/blender/blenkernel/BKE_node_runtime.hh b/source/blender/blenkernel/BKE_node_runtime.hh index 10f4d1ab4ec..45140467633 100644 --- a/source/blender/blenkernel/BKE_node_runtime.hh +++ b/source/blender/blenkernel/BKE_node_runtime.hh @@ -783,6 +783,11 @@ template const T *bNodeSocket::default_value_typed() const return static_cast(this->default_value); } +template T *bNodeSocket::default_value_typed() +{ + return static_cast(this->default_value); +} + inline bool bNodeSocket::is_input() const { return this->in_out == SOCK_IN; diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc index c7ab1cffa7e..349f684e078 100644 --- a/source/blender/blenkernel/intern/node.cc +++ b/source/blender/blenkernel/intern/node.cc @@ -2355,6 +2355,95 @@ bNode *node_copy_with_mapping(bNodeTree *dst_tree, return node_dst; } +void node_link_move_default_value_back(const bContext &C, bNodeTree &tree, const bNodeLink &link) +{ + bNode &from_node = *link.fromnode; + bNode &to_node = *link.tonode; + + bNodeSocket &from_socket = *link.fromsock; + bNodeSocket &to_socket = *link.tosock; + + if (to_socket.is_multi_input()) { + /* Multi input sockets no have value. */ + return; + } + + if (ELEM(NODE_REROUTE, from_node.type, to_node.type)) { + /* Reroute node can't have ownership of socket value directly. */ + return; + } + + if (&from_node == &to_node) { + /* Stop recursion. */ + return; + } + + if (from_socket.type != to_socket.type) { + /* It could be possible to support conversion in future. */ + return; + } + + switch (from_socket.type) { + case SOCK_IMAGE: { + Image **src_socket_value = &to_socket.default_value_typed()->value; + Image **dst_value = nullptr; + + if (*src_socket_value == nullptr) { + break; + } + + switch (from_node.type) { + case GEO_NODE_IMAGE: { + dst_value = reinterpret_cast(&from_node.id); + *dst_value = *src_socket_value; + + id_us_plus(reinterpret_cast(*src_socket_value)); + break; + } + case NODE_GROUP_INPUT: { + const int group_input_index = BLI_findindex(&from_node.outputs, &from_socket); + + LISTBASE_FOREACH (bNodeTree *, other_tree, &CTX_data_main(&C)->nodetrees) { + if (other_tree->type != NTREE_GEOMETRY) { + continue; + } + + /* Avoid iteration on self tree nodes. */ + if (other_tree == &tree) { + continue; + } + + other_tree->ensure_topology_cache(); + for (bNode *group : other_tree->group_nodes()) { + if (reinterpret_cast(group->id) == &tree) { + bNodeSocket *group_input_socket = reinterpret_cast( + BLI_findlink(&group->inputs, group_input_index)); + + dst_value = + &group_input_socket->default_value_typed()->value; + *dst_value = *src_socket_value; + + id_us_plus(reinterpret_cast(*src_socket_value)); + } + } + } + break; + } + default: { + break; + } + } + + id_us_min(reinterpret_cast(*src_socket_value)); + *src_socket_value = nullptr; + break; + } + default: { + break; + } + } +} + bNode *node_copy(bNodeTree *dst_tree, const bNode &src_node, const int flag, const bool use_unique) { Map socket_map; diff --git a/source/blender/editors/space_node/link_drag_search.cc b/source/blender/editors/space_node/link_drag_search.cc index 58f6dc18447..3cda8b8e19f 100644 --- a/source/blender/editors/space_node/link_drag_search.cc +++ b/source/blender/editors/space_node/link_drag_search.cc @@ -113,7 +113,10 @@ static void add_group_input_node_fn(nodes::LinkSearchOpParams ¶ms) } /* Unhide the socket for the new input in the new node and make a connection to it. */ socket->flag &= ~SOCK_HIDDEN; - nodeAddLink(¶ms.node_tree, &group_input, socket, ¶ms.node, ¶ms.socket); + const bNodeLink &link = *nodeAddLink( + ¶ms.node_tree, &group_input, socket, ¶ms.node, ¶ms.socket); + + bke::node_link_move_default_value_back(params.C, params.node_tree, link); } static void add_existing_group_input_fn(nodes::LinkSearchOpParams ¶ms, diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h index 9e2d4347b15..df05b725970 100644 --- a/source/blender/makesdna/DNA_node_types.h +++ b/source/blender/makesdna/DNA_node_types.h @@ -178,6 +178,8 @@ typedef struct bNodeSocket { /** Utility to access the value of the socket. */ template const T *default_value_typed() const; + template T *default_value_typed(); + /* The following methods are only available when #bNodeTree.ensure_topology_cache has been * called. */ diff --git a/source/blender/nodes/intern/socket_search_link.cc b/source/blender/nodes/intern/socket_search_link.cc index 06ca17b43b5..7dcdfac3449 100644 --- a/source/blender/nodes/intern/socket_search_link.cc +++ b/source/blender/nodes/intern/socket_search_link.cc @@ -54,7 +54,12 @@ void LinkSearchOpParams::connect_available_socket(bNode &new_node, StringRef soc BLI_assert_unreachable(); return; } - nodeAddLink(&node_tree, &new_node, new_node_socket, &node, &socket); + const bNodeLink &link = *nodeAddLink(&node_tree, &new_node, new_node_socket, &node, &socket); + if (in_out == SOCK_OUT) { + /* If the old socket already contained a value, then transfer it to a new one, from + * which this value will get there. */ + bke::node_link_move_default_value_back(C, node_tree, link); + } } bNode &LinkSearchOpParams::add_node(StringRef idname) -- 2.30.2 From 007af16c61abb71c7824d3e46ce63baae23f6db1 Mon Sep 17 00:00:00 2001 From: illua1 Date: Sat, 25 Mar 2023 21:06:16 +0300 Subject: [PATCH 2/8] changes based on last review --- source/blender/blenkernel/BKE_node.h | 2 +- source/blender/blenkernel/intern/node.cc | 105 +++++++++--------- .../editors/space_node/link_drag_search.cc | 6 +- .../nodes/intern/socket_search_link.cc | 3 +- 4 files changed, 58 insertions(+), 58 deletions(-) diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h index 67febe35676..13e58bb4832 100644 --- a/source/blender/blenkernel/BKE_node.h +++ b/source/blender/blenkernel/BKE_node.h @@ -736,7 +736,7 @@ bNode *node_copy(bNodeTree *dst_tree, const bNode &src_node, int flag, bool use_ * Move socket default_value from TO_SOCKET to FROM_SOCKET or some other other place specified for * FROM_NODE. */ -void node_link_move_default_value_back(const bContext &C, bNodeTree &tree, const bNodeLink &link); +void node_socket_default_value(Main &bmain, bNodeTree &tree, bNodeSocket &src, bNodeSocket &dst); /** * Free the node itself. diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc index 349f684e078..872650674ea 100644 --- a/source/blender/blenkernel/intern/node.cc +++ b/source/blender/blenkernel/intern/node.cc @@ -2355,93 +2355,92 @@ bNode *node_copy_with_mapping(bNodeTree *dst_tree, return node_dst; } -void node_link_move_default_value_back(const bContext &C, bNodeTree &tree, const bNodeLink &link) +static void for_each_geo_socket_instance(Main &bmain, + const bNodeTree &node_group, + const StringRef socket_identifier, + const FunctionRef func) { - bNode &from_node = *link.fromnode; - bNode &to_node = *link.tonode; + LISTBASE_FOREACH (bNodeTree *, other_tree, &bmain.nodetrees) { + if (other_tree->type != NTREE_GEOMETRY) { + continue; + } + /* Avoid iteration on self tree nodes. */ + if (other_tree == &node_group) { + continue; + } - bNodeSocket &from_socket = *link.fromsock; - bNodeSocket &to_socket = *link.tosock; + other_tree->ensure_topology_cache(); + for (bNode *node : other_tree->group_nodes()) { + if (reinterpret_cast(node->id) != &node_group) { + continue; + } + bNodeSocket &group_input_socket = node->input_by_identifier(socket_identifier); + func(group_input_socket); + } + } +} - if (to_socket.is_multi_input()) { +void node_socket_default_value(Main &bmain, bNodeTree &tree, bNodeSocket &src, bNodeSocket &dst) +{ + tree.ensure_topology_cache(); + + bNode &dst_node = dst.owner_node(); + bNode &src_node = src.owner_node(); + + if (src.is_multi_input()) { /* Multi input sockets no have value. */ return; } - - if (ELEM(NODE_REROUTE, from_node.type, to_node.type)) { + if (ELEM(NODE_REROUTE, dst_node.type, src_node.type)) { /* Reroute node can't have ownership of socket value directly. */ return; } - - if (&from_node == &to_node) { - /* Stop recursion. */ - return; - } - - if (from_socket.type != to_socket.type) { + if (dst.type != src.type) { /* It could be possible to support conversion in future. */ return; } - switch (from_socket.type) { + ID **src_socket_value = nullptr; + Vector dst_values; + switch (dst.type) { case SOCK_IMAGE: { - Image **src_socket_value = &to_socket.default_value_typed()->value; - Image **dst_value = nullptr; - + Image **tmp_socket_value = &src.default_value_typed()->value; + src_socket_value = reinterpret_cast(tmp_socket_value); if (*src_socket_value == nullptr) { break; } - switch (from_node.type) { + switch (dst_node.type) { case GEO_NODE_IMAGE: { - dst_value = reinterpret_cast(&from_node.id); - *dst_value = *src_socket_value; - - id_us_plus(reinterpret_cast(*src_socket_value)); + dst_values.append(&dst_node.id); break; } case NODE_GROUP_INPUT: { - const int group_input_index = BLI_findindex(&from_node.outputs, &from_socket); - - LISTBASE_FOREACH (bNodeTree *, other_tree, &CTX_data_main(&C)->nodetrees) { - if (other_tree->type != NTREE_GEOMETRY) { - continue; - } - - /* Avoid iteration on self tree nodes. */ - if (other_tree == &tree) { - continue; - } - - other_tree->ensure_topology_cache(); - for (bNode *group : other_tree->group_nodes()) { - if (reinterpret_cast(group->id) == &tree) { - bNodeSocket *group_input_socket = reinterpret_cast( - BLI_findlink(&group->inputs, group_input_index)); - - dst_value = - &group_input_socket->default_value_typed()->value; - *dst_value = *src_socket_value; - - id_us_plus(reinterpret_cast(*src_socket_value)); - } - } - } + const StringRef socket_identifier(dst.identifier); + for_each_geo_socket_instance(bmain, tree, socket_identifier, [&](bNodeSocket &socket) { + Image **tmp_dst_value = &socket.default_value_typed()->value; + dst_values.append(reinterpret_cast(tmp_dst_value)); + }); break; } default: { break; } } - - id_us_min(reinterpret_cast(*src_socket_value)); - *src_socket_value = nullptr; break; } default: { break; } } + + for (ID **dst_value : dst_values) { + *dst_value = *src_socket_value; + id_us_plus(*dst_value); + } + + id_us_min(*src_socket_value); + *src_socket_value = nullptr; } bNode *node_copy(bNodeTree *dst_tree, const bNode &src_node, const int flag, const bool use_unique) diff --git a/source/blender/editors/space_node/link_drag_search.cc b/source/blender/editors/space_node/link_drag_search.cc index 3cda8b8e19f..fdcd262284b 100644 --- a/source/blender/editors/space_node/link_drag_search.cc +++ b/source/blender/editors/space_node/link_drag_search.cc @@ -113,10 +113,10 @@ static void add_group_input_node_fn(nodes::LinkSearchOpParams ¶ms) } /* Unhide the socket for the new input in the new node and make a connection to it. */ socket->flag &= ~SOCK_HIDDEN; - const bNodeLink &link = *nodeAddLink( - ¶ms.node_tree, &group_input, socket, ¶ms.node, ¶ms.socket); + nodeAddLink(¶ms.node_tree, &group_input, socket, ¶ms.node, ¶ms.socket); - bke::node_link_move_default_value_back(params.C, params.node_tree, link); + bke::node_socket_default_value( + *CTX_data_main(¶ms.C), params.node_tree, params.socket, *socket); } static void add_existing_group_input_fn(nodes::LinkSearchOpParams ¶ms, diff --git a/source/blender/nodes/intern/socket_search_link.cc b/source/blender/nodes/intern/socket_search_link.cc index 7dcdfac3449..cfe2f618342 100644 --- a/source/blender/nodes/intern/socket_search_link.cc +++ b/source/blender/nodes/intern/socket_search_link.cc @@ -2,6 +2,7 @@ #include "BLI_set.hh" +#include "BKE_context.h" #include "BKE_node.h" #include "UI_interface.h" @@ -58,7 +59,7 @@ void LinkSearchOpParams::connect_available_socket(bNode &new_node, StringRef soc if (in_out == SOCK_OUT) { /* If the old socket already contained a value, then transfer it to a new one, from * which this value will get there. */ - bke::node_link_move_default_value_back(C, node_tree, link); + bke::node_socket_default_value(*CTX_data_main(&C), node_tree, socket, *new_node_socket); } } -- 2.30.2 From df74307ee0ad4a8e011ec1ec14f6077bcaefd8c2 Mon Sep 17 00:00:00 2001 From: illua1 Date: Sun, 26 Mar 2023 15:25:20 +0300 Subject: [PATCH 3/8] some little changes unified function for visiting all node group socket instances --- source/blender/blenkernel/intern/node.cc | 50 +++++++++++++++++------- 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc index 872650674ea..a0b4052fbe8 100644 --- a/source/blender/blenkernel/intern/node.cc +++ b/source/blender/blenkernel/intern/node.cc @@ -2355,23 +2355,36 @@ bNode *node_copy_with_mapping(bNodeTree *dst_tree, return node_dst; } -static void for_each_geo_socket_instance(Main &bmain, - const bNodeTree &node_group, - const StringRef socket_identifier, - const FunctionRef func) +static bNodeTree *node_find_tree_by_name(Main &bmain, const StringRef tree_name) { - LISTBASE_FOREACH (bNodeTree *, other_tree, &bmain.nodetrees) { - if (other_tree->type != NTREE_GEOMETRY) { + LISTBASE_FOREACH (bNodeTree *, node_tree, &bmain.nodetrees) { + if (node_tree->id.name == tree_name) { + return node_tree; + } + } + return nullptr; +} + +static void for_each_group_socket_instance(Main &bmain, + const StringRef group_identifier, + const StringRef socket_identifier, + const Span tree_types_to_lookup, + const FunctionRef func) +{ + const bNodeTree *target_tree = node_find_tree_by_name(bmain, group_identifier); + + LISTBASE_FOREACH (bNodeTree *, other_group, &bmain.nodetrees) { + if (!tree_types_to_lookup.contains(other_group->type)) { continue; } - /* Avoid iteration on self tree nodes. */ - if (other_tree == &node_group) { + if (other_group == target_tree) { continue; } - other_tree->ensure_topology_cache(); - for (bNode *node : other_tree->group_nodes()) { - if (reinterpret_cast(node->id) != &node_group) { + other_group->ensure_topology_cache(); + const ID *group_tree_id = reinterpret_cast(target_tree); + for (bNode *node : other_group->group_nodes()) { + if (node->id != group_tree_id) { continue; } bNodeSocket &group_input_socket = node->input_by_identifier(socket_identifier); @@ -2417,10 +2430,17 @@ void node_socket_default_value(Main &bmain, bNodeTree &tree, bNodeSocket &src, b } case NODE_GROUP_INPUT: { const StringRef socket_identifier(dst.identifier); - for_each_geo_socket_instance(bmain, tree, socket_identifier, [&](bNodeSocket &socket) { - Image **tmp_dst_value = &socket.default_value_typed()->value; - dst_values.append(reinterpret_cast(tmp_dst_value)); - }); + const StringRef group_identifier(tree.id.name); + for_each_group_socket_instance( + bmain, + group_identifier, + socket_identifier, + {NTREE_GEOMETRY}, + [&](bNodeSocket &socket) { + Image **tmp_dst_value = + &socket.default_value_typed()->value; + dst_values.append(reinterpret_cast(tmp_dst_value)); + }); break; } default: { -- 2.30.2 From d3a0c19f17e13f3056a123e12188ffc6b7ab34a5 Mon Sep 17 00:00:00 2001 From: illua1 Date: Sat, 1 Apr 2023 22:35:46 +0300 Subject: [PATCH 4/8] for_each_node_group_instance remove redurand seaching node tree by name, visiting each node group instance --- source/blender/blenkernel/intern/node.cc | 42 +++++++----------------- 1 file changed, 11 insertions(+), 31 deletions(-) diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc index fafd447f78b..947f350c2eb 100644 --- a/source/blender/blenkernel/intern/node.cc +++ b/source/blender/blenkernel/intern/node.cc @@ -2355,40 +2355,25 @@ bNode *node_copy_with_mapping(bNodeTree *dst_tree, return node_dst; } -static bNodeTree *node_find_tree_by_name(Main &bmain, const StringRef tree_name) +static void for_each_node_group_instance(Main &bmain, + ID *node_group, + const Span tree_types_to_lookup, + const FunctionRef func) { - LISTBASE_FOREACH (bNodeTree *, node_tree, &bmain.nodetrees) { - if (node_tree->id.name == tree_name) { - return node_tree; - } - } - return nullptr; -} - -static void for_each_group_socket_instance(Main &bmain, - const StringRef group_identifier, - const StringRef socket_identifier, - const Span tree_types_to_lookup, - const FunctionRef func) -{ - const bNodeTree *target_tree = node_find_tree_by_name(bmain, group_identifier); - + BLI_assert(node_group != nullptr); LISTBASE_FOREACH (bNodeTree *, other_group, &bmain.nodetrees) { if (!tree_types_to_lookup.contains(other_group->type)) { continue; } - if (other_group == target_tree) { + if (reinterpret_cast(other_group) == node_group) { continue; } other_group->ensure_topology_cache(); - const ID *group_tree_id = reinterpret_cast(target_tree); for (bNode *node : other_group->group_nodes()) { - if (node->id != group_tree_id) { - continue; + if (node->id == node_group) { + func(*node); } - bNodeSocket &group_input_socket = node->input_by_identifier(socket_identifier); - func(group_input_socket); } } } @@ -2429,14 +2414,9 @@ void node_socket_default_value(Main &bmain, bNodeTree &tree, bNodeSocket &src, b break; } case NODE_GROUP_INPUT: { - const StringRef socket_identifier(dst.identifier); - const StringRef group_identifier(tree.id.name); - for_each_group_socket_instance( - bmain, - group_identifier, - socket_identifier, - {NTREE_GEOMETRY}, - [&](bNodeSocket &socket) { + for_each_node_group_instance( + bmain, reinterpret_cast(&tree), {NTREE_GEOMETRY}, [&](bNode &node_group) { + bNodeSocket &socket = node_group.input_by_identifier(dst.identifier); Image **tmp_dst_value = &socket.default_value_typed()->value; dst_values.append(reinterpret_cast(tmp_dst_value)); -- 2.30.2 From ba0152c4d36d953e745750e7da0946fa86ef41d9 Mon Sep 17 00:00:00 2001 From: illua1 Date: Mon, 3 Apr 2023 17:45:22 +0300 Subject: [PATCH 5/8] pass nodetree also delete one unused var --- source/blender/blenkernel/intern/node.cc | 19 ++++++++----------- .../nodes/intern/socket_search_link.cc | 2 +- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc index 947f350c2eb..d3019972dc3 100644 --- a/source/blender/blenkernel/intern/node.cc +++ b/source/blender/blenkernel/intern/node.cc @@ -2356,22 +2356,21 @@ bNode *node_copy_with_mapping(bNodeTree *dst_tree, } static void for_each_node_group_instance(Main &bmain, - ID *node_group, + const bNodeTree &node_group, const Span tree_types_to_lookup, const FunctionRef func) { - BLI_assert(node_group != nullptr); LISTBASE_FOREACH (bNodeTree *, other_group, &bmain.nodetrees) { if (!tree_types_to_lookup.contains(other_group->type)) { continue; } - if (reinterpret_cast(other_group) == node_group) { + if (other_group == &node_group) { continue; } other_group->ensure_topology_cache(); for (bNode *node : other_group->group_nodes()) { - if (node->id == node_group) { + if (node->id == &node_group.id) { func(*node); } } @@ -2414,13 +2413,11 @@ void node_socket_default_value(Main &bmain, bNodeTree &tree, bNodeSocket &src, b break; } case NODE_GROUP_INPUT: { - for_each_node_group_instance( - bmain, reinterpret_cast(&tree), {NTREE_GEOMETRY}, [&](bNode &node_group) { - bNodeSocket &socket = node_group.input_by_identifier(dst.identifier); - Image **tmp_dst_value = - &socket.default_value_typed()->value; - dst_values.append(reinterpret_cast(tmp_dst_value)); - }); + for_each_node_group_instance(bmain, tree, {NTREE_GEOMETRY}, [&](bNode &node_group) { + bNodeSocket &socket = node_group.input_by_identifier(dst.identifier); + Image **tmp_dst_value = &socket.default_value_typed()->value; + dst_values.append(reinterpret_cast(tmp_dst_value)); + }); break; } default: { diff --git a/source/blender/nodes/intern/socket_search_link.cc b/source/blender/nodes/intern/socket_search_link.cc index cfe2f618342..5a7d20cdcfc 100644 --- a/source/blender/nodes/intern/socket_search_link.cc +++ b/source/blender/nodes/intern/socket_search_link.cc @@ -55,7 +55,7 @@ void LinkSearchOpParams::connect_available_socket(bNode &new_node, StringRef soc BLI_assert_unreachable(); return; } - const bNodeLink &link = *nodeAddLink(&node_tree, &new_node, new_node_socket, &node, &socket); + nodeAddLink(&node_tree, &new_node, new_node_socket, &node, &socket); if (in_out == SOCK_OUT) { /* If the old socket already contained a value, then transfer it to a new one, from * which this value will get there. */ -- 2.30.2 From 895babb8d56b52fd31e84bb6dec6e83b1629872d Mon Sep 17 00:00:00 2001 From: illua1 Date: Mon, 3 Apr 2023 19:44:04 +0300 Subject: [PATCH 6/8] trying to make good --- source/blender/blenkernel/BKE_node.h | 11 ++++++++--- source/blender/blenkernel/intern/node.cc | 5 ++++- source/blender/editors/space_node/link_drag_search.cc | 2 +- source/blender/nodes/intern/socket_search_link.cc | 2 +- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h index d3c6eec8f14..2a3f94ffb6e 100644 --- a/source/blender/blenkernel/BKE_node.h +++ b/source/blender/blenkernel/BKE_node.h @@ -733,10 +733,15 @@ bNode *node_copy_with_mapping(bNodeTree *dst_tree, bNode *node_copy(bNodeTree *dst_tree, const bNode &src_node, int flag, bool use_unique); /** - * Move socket default_value from TO_SOCKET to FROM_SOCKET or some other other place specified for - * FROM_NODE. + * Move socket default from \a src (input socket) to locations specified by \a dst (output socket). + * Result value moved in specific location. (potentially multiple group nodes socket values, if \a + * dst is a group input node). \node Conceptually, the effect should be such that the evaluation of + * this graph again returns the value in src. */ -void node_socket_default_value(Main &bmain, bNodeTree &tree, bNodeSocket &src, bNodeSocket &dst); +void node_socket_move_default_value(Main &bmain, + bNodeTree &tree, + bNodeSocket &src, + bNodeSocket &dst); /** * Free the node itself. diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc index d3019972dc3..0cfbad454ed 100644 --- a/source/blender/blenkernel/intern/node.cc +++ b/source/blender/blenkernel/intern/node.cc @@ -2377,7 +2377,10 @@ static void for_each_node_group_instance(Main &bmain, } } -void node_socket_default_value(Main &bmain, bNodeTree &tree, bNodeSocket &src, bNodeSocket &dst) +void node_socket_move_default_value(Main &bmain, + bNodeTree &tree, + bNodeSocket &src, + bNodeSocket &dst) { tree.ensure_topology_cache(); diff --git a/source/blender/editors/space_node/link_drag_search.cc b/source/blender/editors/space_node/link_drag_search.cc index fdcd262284b..ae0261a57b9 100644 --- a/source/blender/editors/space_node/link_drag_search.cc +++ b/source/blender/editors/space_node/link_drag_search.cc @@ -115,7 +115,7 @@ static void add_group_input_node_fn(nodes::LinkSearchOpParams ¶ms) socket->flag &= ~SOCK_HIDDEN; nodeAddLink(¶ms.node_tree, &group_input, socket, ¶ms.node, ¶ms.socket); - bke::node_socket_default_value( + bke::node_socket_move_default_value( *CTX_data_main(¶ms.C), params.node_tree, params.socket, *socket); } diff --git a/source/blender/nodes/intern/socket_search_link.cc b/source/blender/nodes/intern/socket_search_link.cc index 5a7d20cdcfc..75a9f24ad53 100644 --- a/source/blender/nodes/intern/socket_search_link.cc +++ b/source/blender/nodes/intern/socket_search_link.cc @@ -59,7 +59,7 @@ void LinkSearchOpParams::connect_available_socket(bNode &new_node, StringRef soc if (in_out == SOCK_OUT) { /* If the old socket already contained a value, then transfer it to a new one, from * which this value will get there. */ - bke::node_socket_default_value(*CTX_data_main(&C), node_tree, socket, *new_node_socket); + bke::node_socket_move_default_value(*CTX_data_main(&C), node_tree, socket, *new_node_socket); } } -- 2.30.2 From 34760a776d3f205ed72b713f2cc4af0d472c3f6e Mon Sep 17 00:00:00 2001 From: illua1 Date: Mon, 3 Apr 2023 19:57:51 +0300 Subject: [PATCH 7/8] delete extra duplicate of default_value_typed --- source/blender/blenkernel/BKE_node_runtime.hh | 5 ----- source/blender/makesdna/DNA_node_types.h | 2 -- 2 files changed, 7 deletions(-) diff --git a/source/blender/blenkernel/BKE_node_runtime.hh b/source/blender/blenkernel/BKE_node_runtime.hh index cce6d6b020e..17f8665c1b9 100644 --- a/source/blender/blenkernel/BKE_node_runtime.hh +++ b/source/blender/blenkernel/BKE_node_runtime.hh @@ -788,11 +788,6 @@ template const T *bNodeSocket::default_value_typed() const return static_cast(this->default_value); } -template T *bNodeSocket::default_value_typed() -{ - return static_cast(this->default_value); -} - inline bool bNodeSocket::is_input() const { return this->in_out == SOCK_IN; diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h index d7ba844a7d0..8245637943a 100644 --- a/source/blender/makesdna/DNA_node_types.h +++ b/source/blender/makesdna/DNA_node_types.h @@ -179,8 +179,6 @@ typedef struct bNodeSocket { template T *default_value_typed(); template const T *default_value_typed() const; - template T *default_value_typed(); - /* The following methods are only available when #bNodeTree.ensure_topology_cache has been * called. */ -- 2.30.2 From ec5e311a4eed112e84deb0325567bd1d2bca6b7c Mon Sep 17 00:00:00 2001 From: illua1 Date: Mon, 3 Apr 2023 20:08:36 +0300 Subject: [PATCH 8/8] type --- source/blender/blenkernel/BKE_node.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h index 7a3de70d6a0..2b61ad82ff0 100644 --- a/source/blender/blenkernel/BKE_node.h +++ b/source/blender/blenkernel/BKE_node.h @@ -738,7 +738,8 @@ bNode *node_copy(bNodeTree *dst_tree, const bNode &src_node, int flag, bool use_ /** * Move socket default from \a src (input socket) to locations specified by \a dst (output socket). * Result value moved in specific location. (potentially multiple group nodes socket values, if \a - * dst is a group input node). \node Conceptually, the effect should be such that the evaluation of + * dst is a group input node). + * \note Conceptually, the effect should be such that the evaluation of * this graph again returns the value in src. */ void node_socket_move_default_value(Main &bmain, -- 2.30.2