[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