[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33254] branches/particles-2010/source/ blender/nodes/intern: ID properties can now be accessed by data nodes, in addition to RNA properties and particle properties.

Lukas Toenne lukas.toenne at googlemail.com
Tue Nov 23 13:33:44 CET 2010


Revision: 33254
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33254
Author:   lukastoenne
Date:     2010-11-23 13:33:44 +0100 (Tue, 23 Nov 2010)

Log Message:
-----------
ID properties can now be accessed by data nodes, in addition to RNA properties and particle properties. They are created automatically whenever a data node has a new socket without an existing, matching ID property.

Modified Paths:
--------------
    branches/particles-2010/source/blender/nodes/intern/SIM_intern.c
    branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_get_data.c
    branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_set_data.c
    branches/particles-2010/source/blender/nodes/intern/SIM_util.c
    branches/particles-2010/source/blender/nodes/intern/SIM_util.h

Modified: branches/particles-2010/source/blender/nodes/intern/SIM_intern.c
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/SIM_intern.c	2010-11-23 12:23:19 UTC (rev 33253)
+++ branches/particles-2010/source/blender/nodes/intern/SIM_intern.c	2010-11-23 12:33:44 UTC (rev 33254)
@@ -189,7 +189,7 @@
 	MEM_freeN(job);
 }
 
-void sim_finish_job(SimExecData *execdata, SimJob *job)
+void sim_finish_job(SimExecData *UNUSED(execdata), SimJob *job)
 {
 	job->event->status = SIM_COMPLETE;
 	for (job=job->next; job; job = job->next) {

Modified: branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_get_data.c
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_get_data.c	2010-11-23 12:23:19 UTC (rev 33253)
+++ branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_get_data.c	2010-11-23 12:33:44 UTC (rev 33254)
@@ -30,6 +30,7 @@
 
 #include "DNA_particleset_types.h"
 
+#include "BKE_idprop.h"
 #include "BKE_main.h"
 #include "BKE_node.h"
 #include "BKE_particleset.h"
@@ -262,6 +263,23 @@
 		}
 	}
 	else if (data->type == SIM_DATA_IDPROP) {
+		StructRNA *type= sim_context_type(&out->context);
+		if (type && RNA_struct_is_ID(type)) {
+			CollectionPropertyIterator colliter;
+			RNA_property_collection_begin(&out->context.ptr, out->context.prop, &colliter);
+			while (colliter.valid) {
+				IDProperty *group, *idprop= NULL;
+				group = IDP_GetProperties((ID*)colliter.ptr.data, 0);
+				if (group)
+					idprop = sim_idprop_find(group, out->base->name);
+				if (idprop)
+					sim_idprop_socket_write(execdata, idprop, &sockiter);
+				
+				RNA_property_collection_next(&colliter);
+				sim_input_next(execdata, &sockiter);
+			}
+			RNA_property_collection_end(&colliter);
+		}
 	}
 	else if (data->type == SIM_DATA_PARPROP) {
 		ID *id= sim_context_id(&out->context);
@@ -296,6 +314,15 @@
 		}
 	}
 	else if (data->type == SIM_DATA_IDPROP) {
+		StructRNA *type= sim_context_type(&out->context);
+		if (type && RNA_struct_is_ID(type)) {
+			IDProperty *group, *idprop= NULL;
+			group = IDP_GetProperties((ID*)out->context.ptr.data, 0);
+			if (group)
+				idprop = sim_idprop_find(group, out->base->name);
+			if (idprop)
+				sim_idprop_socket_write(execdata, idprop, &sockiter);
+		}
 	}
 	else if (data->type == SIM_DATA_PARPROP) {
 		ID *id= sim_context_id(&out->context);

Modified: branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_set_data.c
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_set_data.c	2010-11-23 12:23:19 UTC (rev 33253)
+++ branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_set_data.c	2010-11-23 12:33:44 UTC (rev 33254)
@@ -29,6 +29,7 @@
 #include "../SIM_util.h"
 
 #include "BKE_depsgraph.h"
+#include "BKE_idprop.h"
 #include "BKE_main.h"
 #include "BKE_node.h"
 #include "BKE_particleset.h"
@@ -240,6 +241,7 @@
 			while (colliter.valid) {
 				sim_rna_socket_read(execdata, &colliter.ptr, prop, &sockiter);
 				RNA_property_update_main(G.main, ctx->scene, &colliter.ptr, prop);
+				
 				RNA_property_collection_next(&colliter);
 				sim_input_next(execdata, &sockiter);
 			}
@@ -247,6 +249,21 @@
 		}
 	}
 	else if (data->type == SIM_DATA_IDPROP) {
+		StructRNA *type= sim_context_type(ctx);
+		if (type && RNA_struct_is_ID(type)) {
+			CollectionPropertyIterator colliter;
+			IDProperty *group, *idprop;
+			RNA_property_collection_begin(&ctx->ptr, ctx->prop, &colliter);
+			while (colliter.valid) {
+				group = IDP_GetProperties((ID*)colliter.ptr.data, 1);
+				idprop = sim_idprop_create(group, sock->name, sock->type);
+				sim_idprop_socket_read(execdata, idprop, &sockiter);
+				
+				RNA_property_collection_next(&colliter);
+				sim_input_next(execdata, &sockiter);
+			}
+			RNA_property_collection_end(&colliter);
+		}
 	}
 	else if (data->type == SIM_DATA_PARPROP) {
 		ID *id= sim_context_id(ctx);
@@ -283,6 +300,13 @@
 		}
 	}
 	else if (data->type == SIM_DATA_IDPROP) {
+		StructRNA *type= sim_context_type(ctx);
+		if (type && RNA_struct_is_ID(type)) {
+			IDProperty *group, *idprop;
+			group = IDP_GetProperties((ID*)ctx->ptr.data, 1);
+			idprop = sim_idprop_create(group, sock->name, sock->type);
+			sim_idprop_socket_read(execdata, idprop, &sockiter);
+		}
 	}
 	else if (data->type == SIM_DATA_PARPROP) {
 		ID *id= sim_context_id(ctx);

Modified: branches/particles-2010/source/blender/nodes/intern/SIM_util.c
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/SIM_util.c	2010-11-23 12:23:19 UTC (rev 33253)
+++ branches/particles-2010/source/blender/nodes/intern/SIM_util.c	2010-11-23 12:33:44 UTC (rev 33254)
@@ -40,6 +40,7 @@
 
 #include "BLI_threads.h"
 
+#include "BKE_idprop.h"
 #include "BKE_main.h"
 #include "BKE_node.h"
 #include "BKE_particleset.h"
@@ -550,7 +551,7 @@
 	}
 }
 
-void sim_input_read_float(SimExecData *execdata, SimSocketIterator *iter, float *result)
+void sim_input_read_float(SimExecData *UNUSED(execdata), SimSocketIterator *iter, float *result)
 {
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
@@ -573,7 +574,7 @@
 	}
 }
 
-void sim_input_read_int(SimExecData *execdata, SimSocketIterator *iter, int *result)
+void sim_input_read_int(SimExecData *UNUSED(execdata), SimSocketIterator *iter, int *result)
 {
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
@@ -596,7 +597,7 @@
 	}
 }
 
-void sim_input_read_bool(SimExecData *execdata, SimSocketIterator *iter, char *result)
+void sim_input_read_bool(SimExecData *UNUSED(execdata), SimSocketIterator *iter, char *result)
 {
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
@@ -619,7 +620,7 @@
 	}
 }
 
-void sim_input_read_vector(SimExecData *execdata, SimSocketIterator *iter, float result[3])
+void sim_input_read_vector(SimExecData *UNUSED(execdata), SimSocketIterator *iter, float result[3])
 {
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
@@ -654,7 +655,7 @@
 	}
 }
 
-void sim_input_read_rgba(SimExecData *execdata, SimSocketIterator *iter, float result[4])
+void sim_input_read_rgba(SimExecData *UNUSED(execdata), SimSocketIterator *iter, float result[4])
 {
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
@@ -709,7 +710,7 @@
 	}
 }
 
-void sim_input_read_quat(SimExecData *execdata, SimSocketIterator *iter, float result[4])
+void sim_input_read_quat(SimExecData *UNUSED(execdata), SimSocketIterator *iter, float result[4])
 {
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
@@ -740,7 +741,7 @@
 	}
 }
 
-void sim_input_read_matrix(SimExecData *execdata, SimSocketIterator *iter, float result[4][4])
+void sim_input_read_matrix(SimExecData *UNUSED(execdata), SimSocketIterator *iter, float result[4][4])
 {
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
@@ -798,7 +799,7 @@
 	}
 }
 
-void sim_input_read_string(SimExecData *execdata, SimSocketIterator *iter, char *result)
+void sim_input_read_string(SimExecData *UNUSED(execdata), SimSocketIterator *iter, char *result)
 {
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
@@ -823,7 +824,7 @@
 	}
 }
 
-void sim_input_read_surfacepoint(SimExecData *execdata, SimSocketIterator *iter, SurfacePoint *result)
+void sim_input_read_surfacepoint(SimExecData *UNUSED(execdata), SimSocketIterator *iter, SurfacePoint *result)
 {
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
@@ -932,7 +933,7 @@
 	}
 }
 
-void sim_output_write_float(SimExecData *execdata, SimSocketIterator *iter, float value)
+void sim_output_write_float(SimExecData *UNUSED(execdata), SimSocketIterator *iter, float value)
 {
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
@@ -945,7 +946,7 @@
 	}
 }
 
-void sim_output_write_int(SimExecData *execdata, SimSocketIterator *iter, int value)
+void sim_output_write_int(SimExecData *UNUSED(execdata), SimSocketIterator *iter, int value)
 {
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
@@ -958,7 +959,7 @@
 	}
 }
 
-void sim_output_write_bool(SimExecData *execdata, SimSocketIterator *iter, char value)
+void sim_output_write_bool(SimExecData *UNUSED(execdata), SimSocketIterator *iter, char value)
 {
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
@@ -971,7 +972,7 @@
 	}
 }
 
-void sim_output_write_vector(SimExecData *execdata, SimSocketIterator *iter, float value[3])
+void sim_output_write_vector(SimExecData *UNUSED(execdata), SimSocketIterator *iter, float value[3])
 {
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
@@ -987,7 +988,7 @@
 	}
 }
 
-void sim_output_write_rgba(SimExecData *execdata, SimSocketIterator *iter, float value[4])
+void sim_output_write_rgba(SimExecData *UNUSED(execdata), SimSocketIterator *iter, float value[4])
 {
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
@@ -1006,7 +1007,7 @@
 	}
 }
 
-void sim_output_write_quat(SimExecData *execdata, SimSocketIterator *iter, float value[4])
+void sim_output_write_quat(SimExecData *UNUSED(execdata), SimSocketIterator *iter, float value[4])
 {
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
@@ -1022,7 +1023,7 @@
 	}
 }
 
-void sim_output_write_matrix(SimExecData *execdata, SimSocketIterator *iter, float value[4][4])
+void sim_output_write_matrix(SimExecData *UNUSED(execdata), SimSocketIterator *iter, float value[4][4])
 {
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
@@ -1050,7 +1051,7 @@
 	}
 }
 
-void sim_output_write_string(SimExecData *execdata, SimSocketIterator *iter, const char *value)
+void sim_output_write_string(SimExecData *UNUSED(execdata), SimSocketIterator *iter, const char *value)
 {
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
@@ -1065,7 +1066,7 @@
 	}
 }
 
-void sim_output_write_surfacepoint(SimExecData *execdata, SimSocketIterator *iter, const SurfacePoint *value)
+void sim_output_write_surfacepoint(SimExecData *UNUSED(execdata), SimSocketIterator *iter, const SurfacePoint *value)
 {
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
@@ -1489,6 +1490,195 @@
 	}
 }
 
+
+struct IDProperty *sim_idprop_find(struct IDProperty *group, const char *name)
+{
+	IDProperty *prop;
+	void *iter;
+	
+	/* XXX does no type or array length check! this is done in the read/write functions, but could be moved here */
+	iter = IDP_GetGroupIterator(group);
+	for (prop=IDP_GroupIterNext(iter); prop; prop=IDP_GroupIterNext(iter)) {
+		if (strcmp(prop->name, name)==0) {
+			IDP_FreeIterBeforeEnd(iter);
+			return prop;
+		}
+	}
+	return NULL;
+}
+

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list