[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