[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [38614] trunk/blender/source/blender/ editors/space_node/node_edit.c: Two fixes in drop-node-on-noodle:

Ton Roosendaal ton at blender.org
Fri Jul 22 18:39:06 CEST 2011


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;




More information about the Bf-blender-cvs mailing list