Fix T52685, part II: Add option to strip numbers from flipped bone names again.
authorBastien Montagne <montagne29@wanadoo.fr>
Wed, 28 Feb 2018 16:13:31 +0000 (17:13 +0100)
committerBastien Montagne <montagne29@wanadoo.fr>
Wed, 28 Feb 2018 16:13:31 +0000 (17:13 +0100)
While doing so with Bone_R.001, Bone_R.003, Bone_R.003 etc. is doomed to
issues, doing that on duplicates of actually correctly named bones can
be handy, and safe.

So adding back as an option (was removed in rB702bc5ba26d5).

source/blender/editors/armature/armature_naming.c
source/blender/editors/armature/pose_edit.c
source/blender/editors/include/ED_armature.h

index 2d7a83f20c172f42a8ff195688cca98b48c4b266..cd7e3b4cb3922dcbe7bf04e32bcaf80f0f9738cd 100644 (file)
@@ -313,8 +313,9 @@ typedef struct BoneFlipNameData {
  *
  * \param arm: Armature the bones belong to
  * \param bones_names: List of BoneConflict elems.
+ * \param do_flip_numbers: if set, try to get rid of dot-numbers at end of bone names.
  */
-void ED_armature_bones_flip_names(bArmature *arm, ListBase *bones_names)
+void ED_armature_bones_flip_names(bArmature *arm, ListBase *bones_names, const bool do_strip_numbers)
 {
        ListBase bones_names_conflicts = {NULL};
        BoneFlipNameData *bfn;
@@ -326,9 +327,9 @@ void ED_armature_bones_flip_names(bArmature *arm, ListBase *bones_names)
                char name_flip[MAXBONENAME];
                char *name = link->data;
 
-               /* Do not strip numbers, otherwise we'll end up with completely mismatched names in cases like
+               /* WARNING: if do_strip_numbers is set, expect completely mismatched names in cases like
                 * Bone.R, Bone.R.001, Bone.R.002, etc. */
-               BLI_string_flip_side_name(name_flip, name, false, sizeof(name_flip));
+               BLI_string_flip_side_name(name_flip, name, do_strip_numbers, sizeof(name_flip));
 
                ED_armature_bone_rename(arm, name, name_flip);
 
@@ -351,7 +352,7 @@ void ED_armature_bones_flip_names(bArmature *arm, ListBase *bones_names)
 /* ************************************************** */
 /* Bone Renaming - EditMode */
 
-static int armature_flip_names_exec(bContext *C, wmOperator *UNUSED(op))
+static int armature_flip_names_exec(bContext *C, wmOperator *op)
 {
        Object *ob = CTX_data_edit_object(C);
        bArmature *arm;
@@ -360,6 +361,8 @@ static int armature_flip_names_exec(bContext *C, wmOperator *UNUSED(op))
        if (ELEM(NULL, ob, ob->pose))
                return OPERATOR_CANCELLED;
 
+       const bool do_strip_numbers = RNA_boolean_get(op->ptr, "do_strip_numbers");
+
        arm = ob->data;
 
        ListBase bones_names = {NULL};
@@ -370,7 +373,7 @@ static int armature_flip_names_exec(bContext *C, wmOperator *UNUSED(op))
        }
        CTX_DATA_END;
 
-       ED_armature_bones_flip_names(arm, &bones_names);
+       ED_armature_bones_flip_names(arm, &bones_names, do_strip_numbers);
 
        BLI_freelistN(&bones_names);
        
@@ -400,6 +403,10 @@ void ARMATURE_OT_flip_names(wmOperatorType *ot)
        
        /* flags */
        ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+       RNA_def_boolean(ot->srna, "do_strip_numbers", false, "Strip Numbers",
+                       "Try to remove right-most dot-number from flipped names "
+                       "(WARNING: may result in incoherent naming in some cases)");
 }
 
 
index acbf23ecf823187fd682bff9e98f19e314aeba9b..2181a6d5ac9821ee87f7acc83f247222c1f6ee3a 100644 (file)
@@ -589,7 +589,7 @@ static void pose_copy_menu(Scene *scene)
 
 /* ********************************************** */
 
-static int pose_flip_names_exec(bContext *C, wmOperator *UNUSED(op))
+static int pose_flip_names_exec(bContext *C, wmOperator *op)
 {
        Object *ob = BKE_object_pose_armature_get(CTX_data_active_object(C));
        bArmature *arm;
@@ -598,6 +598,8 @@ static int pose_flip_names_exec(bContext *C, wmOperator *UNUSED(op))
        if (ELEM(NULL, ob, ob->pose)) 
                return OPERATOR_CANCELLED;
 
+       const bool do_strip_numbers = RNA_boolean_get(op->ptr, "do_strip_numbers");
+
        arm = ob->data;
 
        ListBase bones_names = {NULL};
@@ -608,7 +610,7 @@ static int pose_flip_names_exec(bContext *C, wmOperator *UNUSED(op))
        }
        CTX_DATA_END;
 
-       ED_armature_bones_flip_names(arm, &bones_names);
+       ED_armature_bones_flip_names(arm, &bones_names, do_strip_numbers);
 
        BLI_freelistN(&bones_names);
        
@@ -634,6 +636,10 @@ void POSE_OT_flip_names(wmOperatorType *ot)
        
        /* flags */
        ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+       RNA_def_boolean(ot->srna, "do_strip_numbers", false, "Strip Numbers",
+                       "Try to remove right-most dot-number from flipped names "
+                       "(WARNING: may result in incoherent naming in some cases)");
 }
 
 /* ------------------ */
index 00081b95c519a79e1f22e1fd348b9fb24943c026..42bda265375d7ba4f8d40c0e2aa2e737ada6b4e9 100644 (file)
@@ -175,7 +175,7 @@ void create_vgroups_from_armature(struct ReportList *reports, struct Scene *scen
 /* if bone is already in list, pass it as param to ignore it */
 void unique_editbone_name(struct ListBase *ebones, char *name, EditBone *bone);
 void ED_armature_bone_rename(struct bArmature *arm, const char *oldnamep, const char *newnamep);
-void ED_armature_bones_flip_names(struct bArmature *arm, struct ListBase *bones_names);
+void ED_armature_bones_flip_names(struct bArmature *arm, struct ListBase *bones_names, const bool do_strip_numbers);
 
 void undo_push_armature(struct bContext *C, const char *name);