[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24478] trunk/blender/source/blender: * Fixed nodetree animation by giving nodes unique names

Matt Ebb matt at mke3.net
Wed Nov 11 10:11:21 CET 2009


Revision: 24478
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24478
Author:   broken
Date:     2009-11-11 10:11:21 +0100 (Wed, 11 Nov 2009)

Log Message:
-----------
* Fixed nodetree animation by giving nodes unique names

Now the rna path to nodes happens via the node name, which is ensured to be unique via RNA.
As part of this, the node->username string has been removed, upon renaming the node itself it takes care of making sure it's unique (like bones, constraints, etc). There's currently no interactive rename tool, but you can do it via the datablocks editor.

- plus a few notifier tweaks, using the newer NC_NODE notifier to refresh graph editor etc.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_node.h
    trunk/blender/source/blender/blenkernel/intern/node.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/editors/space_action/space_action.c
    trunk/blender/source/blender/editors/space_graph/space_graph.c
    trunk/blender/source/blender/editors/space_nla/space_nla.c
    trunk/blender/source/blender/editors/space_node/node_draw.c
    trunk/blender/source/blender/editors/space_node/node_edit.c
    trunk/blender/source/blender/makesdna/DNA_node_types.h
    trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
    trunk/blender/source/blender/windowmanager/WM_types.h

Modified: trunk/blender/source/blender/blenkernel/BKE_node.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_node.h	2009-11-11 08:32:29 UTC (rev 24477)
+++ trunk/blender/source/blender/blenkernel/BKE_node.h	2009-11-11 09:11:21 UTC (rev 24478)
@@ -162,6 +162,7 @@
 void			nodeAddToPreview(struct bNode *, float *, int, int);
 
 void			nodeUnlinkNode(struct bNodeTree *ntree, struct bNode *node);
+void			nodeUniqueName(struct bNodeTree *ntree, struct bNode *node);
 void			nodeAddSockets(struct bNode *node, struct bNodeType *ntype);
 struct bNode	*nodeAddNodeType(struct bNodeTree *ntree, int type, struct bNodeTree *ngroup, struct ID *id);
 void			nodeRegisterType(struct ListBase *typelist, const struct bNodeType *ntype) ;

Modified: trunk/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/node.c	2009-11-11 08:32:29 UTC (rev 24477)
+++ trunk/blender/source/blender/blenkernel/intern/node.c	2009-11-11 09:11:21 UTC (rev 24478)
@@ -32,6 +32,7 @@
 #endif
 
 #include <stdlib.h>
+#include <stddef.h>
 #include <string.h>
 
 #include "DNA_ID.h"
@@ -903,8 +904,12 @@
 		}
 	}
 }
+/* Find the first available, non-duplicate name for a given node */
+void nodeUniqueName(bNodeTree *ntree, bNode *node)
+{
+	BLI_uniquename(&ntree->nodes, node, "Node", '.', offsetof(bNode, name), 32);
+}
 
-
 bNode *nodeAddNodeType(bNodeTree *ntree, int type, bNodeTree *ngroup, ID *id)
 {
 	bNode *node= NULL;
@@ -937,6 +942,9 @@
 	}
 	else
 		BLI_strncpy(node->name, ntype->name, NODE_MAXSTR);
+
+	nodeUniqueName(ntree, node);
+	
 	node->type= ntype->type;
 	node->flag= NODE_SELECT|ntype->flag;
 	node->width= ntype->width;
@@ -989,6 +997,8 @@
 	bNodeSocket *sock, *oldsock;
 
 	*nnode= *node;
+	nodeUniqueName(ntree, nnode);
+	
 	BLI_addtail(&ntree->nodes, nnode);
 	
 	BLI_duplicatelist(&nnode->inputs, &node->inputs);

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2009-11-11 08:32:29 UTC (rev 24477)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2009-11-11 09:11:21 UTC (rev 24478)
@@ -10037,6 +10037,20 @@
 				sce= sce->id.next;
 			}
 		}
+		{
+			/* ensure all nodes have unique names */
+			bNodeTree *ntree= main->nodetree.first;
+			while(ntree) {
+				bNode *node=ntree->nodes.first;
+				
+				while(node) {
+					nodeUniqueName(ntree, node);
+					node= node->next;
+				}
+				
+				ntree= ntree->id.next;
+			}
+		}
 	}
 
 	/* WATCH IT!!!: pointers from libdata have not been converted yet here! */

Modified: trunk/blender/source/blender/editors/space_action/space_action.c
===================================================================
--- trunk/blender/source/blender/editors/space_action/space_action.c	2009-11-11 08:32:29 UTC (rev 24477)
+++ trunk/blender/source/blender/editors/space_action/space_action.c	2009-11-11 09:11:21 UTC (rev 24478)
@@ -341,6 +341,13 @@
 					break;
 			}
 			break;
+		case NC_NODE:
+			switch(wmn->action) {
+				case NA_EDITED:
+					ED_region_tag_redraw(ar);
+					break;
+			}
+			break;
 		default:
 			if(wmn->data==ND_KEYS)
 				ED_region_tag_redraw(ar);

Modified: trunk/blender/source/blender/editors/space_graph/space_graph.c
===================================================================
--- trunk/blender/source/blender/editors/space_graph/space_graph.c	2009-11-11 08:32:29 UTC (rev 24477)
+++ trunk/blender/source/blender/editors/space_graph/space_graph.c	2009-11-11 09:11:21 UTC (rev 24478)
@@ -417,6 +417,13 @@
 					break;
 			}
 			break;
+		case NC_NODE:
+			switch(wmn->action) {
+				case NA_EDITED:
+					ED_region_tag_redraw(ar);
+					break;
+			}
+			break;
 		default:
 			if(wmn->data==ND_KEYS)
 				ED_region_tag_redraw(ar);

Modified: trunk/blender/source/blender/editors/space_nla/space_nla.c
===================================================================
--- trunk/blender/source/blender/editors/space_nla/space_nla.c	2009-11-11 08:32:29 UTC (rev 24477)
+++ trunk/blender/source/blender/editors/space_nla/space_nla.c	2009-11-11 09:11:21 UTC (rev 24478)
@@ -432,6 +432,13 @@
 					break;
 			}
 			break;
+		case NC_NODE:
+			switch(wmn->action) {
+				case NA_EDITED:
+					ED_region_tag_redraw(ar);
+					break;
+			}
+			break;
 		default:
 			if(wmn->data==ND_KEYS)
 				ED_region_tag_redraw(ar);

Modified: trunk/blender/source/blender/editors/space_node/node_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_draw.c	2009-11-11 08:32:29 UTC (rev 24477)
+++ trunk/blender/source/blender/editors/space_node/node_draw.c	2009-11-11 09:11:21 UTC (rev 24478)
@@ -719,12 +719,14 @@
 	else
 		UI_ThemeColor(TH_TEXT);
 	
-	if(node->flag & NODE_MUTED)
-		sprintf(showname, "[%s]", node->name);
-	else if(node->username[0])
-		sprintf(showname, "(%s) %s", node->username, node->name);
+	if(node->flag & NODE_CUSTOM_NAME)
+		BLI_strncpy(showname, node->name, 32);
 	else
-		BLI_strncpy(showname, node->name, 128);
+		/* todo: auto name display for node types */
+		BLI_strncpy(showname, node->name, 32);
+
+	//if(node->flag & NODE_MUTED)
+	//	sprintf(showname, "[%s]", showname);
 	
 	uiDefBut(node->block, LABEL, 0, showname, (short)(rct->xmin+15), (short)(rct->ymax-NODE_DY), 
 			 (int)(iconofs - rct->xmin-18.0f), NODE_DY,  NULL, 0, 0, 0, 0, "");
@@ -878,12 +880,15 @@
 	
 	if(node->miniwidth>0.0f) {
 
-		if(node->flag & NODE_MUTED)
-			sprintf(showname, "[%s]", node->name);
-		else if(node->username[0])
-			sprintf(showname, "(%s)%s", node->username, node->name);
+
+		if(node->flag & NODE_CUSTOM_NAME)
+			BLI_strncpy(showname, node->name, 128);
 		else
+			/* todo: auto name display */
 			BLI_strncpy(showname, node->name, 128);
+	
+		//if(node->flag & NODE_MUTED)
+		//	sprintf(showname, "[%s]", showname);
 
 		uiDefBut(node->block, LABEL, 0, showname, (short)(rct->xmin+15), (short)(centy-10), 
 				 (int)(rct->xmax - rct->xmin-18.0f -12.0f), NODE_DY,  NULL, 0, 0, 0, 0, "");
@@ -1021,12 +1026,8 @@
 	/* backdrop title */
 	UI_ThemeColor(TH_TEXT_HI);
 
-	if(gnode->username[0]) {
-		strcpy(showname,"(");
-		strcat(showname, gnode->username);
-		strcat(showname,") ");
-		strcat(showname, ngroup->id.name+2);
-	}
+	if (gnode->flag & NODE_CUSTOM_NAME)
+		strcat(showname, gnode->name);
 	else
 		strcpy(showname, ngroup->id.name+2);
 

Modified: trunk/blender/source/blender/editors/space_node/node_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_edit.c	2009-11-11 08:32:29 UTC (rev 24477)
+++ trunk/blender/source/blender/editors/space_node/node_edit.c	2009-11-11 09:11:21 UTC (rev 24478)
@@ -1251,6 +1251,8 @@
 
 /* ******************** rename ******************* */
 
+
+/* should go through RNA */
 void node_rename(SpaceNode *snode)
 {
 	bNode *node, *rename_node;
@@ -1266,7 +1268,7 @@
 
 	if(found_node) {
 		rename_node= nodeGetActive(snode->edittree);
-		node_rename_but((char *)rename_node->username);
+		node_rename_but((char *)rename_node->name);
 	
 		// allqueue(REDRAWNODE, 1);
 	}

Modified: trunk/blender/source/blender/makesdna/DNA_node_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_node_types.h	2009-11-11 08:32:29 UTC (rev 24477)
+++ trunk/blender/source/blender/makesdna/DNA_node_types.h	2009-11-11 09:11:21 UTC (rev 24478)
@@ -110,7 +110,6 @@
 	struct bNode *next, *prev, *new_node;
 	
 	char name[32];
-	char username[32];	/* custom name defined by user */
 	short type, flag;
 	short done, level;		/* both for dependency and sorting */
 	short lasty, menunr;	/* lasty: check preview render status, menunr: browse ID blocks */
@@ -152,6 +151,7 @@
 #define NODE_TEST			256
 		/* composite: don't do node but pass on buffer(s) */
 #define NODE_MUTED			512
+#define NODE_CUSTOM_NAME		1024
 
 typedef struct bNodeLink {
 	struct bNodeLink *next, *prev;

Modified: trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_nodetree.c	2009-11-11 08:32:29 UTC (rev 24477)
+++ trunk/blender/source/blender/makesrna/intern/rna_nodetree.c	2009-11-11 09:11:21 UTC (rev 24478)
@@ -36,91 +36,14 @@
 #include "DNA_scene_types.h"
 #include "DNA_texture_types.h"
 
+#include "BKE_animsys.h"
 #include "BKE_main.h"
 #include "BKE_node.h"
 #include "BKE_image.h"
 #include "BKE_texture.h"
 
-static EnumPropertyItem node_blend_type_items[] = {
-	{ 0, "MIX",          0, "Mix",         ""},
-	{ 1, "ADD",          0, "Add",         ""},
-	{ 3, "SUBTRACT",     0, "Subtract",    ""},
-	{ 2, "MULTIPLY",     0, "Multiply",    ""},
-	{ 4, "SCREEN",       0, "Screen",      ""},
-	{ 9, "OVERLAY",      0, "Overlay",     ""},
-	{ 5, "DIVIDE",       0, "Divide",      ""},
-	{ 6, "DIFFERENCE",   0, "Difference",  ""},
-	{ 7, "DARKEN",       0, "Darken",      ""},
-	{ 8, "LIGHTEN",      0, "Lighten",     ""},
-	{10, "DODGE",        0, "Dodge",       ""},
-	{11, "BURN",         0, "Burn",        ""},
-	{15, "COLOR",        0, "Color",       ""},
-	{14, "VALUE",        0, "Value",       ""},
-	{13, "SATURATION",   0, "Saturation",  ""},
-	{12, "HUE",          0, "Hue",         ""},
-	{16, "SOFT_LIGHT",   0, "Soft Light",  ""},
-	{17, "LINEAR_LIGHT", 0, "Linear Light",""},
-	{0, NULL, 0, NULL, NULL}};
+#include "WM_types.h"
 
-static EnumPropertyItem node_flip_items[] = {
-	{0, "X",  0, "Flip X",     ""},
-	{1, "Y",  0, "Flip Y",     ""},
-	{2, "XY", 0, "Flip X & Y", ""},
-	{0, NULL, 0, NULL, NULL}};
-
-static EnumPropertyItem node_math_items[] = {
-	{ 0, "ADD",          0, "Add",          ""},
-	{ 1, "SUBTRACT",     0, "Subtract",     ""},
-	{ 2, "MULTIPLY",     0, "Multiply",     ""},
-	{ 3, "DIVIDE",       0, "Divide",       ""},
-	{ 4, "SINE",         0, "Sine",         ""},
-	{ 5, "COSINE",       0, "Cosine",       ""},
-	{ 6, "TANGENT",      0, "Tangent",      ""},
-	{ 7, "ARCSINE",      0, "Arcsine",      ""},
-	{ 8, "ARCCOSINE",    0, "Arccosine",    ""},
-	{ 9, "ARCTANGENT",   0, "Arctangent",   ""},
-	{10, "POWER",        0, "Power",        ""},
-	{11, "LOGARITHM",    0, "Logarithm",    ""},
-	{12, "MINIMUM",      0, "Minimum",      ""},
-	{13, "MAXIMUM",      0, "Maximum",      ""},

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list