[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34934] branches/particles-2010/source/ blender: Synchronization of loop nodes.

Lukas Toenne lukas.toenne at googlemail.com
Thu Feb 17 14:46:17 CET 2011


Revision: 34934
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=34934
Author:   lukastoenne
Date:     2011-02-17 13:46:17 +0000 (Thu, 17 Feb 2011)
Log Message:
-----------
Synchronization of loop nodes. Changes to the inputs or outputs of a group tree are tagged by an update flag. Loop nodes then synchronize the socket lists accordingly on tree update calls.

Modified Paths:
--------------
    branches/particles-2010/source/blender/blenkernel/BKE_node.h
    branches/particles-2010/source/blender/blenkernel/intern/node.c
    branches/particles-2010/source/blender/blenloader/intern/readfile.c
    branches/particles-2010/source/blender/editors/space_node/drawnode.c
    branches/particles-2010/source/blender/editors/space_node/node_edit.c
    branches/particles-2010/source/blender/makesdna/DNA_node_types.h
    branches/particles-2010/source/blender/nodes/intern/node_common.c

Modified: branches/particles-2010/source/blender/blenkernel/BKE_node.h
===================================================================
--- branches/particles-2010/source/blender/blenkernel/BKE_node.h	2011-02-17 12:05:09 UTC (rev 34933)
+++ branches/particles-2010/source/blender/blenkernel/BKE_node.h	2011-02-17 13:46:17 UTC (rev 34934)
@@ -210,7 +210,8 @@
 
 /* ************** GENERIC API, TREES *************** */
 
-bNodeTreeType	*ntreeGetType(int type);
+struct bNodeTreeType *ntreeGetType(int type);
+struct bNodeType *ntreeGetNodeType(struct bNodeTree *ntree);
 
 struct bNodeTree *ntreeAddTree(const char *name, int type, int nodetype);
 void			ntreeInitTypes(struct bNodeTree *ntree);
@@ -350,8 +351,9 @@
 struct bNode	*node_group_make_from_selected(struct bNodeTree *ntree);
 int				node_group_ungroup(struct bNodeTree *ntree, struct bNode *gnode);
 
+/* For Loop */
+void forloop_sync(struct bNodeTree *ntree, int sync_in_out);
 
-/* For Loop */
 void register_node_type_forloop(ListBase *lb);
 
 /* ************** SHADER NODES *************** */

Modified: branches/particles-2010/source/blender/blenkernel/intern/node.c
===================================================================
--- branches/particles-2010/source/blender/blenkernel/intern/node.c	2011-02-17 12:05:09 UTC (rev 34933)
+++ branches/particles-2010/source/blender/blenkernel/intern/node.c	2011-02-17 13:46:17 UTC (rev 34934)
@@ -105,6 +105,11 @@
 	return NULL;
 }
 
+bNodeType *ntreeGetNodeType(bNodeTree *ntree)
+{
+	return node_get_type(ntree, ntree->nodetype);
+}
+
 void ntreeInitTypes(bNodeTree *ntree)
 {
 	bNode *node, *next;
@@ -1365,6 +1370,9 @@
 		if (ntype && ntype->updatetreefunc)
 			ntype->updatetreefunc(ntree);
 	}
+	
+	/* clear the update flag */
+	ntree->update = 0;
 }
 
 void NodeTagChanged(bNodeTree *ntree, bNode *node)

Modified: branches/particles-2010/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/particles-2010/source/blender/blenloader/intern/readfile.c	2011-02-17 12:05:09 UTC (rev 34933)
+++ branches/particles-2010/source/blender/blenloader/intern/readfile.c	2011-02-17 13:46:17 UTC (rev 34934)
@@ -11374,7 +11374,11 @@
 		 * this mimics the old behaviour by adding all unlinked sockets to groups.
 		 */
 		for (ntree=main->nodetree.first; ntree; ntree=ntree->id.next) {
-			node_group_add_all_sockets(ntree);
+			if (ntree->nodetype==NODE_GROUP) {
+				node_group_add_all_sockets(ntree);
+				/* to update instances */
+				ntreeUpdateTree(ntree);
+			}
 		}
 	}
 

Modified: branches/particles-2010/source/blender/editors/space_node/drawnode.c
===================================================================
--- branches/particles-2010/source/blender/editors/space_node/drawnode.c	2011-02-17 12:05:09 UTC (rev 34933)
+++ branches/particles-2010/source/blender/editors/space_node/drawnode.c	2011-02-17 13:46:17 UTC (rev 34934)
@@ -350,13 +350,22 @@
 	}
 }
 
-static void update_tree_cb(bContext *UNUSED(C), void *UNUSED(snode_v), void *ngroup_v)
+static void update_group_input_cb(bContext *UNUSED(C), void *UNUSED(snode_v), void *ngroup_v)
 {
 	bNodeTree *ngroup= (bNodeTree*)ngroup_v;
 	
+	ngroup->update |= NTREE_UPDATE_GROUP_IN;
 	ntreeUpdateTree(ngroup);
 }
 
+static void update_group_output_cb(bContext *UNUSED(C), void *UNUSED(snode_v), void *ngroup_v)
+{
+	bNodeTree *ngroup= (bNodeTree*)ngroup_v;
+	
+	ngroup->update |= NTREE_UPDATE_GROUP_OUT;
+	ntreeUpdateTree(ngroup);
+}
+
 /* groups are, on creation, centered around 0,0 */
 static void node_draw_group(const bContext *C, ARegion *ar, SpaceNode *snode, bNodeTree *ntree, bNode *gnode)
 {
@@ -434,22 +443,34 @@
 			sock->locx -= NODE_GROUP_FRAME;
 			node_socket_circle_draw(ngroup, sock, NODE_SOCKSIZE);
 			sock->locx += NODE_GROUP_FRAME;
-	
+			
 			if (sock->flag & SOCK_INTERNAL) {
-				bt = uiDefBut(gnode->block, TEX, 0, "", 
-							  sock->locx-114, sock->locy-NODE_DYS+1, 72, NODE_DY,
-							  sock->name, 0, 31, 0, 0, "");
-				uiButSetFunc(bt, update_tree_cb, snode, ngroup);
+				if (sock->flag & SOCK_STATIC)
+					uiDefBut(gnode->block, LABEL, 0, sock->name, 
+							 sock->locx-114, sock->locy-NODE_DYS+1, 72, NODE_DY,
+							 NULL, 0, 31, 0, 0, "");
+				else {
+					bt = uiDefBut(gnode->block, TEX, 0, "", 
+								  sock->locx-114, sock->locy-NODE_DYS+1, 72, NODE_DY,
+								  sock->name, 0, 31, 0, 0, "");
+					uiButSetFunc(bt, update_group_input_cb, snode, ngroup);
+				}
 			}
 			else {
-				bt = uiDefBut(gnode->block, TEX, 0, "", 
-							  sock->locx-114, sock->locy+1, 72, NODE_DY,
-							  sock->name, 0, 31, 0, 0, "");
-				uiButSetFunc(bt, update_tree_cb, snode, ngroup);
-				
-				node_draw_socket_button(ngroup, sock, "", gnode->block,
-										sock->locx-114, sock->locy-NODE_DY, 72,
-										NULL, NULL, NULL);
+				if (sock->flag & SOCK_STATIC)
+					uiDefBut(gnode->block, TEX, 0, sock->name, 
+							 sock->locx-114, sock->locy+1, 72, NODE_DY,
+							 NULL, 0, 31, 0, 0, "");
+				else {
+					bt = uiDefBut(gnode->block, TEX, 0, "", 
+								  sock->locx-114, sock->locy+1, 72, NODE_DY,
+								  sock->name, 0, 31, 0, 0, "");
+					uiButSetFunc(bt, update_group_input_cb, snode, ngroup);
+					
+					node_draw_socket_button(ngroup, sock, "", gnode->block,
+											sock->locx-114, sock->locy-NODE_DY, 72,
+											NULL, NULL, NULL);
+				}
 			}
 			
 			if (!(sock->flag & SOCK_STATIC)) {
@@ -457,13 +478,13 @@
 				uiBlockBeginAlign(gnode->block);
 				bt = uiDefIconButO(gnode->block, BUT, "NODE_OT_group_socket_move_up", 0, ICON_TRIA_UP,
 								   sock->locx-40, sock->locy, 16, 16, "");
-				if (!sock->prev)
+				if (!sock->prev || (sock->prev->flag & SOCK_STATIC))
 					uiButSetFlag(bt, UI_BUT_DISABLED);
 				RNA_int_set(uiButGetOperatorPtrRNA(bt), "index", index);
 				RNA_enum_set(uiButGetOperatorPtrRNA(bt), "in_out", SOCK_IN);
 				bt = uiDefIconButO(gnode->block, BUT, "NODE_OT_group_socket_move_down", 0, ICON_TRIA_DOWN,
 								   sock->locx-40, sock->locy-16, 16, 16, "");
-				if (!sock->next)
+				if (!sock->next || (sock->next->flag & SOCK_STATIC))
 					uiButSetFlag(bt, UI_BUT_DISABLED);
 				RNA_int_set(uiButGetOperatorPtrRNA(bt), "index", index);
 				RNA_enum_set(uiButGetOperatorPtrRNA(bt), "in_out", SOCK_IN);
@@ -516,13 +537,13 @@
 				bt = uiDefBut(gnode->block, TEX, 0, "", 
 							  sock->locx+42, sock->locy-NODE_DYS+1, 72, NODE_DY,
 							  sock->name, 0, 31, 0, 0, "");
-				uiButSetFunc(bt, update_tree_cb, snode, ngroup);
+				uiButSetFunc(bt, update_group_output_cb, snode, ngroup);
 			}
 			else {
 				bt = uiDefBut(gnode->block, TEX, 0, "", 
 							  sock->locx+42, sock->locy+1, 72, NODE_DY,
 							  sock->name, 0, 31, 0, 0, "");
-				uiButSetFunc(bt, update_tree_cb, snode, ngroup);
+				uiButSetFunc(bt, update_group_output_cb, snode, ngroup);
 				
 				node_draw_socket_button(ngroup, sock, "", gnode->block, sock->locx+42, sock->locy-NODE_DY, 72, NULL, NULL, NULL);
 			}

Modified: branches/particles-2010/source/blender/editors/space_node/node_edit.c
===================================================================
--- branches/particles-2010/source/blender/editors/space_node/node_edit.c	2011-02-17 12:05:09 UTC (rev 34933)
+++ branches/particles-2010/source/blender/editors/space_node/node_edit.c	2011-02-17 13:46:17 UTC (rev 34934)
@@ -851,6 +851,8 @@
 			return OPERATOR_CANCELLED;
 		BLI_remlink(&ngroup->inputs, sock);
 		BLI_insertlinkbefore(&ngroup->inputs, prev, sock);
+		
+		ngroup->update |= NTREE_UPDATE_GROUP_IN;
 	}
 	else if (in_out==SOCK_OUT) {
 		sock = (bNodeSocket*)BLI_findlink(&ngroup->outputs, index);
@@ -860,6 +862,8 @@
 			return OPERATOR_CANCELLED;
 		BLI_remlink(&ngroup->outputs, sock);
 		BLI_insertlinkbefore(&ngroup->outputs, prev, sock);
+		
+		ngroup->update |= NTREE_UPDATE_GROUP_OUT;
 	}
 	ntreeUpdateTree(ngroup);
 	
@@ -917,6 +921,8 @@
 			return OPERATOR_CANCELLED;
 		BLI_remlink(&ngroup->inputs, sock);
 		BLI_insertlinkafter(&ngroup->inputs, next, sock);
+		
+		ngroup->update |= NTREE_UPDATE_GROUP_IN;
 	}
 	else if (in_out==SOCK_OUT) {
 		sock = (bNodeSocket*)BLI_findlink(&ngroup->outputs, index);
@@ -926,6 +932,8 @@
 			return OPERATOR_CANCELLED;
 		BLI_remlink(&ngroup->outputs, sock);
 		BLI_insertlinkafter(&ngroup->outputs, next, sock);
+		
+		ngroup->update |= NTREE_UPDATE_GROUP_OUT;
 	}
 	ntreeUpdateTree(ngroup);
 	

Modified: branches/particles-2010/source/blender/makesdna/DNA_node_types.h
===================================================================
--- branches/particles-2010/source/blender/makesdna/DNA_node_types.h	2011-02-17 12:05:09 UTC (rev 34933)
+++ branches/particles-2010/source/blender/makesdna/DNA_node_types.h	2011-02-17 13:46:17 UTC (rev 34934)
@@ -270,7 +270,9 @@
 #define NTREE_UPDATE			0xFFFF	/* generic update flag (includes all others) */
 #define NTREE_UPDATE_LINKS		1		/* links have been added or removed */
 #define NTREE_UPDATE_NODES		2		/* nodes or sockets have been added or removed */
-#define NTREE_UPDATE_GROUP		4		/* group inputs/outputs have changed */
+#define NTREE_UPDATE_GROUP_IN	16		/* group inputs have changed */
+#define NTREE_UPDATE_GROUP_OUT	32		/* group outputs have changed */
+#define NTREE_UPDATE_GROUP		48		/* group has changed (generic flag including all other group flags) */
 
 /* data structs, for node->storage */
 

Modified: branches/particles-2010/source/blender/nodes/intern/node_common.c
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/node_common.c	2011-02-17 12:05:09 UTC (rev 34933)
+++ branches/particles-2010/source/blender/nodes/intern/node_common.c	2011-02-17 13:46:17 UTC (rev 34934)
@@ -232,25 +232,6 @@
 	return gnode;
 }
 
-#if 0
-static void node_group_verify_cb(void *calldata, ID *UNUSED(owner_id), bNodeTree *ntree)
-{
-	ID *group_id= (ID*)calldata;
-	bNode *node;
-	
-	for(node= ntree->nodes.first; node; node= node->next)
-		if(node->id == group_id)
-			nodeVerifyType(ntree, node);
-}
-
-void node_group_verify(bNodeTree *ngroup)
-{
-	bNodeTreeType *treetype= ntreeGetType(ngroup->type);
-	
-	treetype->foreachNodeTree(G.main, ngroup, &node_group_verify_cb);
-}
-#endif
-
 /* returns 1 if its OK */
 int node_group_ungroup(bNodeTree *ntree, bNode *gnode)
 {
@@ -422,7 +403,7 @@
 	
 	BLI_addtail(in_out==SOCK_IN ? &ngroup->inputs : &ngroup->outputs, gsock);
 	
-	ngroup->update |= NTREE_UPDATE_GROUP;
+	ngroup->update |= (in_out==SOCK_IN ? NTREE_UPDATE_GROUP_IN : NTREE_UPDATE_GROUP_OUT);
 	

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list