[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [60473] trunk/blender/source/blender/ blenkernel/intern/node.c: Fix for own commit r60468: All the localized node groups ended up in the main library ...

Lukas Toenne lukas.toenne at googlemail.com
Tue Oct 1 10:55:39 CEST 2013


Revision: 60473
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=60473
Author:   lukastoenne
Date:     2013-10-01 08:55:38 +0000 (Tue, 01 Oct 2013)
Log Message:
-----------
Fix for own commit r60468: All the localized node groups ended up in the main library ... This was because of the G.main check in ntreeCopyTree_internal, which determines whether a node tree gets put
into main or is an independent data block. This can now be controlled by passing an explicit Main pointer, so we can ensure localized node groups don't pollute main.

Revision Links:
--------------
    http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=60468

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	2013-10-01 08:30:46 UTC (rev 60472)
+++ trunk/blender/source/blender/blenkernel/intern/node.c	2013-10-01 08:55:38 UTC (rev 60473)
@@ -1107,7 +1107,7 @@
  * copying for internal use (threads for eg), where you wont want it to modify the
  * scene data.
  */
-static bNodeTree *ntreeCopyTree_internal(bNodeTree *ntree, const short do_id_user, const short do_make_extern, const short copy_previews)
+static bNodeTree *ntreeCopyTree_internal(bNodeTree *ntree, Main *bmain, bool do_id_user, bool do_make_extern, bool copy_previews)
 {
 	bNodeTree *newtree;
 	bNode *node /*, *nnode */ /* UNUSED */, *last;
@@ -1116,13 +1116,19 @@
 	
 	if (ntree == NULL) return NULL;
 	
-	/* is ntree part of library? */
-	for (newtree = G.main->nodetree.first; newtree; newtree = newtree->id.next)
-		if (newtree == ntree) break;
-	if (newtree) {
-		newtree = BKE_libblock_copy(&ntree->id);
+	if (bmain) {
+		/* is ntree part of library? */
+		for (newtree = bmain->nodetree.first; newtree; newtree = newtree->id.next) {
+			if (newtree == ntree) {
+				newtree = BKE_libblock_copy(&ntree->id);
+				break;
+			}
+		}
 	}
-	else {
+	else
+		newtree = NULL;
+	
+	if (newtree == NULL) {
 		newtree = MEM_dupallocN(ntree);
 		newtree->id.lib = NULL;	/* same as owning datablock id.lib */
 		BKE_libblock_copy_data(&newtree->id, &ntree->id, true); /* copy animdata and ID props */
@@ -1208,7 +1214,7 @@
 
 bNodeTree *ntreeCopyTree_ex(bNodeTree *ntree, const short do_id_user)
 {
-	return ntreeCopyTree_internal(ntree, do_id_user, TRUE, TRUE);
+	return ntreeCopyTree_internal(ntree, G.main, do_id_user, TRUE, TRUE);
 }
 bNodeTree *ntreeCopyTree(bNodeTree *ntree)
 {
@@ -1932,7 +1938,7 @@
 		/* Make full copy.
 		 * Note: previews are not copied here.
 		 */
-		ltree = ntreeCopyTree_internal(ntree, FALSE, FALSE, FALSE);
+		ltree = ntreeCopyTree_internal(ntree, NULL, FALSE, FALSE, FALSE);
 		
 		for (node = ltree->nodes.first; node; node = node->next) {
 			if (node->type == NODE_GROUP && node->id) {




More information about the Bf-blender-cvs mailing list