Revision: 34775
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=34775
Author:   lukastoenne
Date:     2011-02-11 09:37:58 +0000 (Fri, 11 Feb 2011)
Log Message:
-----------
Removed the internal_select parameter from ntreeCopyTree. This was used just in 
one place when duplicating nodes, which is not an actual copying of the tree. 
The node duplicate operator now copies selected nodes itself.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_node.h
    trunk/blender/source/blender/blenkernel/intern/library.c
    trunk/blender/source/blender/blenkernel/intern/material.c
    trunk/blender/source/blender/blenkernel/intern/node.c
    trunk/blender/source/blender/blenkernel/intern/scene.c
    trunk/blender/source/blender/blenkernel/intern/texture.c
    trunk/blender/source/blender/editors/space_node/node_edit.c

Modified: trunk/blender/source/blender/blenkernel/BKE_node.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_node.h  2011-02-11 09:28:11 UTC 
(rev 34774)
+++ trunk/blender/source/blender/blenkernel/BKE_node.h  2011-02-11 09:37:58 UTC 
(rev 34775)
@@ -136,7 +136,7 @@
 void                   ntreeMakeOwnType(struct bNodeTree *ntree);
 void                   ntreeUpdateType(struct bNodeTree *ntree, struct 
bNodeType *ntype);
 void                   ntreeFreeTree(struct bNodeTree *ntree);
-struct bNodeTree *ntreeCopyTree(struct bNodeTree *ntree, int internal_select);
+struct bNodeTree *ntreeCopyTree(struct bNodeTree *ntree);
 void                   ntreeSwitchID(struct bNodeTree *ntree, struct ID 
*sce_from, struct ID *sce_to);
 void                   ntreeMakeLocal(struct bNodeTree *ntree);
 

Modified: trunk/blender/source/blender/blenkernel/intern/library.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/library.c    2011-02-11 
09:28:11 UTC (rev 34774)
+++ trunk/blender/source/blender/blenkernel/intern/library.c    2011-02-11 
09:37:58 UTC (rev 34775)
@@ -310,7 +310,7 @@
                        if(!test) *newid= (ID*)copy_action((bAction*)id);
                        return 1;
                case ID_NT:
-                       if(!test) *newid= (ID*)ntreeCopyTree((bNodeTree*)id, 0);
+                       if(!test) *newid= (ID*)ntreeCopyTree((bNodeTree*)id);
                        return 1;
                case ID_BR:
                        if(!test) *newid= (ID*)copy_brush((Brush*)id);

Modified: trunk/blender/source/blender/blenkernel/intern/material.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/material.c   2011-02-11 
09:28:11 UTC (rev 34774)
+++ trunk/blender/source/blender/blenkernel/intern/material.c   2011-02-11 
09:37:58 UTC (rev 34775)
@@ -223,7 +223,7 @@
        if (ma->preview) man->preview = BKE_previewimg_copy(ma->preview);
 
        if(ma->nodetree) {
-               man->nodetree= ntreeCopyTree(ma->nodetree, 0);  /* 0 == full 
new tree */
+               man->nodetree= ntreeCopyTree(ma->nodetree);     /* 0 == full 
new tree */
        }
 
        man->gpumaterial.first= man->gpumaterial.last= NULL;
@@ -1401,7 +1401,7 @@
                        matcopybuf.mtex[a]= MEM_dupallocN(mtex);
                }
        }
-       matcopybuf.nodetree= ntreeCopyTree(ma->nodetree, 0);
+       matcopybuf.nodetree= ntreeCopyTree(ma->nodetree);
        matcopybuf.preview= NULL;
        matcopybuf.gpumaterial.first= matcopybuf.gpumaterial.last= NULL;
        matcopied= 1;
@@ -1446,5 +1446,5 @@
                }
        }
 
-       ma->nodetree= ntreeCopyTree(matcopybuf.nodetree, 0);
+       ma->nodetree= ntreeCopyTree(matcopybuf.nodetree);
 }

Modified: trunk/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/node.c       2011-02-11 
09:28:11 UTC (rev 34774)
+++ trunk/blender/source/blender/blenkernel/intern/node.c       2011-02-11 
09:37:58 UTC (rev 34775)
@@ -826,7 +826,7 @@
         *      - all of wgroup's nodes are transferred across to their new home
         *      - ngroup (i.e. the source NodeTree) is left unscathed
         */
-       wgroup= ntreeCopyTree(ngroup, 0);
+       wgroup= ntreeCopyTree(ngroup);
        
        /* add the nodes into the ntree */
        for(node= wgroup->nodes.first; node; node= nextn) {
@@ -926,7 +926,7 @@
        bNodeSocket *sock;
 
        gnode->id->us--;
-       gnode->id= (ID *)ntreeCopyTree((bNodeTree *)gnode->id, 0);
+       gnode->id= (ID *)ntreeCopyTree((bNodeTree *)gnode->id);
 
        /* new_sock was set in nodeCopyNode */
        for(sock=gnode->inputs.first; sock; sock=sock->next)
@@ -1191,12 +1191,11 @@
 }
 
 /* Warning: this function gets called during some rather unexpected times
- *     - internal_select is only 1 when used for duplicating selected nodes 
(i.e. Shift-D duplicate operator)
  *     - this gets called when executing compositing updates (for threaded 
previews)
  *     - when the nodetree datablock needs to be copied (i.e. when users get 
copied)
  *     - for scene duplication use ntreeSwapID() after so we dont have stale 
pointers.
  */
-bNodeTree *ntreeCopyTree(bNodeTree *ntree, int internal_select)
+bNodeTree *ntreeCopyTree(bNodeTree *ntree)
 {
        bNodeTree *newtree;
        bNode *node, *nnode, *last;
@@ -1206,34 +1205,26 @@
        
        if(ntree==NULL) return NULL;
        
-       if(internal_select==0) {
-               /* is ntree part of library? */
-               for(newtree=G.main->nodetree.first; newtree; newtree= 
newtree->id.next)
-                       if(newtree==ntree) break;
-               if(newtree) {
-                       newtree= copy_libblock(ntree);
-               } else {
-                       newtree= MEM_dupallocN(ntree);
-                       copy_libblock_data(&newtree->id, &ntree->id, TRUE); /* 
copy animdata and ID props */
-               }
-               newtree->nodes.first= newtree->nodes.last= NULL;
-               newtree->links.first= newtree->links.last= NULL;
+       /* is ntree part of library? */
+       for(newtree=G.main->nodetree.first; newtree; newtree= newtree->id.next)
+               if(newtree==ntree) break;
+       if(newtree) {
+               newtree= copy_libblock(ntree);
+       } else {
+               newtree= MEM_dupallocN(ntree);
+               copy_libblock_data(&newtree->id, &ntree->id, TRUE); /* copy 
animdata and ID props */
        }
-       else
-               newtree= ntree;
+       newtree->nodes.first= newtree->nodes.last= NULL;
+       newtree->links.first= newtree->links.last= NULL;
        
-       last= ntree->nodes.last;
+       last = ntree->nodes.last;
        for(node= ntree->nodes.first; node; node= node->next) {
-               
                node->new_node= NULL;
-               if(internal_select==0 || (node->flag & NODE_SELECT)) {
-                       nnode= nodeCopyNode(newtree, node, internal_select);    
/* sets node->new */
-                       if(internal_select) {
-                               node->flag &= ~(NODE_SELECT|NODE_ACTIVE);
-                               nnode->flag |= NODE_SELECT;
-                       }
-               }
-               if(node==last) break;
+               nnode= nodeCopyNode(newtree, node, 0);  /* sets node->new */
+               
+               /* make sure we don't copy new nodes again! */
+               if (node==last)
+                       break;
        }
        
        /* check for copying links */
@@ -1257,15 +1248,14 @@
        }
        
        /* own type definition for group usage */
-       if(internal_select==0) {
-               if(ntree->owntype) {
-                       newtree->owntype= MEM_dupallocN(ntree->owntype);
-                       if(ntree->owntype->inputs)
-                               newtree->owntype->inputs= 
MEM_dupallocN(ntree->owntype->inputs);
-                       if(ntree->owntype->outputs)
-                               newtree->owntype->outputs= 
MEM_dupallocN(ntree->owntype->outputs);
-               }
+       if(ntree->owntype) {
+               newtree->owntype= MEM_dupallocN(ntree->owntype);
+               if(ntree->owntype->inputs)
+                       newtree->owntype->inputs= 
MEM_dupallocN(ntree->owntype->inputs);
+               if(ntree->owntype->outputs)
+                       newtree->owntype->outputs= 
MEM_dupallocN(ntree->owntype->outputs);
        }
+       
        /* weird this is required... there seem to be link pointers wrong 
still? */
        /* anyhoo, doing this solves crashes on copying entire tree (copy 
scene) and delete nodes */
        ntreeSolveOrder(newtree);
@@ -1573,7 +1563,7 @@
        }
        else if(local && lib) {
                /* this is the mixed case, we copy the tree and assign it to 
local users */
-               bNodeTree *newtree= ntreeCopyTree(ntree, 0);
+               bNodeTree *newtree= ntreeCopyTree(ntree);
                
                newtree->id.us= 0;
                
@@ -2741,7 +2731,7 @@
        }
 
        /* node copy func */
-       ltree= ntreeCopyTree(ntree, 0);
+       ltree= ntreeCopyTree(ntree);
 
        if(adt) {
                AnimData *ladt= BKE_animdata_from_id(&ltree->id);

Modified: trunk/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/scene.c      2011-02-11 
09:28:11 UTC (rev 34774)
+++ trunk/blender/source/blender/blenkernel/intern/scene.c      2011-02-11 
09:37:58 UTC (rev 34775)
@@ -171,7 +171,7 @@
                BKE_keyingsets_copy(&(scen->keyingsets), &(sce->keyingsets));
 
                if(sce->nodetree) {
-                       scen->nodetree= ntreeCopyTree(sce->nodetree, 0); /* 
copies actions */
+                       scen->nodetree= ntreeCopyTree(sce->nodetree); /* copies 
actions */
                        ntreeSwitchID(scen->nodetree, &sce->id, &scen->id);
                }
 

Modified: trunk/blender/source/blender/blenkernel/intern/texture.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/texture.c    2011-02-11 
09:28:11 UTC (rev 34774)
+++ trunk/blender/source/blender/blenkernel/intern/texture.c    2011-02-11 
09:37:58 UTC (rev 34775)
@@ -760,7 +760,7 @@
 
        if(tex->nodetree) {
                ntreeEndExecTree(tex->nodetree);
-               texn->nodetree= ntreeCopyTree(tex->nodetree, 0); /* 0 == full 
new tree */
+               texn->nodetree= ntreeCopyTree(tex->nodetree); /* 0 == full new 
tree */
        }
        
        return texn;

Modified: trunk/blender/source/blender/editors/space_node/node_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_edit.c 2011-02-11 
09:28:11 UTC (rev 34774)
+++ trunk/blender/source/blender/editors/space_node/node_edit.c 2011-02-11 
09:37:58 UTC (rev 34775)
@@ -1693,27 +1693,36 @@
 static int node_duplicate_exec(bContext *C, wmOperator *UNUSED(op))
 {
        SpaceNode *snode= CTX_wm_space_node(C);
-       bNode *node;
+       bNodeTree *ntree= snode->edittree;
+       bNode *node, *newnode, *last;
        
        ED_preview_kill_jobs(C);
-
-       /* simple id user adjustment, node internal functions dont touch this
-        * but operators and readfile.c do. */
-       for(node= snode->edittree->nodes.first; node; node= node->next) {
+       
+       last = ntree->nodes.last;
+       for(node= ntree->nodes.first; node; node= node->next) {
                if(node->flag & SELECT) {
-                       id_us_plus(node->id);
+                       newnode = nodeCopyNode(ntree, node, 1);
+                       
+                       /* deselect old node, select the copy instead */
+                       node->flag &= ~(NODE_SELECT|NODE_ACTIVE);
+                       newnode->flag |= NODE_SELECT;
+                       
+                       if(newnode->id) {
+                               /* simple id user adjustment, node internal 
functions dont touch this
+                                * but operators and readfile.c do. */
+                               id_us_plus(newnode->id);
+                               /* to ensure redraws or rerenders happen */
+                               ED_node_changed_update(snode->id, newnode);
+                       }
                }
+               
+               /* make sure we don't copy new nodes again! */
+               if (node==last)
+                       break;
        }
-
-       ntreeCopyTree(snode->edittree, 1);      /* 1 == internally selected 
nodes */
        
-       /* to ensure redraws or rerenders happen */
-       for(node= snode->edittree->nodes.first; node; node= node->next)
-               if(node->flag & SELECT)
-                       if(node->id)
-                               ED_node_changed_update(snode->id, node);
+       ntreeSolveOrder(ntree);
        
-       ntreeSolveOrder(snode->edittree);
        node_tree_verify_groups(snode->nodetree);
        snode_notify(C, snode);
 

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

Reply via email to