[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