forked from bartvdbraak/blender
Bugfix #25681
Python API allowed to make links with input->output reversed. Now node api checks for this case and flips order.
This commit is contained in:
parent
9924ade102
commit
4b7930dbbd
@ -1082,15 +1082,61 @@ bNode *nodeCopyNode(struct bNodeTree *ntree, struct bNode *node, int internal)
|
||||
return nnode;
|
||||
}
|
||||
|
||||
/* fromsock and tosock can be NULL */
|
||||
/* 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)
|
||||
{
|
||||
bNodeLink *link= MEM_callocN(sizeof(bNodeLink), "link");
|
||||
bNodeSocket *sock;
|
||||
bNodeLink *link= NULL;
|
||||
int from= 0, to= 0;
|
||||
|
||||
if(fromsock) {
|
||||
/* test valid input */
|
||||
for(sock= fromnode->outputs.first; sock; sock= sock->next)
|
||||
if(sock==fromsock)
|
||||
break;
|
||||
if(sock)
|
||||
from= 1; /* OK */
|
||||
else {
|
||||
for(sock= fromnode->inputs.first; sock; sock= sock->next)
|
||||
if(sock==fromsock)
|
||||
break;
|
||||
if(sock)
|
||||
from= -1; /* OK but flip */
|
||||
}
|
||||
}
|
||||
if(tosock) {
|
||||
for(sock= tonode->inputs.first; sock; sock= sock->next)
|
||||
if(sock==tosock)
|
||||
break;
|
||||
if(sock)
|
||||
to= 1; /* OK */
|
||||
else {
|
||||
for(sock= tonode->outputs.first; sock; sock= sock->next)
|
||||
if(sock==tosock)
|
||||
break;
|
||||
if(sock)
|
||||
to= -1; /* OK but flip */
|
||||
}
|
||||
}
|
||||
|
||||
/* this allows NULL sockets to work */
|
||||
if(from >= 0 && to >= 0) {
|
||||
link= MEM_callocN(sizeof(bNodeLink), "link");
|
||||
BLI_addtail(&ntree->links, link);
|
||||
link->fromnode= fromnode;
|
||||
link->fromsock= fromsock;
|
||||
link->tonode= tonode;
|
||||
link->tosock= tosock;
|
||||
}
|
||||
else if(from <= 0 && to <= 0) {
|
||||
link= MEM_callocN(sizeof(bNodeLink), "link");
|
||||
BLI_addtail(&ntree->links, link);
|
||||
link->fromnode= tonode;
|
||||
link->fromsock= tosock;
|
||||
link->tonode= fromnode;
|
||||
link->tosock= fromsock;
|
||||
}
|
||||
|
||||
return link;
|
||||
}
|
||||
|
@ -525,6 +525,7 @@ static bNodeLink *rna_NodeTree_link_new(bNodeTree *ntree, ReportList *reports, b
|
||||
|
||||
ret= nodeAddLink(ntree, fromnode, in, tonode, out);
|
||||
|
||||
if(ret) {
|
||||
NodeTagChanged(ntree, tonode);
|
||||
|
||||
nodeVerifyGroup(ntree); /* update group node socket links*/
|
||||
@ -532,7 +533,7 @@ static bNodeLink *rna_NodeTree_link_new(bNodeTree *ntree, ReportList *reports, b
|
||||
ntreeSolveOrder(ntree);
|
||||
|
||||
WM_main_add_notifier(NC_NODE|NA_EDITED, ntree);
|
||||
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user