diff options
author | Julian Eisel <julian@blender.org> | 2022-11-10 15:17:42 +0300 |
---|---|---|
committer | Julian Eisel <julian@blender.org> | 2022-11-10 15:17:42 +0300 |
commit | 7246c387435769a169ac24c91434c615df6434b4 (patch) | |
tree | 61842e3e0ce85e80720fdd7476d44d2e629f59fd /source/blender/blenloader/intern/versioning_common.cc | |
parent | c5f55d17096d373791363e46004176e3f7f7ae52 (diff) | |
parent | 0b4bd3ddc016298e868169a541cf6c132b10c587 (diff) |
Merge branch 'master' into asset-browser-grid-viewasset-browser-grid-view
Diffstat (limited to 'source/blender/blenloader/intern/versioning_common.cc')
-rw-r--r-- | source/blender/blenloader/intern/versioning_common.cc | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/source/blender/blenloader/intern/versioning_common.cc b/source/blender/blenloader/intern/versioning_common.cc index 823385727e1..56ada76eae6 100644 --- a/source/blender/blenloader/intern/versioning_common.cc +++ b/source/blender/blenloader/intern/versioning_common.cc @@ -12,6 +12,7 @@ #include "DNA_screen_types.h" #include "BLI_listbase.h" +#include "BLI_map.hh" #include "BLI_string.h" #include "BLI_string_ref.hh" @@ -25,6 +26,7 @@ #include "versioning_common.h" +using blender::Map; using blender::StringRef; ARegion *do_versions_add_region_if_not_found(ListBase *regionbase, @@ -234,3 +236,30 @@ ARegion *do_versions_add_region(int regiontype, const char *name) region->regiontype = regiontype; return region; } + +void node_tree_relink_with_socket_id_map(bNodeTree &ntree, + bNode &old_node, + bNode &new_node, + const Map<std::string, std::string> &map) +{ + LISTBASE_FOREACH_MUTABLE (bNodeLink *, link, &ntree.links) { + if (link->tonode == &old_node) { + bNodeSocket *old_socket = link->tosock; + if (const std::string *new_identifier = map.lookup_ptr_as(old_socket->identifier)) { + bNodeSocket *new_socket = nodeFindSocket(&new_node, SOCK_IN, new_identifier->c_str()); + link->tonode = &new_node; + link->tosock = new_socket; + old_socket->link = nullptr; + } + } + if (link->fromnode == &old_node) { + bNodeSocket *old_socket = link->fromsock; + if (const std::string *new_identifier = map.lookup_ptr_as(old_socket->identifier)) { + bNodeSocket *new_socket = nodeFindSocket(&new_node, SOCK_OUT, new_identifier->c_str()); + link->fromnode = &new_node; + link->fromsock = new_socket; + old_socket->link = nullptr; + } + } + } +} |