[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32366] trunk/blender/source/blender/ editors: bugfix [#21610] alt-r for bone (reset rotation) doesnt work in weight painting mode

Campbell Barton ideasman42 at gmail.com
Fri Oct 8 01:17:14 CEST 2010


Revision: 32366
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32366
Author:   campbellbarton
Date:     2010-10-08 01:17:14 +0200 (Fri, 08 Oct 2010)

Log Message:
-----------
bugfix [#21610] alt-r for bone (reset rotation) doesnt work in weight painting mode
pose operators now run in weightpaint mode when the weight paint objects pose armature is in pose mode.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/armature/editarmature.c
    trunk/blender/source/blender/editors/armature/poseSlide.c
    trunk/blender/source/blender/editors/armature/poselib.c
    trunk/blender/source/blender/editors/armature/poseobject.c
    trunk/blender/source/blender/editors/include/ED_armature.h
    trunk/blender/source/blender/editors/object/object_constraint.c
    trunk/blender/source/blender/editors/screen/screen_context.c
    trunk/blender/source/blender/editors/screen/screen_ops.c

Modified: trunk/blender/source/blender/editors/armature/editarmature.c
===================================================================
--- trunk/blender/source/blender/editors/armature/editarmature.c	2010-10-07 21:25:05 UTC (rev 32365)
+++ trunk/blender/source/blender/editors/armature/editarmature.c	2010-10-07 23:17:14 UTC (rev 32366)
@@ -558,7 +558,7 @@
 static int apply_armature_pose2bones_exec (bContext *C, wmOperator *op)
 {
 	Scene *scene= CTX_data_scene(C);
-	Object *ob= CTX_data_active_object(C); // must be active object, not edit-object
+	Object *ob= ED_object_pose_armature(CTX_data_active_object(C)); // must be active object, not edit-object
 	bArmature *arm= get_armature(ob);
 	bPose *pose;
 	bPoseChannel *pchan;
@@ -658,7 +658,7 @@
 static int pose_visual_transform_apply_exec (bContext *C, wmOperator *op)
 {
 	Scene *scene= CTX_data_scene(C);
-	Object *ob= CTX_data_active_object(C); // must be active object, not edit-object
+	Object *ob= ED_object_pose_armature(CTX_data_active_object(C)); // must be active object, not edit-object
 
 	/* don't check if editmode (should be done by caller) */
 	if (ob->type!=OB_ARMATURE)
@@ -1389,7 +1389,7 @@
 	CTX_DATA_END;
 	
 	/* note, notifier might evolve */
-	WM_event_add_notifier(C, NC_OBJECT|ND_POSE, CTX_data_active_object(C));
+	WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ED_object_pose_armature(CTX_data_active_object(C)));
 	
 	return OPERATOR_FINISHED;
 }
@@ -4917,7 +4917,7 @@
 static int pose_clear_scale_exec(bContext *C, wmOperator *op) 
 {
 	Scene *scene= CTX_data_scene(C);
-	Object *ob= CTX_data_active_object(C);
+	Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
 	short autokey = 0;
 	
 	/* only clear those channels that are not locked */
@@ -4985,7 +4985,7 @@
 static int pose_clear_loc_exec(bContext *C, wmOperator *op) 
 {
 	Scene *scene= CTX_data_scene(C);
-	Object *ob= CTX_data_active_object(C);
+	Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
 	short autokey = 0;
 	
 	/* only clear those channels that are not locked */
@@ -5054,7 +5054,7 @@
 static int pose_clear_rot_exec(bContext *C, wmOperator *op) 
 {
 	Scene *scene= CTX_data_scene(C);
-	Object *ob= CTX_data_active_object(C);
+	Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
 	short autokey = 0;
 	
 	/* only clear those channels that are not locked */
@@ -5306,7 +5306,7 @@
 
 static int pose_select_parent_exec(bContext *C, wmOperator *op)
 {
-	Object *ob= CTX_data_active_object(C);
+	Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
 	bPoseChannel *pchan,*parent;
 
 	/*	Determine if there is an active bone */
@@ -5381,7 +5381,7 @@
 /* active object is armature in posemode, poll checked */
 static int pose_hide_exec(bContext *C, wmOperator *op) 
 {
-	Object *ob= CTX_data_active_object(C);
+	Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
 	bArmature *arm= ob->data;
 
 	if(RNA_boolean_get(op->ptr, "unselected"))
@@ -5431,7 +5431,7 @@
 /* active object is armature in posemode, poll checked */
 static int pose_reveal_exec(bContext *C, wmOperator *op) 
 {
-	Object *ob= CTX_data_active_object(C);
+	Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
 	bArmature *arm= ob->data;
 	
 	bone_looper(ob, arm->bonebase.first, NULL, show_pose_bone);

Modified: trunk/blender/source/blender/editors/armature/poseSlide.c
===================================================================
--- trunk/blender/source/blender/editors/armature/poseSlide.c	2010-10-07 21:25:05 UTC (rev 32365)
+++ trunk/blender/source/blender/editors/armature/poseSlide.c	2010-10-07 23:17:14 UTC (rev 32366)
@@ -119,7 +119,7 @@
 	
 	/* get info from context */
 	pso->scene= CTX_data_scene(C);
-	pso->ob= CTX_data_active_object(C);
+	pso->ob= ED_object_pose_armature(CTX_data_active_object(C));
 	pso->arm= (pso->ob)? pso->ob->data : NULL;
 	pso->ar= CTX_wm_region(C); /* only really needed when doing modal() */
 	

Modified: trunk/blender/source/blender/editors/armature/poselib.c
===================================================================
--- trunk/blender/source/blender/editors/armature/poselib.c	2010-10-07 21:25:05 UTC (rev 32365)
+++ trunk/blender/source/blender/editors/armature/poselib.c	2010-10-07 23:17:14 UTC (rev 32366)
@@ -270,7 +270,7 @@
 
 static void poselib_add_menu_invoke__replacemenu (bContext *C, uiLayout *layout, void *arg)
 {
-	Object *ob= CTX_data_active_object(C);
+	Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
 	bAction *act= ob->poselib;
 	TimeMarker *marker;
 	
@@ -293,7 +293,7 @@
 static int poselib_add_menu_invoke (bContext *C, wmOperator *op, wmEvent *evt)
 {
 	Scene *scene= CTX_data_scene(C);
-	Object *ob= CTX_data_active_object(C);
+	Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
 	bArmature *arm= (ob) ? ob->data : NULL;
 	bPose *pose= (ob) ? ob->pose : NULL;
 	uiPopupMenu *pup;
@@ -329,7 +329,7 @@
 
 static int poselib_add_exec (bContext *C, wmOperator *op)
 {
-	Object *ob= CTX_data_active_object(C);
+	Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
 	bAction *act = poselib_validate(ob);
 	bArmature *arm= (ob) ? ob->data : NULL;
 	bPose *pose= (ob) ? ob->pose : NULL;
@@ -404,7 +404,7 @@
 
 static EnumPropertyItem *poselib_stored_pose_itemf(bContext *C, PointerRNA *ptr, int *free)
 {
-	Object *ob= CTX_data_active_object(C);
+	Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
 	bAction *act= (ob) ? ob->poselib : NULL;
 	TimeMarker *marker;
 	EnumPropertyItem *item= NULL, item_tmp;
@@ -436,7 +436,7 @@
 
 static int poselib_remove_exec (bContext *C, wmOperator *op)
 {
-	Object *ob= CTX_data_active_object(C);
+	Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
 	bAction *act= (ob) ? ob->poselib : NULL;
 	TimeMarker *marker;
 	FCurve *fcu;
@@ -505,7 +505,7 @@
 
 static int poselib_rename_invoke (bContext *C, wmOperator *op, wmEvent *evt)
 {
-	Object *ob= CTX_data_active_object(C);
+	Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
 	bAction *act= (ob) ? ob->poselib : NULL;
 	TimeMarker *marker;
 	
@@ -533,7 +533,7 @@
 
 static int poselib_rename_exec (bContext *C, wmOperator *op)
 {
-	Object *ob= CTX_data_active_object(C);
+	Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
 	bAction *act= (ob) ? ob->poselib : NULL;
 	TimeMarker *marker;
 	char newname[64];
@@ -1237,7 +1237,7 @@
 static void poselib_preview_init_data (bContext *C, wmOperator *op)
 {
 	tPoseLib_PreviewData *pld;
-	Object *ob= CTX_data_active_object(C);
+	Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
 	int pose_index = RNA_int_get(op->ptr, "pose_index");
 	
 	/* set up preview state info */

Modified: trunk/blender/source/blender/editors/armature/poseobject.c
===================================================================
--- trunk/blender/source/blender/editors/armature/poseobject.c	2010-10-07 21:25:05 UTC (rev 32365)
+++ trunk/blender/source/blender/editors/armature/poseobject.c	2010-10-07 23:17:14 UTC (rev 32366)
@@ -76,6 +76,38 @@
 static void BIF_undo_push(const char *dummy) {}
 /* ************* XXX *************** */
 
+
+static int object_pose_context(Object *ob)
+{
+	if(	(ob) && 
+		(ob->type == OB_ARMATURE) &&
+		(ob->pose) &&
+		(ob->mode & OB_MODE_POSE)
+	) {
+		return 1;
+	}
+	else {
+		return 0;
+	}
+}
+
+Object *ED_object_pose_armature(Object *ob)
+{
+	if(ob==NULL)
+		return NULL;
+	
+	if(object_pose_context(ob))
+		return ob;
+
+	ob= modifiers_isDeformedByArmature(ob);
+
+	if(object_pose_context(ob))
+		return ob;
+
+	return NULL;
+}
+
+
 /* This function is used to indicate that a bone is selected and needs keyframes inserted */
 void set_pose_keys (Object *ob)
 {
@@ -220,7 +252,7 @@
 	if (sa->spacetype == SPACE_BUTS) 
 		ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
 	else
-		ob= CTX_data_active_object(C);
+		ob= ED_object_pose_armature(CTX_data_active_object(C));
 		
 	if (ELEM(NULL, ob, ob->pose))
 		return OPERATOR_CANCELLED;
@@ -296,7 +328,7 @@
 	if (sa->spacetype == SPACE_BUTS) 
 		ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
 	else
-		ob= CTX_data_active_object(C);
+		ob= ED_object_pose_armature(CTX_data_active_object(C));
 		
 	/* only continue if there's an object */
 	if ELEM(NULL, ob, ob->pose)
@@ -330,7 +362,7 @@
 
 static int pose_select_constraint_target_exec(bContext *C, wmOperator *op)
 {
-	Object *ob= CTX_data_active_object(C);
+	Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
 	bArmature *arm= ob->data;
 	bConstraint *con;
 	int found= 0;
@@ -390,7 +422,7 @@
 
 static int pose_select_hierarchy_exec(bContext *C, wmOperator *op)
 {
-	Object *ob= CTX_data_active_object(C);
+	Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
 	bArmature *arm= ob->data;
 	Bone *curbone, *pabone, *chbone;
 	int direction = RNA_enum_get(op->ptr, "direction");
@@ -570,7 +602,7 @@
 
 static int pose_select_grouped_exec (bContext *C, wmOperator *op)
 {
-	Object *ob= CTX_data_active_object(C);
+	Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
 	short extend= RNA_boolean_get(op->ptr, "extend");
 	short changed = 0;
 	
@@ -856,7 +888,7 @@
 
 static int pose_copy_exec (bContext *C, wmOperator *op)
 {
-	Object *ob= CTX_data_active_object(C);
+	Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
 	
 	/* sanity checking */
 	if ELEM(NULL, ob, ob->pose) {
@@ -895,7 +927,7 @@
 static int pose_paste_exec (bContext *C, wmOperator *op)
 {
 	Scene *scene= CTX_data_scene(C);
-	Object *ob= CTX_data_active_object(C);
+	Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
 	bPoseChannel *chan, *pchan;
 	int flip= RNA_boolean_get(op->ptr, "flipped");
 	
@@ -1077,7 +1109,7 @@
 	if (sa->spacetype == SPACE_BUTS) 
 		ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
 	else
-		ob= CTX_data_active_object(C);
+		ob= ED_object_pose_armature(CTX_data_active_object(C));
 		
 	/* only continue if there's an object */
 	if (ob == NULL)
@@ -1117,7 +1149,7 @@
 	if (sa->spacetype == SPACE_BUTS) 
 		ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
 	else
-		ob= CTX_data_active_object(C);
+		ob= ED_object_pose_armature(CTX_data_active_object(C));
 	
 	/* only continue if there's an object */
 	if (ob == NULL)
@@ -1165,7 +1197,7 @@
 	if (sa->spacetype == SPACE_BUTS) 
 		ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
 	else
-		ob= CTX_data_active_object(C);
+		ob= ED_object_pose_armature(CTX_data_active_object(C));
 	

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list