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
This commit is contained in:
2006-12-08 21:20:36 +00:00
parent 00becf015b
commit 7f1e3874f9
7 changed files with 152 additions and 50 deletions

View File

@@ -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);