[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21912] branches/blender2.5/blender/source /blender/editors: 2.5 - Restoring 'set bone setting' operators for Armatures/PoseMode
Joshua Leung
aligorith at gmail.com
Sun Jul 26 05:22:27 CEST 2009
Revision: 21912
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21912
Author: aligorith
Date: 2009-07-26 05:22:24 +0200 (Sun, 26 Jul 2009)
Log Message:
-----------
2.5 - Restoring 'set bone setting' operators for Armatures/PoseMode
In the future, it might be a good idea to look for more efficient alternatives...
Modified Paths:
--------------
branches/blender2.5/blender/source/blender/editors/armature/armature_intern.h
branches/blender2.5/blender/source/blender/editors/armature/armature_ops.c
branches/blender2.5/blender/source/blender/editors/armature/editarmature.c
branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c
Modified: branches/blender2.5/blender/source/blender/editors/armature/armature_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/armature/armature_intern.h 2009-07-26 01:38:55 UTC (rev 21911)
+++ branches/blender2.5/blender/source/blender/editors/armature/armature_intern.h 2009-07-26 03:22:24 UTC (rev 21912)
@@ -56,12 +56,13 @@
void ARMATURE_OT_click_extrude(struct wmOperatorType *ot);
void ARMATURE_OT_fill(struct wmOperatorType *ot);
void ARMATURE_OT_merge(struct wmOperatorType *ot);
-
void ARMATURE_OT_separate(struct wmOperatorType *ot);
void ARMATURE_OT_autoside_names(struct wmOperatorType *ot);
void ARMATURE_OT_flip_names(struct wmOperatorType *ot);
+void ARMATURE_OT_flags_set(struct wmOperatorType *ot);
+
/* ******************************************************* */
/* Pose-Mode Operators */
void POSE_OT_hide(struct wmOperatorType *ot);
@@ -96,6 +97,8 @@
void POSE_OT_autoside_names(struct wmOperatorType *ot);
void POSE_OT_flip_names(struct wmOperatorType *ot);
+void POSE_OT_flags_set(struct wmOperatorType *ot);
+
/* ******************************************************* */
/* Etch-A-Ton */
Modified: branches/blender2.5/blender/source/blender/editors/armature/armature_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/armature/armature_ops.c 2009-07-26 01:38:55 UTC (rev 21911)
+++ branches/blender2.5/blender/source/blender/editors/armature/armature_ops.c 2009-07-26 03:22:24 UTC (rev 21912)
@@ -131,11 +131,12 @@
WM_operatortype_append(ARMATURE_OT_click_extrude);
WM_operatortype_append(ARMATURE_OT_fill);
WM_operatortype_append(ARMATURE_OT_merge);
-
WM_operatortype_append(ARMATURE_OT_separate);
WM_operatortype_append(ARMATURE_OT_autoside_names);
WM_operatortype_append(ARMATURE_OT_flip_names);
+
+ WM_operatortype_append(ARMATURE_OT_flags_set);
/* SKETCH */
WM_operatortype_append(SKETCH_OT_gesture);
@@ -179,6 +180,8 @@
WM_operatortype_append(POSE_OT_autoside_names);
WM_operatortype_append(POSE_OT_flip_names);
+ WM_operatortype_append(POSE_OT_flags_set);
+
/* POSELIB */
WM_operatortype_append(POSELIB_OT_browse_interactive);
@@ -242,6 +245,14 @@
WM_keymap_add_item(keymap, "ARMATURE_OT_separate", PKEY, KM_PRESS, /*KM_CTRL|KM_ALT*/0, 0);
+ /* set flags */
+ kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_flags_set", WKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_enum_set(kmi->ptr, "mode", 2); // toggle
+ kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_flags_set", WKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0);
+ RNA_enum_set(kmi->ptr, "mode", 1); // enable
+ kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_flags_set", WKEY, KM_PRESS, KM_ALT, 0);
+ RNA_enum_set(kmi->ptr, "mode", 0); // clear
+
/* Armature -> Etch-A-Ton ------------------------ */
WM_keymap_add_item(keymap, "SKETCH_OT_delete", XKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "SKETCH_OT_finish_stroke", SELECTMOUSE, KM_PRESS, 0, 0);
@@ -296,6 +307,14 @@
WM_keymap_add_item(keymap, "POSE_OT_groups_menu", GKEY, KM_PRESS, KM_CTRL, 0);
+ /* set flags */
+ kmi= WM_keymap_add_item(keymap, "POSE_OT_flags_set", WKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_enum_set(kmi->ptr, "mode", 2); // toggle
+ kmi= WM_keymap_add_item(keymap, "POSE_OT_flags_set", WKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0);
+ RNA_enum_set(kmi->ptr, "mode", 1); // enable
+ kmi= WM_keymap_add_item(keymap, "POSE_OT_flags_set", WKEY, KM_PRESS, KM_ALT, 0);
+ RNA_enum_set(kmi->ptr, "mode", 0); // clear
+
// XXX this should probably be in screen instead... here for testing purposes in the meantime... - Aligorith
WM_keymap_verify_item(keymap, "ANIM_OT_insert_keyframe_menu", IKEY, KM_PRESS, 0, 0);
WM_keymap_verify_item(keymap, "ANIM_OT_delete_keyframe_v3d", IKEY, KM_PRESS, KM_ALT, 0);
Modified: branches/blender2.5/blender/source/blender/editors/armature/editarmature.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/armature/editarmature.c 2009-07-26 01:38:55 UTC (rev 21911)
+++ branches/blender2.5/blender/source/blender/editors/armature/editarmature.c 2009-07-26 03:22:24 UTC (rev 21912)
@@ -371,6 +371,7 @@
ED_armature_edit_free(ob);
}
+/* exported for use in editors/object/ */
/* 0 == do center, 1 == center new, 2 == center cursor */
void docenter_armature (Scene *scene, View3D *v3d, Object *ob, int centermode)
{
@@ -1251,72 +1252,106 @@
return chbone;
}
-
-/* used by posemode and editmode */
-void setflag_armature (Scene *scene, short mode)
+/* callback for posemode setflag */
+static int pose_setflag_exec (bContext *C, wmOperator *op)
{
- Object *obedit= scene->obedit; // XXX get from context
- Object *ob;
- bArmature *arm;
- int flag;
+ int flag= RNA_enum_get(op->ptr, "type");
+ int mode= RNA_enum_get(op->ptr, "mode");
- /* get data */
- if (obedit)
- ob= 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|Locked%x6");
- else if (mode == 1)
- flag= pupmenu("Enable Setting%t|Draw Wire%x1|Deform%x2|Mult VG%x3|Hinge%x4|No Scale%x5|Locked%x6");
- else
- flag= pupmenu("Toggle Setting%t|Draw Wire%x1|Deform%x2|Mult VG%x3|Hinge%x4|No Scale%x5|Locked%x6");
- 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;
- case 6: flag = BONE_EDITMODE_LOCKED; break;
- default: return;
+ /* loop over all selected pchans */
+ CTX_DATA_BEGIN(C, bPoseChannel *, pchan, selected_pchans)
+ {
+ bone_setflag(&pchan->bone->flag, flag, mode);
}
+ CTX_DATA_END;
- /* determine which mode armature is in */
- if ((!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);
- }
- }
- }
+ /* note, notifier might evolve */
+ WM_event_add_notifier(C, NC_OBJECT|ND_POSE, CTX_data_active_object(C));
+
+ return OPERATOR_FINISHED;
+}
+
+/* callback for editbones setflag */
+static int armature_bones_setflag_exec (bContext *C, wmOperator *op)
+{
+ Object *ob= CTX_data_active_object(C);
+ int flag= RNA_enum_get(op->ptr, "type");
+ int mode= RNA_enum_get(op->ptr, "mode");
+
+ /* loop over all selected pchans */
+ CTX_DATA_BEGIN(C, EditBone *, ebone, selected_bones)
+ {
+ bone_setflag(&ebone->flag, flag, mode);
}
- else if (obedit) {
- /* deal with editbones */
- EditBone *curbone;
-
- /* set setting */
- for (curbone= arm->edbo->first; curbone; curbone= curbone->next) {
- if (arm->layer & curbone->layer) {
- if (curbone->flag & BONE_SELECTED) {
- bone_setflag(&curbone->flag, flag, mode);
- }
- }
- }
- }
+ CTX_DATA_END;
- BIF_undo_push("Change Bone Setting");
+ /* note, notifier might evolve */
+ WM_event_add_notifier(C, NC_OBJECT|ND_POSE, CTX_data_edit_object(C));
+
+ return OPERATOR_FINISHED;
}
+/* settings that can be changed */
+static EnumPropertyItem prop_bone_setting_types[] = {
+ {BONE_DRAWWIRE, "DRAWWIRE", 0, "Draw Wire", ""},
+ {BONE_NO_DEFORM, "DEFORM", 0, "Deform", ""},
+ {BONE_MULT_VG_ENV, "MULT_VG", 0, "Multiply Vertex Groups", ""},
+ {BONE_HINGE, "HINGE", 0, "Hinge", ""},
+ {BONE_NO_SCALE, "NO_SCALE", 0, "No Scale", ""},
+ {BONE_EDITMODE_LOCKED, "LOCKED", 0, "Locked", "(For EditMode only)"},
+ {0, NULL, 0, NULL, NULL}
+};
+
+/* ways that settings can be changed */
+static EnumPropertyItem prop_bone_setting_modes[] = {
+ {0, "CLEAR", 0, "Clear", ""},
+ {1, "ENABLE", 0, "Enable", ""},
+ {2, "TOGGLE", 0, "Toggle", ""},
+ {0, NULL, 0, NULL, NULL}
+};
+
+
+void ARMATURE_OT_flags_set (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Set Bone Flags";
+ ot->idname= "ARMATURE_OT_flags_set";
+ ot->description= "Set flags for armature bones.";
+
+ /* callbacks */
+ ot->invoke= WM_menu_invoke;
+ ot->exec= armature_bones_setflag_exec;
+ ot->poll= ED_operator_editarmature;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* properties */
+ RNA_def_enum(ot->srna, "type", prop_bone_setting_types, 0, "Type", "");
+ RNA_def_enum(ot->srna, "mode", prop_bone_setting_modes, 0, "Mode", "");
+}
+
+void POSE_OT_flags_set (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Set Bone Flags";
+ ot->idname= "POSE_OT_flags_set";
+ ot->description= "Set flags for armature bones.";
+
+ /* callbacks */
+ ot->invoke= WM_menu_invoke;
+ ot->exec= pose_setflag_exec;
+ ot->poll= ED_operator_posemode;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* properties */
+ RNA_def_enum(ot->srna, "type", prop_bone_setting_types, 0, "Type", "");
+ RNA_def_enum(ot->srna, "mode", prop_bone_setting_modes, 0, "Mode", "");
+}
+
+
/* **************** END PoseMode & EditMode *************************** */
/* **************** Posemode stuff ********************** */
@@ -1501,8 +1536,6 @@
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
-
- /* props */
}
/* does bones and points */
Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c 2009-07-26 01:38:55 UTC (rev 21911)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c 2009-07-26 03:22:24 UTC (rev 21912)
@@ -2765,10 +2765,18 @@
//uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Roll|Ctrl R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
}
+static void view3d_edit_armature_settingsmenu(bContext *C, uiLayout *layout, void *arg_unused)
+{
+ PointerRNA ptr;
+
+ uiItemEnumO(layout, "Toggle a Setting", 0, "ARMATURE_OT_flags_set", "mode", 2);
+ uiItemEnumO(layout, "Enable a Setting", 0, "ARMATURE_OT_flags_set", "mode", 1);
+ uiItemEnumO(layout, "Disable a Setting", 0, "ARMATURE_OT_flags_set", "mode", 0);
+}
+
#if 0
static void do_view3d_edit_armaturemenu(bContext *C, void *arg, int event)
{
-#if 0
static short numcuts= 2;
switch(event) {
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list