Bugfix #18603: Clear User Transform does not work -- 2.49RC1

Modified the behaviour of Clear User Transform so that when there's no action, Clear User Transform now resets the entire pose to the rest pose. However, when there is an action, the pose on selected bones gets cleared to the pose defined in the action, not the rest pose.
This commit is contained in:
Joshua Leung 2009-04-27 00:49:01 +00:00
parent 310356a732
commit f64265d714

@ -1748,18 +1748,25 @@ void pose_clear_user_transforms (void)
if (ob->pose == NULL)
return;
/* find selected bones */
for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) {
if (pchan->bone && (pchan->bone->flag & BONE_SELECTED) && (pchan->bone->layer & arm->layer)) {
/* just clear the BONE_UNKEYED flag, allowing this bone to get overwritten by actions again */
pchan->bone->flag &= ~BONE_UNKEYED;
/* if the object has an action, restore pose to the pose defined by the action by clearing pose on selected bones */
if (ob->action) {
/* find selected bones */
for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) {
if (pchan->bone && (pchan->bone->flag & BONE_SELECTED) && (pchan->bone->layer & arm->layer)) {
/* just clear the BONE_UNKEYED flag, allowing this bone to get overwritten by actions again */
pchan->bone->flag &= ~BONE_UNKEYED;
}
}
/* clear pose locking flag
* - this will only clear the user-defined pose in the selected bones, where BONE_UNKEYED has been cleared
*/
ob->pose->flag |= POSE_DO_UNLOCK;
}
else {
/* no action, so restore entire pose to rest pose (cannot restore only selected bones) */
rest_pose(ob->pose);
}
/* clear pose locking flag
* - this will only clear the user-defined pose in the selected bones, where BONE_UNKEYED has been cleared
*/
ob->pose->flag |= POSE_DO_UNLOCK;
DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
BIF_undo_push("Clear User Transform");