[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33437] trunk/blender/source/blender: updates to patch from Dan Eicher, allow adding a NodeGroup through bpy. data.node_groups.new(name, type)

Campbell Barton ideasman42 at gmail.com
Fri Dec 3 04:45:34 CET 2010


Revision: 33437
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33437
Author:   campbellbarton
Date:     2010-12-03 04:44:39 +0100 (Fri, 03 Dec 2010)

Log Message:
-----------
updates to patch from Dan Eicher, allow adding a NodeGroup through bpy.data.node_groups.new(name, type)
made some minor changes.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_node.h
    trunk/blender/source/blender/blenkernel/intern/node.c
    trunk/blender/source/blender/editors/space_node/node_edit.c
    trunk/blender/source/blender/makesrna/intern/rna_main_api.c
    trunk/blender/source/blender/makesrna/intern/rna_nodetree.c

Modified: trunk/blender/source/blender/blenkernel/BKE_node.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_node.h	2010-12-03 02:24:21 UTC (rev 33436)
+++ trunk/blender/source/blender/blenkernel/BKE_node.h	2010-12-03 03:44:39 UTC (rev 33437)
@@ -129,7 +129,7 @@
 
 void			ntreeVerifyTypes(struct bNodeTree *ntree);
 
-struct bNodeTree *ntreeAddTree(int type);
+struct bNodeTree *ntreeAddTree(const char *name, int type, const short is_group);
 void			ntreeInitTypes(struct bNodeTree *ntree);
 
 void			ntreeMakeOwnType(struct bNodeTree *ntree);

Modified: trunk/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/node.c	2010-12-03 02:24:21 UTC (rev 33436)
+++ trunk/blender/source/blender/blenkernel/intern/node.c	2010-12-03 03:44:39 UTC (rev 33437)
@@ -496,9 +496,7 @@
 		return NULL;
 	
 	/* OK! new nodetree */
-	ngroup= alloc_libblock(&G.main->nodetree, ID_NT, "NodeGroup");
-	ngroup->type= ntree->type;
-	ngroup->alltypes= ntree->alltypes;
+	ngroup= ntreeAddTree("NodeGroup", ntree->type, TRUE);
 	
 	/* move nodes over */
 	for(node= ntree->nodes.first; node; node= nextn) {
@@ -884,6 +882,11 @@
 	bNode *node= NULL;
 	bNodeType *ntype= NULL;
 
+	if (ngroup && BLI_findindex(&G.main->nodetree, ngroup)==-1) {
+		printf("nodeAddNodeType() error: '%s' not in main->nodetree\n", ngroup->id.name);
+		return NULL;
+	}
+
 	if(type>=NODE_DYNAMIC_MENU) {
 		int a=0, idx= type-NODE_DYNAMIC_MENU;
 		ntype= ntree->alltypes.first;
@@ -1034,21 +1037,22 @@
 }
 
 
-bNodeTree *ntreeAddTree(int type)
+bNodeTree *ntreeAddTree(const char *name, int type, const short is_group)
 {
-	bNodeTree *ntree= MEM_callocN(sizeof(bNodeTree), "new node tree");
+	bNodeTree *ntree;
+
+	if (is_group)
+		ntree= alloc_libblock(&G.main->nodetree, ID_NT, name);
+	else {
+		ntree= MEM_callocN(sizeof(bNodeTree), "new node tree");
+		*( (short *)ntree->id.name )= type;
+		BLI_strncpy(ntree->id.name+2, name, sizeof(ntree->id.name));
+	}
+
 	ntree->type= type;
 	ntree->alltypes.first = NULL;
 	ntree->alltypes.last = NULL;
 
-	/* this helps RNA identify ID pointers as nodetree */
-	if(ntree->type==NTREE_SHADER)
-		BLI_strncpy(ntree->id.name, "NTShader Nodetree", sizeof(ntree->id.name));
-	else if(ntree->type==NTREE_COMPOSIT)
-		BLI_strncpy(ntree->id.name, "NTCompositing Nodetree", sizeof(ntree->id.name));
-	else if(ntree->type==NTREE_TEXTURE)
-		BLI_strncpy(ntree->id.name, "NTTexture Nodetree", sizeof(ntree->id.name));
-	
 	ntreeInitTypes(ntree);
 	return ntree;
 }

Modified: trunk/blender/source/blender/editors/space_node/node_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_edit.c	2010-12-03 02:24:21 UTC (rev 33436)
+++ trunk/blender/source/blender/editors/space_node/node_edit.c	2010-12-03 03:44:39 UTC (rev 33437)
@@ -244,7 +244,7 @@
 		return;
 	}
 	
-	ma->nodetree= ntreeAddTree(NTREE_SHADER);
+	ma->nodetree= ntreeAddTree("Shader Nodetree", NTREE_SHADER, FALSE);
 	
 	out= nodeAddNodeType(ma->nodetree, SH_NODE_OUTPUT, NULL, NULL);
 	out->locx= 300.0f; out->locy= 300.0f;
@@ -275,7 +275,7 @@
 		return;
 	}
 	
-	sce->nodetree= ntreeAddTree(NTREE_COMPOSIT);
+	sce->nodetree= ntreeAddTree("Compositing Nodetree", NTREE_COMPOSIT, FALSE);
 	
 	out= nodeAddNodeType(sce->nodetree, CMP_NODE_COMPOSITE, NULL, NULL);
 	out->locx= 300.0f; out->locy= 400.0f;
@@ -312,7 +312,7 @@
 		return;
 	}
 	
-	tx->nodetree= ntreeAddTree(NTREE_TEXTURE);
+	tx->nodetree= ntreeAddTree("Texture Nodetree", NTREE_TEXTURE, FALSE);
 	
 	out= nodeAddNodeType(tx->nodetree, TEX_NODE_OUTPUT, NULL, NULL);
 	out->locx= 300.0f; out->locy= 300.0f;

Modified: trunk/blender/source/blender/makesrna/intern/rna_main_api.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_main_api.c	2010-12-03 02:24:21 UTC (rev 33436)
+++ trunk/blender/source/blender/makesrna/intern/rna_main_api.c	2010-12-03 03:44:39 UTC (rev 33437)
@@ -201,10 +201,12 @@
 	/* XXX python now has invalid pointer? */
 }
 
-// XXX, commended for now, need to see how this can be used with node groups.
-struct bNodeTree *rna_Main_nodetree_new(Main *bmain, int type)
+struct bNodeTree *rna_Main_nodetree_new(Main *bmain, const char *name, int type)
 {
-	bNodeTree *tree = ntreeAddTree(type);
+	bNodeTree *tree = ntreeAddTree(name, type, TRUE);
+
+	ntreeMakeOwnType(tree);
+
 	tree->id.us--;
 	return tree;
 }
@@ -598,24 +600,25 @@
 void RNA_def_main_node_groups(BlenderRNA *brna, PropertyRNA *cprop)
 {
 	StructRNA *srna;
-//	FunctionRNA *func;
-//	PropertyRNA *parm;
+	FunctionRNA *func;
+	PropertyRNA *parm;
 
-/*	static EnumPropertyItem node_nodetree_items[] = {
+	static EnumPropertyItem node_nodetree_items[] = {
 	{0, "SHADER",       0,    "Shader",       ""},
 	{1, "COMPOSITE",    0,    "Composite",    ""},
 	{2, "TEXTURE",      0,    "Texture",      ""},
-	{0, NULL, 0, NULL, NULL}}; */
+	{0, NULL, 0, NULL, NULL}};
 
 	RNA_def_property_srna(cprop, "MainNodeTrees");
 	srna= RNA_def_struct(brna, "MainNodeTrees", NULL);
 	RNA_def_struct_ui_text(srna, "Main Node Trees", "Collection of node trees");
 
-#if 0 // need to see some examples of using these functions before enabling.
 	func= RNA_def_function(srna, "new", "rna_Main_nodetree_new");
 	RNA_def_function_ui_description(func, "Add a new node tree to the main database");
-	parm= RNA_def_enum(func, "type", node_nodetree_items, 0, "Type", "The type of curve object to add");
+	parm= RNA_def_string(func, "name", "NodeGroup", 0, "", "New name for the datablock.");
 	RNA_def_property_flag(parm, PROP_REQUIRED);
+	parm= RNA_def_enum(func, "type", node_nodetree_items, 0, "Type", "The type of node_group to add");
+	RNA_def_property_flag(parm, PROP_REQUIRED);
 	/* return type */
 	parm= RNA_def_pointer(func, "tree", "NodeTree", "", "New node tree datablock.");
 	RNA_def_function_return(func, parm);
@@ -625,7 +628,6 @@
 	RNA_def_function_ui_description(func, "Remove a node tree from the current blendfile.");
 	parm= RNA_def_pointer(func, "tree", "NodeTree", "", "Node tree to remove.");
 	RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
-#endif
 }
 void RNA_def_main_meshes(BlenderRNA *brna, PropertyRNA *cprop)
 {

Modified: trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_nodetree.c	2010-12-03 02:24:21 UTC (rev 33436)
+++ trunk/blender/source/blender/makesrna/intern/rna_nodetree.c	2010-12-03 03:44:39 UTC (rev 33437)
@@ -429,8 +429,14 @@
 
 static bNode *rna_NodeTree_node_new(bNodeTree *ntree, bContext *C, ReportList *reports, int type, bNodeTree *group)
 {
-	bNode *node= nodeAddNodeType(ntree, type, group, NULL);
+	bNode *node;
 
+	if (type == NODE_GROUP && group == NULL) {
+		BKE_reportf(reports, RPT_ERROR, "node type \'GROUP\' missing group argument");
+		return NULL;
+	}
+	node = nodeAddNodeType(ntree, type, group, NULL);
+
 	if (node == NULL) {
 		 BKE_reportf(reports, RPT_ERROR, "Unable to create node");
 	}
@@ -438,6 +444,9 @@
 		nodeVerifyGroup(ntree); /* update group node socket links*/
 		NodeTagChanged(ntree, node);
 		WM_event_add_notifier(C, NC_NODE|NA_EDITED, ntree);
+
+		if (group)
+			id_us_plus(&group->id);
 	}
 
 	return node;





More information about the Bf-blender-cvs mailing list