[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