[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