[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21920] branches/blender2.5/blender/source /blender/editors: 2.5 - More armature/bone operator tweaks

Joshua Leung aligorith at gmail.com
Sun Jul 26 13:01:56 CEST 2009


Revision: 21920
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21920
Author:   aligorith
Date:     2009-07-26 13:01:56 +0200 (Sun, 26 Jul 2009)

Log Message:
-----------
2.5 - More armature/bone operator tweaks 

* Restored quick operators for moving bones between layers and switching visible armature layers. The popup used here (based on the layers template) is not optimal yet - you can click on multiple layer buttons to enable/disable them, but you need to move your mouse outside the area for it to confirm. 

* Separate armatures works again. I've tweaked the arguments to ED_object_duplicate() to make this work (besides, the other users of this wouldn't have been affected).

* Added some missing special (transform) operators to the menus + keymaps

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
    branches/blender2.5/blender/source/blender/editors/include/ED_object.h
    branches/blender2.5/blender/source/blender/editors/object/object_edit.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 09:35:40 UTC (rev 21919)
+++ branches/blender2.5/blender/source/blender/editors/armature/armature_intern.h	2009-07-26 11:01:56 UTC (rev 21920)
@@ -63,6 +63,9 @@
 
 void ARMATURE_OT_flags_set(struct wmOperatorType *ot);
 
+void ARMATURE_OT_armature_layers(struct wmOperatorType *ot);
+void ARMATURE_OT_bone_layers(struct wmOperatorType *ot);
+
 /* ******************************************************* */
 /* Pose-Mode Operators */
 void POSE_OT_hide(struct wmOperatorType *ot);
@@ -99,6 +102,9 @@
 
 void POSE_OT_flags_set(struct wmOperatorType *ot);
 
+void POSE_OT_armature_layers(struct wmOperatorType *ot);
+void POSE_OT_bone_layers(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 09:35:40 UTC (rev 21919)
+++ branches/blender2.5/blender/source/blender/editors/armature/armature_ops.c	2009-07-26 11:01:56 UTC (rev 21920)
@@ -55,6 +55,7 @@
 #include "ED_armature.h"
 #include "ED_screen.h"
 #include "ED_object.h"
+#include "ED_transform.h"
 
 #include "armature_intern.h"
 
@@ -137,6 +138,9 @@
 	WM_operatortype_append(ARMATURE_OT_flip_names);
 	
 	WM_operatortype_append(ARMATURE_OT_flags_set);
+	
+	WM_operatortype_append(ARMATURE_OT_armature_layers);
+	WM_operatortype_append(ARMATURE_OT_bone_layers);
 
 	/* SKETCH */	
 	WM_operatortype_append(SKETCH_OT_gesture);
@@ -182,6 +186,9 @@
 	
 	WM_operatortype_append(POSE_OT_flags_set);
 	
+	WM_operatortype_append(POSE_OT_armature_layers);
+	WM_operatortype_append(POSE_OT_bone_layers);
+	
 	/* POSELIB */
 	WM_operatortype_append(POSELIB_OT_browse_interactive);
 	
@@ -243,7 +250,7 @@
 	WM_keymap_add_item(keymap, "ARMATURE_OT_fill", FKEY, KM_PRESS, 0, 0);
 	WM_keymap_add_item(keymap, "ARMATURE_OT_merge", MKEY, KM_PRESS, KM_ALT, 0);
 	
-	WM_keymap_add_item(keymap, "ARMATURE_OT_separate", PKEY, KM_PRESS, /*KM_CTRL|KM_ALT*/0, 0);
+	WM_keymap_add_item(keymap, "ARMATURE_OT_separate", PKEY, KM_PRESS, KM_CTRL|KM_ALT, 0);
 	
 		/* set flags */
 	kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_flags_set", WKEY, KM_PRESS, KM_SHIFT, 0);
@@ -252,7 +259,19 @@
 		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/bone layers */
+	WM_keymap_add_item(keymap, "ARMATURE_OT_armature_layers", MKEY, KM_PRESS, KM_SHIFT, 0);
+	WM_keymap_add_item(keymap, "ARMATURE_OT_bone_layers", MKEY, KM_PRESS, 0, 0);
 	
+		/* special transforms: */
+		/* 	1) envelope/b-bone size */
+	kmi= WM_keymap_add_item(keymap, "TFM_OT_transform", SKEY, KM_PRESS, KM_ALT, 0);
+		RNA_enum_set(kmi->ptr, "mode", TFM_BONESIZE);
+		/* 	2) set roll */
+	kmi= WM_keymap_add_item(keymap, "TFM_OT_transform", RKEY, KM_PRESS, KM_CTRL, 0);
+		RNA_enum_set(kmi->ptr, "mode", TFM_BONE_ROLL);
+	
 	/* 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);
@@ -270,7 +289,7 @@
 	
 	WM_keymap_add_item(keymap, "POSE_OT_apply", AKEY, KM_PRESS, KM_CTRL, 0);
 	
-	/*clear pose*/
+	// TODO: clear pose
 	WM_keymap_add_item(keymap, "POSE_OT_rot_clear", RKEY, KM_PRESS, KM_ALT, 0);
 	WM_keymap_add_item(keymap, "POSE_OT_loc_clear", GKEY, KM_PRESS, KM_ALT, 0);
 	WM_keymap_add_item(keymap, "POSE_OT_scale_clear", SKEY, KM_PRESS, KM_ALT, 0);
@@ -307,14 +326,23 @@
 	
 	WM_keymap_add_item(keymap, "POSE_OT_groups_menu", GKEY, KM_PRESS, KM_CTRL, 0);
 	
-	/* set flags */
+		/* 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
+		
+		/* armature/bone layers */
+	WM_keymap_add_item(keymap, "POSE_OT_armature_layers", MKEY, KM_PRESS, KM_SHIFT, 0);
+	WM_keymap_add_item(keymap, "POSE_OT_bone_layers", MKEY, KM_PRESS, 0, 0);
 	
+		/* special transforms: */
+		/* 	1) envelope/b-bone size */
+	kmi= WM_keymap_add_item(keymap, "TFM_OT_transform", SKEY, KM_PRESS, KM_ALT, 0);
+		RNA_enum_set(kmi->ptr, "mode", TFM_BONESIZE);
+	
 	// 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 09:35:40 UTC (rev 21919)
+++ branches/blender2.5/blender/source/blender/editors/armature/editarmature.c	2009-07-26 11:01:56 UTC (rev 21920)
@@ -99,9 +99,7 @@
 
 /* ************* XXX *************** */
 static int okee() {return 0;}
-static int pupmenu() {return 0;}
 static void BIF_undo_push() {}
-static void adduplicate() {}
 /* ************* XXX *************** */
 
 /* **************** tools on Editmode Armature **************** */
@@ -1043,9 +1041,7 @@
 	ED_armature_edit_free(obedit);
 	
 	/* 2) duplicate base */
-	adduplicate(1, USER_DUP_ARM); /* no transform and zero so do get a linked dupli */
-	
-	newbase= BASACT; /* basact is set in adduplicate() */
+	newbase= ED_object_add_duplicate(scene, oldbase, USER_DUP_ARM); /* only duplicate linked armature */
 	newob= newbase->object;		
 	newbase->flag &= ~SELECT;
 	
@@ -1064,8 +1060,6 @@
 	
 	/* 5) restore original conditions */
 	obedit= oldob;
-	BASACT= oldbase;
-	BASACT->flag |= SELECT;
 	
 	ED_armature_to_edit(obedit);
 	
@@ -1274,7 +1268,6 @@
 /* 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");
 	

Modified: branches/blender2.5/blender/source/blender/editors/armature/poseobject.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/armature/poseobject.c	2009-07-26 09:35:40 UTC (rev 21919)
+++ branches/blender2.5/blender/source/blender/editors/armature/poseobject.c	2009-07-26 11:01:56 UTC (rev 21920)
@@ -89,7 +89,6 @@
 #include "armature_intern.h"
 
 /* ************* XXX *************** */
-static int movetolayer_short_buts() {return 1;}
 static int pupmenu() {return 0;}
 static void error() {};
 static void BIF_undo_push() {}
@@ -1683,90 +1682,270 @@
 	}
 }
 
-/* This function pops up the move-to-layer popup widgets when the user
- * presses either SHIFT-MKEY or MKEY in PoseMode OR EditMode (for Armatures)
- */
-void pose_movetolayer(Scene *scene)
+
+/* ********************************************** */
+
+/* Present a popup to get the layers that should be used */
+// TODO: move to wm?
+static uiBlock *wm_layers_select_create_menu(bContext *C, ARegion *ar, void *arg_op)
 {
-	Object *obedit= scene->obedit; // XXX context
-	Object *ob= OBACT;
-	bArmature *arm;
-	short lay= 0;
-	short shift= 0; // XXX
+	wmOperator *op= arg_op;
+	uiBlock *block;
+	uiLayout *layout;
+	uiStyle *style= U.uistyles.first;
 	
-	if (ob==NULL) return;
-	arm= ob->data;
+	block= uiBeginBlock(C, ar, "_popup", UI_EMBOSS);
+	uiBlockClearFlag(block, UI_BLOCK_LOOP);
+	uiBlockSetFlag(block, UI_BLOCK_KEEP_OPEN);
 	
-	if (shift) {
-		/* armature layers */
-		lay= arm->layer;
-		if ( movetolayer_short_buts(&lay, "Armature Layers")==0 ) return;
-		if (lay==0) return;
-		arm->layer= lay;
-		if(ob->pose)
-			ob->pose->proxy_layer= lay;
+	layout= uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, 0, 0, 150, 20, style);
+		uiItemL(layout, op->type->name, 0);
+		uiTemplateLayers(layout, op->ptr, "layers"); /* must have a property named layers setup */
 		
-	}
-	else if (obedit) {
-		/* the check for editbone layer moving needs to occur before posemode one to work */
-		EditBone *ebo;
-		EditBone *flipBone;
+	uiPopupBoundsBlock(block, 4.0f, 0, 0);
+	uiEndBlock(C, block);
+	
+	return block;
+}
+
+/* ------------------- */
+
+/* Present a popup to get the layers that should be used */
+static int pose_armature_layers_invoke (bContext *C, wmOperator *op, wmEvent *evt)
+{
+	Object *ob= CTX_data_active_object(C);
+	bArmature *arm= (ob)? ob->data : NULL;
+	PointerRNA ptr;
+	int layers[16]; /* hardcoded for now - we can only have 16 armature layers, so this should be fine... */
+	
+	/* sanity checking */
+	if (arm == NULL)
+		return OPERATOR_CANCELLED;
 		
-		for (ebo= arm->edbo->first; ebo; ebo= ebo->next) {
-			if (arm->layer & ebo->layer) {
-				if (ebo->flag & BONE_SELECTED)
-					lay |= ebo->layer;
-			}
-		}
-		if (lay==0) return;
+	/* get RNA pointer to armature data to use that to retrieve the layers as ints to init the operator */
+	RNA_id_pointer_create((ID *)arm, &ptr);
+	RNA_boolean_get_array(&ptr, "layer", layers);
+	RNA_boolean_set_array(op->ptr, "layers", layers);
+	
+		/* part to sync with other similar operators... */
+	/* pass on operator, so return modal */
+	uiPupBlockOperator(C, wm_layers_select_create_menu, op, WM_OP_EXEC_DEFAULT);
+	return OPERATOR_RUNNING_MODAL|OPERATOR_PASS_THROUGH;
+}
+
+/* Set the visible layers for the active armature (edit and pose modes) */
+static int pose_armature_layers_exec (bContext *C, wmOperator *op)
+{
+	Object *ob= CTX_data_active_object(C);
+	bArmature *arm= (ob)? ob->data : NULL;
+	PointerRNA ptr;
+	int layers[16]; /* hardcoded for now - we can only have 16 armature layers, so this should be fine... */
+	
+	/* get the values set in the operator properties */
+	RNA_boolean_get_array(op->ptr, "layers", layers);
+	
+	/* get pointer for armature, and write data there... */
+	RNA_id_pointer_create((ID *)arm, &ptr);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list