[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [60896] trunk/blender/source/blender: Bugfix: Renaming bones now renames the corresponding F-Curves in actions used by

Joshua Leung aligorith at gmail.com
Tue Oct 22 13:36:48 CEST 2013


Revision: 60896
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=60896
Author:   aligorith
Date:     2013-10-22 11:36:48 +0000 (Tue, 22 Oct 2013)
Log Message:
-----------
Bugfix: Renaming bones now renames the corresponding F-Curves in actions used by
Action Constraints

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_animsys.h
    trunk/blender/source/blender/blenkernel/intern/anim_sys.c
    trunk/blender/source/blender/editors/armature/armature_naming.c

Modified: trunk/blender/source/blender/blenkernel/BKE_animsys.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_animsys.h	2013-10-22 11:12:37 UTC (rev 60895)
+++ trunk/blender/source/blender/blenkernel/BKE_animsys.h	2013-10-22 11:36:48 UTC (rev 60896)
@@ -104,6 +104,10 @@
 /* ************************************* */
 /* Path Fixing API */
 
+/* Fix all the paths for the the given ID + Action */
+void BKE_action_fix_paths_rename(struct ID *owner_id, struct bAction *act, const char *prefix, const char *oldName,
+                                 const char *newName, int oldSubscript, int newSubscript, int verify_paths);
+
 /* Fix all the paths for the given ID+AnimData */
 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,

Modified: trunk/blender/source/blender/blenkernel/intern/anim_sys.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/anim_sys.c	2013-10-22 11:12:37 UTC (rev 60895)
+++ trunk/blender/source/blender/blenkernel/intern/anim_sys.c	2013-10-22 11:36:48 UTC (rev 60896)
@@ -711,6 +711,49 @@
 	}
 }
 
+/* Fix all RNA_Paths in the given Action, relative to the given ID block 
+ *
+ * This is just an external wrapper for the F-Curve fixing function,
+ * with input validity checks on top of the basic method.
+ *
+ * NOTE: it is assumed that the structure we're replacing is <prefix><["><name><"]>
+ *       i.e. pose.bones["Bone"]
+ */
+void BKE_action_fix_paths_rename(ID *owner_id, bAction *act, const char *prefix, const char *oldName,
+                                 const char *newName, int oldSubscript, int newSubscript, int verify_paths)
+{
+	char *oldN, *newN;
+	
+	/* if no action, no need to proceed */
+	if (ELEM(NULL, owner_id, act))
+		return;
+	
+	/* Name sanitation logic - copied from BKE_animdata_fix_paths_rename() */
+	if ((oldName != NULL) && (newName != NULL)) {
+		/* pad the names with [" "] so that only exact matches are made */
+		const size_t name_old_len = strlen(oldName);
+		const size_t name_new_len = strlen(newName);
+		char *name_old_esc = BLI_array_alloca(name_old_esc, (name_old_len * 2) + 1);
+		char *name_new_esc = BLI_array_alloca(name_new_esc, (name_new_len * 2) + 1);
+
+		BLI_strescape(name_old_esc, oldName, (name_old_len * 2) + 1);
+		BLI_strescape(name_new_esc, newName, (name_new_len * 2) + 1);
+		oldN = BLI_sprintfN("[\"%s\"]", name_old_esc);
+		newN = BLI_sprintfN("[\"%s\"]", name_new_esc);
+	}
+	else {
+		oldN = BLI_sprintfN("[%d]", oldSubscript);
+		newN = BLI_sprintfN("[%d]", newSubscript);
+	}
+	
+	/* fix paths in action */
+	fcurves_path_rename_fix(owner_id, prefix, oldName, newName, oldN, newN, &act->curves, verify_paths);
+	
+	/* free the temp names */
+	MEM_freeN(oldN);
+	MEM_freeN(newN);
+}
+
 /* Fix all RNA-Paths in the AnimData block used by the given ID block
  * NOTE: it is assumed that the structure we're replacing is <prefix><["><name><"]>
  *       i.e. pose.bones["Bone"]
@@ -725,6 +768,7 @@
 	if (ELEM(NULL, owner_id, adt))
 		return;
 	
+	/* Name sanitation logic - shared with BKE_action_fix_paths_rename() */
 	if ((oldName != NULL) && (newName != NULL)) {
 		/* pad the names with [" "] so that only exact matches are made */
 		const size_t name_old_len = strlen(oldName);

Modified: trunk/blender/source/blender/editors/armature/armature_naming.c
===================================================================
--- trunk/blender/source/blender/editors/armature/armature_naming.c	2013-10-22 11:12:37 UTC (rev 60895)
+++ trunk/blender/source/blender/editors/armature/armature_naming.c	2013-10-22 11:36:48 UTC (rev 60896)
@@ -113,6 +113,7 @@
 		bConstraintTypeInfo *cti = BKE_constraint_get_typeinfo(curcon);
 		ListBase targets = {NULL, NULL};
 		
+		/* constraint targets */
 		if (cti && cti->get_constraint_targets) {
 			cti->get_constraint_targets(curcon, &targets);
 			
@@ -126,6 +127,12 @@
 			if (cti->flush_constraint_targets)
 				cti->flush_constraint_targets(curcon, &targets, 0);
 		}
+		
+		/* action constraints */
+		if (curcon->type == CONSTRAINT_TYPE_ACTION) {
+			bActionConstraint *actcon = (bActionConstraint *)curcon->data;
+			BKE_action_fix_paths_rename(&ob->id, actcon->act, "pose.bones", oldname, newname, 0, 0, 1);
+		}
 	}
 }
 




More information about the Bf-blender-cvs mailing list