diff options
author | Joshua Leung <aligorith@gmail.com> | 2008-02-21 14:14:21 +0300 |
---|---|---|
committer | Joshua Leung <aligorith@gmail.com> | 2008-02-21 14:14:21 +0300 |
commit | 75d2729fce545fbb17d07ce85f039e0889869a80 (patch) | |
tree | 0cedb2af669ccf18e487277674f5d3975ffe24a0 /source/blender/src | |
parent | b6fc21d84f93b0f3ded871651995d21ecaab4341 (diff) |
Following on from the commits yesterday for "Action Channel Settings" quick-toggle tools, bones now have this functionality too.
Use Shift-W to toggle, Ctrl-Shift-W to enable, and Alt-W to disable one of the bone's settings.
Diffstat (limited to 'source/blender/src')
-rw-r--r-- | source/blender/src/editarmature.c | 92 | ||||
-rw-r--r-- | source/blender/src/header_action.c | 14 | ||||
-rw-r--r-- | source/blender/src/header_view3d.c | 26 | ||||
-rw-r--r-- | source/blender/src/space.c | 18 |
4 files changed, 148 insertions, 2 deletions
diff --git a/source/blender/src/editarmature.c b/source/blender/src/editarmature.c index a2f784f996e..364377f9541 100644 --- a/source/blender/src/editarmature.c +++ b/source/blender/src/editarmature.c @@ -836,6 +836,98 @@ void select_bone_parent (void) BIF_undo_push("Select Parent"); } +/* helper for setflag_sel_bone() */ +static void bone_setflag (int *bone, int flag, short mode) +{ + if (bone && flag) { + /* exception for inverse flags */ + if (flag == BONE_NO_DEFORM) { + if (mode == 2) + *bone |= flag; + else if (mode == 1) + *bone &= ~flag; + else + *bone ^= flag; + + } + else { + if (mode == 2) + *bone &= ~flag; + else if (mode == 1) + *bone |= flag; + else + *bone ^= flag; + } + } +} + +/* used by posemode and editmode */ +void setflag_armature (short mode) +{ + Object *ob; + bArmature *arm; + int flag; + + /* get data */ + if (G.obedit) + ob= G.obedit; + else if (OBACT) + ob= OBACT; + else + return; + arm= (bArmature *)ob->data; + + /* get flag to set (sync these with the ones used in eBone_Flag */ + if (mode == 2) + flag= pupmenu("Disable Setting%t|Draw Wire%x1|Deform%x2|Mult VG%x3|Hinge%x4|No Scale%x5"); + else if (mode == 1) + flag= pupmenu("Enable Setting%t|Draw Wire%x1|Deform%x2|Mult VG%x3|Hinge%x4|No Scale%x5"); + else + flag= pupmenu("Toggle Setting%t|Draw Wire%x1|Deform%x2|Mult VG%x3|Hinge%x4|No Scale%x5"); + switch (flag) { + case 1: flag = BONE_DRAWWIRE; break; + case 2: flag = BONE_NO_DEFORM; break; + case 3: flag = BONE_MULT_VG_ENV; break; + case 4: flag = BONE_HINGE; break; + case 5: flag = BONE_NO_SCALE; break; + default: return; + } + + /* determine which mode armature is in */ + if ((!G.obedit) && (ob->flag & OB_POSEMODE)) { + /* deal with pose channels */ + bPoseChannel *pchan; + + /* set setting */ + for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { + if ((pchan->bone) && (arm->layer & pchan->bone->layer)) { + if (pchan->bone->flag & BONE_SELECTED) { + bone_setflag(&pchan->bone->flag, flag, mode); + } + } + } + } + else if (G.obedit) { + /* deal with editbones */ + EditBone *curbone; + + /* set setting */ + for (curbone= G.edbo.first; curbone; curbone= curbone->next) { + if (arm->layer & curbone->layer) { + if (curbone->flag & BONE_SELECTED) { + bone_setflag(&curbone->flag, flag, mode); + } + } + } + } + + allqueue(REDRAWVIEW3D, 0); + allqueue(REDRAWBUTSEDIT, 0); + allqueue(REDRAWBUTSOBJECT, 0); + allqueue(REDRAWOOPS, 0); + + BIF_undo_push("Change Bone Setting"); +} /* **************** END PoseMode & EditMode *************************** */ /* **************** Posemode stuff ********************** */ diff --git a/source/blender/src/header_action.c b/source/blender/src/header_action.c index 1f2826d851b..dad6a3679c1 100644 --- a/source/blender/src/header_action.c +++ b/source/blender/src/header_action.c @@ -150,7 +150,8 @@ enum { ACTMENU_KEY_DUPLICATE = 0, ACTMENU_KEY_DELETE, ACTMENU_KEY_CLEAN, - ACTMENU_KEY_SAMPLEKEYS + ACTMENU_KEY_SAMPLEKEYS, + ACTMENU_KEY_INSERTKEY }; enum { @@ -1244,6 +1245,9 @@ static void do_action_keymenu(void *arg, int event) case ACTMENU_KEY_SAMPLEKEYS: sample_action_keys(); break; + case ACTMENU_KEY_INSERTKEY: + insertkey_action(); + break; } } @@ -1267,7 +1271,15 @@ static uiBlock *action_keymenu(void *arg_unused) uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, + "Insert Key|I", 0, yco-=20, + menuwidth, 19, NULL, 0.0, 0.0, 0, + ACTMENU_KEY_INSERTKEY, ""); + uiDefBut(block, SEPR, 0, "", 0, yco-=6, + menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, diff --git a/source/blender/src/header_view3d.c b/source/blender/src/header_view3d.c index 5feeafd0481..bf173b7b2a1 100644 --- a/source/blender/src/header_view3d.c +++ b/source/blender/src/header_view3d.c @@ -3884,6 +3884,29 @@ static uiBlock *view3d_scripts_armaturemenu(void *args_unused) return block; } +static void do_view3d_armature_settingsmenu(void *arg, int event) +{ + setflag_armature(event); +} + +static uiBlock *view3d_armature_settingsmenu(void *arg_unused) +{ + uiBlock *block; + short yco= 0, menuwidth=120; + + block= uiNewBlock(&curarea->uiblocks, "view3d_armature_settingsmenu", + UI_EMBOSSP, UI_HELV, G.curscreen->mainwin); + uiBlockSetButmFunc(block, do_view3d_armature_settingsmenu, NULL); + + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Toggle a Setting|Shift W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, ""); + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Enable a Setting|Ctrl Shift W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, ""); + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Disable a Setting|Alt W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, ""); + + uiBlockSetDirection(block, UI_RIGHT); + uiTextBoundsBlock(block, 60); + + return block; +} static uiBlock *view3d_edit_armaturemenu(void *arg_unused) { @@ -3937,6 +3960,7 @@ static uiBlock *view3d_edit_armaturemenu(void *arg_unused) uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); uiDefIconTextBlockBut(block, view3d_edit_armature_parentmenu, NULL, ICON_RIGHTARROW_THIN, "Parent", 0, yco-=20, 120, 19, ""); + uiDefIconTextBlockBut(block, view3d_armature_settingsmenu, NULL, ICON_RIGHTARROW_THIN, "Bone Settings", 0, yco-=20, 120, 19, ""); uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); @@ -4319,6 +4343,8 @@ static uiBlock *view3d_pose_armaturemenu(void *arg_unused) uiDefIconTextBlockBut(block, view3d_pose_armature_showhidemenu, NULL, ICON_RIGHTARROW_THIN, "Show/Hide Bones", 0, yco-=20, 120, 19, ""); + uiDefIconTextBlockBut(block, view3d_armature_settingsmenu, + NULL, ICON_RIGHTARROW_THIN, "Bone Settings", 0, yco-=20, 120, 19, ""); if(curarea->headertype==HEADERTOP) { uiBlockSetDirection(block, UI_DOWN); diff --git a/source/blender/src/space.c b/source/blender/src/space.c index 382b72967bc..55faa4650df 100644 --- a/source/blender/src/space.c +++ b/source/blender/src/space.c @@ -2547,7 +2547,23 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt) } break; case WKEY: - if((G.qual==LR_SHIFTKEY)) { + if ( ((ob) && (ob->flag & OB_POSEMODE)) || + ((G.obedit) && (G.obedit->type==OB_ARMATURE)) ) + { + if (G.qual) { + if (G.qual == (LR_CTRLKEY|LR_SHIFTKEY)) + val= 1; + else if (G.qual == LR_ALTKEY) + val= 2; + else + val= 0; + + setflag_armature(val); + } + else if (G.qual == 0) + special_editmenu(); + } + else if((G.qual==LR_SHIFTKEY)) { initTransform(TFM_WARP, CTX_NONE); Transform(); } |