[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34369] trunk/blender/source/blender: Bugfix #25681
Ton Roosendaal
ton at blender.org
Mon Jan 17 16:16:09 CET 2011
Revision: 34369
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=34369
Author: ton
Date: 2011-01-17 15:16:08 +0000 (Mon, 17 Jan 2011)
Log Message:
-----------
Bugfix #25681
Python API allowed to make links with input->output reversed.
Now node api checks for this case and flips order.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/node.c
trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
Modified: trunk/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/node.c 2011-01-17 13:38:44 UTC (rev 34368)
+++ trunk/blender/source/blender/blenkernel/intern/node.c 2011-01-17 15:16:08 UTC (rev 34369)
@@ -1082,16 +1082,62 @@
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;
- BLI_addtail(&ntree->links, link);
- link->fromnode= fromnode;
- link->fromsock= fromsock;
- link->tonode= tonode;
- link->tosock= tosock;
+ 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;
}
Modified: trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_nodetree.c 2011-01-17 13:38:44 UTC (rev 34368)
+++ trunk/blender/source/blender/makesrna/intern/rna_nodetree.c 2011-01-17 15:16:08 UTC (rev 34369)
@@ -524,15 +524,16 @@
nodeRemSocketLinks(ntree, out);
ret= nodeAddLink(ntree, fromnode, in, tonode, out);
+
+ if(ret) {
+ NodeTagChanged(ntree, tonode);
- NodeTagChanged(ntree, tonode);
+ nodeVerifyGroup(ntree); /* update group node socket links*/
- nodeVerifyGroup(ntree); /* update group node socket links*/
+ ntreeSolveOrder(ntree);
- ntreeSolveOrder(ntree);
-
- WM_main_add_notifier(NC_NODE|NA_EDITED, ntree);
-
+ WM_main_add_notifier(NC_NODE|NA_EDITED, ntree);
+ }
return ret;
}
More information about the Bf-blender-cvs
mailing list