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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user