Revision: 16674
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16674
Author:   aligorith
Date:     2008-09-22 15:01:51 +0200 (Mon, 22 Sep 2008)

Log Message:
-----------
Bugfix #14428: Constraints lost when object made single user

When there was a setup where an object was linked to more than one scene at 
once, and in one of those scenes some of the objects in that scene were related 
to it, the objects related to it were not correctly relinked to the new copy. 

This was due to the 2nd check for selected objects 
if( (base->flag & flag)==flag)
meaning that only selected objects would get corrected.

Modified Paths:
--------------
    trunk/blender/source/blender/src/editobject.c

Modified: trunk/blender/source/blender/src/editobject.c
===================================================================
--- trunk/blender/source/blender/src/editobject.c       2008-09-22 12:31:27 UTC 
(rev 16673)
+++ trunk/blender/source/blender/src/editobject.c       2008-09-22 13:01:51 UTC 
(rev 16674)
@@ -4381,18 +4381,17 @@
        
        clear_sca_new_poins();  /* sensor/contr/act */
 
-       /* duplicate */
+       /* duplicate (must set newid) */
        base= FIRSTBASE;
        while(base) {
                ob= base->object;
                
-               if( (base->flag & flag)==flag) {
-
+               if( (base->flag & flag)==flag ) {
                        if(ob->id.lib==NULL && ob->id.us>1) {
-                       
+                               /* base gets copy of object */
                                obn= copy_object(ob);
-                               ob->id.us--;
                                base->object= obn;
+                               ob->id.us--;
                        }
                }
                base= base->next;
@@ -4406,20 +4405,17 @@
        while(base) {
                ob= base->object;
                if(ob->id.lib==NULL) {
-                       if( (base->flag & flag)==flag) {
-                               
-                               relink_constraints(&base->object->constraints);
-                               if (base->object->pose){
-                                       bPoseChannel *chan;
-                                       for (chan = 
base->object->pose->chanbase.first; chan; chan=chan->next){
-                                               
relink_constraints(&chan->constraints);
-                                       }
+                       relink_constraints(&base->object->constraints);
+                       if (base->object->pose){
+                               bPoseChannel *chan;
+                               for (chan = base->object->pose->chanbase.first; 
chan; chan=chan->next){
+                                       relink_constraints(&chan->constraints);
                                }
-                               modifiers_foreachObjectLink(base->object, 
single_object_users__forwardModifierLinks, NULL);
-                               
-                               ID_NEW(ob->parent);
-                               ID_NEW(ob->track);
                        }
+                       modifiers_foreachObjectLink(base->object, 
single_object_users__forwardModifierLinks, NULL);
+                       
+                       ID_NEW(ob->parent);
+                       ID_NEW(ob->track);
                }
                base= base->next;
        }


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

Reply via email to