[Bf-blender-cvs] [5f80a7f] master: Fix T39932: LibNew can't find LibLoaded meshes.

Mitchell Stokes noreply at git.blender.org
Thu May 1 23:55:36 CEST 2014


Commit: 5f80a7ffe25fdda77904d06c8e7b6ff37731d25b
Author: Mitchell Stokes
Date:   Thu May 1 14:49:42 2014 -0700
https://developer.blender.org/rB5f80a7ffe25fdda77904d06c8e7b6ff37731d25b

Fix T39932: LibNew can't find LibLoaded meshes.

LibNew now searchs dynamic (i.e., LibLoaded)  mains instead of just the current main.

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

M	source/gameengine/Converter/KX_BlenderSceneConverter.cpp

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

diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
index bad99b5..5930d5e 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<ID *>(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<Main*>::iterator it;
+
+		for (it = GetMainDynamic().begin(); it != GetMainDynamic().end(); it++) {
+			me = static_cast<ID *>(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;




More information about the Bf-blender-cvs mailing list