Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDalai Felinto <dfelinto@gmail.com>2012-11-04 23:18:12 +0400
committerDalai Felinto <dfelinto@gmail.com>2012-11-04 23:18:12 +0400
commitcc77001416b385b289e7824cd5d71cad2bddfefb (patch)
treedef11600792a23d989d999f1fd74a449fef17dcb /source/blender/editors/space_node/node_group.c
parent83b5d7d2cd8aae0ac6482f813fd2d37f3a9ce0ed (diff)
auto-link solo-nodes when making group
if make group is called with only one node selected ALL the node sockets are linked to the node group with help+review from Lukas Toenne This patch aims towards motivating users to use Group Node to share OSL nodes
Diffstat (limited to 'source/blender/editors/space_node/node_group.c')
-rw-r--r--source/blender/editors/space_node/node_group.c38
1 files changed, 36 insertions, 2 deletions
diff --git a/source/blender/editors/space_node/node_group.c b/source/blender/editors/space_node/node_group.c
index 19a678a9c6e..5f8b5db7766 100644
--- a/source/blender/editors/space_node/node_group.c
+++ b/source/blender/editors/space_node/node_group.c
@@ -875,7 +875,7 @@ static int node_group_make_insert_selected(bNodeTree *ntree, bNode *gnode)
bNodeTree *ngroup = (bNodeTree *)gnode->id;
bNodeLink *link, *linkn;
bNode *node, *nextn;
- bNodeSocket *gsock;
+ bNodeSocket *gsock, *sock;
ListBase anim_basepaths = {NULL, NULL};
float min[2], max[2];
@@ -982,8 +982,42 @@ static int node_group_make_insert_selected(bNodeTree *ntree, bNode *gnode)
}
}
+ /* auto-add interface for "solo" nodes */
+ node = ((bNodeTree *)gnode->id)->nodes.first;
+ if (node && !node->next) {
+ for (sock = node->inputs.first; sock; sock = sock->next) {
+ int skip = FALSE;
+
+ for (link = ((bNodeTree *)gnode->id)->links.first; link; link = link->next)
+ if (link->tosock == sock)
+ skip = TRUE;
+
+ if (skip == TRUE)
+ continue;
+
+ gsock = node_group_expose_socket(ngroup, sock, SOCK_IN);
+ node_group_add_extern_socket(ntree, &gnode->inputs, SOCK_IN, gsock);
+ nodeAddLink(ngroup, NULL, gsock, node, sock);
+ }
+
+ for (sock = node->outputs.first; sock; sock = sock->next) {
+ int skip = FALSE;
+
+ for (link = ((bNodeTree *)gnode->id)->links.first; link; link = link->next)
+ if (link->fromsock == sock)
+ skip = TRUE;
+
+ if (skip == TRUE)
+ continue;
+
+ gsock = node_group_expose_socket(ngroup, sock, SOCK_OUT);
+ node_group_add_extern_socket(ntree, &gnode->outputs, SOCK_OUT, gsock);
+ nodeAddLink(ngroup, NULL, gsock, node, sock);
+ }
+ }
+
/* update of the group tree */
- ngroup->update |= NTREE_UPDATE;
+ ngroup->update |= NTREE_UPDATE | NTREE_UPDATE_LINKS;
/* update of the tree containing the group instance node */
ntree->update |= NTREE_UPDATE_NODES | NTREE_UPDATE_LINKS;