[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32394] branches/particles-2010/source/ blender: Added "for" and "while" control nodes.

Lukas Toenne lukas.toenne at googlemail.com
Sun Oct 10 10:48:04 CEST 2010


Revision: 32394
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32394
Author:   lukastoenne
Date:     2010-10-10 10:48:03 +0200 (Sun, 10 Oct 2010)

Log Message:
-----------
Added "for" and "while" control nodes. "while" has a safety limit for the number of iterations to avoid infinite loops.
Fixed the order of restoring pointers in readfile.c: socket list is now relinked before storage data, some nodes may need this.

Modified Paths:
--------------
    branches/particles-2010/source/blender/blenkernel/BKE_node.h
    branches/particles-2010/source/blender/blenkernel/intern/node.c
    branches/particles-2010/source/blender/blenloader/intern/readfile.c
    branches/particles-2010/source/blender/blenloader/intern/writefile.c
    branches/particles-2010/source/blender/editors/space_node/drawnode.c
    branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c
    branches/particles-2010/source/blender/makesrna/intern/rna_nodetree_types.h
    branches/particles-2010/source/blender/nodes/SIM_node.h
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_for.c
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_if.c

Added Paths:
-----------
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_while.c

Modified: branches/particles-2010/source/blender/blenkernel/BKE_node.h
===================================================================
--- branches/particles-2010/source/blender/blenkernel/BKE_node.h	2010-10-10 07:34:55 UTC (rev 32393)
+++ branches/particles-2010/source/blender/blenkernel/BKE_node.h	2010-10-10 08:48:03 UTC (rev 32394)
@@ -536,7 +536,8 @@
 #define SIM_NODE_PASS				603
 #define SIM_NODE_IF					604
 #define SIM_NODE_FOR				605
-#define SIM_NODE_FILTER				606
+#define SIM_NODE_WHILE				606
+#define SIM_NODE_FILTER				607
 
 /* scalar math */
 #define SIM_NODE_SCALAR_ADD			650

Modified: branches/particles-2010/source/blender/blenkernel/intern/node.c
===================================================================
--- branches/particles-2010/source/blender/blenkernel/intern/node.c	2010-10-10 07:34:55 UTC (rev 32393)
+++ branches/particles-2010/source/blender/blenkernel/intern/node.c	2010-10-10 08:48:03 UTC (rev 32394)
@@ -2323,6 +2323,7 @@
 	nodeRegisterType(ntypelist, &sim_node_pass);
 	nodeRegisterType(ntypelist, &sim_node_if);
 	nodeRegisterType(ntypelist, &sim_node_for);
+	nodeRegisterType(ntypelist, &sim_node_while);
 	nodeRegisterType(ntypelist, &sim_node_filter);
 
 	nodeRegisterType(ntypelist, &sim_node_scalar_add);

Modified: branches/particles-2010/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/particles-2010/source/blender/blenloader/intern/readfile.c	2010-10-10 07:34:55 UTC (rev 32393)
+++ branches/particles-2010/source/blender/blenloader/intern/readfile.c	2010-10-10 08:48:03 UTC (rev 32394)
@@ -2150,6 +2150,12 @@
 			node->typeinfo= NULL;
 		}
 		
+		link_list(fd, &node->inputs);
+		link_list(fd, &node->outputs);
+		
+		link_list(fd, &node->inpanels);
+		link_list(fd, &node->outpanels);
+		
 		node->storage= newdataadr(fd, node->storage);
 		if(node->storage) {
 			/* could be handlerized at some point */
@@ -2169,12 +2175,6 @@
 					direct_link_node_rna_data(fd, ntree, node);
 			}
 		}
-		
-		link_list(fd, &node->inputs);
-		link_list(fd, &node->outputs);
-		
-		link_list(fd, &node->inpanels);
-		link_list(fd, &node->outpanels);
 	}
 	link_list(fd, &ntree->links);
 	

Modified: branches/particles-2010/source/blender/blenloader/intern/writefile.c
===================================================================
--- branches/particles-2010/source/blender/blenloader/intern/writefile.c	2010-10-10 07:34:55 UTC (rev 32393)
+++ branches/particles-2010/source/blender/blenloader/intern/writefile.c	2010-10-10 08:48:03 UTC (rev 32394)
@@ -492,6 +492,22 @@
 		writestruct(wd, DATA, "bNode", 1, node);
 
 	for(node= ntree->nodes.first; node; node= node->next) {
+		for(sock= node->inputs.first; sock; sock= sock->next) {
+			writestruct(wd, DATA, "bNodeSocket", 1, sock);
+			if (sock->storage)
+				writestruct(wd, DATA, node->typeinfo->socketstoragename, 1, sock->storage);
+		}
+		for(sock= node->outputs.first; sock; sock= sock->next) {
+			writestruct(wd, DATA, "bNodeSocket", 1, sock);
+			if (sock->storage)
+				writestruct(wd, DATA, node->typeinfo->socketstoragename, 1, sock->storage);
+		}
+		
+		for(panel=node->inpanels.first; panel; panel = panel->next)
+			writestruct(wd, DATA, "bNodeSocketPanel", 1, panel);
+		for(panel=node->outpanels.first; panel; panel = panel->next)
+			writestruct(wd, DATA, "bNodeSocketPanel", 1, panel);
+		
 		if(node->storage && node->type!=NODE_DYNAMIC) {
 			/* could be handlerized at some point, now only 1 exception still */
 			if(ntree->type==NTREE_SHADER && (node->type==SH_NODE_CURVE_VEC || node->type==SH_NODE_CURVE_RGB))
@@ -508,23 +524,8 @@
 				writestruct(wd, DATA, node->typeinfo->storagename, 1, node->storage);
 		}
 		
-		for(sock= node->inputs.first; sock; sock= sock->next) {
-			writestruct(wd, DATA, "bNodeSocket", 1, sock);
-			if (sock->storage)
-				writestruct(wd, DATA, node->typeinfo->socketstoragename, 1, sock->storage);
-		}
-		for(sock= node->outputs.first; sock; sock= sock->next) {
-			writestruct(wd, DATA, "bNodeSocket", 1, sock);
-			if (sock->storage)
-				writestruct(wd, DATA, node->typeinfo->socketstoragename, 1, sock->storage);
-		}
 		if (node->type==SIM_NODE_GETDATA || node->type==SIM_NODE_SETDATA)
 			write_node_socket_properties(wd, node);
-		
-		for(panel=node->inpanels.first; panel; panel = panel->next)
-			writestruct(wd, DATA, "bNodeSocketPanel", 1, panel);
-		for(panel=node->outpanels.first; panel; panel = panel->next)
-			writestruct(wd, DATA, "bNodeSocketPanel", 1, panel);
 	}
 	
 	for(link= ntree->links.first; link; link= link->next)

Modified: branches/particles-2010/source/blender/editors/space_node/drawnode.c
===================================================================
--- branches/particles-2010/source/blender/editors/space_node/drawnode.c	2010-10-10 07:34:55 UTC (rev 32393)
+++ branches/particles-2010/source/blender/editors/space_node/drawnode.c	2010-10-10 08:48:03 UTC (rev 32394)
@@ -1295,6 +1295,14 @@
 	simnode_setdata_add_rna_socket_search(layout, node);
 }
 
+static void node_simulation_buts_while(uiLayout *layout, bContext *C, PointerRNA *ptr)
+{
+	uiLayout *col;
+	
+	col= uiLayoutColumn(layout, 0);
+	uiItemR(col, ptr, "max_iterations", 0, NULL, 0);
+}
+
 /* only once called */
 static void node_simulation_set_butfunc(bNodeType *ntype)
 {
@@ -1305,6 +1313,9 @@
 	case SIM_NODE_SETDATA:
 		ntype->uifunc = node_simulation_buts_setdata;
 		break;
+	case SIM_NODE_WHILE:
+		ntype->uifunc = node_simulation_buts_while;
+		break;
 		
 	default:
 		ntype->uifunc= NULL;

Modified: branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c
===================================================================
--- branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c	2010-10-10 07:34:55 UTC (rev 32393)
+++ branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c	2010-10-10 08:48:03 UTC (rev 32394)
@@ -2239,6 +2239,17 @@
 	RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
 }
 
+static void def_sim_while(StructRNA *srna)
+{
+	PropertyRNA *prop;
+
+	prop = RNA_def_property(srna, "max_iterations", PROP_INT, PROP_UNSIGNED);
+	RNA_def_property_int_sdna(prop, NULL, "custom1");
+	RNA_def_property_int_default(prop, 1000);
+	RNA_def_property_ui_text(prop, "Max. Iterations", "Safety limit for while-loop iterations");
+	RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+}
+
 /* -------------------------------------------------------------------------- */
 
 static EnumPropertyItem shader_node_type_items[MaxNodes];

Modified: branches/particles-2010/source/blender/makesrna/intern/rna_nodetree_types.h
===================================================================
--- branches/particles-2010/source/blender/makesrna/intern/rna_nodetree_types.h	2010-10-10 07:34:55 UTC (rev 32393)
+++ branches/particles-2010/source/blender/makesrna/intern/rna_nodetree_types.h	2010-10-10 08:48:03 UTC (rev 32394)
@@ -138,6 +138,7 @@
 DefNode( SimulationNode, SIM_NODE_PASS,           0,                      "PASS",           Pass,             "Pass",              ""              )
 DefNode( SimulationNode, SIM_NODE_IF,             0,                      "IF",             If,               "If",                ""              )
 DefNode( SimulationNode, SIM_NODE_FOR,            0,                      "FOR",            For,              "For",               ""              )
+DefNode( SimulationNode, SIM_NODE_WHILE,          def_sim_while,          "WHILE",          While,            "While",             ""              )
 DefNode( SimulationNode, SIM_NODE_FILTER,         0,                      "FILTER",         Filter,           "Filter",            ""              )
 DefNode( SimulationNode, SIM_NODE_SCALAR_ADD,     0,                      "SCALAR_ADD",     ScalarAdd,        "Add",               ""              )
 DefNode( SimulationNode, SIM_NODE_SCALAR_SUBTRACT, 0,                     "SCALAR_SUBTRACT", ScalarSubtract,  "Subtract",          ""              )

Modified: branches/particles-2010/source/blender/nodes/SIM_node.h
===================================================================
--- branches/particles-2010/source/blender/nodes/SIM_node.h	2010-10-10 07:34:55 UTC (rev 32393)
+++ branches/particles-2010/source/blender/nodes/SIM_node.h	2010-10-10 08:48:03 UTC (rev 32394)
@@ -44,6 +44,7 @@
 extern bNodeType sim_node_pass;
 extern bNodeType sim_node_if;
 extern bNodeType sim_node_for;
+extern bNodeType sim_node_while;
 extern bNodeType sim_node_filter;
 
 extern bNodeType sim_node_scalar_add;

Modified: branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_for.c
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_for.c	2010-10-10 07:34:55 UTC (rev 32393)
+++ branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_for.c	2010-10-10 08:48:03 UTC (rev 32394)
@@ -29,9 +29,6 @@
 #include "../SIM_util.h"
 
 /* **************** Execute a number of times ******************** */
-/* This node implements an execution sequence.
- * It is the central entry point for any simulation.
- */
 
 static bNodeSocketType inputs[]= { 
 	{ SOCK_INT, 1, "Iterations", 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1000.0f },
@@ -44,6 +41,20 @@
 	{ -1, 0, "" }
 };
 
+static void enqueue_op(SimExecData *execdata, SimNodeStack *node, SimDataContext *self, int execlevel, int *pushop)
+{
+	int iterations;
+	SimSocketIterator sockiter;
+	
+	sim_input_begin(execdata, node->instack[0], &sockiter);
+	sim_input_read_int(execdata, &sockiter, &iterations);
+	sim_input_end(execdata, &sockiter);
+	if (execdata->error) return;
+	
+	if (execlevel < iterations)
+		*pushop = 1;
+}
+
 bNodeType sim_node_for= {
 	/* *next,*prev     */	NULL, NULL,
 	/* type code       */	SIM_NODE_FOR,
@@ -61,5 +72,12 @@
 	/* id              */	NULL,
 	/* pynode, pydict  */	NULL, NULL,
 	/* gpufunc         */	NULL,
-	/* updatefunc      */	NULL
+	/* updatefunc      */	NULL,
+	/* socketstoragename */	"",
+	/* initsocketfunc  */	NULL,
+	/* copysocketstoragefunc */	NULL,
+	/* freesocketstoragefunc */	NULL,
+	/* generate_source */	NULL,
+	/* enqueue         */	NULL,
+	/* enqueue         */	enqueue_op
 };

Modified: branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_if.c
===================================================================

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list