diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-03-25 11:43:41 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-03-25 11:43:41 +0300 |
commit | 8b6b5341a55541110684e5272f8856559b89337f (patch) | |
tree | 110636f37d037400f65f9204fdb18591c5b7e7a2 /source/blender/blenkernel | |
parent | d8e6dd705fbf7d98043e8a210bb49d6903792872 (diff) |
move object re-linking into a function.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_object.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/object.c | 29 |
2 files changed, 31 insertions, 0 deletions
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h index 065810089f1..cacfa702f7f 100644 --- a/source/blender/blenkernel/BKE_object.h +++ b/source/blender/blenkernel/BKE_object.h @@ -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 diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 9f2de5be84a..0348d188a7d 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -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); +} |