[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