move object re-linking into a function.
authorCampbell Barton <ideasman42@gmail.com>
Fri, 25 Mar 2011 08:43:41 +0000 (08:43 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Fri, 25 Mar 2011 08:43:41 +0000 (08:43 +0000)
source/blender/blenkernel/BKE_object.h
source/blender/blenkernel/intern/object.c
source/blender/editors/object/object_add.c
source/blender/editors/object/object_relations.c

index 0658100..cacfa70 100644 (file)
@@ -143,6 +143,8 @@ void object_camera_matrix(
                float winmat[][4], struct rctf *viewplane, float *clipsta, float *clipend, float *lens, float *ycor,
                float *viewdx, float *viewdy);
 
+void object_relink(struct Object *ob);
+
 #ifdef __cplusplus
 }
 #endif
index 9f2de5b..0348d18 100644 (file)
@@ -3082,3 +3082,32 @@ int object_is_modified(Scene *scene, Object *ob)
 
        return flag;
 }
+
+static void copy_object__forwardModifierLinks(void *UNUSED(userData), Object *UNUSED(ob), ID **idpoin)
+{
+       /* this is copied from ID_NEW; it might be better to have a macro */
+       if(*idpoin && (*idpoin)->newid) *idpoin = (*idpoin)->newid;
+}
+
+void object_relink(Object *ob)
+{
+       if(ob->id.lib)
+               return;
+
+       relink_constraints(&ob->constraints);
+       if (ob->pose){
+               bPoseChannel *chan;
+               for (chan = ob->pose->chanbase.first; chan; chan=chan->next){
+                       relink_constraints(&chan->constraints);
+               }
+       }
+       modifiers_foreachIDLink(ob, copy_object__forwardModifierLinks, NULL);
+
+       if(ob->adt)
+               BKE_relink_animdata(ob->adt);
+
+       ID_NEW(ob->parent);
+
+       ID_NEW(ob->proxy);
+       ID_NEW(ob->proxy_group);
+}
index 289a66a..f630b05 100644 (file)
@@ -843,13 +843,6 @@ void OBJECT_OT_delete(wmOperatorType *ot)
 
 /**************************** Copy Utilities ******************************/
 
-static void copy_object__forwardModifierLinks(void *UNUSED(userData), Object *UNUSED(ob),
-                                                                                         ID **idpoin)
-{
-       /* this is copied from ID_NEW; it might be better to have a macro */
-       if(*idpoin && (*idpoin)->newid) *idpoin = (*idpoin)->newid;
-}
-
 /* after copying objects, copied data should get new pointers */
 static void copy_object_set_idnew(bContext *C, int dupflag)
 {
@@ -860,21 +853,7 @@ static void copy_object_set_idnew(bContext *C, int dupflag)
        
        /* XXX check object pointers */
        CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) {
-               relink_constraints(&ob->constraints);
-               if (ob->pose){
-                       bPoseChannel *chan;
-                       for (chan = ob->pose->chanbase.first; chan; chan=chan->next){
-                               relink_constraints(&chan->constraints);
-                       }
-               }
-               modifiers_foreachIDLink(ob, copy_object__forwardModifierLinks, NULL);
-
-               if(ob->adt)
-                       BKE_relink_animdata(ob->adt);
-
-               ID_NEW(ob->parent);
-               ID_NEW(ob->proxy);
-               ID_NEW(ob->proxy_group);
+               object_relink(ob);
        }
        CTX_DATA_END;
        
index eccc826..1aa6de1 100644 (file)
@@ -1366,11 +1366,6 @@ void OBJECT_OT_make_links_data(wmOperatorType *ot)
 
 /**************************** Make Single User ********************************/
 
-static void single_object_users__forwardModifierLinks(void *UNUSED(userData), Object *UNUSED(ob), Object **obpoin)
-{
-       ID_NEW(*obpoin);
-}
-
 static void single_object_users(Scene *scene, View3D *v3d, int flag)   
 {
        Base *base;
@@ -1402,22 +1397,7 @@ static void single_object_users(Scene *scene, View3D *v3d, int flag)
        
        /* object pointers */
        for(base= FIRSTBASE; base; base= base->next) {
-               ob= base->object;
-               if(ob->id.lib==NULL) {
-                       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);
-
-                       if(ob->adt)
-                               BKE_relink_animdata(ob->adt);
-
-                       ID_NEW(ob->parent);
-               }
+               object_relink(base->object);
        }
 
        set_sca_new_poins();