Revision: 15482
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15482
Author:   aligorith
Date:     2008-07-08 09:06:42 +0200 (Tue, 08 Jul 2008)

Log Message:
-----------
== Select Swap for Armatures (Ctrl I) ==

It is now possible to swap the selection of bones in EditMode and PoseMode 
using the CTRL IKEY hotkey. 

As a result, the hotkey for adding IK Constraints has now changed to SHIFT IKEY 
(so that select swap can have a consistent hotkey)

Modified Paths:
--------------
    trunk/blender/source/blender/src/editarmature.c
    trunk/blender/source/blender/src/header_view3d.c
    trunk/blender/source/blender/src/space.c

Modified: trunk/blender/source/blender/src/editarmature.c
===================================================================
--- trunk/blender/source/blender/src/editarmature.c     2008-07-08 02:22:37 UTC 
(rev 15481)
+++ trunk/blender/source/blender/src/editarmature.c     2008-07-08 07:06:42 UTC 
(rev 15482)
@@ -1646,8 +1646,9 @@
 }
 
 /* toggle==0: deselect
-   toggle==1: swap 
+   toggle==1: swap (based on test)
    toggle==2: only active tag
+   toggle==3: swap (no test)
 */
 void deselectall_armature(int toggle, int doundo)
 {
@@ -1670,18 +1671,30 @@
        else sel= toggle;
        
        /*      Set the flags */
-       for (eBone=G.edbo.first;eBone;eBone=eBone->next){
-               if (sel==1) {
+       for (eBone=G.edbo.first;eBone;eBone=eBone->next) {
+               if (sel==3) {
+                       /* invert selection of bone */
+                       if ((arm->layer & eBone->layer) && (eBone->flag & 
BONE_HIDDEN_A)==0) {
+                               eBone->flag ^= (BONE_SELECTED | BONE_TIPSEL | 
BONE_ROOTSEL);
+                               eBone->flag &= ~BONE_ACTIVE;
+                       }
+               }
+               else if (sel==1) {
+                       /* select bone */
                        if(arm->layer & eBone->layer && (eBone->flag & 
BONE_HIDDEN_A)==0) {
                                eBone->flag |= (BONE_SELECTED | BONE_TIPSEL | 
BONE_ROOTSEL);
                                if(eBone->parent)
                                        eBone->parent->flag |= (BONE_TIPSEL);
                        }
                }
-               else if (sel==2)
+               else if (sel==2) {
+                       /* clear active flag */
                        eBone->flag &= ~(BONE_ACTIVE);
-               else
+               }
+               else {
+                       /* deselect bone */
                        eBone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | 
BONE_ROOTSEL | BONE_ACTIVE);
+               }
        }
        
        allqueue(REDRAWVIEW3D, 0);
@@ -3276,8 +3289,9 @@
 }
 
 /* test==0: deselect all
-   test==1: swap select
-   test==2: only clear active tag 
+   test==1: swap select (apply to all the opposite of current situation) 
+   test==2: only clear active tag
+   test==3: swap select (no test / inverse selection status of all 
independently)
 */
 void deselectall_posearmature (Object *ob, int test, int doundo)
 {
@@ -3307,16 +3321,27 @@
        /*      Set the flags accordingly       */
        for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) {
                if ((pchan->bone->layer & arm->layer) && !(pchan->bone->flag & 
BONE_HIDDEN_P)) {
-                       if (selectmode==0) pchan->bone->flag &= 
~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL|BONE_ACTIVE);
-                       else if (selectmode==1) pchan->bone->flag |= 
BONE_SELECTED;
-                       else pchan->bone->flag &= ~BONE_ACTIVE;
+                       if (test==3) {
+                               pchan->bone->flag ^= 
(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL);
+                               pchan->bone->flag &= ~BONE_ACTIVE;
+                       }
+                       else {
+                               if (selectmode==0) pchan->bone->flag &= 
~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL|BONE_ACTIVE);
+                               else if (selectmode==1) pchan->bone->flag |= 
BONE_SELECTED;
+                               else pchan->bone->flag &= ~BONE_ACTIVE;
+                       }
                }
        }
        
        /* action editor */
-       deselect_actionchannels(ob->action, 0); /* deselects for sure */
-       if (selectmode == 1)
-               deselect_actionchannels(ob->action, 1); /* swaps */
+       if (test == 3) {
+               deselect_actionchannels(ob->action, 2); /* inverts selection */
+       }
+       else {
+               deselect_actionchannels(ob->action, 0); /* deselects for sure */
+               if (selectmode == 1)
+                       deselect_actionchannels(ob->action, 1); /* swaps */
+       }
        
        allqueue(REDRAWBUTSEDIT, 0);
        allqueue(REDRAWBUTSOBJECT, 0);

Modified: trunk/blender/source/blender/src/header_view3d.c
===================================================================
--- trunk/blender/source/blender/src/header_view3d.c    2008-07-08 02:22:37 UTC 
(rev 15481)
+++ trunk/blender/source/blender/src/header_view3d.c    2008-07-08 07:06:42 UTC 
(rev 15482)
@@ -1313,6 +1313,9 @@
                case 3: /* Select Parent(s) */  
                        select_bone_parent();
                        break;
+               case 4: /* Swap Select All */
+                       deselectall_armature(3, 1);
+                       break;
        }
        allqueue(REDRAWVIEW3D, 0);
 }
@@ -1331,6 +1334,8 @@
        
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A",  
                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
        
+       uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Swap Select All|Ctrl I", 
                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
+       
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Parent(s)|P",     
                                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 
3, "");
 
        if(curarea->headertype==HEADERTOP) {
@@ -1356,12 +1361,15 @@
        case 2: /* Select/Deselect all */
                deselectall_posearmature(OBACT, 1, 1);
                break;
-       case 3:
+       case 3: /* Select Target(s) of Constraint(s) */
                pose_select_constraint_target();
                break;
-       case 4:
+       case 4: /* Select Bone's Parent */
                select_bone_parent();
                break;
+       case 5: /* Swap Select All */
+               deselectall_posearmature(OBACT, 3, 1);
+               break;
        }
        allqueue(REDRAWVIEW3D, 0);
 }
@@ -1379,6 +1387,7 @@
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, 
menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
        
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A",  
                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
+       uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Swap Select All|Ctrl I", 
                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Constraint 
Target|W",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, 
"");
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Parent(s)|P",     
                                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 
4, "");
 
@@ -4106,7 +4115,7 @@
        block= uiNewBlock(&curarea->uiblocks, "view3d_pose_armature_ikmenu", 
UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
        uiBlockSetButmFunc(block, do_view3d_pose_armature_ikmenu, NULL);
        
-       uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add IK to Bone...|Ctrl 
I",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
+       uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add IK to Bone...|Shift 
I",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear IK...|Alt I",      
                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
        
        uiBlockSetDirection(block, UI_RIGHT);

Modified: trunk/blender/source/blender/src/space.c
===================================================================
--- trunk/blender/source/blender/src/space.c    2008-07-08 02:22:37 UTC (rev 
15481)
+++ trunk/blender/source/blender/src/space.c    2008-07-08 07:06:42 UTC (rev 
15482)
@@ -2189,10 +2189,14 @@
                                break;
                        case IKEY:
                                if(G.qual==LR_CTRLKEY) {
-                                       if(ob && (ob->flag & OB_POSEMODE) && 
ob->type==OB_ARMATURE)
-                                               pose_add_IK();
-                                       else if(ob && G.obedit)
-                                               selectswap_mesh();
+                                       if((ob) && (ob->flag & OB_POSEMODE) && 
(ob->type==OB_ARMATURE))
+                                               deselectall_posearmature(ob, 3, 
1);
+                                       else if(ob && G.obedit) {
+                                               if(G.obedit->type == 
OB_ARMATURE)
+                                                       deselectall_armature(3, 
1);
+                                               else
+                                                       selectswap_mesh();
+                                       }
                                        else
                                                selectswap();
                                }
@@ -2200,6 +2204,10 @@
                                        if(ob && (ob->flag & OB_POSEMODE) && 
ob->type==OB_ARMATURE)
                                                pose_clear_IK();
                                }
+                               else if(G.qual==LR_SHIFTKEY) {
+                                       if(ob && (ob->flag & OB_POSEMODE) && 
ob->type==OB_ARMATURE)
+                                               pose_add_IK();
+                               }
                                break;
                                
                        case JKEY:


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

Reply via email to