ensure BoneGroup names are kept unique.
authorCampbell Barton <ideasman42@gmail.com>
Sat, 15 Oct 2011 11:07:18 +0000 (11:07 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Sat, 15 Oct 2011 11:07:18 +0000 (11:07 +0000)
source/blender/makesdna/DNA_action_types.h
source/blender/makesrna/intern/rna_pose.c

index 492dd34caa63965ce4c62e2ca8d3e8891deb1c7c..29e0b18b97d1954f31965e3efe10949494b68ef2 100644 (file)
@@ -341,7 +341,7 @@ typedef struct bPose {
        void *ikparam;                          /* IK solver parameters, structure depends on iksolver */ 
        
        bAnimVizSettings avs;           /* settings for visualisation of bone animation */
-       char proxy_act_bone[32];           /*proxy active bone name*/
+       char proxy_act_bone[32];    /* proxy active bone name*/
 } bPose;
 
 
@@ -423,6 +423,8 @@ typedef enum eItasc_Solver {
  * This is also exploited for bone-groups. Bone-Groups are stored per bPose, and are used 
  * primarily to color bones in the 3d-view. There are other benefits too, but those are mostly related
  * to Action-Groups.
+ *
+ * Note that these two uses each have their own RNA 'ActionGroup' and 'BoneGroup'.
  */
 typedef struct bActionGroup {
        struct bActionGroup *next, *prev;
index b61495edc941b26d06ca8b3384a21a1ef6cd28aa..e3a3f93b5f3c3cb3874bf77ecb8380328e86f00f 100644 (file)
@@ -139,6 +139,17 @@ static void rna_BoneGroup_color_set_set(PointerRNA *ptr, int value)
        }
 }
 
+void rna_BoneGroup_name_set(PointerRNA *ptr, const char *value)
+{
+       Object *ob= ptr->id.data;
+       bActionGroup *agrp= ptr->data;
+
+       /* copy the new name into the name slot */
+       BLI_strncpy_utf8(agrp->name, value, sizeof(agrp->name));
+
+       BLI_uniquename(&ob->pose->agroups, agrp, "Group", '.', offsetof(bActionGroup, name), sizeof(agrp->name));
+}
+
 static IDProperty *rna_PoseBone_idprops(PointerRNA *ptr, int create)
 {
        bPoseChannel *pchan= ptr->data;
@@ -657,6 +668,7 @@ static void rna_def_bone_group(BlenderRNA *brna)
        /* name */
        prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
        RNA_def_property_ui_text(prop, "Name", "");
+       RNA_def_property_string_funcs(prop, NULL, NULL, "rna_BoneGroup_name_set");
        RNA_def_struct_name_property(srna, prop);
        
        // TODO: add some runtime-collections stuff to access grouped bones