Fix #31250, #31248: wrong vertex normals after transform apply, collada import,
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Wed, 2 May 2012 23:36:34 +0000 (23:36 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Wed, 2 May 2012 23:36:34 +0000 (23:36 +0000)
sculpt shape key switch. All cases that called this function needed parameter
only_face_normals set to false, so changed it now.

Also fixed wrong user count for imported mesh from collada and simplified
previous fix for tesselated faces to polygons conversion.

source/blender/blenkernel/intern/mesh.c
source/blender/collada/DocumentImporter.cpp
source/blender/collada/MeshImporter.cpp
source/blender/collada/MeshImporter.h

index c7f6bf93831c7ed9888ed18141cef6948ecf349c..fdeb212b561d07101a3f62bbbaace1a1c4631ea1 100644 (file)
@@ -1783,7 +1783,7 @@ void mesh_calc_normals_mapping(MVert *mverts, int numVerts,
 {
        mesh_calc_normals_mapping_ex(mverts, numVerts, mloop, mpolys,
                                      numLoops, numPolys, polyNors_r, mfaces, numFaces,
-                                     origIndexFace, faceNors_r, TRUE);
+                                     origIndexFace, faceNors_r, FALSE);
 }
 
 void mesh_calc_normals_mapping_ex(MVert *mverts, int numVerts,
index 947bedc2ff702ce55dc6fa353d44635b98bd4362..a1f69ef16bdd774c9bfb25cd21cccc85f6e065a9 100644 (file)
@@ -144,8 +144,6 @@ bool DocumentImporter::import()
        
        delete ehandler;
 
-       mesh_importer.bmeshConversion();
-
        return true;
 }
 
index d6cc35deca7637a78c12bf9e123abe50b4f21663..3fbd33bdd0b2123bbe17e5b8b4aa65424c68d6d6 100644 (file)
@@ -727,16 +727,6 @@ 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())
@@ -958,6 +948,7 @@ bool MeshImporter::write_geometry(const COLLADAFW::Geometry* geom)
        
        const std::string& str_geom_id = mesh->getName().size() ? mesh->getName() : mesh->getOriginalId();
        Mesh *me = add_mesh((char*)str_geom_id.c_str());
+       me->id.us--; // is already 1 here, but will be set later in set_mesh
 
        // store the Mesh pointer to link it later with an Object
        this->uid_mesh_map[mesh->getUniqueId()] = me;
@@ -972,6 +963,9 @@ bool MeshImporter::write_geometry(const COLLADAFW::Geometry* geom)
 
        make_edges(me, 0);
 
+       BKE_mesh_convert_mfaces_to_mpolys(me);
+       BKE_mesh_tessface_clear(me);
+
        mesh_calc_normals_mapping(me->mvert, me->totvert, me->mloop, me->mpoly, me->totloop, me->totpoly, NULL, NULL, 0, NULL, NULL);
 
        return true;
index 97ae4d99ad7de2c2acd26ce2253b02dcc1354bee..0c2e600121fa66e71535845a1a407131b71cf6e8 100644 (file)
@@ -129,8 +129,6 @@ 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,