diff options
author | Joshua Leung <aligorith@gmail.com> | 2010-01-21 01:21:10 +0300 |
---|---|---|
committer | Joshua Leung <aligorith@gmail.com> | 2010-01-21 01:21:10 +0300 |
commit | 946cdd8ff6ad6e799c1aeaea9540b599e9648476 (patch) | |
tree | 34cf54cb0dcde585a764bae39bf07f37689fb7a0 /source/blender | |
parent | c781c3e6dcb10f774763cff65da3c9e4551cbfb2 (diff) |
Proxy + Transforms Bugfix:
This commit fixes some update issues for some rig setups used for Durian, with proxies not updating correctly during transforms.
The setup involves an armature that has been proxified, which deforms a mesh in the group it came from. One of the bones in this armature is constrained to an empty that was added in the shot file.
When the empty is moved around, the mesh does not deform in response to the armature until the transform is confirmed.
This was because the depsgraph tagging was not comprehensive enough, since only a few cached tags got restored (but not all). For now, full depsgraph tagging is now performed for objects as they are transformed.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/editors/transform/transform_generics.c | 19 |
1 files changed, 4 insertions, 15 deletions
diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index e719f1cf133..3a6f30244ec 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -774,16 +774,6 @@ void recalcData(TransInfo *t) else { int i; - for(base= FIRSTBASE; base; base= base->next) { - Object *ob= base->object; - - /* this flag is from depgraph, was stored in initialize phase, handled in drawview.c */ - if(base->flag & BA_HAS_RECALC_OB) - ob->recalc |= OB_RECALC_OB; - if(base->flag & BA_HAS_RECALC_DATA) - ob->recalc |= OB_RECALC_DATA; - } - for (i = 0; i < t->total; i++) { TransData *td = t->data + i; Object *ob = td->ob; @@ -804,11 +794,10 @@ void recalcData(TransInfo *t) autokeyframe_ob_cb_func(NULL, t->scene, (View3D *)t->view, ob, t->mode); } - /* proxy exception */ - if(ob->proxy) - ob->proxy->recalc |= ob->recalc; - if(ob->proxy_group) - group_tag_recalc(ob->proxy_group->dup_group); + /* sets recalc flags fully, instead of flushing existing ones + * otherwise proxies don't function correctly + */ + DAG_id_flush_update(&ob->id, OB_RECALC); } } |