Fix #31176: Collada model shows weird textures in editmode
authorJuha Mäki-Kanto <ih5235252@gmail.com>
Wed, 2 May 2012 16:18:20 +0000 (16:18 +0000)
committerJuha Mäki-Kanto <ih5235252@gmail.com>
Wed, 2 May 2012 16:18:20 +0000 (16:18 +0000)
Issue with multimaterial meshes and mface to mpoly conversion being before assignment of materials (which is done on meshobject instancing?).
Added explicit bmesh conversion to MeshImporter which is called from DocumentImporter::import.

source/blender/collada/DocumentImporter.cpp
source/blender/collada/MeshImporter.cpp
source/blender/collada/MeshImporter.h

index a1f69ef16bdd774c9bfb25cd21cccc85f6e065a9..947bedc2ff702ce55dc6fa353d44635b98bd4362 100644 (file)
@@ -144,6 +144,8 @@ bool DocumentImporter::import()
        
        delete ehandler;
 
+       mesh_importer.bmeshConversion();
+
        return true;
 }
 
index 73b2a1c23ad80a37c47cfbeec5f1e6ad620ffd0e..d6cc35deca7637a78c12bf9e123abe50b4f21663 100644 (file)
@@ -727,6 +727,16 @@ bool MeshImporter::flat_face(unsigned int *nind, COLLADAFW::MeshVertexData& nor,
 
 MeshImporter::MeshImporter(UnitConverter *unitconv, ArmatureImporter *arm, Scene *sce) : unitconverter(unitconv), scene(sce), armature_importer(arm) {}
 
+void MeshImporter::bmeshConversion()
+{
+       for (std::map<COLLADAFW::UniqueId, Mesh*>::iterator m = uid_mesh_map.begin();
+                       m != uid_mesh_map.end(); ++m)
+       {
+               if ((*m).second) BKE_mesh_convert_mfaces_to_mpolys((*m).second);
+       }
+}
+
+
 Object *MeshImporter::get_object_by_geom_uid(const COLLADAFW::UniqueId& geom_uid)
 {
        if (uid_object_map.find(geom_uid) != uid_object_map.end())
@@ -921,7 +931,7 @@ Object *MeshImporter::create_mesh_object(COLLADAFW::Node *node, COLLADAFW::Insta
                        fprintf(stderr, "invalid referenced material for %s\n", mat_array[i].getName().c_str());
                }
        }
-               
+
        return ob;
 }
 
@@ -964,6 +974,5 @@ bool MeshImporter::write_geometry(const COLLADAFW::Geometry* geom)
 
        mesh_calc_normals_mapping(me->mvert, me->totvert, me->mloop, me->mpoly, me->totloop, me->totpoly, NULL, NULL, 0, NULL, NULL);
 
-       BKE_mesh_convert_mfaces_to_mpolys(me);
        return true;
 }
index 0c2e600121fa66e71535845a1a407131b71cf6e8..97ae4d99ad7de2c2acd26ce2253b02dcc1354bee 100644 (file)
@@ -129,6 +129,8 @@ public:
 
        MeshImporter(UnitConverter *unitconv, ArmatureImporter *arm, Scene *sce);
 
+       void bmeshConversion();
+
        virtual Object *get_object_by_geom_uid(const COLLADAFW::UniqueId& geom_uid);
        
        MTex *assign_textures_to_uvlayer(COLLADAFW::TextureCoordinateBinding &ctexture,