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);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to