[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31855] branches/particles-2010/source/ blender: fixed saving/loading of data node socket properties.
Lukas Toenne
lukas.toenne at googlemail.com
Fri Sep 10 14:46:44 CEST 2010
Revision: 31855
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31855
Author: lukastoenne
Date: 2010-09-10 14:46:43 +0200 (Fri, 10 Sep 2010)
Log Message:
-----------
fixed saving/loading of data node socket properties. similar to data node StructRNA types, these are saved and reconstructed from their PropertyRNA identifier strings.
Modified Paths:
--------------
branches/particles-2010/source/blender/blenkernel/BKE_node.h
branches/particles-2010/source/blender/blenloader/intern/readfile.c
branches/particles-2010/source/blender/blenloader/intern/writefile.c
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_get_data.c
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_if.c
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_program.c
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_set_data.c
Modified: branches/particles-2010/source/blender/blenkernel/BKE_node.h
===================================================================
--- branches/particles-2010/source/blender/blenkernel/BKE_node.h 2010-09-10 08:36:14 UTC (rev 31854)
+++ branches/particles-2010/source/blender/blenkernel/BKE_node.h 2010-09-10 12:46:43 UTC (rev 31855)
@@ -115,6 +115,8 @@
/* called when the node is updated (e.g. linked) in the editor. */
void (*updatefunc)(struct bNodeTree *ntree, struct bNode *node);
+
+ char socketstoragename[64]; /* socket storage struct name for DNA */
void (*initsocketfunc)(struct bNodeSocket *sock);
void (*copysocketstoragefunc)(struct bNodeSocket *from, struct bNodeSocket *to);
void (*freesocketstoragefunc)(struct bNodeSocket *sock);
Modified: branches/particles-2010/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/particles-2010/source/blender/blenloader/intern/readfile.c 2010-09-10 08:36:14 UTC (rev 31854)
+++ branches/particles-2010/source/blender/blenloader/intern/readfile.c 2010-09-10 12:46:43 UTC (rev 31855)
@@ -2073,7 +2073,7 @@
*/
RNA_string_set(&ptr, "typename", rna_data->save_type);
- /* save_type is only needed for restoring the type */
+ /* save_type is only needed for restoring the type pointer */
MEM_freeN((void*)rna_data->save_type);
rna_data->save_type = NULL;
}
@@ -2081,6 +2081,49 @@
RNA_string_set(&ptr, "typename", "");
}
+static void direct_link_node_socket_properties(FileData *fd, bNode *node)
+{
+ NodeRNAData *rna_data= (NodeRNAData*)node->storage;
+ bNodeSocket *sock;
+
+ if (node->type==SIM_NODE_GETDATA)
+ sock= ((bNodeSocket*)node->outputs.first)->next;
+ else if (node->type==SIM_NODE_GETDATA)
+ sock= ((bNodeSocket*)node->inputs.first)->next;
+ else
+ sock= NULL;
+
+ for (; sock; sock = sock->next) {
+ NodeSocketProperty *sockprop= (NodeSocketProperty*)sock->storage;
+
+ /* restore the identifier string */
+ sockprop->save_prop = newdataadr(fd, (void*)sockprop->save_prop);
+
+ if (sockprop->save_prop != NULL) {
+ if (rna_data->type != NULL) {
+ const ListBase *lb;
+ Link *link;
+ PropertyRNA *prop;
+
+ lb = RNA_struct_defined_properties(rna_data->type);
+ for (link=lb->first; link; link = link->next) {
+ prop = (PropertyRNA *)link;
+ if (strcmp(RNA_property_ui_name(prop), sockprop->save_prop)==0) {
+ sockprop->prop = prop;
+ break;
+ }
+ }
+
+ /* save_prop is only needed for restoring the property pointer */
+ MEM_freeN((void*)sockprop->save_prop);
+ sockprop->save_prop = NULL;
+ }
+ }
+ else
+ sockprop->prop = NULL;
+ }
+}
+
extern StructRNA RNA_SimulationNodeGetData;
extern StructRNA RNA_SimulationNodeSetData;
/* ntree itself has been read! */
@@ -2143,6 +2186,9 @@
sock->ns.data= NULL;
sock->storage= newdataadr(fd, sock->storage);
}
+
+ if (node->type==SIM_NODE_GETDATA || node->type==SIM_NODE_SETDATA)
+ direct_link_node_socket_properties(fd, node);
}
for(link= ntree->links.first; link; link= link->next) {
link->fromnode= newdataadr(fd, link->fromnode);
Modified: branches/particles-2010/source/blender/blenloader/intern/writefile.c
===================================================================
--- branches/particles-2010/source/blender/blenloader/intern/writefile.c 2010-09-10 08:36:14 UTC (rev 31854)
+++ branches/particles-2010/source/blender/blenloader/intern/writefile.c 2010-09-10 12:46:43 UTC (rev 31855)
@@ -489,9 +489,13 @@
}
for(sock= node->inputs.first; sock; sock= sock->next) {
writestruct(wd, DATA, "bNodeSocket", 1, sock);
+ if (node->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 (node->storage)
+ writestruct(wd, DATA, node->typeinfo->socketstoragename, 1, sock->storage);
}
}
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-09-10 08:36:14 UTC (rev 31854)
+++ branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_get_data.c 2010-09-10 12:46:43 UTC (rev 31855)
@@ -345,6 +345,7 @@
/* pynode, pydict */ NULL, NULL,
/* gpufunc */ NULL,
/* updatefunc */ update,
+ /* socketstoragename */ "NodeSocketProperty",
/* initsocketfunc */ initsocket,
/* copysocketstoragefunc */ copysocketstorage,
/* freesocketstoragefunc */ freesocketstorage,
Modified: branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_if.c
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_if.c 2010-09-10 08:36:14 UTC (rev 31854)
+++ branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_if.c 2010-09-10 12:46:43 UTC (rev 31855)
@@ -67,6 +67,7 @@
/* pynode, pydict */ NULL, NULL,
/* gpufunc */ NULL,
/* updatefunc */ NULL,
+ /* socketstoragename */ "",
/* initsocketfunc */ NULL,
/* copysocketstoragefunc */ NULL,
/* freesocketstoragefunc */ NULL,
Modified: branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_program.c
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_program.c 2010-09-10 08:36:14 UTC (rev 31854)
+++ branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_program.c 2010-09-10 12:46:43 UTC (rev 31855)
@@ -92,6 +92,7 @@
/* pynode, pydict */ NULL, NULL,
/* gpufunc */ NULL,
/* updatefunc */ update,
+ /* socketstoragename */ "",
/* initsocketfunc */ NULL,
/* copysocketstoragefunc */ NULL,
/* freesocketstoragefunc */ NULL,
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-09-10 08:36:14 UTC (rev 31854)
+++ branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_set_data.c 2010-09-10 12:46:43 UTC (rev 31855)
@@ -182,6 +182,7 @@
static void enqueue_input(SimExecData *execdata, SimDataContext *ctx, SimSocketStack *in)
{
int datasize = sim_get_data_size(in->type);
+ PropertyRNA *prop= ((NodeSocketProperty*)in->base->storage)->prop;
if (sim_context_is_collection(ctx)) {
CollectionPropertyIterator iter;
@@ -212,8 +213,8 @@
switch (in->type) {
case SOCK_FLOAT:
while (iter.valid) {
- RNA_property_float_set(&iter.ptr, (PropertyRNA*)in->base->storage, *(float*)cur);
- RNA_property_update_main(G.main, ctx->scene, &iter.ptr, (PropertyRNA*)in->base->storage);
+ RNA_property_float_set(&iter.ptr, prop, *(float*)cur);
+ RNA_property_update_main(G.main, ctx->scene, &iter.ptr, prop);
RNA_property_collection_next(&iter);
++i;
if (i < in->context.size)
@@ -222,8 +223,8 @@
break;
case SOCK_INT:
while (iter.valid) {
- RNA_property_int_set(&iter.ptr, (PropertyRNA*)in->base->storage, *(int*)cur);
- RNA_property_update_main(G.main, ctx->scene, &iter.ptr, (PropertyRNA*)in->base->storage);
+ RNA_property_int_set(&iter.ptr, prop, *(int*)cur);
+ RNA_property_update_main(G.main, ctx->scene, &iter.ptr, prop);
RNA_property_collection_next(&iter);
++i;
if (i < in->context.size)
@@ -232,8 +233,8 @@
break;
case SOCK_BOOL:
while (iter.valid) {
- RNA_property_boolean_set(&iter.ptr, (PropertyRNA*)in->base->storage, (int)(*(char*)cur));
- RNA_property_update_main(G.main, ctx->scene, &iter.ptr, (PropertyRNA*)in->base->storage);
+ RNA_property_boolean_set(&iter.ptr, prop, (int)(*(char*)cur));
+ RNA_property_update_main(G.main, ctx->scene, &iter.ptr, prop);
RNA_property_collection_next(&iter);
++i;
if (i < in->context.size)
@@ -242,8 +243,8 @@
break;
case SOCK_VECTOR:
while (iter.valid) {
- RNA_property_float_set_array(&iter.ptr, (PropertyRNA*)in->base->storage, (float*)cur);
- RNA_property_update_main(G.main, ctx->scene, &iter.ptr, (PropertyRNA*)in->base->storage);
+ RNA_property_float_set_array(&iter.ptr, prop, (float*)cur);
+ RNA_property_update_main(G.main, ctx->scene, &iter.ptr, prop);
RNA_property_collection_next(&iter);
++i;
if (i < in->context.size)
@@ -252,8 +253,8 @@
break;
case SOCK_RGBA:
while (iter.valid) {
- RNA_property_float_set_array(&iter.ptr, (PropertyRNA*)in->base->storage, (float*)cur);
- RNA_property_update_main(G.main, ctx->scene, &iter.ptr, (PropertyRNA*)in->base->storage);
+ RNA_property_float_set_array(&iter.ptr, prop, (float*)cur);
+ RNA_property_update_main(G.main, ctx->scene, &iter.ptr, prop);
RNA_property_collection_next(&iter);
++i;
if (i < in->context.size)
@@ -262,8 +263,8 @@
break;
case SOCK_STRING:
while (iter.valid) {
- RNA_property_string_set(&iter.ptr, (PropertyRNA*)in->base->storage, (char*)cur);
- RNA_property_update_main(G.main, ctx->scene, &iter.ptr, (PropertyRNA*)in->base->storage);
+ RNA_property_string_set(&iter.ptr, prop, (char*)cur);
+ RNA_property_update_main(G.main, ctx->scene, &iter.ptr, prop);
RNA_property_collection_next(&iter);
++i;
if (i < in->context.size)
@@ -287,28 +288,28 @@
switch (in->type) {
case SOCK_FLOAT:
- RNA_property_float_set(&ctx->ptr, (PropertyRNA*)in->base->storage, *(float*)buf);
- RNA_property_update_main(G.main, ctx->scene, &ctx->ptr, (PropertyRNA*)in->base->storage);
+ RNA_property_float_set(&ctx->ptr, prop, *(float*)buf);
+ RNA_property_update_main(G.main, ctx->scene, &ctx->ptr, prop);
break;
case SOCK_INT:
- RNA_property_int_set(&ctx->ptr, (PropertyRNA*)in->base->storage, *(int*)buf);
- RNA_property_update_main(G.main, ctx->scene, &ctx->ptr, (PropertyRNA*)in->base->storage);
+ RNA_property_int_set(&ctx->ptr, prop, *(int*)buf);
+ RNA_property_update_main(G.main, ctx->scene, &ctx->ptr, prop);
break;
case SOCK_BOOL:
- RNA_property_boolean_set(&ctx->ptr, (PropertyRNA*)in->base->storage, (int)(*(char*)buf));
- RNA_property_update_main(G.main, ctx->scene, &ctx->ptr, (PropertyRNA*)in->base->storage);
+ RNA_property_boolean_set(&ctx->ptr, prop, (int)(*(char*)buf));
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list