[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33446] branches/particles-2010: Node Editor now uses simulation nodes as library data blocks.

Lukas Toenne lukas.toenne at googlemail.com
Fri Dec 3 17:04:57 CET 2010


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

Log Message:
-----------
Node Editor now uses simulation nodes as library data blocks. This is similar to how the image editor works: the header has an ID button with search function, new and delete buttons, etc. To distinguish group node trees from top-level trees a new flag NTREE_GROUP is set in the ntreeAddTree function.

Modified Paths:
--------------
    branches/particles-2010/release/scripts/ui/space_node.py
    branches/particles-2010/source/blender/blenkernel/intern/node.c
    branches/particles-2010/source/blender/blenloader/intern/readfile.c
    branches/particles-2010/source/blender/editors/include/ED_node.h
    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_header.c
    branches/particles-2010/source/blender/editors/space_node/node_intern.h
    branches/particles-2010/source/blender/editors/space_node/node_ops.c
    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_nodetree.c
    branches/particles-2010/source/blender/makesrna/intern/rna_space.c

Modified: branches/particles-2010/release/scripts/ui/space_node.py
===================================================================
--- branches/particles-2010/release/scripts/ui/space_node.py	2010-12-03 14:35:10 UTC (rev 33445)
+++ branches/particles-2010/release/scripts/ui/space_node.py	2010-12-03 16:04:56 UTC (rev 33446)
@@ -72,6 +72,8 @@
         elif snode.tree_type == 'SIMULATION':
             scene = snode.id
 
+            layout.template_ID(snode, "node_tree", new="node.new_node_tree")
+
             props = layout.operator("node.compile_opencl_program", text="Compile Program")
             props.force = True
 

Modified: branches/particles-2010/source/blender/blenkernel/intern/node.c
===================================================================
--- branches/particles-2010/source/blender/blenkernel/intern/node.c	2010-12-03 14:35:10 UTC (rev 33445)
+++ branches/particles-2010/source/blender/blenkernel/intern/node.c	2010-12-03 16:04:56 UTC (rev 33446)
@@ -1302,7 +1302,10 @@
 	bNodeTreeTypeInfo *treetype= ntreeGetTypeInfo(type);
 	bNodeTree *ntree;
 
-	if (is_group)
+	/* 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 {
 		ntree= MEM_callocN(sizeof(bNodeTree), "new node tree");
@@ -1311,6 +1314,8 @@
 	}
 
 	ntree->type= type;
+	if (is_group)
+		ntree->flag |= NTREE_GROUP;
 
 	ntreeInitTypes(ntree);
 	return ntree;

Modified: branches/particles-2010/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/particles-2010/source/blender/blenloader/intern/readfile.c	2010-12-03 14:35:10 UTC (rev 33445)
+++ branches/particles-2010/source/blender/blenloader/intern/readfile.c	2010-12-03 16:04:56 UTC (rev 33446)
@@ -4837,6 +4837,8 @@
 								snode->nodetree= ((Scene *)snode->id)->nodetree;
 							else if(GS(snode->id->name)==ID_TE)
 								snode->nodetree= ((Tex *)snode->id)->nodetree;
+							else if(GS(snode->id->name)==ID_NT)
+								snode->nodetree= (bNodeTree *)snode->id;
 						}
 					}
 				}

Modified: branches/particles-2010/source/blender/editors/include/ED_node.h
===================================================================
--- branches/particles-2010/source/blender/editors/include/ED_node.h	2010-12-03 14:35:10 UTC (rev 33445)
+++ branches/particles-2010/source/blender/editors/include/ED_node.h	2010-12-03 16:04:56 UTC (rev 33446)
@@ -40,6 +40,7 @@
 void ED_init_node_butfuncs(void);
 
 /* node_draw.c */
+void ED_node_tree_update(struct SpaceNode *snode, struct Scene *scene);
 void ED_node_changed_update(struct ID *id, struct bNode *node);
 void ED_node_generic_update(struct Main *bmain, struct bNodeTree *ntree, struct bNode *node);
 

Modified: branches/particles-2010/source/blender/editors/space_node/node_draw.c
===================================================================
--- branches/particles-2010/source/blender/editors/space_node/node_draw.c	2010-12-03 14:35:10 UTC (rev 33445)
+++ branches/particles-2010/source/blender/editors/space_node/node_draw.c	2010-12-03 16:04:56 UTC (rev 33446)
@@ -70,6 +70,15 @@
 extern void ui_dropshadow(rctf *rct, float radius, float aspect, int select);
 extern void ui_draw_tria_icon(float x, float y, char dir);
 
+/* XXX update functions for node editor are a mess, needs a clear concept */
+void ED_node_tree_update(SpaceNode *snode, Scene *scene)
+{
+	snode_set_context(snode, scene);
+	
+	if(snode->nodetree && snode->nodetree->id.us==0)
+		snode->nodetree->id.us= 1;
+}
+
 void ED_node_changed_update(ID *id, bNode *node)
 {
 	bNodeTree *nodetree, *edittree;

Modified: branches/particles-2010/source/blender/editors/space_node/node_edit.c
===================================================================
--- branches/particles-2010/source/blender/editors/space_node/node_edit.c	2010-12-03 14:35:10 UTC (rev 33445)
+++ branches/particles-2010/source/blender/editors/space_node/node_edit.c	2010-12-03 16:04:56 UTC (rev 33446)
@@ -362,7 +362,11 @@
 	bNode *node= NULL;
 	short idtype= GS(id->name);
 
-	if(idtype == ID_MA) {
+	if(idtype == ID_NT) {
+		*ntree= (bNodeTree*)id;
+		if(treetype) *treetype= (*ntree)->type;
+	}
+	else if(idtype == ID_MA) {
 		*ntree= ((Material*)id)->nodetree;
 		if(treetype) *treetype= NTREE_SHADER;
 	}
@@ -400,8 +404,6 @@
 {
 	Object *ob= OBACT;
 	
-	snode->nodetree= NULL;
-	snode->edittree= NULL;
 	snode->id= snode->from= NULL;
 	
 	if(snode->treetype==NTREE_SHADER) {
@@ -415,7 +417,6 @@
 		}
 	}
 	else if(snode->treetype==NTREE_COMPOSIT) {
-		snode->from= NULL;
 		snode->id= &scene->id;
 		
 		/* bit clumsy but reliable way to see if we draw first time */
@@ -458,9 +459,10 @@
 			}
 		}
 	}
-	else if(snode->treetype==NTREE_SIMULATION) {
-		snode->from= &ob->id;
-		snode->id= &ob->id;
+	else {
+		/* XXX could update from selected object + node tree modifier, if not pinning */
+		if (snode->nodetree)
+			snode->id = &snode->nodetree->id;
 	}
 
 	if(snode->id)
@@ -2507,6 +2509,53 @@
 	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
 }
 
+/********************** New simulation node tree operator *********************/
+
+static int new_node_tree_exec(bContext *C, wmOperator *op)
+{
+	SpaceNode *snode;
+	bNodeTree *ntree;
+	PointerRNA ptr, idptr;
+	PropertyRNA *prop;
+	
+	/* retrieve state */
+	snode= CTX_wm_space_node(C);
+	
+	ntree = ntreeAddTree("Simulation", NTREE_SIMULATION, 0);
+	if(!ntree)
+		return OPERATOR_CANCELLED;
+	
+	/* hook into UI */
+	uiIDContextProperty(C, &ptr, &prop);
+
+	if(prop) {
+		RNA_id_pointer_create(&ntree->id, &idptr);
+		RNA_property_pointer_set(&ptr, prop, idptr);
+		RNA_property_update(C, &ptr, prop);
+	}
+	else if(snode) {
+		Scene *scene= CTX_data_scene(C);
+		snode->nodetree = ntree;
+		
+		ED_node_tree_update(snode, scene);
+	}
+	
+	return OPERATOR_FINISHED;
+}
+
+void NODE_OT_new_node_tree(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "New node tree";
+	ot->idname= "NODE_OT_new_node_tree";
+	
+	/* api callbacks */
+	ot->exec= new_node_tree_exec;
+	
+	/* flags */
+	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}
+
 /* ****************** Compile OpenCL Program Node Operator  ******************* */
 
 static int node_compile_opencl_program_exec(bContext *C, wmOperator *op)

Modified: branches/particles-2010/source/blender/editors/space_node/node_header.c
===================================================================
--- branches/particles-2010/source/blender/editors/space_node/node_header.c	2010-12-03 14:35:10 UTC (rev 33445)
+++ branches/particles-2010/source/blender/editors/space_node/node_header.c	2010-12-03 16:04:56 UTC (rev 33446)
@@ -101,9 +101,13 @@
 	/* mostly taken from toolbox.c, node_add_sublevel() */
 	if(nodeclass==NODE_CLASS_GROUP) {
 		bNodeTree *ngroup= bmain->nodetree.first;
-		for(; ngroup; ngroup= ngroup->id.next)
+		for(; ngroup; ngroup= ngroup->id.next) {
+			/* only use group trees */
+			if(!(ngroup->flag & NTREE_GROUP))
+				continue;
 			if(ngroup->type==ntree->type)
 				tot++;
+		}
 	}
 	else {
 		bNodeType *type = ntreeGetTypeInfo(ntree->type)->node_types.first;
@@ -123,8 +127,10 @@
 	
 	if(nodeclass==NODE_CLASS_GROUP) {
 		bNodeTree *ngroup= bmain->nodetree.first;
-
 		for(tot=0, a=0; ngroup; ngroup= ngroup->id.next, tot++) {
+			/* only use group trees */
+			if(!(ngroup->flag & NTREE_GROUP))
+				continue;
 			if(ngroup->type==ntree->type) {
 				uiItemV(layout, ngroup->id.name+2, 0, NODE_GROUP_MENU+tot);
 				a++;

Modified: branches/particles-2010/source/blender/editors/space_node/node_intern.h
===================================================================
--- branches/particles-2010/source/blender/editors/space_node/node_intern.h	2010-12-03 14:35:10 UTC (rev 33445)
+++ branches/particles-2010/source/blender/editors/space_node/node_intern.h	2010-12-03 16:04:56 UTC (rev 33446)
@@ -125,6 +125,8 @@
 void NODE_OT_property_socket_add(struct wmOperatorType *ot);
 void NODE_OT_property_socket_remove(struct wmOperatorType *ot);
 
+void NODE_OT_new_node_tree(struct wmOperatorType *ot);
+
 void NODE_OT_compile_opencl_program(struct wmOperatorType *ot);
 
 // XXXXXX

Modified: branches/particles-2010/source/blender/editors/space_node/node_ops.c
===================================================================
--- branches/particles-2010/source/blender/editors/space_node/node_ops.c	2010-12-03 14:35:10 UTC (rev 33445)
+++ branches/particles-2010/source/blender/editors/space_node/node_ops.c	2010-12-03 16:04:56 UTC (rev 33446)
@@ -87,6 +87,8 @@
 	WM_operatortype_append(NODE_OT_property_socket_add);
 	WM_operatortype_append(NODE_OT_property_socket_remove);
 	
+	WM_operatortype_append(NODE_OT_new_node_tree);
+	
 	WM_operatortype_append(NODE_OT_compile_opencl_program);
 }
 

Modified: branches/particles-2010/source/blender/makesdna/DNA_node_types.h
===================================================================
--- branches/particles-2010/source/blender/makesdna/DNA_node_types.h	2010-12-03 14:35:10 UTC (rev 33445)
+++ branches/particles-2010/source/blender/makesdna/DNA_node_types.h	2010-12-03 16:04:56 UTC (rev 33446)
@@ -277,6 +277,7 @@
 #define NTREE_UPDATE				2	/* tagged for update */
 #define NTREE_TAGGED				4	/* generic tag for recursive functions */
 #define NTREE_NEED_RECOMPILE		8	/* simulation tree has program changes that require recompile */
+#define NTREE_GROUP					16	/* node tree is created as a group node tree */
 
 /* data structs, for node->storage */
 

Modified: branches/particles-2010/source/blender/makesrna/RNA_access.h
===================================================================
--- branches/particles-2010/source/blender/makesrna/RNA_access.h	2010-12-03 14:35:10 UTC (rev 33445)
+++ branches/particles-2010/source/blender/makesrna/RNA_access.h	2010-12-03 16:04:56 UTC (rev 33446)
@@ -434,6 +434,7 @@
 extern StructRNA RNA_ShrinkwrapConstraint;
 extern StructRNA RNA_ShrinkwrapModifier;
 extern StructRNA RNA_SimpleDeformModifier;
+extern StructRNA RNA_SimulationNodeTree;
 extern StructRNA RNA_SmokeCollSettings;
 extern StructRNA RNA_SmokeDomainSettings;
 extern StructRNA RNA_SmokeFlowSettings;

Modified: branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c
===================================================================
--- branches/particles-2010/source/blender/makesrna/intern/rna_nodetree.c	2010-12-03 14:35:10 UTC (rev 33445)

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list