[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19551] trunk/blender/source/blender: 2. 4x Bugfix - #18188: "Clear user transform" does not work as described
Joshua Leung
aligorith at gmail.com
Mon Apr 6 02:04:05 CEST 2009
Revision: 19551
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19551
Author: aligorith
Date: 2009-04-06 02:04:04 +0200 (Mon, 06 Apr 2009)
Log Message:
-----------
2.4x Bugfix - #18188: "Clear user transform" does not work as described
For the record, "Clear user transform" is supposed to restore selected bones to the transforms defined by Actions/NLA, not back to rest position.
Modified Paths:
--------------
trunk/blender/source/blender/include/BIF_poseobject.h
trunk/blender/source/blender/src/header_view3d.c
trunk/blender/source/blender/src/poseobject.c
Modified: trunk/blender/source/blender/include/BIF_poseobject.h
===================================================================
--- trunk/blender/source/blender/include/BIF_poseobject.h 2009-04-05 19:37:13 UTC (rev 19550)
+++ trunk/blender/source/blender/include/BIF_poseobject.h 2009-04-06 00:04:04 UTC (rev 19551)
@@ -80,6 +80,7 @@
void pose_movetolayer(void);
void pose_relax(void);
void pose_flipquats(void);
+void pose_clear_user_transforms(void);
#endif
Modified: trunk/blender/source/blender/src/header_view3d.c
===================================================================
--- trunk/blender/source/blender/src/header_view3d.c 2009-04-05 19:37:13 UTC (rev 19550)
+++ trunk/blender/source/blender/src/header_view3d.c 2009-04-06 00:04:04 UTC (rev 19551)
@@ -4123,8 +4123,6 @@
static void do_view3d_pose_armature_transformmenu(void *arg, int event)
{
- Object *ob= OBACT;
-
switch(event) {
case 0: /* clear origin */
clear_object('o');
@@ -4139,9 +4137,7 @@
clear_object('g');
break;
case 4: /* clear user transform */
- rest_pose(ob->pose);
- DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
- BIF_undo_push("Pose, Clear User Transform");
+ pose_clear_user_transforms();
break;
}
allqueue(REDRAWVIEW3D, 0);
Modified: trunk/blender/source/blender/src/poseobject.c
===================================================================
--- trunk/blender/source/blender/src/poseobject.c 2009-04-05 19:37:13 UTC (rev 19550)
+++ trunk/blender/source/blender/src/poseobject.c 2009-04-06 00:04:04 UTC (rev 19551)
@@ -568,9 +568,7 @@
pose_clear_paths(ob);
}
else if(nr==5) {
- rest_pose(ob->pose);
- DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
- BIF_undo_push("Clear User Transform Pose");
+ pose_clear_user_transforms();
}
else if(nr==6) {
pose_relax();
@@ -1740,4 +1738,30 @@
autokeyframe_pose_cb_func(ob, TFM_ROTATION, 0);
}
+/* Restore selected pose-bones to 'action'-defined pose */
+void pose_clear_user_transforms (void)
+{
+ Object *ob = OBACT;
+ bArmature *arm= ob->data;
+ bPoseChannel *pchan;
+
+ 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;
+ }
+ }
+
+ /* 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");
+}
More information about the Bf-blender-cvs
mailing list