[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13855] trunk/blender/source/blender:

Brecht Van Lommel brechtvanlommel at pandora.be
Sun Feb 24 23:27:40 CET 2008


Revision: 13855
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13855
Author:   blendix
Date:     2008-02-24 23:27:40 +0100 (Sun, 24 Feb 2008)

Log Message:
-----------

Fix for bug #6747: make single button for node groups didn't work,
functionality was not implemented.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_node.h
    trunk/blender/source/blender/blenkernel/intern/node.c
    trunk/blender/source/blender/makesdna/DNA_node_types.h
    trunk/blender/source/blender/src/drawnode.c

Modified: trunk/blender/source/blender/blenkernel/BKE_node.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_node.h	2008-02-24 22:19:17 UTC (rev 13854)
+++ trunk/blender/source/blender/blenkernel/BKE_node.h	2008-02-24 22:27:40 UTC (rev 13855)
@@ -153,7 +153,7 @@
 void			nodeMakeDynamicType(struct bNode *node);
 int				nodeDynamicUnlinkText(struct ID *txtid);
 void			nodeFreeNode(struct bNodeTree *ntree, struct bNode *node);
-struct bNode	*nodeCopyNode(struct bNodeTree *ntree, struct bNode *node);
+struct bNode	*nodeCopyNode(struct bNodeTree *ntree, struct bNode *node, int internal);
 
 struct bNodeLink *nodeAddLink(struct bNodeTree *ntree, struct bNode *fromnode, struct bNodeSocket *fromsock, struct bNode *tonode, struct bNodeSocket *tosock);
 void			nodeRemLink(struct bNodeTree *ntree, struct bNodeLink *link);
@@ -179,6 +179,8 @@
 void			nodeVerifyGroup(struct bNodeTree *ngroup);
 void			nodeGroupSocketUseFlags(struct bNodeTree *ngroup);
 
+void			nodeCopyGroup(struct bNode *gnode);
+
 /* ************** COMMON NODES *************** */
 
 #define NODE_GROUP		2

Modified: trunk/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/node.c	2008-02-24 22:19:17 UTC (rev 13854)
+++ trunk/blender/source/blender/blenkernel/intern/node.c	2008-02-24 22:27:40 UTC (rev 13855)
@@ -801,6 +801,23 @@
 	return 1;
 }
 
+void nodeCopyGroup(bNode *gnode)
+{
+	bNodeSocket *sock;
+
+	gnode->id->us--;
+	gnode->id= (ID *)ntreeCopyTree((bNodeTree *)gnode->id, 0);
+
+	/* new_sock was set in nodeCopyNode */
+	for(sock=gnode->inputs.first; sock; sock=sock->next)
+		if(sock->tosock)
+			sock->tosock= sock->tosock->new_sock;
+
+	for(sock=gnode->outputs.first; sock; sock=sock->next)
+		if(sock->tosock)
+			sock->tosock= sock->tosock->new_sock;
+}
+
 /* ************** Add stuff ********** */
 void nodeAddSockets(bNode *node, bNodeType *ntype)
 {
@@ -901,23 +918,30 @@
 
 /* keep socket listorder identical, for copying links */
 /* ntree is the target tree */
-bNode *nodeCopyNode(struct bNodeTree *ntree, struct bNode *node)
+bNode *nodeCopyNode(struct bNodeTree *ntree, struct bNode *node, int internal)
 {
 	bNode *nnode= MEM_callocN(sizeof(bNode), "dupli node");
-	bNodeSocket *sock;
+	bNodeSocket *sock, *oldsock;
 
 	*nnode= *node;
 	BLI_addtail(&ntree->nodes, nnode);
 	
 	duplicatelist(&nnode->inputs, &node->inputs);
-	for(sock= nnode->inputs.first; sock; sock= sock->next)
-		sock->own_index= 0;
+	oldsock= node->inputs.first;
+	for(sock= nnode->inputs.first; sock; sock= sock->next, oldsock= oldsock->next) {
+		oldsock->new_sock= sock;
+		if(internal)
+			sock->own_index= 0;
+	}
 	
 	duplicatelist(&nnode->outputs, &node->outputs);
-	for(sock= nnode->outputs.first; sock; sock= sock->next) {
-		sock->own_index= 0;
+	oldsock= node->outputs.first;
+	for(sock= nnode->outputs.first; sock; sock= sock->next, oldsock= oldsock->next) {
+		if(internal)
+			sock->own_index= 0;
 		sock->stack_index= 0;
 		sock->ns.data= NULL;
+		oldsock->new_sock= sock;
 	}
 	
 	if(nnode->id)
@@ -995,7 +1019,7 @@
 		
 		node->new_node= NULL;
 		if(internal_select==0 || (node->flag & NODE_SELECT)) {
-			nnode= nodeCopyNode(newtree, node);	/* sets node->new */
+			nnode= nodeCopyNode(newtree, node, internal_select);	/* sets node->new */
 			if(internal_select) {
 				node->flag &= ~NODE_SELECT;
 				nnode->flag |= NODE_SELECT;

Modified: trunk/blender/source/blender/makesdna/DNA_node_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_node_types.h	2008-02-24 22:19:17 UTC (rev 13854)
+++ trunk/blender/source/blender/makesdna/DNA_node_types.h	2008-02-24 22:27:40 UTC (rev 13855)
@@ -58,7 +58,7 @@
 #define NS_OSA_VALUES		2
 
 typedef struct bNodeSocket {
-	struct bNodeSocket *next, *prev;
+	struct bNodeSocket *next, *prev, *new_sock;
 	
 	char name[32];
 	bNodeStack ns;				/* custom data for inputs, only UI writes in this */

Modified: trunk/blender/source/blender/src/drawnode.c
===================================================================
--- trunk/blender/source/blender/src/drawnode.c	2008-02-24 22:19:17 UTC (rev 13854)
+++ trunk/blender/source/blender/src/drawnode.c	2008-02-24 22:27:40 UTC (rev 13855)
@@ -247,7 +247,15 @@
 	allqueue(REDRAWNODE, 0);
 }
 
+static void node_group_alone_cb(void *node_v, void *unused_v)
+{
+	bNode *node= node_v;
+	
+	nodeCopyGroup(node);
 
+	allqueue(REDRAWNODE, 0);
+}
+
 /* ****************** BUTTON CALLBACKS FOR ALL TREES ***************** */
 
 static int node_buts_group(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr)
@@ -272,7 +280,7 @@
 			bt= uiDefBut(block, BUT, B_NOP, str1, 
 						 butr->xmax-19, butr->ymin, 19, 19, 
 						 NULL, 0, 0, 0, 0, "Displays number of users.");
-			//uiButSetFunc(bt, node_mat_alone_cb, node, NULL);
+			uiButSetFunc(bt, node_group_alone_cb, node, NULL);
 		}
 		
 		uiBlockEndAlign(block);
@@ -3104,7 +3112,7 @@
 	bNodeSocket *sock;
 	
 	glEnable(GL_BLEND);
-	glEnable( GL_LINE_SMOOTH );
+	glEnable(GL_LINE_SMOOTH);
 	
 	fakelink.tonode= fakelink.fromnode= gnode;
 	
@@ -3129,7 +3137,7 @@
 	}
 	
 	glDisable(GL_BLEND);
-	glDisable( GL_LINE_SMOOTH );
+	glDisable(GL_LINE_SMOOTH);
 }
 
 /* groups are, on creation, centered around 0,0 */





More information about the Bf-blender-cvs mailing list