move object re-linking into a function.

This commit is contained in:
Campbell Barton 2011-03-25 08:43:41 +00:00
parent d8e6dd705f
commit 8b6b5341a5
4 changed files with 33 additions and 43 deletions

@ -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

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

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

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