[Bf-blender-cvs] [13f28798de5] master: Fix T57583: Assert when moving object parented to curve vertex
Sergey Sharybin
noreply at git.blender.org
Tue Feb 19 15:56:03 CET 2019
Commit: 13f28798de5d501ed8867bbc0d7a25ca6f1dbe9b
Author: Sergey Sharybin
Date: Tue Feb 19 15:53:10 2019 +0100
Branches: master
https://developer.blender.org/rB13f28798de5d501ed8867bbc0d7a25ca6f1dbe9b
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.
===================================================================
M source/blender/editors/transform/transform_conversions.c
===================================================================
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index 95a6844abd3..65229606e39 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -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;
More information about the Bf-blender-cvs
mailing list