[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33637] trunk/blender/source/blender/ editors/armature/editarmature.c: Bugfix #25178

Ton Roosendaal ton at blender.org
Mon Dec 13 14:50:20 CET 2010


Revision: 33637
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33637
Author:   ton
Date:     2010-12-13 14:50:20 +0100 (Mon, 13 Dec 2010)

Log Message:
-----------
Bugfix #25178

Armature edit mode: x-mirror: "switch bone direction" now flips the
mirror bone too. It leaves the mirrored bones selected too, so
you get good visual feedback things happened there.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/armature/editarmature.c

Modified: trunk/blender/source/blender/editors/armature/editarmature.c
===================================================================
--- trunk/blender/source/blender/editors/armature/editarmature.c	2010-12-13 11:39:11 UTC (rev 33636)
+++ trunk/blender/source/blender/editors/armature/editarmature.c	2010-12-13 13:50:20 UTC (rev 33637)
@@ -152,7 +152,48 @@
 	bone_free(arm, exBone);
 }
 
+/* context: editmode armature */
+EditBone *ED_armature_bone_get_mirrored(ListBase *edbo, EditBone *ebo)
+{
+	EditBone *eboflip= NULL;
+	char name[32];
+	
+	if (ebo == NULL)
+		return NULL;
+	
+	flip_side_name(name, ebo->name, FALSE);
+	
+	for (eboflip= edbo->first; eboflip; eboflip=eboflip->next) {
+		if (ebo != eboflip) {
+			if (!strcmp (name, eboflip->name)) 
+				break;
+		}
+	}
+	
+	return eboflip;
+}
 
+/* helper function for tools to work on mirrored parts.
+   it leaves mirrored bones selected then too, which is a good indication of what happened */
+static void armature_select_mirrored(bArmature *arm)
+{
+	/* Select mirrored bones */
+	if (arm->flag & ARM_MIRROR_EDIT) {
+		EditBone *curBone, *ebone_mirr;
+		
+		for (curBone=arm->edbo->first; curBone; curBone=curBone->next) {
+			if (arm->layer & curBone->layer) {
+				if (curBone->flag & BONE_SELECTED) {
+					ebone_mirr= ED_armature_bone_get_mirrored(arm->edbo, curBone);
+					if (ebone_mirr)
+						ebone_mirr->flag |= BONE_SELECTED;
+				}
+			}
+		}
+	}
+	
+}
+
 /* converts Bones to EditBone list, used for tools as well */
 EditBone *make_boneList(ListBase *edbo, ListBase *bones, EditBone *parent, Bone *actBone)
 {
@@ -1749,28 +1790,6 @@
 	return NULL;
 }
 
-/* context: editmode armature */
-EditBone *ED_armature_bone_get_mirrored(ListBase *edbo, EditBone *ebo)
-{
-	EditBone *eboflip= NULL;
-	char name[32];
-	
-	if (ebo == NULL)
-		return NULL;
-
-	flip_side_name(name, ebo->name, FALSE);
-	
-	for (eboflip= edbo->first; eboflip; eboflip=eboflip->next) {
-		if (ebo != eboflip) {
-			if (!strcmp (name, eboflip->name)) 
-				break;
-		}
-	}
-	
-	return eboflip;
-}
-
-
 /* previously delete_armature */
 /* only editmode! */
 static int armature_delete_selected_exec(bContext *C, wmOperator *UNUSED(op))
@@ -1785,18 +1804,7 @@
 	if (CTX_DATA_COUNT(C, selected_bones) == 0)
 		return OPERATOR_CANCELLED;
 	
-	/* Select mirrored bones */
-	if (arm->flag & ARM_MIRROR_EDIT) {
-		for (curBone=arm->edbo->first; curBone; curBone=curBone->next) {
-			if (arm->layer & curBone->layer) {
-				if (curBone->flag & BONE_SELECTED) {
-					ebone_next= ED_armature_bone_get_mirrored(arm->edbo, curBone);
-					if (ebone_next)
-						ebone_next->flag |= BONE_SELECTED;
-				}
-			}
-		}
-	}
+	armature_select_mirrored(arm);
 	
 	/*  First erase any associated pose channel */
 	if (obedit->pose) {
@@ -3722,6 +3730,9 @@
 	chains_find_tips(arm->edbo, &chains);
 	if (chains.first == NULL) return OPERATOR_CANCELLED;
 	
+	/* leaves mirrored bones selected, as indication of operation */
+	armature_select_mirrored(arm);
+	
 	/* loop over chains, only considering selected and visible bones */
 	for (chain= chains.first; chain; chain= chain->next) {
 		EditBone *ebo, *child=NULL, *parent=NULL;





More information about the Bf-blender-cvs mailing list