[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18996] branches/blender2.5/blender/source /blender/editors/armature: 2.5
Ton Roosendaal
ton at blender.org
Mon Feb 16 18:18:27 CET 2009
Revision: 18996
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18996
Author: ton
Date: 2009-02-16 18:18:24 +0100 (Mon, 16 Feb 2009)
Log Message:
-----------
2.5
Patch from Arystan Dyussenov (A624), two operators for armatures;
- select hierarchy up/down, using bracket [ ] with or without
shift, and for editmode and posemode.
Good work, thanks!
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/armature/poseobject.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-02-16 16:17:20 UTC (rev 18995)
+++ branches/blender2.5/blender/source/blender/editors/armature/armature_intern.h 2009-02-16 17:18:24 UTC (rev 18996)
@@ -43,6 +43,7 @@
void ARMATURE_OT_parent_clear(struct wmOperatorType *ot);
void ARMATURE_OT_de_select_all(struct wmOperatorType *ot);
void ARMATURE_OT_selection_invert(struct wmOperatorType *ot);
+void ARMATURE_OT_select_hierarchy(struct wmOperatorType *ot);
void POSE_OT_hide(struct wmOperatorType *ot);
void POSE_OT_reveal(struct wmOperatorType *ot);
@@ -52,6 +53,7 @@
void POSE_OT_de_select_all(struct wmOperatorType *ot);
void POSE_OT_selection_invert(struct wmOperatorType *ot);
void POSE_OT_select_parent(struct wmOperatorType *ot);
+void POSE_OT_select_hierarchy(struct wmOperatorType *ot);
#endif /* ED_ARMATURE_INTERN_H */
Modified: branches/blender2.5/blender/source/blender/editors/armature/armature_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/armature/armature_ops.c 2009-02-16 16:17:20 UTC (rev 18995)
+++ branches/blender2.5/blender/source/blender/editors/armature/armature_ops.c 2009-02-16 17:18:24 UTC (rev 18996)
@@ -120,6 +120,7 @@
WM_operatortype_append(ARMATURE_OT_de_select_all);
WM_operatortype_append(ARMATURE_OT_selection_invert);
+ WM_operatortype_append(ARMATURE_OT_select_hierarchy);
/* POSE */
WM_operatortype_append(POSE_OT_hide);
@@ -133,6 +134,7 @@
WM_operatortype_append(POSE_OT_selection_invert);
WM_operatortype_append(POSE_OT_select_parent);
+ WM_operatortype_append(POSE_OT_select_hierarchy);
WM_operatortype_append(ARMATURE_OT_test); // XXX temp test for context iterators... to be removed
}
@@ -162,7 +164,21 @@
WM_keymap_add_item(keymap, "ARMATURE_OT_selection_invert", IKEY, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "ARMATURE_OT_test", TKEY, KM_PRESS, 0, 0); // XXX temp test for context iterators... to be removed
+
+ kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_select_hierarchy", LEFTBRACKETKEY, KM_PRESS, 0, 0);
+ RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_PARENT);
+ RNA_boolean_set(kmi->ptr, "add_to_sel", 0);
+ kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_select_hierarchy", LEFTBRACKETKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_PARENT);
+ RNA_boolean_set(kmi->ptr, "add_to_sel", 1);
+ kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_select_hierarchy", RIGHTBRACKETKEY, KM_PRESS, 0, 0);
+ RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_CHILD);
+ RNA_boolean_set(kmi->ptr, "add_to_sel", 0);
+ kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_select_hierarchy", RIGHTBRACKETKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_CHILD);
+ RNA_boolean_set(kmi->ptr, "add_to_sel", 1);
+
/* Pose ------------------------ */
/* only set in posemode, by space_view3d listener */
keymap= WM_keymap_listbase(wm, "Pose", 0, 0);
@@ -180,5 +196,19 @@
WM_keymap_add_item(keymap, "POSE_OT_selection_invert", IKEY, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "POSE_OT_select_parent", PKEY, KM_PRESS, KM_SHIFT, 0);
+
+ kmi= WM_keymap_add_item(keymap, "POSE_OT_select_hierarchy", LEFTBRACKETKEY, KM_PRESS, 0, 0);
+ RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_PARENT);
+ RNA_boolean_set(kmi->ptr, "add_to_sel", 0);
+ kmi= WM_keymap_add_item(keymap, "POSE_OT_select_hierarchy", LEFTBRACKETKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_PARENT);
+ RNA_boolean_set(kmi->ptr, "add_to_sel", 1);
+
+ kmi= WM_keymap_add_item(keymap, "POSE_OT_select_hierarchy", RIGHTBRACKETKEY, KM_PRESS, 0, 0);
+ RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_CHILD);
+ RNA_boolean_set(kmi->ptr, "add_to_sel", 0);
+ kmi= WM_keymap_add_item(keymap, "POSE_OT_select_hierarchy", RIGHTBRACKETKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_CHILD);
+ RNA_boolean_set(kmi->ptr, "add_to_sel", 1);
}
Modified: branches/blender2.5/blender/source/blender/editors/armature/editarmature.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/armature/editarmature.c 2009-02-16 16:17:20 UTC (rev 18995)
+++ branches/blender2.5/blender/source/blender/editors/armature/editarmature.c 2009-02-16 17:18:24 UTC (rev 18996)
@@ -1201,61 +1201,7 @@
return chbone;
}
-void armature_select_hierarchy(Scene *scene, short direction, short add_to_sel)
-{
- Object *obedit= scene->obedit; // XXX get from context
- Object *ob;
- bArmature *arm;
- EditBone *curbone, *pabone, *chbone;
- if (!obedit) return;
- else ob= obedit;
- arm= (bArmature *)ob->data;
-
- for (curbone= arm->edbo->first; curbone; curbone= curbone->next) {
- if (EBONE_VISIBLE(arm, curbone)) {
- if (curbone->flag & (BONE_ACTIVE)) {
- if (direction == BONE_SELECT_PARENT) {
- if (curbone->parent == NULL) continue;
- else pabone = curbone->parent;
-
- if (EBONE_VISIBLE(arm, pabone)) {
- pabone->flag |= (BONE_ACTIVE|BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL);
- if (pabone->parent) pabone->parent->flag |= BONE_TIPSEL;
-
- if (!add_to_sel) curbone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL);
- curbone->flag &= ~BONE_ACTIVE;
- break;
- }
-
- }
- else { // BONE_SELECT_CHILD
- chbone = editbone_get_child(arm, curbone, 1);
- if (chbone == NULL) continue;
-
- if (EBONE_VISIBLE(arm, chbone)) {
- chbone->flag |= (BONE_ACTIVE|BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL);
-
- if (!add_to_sel) {
- curbone->flag &= ~(BONE_SELECTED|BONE_ROOTSEL);
- if (curbone->parent) curbone->parent->flag &= ~BONE_TIPSEL;
- }
- curbone->flag &= ~BONE_ACTIVE;
- break;
- }
- }
- }
- }
- }
-
- armature_sync_selection(arm->edbo);
-
- if (direction==BONE_SELECT_PARENT)
- BIF_undo_push("Select edit bone parent");
- if (direction==BONE_SELECT_CHILD)
- BIF_undo_push("Select edit bone child");
-}
-
/* used by posemode and editmode */
void setflag_armature (Scene *scene, short mode)
{
@@ -3585,6 +3531,89 @@
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
+
+/* ********************* select hierarchy operator ************** */
+
+static int armature_select_hierarchy_exec(bContext *C, wmOperator *op)
+{
+ Object *obedit= CTX_data_edit_object(C);
+ Object *ob;
+ bArmature *arm;
+ EditBone *curbone, *pabone, *chbone;
+ int direction = RNA_enum_get(op->ptr, "direction");
+ int add_to_sel = RNA_boolean_get(op->ptr, "add_to_sel");
+
+ ob= obedit;
+ arm= (bArmature *)ob->data;
+
+ for (curbone= arm->edbo->first; curbone; curbone= curbone->next) {
+ if (EBONE_VISIBLE(arm, curbone)) {
+ if (curbone->flag & (BONE_ACTIVE)) {
+ if (direction == BONE_SELECT_PARENT) {
+ if (curbone->parent == NULL) continue;
+ else pabone = curbone->parent;
+
+ if (EBONE_VISIBLE(arm, pabone)) {
+ pabone->flag |= (BONE_ACTIVE|BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL);
+ if (pabone->parent) pabone->parent->flag |= BONE_TIPSEL;
+
+ if (!add_to_sel) curbone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL);
+ curbone->flag &= ~BONE_ACTIVE;
+ break;
+ }
+
+ }
+ else { // BONE_SELECT_CHILD
+ chbone = editbone_get_child(arm, curbone, 1);
+ if (chbone == NULL) continue;
+
+ if (EBONE_VISIBLE(arm, chbone)) {
+ chbone->flag |= (BONE_ACTIVE|BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL);
+
+ if (!add_to_sel) {
+ curbone->flag &= ~(BONE_SELECTED|BONE_ROOTSEL);
+ if (curbone->parent) curbone->parent->flag &= ~BONE_TIPSEL;
+ }
+ curbone->flag &= ~BONE_ACTIVE;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ armature_sync_selection(arm->edbo);
+
+ WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, ob);
+
+ return OPERATOR_FINISHED;
+}
+
+void ARMATURE_OT_select_hierarchy(wmOperatorType *ot)
+{
+ static EnumPropertyItem direction_items[]= {
+ {BONE_SELECT_PARENT, "PARENT", "Select Parent", ""},
+ {BONE_SELECT_CHILD, "CHILD", "Select Child", ""},
+ {0, NULL, NULL, NULL}
+ };
+
+ /* identifiers */
+ ot->name= "select a bone in hierarchy";
+ ot->idname= "ARMATURE_OT_select_hierarchy";
+
+ /* api callbacks */
+ ot->exec= armature_select_hierarchy_exec;
+ ot->poll= ED_operator_editarmature;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* props */
+ RNA_def_enum(ot->srna, "direction", direction_items,
+ BONE_SELECT_PARENT, "Direction", "");
+ RNA_def_boolean(ot->srna, "add_to_sel", 0, "Add to Selection", "");
+}
+
/* ***************** EditBone Alignment ********************* */
/* helper to fix a ebone position if its parent has moved due to alignment*/
@@ -4410,9 +4439,6 @@
static int pose_selection_invert_exec(bContext *C, wmOperator *op)
{
- Object *ob= CTX_data_active_object(C);
- bArmature *arm= ob->data;
- bPoseChannel *pchan;
/* Set the flags */
CTX_DATA_BEGIN(C, bPoseChannel *, pchan, visible_pchans) {
@@ -4519,6 +4545,7 @@
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
+
/* ************* hide/unhide pose bones ******************* */
static int hide_selected_pose_bone(Object *ob, Bone *bone, void *ptr)
Modified: branches/blender2.5/blender/source/blender/editors/armature/poseobject.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/armature/poseobject.c 2009-02-16 16:17:20 UTC (rev 18995)
+++ branches/blender2.5/blender/source/blender/editors/armature/poseobject.c 2009-02-16 17:18:24 UTC (rev 18996)
@@ -78,6 +78,7 @@
#include "ED_keyframing.h"
#include "ED_object.h"
#include "ED_mesh.h"
+#include "ED_screen.h"
#include "ED_view3d.h"
#include "armature_intern.h"
@@ -442,18 +443,17 @@
}
-void pose_select_hierarchy(Scene *scene, short direction, short add_to_sel)
+/* ******************* select hierarchy operator ************* */
+
+static int pose_select_hierarchy_exec(bContext *C, wmOperator *op)
{
- Object *obedit= scene->obedit; // XXX context
- Object *ob= OBACT;
+ Object *ob= CTX_data_active_object(C);
bArmature *arm= ob->data;
bPoseChannel *pchan;
Bone *curbone, *pabone, *chbone;
+ int direction = RNA_enum_get(op->ptr, "direction");
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list