[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35518] trunk/blender/source/blender/ blenkernel/intern/node.c: Fixed the node_recurs_check function used to define the order of nodes in ntreeSolveOrder .

Lukas Toenne lukas.toenne at googlemail.com
Sun Mar 13 18:23:44 CET 2011


Revision: 35518
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35518
Author:   lukastoenne
Date:     2011-03-13 17:23:44 +0000 (Sun, 13 Mar 2011)
Log Message:
-----------
Fixed the node_recurs_check function used to define the order of nodes in ntreeSolveOrder. This was creating equal node levels in some cases (auto-linking viewer to nodes further downstream), leading to falsely detected circular dependencies.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/node.c

Modified: trunk/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/node.c	2011-03-13 17:20:52 UTC (rev 35517)
+++ trunk/blender/source/blender/blenkernel/intern/node.c	2011-03-13 17:23:44 UTC (rev 35518)
@@ -1759,32 +1759,29 @@
 /* ************** dependency stuff *********** */
 
 /* node is guaranteed to be not checked before */
-static int node_recurs_check(bNode *node, bNode ***nsort, int level)
+static int node_recurs_check(bNode *node, bNode ***nsort)
 {
 	bNode *fromnode;
 	bNodeSocket *sock;
-	int has_inputlinks= 0;
+	int level = 0xFFF;
 	
 	node->done= 1;
-	level++;
 	
 	for(sock= node->inputs.first; sock; sock= sock->next) {
 		if(sock->link) {
-			has_inputlinks= 1;
 			fromnode= sock->link->fromnode;
-			if(fromnode && fromnode->done==0) {
-				fromnode->level= node_recurs_check(fromnode, nsort, level);
+			if(fromnode) {
+				if (fromnode->done==0)
+					fromnode->level= node_recurs_check(fromnode, nsort);
+				if (fromnode->level <= level)
+					level = fromnode->level - 1;
 			}
 		}
 	}
-//	printf("node sort %s level %d\n", node->name, level);
 	**nsort= node;
 	(*nsort)++;
 	
-	if(has_inputlinks)
-		return level;
-	else 
-		return 0xFFF;
+	return level;
 }
 
 
@@ -1873,7 +1870,7 @@
 	/* recursive check */
 	for(node= ntree->nodes.first; node; node= node->next) {
 		if(node->done==0) {
-			node->level= node_recurs_check(node, &nsort, 0);
+			node->level= node_recurs_check(node, &nsort);
 		}
 	}
 	




More information about the Bf-blender-cvs mailing list