[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45291] trunk/blender/source/blender: Fix [#30709] Renaming a bone renames all drivers' targets using a bone of that name, regardless of the armature.

Bastien Montagne montagne29 at wanadoo.fr
Fri Mar 30 15:04:43 CEST 2012


Revision: 45291
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45291
Author:   mont29
Date:     2012-03-30 13:04:29 +0000 (Fri, 30 Mar 2012)
Log Message:
-----------
Fix [#30709] Renaming a bone renames all drivers' targets using a bone of that name, regardless of the armature.

This fix adds a "ref_id" ID pointer to BKE_all_animdata_fix_paths_rename() & co, which is the ID against which prefix+oldName/NewName is "applied", currently only used for drivers' bones targets. Just pass NULL to get same behavior as previously. A bit annoying to make such a change for such a specific case, but there seems to be no other way to go... :/

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_animsys.h
    trunk/blender/source/blender/blenkernel/intern/anim_sys.c
    trunk/blender/source/blender/blenkernel/intern/sequencer.c
    trunk/blender/source/blender/editors/armature/editarmature.c
    trunk/blender/source/blender/editors/render/render_shading.c
    trunk/blender/source/blender/makesrna/intern/rna_constraint.c
    trunk/blender/source/blender/makesrna/intern/rna_key.c
    trunk/blender/source/blender/makesrna/intern/rna_modifier.c
    trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
    trunk/blender/source/blender/makesrna/intern/rna_sequencer.c

Modified: trunk/blender/source/blender/blenkernel/BKE_animsys.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_animsys.h	2012-03-30 11:40:38 UTC (rev 45290)
+++ trunk/blender/source/blender/blenkernel/BKE_animsys.h	2012-03-30 13:04:29 UTC (rev 45291)
@@ -105,10 +105,12 @@
 /* Path Fixing API */
 
 /* Fix all the paths for the given ID+AnimData */
-void BKE_animdata_fix_paths_rename(struct ID *owner_id, struct AnimData *adt, const char *prefix, const char *oldName, const char *newName, int oldSubscript, int newSubscript, int verify_paths);
+void BKE_animdata_fix_paths_rename(struct ID *owner_id, struct AnimData *adt, struct ID *ref_id, const char *prefix,
+                                   const char *oldName, const char *newName, int oldSubscript, int newSubscript,
+                                   int verify_paths);
 
 /* Fix all the paths for the entire database... */
-void BKE_all_animdata_fix_paths_rename(const char *prefix, const char *oldName, const char *newName);
+void BKE_all_animdata_fix_paths_rename(ID *ref_id, const char *prefix, const char *oldName, const char *newName);
 
 /* -------------------------------------- */
 

Modified: trunk/blender/source/blender/blenkernel/intern/anim_sys.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/anim_sys.c	2012-03-30 11:40:38 UTC (rev 45290)
+++ trunk/blender/source/blender/blenkernel/intern/anim_sys.c	2012-03-30 13:04:29 UTC (rev 45291)
@@ -45,6 +45,7 @@
 #include "DNA_anim_types.h"
 #include "DNA_lamp_types.h"
 #include "DNA_material_types.h"
+#include "DNA_object_types.h"
 #include "DNA_scene_types.h"
 #include "DNA_texture_types.h"
 #include "DNA_world_types.h"
@@ -632,7 +633,8 @@
 }
 
 /* Check RNA-Paths for a list of Drivers */
-static void drivers_path_rename_fix (ID *owner_id, const char *prefix, const char *oldName, const char *newName, const char *oldKey, const char *newKey, ListBase *curves, int verify_paths)
+static void drivers_path_rename_fix(ID *owner_id, ID *ref_id, const char *prefix, const char *oldName, const char *newName,
+                                    const char *oldKey, const char *newKey, ListBase *curves, int verify_paths)
 {
 	FCurve *fcu;
 	
@@ -658,7 +660,7 @@
 					
 					/* also fix the bone-name (if applicable) */
 					if (strstr(prefix, "bones")) {
-						if ( ((dtar->id) && (GS(dtar->id->name) == ID_OB)) &&
+						if ( ((dtar->id) && (GS(dtar->id->name) == ID_OB) && (!ref_id || ((Object*)(dtar->id))->data == ref_id)) &&
 							 (dtar->pchan_name[0]) && (strcmp(oldName, dtar->pchan_name)==0) )
 						{
 							BLI_strncpy(dtar->pchan_name, newName, sizeof(dtar->pchan_name));
@@ -692,7 +694,8 @@
  * NOTE: it is assumed that the structure we're replacing is <prefix><["><name><"]>
  * 		i.e. pose.bones["Bone"]
  */
-void BKE_animdata_fix_paths_rename (ID *owner_id, AnimData *adt, const char *prefix, const char *oldName, const char *newName, int oldSubscript, int newSubscript, int verify_paths)
+void BKE_animdata_fix_paths_rename(ID *owner_id, AnimData *adt, ID *ref_id, const char *prefix, const char *oldName,
+                                   const char *newName, int oldSubscript, int newSubscript, int verify_paths)
 {
 	NlaTrack *nlt;
 	char *oldN, *newN;
@@ -718,7 +721,7 @@
 		fcurves_path_rename_fix(owner_id, prefix, oldN, newN, &adt->tmpact->curves, verify_paths);
 		
 	/* Drivers - Drivers are really F-Curves */
-	drivers_path_rename_fix(owner_id, prefix, oldName, newName, oldN, newN, &adt->drivers, verify_paths);
+	drivers_path_rename_fix(owner_id, ref_id, prefix, oldName, newName, oldN, newN, &adt->drivers, verify_paths);
 	
 	/* NLA Data - Animation Data for Strips */
 	for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next)
@@ -812,7 +815,7 @@
  * 		i.e. pose.bones["Bone"]
  */
 /* TODO: use BKE_animdata_main_cb for looping over all data  */
-void BKE_all_animdata_fix_paths_rename (const char *prefix, const char *oldName, const char *newName)
+void BKE_all_animdata_fix_paths_rename(ID *ref_id, const char *prefix, const char *oldName, const char *newName)
 {
 	Main *mainptr= G.main;
 	ID *id;
@@ -824,7 +827,7 @@
 #define RENAMEFIX_ANIM_IDS(first) \
 	for (id= first; id; id= id->next) { \
 		AnimData *adt= BKE_animdata_from_id(id); \
-		BKE_animdata_fix_paths_rename(id, adt, prefix, oldName, newName, 0, 0, 1);\
+		BKE_animdata_fix_paths_rename(id, adt, ref_id, prefix, oldName, newName, 0, 0, 1);\
 	}
 	
 	/* another version of this macro for nodetrees */
@@ -834,9 +837,9 @@
 		NtId_Type *ntp= (NtId_Type *)id; \
 		if (ntp->nodetree) { \
 			AnimData *adt2= BKE_animdata_from_id((ID *)ntp); \
-			BKE_animdata_fix_paths_rename((ID *)ntp, adt2, prefix, oldName, newName, 0, 0, 1);\
+			BKE_animdata_fix_paths_rename((ID *)ntp, adt2, ref_id, prefix, oldName, newName, 0, 0, 1);\
 		} \
-		BKE_animdata_fix_paths_rename(id, adt, prefix, oldName, newName, 0, 0, 1);\
+		BKE_animdata_fix_paths_rename(id, adt, ref_id, prefix, oldName, newName, 0, 0, 1);\
 	}
 	
 	/* nodes */

Modified: trunk/blender/source/blender/blenkernel/intern/sequencer.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sequencer.c	2012-03-30 11:40:38 UTC (rev 45290)
+++ trunk/blender/source/blender/blenkernel/intern/sequencer.c	2012-03-30 13:04:29 UTC (rev 45291)
@@ -3589,7 +3589,7 @@
 	}
 
 	/* notice validate is 0, keep this because the seq may not be added to the scene yet */
-	BKE_animdata_fix_paths_rename(&scene->id, scene->adt, "sequence_editor.sequences_all", name_src, name_dst, 0, 0, 0);
+	BKE_animdata_fix_paths_rename(&scene->id, scene->adt, NULL, "sequence_editor.sequences_all", name_src, name_dst, 0, 0, 0);
 
 	/* add the original fcurves back */
 	BLI_movelisttolist(&scene->adt->action->curves, &lb);

Modified: trunk/blender/source/blender/editors/armature/editarmature.c
===================================================================
--- trunk/blender/source/blender/editors/armature/editarmature.c	2012-03-30 11:40:38 UTC (rev 45290)
+++ trunk/blender/source/blender/editors/armature/editarmature.c	2012-03-30 13:04:29 UTC (rev 45291)
@@ -5393,7 +5393,10 @@
 		/* Fix all animdata that may refer to this bone - we can't just do the ones attached to objects, since
 		 * other ID-blocks may have drivers referring to this bone [#29822]
 		 */
-		BKE_all_animdata_fix_paths_rename("pose.bones", oldname, newname);
+		{
+			
+			BKE_all_animdata_fix_paths_rename(&arm->id, "pose.bones", oldname, newname);
+		}
 		
 		/* correct view locking */
 		{

Modified: trunk/blender/source/blender/editors/render/render_shading.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_shading.c	2012-03-30 11:40:38 UTC (rev 45290)
+++ trunk/blender/source/blender/editors/render/render_shading.c	2012-03-30 13:04:29 UTC (rev 45291)
@@ -588,9 +588,9 @@
 				mtex_ar[act] = mtex_ar[act - 1];
 				mtex_ar[act - 1] = mtexswap;
 				
-				BKE_animdata_fix_paths_rename(id, adt, "texture_slots", NULL, NULL, act - 1, -1, 0);
-				BKE_animdata_fix_paths_rename(id, adt, "texture_slots", NULL, NULL, act, act - 1, 0);
-				BKE_animdata_fix_paths_rename(id, adt, "texture_slots", NULL, NULL, -1, act, 0);
+				BKE_animdata_fix_paths_rename(id, adt, NULL, "texture_slots", NULL, NULL, act - 1, -1, 0);
+				BKE_animdata_fix_paths_rename(id, adt, NULL, "texture_slots", NULL, NULL, act, act - 1, 0);
+				BKE_animdata_fix_paths_rename(id, adt, NULL, "texture_slots", NULL, NULL, -1, act, 0);
 
 				if (GS(id->name) == ID_MA) {
 					Material *ma = (Material *)id;
@@ -610,9 +610,9 @@
 				mtex_ar[act] = mtex_ar[act + 1];
 				mtex_ar[act + 1] = mtexswap;
 				
-				BKE_animdata_fix_paths_rename(id, adt, "texture_slots", NULL, NULL, act + 1, -1, 0);
-				BKE_animdata_fix_paths_rename(id, adt, "texture_slots", NULL, NULL, act, act + 1, 0);
-				BKE_animdata_fix_paths_rename(id, adt, "texture_slots", NULL, NULL, -1, act, 0);
+				BKE_animdata_fix_paths_rename(id, adt, NULL, "texture_slots", NULL, NULL, act + 1, -1, 0);
+				BKE_animdata_fix_paths_rename(id, adt, NULL, "texture_slots", NULL, NULL, act, act + 1, 0);
+				BKE_animdata_fix_paths_rename(id, adt, NULL, "texture_slots", NULL, NULL, -1, act, 0);
 
 				if (GS(id->name) == ID_MA) {
 					Material *ma = (Material *)id;

Modified: trunk/blender/source/blender/makesrna/intern/rna_constraint.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_constraint.c	2012-03-30 11:40:38 UTC (rev 45290)
+++ trunk/blender/source/blender/makesrna/intern/rna_constraint.c	2012-03-30 13:04:29 UTC (rev 45291)
@@ -211,7 +211,7 @@
 	}
 	
 	/* fix all the animation data which may link to this */
-	BKE_all_animdata_fix_paths_rename("constraints", oldname, con->name);
+	BKE_all_animdata_fix_paths_rename(NULL, "constraints", oldname, con->name);
 }
 
 static char *rna_Constraint_path(PointerRNA *ptr)

Modified: trunk/blender/source/blender/makesrna/intern/rna_key.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_key.c	2012-03-30 11:40:38 UTC (rev 45290)
+++ trunk/blender/source/blender/makesrna/intern/rna_key.c	2012-03-30 13:04:29 UTC (rev 45291)
@@ -83,7 +83,7 @@
 	}
 	
 	/* fix all the animation data which may link to this */
-	BKE_all_animdata_fix_paths_rename("key_blocks", oldname, kb->name);
+	BKE_all_animdata_fix_paths_rename(NULL, "key_blocks", oldname, kb->name);
 }
 
 static void rna_ShapeKey_value_set(PointerRNA *ptr, float value)

Modified: trunk/blender/source/blender/makesrna/intern/rna_modifier.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_modifier.c	2012-03-30 11:40:38 UTC (rev 45290)
+++ trunk/blender/source/blender/makesrna/intern/rna_modifier.c	2012-03-30 13:04:29 UTC (rev 45291)
@@ -227,7 +227,7 @@
 	}
 	
 	/* fix all the animation data which may link to this */
-	BKE_all_animdata_fix_paths_rename("modifiers", oldname, md->name);
+	BKE_all_animdata_fix_paths_rename(NULL, "modifiers", oldname, md->name);
 }
 
 static char *rna_Modifier_path(PointerRNA *ptr)

Modified: trunk/blender/source/blender/makesrna/intern/rna_nodetree.c

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list