[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34900] branches/particles-2010/source/ blender: Added callbacks for most draw functions and operators.
Lukas Toenne
lukas.toenne at googlemail.com
Wed Feb 16 12:02:01 CET 2011
Revision: 34900
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=34900
Author: lukastoenne
Date: 2011-02-16 11:02:01 +0000 (Wed, 16 Feb 2011)
Log Message:
-----------
Added callbacks for most draw functions and operators. Group code is in node_common.c now.
Added a new node type "For Loop" for repeating a node group (only basic skeleton atm). It uses much of the group code, with some modifications for additional static "iterations" sockets and sync'd input/output sockets.
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_edit.c
branches/particles-2010/source/blender/editors/space_node/node_header.c
branches/particles-2010/source/blender/makesdna/DNA_node_types.h
branches/particles-2010/source/blender/makesrna/intern/rna_main_api.c
branches/particles-2010/source/blender/makesrna/intern/rna_object.c
branches/particles-2010/source/blender/makesrna/intern/rna_space.c
branches/particles-2010/source/blender/nodes/intern/node_common.c
Modified: branches/particles-2010/source/blender/blenkernel/BKE_node.h
===================================================================
--- branches/particles-2010/source/blender/blenkernel/BKE_node.h 2011-02-16 10:57:58 UTC (rev 34899)
+++ branches/particles-2010/source/blender/blenkernel/BKE_node.h 2011-02-16 11:02:01 UTC (rev 34900)
@@ -130,6 +130,14 @@
int (*validfunc)(struct bNodeTree *ntree, struct bNodeTemplate *ntemp);
void (*verifyfunc)(struct bNodeTree *ntree, struct bNode *node);
+ void (*inittreefunc)(struct bNodeTree *ntree);
+
+ /* group edit callbacks for operators */
+ /* XXX this is going to be changed as required by the UI */
+ struct bNodeTree *(*edit_get)(struct bNode *node);
+ struct bNodeTree *(*edit_set)(struct bNode *node, int edit);
+ void (*edit_clear)(struct bNode *node);
+
/* gpu */
int (*gpufunc)(struct GPUMaterial *mat, struct bNode *node, struct GPUNodeStack *in, struct GPUNodeStack *out);
} bNodeType;
@@ -168,6 +176,7 @@
#define NODE_CLASS_MATH_ROTATION 19
#define NODE_CLASS_PARTICLES 25
#define NODE_CLASS_TRANSFORM 30
+#define NODE_CLASS_FORLOOP 50
struct bNodeTreeExec;
@@ -203,7 +212,7 @@
bNodeTreeType *ntreeGetType(int type);
-struct bNodeTree *ntreeAddTree(const char *name, int type, const short is_group);
+struct bNodeTree *ntreeAddTree(const char *name, int type, int nodetype);
void ntreeInitTypes(struct bNodeTree *ntree);
void ntreeVerifyTypes(struct bNodeTree *ntree);
@@ -292,6 +301,9 @@
struct bNodeTemplate nodeMakeTemplate(struct bNode *node);
int nodeValid(struct bNodeTree *ntree, struct bNodeTemplate *ntemp);
const char* nodeLabel(struct bNode *node);
+struct bNodeTree *nodeEditGet(struct bNode *node);
+struct bNodeTree *nodeEditSet(struct bNode *node, int edit);
+void nodeEditClear(struct bNode *node);
/* Init a new node type struct with default values and callbacks */
void node_type_base(struct bNodeType *ntype, int type, const char *name, short nclass, short flag,
@@ -308,6 +320,11 @@
void node_type_label(struct bNodeType *ntype, const char *(*labelfunc)(struct bNode *));
void node_type_template(struct bNodeType *ntype, struct bNodeTemplate (*templatefunc)(struct bNode *));
void node_type_verify(struct bNodeType *ntype, void (*verifyfunc)(struct bNodeTree *, struct bNode *));
+void node_type_init_tree(struct bNodeType *ntype, void (*inittreefunc)(struct bNodeTree *));
+void node_type_edit(struct bNodeType *ntype,
+ struct bNodeTree *(*edit_get)(struct bNode *node),
+ struct bNodeTree *(*edit_set)(struct bNode *node, int edit),
+ void (*edit_clear)(struct bNode *node));
/* ************** INTERNAL EDITOR FUNCTIONS *************** */
@@ -319,11 +336,11 @@
/* ************** COMMON NODES *************** */
#define NODE_GROUP 2
+#define NODE_FORLOOP 3
#define NODE_GROUP_MENU 10000
#define NODE_DYNAMIC_MENU 20000
/* Group */
-
void register_node_type_group(ListBase *lb);
/* look up a socket on a group node by the internal group socket */
@@ -340,6 +357,10 @@
void node_group_verify(struct bNodeTree *ngroup);
+
+/* For Loop */
+void register_node_type_forloop(ListBase *lb);
+
/* ************** SHADER NODES *************** */
struct ShadeInput;
Modified: branches/particles-2010/source/blender/blenkernel/intern/node.c
===================================================================
--- branches/particles-2010/source/blender/blenkernel/intern/node.c 2011-02-16 10:57:58 UTC (rev 34899)
+++ branches/particles-2010/source/blender/blenkernel/intern/node.c 2011-02-16 11:02:01 UTC (rev 34900)
@@ -424,6 +424,8 @@
sockdef= ntype->inputs;
while(sockdef->type != -1) {
sock = node_add_socket(ntree, &node->inputs, SOCK_IN, sockdef->name, sockdef->type);
+ /* tag socket as static */
+ sock->flag |= SOCK_STATIC;
/* init input value */
sock->ns.vec[0] = sockdef->val1;
@@ -443,6 +445,8 @@
sockdef= ntype->outputs;
while(sockdef->type != -1) {
sock = node_add_socket(ntree, &node->outputs, SOCK_OUT, sockdef->name, sockdef->type);
+ /* tag socket as static */
+ sock->flag |= SOCK_STATIC;
/* init input value */
sock->ns.vec[0] = sockdef->val1;
@@ -659,26 +663,31 @@
}
}
-bNodeTree *ntreeAddTree(const char *name, int type, const short is_group)
+bNodeTree *ntreeAddTree(const char *name, int type, int nodetype)
{
bNodeTree *ntree;
-
+ bNodeType *ntype;
+
/* trees are created as local trees if they of compositor, material or texture type,
* node groups and other tree types are created as library data.
*/
- if (is_group || !ELEM3(type, NTREE_COMPOSIT, NTREE_SHADER, NTREE_TEXTURE))
- ntree= alloc_libblock(&G.main->nodetree, ID_NT, name);
- else {
+ if (ELEM3(type, NTREE_COMPOSIT, NTREE_SHADER, NTREE_TEXTURE) && nodetype==0) {
ntree= MEM_callocN(sizeof(bNodeTree), "new node tree");
*( (short *)ntree->id.name )= ID_NT; /* not "type", as that is ntree->type */
BLI_strncpy(ntree->id.name+2, name, sizeof(ntree->id.name));
}
-
+ else
+ ntree= alloc_libblock(&G.main->nodetree, ID_NT, name);
+
ntree->type= type;
- if (is_group)
- ntree->flag |= NTREE_GROUP;
-
+ ntree->nodetype = nodetype;
+
ntreeInitTypes(ntree);
+
+ ntype = node_get_type(ntree, ntree->nodetype);
+ if (ntype && ntype->inittreefunc)
+ ntype->inittreefunc(ntree);
+
return ntree;
}
@@ -1556,6 +1565,30 @@
return node->typeinfo->name;
}
+struct bNodeTree *nodeEditGet(struct bNode *node)
+{
+ if (node->typeinfo->edit_get)
+ return node->typeinfo->edit_get(node);
+ else
+ return NULL;
+}
+
+struct bNodeTree *nodeEditSet(struct bNode *node, int edit)
+{
+ if (node->typeinfo->edit_set)
+ return node->typeinfo->edit_set(node, edit);
+ else if (node->typeinfo->edit_get)
+ return node->typeinfo->edit_get(node);
+ else
+ return NULL;
+}
+
+void nodeEditClear(struct bNode *node)
+{
+ if (node->typeinfo->edit_clear)
+ node->typeinfo->edit_clear(node);
+}
+
struct bNodeTemplate nodeMakeTemplate(struct bNode *node)
{
bNodeTemplate ntemp;
@@ -1638,6 +1671,21 @@
ntype->verifyfunc = verifyfunc;
}
+void node_type_init_tree(struct bNodeType *ntype, void (*inittreefunc)(struct bNodeTree *))
+{
+ ntype->inittreefunc = inittreefunc;
+}
+
+void node_type_edit(struct bNodeType *ntype,
+ struct bNodeTree *(*edit_get)(struct bNode *node),
+ struct bNodeTree *(*edit_set)(struct bNode *node, int edit),
+ void (*edit_clear)(struct bNode *node))
+{
+ ntype->edit_get = edit_get;
+ ntype->edit_set = edit_set;
+ ntype->edit_clear = edit_clear;
+}
+
static bNodeType *is_nodetype_registered(ListBase *typelist, int type)
{
bNodeType *ntype= typelist->first;
@@ -1664,6 +1712,7 @@
static void registerCompositNodes(ListBase *ntypelist)
{
register_node_type_group(ntypelist);
+ register_node_type_forloop(ntypelist);
register_node_type_cmp_rlayers(ntypelist);
register_node_type_cmp_image(ntypelist);
@@ -1740,6 +1789,7 @@
static void registerShaderNodes(ListBase *ntypelist)
{
register_node_type_group(ntypelist);
+ register_node_type_forloop(ntypelist);
register_node_type_sh_output(ntypelist);
register_node_type_sh_mix_rgb(ntypelist);
@@ -1769,6 +1819,7 @@
static void registerTextureNodes(ListBase *ntypelist)
{
register_node_type_group(ntypelist);
+ register_node_type_forloop(ntypelist);
register_node_type_tex_math(ntypelist);
register_node_type_tex_mix_rgb(ntypelist);
@@ -1812,6 +1863,7 @@
static void registerModifierNodes(ListBase *ntypelist)
{
register_node_type_group(ntypelist);
+ register_node_type_forloop(ntypelist);
#if 0
nodeRegisterModMesh(ntypelist);
@@ -1824,6 +1876,7 @@
static void registerParticleNodes(ListBase *ntypelist)
{
register_node_type_group(ntypelist);
+ register_node_type_forloop(ntypelist);
}
static void remove_dynamic_typeinfos(ListBase *list)
Modified: branches/particles-2010/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/particles-2010/source/blender/blenloader/intern/readfile.c 2011-02-16 10:57:58 UTC (rev 34899)
+++ branches/particles-2010/source/blender/blenloader/intern/readfile.c 2011-02-16 11:02:01 UTC (rev 34900)
@@ -11405,8 +11405,7 @@
* this mimics the old behaviour by adding all unlinked sockets to groups.
*/
for (ntree=main->nodetree.first; ntree; ntree=ntree->id.next) {
- if (ntree->flag & NTREE_GROUP)
- node_group_add_all_sockets(ntree);
+ node_group_add_all_sockets(ntree);
}
}
Modified: branches/particles-2010/source/blender/editors/space_node/drawnode.c
===================================================================
--- branches/particles-2010/source/blender/editors/space_node/drawnode.c 2011-02-16 10:57:58 UTC (rev 34899)
+++ branches/particles-2010/source/blender/editors/space_node/drawnode.c 2011-02-16 11:02:01 UTC (rev 34900)
@@ -305,6 +305,10 @@
/* center them, is a bit of abuse of locx and locy though */
node_update_nodetree(C, ngroup, gnode->locx, gnode->locy);
+ rect->xmin = 0.0f;
+ rect->xmax = 0.0f;
+ rect->ymin = 0.0f;
+ rect->ymax = 0.0f;
counter= 1;
for(node= ngroup->nodes.first; node; node= node->next) {
if(counter) {
@@ -431,40 +435,50 @@
node_socket_circle_draw(ngroup, sock, NODE_SOCKSIZE);
sock->locx += NODE_GROUP_FRAME;
- bt = uiDefBut(gnode->block, TEX, 0, "",
- sock->locx-114, sock->locy+1, 72, NODE_DY,
- sock->name, 0, 31, 0, 0, "");
- uiButSetFunc(bt, group_verify_cb, snode, ngroup);
+ if (sock->flag & SOCK_INTERNAL) {
+ bt = uiDefBut(gnode->block, TEX, 0, "",
+ sock->locx-114, sock->locy-NODE_DYS+1, 72, NODE_DY,
+ sock->name, 0, 31, 0, 0, "");
+ uiButSetFunc(bt, group_verify_cb, snode, ngroup);
+ }
+ else {
+ bt = uiDefBut(gnode->block, TEX, 0, "",
+ sock->locx-114, sock->locy+1, 72, NODE_DY,
+ sock->name, 0, 31, 0, 0, "");
+ uiButSetFunc(bt, group_verify_cb, snode, ngroup);
+
+ node_draw_socket_button(ngroup, sock, "", gnode->block,
+ sock->locx-114, sock->locy-NODE_DY, 72,
+ NULL, NULL, NULL);
+ }
- node_draw_socket_button(ngroup, sock, "", gnode->block,
- sock->locx-114, sock->locy-NODE_DY, 72,
- NULL, NULL, NULL);
-
- uiBlockSetDirection(gnode->block, UI_TOP);
- uiBlockBeginAlign(gnode->block);
- bt = uiDefIconButO(gnode->block, BUT, "NODE_OT_group_socket_move_up", 0, ICON_TRIA_UP,
- sock->locx-40, sock->locy, 16, 16, "");
- if (!sock->prev)
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list