[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35083] trunk/blender/source/blender: Added RNA functions to group tree inputs/ outputs for exposing internal sockets or adding custom sockets by name and type (fixes #26171).

Lukas Toenne lukas.toenne at googlemail.com
Tue Feb 22 21:24:06 CET 2011


Revision: 35083
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35083
Author:   lukastoenne
Date:     2011-02-22 20:24:06 +0000 (Tue, 22 Feb 2011)
Log Message:
-----------
Added RNA functions to group tree inputs/outputs for exposing internal sockets or adding custom sockets by name and type (fixes #26171). Changed a few function names for groups for consistency.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_node.h
    trunk/blender/source/blender/blenkernel/intern/node.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/editors/space_node/node_draw.c
    trunk/blender/source/blender/editors/space_node/node_edit.c
    trunk/blender/source/blender/makesrna/intern/rna_nodetree.c

Modified: trunk/blender/source/blender/blenkernel/BKE_node.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_node.h	2011-02-22 19:30:37 UTC (rev 35082)
+++ trunk/blender/source/blender/blenkernel/BKE_node.h	2011-02-22 20:24:06 UTC (rev 35083)
@@ -186,7 +186,7 @@
 void			nodeRemSocketLinks(struct bNodeTree *ntree, struct bNodeSocket *sock);
 
 struct bNode	*nodeFindNodebyName(struct bNodeTree *ntree, const char *name);
-int			nodeFindNode(struct bNodeTree *ntree, struct bNodeSocket *sock, struct bNode **nodep, int *sockindex);
+int				nodeFindNode(struct bNodeTree *ntree, struct bNodeSocket *sock, struct bNode **nodep, int *sockindex, int *in_out);
 
 struct bNodeLink *nodeFindLink(struct bNodeTree *ntree, struct bNodeSocket *from, struct bNodeSocket *to);
 int				nodeCountSocketLinks(struct bNodeTree *ntree, struct bNodeSocket *sock);
@@ -206,15 +206,14 @@
 struct bNode	*nodeMakeGroupFromSelected(struct bNodeTree *ntree);
 int				nodeGroupUnGroup(struct bNodeTree *ntree, struct bNode *gnode);
 
-void			nodeVerifyGroup(struct bNodeTree *ngroup);
+void			nodeGroupVerify(struct bNodeTree *ngroup);
 void			nodeGroupSocketUseFlags(struct bNodeTree *ngroup);
 
-void			nodeCopyGroup(struct bNode *gnode);
+void			nodeGroupCopy(struct bNode *gnode);
 
-struct bNodeSocket *nodeAddGroupSocket(struct bNodeTree *ngroup, const char *name, int type, int in_out);
-struct bNodeSocket *nodeAddGroupSocketCopy(struct bNodeTree *ngroup, struct bNodeSocket *copy, int in_out);
-void			nodeAddAllGroupSockets(struct bNodeTree *ngroup);
-void			nodeRemGroupSocket(struct bNodeTree *ngroup, struct bNodeSocket *gsock, int in_out);
+struct bNodeSocket *nodeGroupAddSocket(struct bNodeTree *ngroup, const char *name, int type, int in_out);
+void			nodeGroupExposeAllSockets(struct bNodeTree *ngroup);
+void			nodeGroupRemoveSocket(struct bNodeTree *ngroup, struct bNodeSocket *gsock, int in_out);
 
 /* ************** COMMON NODES *************** */
 

Modified: trunk/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/node.c	2011-02-22 19:30:37 UTC (rev 35082)
+++ trunk/blender/source/blender/blenkernel/intern/node.c	2011-02-22 20:24:06 UTC (rev 35083)
@@ -476,7 +476,7 @@
 			BLI_addtail(&ngroup->links, link);
 		}
 		else if(link->tonode && (link->tonode->flag & NODE_SELECT)) {
-			gsock = nodeAddGroupSocketCopy(ngroup, link->tosock, SOCK_IN);
+			gsock = nodeGroupAddSocket(ngroup, link->tosock->name, link->tosock->type, SOCK_IN);
 			link->tosock->link = nodeAddLink(ngroup, NULL, gsock, link->tonode, link->tosock);
 			link->tosock = node_add_group_socket(&gnode->inputs, gsock);
 			link->tonode = gnode;
@@ -487,7 +487,7 @@
 				if (gsock->link && gsock->link->fromsock==link->fromsock)
 					break;
 			if (!gsock) {
-				gsock = nodeAddGroupSocketCopy(ngroup, link->fromsock, SOCK_OUT);
+				gsock = nodeGroupAddSocket(ngroup, link->fromsock->name, link->fromsock->type, SOCK_OUT);
 				gsock->link = nodeAddLink(ngroup, link->fromnode, link->fromsock, NULL, gsock);
 				link->fromsock = node_add_group_socket(&gnode->outputs, gsock);
 			}
@@ -505,7 +505,7 @@
 
 /* here's a nasty little one, need to check users... */
 /* should become callbackable... */
-void nodeVerifyGroup(bNodeTree *ngroup)
+void nodeGroupVerify(bNodeTree *ngroup)
 {
 	/* group changed, so we rebuild the type definition */
 //	ntreeMakeGroupSockets(ngroup);
@@ -627,21 +627,27 @@
 }
 
 /* finds a node based on given socket */
-int nodeFindNode(bNodeTree *ntree, bNodeSocket *sock, bNode **nodep, int *sockindex)
+int nodeFindNode(bNodeTree *ntree, bNodeSocket *sock, bNode **nodep, int *sockindex, int *in_out)
 {
 	bNode *node;
 	bNodeSocket *tsock;
 	int index= 0;
 	
 	for(node= ntree->nodes.first; node; node= node->next) {
-		for(index=0, tsock= node->inputs.first; tsock; tsock= tsock->next, index++)
-			if(tsock==sock)
+		for(index=0, tsock= node->inputs.first; tsock; tsock= tsock->next, index++) {
+			if(tsock==sock) {
+				if (in_out) *in_out= SOCK_IN;
 				break;
+			}
+		}
 		if(tsock)
 			break;
-		for(index=0, tsock= node->outputs.first; tsock; tsock= tsock->next, index++)
-			if(tsock==sock)
+		for(index=0, tsock= node->outputs.first; tsock; tsock= tsock->next, index++) {
+			if(tsock==sock) {
+				if (in_out) *in_out= SOCK_OUT;
 				break;
+			}
+		}
 		if(tsock)
 			break;
 	}
@@ -807,7 +813,7 @@
 	return 1;
 }
 
-void nodeCopyGroup(bNode *gnode)
+void nodeGroupCopy(bNode *gnode)
 {
 	bNodeSocket *sock;
 
@@ -824,7 +830,7 @@
 			sock->groupsock= sock->groupsock->new_sock;
 }
 
-bNodeSocket *nodeAddGroupSocket(bNodeTree *ngroup, const char *name, int type, int in_out)
+bNodeSocket *nodeGroupAddSocket(bNodeTree *ngroup, const char *name, int type, int in_out)
 {
 	bNodeSocket *gsock = MEM_callocN(sizeof(bNodeSocket), "bNodeSocket");
 	
@@ -849,61 +855,29 @@
 	return gsock;
 }
 
-bNodeSocket *nodeAddGroupSocketCopy(bNodeTree *ngroup, bNodeSocket *copy, int in_out)
+void nodeGroupExposeAllSockets(bNodeTree *ngroup)
 {
-	bNodeSocket *gsock = MEM_callocN(sizeof(bNodeSocket), "bNodeSocket");
-	
-	/* copy name type and data */
-	strcpy(gsock->name, copy->name);
-	gsock->type = copy->type;
-	gsock->ns = copy->ns;
-	gsock->ns.data = NULL;
-	gsock->flag = copy->flag;
-	
-	gsock->next = gsock->prev = NULL;
-	gsock->new_sock = NULL;
-	gsock->groupsock = NULL;
-	gsock->link = NULL;
-	/* assign new unique index */
-	gsock->own_index = ngroup->cur_index++;
-	gsock->limit = (in_out==SOCK_IN ? 0xFFF : 1);
-	
-	BLI_addtail(in_out==SOCK_IN ? &ngroup->inputs : &ngroup->outputs, gsock);
-	
-	return gsock;
-}
-
-void nodeAddAllGroupSockets(bNodeTree *ngroup)
-{
 	bNode *node;
 	bNodeSocket *sock, *gsock;
 	
-	printf("Verifying group '%s':\n", ngroup->id.name+2);
 	for (node=ngroup->nodes.first; node; node=node->next) {
-		printf("\tNode '%s':\n", node->name);
 		for (sock=node->inputs.first; sock; sock=sock->next) {
-			printf("\t\tInput '%s': link=%p, hidden=%d\n", sock->name, sock->link, (sock->flag & SOCK_HIDDEN));
-//			if (sock->link) {
-//				if (sock->link->fromnode)
-//					printf("fromnode=%s ", sock->link->fromnode->name);
-//				printf("fromsock=%s")
-//			}
 			if (!sock->link && !(sock->flag & SOCK_HIDDEN)) {
-				gsock = nodeAddGroupSocketCopy(ngroup, sock, SOCK_IN);
+				gsock = nodeGroupAddSocket(ngroup, sock->name, sock->type, SOCK_IN);
 				sock->link = nodeAddLink(ngroup, NULL, gsock, node, sock);
 			}
 		}
 		for (sock=node->outputs.first; sock; sock=sock->next) {
 			printf("\t\tOutput '%s': #links=%d, hidden=%d\n", sock->name, nodeCountSocketLinks(ngroup, sock), (sock->flag & SOCK_HIDDEN));
 			if (nodeCountSocketLinks(ngroup, sock)==0 && !(sock->flag & SOCK_HIDDEN)) {
-				gsock = nodeAddGroupSocketCopy(ngroup, sock, SOCK_OUT);
+				gsock = nodeGroupAddSocket(ngroup, sock->name, sock->type, SOCK_OUT);
 				gsock->link = nodeAddLink(ngroup, node, sock, NULL, gsock);
 			}
 		}
 	}
 }
 
-void nodeRemGroupSocket(bNodeTree *ngroup, bNodeSocket *gsock, int in_out)
+void nodeGroupRemoveSocket(bNodeTree *ngroup, bNodeSocket *gsock, int in_out)
 {
 	nodeRemSocketLinks(ngroup, gsock);
 	switch (in_out) {

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2011-02-22 19:30:37 UTC (rev 35082)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2011-02-22 20:24:06 UTC (rev 35083)
@@ -2108,7 +2108,7 @@
 		for(ntree= main->nodetree.first; ntree; ntree= ntree->id.next) {
 			if (ntree->flag & NTREE_DO_VERSIONS) {
 				/* this adds copies and links from all unlinked internal sockets to group inputs/outputs. */
-				nodeAddAllGroupSockets(ntree);
+				nodeGroupExposeAllSockets(ntree);
 				has_old_groups = 1;
 			}
 		}

Modified: trunk/blender/source/blender/editors/space_node/node_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_draw.c	2011-02-22 19:30:37 UTC (rev 35082)
+++ trunk/blender/source/blender/editors/space_node/node_draw.c	2011-02-22 20:24:06 UTC (rev 35083)
@@ -1014,7 +1014,7 @@
 {
 	bNodeTree *ngroup= (bNodeTree*)ngroup_v;
 	
-	nodeVerifyGroup(ngroup);
+	nodeGroupVerify(ngroup);
 }
 
 /* groups are, on creation, centered around 0,0 */

Modified: trunk/blender/source/blender/editors/space_node/node_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_edit.c	2011-02-22 19:30:37 UTC (rev 35082)
+++ trunk/blender/source/blender/editors/space_node/node_edit.c	2011-02-22 20:24:06 UTC (rev 35083)
@@ -555,7 +555,7 @@
 	
 	/* does all materials */
 	if(gnode)
-		nodeVerifyGroup((bNodeTree *)gnode->id);
+		nodeGroupVerify((bNodeTree *)gnode->id);
 	
 }
 
@@ -663,7 +663,7 @@
 	else
 		return OPERATOR_CANCELLED;
 	
-	sock = nodeAddGroupSocket(ngroup, name, type, in_out);
+	sock = nodeGroupAddSocket(ngroup, name, type, in_out);
 	
 	node_tree_verify_groups(snode->nodetree);
 	
@@ -715,7 +715,7 @@
 	
 	sock = (bNodeSocket*)BLI_findlink(in_out==SOCK_IN ? &ngroup->inputs : &ngroup->outputs, index);
 	if (sock) {
-		nodeRemGroupSocket(ngroup, sock, in_out);
+		nodeGroupRemoveSocket(ngroup, sock, in_out);
 		node_tree_verify_groups(snode->nodetree);
 		
 		snode_notify(C, snode);
@@ -2141,11 +2141,11 @@
 			else if (outside_group_rect(snode) && (link->tonode || link->fromnode)) {
 				/* automatically add new group socket */
 				if (link->tonode && link->tosock) {
-					link->fromsock = nodeAddGroupSocketCopy(snode->edittree, link->tosock, SOCK_IN);
+					link->fromsock = nodeGroupAddSocket(snode->edittree, link->tosock->name, link->tosock->type, SOCK_IN);
 					link->fromnode = NULL;
 				}
 				else if (link->fromnode && link->fromsock) {
-					link->tosock = nodeAddGroupSocketCopy(snode->edittree, link->fromsock, SOCK_OUT);
+					link->tosock = nodeGroupAddSocket(snode->edittree, link->fromsock->name, link->fromsock->type, SOCK_OUT);
 					link->tonode = NULL;
 				}
 			}

Modified: trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_nodetree.c	2011-02-22 19:30:37 UTC (rev 35082)

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list