[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32429] branches/particles-2010/source/ blender: GetData and SetData now also support quaternion and matrix data.
Lukas Toenne
lukas.toenne at googlemail.com
Tue Oct 12 13:00:44 CEST 2010
Revision: 32429
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32429
Author: lukastoenne
Date: 2010-10-12 13:00:44 +0200 (Tue, 12 Oct 2010)
Log Message:
-----------
GetData and SetData now also support quaternion and matrix data. This may need a few conversion fixes for different types of rotation (euler and axis-angle must be converted to quaternion).
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/editors/space_node/node_draw.c
branches/particles-2010/source/blender/nodes/intern/simulation/SIM_util.h
branches/particles-2010/source/blender/nodes/intern/simulation/node_tree_simulation.c
branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_get_data.c
branches/particles-2010/source/blender/nodes/intern/simulation/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-10-12 10:30:29 UTC (rev 32428)
+++ branches/particles-2010/source/blender/blenkernel/BKE_node.h 2010-10-12 11:00:44 UTC (rev 32429)
@@ -196,6 +196,7 @@
struct bNodeTree *ntreeAddTree(int type);
void ntreeInitTypes(struct bNodeTree *ntree);
+void ntreeVerifyTypes(struct bNodeTree *ntree);
void ntreeMakeOwnType(struct bNodeTree *ntree);
void ntreeFreeTree(struct bNodeTree *ntree);
@@ -597,7 +598,8 @@
int simnode_setdata_property_valid(struct bNode *node, struct PropertyRNA *prop);
void simnode_setdata_add_rna_socket(struct bNode *node, struct PropertyRNA *prop);
-void simnode_rna_property_convert(struct PropertyRNA *prop, int *r_type, float r_default[4], float *r_min, float *r_max);
+int sim_rna_socket_type(struct PropertyRNA *prop);
+void sim_rna_socket_set_defaults(struct PropertyRNA *prop, struct bNodeSocket *sock);
/**/
Modified: branches/particles-2010/source/blender/blenkernel/intern/node.c
===================================================================
--- branches/particles-2010/source/blender/blenkernel/intern/node.c 2010-10-12 10:30:29 UTC (rev 32428)
+++ branches/particles-2010/source/blender/blenkernel/intern/node.c 2010-10-12 11:00:44 UTC (rev 32429)
@@ -141,6 +141,18 @@
ntree->init |= NTREE_TYPE_INIT;
}
+void ntreeVerifyTypes(bNodeTree *ntree)
+{
+// bNode *node;
+
+ /* if((ntree->init & NTREE_TYPE_INIT)==0) */
+ ntreeInitTypes(ntree);
+
+ /* check inputs and outputs, and remove or insert them */
+// for(node= ntree->nodes.first; node; node= node->next)
+// nodeVerifyType(ntree, node);
+}
+
static bNodeSocket *make_socket(int is_input, const char *name, int type, float *default_value, float min, float max)
{
bNodeSocket *sock= MEM_callocN(sizeof(bNodeSocket), "sock");
Modified: branches/particles-2010/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/particles-2010/source/blender/blenloader/intern/readfile.c 2010-10-12 10:30:29 UTC (rev 32428)
+++ branches/particles-2010/source/blender/blenloader/intern/readfile.c 2010-10-12 11:00:44 UTC (rev 32429)
@@ -2032,7 +2032,6 @@
}
}
-#if 0
/* verify types for nodes and groups, all data has to be read */
/* open = 0: appending/linking, open = 1: open new file (need to clean out dynamic
* typedefs*/
@@ -2064,7 +2063,6 @@
tti->foreachNodeTree(main, NULL, lib_verify_nodetree_cb);
}
}
-#endif
static void direct_link_node_rna_data(FileData *fd, bNodeTree *ntree, bNode *node)
{
@@ -11420,7 +11418,7 @@
lib_link_all(fd, bfd->main);
//do_versions_after_linking(fd, NULL, bfd->main); // XXX: not here (or even in this function at all)! this causes crashes on many files - Aligorith (July 04, 2010)
-// lib_verify_nodetree(bfd->main, 1);
+ lib_verify_nodetree(bfd->main, 1);
fix_relpaths_library(fd->relabase, bfd->main); /* make all relative paths, relative to the open blend file */
link_global(fd, bfd); /* as last */
@@ -12598,7 +12596,7 @@
mainl= NULL; /* blo_join_main free's mainl, cant use anymore */
lib_link_all(*fd, mainvar);
-// lib_verify_nodetree(mainvar, 0);
+ lib_verify_nodetree(mainvar, 0);
fix_relpaths_library(G.sce, mainvar); /* make all relative paths, relative to the open blend file */
/* give a base to loose objects. If group append, do it for objects too */
Modified: branches/particles-2010/source/blender/editors/space_node/node_draw.c
===================================================================
--- branches/particles-2010/source/blender/editors/space_node/node_draw.c 2010-10-12 10:30:29 UTC (rev 32428)
+++ branches/particles-2010/source/blender/editors/space_node/node_draw.c 2010-10-12 11:00:44 UTC (rev 32429)
@@ -890,16 +890,14 @@
uiButSetFunc(bt, node_sync_cb, snode, node);
}
else if(sock->type==SOCK_QUAT) {
- bt=uiDefButR(node->block, NUM, B_NODE_EXEC, sock->name,
- (short)sock->locx+NODE_DYS, (short)(sock->locy)-9, (short)node->width-NODE_DY, 17,
- &ptr, "default_value", 0, 0, 0, -1, -1, NULL);
- uiButSetFunc(bt, node_sync_cb, snode, node);
+ uiDefBlockBut(node->block, socket_vector_menu, sock, sock->name,
+ (short)sock->locx+NODE_DYS, (short)sock->locy-9, (short)node->width-NODE_DY, 17,
+ "");
}
else if(sock->type==SOCK_MATRIX) {
- bt=uiDefButR(node->block, NUM, B_NODE_EXEC, sock->name,
- (short)sock->locx+NODE_DYS, (short)(sock->locy)-9, (short)node->width-NODE_DY, 17,
- &ptr, "default_value", 0, 0, 0, -1, -1, NULL);
- uiButSetFunc(bt, node_sync_cb, snode, node);
+ uiDefBlockBut(node->block, socket_vector_menu, sock, sock->name,
+ (short)sock->locx+NODE_DYS, (short)sock->locy-9, (short)node->width-NODE_DY, 17,
+ "");
}
else if(sock->type==SOCK_STRING) {
short labelw= (short)node->width-NODE_DY-80, width;
Modified: branches/particles-2010/source/blender/nodes/intern/simulation/SIM_util.h
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/simulation/SIM_util.h 2010-10-12 10:30:29 UTC (rev 32428)
+++ branches/particles-2010/source/blender/nodes/intern/simulation/SIM_util.h 2010-10-12 11:00:44 UTC (rev 32429)
@@ -60,8 +60,6 @@
#include "RNA_types.h"
-#include "SIM_sockets.h"
-
struct SimTaskEvent;
struct SimWorkerThread;
@@ -278,7 +276,7 @@
void sim_output_write_vector(struct SimExecData *execdata, struct SimSocketIterator *iter, const float *value);
void sim_output_write_rgba(struct SimExecData *execdata, struct SimSocketIterator *iter, const float *value);
void sim_output_write_quat(struct SimExecData *execdata, struct SimSocketIterator *iter, const float *value);
-void sim_output_write_maxrix(struct SimExecData *execdata, struct SimSocketIterator *iter, const float *value);
+void sim_output_write_matrix(struct SimExecData *execdata, struct SimSocketIterator *iter, const float *value);
void sim_output_write_string(struct SimExecData *execdata, struct SimSocketIterator *iter, const char *value);
void sim_output_write(struct SimExecData *execdata, struct SimSocketIterator *iter, const void *value);
Modified: branches/particles-2010/source/blender/nodes/intern/simulation/node_tree_simulation.c
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/simulation/node_tree_simulation.c 2010-10-12 10:30:29 UTC (rev 32428)
+++ branches/particles-2010/source/blender/nodes/intern/simulation/node_tree_simulation.c 2010-10-12 11:00:44 UTC (rev 32429)
@@ -907,6 +907,8 @@
case SOCK_BOOL: sim_output_write_bool(execdata, &iter, (char)(*in)->base->ns.ival); break;
case SOCK_VECTOR: sim_output_write_vector(execdata, &iter, (*in)->base->ns.vec); break;
case SOCK_RGBA: sim_output_write_rgba(execdata, &iter, (*in)->base->ns.vec); break;
+ case SOCK_QUAT: sim_output_write_quat(execdata, &iter, (*in)->base->ns.vec); break;
+ case SOCK_MATRIX: sim_output_write_matrix(execdata, &iter, (*in)->base->default_matrix[0]); break;
case SOCK_STRING: sim_output_write_string(execdata, &iter, (*in)->base->default_string); break;
}
}
@@ -1381,17 +1383,75 @@
ntreeEndExecTree(ntree);
}
-void simnode_rna_property_convert(PropertyRNA *prop, int *r_type, float r_default[4], float *r_min, float *r_max)
+int sim_rna_socket_type(PropertyRNA *prop)
{
PropertyType proptype = RNA_property_type(prop);
PropertySubType subtype = RNA_property_subtype(prop);
+
+ switch (proptype) {
+ case PROP_FLOAT:
+ switch (subtype) {
+ case PROP_NONE:
+ case PROP_UNSIGNED:
+ case PROP_PERCENTAGE:
+ case PROP_FACTOR:
+ case PROP_ANGLE:
+ case PROP_TIME:
+ case PROP_DISTANCE:
+ return SOCK_FLOAT;
+
+ case PROP_TRANSLATION:
+ case PROP_DIRECTION:
+ case PROP_VELOCITY:
+ case PROP_ACCELERATION:
+ return SOCK_VECTOR;
+
+ case PROP_COLOR_GAMMA:
+ case PROP_COLOR:
+ return SOCK_RGBA;
+
+ case PROP_QUATERNION:
+ case PROP_EULER:
+ case PROP_AXISANGLE:
+ return SOCK_QUAT;
+
+ case PROP_MATRIX:
+ return SOCK_MATRIX;
+
+ /* TODO how to handle these? */
+ case PROP_XYZ:
+ case PROP_XYZ_LENGTH:
+ return -1;
+
+ default:
+ return -1;
+ }
+
+ case PROP_INT:
+ return SOCK_INT;
+
+ case PROP_BOOLEAN:
+ return SOCK_BOOL;
+
+ case PROP_STRING:
+ return SOCK_STRING;
+
+ default:
+ return -1;
+ }
+}
+
+void sim_rna_socket_set_defaults(PropertyRNA *prop, bNodeSocket *sock)
+{
+ PropertyType proptype = RNA_property_type(prop);
+ PropertySubType subtype = RNA_property_subtype(prop);
// int imin, imax;
- PointerRNA ptr;
- RNA_pointer_create(NULL, NULL, NULL, &ptr);
+// PointerRNA ptr;
+// RNA_pointer_create(NULL, NULL, NULL, &ptr);
/* TODO sometimes property defaults and ranges depend on the actual instance,
- * which crashed with NULL pointer. Using arbitrary ranges for now, which is ok
- * since ranges are handled by rna in the end, just cannot be used for socket defaults.
+ * which crashes with NULL pointer. Using sensible standard ranges for now, which is ok
+ * since ranges are handled by RNA when updating, just cannot be used for socket defaults.
*/
switch (proptype) {
@@ -1399,132 +1459,143 @@
switch (subtype) {
/* SOCK_FLOAT */
case PROP_NONE:
- *r_type = SOCK_FLOAT;
-// r_default[0] = RNA_property_float_get_default(&ptr, prop);
-// RNA_property_float_range(&ptr, prop, r_min, r_max);
- r_default[0]= 0.0f;
- *r_min= -1000000.0f;
- *r_max= 1000000.0f;
+ sock->ns.vec[0]= 0.0f;
+ sock->ns.min= -1000000.0f;
+ sock->ns.max= 1000000.0f;
break;
case PROP_UNSIGNED:
- *r_type = SOCK_FLOAT;
- r_default[0]= 0.0f;
- *r_min= 0.0f;
- *r_max= 1000000.0f;
+ sock->ns.vec[0]= 0.0f;
+ sock->ns.min= 0.0f;
+ sock->ns.max= 1000000.0f;
break;
case PROP_PERCENTAGE:
- *r_type = SOCK_FLOAT;
- r_default[0]= 100.0f;
- *r_min= 0.0f;
- *r_max= 100.0f;
+ sock->ns.vec[0]= 100.0f;
+ sock->ns.min= 0.0f;
+ sock->ns.max= 100.0f;
break;
case PROP_FACTOR:
- *r_type = SOCK_FLOAT;
- r_default[0]= 1.0f;
- *r_min= 0.0f;
- *r_max= 1.0f;
+ sock->ns.vec[0]= 1.0f;
+ sock->ns.min= 0.0f;
+ sock->ns.max= 1.0f;
break;
case PROP_ANGLE:
- *r_type = SOCK_FLOAT;
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list