Fix T67849: Offset after "Hook to Selected Object"
authorPhilipp Oeser <info@graphics-engineer.com>
Mon, 29 Jul 2019 14:35:49 +0000 (00:35 +1000)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 29 Jul 2019 14:36:10 +0000 (00:36 +1000)
source/blender/editors/object/object_hook.c

index c939cb0a61d40d56be40c1d761031a16b6c71d0b..707489d588a6eb828d489946c0ddab885260753a 100644 (file)
@@ -52,6 +52,7 @@
 
 #include "DEG_depsgraph.h"
 #include "DEG_depsgraph_build.h"
+#include "DEG_depsgraph_query.h"
 
 #include "RNA_define.h"
 #include "RNA_access.h"
@@ -527,6 +528,7 @@ static int add_hook_object(const bContext *C,
                            int mode,
                            ReportList *reports)
 {
+  Depsgraph *depsgraph = CTX_data_depsgraph(C);
   ModifierData *md = NULL;
   HookModifierData *hmd = NULL;
   float cent[3];
@@ -601,11 +603,13 @@ static int add_hook_object(const bContext *C,
   /* matrix calculus */
   /* vert x (obmat x hook->imat) x hook->obmat x ob->imat */
   /*        (parentinv         )                          */
-  BKE_object_where_is_calc(CTX_data_depsgraph(C), scene, ob);
+  Object *ob_eval = DEG_get_evaluated_object(depsgraph, ob);
+  BKE_object_transform_copy(ob_eval, ob);
+  BKE_object_where_is_calc(depsgraph, scene, ob_eval);
 
-  invert_m4_m4(ob->imat, ob->obmat);
+  invert_m4_m4(ob_eval->imat, ob_eval->obmat);
   /* apparently this call goes from right to left... */
-  mul_m4_series(hmd->parentinv, pose_mat, ob->imat, obedit->obmat);
+  mul_m4_series(hmd->parentinv, pose_mat, ob_eval->imat, obedit->obmat);
 
   DEG_relations_tag_update(bmain);