diff options
author | Ton Roosendaal <ton@blender.org> | 2006-12-09 00:20:36 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2006-12-09 00:20:36 +0300 |
commit | 7f1e3874f9924bd9abf5b3a875c1c673eb33daa1 (patch) | |
tree | 7e767a2f80e8777d3a4f6e36fdd17128ef893cb6 /source/blender/src/editnode.c | |
parent | 00becf015baabbea382fdb3f0c8afe1555a20456 (diff) |
Node editing usablity!
- Removed stupid idea to insert convertor nodes in Node Shaders, when a
link is created by non-matching sockets. Now it works like Compositor,
doing a default conversion. Works like this:
1 from 3 or 4 values: take average
3 from 1: copy to all
3 from 4: copy 3
4 from 1: copy to 3, set alpha to 1
4 from 3: copy 3, set alpha to 1
- Added select-linked in Nodes. Lkey or Shift+L. Also in pulldown menus
Diffstat (limited to 'source/blender/src/editnode.c')
-rw-r--r-- | source/blender/src/editnode.c | 41 |
1 files changed, 32 insertions, 9 deletions
diff --git a/source/blender/src/editnode.c b/source/blender/src/editnode.c index 11c6cf83705..9eb3f8794e4 100644 --- a/source/blender/src/editnode.c +++ b/source/blender/src/editnode.c @@ -1490,6 +1490,7 @@ void node_adduplicate(SpaceNode *snode) transform_nodes(snode->edittree, 'g', "Duplicate"); } +#if 0 static void node_insert_convertor(SpaceNode *snode, bNodeLink *link) { bNode *newnode= NULL; @@ -1523,6 +1524,7 @@ static void node_insert_convertor(SpaceNode *snode, bNodeLink *link) } } +#endif /* loop that adds a nodelink, called by function below */ /* in_out = starting socket */ @@ -1623,15 +1625,6 @@ static int node_add_link_drag(SpaceNode *snode, bNode *node, bNodeSocket *sock, } } } - - /* and last trick: insert a convertor when types dont match */ - if(snode->treetype==NTREE_SHADER) { - if(link->tosock->type!=link->fromsock->type) { - node_insert_convertor(snode, link); - /* so nice do it twice! well, the sort-order can only handle 1 added link at a time */ - ntreeSolveOrder(snode->edittree); - } - } } ntreeSolveOrder(snode->edittree); @@ -1763,6 +1756,33 @@ void node_insert_key(SpaceNode *snode) } } +void node_select_linked(SpaceNode *snode, int out) +{ + bNodeLink *link; + bNode *node; + + /* NODE_TEST is the free flag */ + for(node= snode->edittree->nodes.first; node; node= node->next) + node->flag &= ~NODE_TEST; + + for(link= snode->edittree->links.first; link; link= link->next) { + if(out) { + if(link->fromnode->flag & NODE_SELECT) + link->tonode->flag |= NODE_TEST; + } + else { + if(link->tonode->flag & NODE_SELECT) + link->fromnode->flag |= NODE_TEST; + } + } + + for(node= snode->edittree->nodes.first; node; node= node->next) + if(node->flag & NODE_TEST) + node->flag |= NODE_SELECT; + + BIF_undo_push("Select Linked nodes"); + allqueue(REDRAWNODE, 1); +} static void node_border_link_delete(SpaceNode *snode) { @@ -2089,6 +2109,9 @@ void winqreadnodespace(ScrArea *sa, void *spacedata, BWinEvent *evt) case IKEY: node_insert_key(snode); break; + case LKEY: + node_select_linked(snode, G.qual==LR_SHIFTKEY); + break; case RKEY: if(okee("Read saved Render Layers")) node_read_renderlayers(snode); |