diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2019-06-07 18:45:31 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2019-06-07 18:45:58 +0300 |
commit | d05f27c7b95371db9e7e4e34a919a3623682a114 (patch) | |
tree | 4faf4931cd6ea947cccc16b006ae1f47777b24a5 /source/blender/blenkernel/intern | |
parent | fd556023cbadba1d6a8fb15f324257b728b5322b (diff) |
Fix T65612: Ungroup in Node Editor Crashes
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r-- | source/blender/blenkernel/intern/node.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index e1f7a346b1c..62357b7f878 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -1099,9 +1099,8 @@ bNode *BKE_node_copy_ex(bNodeTree *ntree, const bNode *node_src, const int flag) return node_dst; } -bNode *BKE_node_copy_store_new_pointers(bNodeTree *ntree, bNode *node_src, const int flag) +static void node_set_new_pointers(bNode *node_src, bNode *new_node) { - bNode *new_node = BKE_node_copy_ex(ntree, node_src, flag); /* Store mapping to the node itself. */ node_src->new_node = new_node; /* Store mapping to inputs. */ @@ -1120,9 +1119,30 @@ bNode *BKE_node_copy_store_new_pointers(bNodeTree *ntree, bNode *node_src, const new_output_sock = new_output_sock->next; output_sock_src = output_sock_src->next; } +} + +bNode *BKE_node_copy_store_new_pointers(bNodeTree *ntree, bNode *node_src, const int flag) +{ + bNode *new_node = BKE_node_copy_ex(ntree, node_src, flag); + node_set_new_pointers(node_src, new_node); return new_node; } +bNodeTree *ntreeCopyTree_ex_new_pointers(const bNodeTree *ntree, + Main *bmain, + const bool do_id_user) +{ + bNodeTree *new_ntree = ntreeCopyTree_ex(ntree, bmain, do_id_user); + bNode *new_node = new_ntree->nodes.first; + bNode *node_src = ntree->nodes.first; + while (new_node != NULL) { + node_set_new_pointers(node_src, new_node); + new_node = new_node->next; + node_src = node_src->next; + } + return new_ntree; +} + /* also used via rna api, so we check for proper input output direction */ bNodeLink *nodeAddLink( bNodeTree *ntree, bNode *fromnode, bNodeSocket *fromsock, bNode *tonode, bNodeSocket *tosock) |