[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