[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