Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2010-08-05 14:50:38 +0400
committerCampbell Barton <ideasman42@gmail.com>2010-08-05 14:50:38 +0400
commit8c75853bb6cecc70e201e38c7354c36539419324 (patch)
treefabd6066dc97cb46c3a358d2265c5d7586a6de3c /source/blender/blenkernel/intern/node.c
parent5f77852a479952560cbbcccab6fcf07b4fd9c0b2 (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.c13
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 */