[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32427] branches/particles-2010/source/ blender: Added quaternion and matrix socket types.

Lukas Toenne lukas.toenne at googlemail.com
Tue Oct 12 11:03:40 CEST 2010


Revision: 32427
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32427
Author:   lukastoenne
Date:     2010-10-12 11:03:40 +0200 (Tue, 12 Oct 2010)

Log Message:
-----------
Added quaternion and matrix socket types.

Modified Paths:
--------------
    branches/particles-2010/source/blender/editors/space_node/node_draw.c
    branches/particles-2010/source/blender/makesdna/DNA_node_types.h
    branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c
    branches/particles-2010/source/blender/nodes/intern/simulation/SIM_internal.c
    branches/particles-2010/source/blender/nodes/intern/simulation/SIM_util.c
    branches/particles-2010/source/blender/nodes/intern/simulation/SIM_util.h
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_if.c
    branches/particles-2010/source/blender/nodes/intern/simulation/nodes/SIM_pass.c

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 08:32:53 UTC (rev 32426)
+++ branches/particles-2010/source/blender/editors/space_node/node_draw.c	2010-10-12 09:03:40 UTC (rev 32427)
@@ -455,28 +455,21 @@
 /* note: in cmp_util.c is similar code, for node_compo_pass_on() */
 static void node_draw_mute_line(View2D *v2d, SpaceNode *snode, bNode *node)
 {
-	bNodeSocket *valsock= NULL, *colsock= NULL, *vecsock= NULL, *anysock= NULL, *opsock= NULL, *floatsock= NULL, *intsock= NULL, *boolsock= NULL, *stringsock= NULL;
+	bNodeSocket *input[NUM_SOCKET_TYPES];
+	int has_inputs=0;
 	bNodeSocket *sock;
 	bNodeLink link;
 	int a;
 	
 	memset(&link, 0, sizeof(bNodeLink));
 	
-	/* connect the first value buffer in with first value out */
-	/* connect the first RGBA buffer in with first RGBA out */
+	/* connect the first input of each type with first output of the same type */
 	
 	/* test the inputs */
 	for(a=0, sock= node->inputs.first; sock; sock= sock->next, a++) {
 		if(nodeCountSocketLinks(snode->edittree, sock)) {
-			if(sock->type==SOCK_VALUE && valsock==NULL) valsock= sock;
-			if(sock->type==SOCK_VECTOR && vecsock==NULL) vecsock= sock;
-			if(sock->type==SOCK_RGBA && colsock==NULL) colsock= sock;
-			if(sock->type==SOCK_ANY && anysock==NULL) anysock= sock;
-			if(sock->type==SOCK_OP && opsock==NULL) opsock= sock;
-			if(sock->type==SOCK_INT && intsock==NULL) intsock= sock;
-			if(sock->type==SOCK_FLOAT && floatsock==NULL) floatsock= sock;
-			if(sock->type==SOCK_BOOL && boolsock==NULL) boolsock= sock;
-			if(sock->type==SOCK_STRING && stringsock==NULL) stringsock= sock;
+			if(input[sock->type]==NULL) input[sock->type]= sock;
+			has_inputs = 1;
 		}
 	}
 	
@@ -485,56 +478,16 @@
 	glEnable(GL_BLEND);
 	glEnable( GL_LINE_SMOOTH );
 	
-	if(valsock || colsock || vecsock) {
+	if(has_inputs) {
 		for(a=0, sock= node->outputs.first; sock; sock= sock->next, a++) {
 			if(nodeCountSocketLinks(snode->edittree, sock)) {
 				link.tosock= sock;
 				
-				if(sock->type==SOCK_VALUE && valsock) {
-					link.fromsock= valsock;
+				if(input[sock->type]) {
+					link.fromsock= input[sock->type];
 					node_draw_link_bezier(v2d, snode, &link, TH_WIRE, TH_WIRE, 0);
-					valsock= NULL;
+					input[sock->type]= NULL;
 				}
-				if(sock->type==SOCK_VECTOR && vecsock) {
-					link.fromsock= vecsock;
-					node_draw_link_bezier(v2d, snode, &link, TH_WIRE, TH_WIRE, 0);
-					vecsock= NULL;
-				}
-				if(sock->type==SOCK_RGBA && colsock) {
-					link.fromsock= colsock;
-					node_draw_link_bezier(v2d, snode, &link, TH_WIRE, TH_WIRE, 0);
-					colsock= NULL;
-				}
-				if(sock->type==SOCK_ANY && anysock) {
-					link.fromsock= anysock;
-					node_draw_link_bezier(v2d, snode, &link, TH_WIRE, TH_WIRE, 0);
-					anysock= NULL;
-				}
-				if(sock->type==SOCK_OP && opsock) {
-					link.fromsock= opsock;
-					node_draw_link_bezier(v2d, snode, &link, TH_WIRE, TH_WIRE, 0);
-					opsock= NULL;
-				}
-				if(sock->type==SOCK_INT && intsock) {
-					link.fromsock= intsock;
-					node_draw_link_bezier(v2d, snode, &link, TH_WIRE, TH_WIRE, 0);
-					intsock= NULL;
-				}
-				if(sock->type==SOCK_FLOAT && floatsock) {
-					link.fromsock= floatsock;
-					node_draw_link_bezier(v2d, snode, &link, TH_WIRE, TH_WIRE, 0);
-					floatsock= NULL;
-				}
-				if(sock->type==SOCK_BOOL && boolsock) {
-					link.fromsock= boolsock;
-					node_draw_link_bezier(v2d, snode, &link, TH_WIRE, TH_WIRE, 0);
-					boolsock= NULL;
-				}
-				if(sock->type==SOCK_STRING && stringsock) {
-					link.fromsock= stringsock;
-					node_draw_link_bezier(v2d, snode, &link, TH_WIRE, TH_WIRE, 0);
-					stringsock= NULL;
-				}
 			}
 		}
 	}
@@ -609,6 +562,12 @@
 	case SOCK_BOOL:
 		r_col[0]= 200;	r_col[1]= 137;	r_col[2]= 52;	r_col[3]= 255;
 		break;
+	case SOCK_QUAT:
+		r_col[0]= 0;	r_col[1]= 209;	r_col[2]= 225;	r_col[3]= 255;
+		break;
+	case SOCK_MATRIX:
+		r_col[0]= 131;	r_col[1]= 39;	r_col[2]= 248;	r_col[3]= 255;
+		break;
 	case SOCK_STRING:
 		r_col[0]= 180;	r_col[1]= 180;	r_col[2]= 180;	r_col[3]= 255;
 		break;
@@ -930,6 +889,18 @@
 							  &ptr, "default_value", 0, 0, 0, -1, -1, NULL);
 					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);
+				}
+				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);
+				}
 				else if(sock->type==SOCK_STRING) {
 					short labelw= (short)node->width-NODE_DY-80, width;
 					

Modified: branches/particles-2010/source/blender/makesdna/DNA_node_types.h
===================================================================
--- branches/particles-2010/source/blender/makesdna/DNA_node_types.h	2010-10-12 08:32:53 UTC (rev 32426)
+++ branches/particles-2010/source/blender/makesdna/DNA_node_types.h	2010-10-12 09:03:40 UTC (rev 32427)
@@ -90,6 +90,7 @@
 	
 	float locx, locy;
 	
+	float default_matrix[4][4];
 	char default_string[64];
 	
 	/* execution data */
@@ -123,8 +124,10 @@
 #define SOCK_BOOL			5
 #define SOCK_INT			6
 #define SOCK_FLOAT			7
-#define SOCK_STRING			8
-#define MAX_SOCKET_TYPES	9	/* must be last! */
+#define SOCK_QUAT			8
+#define SOCK_MATRIX			9
+#define SOCK_STRING			10
+#define NUM_SOCKET_TYPES	11	/* must be last! */
 
 /* sock->flag, first bit is select */
 	/* hidden is user defined, to hide unused */

Modified: branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c
===================================================================
--- branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c	2010-10-12 08:32:53 UTC (rev 32426)
+++ branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c	2010-10-12 09:03:40 UTC (rev 32427)
@@ -100,6 +100,10 @@
 			return &RNA_FloatNodeSocket;
 		case SOCK_BOOL:
 			return &RNA_BoolNodeSocket;
+		case SOCK_QUAT:
+			return &RNA_QuatNodeSocket;
+		case SOCK_MATRIX:
+			return &RNA_MatrixNodeSocket;
 		case SOCK_STRING:
 			return &RNA_StringNodeSocket;
 		default:
@@ -2500,11 +2504,56 @@
 	
 	prop = RNA_def_property(srna, "default_value", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_boolean_sdna(prop, NULL, "ns.ival", 0);
-//	RNA_def_property_boolean_funcs(prop, "rna_NodeSocket_get_bool", "rna_NodeSocket_set_bool");
 	RNA_def_property_ui_text(prop, "Default Value", "Default value of the socket when no link is attached");
 	RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_NodeSocket_update");
 }
 
+static void rna_def_node_socket_quat(BlenderRNA *brna)
+{
+	StructRNA *srna;
+	PropertyRNA *prop;
+	
+	srna = RNA_def_struct(brna, "QuatNodeSocket", NULL);
+	RNA_def_struct_ui_text(srna, "Quaternion Node Socket", "Input or output socket of a node");
+	RNA_def_struct_sdna(srna, "bNodeSocket");
+	RNA_def_struct_ui_icon(srna, ICON_PLUG);
+	RNA_def_struct_path_func(srna, "rna_NodeSocket_path");
+	
+	prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+	RNA_def_property_ui_text(prop, "Name", "Socket name");
+	RNA_def_struct_name_property(srna, prop);
+	
+	prop = RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_QUATERNION);
+	RNA_def_property_float_sdna(prop, NULL, "ns.vec");
+	RNA_def_property_ui_text(prop, "Default Value", "Default value of the socket when no link is attached");
+	RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_NodeSocket_update");
+}
+
+static void rna_def_node_socket_matrix(BlenderRNA *brna)
+{
+	StructRNA *srna;
+	PropertyRNA *prop;
+	int matrix_dimsize[]={4, 4};
+	
+	srna = RNA_def_struct(brna, "MatrixNodeSocket", NULL);
+	RNA_def_struct_ui_text(srna, "Matrix Node Socket", "Input or output socket of a node");
+	RNA_def_struct_sdna(srna, "bNodeSocket");
+	RNA_def_struct_ui_icon(srna, ICON_PLUG);
+	RNA_def_struct_path_func(srna, "rna_NodeSocket_path");
+	
+	prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+	RNA_def_property_ui_text(prop, "Name", "Socket name");
+	RNA_def_struct_name_property(srna, prop);
+	
+	prop = RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_MATRIX);
+	RNA_def_property_float_sdna(prop, NULL, "default_matrix");
+	RNA_def_property_multi_array(prop, 2, matrix_dimsize);
+	RNA_def_property_ui_text(prop, "Default Value", "Default value of the socket when no link is attached");
+	RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_NodeSocket_update");
+}
+
 static void rna_def_node_socket_string(BlenderRNA *brna)
 {
 	StructRNA *srna;
@@ -2640,6 +2689,8 @@
 	rna_def_node_socket_int(brna);
 	rna_def_node_socket_float(brna);
 	rna_def_node_socket_bool(brna);
+	rna_def_node_socket_quat(brna);
+	rna_def_node_socket_matrix(brna);
 	rna_def_node_socket_string(brna);
 	rna_def_node_socket_panel(brna);
 	rna_def_node(brna);

Modified: branches/particles-2010/source/blender/nodes/intern/simulation/SIM_internal.c
===================================================================
--- branches/particles-2010/source/blender/nodes/intern/simulation/SIM_internal.c	2010-10-12 08:32:53 UTC (rev 32426)
+++ branches/particles-2010/source/blender/nodes/intern/simulation/SIM_internal.c	2010-10-12 09:03:40 UTC (rev 32427)
@@ -50,7 +50,7 @@
 #ifdef WITH_OPENCL
 	if (BKE_opencl_is_active()) {
 		cl_int res;
-		size_t datasize = sim_get_data_size(sock->type);
+		size_t datasize = sim_sockettype_size(sock->type);
 		if (datasize > 0 && sock->context.size > 0) {
 			sock->data_cl = clCreateBuffer(execdata->opencl_context, CL_MEM_READ_WRITE, sock->context.size * datasize, NULL, &res);
 			if (res != CL_SUCCESS) {
@@ -62,7 +62,7 @@
 	else
 #endif
 	{
-		size_t datasize = sim_get_data_size(sock->type);
+		size_t datasize = sim_sockettype_size(sock->type);
 		if (datasize > 0 && sock->context.size > 0) {
 			sock->data = MEM_callocN(datasize * sock->context.size, "socket data");
 		}

Modified: branches/particles-2010/source/blender/nodes/intern/simulation/SIM_util.c

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list