Revision: 17226
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17226
Author:   aligorith
Date:     2008-10-30 08:22:11 +0100 (Thu, 30 Oct 2008)

Log Message:
-----------
AnimSys2: Ctrl R displays menu to set rotation mode

This hotkey allows the rotation of multiple (selected and visible) bones to be 
set at a time. 

Modified Paths:
--------------
    branches/animsys2/source/blender/include/BIF_poseobject.h
    branches/animsys2/source/blender/src/header_view3d.c
    branches/animsys2/source/blender/src/poseobject.c
    branches/animsys2/source/blender/src/space.c

Modified: branches/animsys2/source/blender/include/BIF_poseobject.h
===================================================================
--- branches/animsys2/source/blender/include/BIF_poseobject.h   2008-10-30 
06:04:03 UTC (rev 17225)
+++ branches/animsys2/source/blender/include/BIF_poseobject.h   2008-10-30 
07:22:11 UTC (rev 17226)
@@ -51,6 +51,7 @@
 void pose_clear_IK(void);
 void pose_clear_constraints(void);
 void pose_copy_menu(void);
+void pose_rotmode_menu(void);
 
 void free_posebuf(void);
 void copy_posebuf (void);

Modified: branches/animsys2/source/blender/src/header_view3d.c
===================================================================
--- branches/animsys2/source/blender/src/header_view3d.c        2008-10-30 
06:04:03 UTC (rev 17225)
+++ branches/animsys2/source/blender/src/header_view3d.c        2008-10-30 
07:22:11 UTC (rev 17226)
@@ -4426,6 +4426,9 @@
        case 20: /* delete keyframe */
                common_deletekey();
                break;
+       case 21: /* set rotation mode */
+               pose_rotmode_menu();
+               break;
        }
                
        allqueue(REDRAWVIEW3D, 0);
@@ -4443,6 +4446,7 @@
        uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, 
ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
        uiDefIconTextBlockBut(block, view3d_pose_armature_transformmenu, NULL, 
ICON_RIGHTARROW_THIN, "Clear Transform", 0, yco-=20, 120, 19, "");
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale Envelope 
Distance|Alt S",                          0, yco-=20, menuwidth, 19, NULL, 0.0, 
0.0, 1, 13, "");
+       uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Rotation Mode|Ctrl 
R",                               0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 
21, "");
        
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, 
menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
        

Modified: branches/animsys2/source/blender/src/poseobject.c
===================================================================
--- branches/animsys2/source/blender/src/poseobject.c   2008-10-30 06:04:03 UTC 
(rev 17225)
+++ branches/animsys2/source/blender/src/poseobject.c   2008-10-30 07:22:11 UTC 
(rev 17226)
@@ -871,6 +871,51 @@
        
 }
 
+void pose_rotmode_menu(void)
+{
+       Object *ob= OBACT;
+       bArmature *arm= ob->data;
+       bPoseChannel *pchan;
+       short nr=0;
+       
+       /* paranoia checks */
+       if (ELEM(NULL, ob, ob->pose)) return;
+       if ((ob==G.obedit) || (ob->flag & OB_POSEMODE)==0) return;
+               
+       /* FIXME: proxy protected bones can't get this set */
+       if (pose_has_protected_selected(ob, 1, 1))
+               return;
+               
+       /* show and process menu */
+       nr= pupmenu("Bone Rotation Mode%t|Quaternion %x1|Euler %x2");
+       if (nr <= 0) return;
+               
+       for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) {
+               if ((arm->layer & pchan->bone->layer) && (pchan->bone->flag & 
BONE_SELECTED)) 
+               {
+                       const short old_rotmode= pchan->rotmode;
+                       
+                       /* all values for menu are 1 higher than the actual 
values should be */
+                       pchan->rotmode= nr - 1;
+                       
+                       /* do conversions if necessary */
+                       if (old_rotmode != pchan->rotmode) {
+                               if (old_rotmode)
+                                       EulToQuat(pchan->eul, pchan->quat);
+                               else
+                                       QuatToEul(pchan->quat, pchan->eul);
+                       }
+               }
+       }
+       
+       
+       DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);   // and all its 
relations
+       
+       allqueue(REDRAWVIEW3D, 0);
+       
+       BIF_undo_push("Set Rotation Mode");
+}
+
 /* ******************** copy/paste pose ********************** */
 
 static bPose   *g_posebuf=NULL;

Modified: branches/animsys2/source/blender/src/space.c
===================================================================
--- branches/animsys2/source/blender/src/space.c        2008-10-30 06:04:03 UTC 
(rev 17225)
+++ branches/animsys2/source/blender/src/space.c        2008-10-30 07:22:11 UTC 
(rev 17226)
@@ -2563,6 +2563,10 @@
                                                Transform();
                                        }
                                }
+                               else if(G.qual==LR_CTRLKEY) {
+                                       if((ob && ob->pose) && (ob->flag & 
OB_POSEMODE))
+                                               pose_rotmode_menu();
+                               }
                                else if((G.qual==0)) {
                                        initTransform(TFM_ROTATION, CTX_NONE);
                                        Transform();


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to