From 5f80a7ffe25fdda77904d06c8e7b6ff37731d25b Mon Sep 17 00:00:00 2001 From: Mitchell Stokes Date: Thu, 1 May 2014 14:49:42 -0700 Subject: [PATCH] Fix T39932: LibNew can't find LibLoaded meshes. LibNew now searchs dynamic (i.e., LibLoaded) mains instead of just the current main. --- .../Converter/KX_BlenderSceneConverter.cpp | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp index bad99b5518b..5930d5e90d2 100644 --- a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp +++ b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp @@ -1458,6 +1458,20 @@ RAS_MeshObject *KX_BlenderSceneConverter::ConvertMeshSpecial(KX_Scene* kx_scene, { /* Find a mesh in the current main */ ID *me= static_cast(BLI_findstring(&m_maggie->mesh, name, offsetof(ID, name) + 2)); + Main *from_maggie = m_maggie; + + if (me == NULL) { + // The mesh wasn't in the current main, try any dynamic (i.e., LibLoaded) ones + vector::iterator it; + + for (it = GetMainDynamic().begin(); it != GetMainDynamic().end(); it++) { + me = static_cast(BLI_findstring(&(*it)->mesh, name, offsetof(ID, name) + 2)); + from_maggie = *it; + + if (me) + break; + } + } if (me==NULL) { printf("Could not be found \"%s\"\n", name); @@ -1467,10 +1481,10 @@ RAS_MeshObject *KX_BlenderSceneConverter::ConvertMeshSpecial(KX_Scene* kx_scene, /* Watch this!, if its used in the original scene can cause big troubles */ if (me->us > 0) { printf("Mesh has a user \"%s\"\n", name); - me = (ID*)BKE_mesh_copy((Mesh*)me); + me = (ID*)BKE_mesh_copy_ex(from_maggie, (Mesh*)me); me->us--; } - BLI_remlink(&m_maggie->mesh, me); /* even if we made the copy it needs to be removed */ + BLI_remlink(&from_maggie->mesh, me); /* even if we made the copy it needs to be removed */ BLI_addtail(&maggie->mesh, me); @@ -1496,7 +1510,7 @@ RAS_MeshObject *KX_BlenderSceneConverter::ConvertMeshSpecial(KX_Scene* kx_scene, mat_new->id.flag |= LIB_DOIT; mat_old->id.us--; - BLI_remlink(&m_maggie->mat, mat_new); + BLI_remlink(&G.main->mat, mat_new); // BKE_material_copy uses G.main, and there is no BKE_material_copy_ex BLI_addtail(&maggie->mat, mat_new); mesh->mat[i] = mat_new;