[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54508] trunk/blender/source/blender/ collada: Fixed importing of shapekey names: name is now taken from geometry name instead of deriving it from the mesh name

Gaia Clary gaia.clary at machinimatrix.org
Tue Feb 12 18:52:19 CET 2013


Revision: 54508
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54508
Author:   gaiaclary
Date:     2013-02-12 17:52:18 +0000 (Tue, 12 Feb 2013)
Log Message:
-----------
Fixed importing of shapekey names: name is now taken from geometry name instead of deriving it from the mesh name

Modified Paths:
--------------
    trunk/blender/source/blender/collada/ArmatureImporter.cpp
    trunk/blender/source/blender/collada/GeometryExporter.cpp
    trunk/blender/source/blender/collada/MeshImporter.cpp
    trunk/blender/source/blender/collada/MeshImporter.h

Modified: trunk/blender/source/blender/collada/ArmatureImporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/ArmatureImporter.cpp	2013-02-12 17:39:44 UTC (rev 54507)
+++ trunk/blender/source/blender/collada/ArmatureImporter.cpp	2013-02-12 17:52:18 UTC (rev 54508)
@@ -673,11 +673,14 @@
 		for (int i = 0 ; i < morphTargetIds.getCount() ; i++ ) {
 			//better to have a seperate map of morph objects, 
 			//This'll do for now since only mesh morphing is imported
+
 			Mesh *me = this->mesh_importer->get_mesh_by_geom_uid(morphTargetIds[i]);
 			
 			if (me) {
 				me->key = key;
-				kb = BKE_keyblock_add_ctime(key, me->id.name, FALSE);
+				std::string morph_name = *this->mesh_importer->get_geometry_name(me->id.name);
+
+				kb = BKE_keyblock_add_ctime(key, morph_name.c_str(), FALSE);
 				BKE_key_convert_from_mesh(me, kb);
 				
 				//apply weights

Modified: trunk/blender/source/blender/collada/GeometryExporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/GeometryExporter.cpp	2013-02-12 17:39:44 UTC (rev 54507)
+++ trunk/blender/source/blender/collada/GeometryExporter.cpp	2013-02-12 17:52:18 UTC (rev 54508)
@@ -187,7 +187,7 @@
 		return;
 	}
 
-	std::string geom_name =  id_name(ob) + "_morph_" + kb->name;
+	std::string geom_name = kb->name;
 
 	exportedGeometry.insert(geom_id);
 

Modified: trunk/blender/source/blender/collada/MeshImporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/MeshImporter.cpp	2013-02-12 17:39:44 UTC (rev 54507)
+++ trunk/blender/source/blender/collada/MeshImporter.cpp	2013-02-12 17:52:18 UTC (rev 54508)
@@ -952,6 +952,13 @@
 	return NULL;
 }
 
+std::string *MeshImporter::get_geometry_name(const std::string &mesh_name)
+{
+	if (this->mesh_geom_map.find(mesh_name) != this->mesh_geom_map.end())
+		return &this->mesh_geom_map[mesh_name];
+	return NULL;
+}
+
 MTex *MeshImporter::assign_textures_to_uvlayer(COLLADAFW::TextureCoordinateBinding &ctexture,
                                                Mesh *me, TexIndexTextureArrayMap& texindex_texarray_map,
                                                MTex *color_texture)
@@ -1300,7 +1307,9 @@
 
 	// store the Mesh pointer to link it later with an Object
 	this->uid_mesh_map[mesh->getUniqueId()] = me;
-	
+	// needed to map mesh to its geometry name (needed for shape key naming)
+	this->mesh_geom_map[std::string(me->id.name)] = str_geom_id;
+
 	int new_tris = 0;
 	
 	read_vertices(mesh, me);

Modified: trunk/blender/source/blender/collada/MeshImporter.h
===================================================================
--- trunk/blender/source/blender/collada/MeshImporter.h	2013-02-12 17:39:44 UTC (rev 54507)
+++ trunk/blender/source/blender/collada/MeshImporter.h	2013-02-12 17:52:18 UTC (rev 54508)
@@ -60,6 +60,7 @@
 public:
 	virtual Object *get_object_by_geom_uid(const COLLADAFW::UniqueId& geom_uid) = 0;
 	virtual Mesh *get_mesh_by_geom_uid(const COLLADAFW::UniqueId& mesh_uid) = 0;
+	virtual std::string *get_geometry_name(const std::string &mesh_name) = 0;
 };
 
 class UVDataWrapper
@@ -84,6 +85,7 @@
 	Scene *scene;
 	ArmatureImporter *armature_importer;
 
+	std::map<std::string, std::string> mesh_geom_map; // needed for correct shape key naming
 	std::map<COLLADAFW::UniqueId, Mesh*> uid_mesh_map; // geometry unique id-to-mesh map
 	std::map<COLLADAFW::UniqueId, Object*> uid_object_map; // geom uid-to-object
 	std::vector<Object*> imported_objects; // list of imported objects
@@ -175,7 +177,7 @@
 
 	// create a mesh storing a pointer in a map so it can be retrieved later by geometry UID
 	bool write_geometry(const COLLADAFW::Geometry* geom);
-
+	std::string *MeshImporter::get_geometry_name(const std::string &mesh_name);
 };
 
 #endif




More information about the Bf-blender-cvs mailing list