[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