diff options
author | Lukas Tönne <lukas.toenne@gmail.com> | 2014-10-22 13:11:52 +0400 |
---|---|---|
committer | Lukas Tönne <lukas.toenne@gmail.com> | 2014-10-22 13:11:52 +0400 |
commit | 769c0bee9fafec1ffce05af4e0d1f443dfb95ed7 (patch) | |
tree | 20dfc535347270425c7eb2871ff522281a85a7aa /source/blender/editors/transform/transform_generics.c | |
parent | 33f388d7bf973fb95c0e48625267e2e85036d462 (diff) |
Fix T42334: x-mirror fails in armature with a partially mirrored chain.
When resetting edit bones on cancel, they also have to reset connected
parent and child bone tips and heads respectively, since these can be
modified during the transform.
Diffstat (limited to 'source/blender/editors/transform/transform_generics.c')
-rw-r--r-- | source/blender/editors/transform/transform_generics.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index b02671e18d8..2f035949edc 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -779,7 +779,7 @@ static void recalcData_objects(TransInfo *t) else if (t->obedit->type == OB_ARMATURE) { /* no recalc flag, does pose */ bArmature *arm = t->obedit->data; ListBase *edbo = arm->edbo; - EditBone *ebo; + EditBone *ebo, *ebo_parent; TransData *td = t->data; int i; @@ -789,17 +789,18 @@ static void recalcData_objects(TransInfo *t) /* Ensure all bones are correctly adjusted */ for (ebo = edbo->first; ebo; ebo = ebo->next) { + ebo_parent = (ebo->flag & BONE_CONNECTED) ? ebo->parent : NULL; - if ((ebo->flag & BONE_CONNECTED) && ebo->parent) { + if (ebo_parent) { /* If this bone has a parent tip that has been moved */ - if (ebo->parent->flag & BONE_TIPSEL) { - copy_v3_v3(ebo->head, ebo->parent->tail); - if (t->mode == TFM_BONE_ENVELOPE) ebo->rad_head = ebo->parent->rad_tail; + if (ebo_parent->flag & BONE_TIPSEL) { + copy_v3_v3(ebo->head, ebo_parent->tail); + if (t->mode == TFM_BONE_ENVELOPE) ebo->rad_head = ebo_parent->rad_tail; } /* If this bone has a parent tip that has NOT been moved */ else { - copy_v3_v3(ebo->parent->tail, ebo->head); - if (t->mode == TFM_BONE_ENVELOPE) ebo->parent->rad_tail = ebo->rad_head; + copy_v3_v3(ebo_parent->tail, ebo->head); + if (t->mode == TFM_BONE_ENVELOPE) ebo_parent->rad_tail = ebo->rad_head; } } |