Fix T65612: Ungroup in Node Editor Crashes

This commit is contained in:
Sergey Sharybin 2019-06-07 17:45:31 +02:00
parent fd556023cb
commit d05f27c7b9
Notes: blender-bot 2023-02-14 07:36:17 +01:00
Referenced by issue #65612, Ungroup in Node Editor Crashes
3 changed files with 26 additions and 3 deletions

View File

@ -554,6 +554,9 @@ struct bNode *BKE_node_copy_ex(struct bNodeTree *ntree,
struct bNode *BKE_node_copy_store_new_pointers(struct bNodeTree *ntree,
struct bNode *node_src,
const int flag);
struct bNodeTree *ntreeCopyTree_ex_new_pointers(const struct bNodeTree *ntree,
struct Main *bmain,
const bool do_id_user);
struct bNodeLink *nodeAddLink(struct bNodeTree *ntree,
struct bNode *fromnode,

View File

@ -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)

View File

@ -197,7 +197,7 @@ static int node_group_ungroup(Main *bmain, bNodeTree *ntree, bNode *gnode)
* - ngroup (i.e. the source NodeTree) is left unscathed
* - temp copy. don't change ID usercount
*/
wgroup = ntreeCopyTree_ex(ngroup, bmain, false);
wgroup = ntreeCopyTree_ex_new_pointers(ngroup, bmain, false);
/* Add the nodes into the ntree */
for (node = wgroup->nodes.first; node; node = nextnode) {