[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(&ltree->id);




More information about the Bf-blender-cvs mailing list