[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34224] branches/particles-2010/source/ blender: Created a new socket type struct to collect information about socket types , such as drawing callbacks and data access.

Lukas Toenne lukas.toenne at googlemail.com
Mon Jan 10 11:54:36 CET 2011


Revision: 34224
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=34224
Author:   lukastoenne
Date:     2011-01-10 10:54:35 +0000 (Mon, 10 Jan 2011)
Log Message:
-----------
Created a new socket type struct to collect information about socket types, such as drawing callbacks and data access. Also socket buttons now get a fresh uiLayout to streamline button drawing.

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/drawnode.c
    branches/particles-2010/source/blender/editors/space_node/node_draw.c
    branches/particles-2010/source/blender/editors/space_node/node_edit.c
    branches/particles-2010/source/blender/editors/space_node/node_intern.h
    branches/particles-2010/source/blender/makesdna/DNA_node_types.h
    branches/particles-2010/source/blender/makesrna/RNA_access.h
    branches/particles-2010/source/blender/makesrna/intern/rna_access.c
    branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c
    branches/particles-2010/source/blender/nodes/SIM_node.h
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_normal.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_rgb.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodes/CMP_value.c
    branches/particles-2010/source/blender/nodes/intern/CMP_nodetree.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_normal.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_rgb.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodes/SHD_value.c
    branches/particles-2010/source/blender/nodes/intern/SHD_nodetree.c
    branches/particles-2010/source/blender/nodes/intern/SHD_util.c
    branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_get_data.c
    branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_math_rotation.c
    branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_program.c
    branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_subprogram.c
    branches/particles-2010/source/blender/nodes/intern/SIM_nodetree.c
    branches/particles-2010/source/blender/nodes/intern/SIM_util.c
    branches/particles-2010/source/blender/nodes/intern/TEX_nodetree.c
    branches/particles-2010/source/blender/nodes/intern/node_util.c

Modified: branches/particles-2010/source/blender/blenkernel/BKE_node.h
===================================================================
--- branches/particles-2010/source/blender/blenkernel/BKE_node.h	2011-01-10 10:33:39 UTC (rev 34223)
+++ branches/particles-2010/source/blender/blenkernel/BKE_node.h	2011-01-10 10:54:35 UTC (rev 34224)
@@ -75,6 +75,7 @@
 
 /* ************** NODE TYPE DEFINITIONS ***** */
 
+/* Compact definition of a static node socket */
 typedef struct bNodeSocketDefinition {
 	int type, limit;
 	char name[32];
@@ -85,6 +86,29 @@
 	struct bNodeSocket *sock;		/* used to hold verified socket */
 } bNodeSocketDefinition;
 
+/* Symbols for sockets */
+typedef enum NodeSocketSymbol {
+	SOCK_CIRCLE,
+	SOCK_SQUARE
+} NodeSocketSymbol;
+
+/* Type definition for sockets */
+typedef struct bNodeSocketType {
+	int type;
+	const char *identifier;
+	const char *ui_name;
+	const char *ui_description;
+	NodeSocketSymbol symbol;
+	int color[4];
+	
+	int data_size;
+	
+	void (*data_set_default)(void *data);
+	
+	void (*uifunc_input)(struct uiLayout *, struct bContext *C, struct bNodeTree *ntree, struct bNode *node, struct bNodeSocket *sock);
+	void (*uifunc_output)(struct uiLayout *, struct bContext *C, struct bNodeTree *ntree, struct bNode *node, struct bNodeSocket *sock);
+} bNodeSocketType;
+
 typedef struct bNodeType {
 	void *next,*prev;
 	int type;
@@ -172,6 +196,8 @@
 	char id_name[24];				/* id name for RNA identification */
 	
 	ListBase node_types;			/* type definitions */
+	bNodeSocketType *sock_types;	/* socket types */
+	int num_sock_types;
 	
 	/* callbacks */
 	void (*freeCache)(struct bNodeTree *ntree);
@@ -192,7 +218,7 @@
 /* ************** GENERIC API, TREES *************** */
 
 bNodeTreeType	*ntreeGetType(int type);
-void			ntreeSocketTypeInfo(int type, const char **identifier, int *icon, const char **name);
+bNodeSocketType*	ntreeGetSocketType(int treetype, int socktype);
 
 struct bNodeTree *ntreeAddTree(const char *name, int type, const short is_group);
 void			ntreeInitTypes(struct bNodeTree *ntree);
@@ -238,10 +264,10 @@
 
 void			nodeUnlinkNode(struct bNodeTree *ntree, struct bNode *node);
 void			nodeUniqueName(struct bNodeTree *ntree, struct bNode *node);
-struct bNodeSocket *nodeAddInputSocket(struct bNode *node, const char *name, int type, float *default_value, float min, float max);
-struct bNodeSocket *nodeAddOutputSocket(struct bNode *node, const char *name, int type, float *default_value, float min, float max);
-struct bNodeSocket *nodeInsertInputSocket(struct bNode *node, struct bNodeSocket *next_sock, const char *name, int type, float *default_value, float min, float max);
-struct bNodeSocket *nodeInsertOutputSocket(struct bNode *node, struct bNodeSocket *next_sock, const char *name, int type, float *default_value, float min, float max);
+struct bNodeSocket *nodeAddInputSocket(struct bNodeTree *ntree, struct bNode *node, const char *name, int type);
+struct bNodeSocket *nodeAddOutputSocket(struct bNodeTree *ntree, struct bNode *node, const char *name, int type);
+struct bNodeSocket *nodeInsertInputSocket(struct bNodeTree *ntree, struct bNode *node, struct bNodeSocket *next_sock, const char *name, int type);
+struct bNodeSocket *nodeInsertOutputSocket(struct bNodeTree *ntree, struct bNode *node, struct bNodeSocket *next_sock, const char *name, int type);
 void			nodeRemoveInputSocket(struct bNodeTree *ntree, struct bNode *node, struct bNodeSocket *sock);
 void			nodeRemoveOutputSocket(struct bNodeTree *ntree, struct bNode *node, struct bNodeSocket *sock);
 void			nodeRemoveAllSockets(struct bNodeTree *ntree, struct bNode *node);
@@ -255,7 +281,7 @@
 void			nodeAssignInputPanel(struct bNode *node, struct bNodeSocket *socket, struct bNodeSocketPanel *panel);
 void			nodeAssignOutputPanel(struct bNode *node, struct bNodeSocket *socket, struct bNodeSocketPanel *panel);
 
-void			nodeAddSocketsFromType(struct bNode *node, struct bNodeType *ntype);
+void			nodeAddSocketsFromType(struct bNodeTree *ntree, struct bNode *node, struct bNodeType *ntype);
 struct bNode	*nodeAddNodeType(struct bNodeTree *ntree, int type, struct bNodeTree *ngroup, struct ID *id);
 void			nodeRegisterType(struct ListBase *typelist, const struct bNodeType *ntype) ;
 void			nodeUpdateType(struct bNodeTree *ntree, struct bNode* node, struct bNodeType *ntype);

Modified: branches/particles-2010/source/blender/blenkernel/intern/node.c
===================================================================
--- branches/particles-2010/source/blender/blenkernel/intern/node.c	2011-01-10 10:33:39 UTC (rev 34223)
+++ branches/particles-2010/source/blender/blenkernel/intern/node.c	2011-01-10 10:54:35 UTC (rev 34224)
@@ -85,23 +85,9 @@
 	}
 }
 
-void ntreeSocketTypeInfo(int type, const char **identifier, int *icon, const char **name)
+bNodeSocketType *ntreeGetSocketType(int treetype, int socktype)
 {
-	switch (type) {
-	case SOCK_VALUE:	if (identifier) *identifier = "SOCK_VALUE";		if (icon) *icon = 0;	if (name) *name = "Value";			break;
-	case SOCK_VECTOR:	if (identifier) *identifier = "SOCK_VECTOR";	if (icon) *icon = 0;	if (name) *name = "Vector";			break;
-	case SOCK_RGBA:		if (identifier) *identifier = "SOCK_RGBA";		if (icon) *icon = 0;	if (name) *name = "Color";			break;
-	case SOCK_ANY:		if (identifier) *identifier = "SOCK_ANY";		if (icon) *icon = 0;	if (name) *name = "Any";			break;
-	case SOCK_OP:		if (identifier) *identifier = "SOCK_OP";		if (icon) *icon = 0;	if (name) *name = "Execute";		break;
-	case SOCK_FLOAT:	if (identifier) *identifier = "SOCK_FLOAT";		if (icon) *icon = 0;	if (name) *name = "Float";			break;
-	case SOCK_INT:		if (identifier) *identifier = "SOCK_INT";		if (icon) *icon = 0;	if (name) *name = "Integer";		break;
-	case SOCK_BOOL:		if (identifier) *identifier = "SOCK_BOOL";		if (icon) *icon = 0;	if (name) *name = "Boolean";		break;
-	case SOCK_QUAT:		if (identifier) *identifier = "SOCK_QUAT";		if (icon) *icon = 0;	if (name) *name = "Quaternion";		break;
-	case SOCK_MATRIX:	if (identifier) *identifier = "SOCK_MATRIX";	if (icon) *icon = 0;	if (name) *name = "Matrix";			break;
-	case SOCK_STRING:	if (identifier) *identifier = "SOCK_STRING";	if (icon) *icon = 0;	if (name) *name = "String";			break;
-	case SOCK_MESHPT:	if (identifier) *identifier = "SOCK_MESHPT";	if (icon) *icon = 0;	if (name) *name = "MeshPoint";	break;
-	default:			if (identifier) *identifier = "";				if (icon) *icon = 0;	if (name) *name = "";
-	}
+	return &ntreeGetType(treetype)->sock_types[socktype];
 }
 
 static bNodeType *node_get_type(bNodeTree *ntree, int type, ID *id)
@@ -151,8 +137,37 @@
 	ntree->init |= NTREE_TYPE_INIT;
 }
 
-static bNodeSocket *make_socket(int in_out, bNodeType *ntype, const char *name, int type, float *default_value, float min, float max)
+static void init_socket_inputdata(bNodeTree *ntree, bNodeSocket *sock)
 {
+	bNodeSocketType *sti= ntreeGetSocketType(ntree->type, sock->type);
+	
+	if (sti->data_size > 0) {
+		sock->inputdata = MEM_callocN((size_t)sti->data_size, "Node socket input data");
+		if (sti->data_set_default)
+			sti->data_set_default(sock->inputdata);
+	}
+	else
+		sock->inputdata = NULL;
+}
+
+static void copy_socket_inputdata(bNodeTree *ntree, bNodeSocket *nsock, bNodeSocket *sock)
+{
+	if (sock->inputdata) {
+		if (nsock->inputdata)
+			memcpy(nsock->inputdata, sock->inputdata, ntreeGetSocketType(ntree->type, sock->type)->data_size);
+		else
+			nsock->inputdata = MEM_dupallocN(sock->inputdata);
+	}
+	else {
+		if (nsock->inputdata) {
+			MEM_freeN(nsock->inputdata);
+			nsock->inputdata = NULL;
+		}
+	}
+}
+
+static bNodeSocket *make_socket(bNodeTree *ntree, int in_out, const char *name, int type)
+{
 	bNodeSocket *sock= MEM_callocN(sizeof(bNodeSocket), "sock");
 	
 	BLI_strncpy(sock->name, name, NODE_MAXSTR);
@@ -164,38 +179,33 @@
 	sock->flag |= SOCK_ADAPT_CONTEXT;
 	sock->storage = NULL;
 	
-	copy_v4_v4(sock->ns.vec, default_value);
-	sock->ns.min= min;
-	sock->ns.max= max;
-	sock->ns.ival = (int)default_value[0];
-	sock->ns.imin = (int)min;
-	sock->ns.imax = (int)max;
+	init_socket_inputdata(ntree, sock);
 	
 	return sock;
 }
 
-bNodeSocket *nodeAddInputSocket(bNode *node, const char *name, int type, float *default_value, float min, float max)
+bNodeSocket *nodeAddInputSocket(bNodeTree *ntree, bNode *node, const char *name, int type)
 {
-	bNodeSocket *sock = make_socket(SOCK_IN, node->typeinfo, name, type, default_value, min, max);
+	bNodeSocket *sock = make_socket(ntree, SOCK_IN, name, type);
 	BLI_addtail(&node->inputs, sock);
 	return sock;
 }
-bNodeSocket *nodeAddOutputSocket(bNode *node, const char *name, int type, float *default_value, float min, float max)
+bNodeSocket *nodeAddOutputSocket(bNodeTree *ntree, bNode *node, const char *name, int type)
 {
-	bNodeSocket *sock = make_socket(SOCK_OUT, node->typeinfo, name, type, default_value, min, max);
+	bNodeSocket *sock = make_socket(ntree, SOCK_OUT, name, type);
 	BLI_addtail(&node->outputs, sock);
 	return sock;
 }
 
-bNodeSocket *nodeInsertInputSocket(bNode *node, bNodeSocket *next_sock, const char *name, int type, float *default_value, float min, float max)
+bNodeSocket *nodeInsertInputSocket(bNodeTree *ntree, bNode *node, bNodeSocket *next_sock, const char *name, int type)
 {
-	bNodeSocket *sock = make_socket(SOCK_IN, node->typeinfo, name, type, default_value, min, max);
+	bNodeSocket *sock = make_socket(ntree, SOCK_IN, name, type);
 	BLI_insertlinkbefore(&node->inputs, next_sock, sock);
 	return sock;
 }
-bNodeSocket *nodeInsertOutputSocket(bNode *node, bNodeSocket *next_sock, const char *name, int type, float *default_value, float min, float max)
+bNodeSocket *nodeInsertOutputSocket(bNodeTree *ntree, bNode *node, bNodeSocket *next_sock, const char *name, int type)
 {
-	bNodeSocket *sock = make_socket(SOCK_OUT, node->typeinfo, name, type, default_value, min, max);
+	bNodeSocket *sock = make_socket(ntree, SOCK_OUT, name, type);
 	BLI_insertlinkbefore(&node->outputs, next_sock, sock);
 	return sock;
 }
@@ -231,7 +241,6 @@
 void nodeRemoveAllSockets(bNodeTree *ntree, bNode *node)
 {
 	bNodeLink *link, *next;
-	bNodeSocket *sock;
 	
 	for(link= ntree->links.first; link; link= next) {
 		next= link->next;
@@ -248,13 +257,11 @@
 {
 	to->type= from->type;
 	to->limit= from->limit;
-	to->ns.min= from->ns.min;
-	to->ns.max= from->ns.max;
-	to->ns.imin= from->ns.imin;
-	to->ns.imax= from->ns.imax;
+	to->inputmin = from->inputmin;
+	to->inputmax = from->inputmax;
 }
 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list