Revision: 38614
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38614
Author:   ton
Date:     2011-07-22 16:39:06 +0000 (Fri, 22 Jul 2011)
Log Message:
-----------
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.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_node/node_edit.c

Modified: trunk/blender/source/blender/editors/space_node/node_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_edit.c 2011-07-22 
16:34:23 UTC (rev 38613)
+++ trunk/blender/source/blender/editors/space_node/node_edit.c 2011-07-22 
16:39:06 UTC (rev 38614)
@@ -2494,14 +2494,34 @@
 
 /* *********************  automatic node insert on dragging 
******************* */
 
+/* assumes sockets in list */
 static bNodeSocket *socket_best_match(ListBase *sockets, int type)
 {
        bNodeSocket *sock;
        
+       /* first, match type */
        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;
+
+       /* 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;
 }
 
@@ -2577,7 +2597,7 @@
        bNode *select;
        SpaceNode *snode= ed_node_link_conditions(sa, &select);
        bNodeLink *link, *selink=NULL;
-       float mcoords[5][2];
+       float mcoords[6][2];
        
        if(snode==NULL) return;
        
@@ -2596,12 +2616,16 @@
        mcoords[2][1]= select->totr.ymax;
        mcoords[3][0]= select->totr.xmin;
        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 */
        /* idea; use header dist when more? */
        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) 
                                break;
                        selink= link;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to