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(<ree->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