[Bf-blender-cvs] [1ebdfb4] id-remap: Fix some dummy mistake, add simple RNA callback to 'remap' IDs.

Bastien Montagne noreply at git.blender.org
Tue Jul 21 22:43:05 CEST 2015


Commit: 1ebdfb4d45f959fb18fcd597a732aa68c28faae9
Author: Bastien Montagne
Date:   Tue Jul 21 09:46:06 2015 +0200
Branches: id-remap
https://developer.blender.org/rB1ebdfb4d45f959fb18fcd597a732aa68c28faae9

Fix some dummy mistake, add simple RNA callback to 'remap' IDs.

Also, added Object.data to BKE_library_foreach_ID_link(), wonder if there was a good reason
for this to not be here???

===================================================================

M	source/blender/blenkernel/intern/library.c
M	source/blender/blenkernel/intern/library_query.c
M	source/blender/makesrna/intern/rna_ID.c

===================================================================

diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index 345f5df..f76694e 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -899,7 +899,7 @@ static bool foreach_libblock_remap_callback(void *user_data, ID **id_p, int UNUS
 
 	if (*id_p == old_id) {
 		*id_p = new_id;
-		DAG_id_tag_update_ex(bmain, id, OB_RECALC_OB);
+		DAG_id_tag_update_ex(bmain, id, OB_RECALC_OB | OB_RECALC_DATA);
 	}
 
 	return true;
@@ -909,12 +909,14 @@ static bool foreach_libblock_remap_callback(void *user_data, ID **id_p, int UNUS
 void BKE_libblock_remap(Main *bmain, ID *old_id, ID *new_id)
 {
 	void *user_data[4] = {(void *)bmain, (void *)old_id, (void *)new_id, NULL};
-	ListBase lb_array[MAX_LIBARRAY];
-	int i = MAX_LIBARRAY;
+	ListBase *lb_array[MAX_LIBARRAY];
+	int i;
 
 	BLI_assert(GS(old_id->name) == GS(new_id->name));
 
-	set_listbasepointers(bmain, (ListBase **)&lb_array);
+	printf("%s: %s replaced by %s\n", __func__, old_id->name, new_id->name);
+
+	i = set_listbasepointers(bmain, lb_array);
 
 	BKE_main_lock(bmain);
 
@@ -923,7 +925,8 @@ void BKE_libblock_remap(Main *bmain, ID *old_id, ID *new_id)
 
 	while (i--) {
 		ID *id;
-		for (id = lb_array[i].first; id; id = id->next) {
+		for (id = lb_array[i]->first; id; id = id->next) {
+			printf("\tchecking id %s (%p)\n", id->name, id);
 			user_data[3] = (void *)id;
 			BKE_library_foreach_ID_link(id, foreach_libblock_remap_callback, (void *)user_data, IDWALK_NOP);
 		}
diff --git a/source/blender/blenkernel/intern/library_query.c b/source/blender/blenkernel/intern/library_query.c
index 6d2e2f1..3d5065d 100644
--- a/source/blender/blenkernel/intern/library_query.c
+++ b/source/blender/blenkernel/intern/library_query.c
@@ -229,6 +229,7 @@ void BKE_library_foreach_ID_link(ID *id, LibraryIDLinkCallback callback, void *u
 		case ID_OB:
 		{
 			Object *object = (Object *) id;
+			CALLBACK_INVOKE_ID(object->data, IDWALK_NOP);
 			CALLBACK_INVOKE(object->parent, IDWALK_NOP);
 			CALLBACK_INVOKE(object->track, IDWALK_NOP);
 			CALLBACK_INVOKE(object->proxy, IDWALK_NOP);
diff --git a/source/blender/makesrna/intern/rna_ID.c b/source/blender/makesrna/intern/rna_ID.c
index f3bd5fc..0313dc2 100644
--- a/source/blender/makesrna/intern/rna_ID.c
+++ b/source/blender/makesrna/intern/rna_ID.c
@@ -333,6 +333,11 @@ static void rna_ID_user_clear(ID *id)
 	id->flag &= ~LIB_FAKEUSER;
 }
 
+static void rna_ID_user_remap(ID *id, Main *bmain, ID *new_id)
+{
+	BKE_libblock_remap(bmain, id, new_id);
+}
+
 static AnimData * rna_ID_animation_data_create(ID *id, Main *bmain)
 {
 	AnimData *adt = BKE_animdata_add_id(id);
@@ -850,6 +855,12 @@ static void rna_def_ID(BlenderRNA *brna)
 	RNA_def_function_ui_description(func, "Clear the user count of a datablock so its not saved, "
 	                                "on reload the data will be removed");
 
+	func = RNA_def_function(srna, "user_remap", "rna_ID_user_remap");
+	RNA_def_function_ui_description(func, "Replace all usage in the .blend file of this ID by new given one");
+	RNA_def_function_flag(func, FUNC_USE_MAIN);
+	parm = RNA_def_pointer(func, "new_id", "ID", "", "New ID to use");
+	RNA_def_property_flag(parm, PROP_NEVER_NULL);
+
 	func = RNA_def_function(srna, "animation_data_create", "rna_ID_animation_data_create");
 	RNA_def_function_flag(func, FUNC_USE_MAIN);
 	RNA_def_function_ui_description(func, "Create animation data to this ID, note that not all ID types support this");




More information about the Bf-blender-cvs mailing list