[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