diff options
author | Campbell Barton <ideasman42@gmail.com> | 2010-08-05 14:50:38 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2010-08-05 14:50:38 +0400 |
commit | 8c75853bb6cecc70e201e38c7354c36539419324 (patch) | |
tree | fabd6066dc97cb46c3a358d2265c5d7586a6de3c /source/blender/blenkernel/intern/node.c | |
parent | 5f77852a479952560cbbcccab6fcf07b4fd9c0b2 (diff) |
bugfix [#23164] Copied Scene Nodes!
copying a scene would still have nodes point back to the old scene which would crash (in some cases) or break rendering.
Diffstat (limited to 'source/blender/blenkernel/intern/node.c')
-rw-r--r-- | source/blender/blenkernel/intern/node.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index 2a4713ee25c..36c23216585 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -1064,6 +1064,7 @@ bNodeTree *ntreeAddTree(int type) * - 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) { @@ -1142,6 +1143,18 @@ bNodeTree *ntreeCopyTree(bNodeTree *ntree, int internal_select) return newtree; } +/* use when duplicating scenes */ +void ntreeSwitchID(bNodeTree *ntree, ID *id_from, ID *id_to) +{ + bNode *node; + /* for scene duplication only */ + for(node= ntree->nodes.first; node; node= node->next) { + if(node->id==id_from) { + node->id= id_to; + } + } +} + /* *************** preview *********** */ /* if node->preview, then we assume the rect to exist */ |