From feb210f08ebd5d6283624996883719b00fa590eb Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Sat, 11 Nov 2006 16:45:17 +0000 Subject: Experimental feature, especially for the animation department: THE OBJECT PROXY Or simple said; local control of referenced data from libraries. Having library files with references is a very common studio setup, and Blender did do quite well in that area. Were it not that for character setups it was impossible to use still. This commit will enable a full rig+character to remain in the library, and still have - under strict control - local access for animation edits. Full log: http://www.blender3d.org/cms/Proxy_Objects.824.0.html --- source/blender/src/transform_generics.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'source/blender/src/transform_generics.c') diff --git a/source/blender/src/transform_generics.c b/source/blender/src/transform_generics.c index 8b75586442b..f9e75d2336a 100755 --- a/source/blender/src/transform_generics.c +++ b/source/blender/src/transform_generics.c @@ -322,21 +322,23 @@ void recalcData(TransInfo *t) } else { for(base= FIRSTBASE; base; base= base->next) { + Object *ob= base->object; + /* this flag is from depgraph, was stored in nitialize phase, handled in drawview.c */ if(base->flag & BA_HAS_RECALC_OB) - base->object->recalc |= OB_RECALC_OB; + ob->recalc |= OB_RECALC_OB; if(base->flag & BA_HAS_RECALC_DATA) - base->object->recalc |= OB_RECALC_DATA; + ob->recalc |= OB_RECALC_DATA; /* thanks to ob->ctime usage, ipos are not called in where_is_object, unless we edit ipokeys */ if(base->flag & BA_DO_IPO) { - if(base->object->ipo) { + if(ob->ipo) { IpoCurve *icu; - base->object->ctime= -1234567.0; + ob->ctime= -1234567.0; - icu= base->object->ipo->curve.first; + icu= ob->ipo->curve.first; while(icu) { calchandles_ipocurve(icu); icu= icu->next; @@ -345,10 +347,14 @@ void recalcData(TransInfo *t) } /* softbody exception */ - if(modifiers_isSoftbodyEnabled(base->object)) { - if(base->object->recalc & OB_RECALC_DATA) - base->object->softflag |= OB_SB_REDO; + if(modifiers_isSoftbodyEnabled(ob)) { + if(ob->recalc & OB_RECALC_DATA) + ob->softflag |= OB_SB_REDO; } + + /* proxy exception */ + if(ob->proxy) + ob->proxy->recalc |= ob->recalc; } } -- cgit v1.2.3