[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