[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31138] branches/particles-2010/source/ blender: Output data from nodes creates new jobs on linked nodes.

Lukas Toenne lukas.toenne at googlemail.com
Sat Aug 7 10:22:03 CEST 2010


Revision: 31138
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31138
Author:   lukastoenne
Date:     2010-08-07 10:22:03 +0200 (Sat, 07 Aug 2010)

Log Message:
-----------
Output data from nodes creates new jobs on linked nodes. Added a new node for setting vertex positions. This does not (yet) use the derived mesh system.

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/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/SIM_nodes/SIM_debugprint.c
    branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_get_vertex_data.c
    branches/particles-2010/source/blender/nodes/intern/SIM_util.c
    branches/particles-2010/source/blender/nodes/intern/SIM_util.h
    branches/particles-2010/source/blender/nodes/intern/node_tree_simulation.c

Added Paths:
-----------
    branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_set_vertex_data.c

Modified: branches/particles-2010/source/blender/blenkernel/BKE_node.h
===================================================================
--- branches/particles-2010/source/blender/blenkernel/BKE_node.h	2010-08-07 06:17:35 UTC (rev 31137)
+++ branches/particles-2010/source/blender/blenkernel/BKE_node.h	2010-08-07 08:22:03 UTC (rev 31138)
@@ -522,6 +522,7 @@
 #define SIM_NODE_GETOBJECTDATA		751
 #define SIM_NODE_SETOBJECTDATA		752
 #define SIM_NODE_GETVERTEXDATA		753
+#define SIM_NODE_SETVERTEXDATA		754
 
 /* TO BE REMOVED: debugging stuff, testing, etc. */
 #define SIM_NODE_DEBUGPRINT			801

Modified: branches/particles-2010/source/blender/blenkernel/intern/node.c
===================================================================
--- branches/particles-2010/source/blender/blenkernel/intern/node.c	2010-08-07 06:17:35 UTC (rev 31137)
+++ branches/particles-2010/source/blender/blenkernel/intern/node.c	2010-08-07 08:22:03 UTC (rev 31138)
@@ -2656,6 +2656,7 @@
 	nodeRegisterType(ntypelist, &sim_node_getobjectdata);
 	nodeRegisterType(ntypelist, &sim_node_setobjectdata);
 	nodeRegisterType(ntypelist, &sim_node_getvertexdata);
+	nodeRegisterType(ntypelist, &sim_node_setvertexdata);
 
 	nodeRegisterType(ntypelist, &sim_node_debugprint);
 }

Modified: branches/particles-2010/source/blender/editors/space_node/drawnode.c
===================================================================
--- branches/particles-2010/source/blender/editors/space_node/drawnode.c	2010-08-07 06:17:35 UTC (rev 31137)
+++ branches/particles-2010/source/blender/editors/space_node/drawnode.c	2010-08-07 08:22:03 UTC (rev 31138)
@@ -1288,6 +1288,15 @@
 	uiItemR(col, ptr, "object", 0, NULL, 0);
 }
 
+static void node_simulation_buts_setvertexdata(uiLayout *layout, bContext *C, PointerRNA *ptr)
+{
+//	bNode *node= ptr->data;
+	uiLayout *col;
+	
+	col= uiLayoutColumn(layout, 0);
+	uiItemR(col, ptr, "object", 0, NULL, 0);
+}
+
 /* only once called */
 static void node_simulation_set_butfunc(bNodeType *ntype)
 {
@@ -1301,6 +1310,9 @@
 	case SIM_NODE_GETVERTEXDATA:
 		ntype->uifunc = node_simulation_buts_getvertexdata;
 		break;
+	case SIM_NODE_SETVERTEXDATA:
+		ntype->uifunc = node_simulation_buts_setvertexdata;
+		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-08-07 06:17:35 UTC (rev 31137)
+++ branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c	2010-08-07 08:22:03 UTC (rev 31138)
@@ -2110,6 +2110,18 @@
 //	RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_get_vertex_data_update");
 }
 
+static void def_sim_setvertexdata(StructRNA *srna)
+{
+	PropertyRNA *prop;
+
+	prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
+	RNA_def_property_pointer_sdna(prop, NULL, "id");
+	RNA_def_property_struct_type(prop, "Object");
+	RNA_def_property_flag(prop, PROP_EDITABLE);
+	RNA_def_property_ui_text(prop, "Object", "");
+	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-08-07 06:17:35 UTC (rev 31137)
+++ branches/particles-2010/source/blender/makesrna/intern/rna_nodetree_types.h	2010-08-07 08:22:03 UTC (rev 31138)
@@ -160,5 +160,6 @@
 DefNode( SimulationNode, SIM_NODE_GETOBJECTDATA,  def_sim_getobjectdata,  "GETOBJECTDATA",  GetObjectData,    "Get Object Data",   ""              )
 DefNode( SimulationNode, SIM_NODE_SETOBJECTDATA,  def_sim_setobjectdata,  "SETOBJECTDATA",  SetObjectData,    "Set Object Data",   ""              )
 DefNode( SimulationNode, SIM_NODE_GETVERTEXDATA,  def_sim_getvertexdata,  "GETVERTEXDATA",  GetVertexData,    "Get Vertex Data",   ""              )
+DefNode( SimulationNode, SIM_NODE_SETVERTEXDATA,  def_sim_setvertexdata,  "SETVERTEXDATA",  SetVertexData,    "Set Vertex Data",   ""              )
 DefNode( SimulationNode, SIM_NODE_TIMESTEP,       0,                      "TIMESTEP",       TimeStep,         "Time Step",         ""              )
 DefNode( SimulationNode, SIM_NODE_DEBUGPRINT,     0,                      "DEBUGPRINT",     DebugPrint,       "Debug Print",       ""              )

Modified: branches/particles-2010/source/blender/nodes/SIM_node.h
===================================================================
--- branches/particles-2010/source/blender/nodes/SIM_node.h	2010-08-07 06:17:35 UTC (rev 31137)
+++ branches/particles-2010/source/blender/nodes/SIM_node.h	2010-08-07 08:22:03 UTC (rev 31138)
@@ -68,6 +68,7 @@
 extern bNodeType sim_node_getobjectdata;
 extern bNodeType sim_node_setobjectdata;
 extern bNodeType sim_node_getvertexdata;
+extern bNodeType sim_node_setvertexdata;
 
 extern bNodeType sim_node_debugprint;
 

Modified: branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_debugprint.c
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_debugprint.c	2010-08-07 06:17:35 UTC (rev 31137)
+++ branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_debugprint.c	2010-08-07 08:22:03 UTC (rev 31138)
@@ -31,50 +31,63 @@
 /* **************** Debug printing ******************** */
   
 static bNodeSocketType inputs[]= { 
-	{ SOCK_ANY, 1, "Value", 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1000000.0f },
+	{ SOCK_ANY, 1, "In", 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1000000.0f },
 	{ -1, 0, "" }
 };
 
 static bNodeSocketType outputs[]= { 
-	{ SOCK_OP, 0, "Exec", 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f },
+	{ SOCK_ANY, 0, "Out", 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f },
 	{ -1, 0, "" }
 };
 
-static void exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
+static int exec(SimNodeThreadContext *ctx, SimNodeJob *job)
 {
-#if 0
-//	SimulationContext *sim= (SimulationContext*)data;
-	float *vec;
-
-	printf("DEBUG: ");
-	switch (in[0]->sockettype) {
-	case SOCK_OP:
-		if (in[0]->ctx.node)
-			printf("Operator Node '%s'", in[0]->ctx.node->name);
-		break;
-	case SOCK_INT:
-		printf("Integer %d", sim_get_int(in[0]));
-		break;
-	case SOCK_BOOL:
-		if (sim_get_bool(in[0]))
-			printf("Boolean True");
-		else
-			printf("Boolean False");
-		break;
-	case SOCK_FLOAT:
-		printf("Float %f", sim_get_float(in[0]));
-		break;
-	case SOCK_VECTOR:
-		vec = sim_get_vector(in[0]);
-		printf("Vector (%f, %f, %f)", vec[0], vec[1], vec[2]);
-		break;
-	case SOCK_RGBA:
-		vec = sim_get_rgba(in[0]);
-		printf("RGBA (%f, %f, %f, %f)", vec[0], vec[1], vec[2], vec[3]);
-		break;
+	SimNodeDataStream istream[1];
+	SimNodeDataStream ostream[1];
+	int i, valid;
+	int ival;
+	char cval;
+	float fval, *vval;
+	
+	if (job->execlevel == 0)
+		printf("Debug print (node '%s', level %d)\n", job->node->node->name, job->execlevel);
+	valid = (sim_istream_init(istream, ctx, job) && sim_ostream_init(ostream, ctx, job, job->input_start));
+	for (i=0; valid; ++i) {
+		printf("Element %d: ", i);
+		switch (job->node->inputs[0]->datatype) {
+		case SOCK_FLOAT:
+			fval = sim_istream_read_float(istream, 0);
+			printf("%f", fval);
+			sim_ostream_write_float(ostream, 0, fval);
+			break;
+		case SOCK_INT:
+			ival = sim_istream_read_int(istream, 0);
+			printf("%d", ival);
+			sim_ostream_write_int(ostream, 0, ival);
+			break;
+		case SOCK_BOOL:
+			cval = sim_istream_read_bool(istream, 0);
+			printf("%f", fval);
+			sim_ostream_write_bool(ostream, 0, cval);
+			break;
+		case SOCK_VECTOR:
+			vval = sim_istream_read_vector(istream, 0);
+			printf("(%f, %f, %f)", vval[0], vval[1], vval[2]);
+			sim_ostream_write_vector(ostream, 0, vval);
+			break;
+		case SOCK_RGBA:
+			vval = sim_istream_read_rgba(istream, 0);
+			printf("[%f, %f, %f, %f]", vval[0], vval[1], vval[2], vval[3]);
+			sim_ostream_write_rgba(ostream, 0, vval);
+			break;
+		}
+		valid = sim_istream_next(istream) && sim_ostream_next(ostream);
+		printf("\n");
 	}
-	printf("\n");
-#endif
+	sim_istream_close(istream, ctx);
+	sim_ostream_close(ostream, ctx, job);
+	job->storage1 = i;	/* starting point when resuming */
+	return NODE_EXEC_FINISHED;
 }
 
 bNodeType sim_node_debugprint= {
@@ -86,10 +99,14 @@
 	/* input sock      */	inputs,
 	/* output sock     */	outputs,
 	/* storage         */	"",
-	/* execfunc        */	exec,	
+	/* execfunc        */	NULL,	
 	/* butfunc         */	NULL,
 	/* initfunc        */	NULL,
 	/* freestoragefunc */	NULL,
 	/* copysotragefunc */	NULL,
-	/* id              */	NULL
+	/* id              */	NULL,
+	/* pynode, pydict  */	NULL, NULL,
+	/* gpufunc         */	NULL,
+	/* sim_exec        */	exec,
+	/* sim_opexec      */	NULL
 };

Modified: branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_get_vertex_data.c
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_get_vertex_data.c	2010-08-07 06:17:35 UTC (rev 31137)
+++ branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_get_vertex_data.c	2010-08-07 08:22:03 UTC (rev 31138)
@@ -45,21 +45,9 @@
 	{ -1, 0, "" }
 };
 
-//static void exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
-//{
-//	bNodeSocket *out_pos = node->outputs.first;
-//	SimulationContext *sim= (SimulationContext*)data;
-//	Object *ob = (Object*)node->id;
-	
-//	if (ob && ob->type == OB_MESH) {
-//		Mesh *mesh = (Mesh*)ob->data;
-		
-//	}
-//}
-
-int exec(SimNodeThreadContext *ctx, SimNodeJob *job)
+static int exec(SimNodeThreadContext *ctx, SimNodeJob *job)
 {
-	SimNodeDataStream ostream[2];
+	SimNodeDataStream ostream[1];
 	Object *ob = (Object*)job->node->node->id;
 	
 	if (ob && ob->type == OB_MESH) {
@@ -68,16 +56,19 @@
 		if (mesh->totvert > 0) {
 			int i, valid;
 			
-			valid = sim_ostream_init(ostream, ctx, job);
-			for (i=0; valid && i < mesh->totvert; ++i) {
+			if (job->execlevel == 0)
+				job->storage1 = 0;
+			valid = sim_ostream_init(ostream, ctx, job, job->storage1);
+			for (i=job->storage1; valid && i < mesh->totvert; ++i) {
 				sim_ostream_write_vector(ostream, 0, mesh->mvert[i].co);
 				valid = sim_ostream_next(ostream);
 			}

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list