[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