forked from bartvdbraak/blender
fix [#35901] Hooks on armature bones are calculated in wrong space
This commit is contained in:
parent
aa9ffc0bc2
commit
3370b765ec
@ -460,6 +460,7 @@ static int add_hook_object(Main *bmain, Scene *scene, Object *obedit, Object *ob
|
|||||||
ModifierData *md = NULL;
|
ModifierData *md = NULL;
|
||||||
HookModifierData *hmd = NULL;
|
HookModifierData *hmd = NULL;
|
||||||
float cent[3];
|
float cent[3];
|
||||||
|
float pose_mat[4][4];
|
||||||
int tot, ok, *indexar;
|
int tot, ok, *indexar;
|
||||||
char name[MAX_NAME];
|
char name[MAX_NAME];
|
||||||
|
|
||||||
@ -494,11 +495,20 @@ static int add_hook_object(Main *bmain, Scene *scene, Object *obedit, Object *ob
|
|||||||
hmd->totindex = tot;
|
hmd->totindex = tot;
|
||||||
BLI_strncpy(hmd->name, name, sizeof(hmd->name));
|
BLI_strncpy(hmd->name, name, sizeof(hmd->name));
|
||||||
|
|
||||||
|
unit_m4(pose_mat);
|
||||||
|
|
||||||
if (mode == OBJECT_ADDHOOK_SELOB_BONE) {
|
if (mode == OBJECT_ADDHOOK_SELOB_BONE) {
|
||||||
bArmature *arm = ob->data;
|
bArmature *arm = ob->data;
|
||||||
BLI_assert(ob->type == OB_ARMATURE);
|
BLI_assert(ob->type == OB_ARMATURE);
|
||||||
if (arm->act_bone) {
|
if (arm->act_bone) {
|
||||||
|
bPoseChannel *pchan_act;
|
||||||
|
|
||||||
BLI_strncpy(hmd->subtarget, arm->act_bone->name, sizeof(hmd->subtarget));
|
BLI_strncpy(hmd->subtarget, arm->act_bone->name, sizeof(hmd->subtarget));
|
||||||
|
|
||||||
|
pchan_act = BKE_pose_channel_active(ob);
|
||||||
|
if (LIKELY(pchan_act)) {
|
||||||
|
invert_m4_m4(pose_mat, pchan_act->pose_mat);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
BKE_report(reports, RPT_WARNING, "Armature has no active object bone");
|
BKE_report(reports, RPT_WARNING, "Armature has no active object bone");
|
||||||
@ -512,7 +522,7 @@ static int add_hook_object(Main *bmain, Scene *scene, Object *obedit, Object *ob
|
|||||||
|
|
||||||
invert_m4_m4(ob->imat, ob->obmat);
|
invert_m4_m4(ob->imat, ob->obmat);
|
||||||
/* apparently this call goes from right to left... */
|
/* apparently this call goes from right to left... */
|
||||||
mul_serie_m4(hmd->parentinv, ob->imat, obedit->obmat, NULL,
|
mul_serie_m4(hmd->parentinv, pose_mat, ob->imat, obedit->obmat,
|
||||||
NULL, NULL, NULL, NULL, NULL);
|
NULL, NULL, NULL, NULL, NULL);
|
||||||
|
|
||||||
DAG_relations_tag_update(bmain);
|
DAG_relations_tag_update(bmain);
|
||||||
|
Loading…
Reference in New Issue
Block a user