[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47775] trunk/blender/source/blender/nodes /intern/node_common.c: Reroute node socket types update automatically from connections when possible .

Lukas Toenne lukas.toenne at googlemail.com
Tue Jun 12 10:28:38 CEST 2012


Revision: 47775
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47775
Author:   lukastoenne
Date:     2012-06-12 08:28:25 +0000 (Tue, 12 Jun 2012)
Log Message:
-----------
Reroute node socket types update automatically from connections when possible. This prevents unnecessary conversions and breaking connections when linking incompatible types to the reroute color sockets (point in case: cycles shaders).

Modified Paths:
--------------
    trunk/blender/source/blender/nodes/intern/node_common.c

Modified: trunk/blender/source/blender/nodes/intern/node_common.c
===================================================================
--- trunk/blender/source/blender/nodes/intern/node_common.c	2012-06-12 08:10:34 UTC (rev 47774)
+++ trunk/blender/source/blender/nodes/intern/node_common.c	2012-06-12 08:28:25 UTC (rev 47775)
@@ -853,7 +853,7 @@
 };
 
 /* simple, only a single input and output here */
-ListBase node_reroute_internal_connect(bNodeTree *ntree, bNode *node)
+static ListBase node_reroute_internal_connect(bNodeTree *ntree, bNode *node)
 {
 	bNodeLink *link;
 	ListBase ret;
@@ -876,6 +876,23 @@
 	return ret;
 }
 
+static void node_reroute_update(bNodeTree *UNUSED(ntree), bNode *node)
+{
+	bNodeSocket *input = node->inputs.first;
+	bNodeSocket *output = node->outputs.first;
+	int type = SOCK_FLOAT;
+	
+	/* determine socket type from unambiguous input/output connection if possible */
+	if (input->limit==1 && input->link)
+		type = input->link->fromsock->type;
+	else if (output->limit==1 && output->link)
+			type = output->link->tosock->type;
+	
+	/* same type for input/output */
+	nodeSocketSetType(input, type);
+	nodeSocketSetType(output, type);
+}
+
 void register_node_type_reroute(bNodeTreeType *ttype)
 {
 	/* frame type is used for all tree types, needs dynamic allocation */
@@ -884,6 +901,7 @@
 	node_type_base(ttype, ntype, NODE_REROUTE, "Reroute", NODE_CLASS_LAYOUT, 0);
 	node_type_socket_templates(ntype, node_reroute_in, node_reroute_out);
 	node_type_internal_connect(ntype, node_reroute_internal_connect);
+	node_type_update(ntype, node_reroute_update, NULL);
 	
 	ntype->needs_free = 1;
 	nodeRegisterType(ttype, ntype);




More information about the Bf-blender-cvs mailing list