[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