[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [48644] trunk/blender/source/blender/ blenkernel/intern/node.c: fix for making local loosing references to node groups.
Campbell Barton
ideasman42 at gmail.com
Thu Jul 5 14:50:51 CEST 2012
Revision: 48644
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=48644
Author: campbellbarton
Date: 2012-07-05 12:50:50 +0000 (Thu, 05 Jul 2012)
Log Message:
-----------
fix for making local loosing references to node groups.
node->id was left as an indirect link which wont get saved with the file.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/node.c
Modified: trunk/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/node.c 2012-07-05 12:10:09 UTC (rev 48643)
+++ trunk/blender/source/blender/blenkernel/intern/node.c 2012-07-05 12:50:50 UTC (rev 48644)
@@ -633,8 +633,12 @@
* - 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 don't have stale pointers.
+ *
+ * do_make_extern: keep enabled for general use, only reason _not_ to enable is when
+ * copying for internal use (threads for eg), where you wont want it to modify the
+ * scene data.
*/
-bNodeTree *ntreeCopyTree(bNodeTree *ntree)
+static bNodeTree *ntreeCopyTree_internal(bNodeTree *ntree, const short do_make_extern)
{
bNodeTree *newtree;
bNode *node /*, *nnode */ /* UNUSED */, *last;
@@ -664,6 +668,11 @@
last = ntree->nodes.last;
for (node= ntree->nodes.first; node; node= node->next) {
+
+ if (do_make_extern) {
+ id_lib_extern(node->id);
+ }
+
node->new_node= NULL;
/* nnode= */ nodeCopyNode(newtree, node); /* sets node->new */
@@ -709,6 +718,11 @@
return newtree;
}
+bNodeTree *ntreeCopyTree(bNodeTree *ntree)
+{
+ return ntreeCopyTree_internal(ntree, TRUE);
+}
+
/* use when duplicating scenes */
void ntreeSwitchID(bNodeTree *ntree, ID *id_from, ID *id_to)
{
@@ -1131,7 +1145,7 @@
}
/* node copy func */
- ltree= ntreeCopyTree(ntree);
+ ltree = ntreeCopyTree_internal(ntree, FALSE);
if (adt) {
AnimData *ladt= BKE_animdata_from_id(<ree->id);
More information about the Bf-blender-cvs
mailing list