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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to