Two fixes in drop-node-on-noodle:
- Intersection code was using undefined vector caused wrong lines to be picked - Code now also copes with hidden sockets. If all fails, is just unhides a good socket.
This commit is contained in:
parent
eed7702c99
commit
ffc490cbf1
@ -2494,13 +2494,33 @@ void NODE_OT_links_cut(wmOperatorType *ot)
|
|||||||
|
|
||||||
/* ********************* automatic node insert on dragging ******************* */
|
/* ********************* automatic node insert on dragging ******************* */
|
||||||
|
|
||||||
|
/* assumes sockets in list */
|
||||||
static bNodeSocket *socket_best_match(ListBase *sockets, int type)
|
static bNodeSocket *socket_best_match(ListBase *sockets, int type)
|
||||||
{
|
{
|
||||||
bNodeSocket *sock;
|
bNodeSocket *sock;
|
||||||
|
|
||||||
|
/* first, match type */
|
||||||
for(sock= sockets->first; sock; sock= sock->next)
|
for(sock= sockets->first; sock; sock= sock->next)
|
||||||
if(type == sock->type)
|
if(!(sock->flag & SOCK_HIDDEN))
|
||||||
|
if(type == sock->type)
|
||||||
|
return sock;
|
||||||
|
|
||||||
|
/* then just use first unhidden socket */
|
||||||
|
for(sock= sockets->first; sock; sock= sock->next)
|
||||||
|
if(!(sock->flag & SOCK_HIDDEN))
|
||||||
return sock;
|
return sock;
|
||||||
|
|
||||||
|
/* OK, let's unhide proper one */
|
||||||
|
for(sock= sockets->first; sock; sock= sock->next) {
|
||||||
|
if(type == sock->type) {
|
||||||
|
sock->flag &= ~SOCK_HIDDEN;
|
||||||
|
return sock;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* just the first */
|
||||||
|
sock= sockets->first;
|
||||||
|
sock->flag &= ~SOCK_HIDDEN;
|
||||||
|
|
||||||
return sockets->first;
|
return sockets->first;
|
||||||
}
|
}
|
||||||
@ -2577,7 +2597,7 @@ void ED_node_link_intersect_test(ScrArea *sa, int test)
|
|||||||
bNode *select;
|
bNode *select;
|
||||||
SpaceNode *snode= ed_node_link_conditions(sa, &select);
|
SpaceNode *snode= ed_node_link_conditions(sa, &select);
|
||||||
bNodeLink *link, *selink=NULL;
|
bNodeLink *link, *selink=NULL;
|
||||||
float mcoords[5][2];
|
float mcoords[6][2];
|
||||||
|
|
||||||
if(snode==NULL) return;
|
if(snode==NULL) return;
|
||||||
|
|
||||||
@ -2596,12 +2616,16 @@ void ED_node_link_intersect_test(ScrArea *sa, int test)
|
|||||||
mcoords[2][1]= select->totr.ymax;
|
mcoords[2][1]= select->totr.ymax;
|
||||||
mcoords[3][0]= select->totr.xmin;
|
mcoords[3][0]= select->totr.xmin;
|
||||||
mcoords[3][1]= select->totr.ymax;
|
mcoords[3][1]= select->totr.ymax;
|
||||||
|
mcoords[4][0]= select->totr.xmin;
|
||||||
|
mcoords[4][1]= select->totr.ymin;
|
||||||
|
mcoords[5][0]= select->totr.xmax;
|
||||||
|
mcoords[5][1]= select->totr.ymax;
|
||||||
|
|
||||||
/* we only tag a single link for intersect now */
|
/* we only tag a single link for intersect now */
|
||||||
/* idea; use header dist when more? */
|
/* idea; use header dist when more? */
|
||||||
for(link= snode->edittree->links.first; link; link=link->next) {
|
for(link= snode->edittree->links.first; link; link=link->next) {
|
||||||
|
|
||||||
if(cut_links_intersect(link, mcoords, 5)) { /* 5 - silly intersect code */
|
if(cut_links_intersect(link, mcoords, 5)) { /* intersect code wants edges */
|
||||||
if(selink)
|
if(selink)
|
||||||
break;
|
break;
|
||||||
selink= link;
|
selink= link;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user