Fix T57583: Assert when moving object parented to curve vertex
Can not reliably evaluate object's transform from the original one. Still not ideal, see the comment in the code.
This commit is contained in:
@@ -5782,13 +5782,26 @@ static void ObjectToTransData(TransInfo *t, TransData *td, Object *ob)
|
||||
if (t->mode == TFM_DUMMY)
|
||||
skip_invert = true;
|
||||
|
||||
/* NOTE: This is not relaly following copy-on-write design and we shoud not
|
||||
* be re-evaluating the evaluated object. But as the comment above mentioned
|
||||
* this is part of a hack.
|
||||
* More proper solution would be to make a shallwe copy of the object and
|
||||
* evaluate that, and access matrix of that evaluated copy of tje object.
|
||||
* Might be more tricky as it sounds, if some logic later on accesses the
|
||||
* object matrix via td->ob->obmat. */
|
||||
Object *object_eval = DEG_get_evaluated_object(t->depsgraph, ob);
|
||||
if (skip_invert == false && constinv == false) {
|
||||
ob->transflag |= OB_NO_CONSTRAINTS; /* BKE_object_where_is_calc checks this */
|
||||
BKE_object_where_is_calc(t->depsgraph, t->scene, ob);
|
||||
BKE_object_where_is_calc(t->depsgraph, t->scene, object_eval);
|
||||
ob->transflag &= ~OB_NO_CONSTRAINTS;
|
||||
}
|
||||
else
|
||||
BKE_object_where_is_calc(t->depsgraph, t->scene, ob);
|
||||
else {
|
||||
BKE_object_where_is_calc(t->depsgraph, t->scene, object_eval);
|
||||
}
|
||||
/* Copy enwely evaluated fields to the original object, similar to how
|
||||
* active dependency graph will do it. */
|
||||
copy_m4_m4(ob->obmat, object_eval->obmat);
|
||||
ob->transflag = object_eval->transflag;
|
||||
|
||||
td->ob = ob;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user