svn merge ^/trunk/blender -r46300:46330
[blender.git] / source / blender / collada / MeshImporter.cpp
index c20975145ac431489e0f8eec57cd84b7975c0b96..5560a80f68ecbe9b4b56111705af5190fafaa889 100644 (file)
@@ -732,13 +732,7 @@ void MeshImporter::bmeshConversion()
        for (std::map<COLLADAFW::UniqueId, Mesh*>::iterator m = uid_mesh_map.begin();
                        m != uid_mesh_map.end(); ++m)
        {
-               if ((*m).second) {
-                       Mesh *me = (*m).second;
-                       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);
-               }
+               if ((*m).second) BKE_mesh_convert_mfaces_to_mpolys((*m).second);
        }
 }
 
@@ -855,10 +849,10 @@ MTFace *MeshImporter::assign_material_to_geom(COLLADAFW::MaterialBinding cmateri
                
                for (it = prims.begin(); it != prims.end(); it++) {
                        Primitive& prim = *it;
-                       MFace *mface = prim.mface;
-
-                       for (i = 0; i < prim.totface; i++, mface++) {
-                               mface->mat_nr = mat_index;
+                       i = 0;
+                       while (i++ < prim.totface) {
+                               prim.mface->mat_nr = mat_index;
+                               prim.mface++;
                                // bind texture images to faces
                                if (texture_face && (*color_texture)) {
                                        texture_face->tpage = (Image*)(*color_texture)->tex->ima;
@@ -871,6 +865,7 @@ MTFace *MeshImporter::assign_material_to_geom(COLLADAFW::MaterialBinding cmateri
        return texture_face;
 }
 
+
 Object *MeshImporter::create_mesh_object(COLLADAFW::Node *node, COLLADAFW::InstanceGeometry *geom,
                                                   bool isController,
                                                   std::map<COLLADAFW::UniqueId, Material*>& uid_material_map,
@@ -899,16 +894,16 @@ Object *MeshImporter::create_mesh_object(COLLADAFW::Node *node, COLLADAFW::Insta
        }
        if (!uid_mesh_map[*geom_uid]) return NULL;
        
-       // name Object
-       const std::string& id = node->getName().size() ? node->getName() : node->getOriginalId();
-       const char *name = (id.length())? id.c_str(): NULL;
-       
-       // add object
-       Object *ob = bc_add_object(scene, OB_MESH, name);
+       Object *ob = add_object(scene, OB_MESH);
 
        // store object pointer for ArmatureImporter
        uid_object_map[*geom_uid] = ob;
        
+       // name Object
+       const std::string& id = node->getName().size() ? node->getName() : node->getOriginalId();
+       if (id.length())
+               rename_id(&ob->id, (char*)id.c_str());
+       
        // replace ob->data freeing the old one
        Mesh *old_mesh = (Mesh*)ob->data;
 
@@ -962,8 +957,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
+       Mesh *me = BKE_mesh_add((char*)str_geom_id.c_str());
 
        // store the Mesh pointer to link it later with an Object
        this->uid_mesh_map[mesh->getUniqueId()] = me;
@@ -978,5 +972,7 @@ bool MeshImporter::write_geometry(const COLLADAFW::Geometry* geom)
 
        make_edges(me, 0);
 
+       mesh_calc_normals_mapping(me->mvert, me->totvert, me->mloop, me->mpoly, me->totloop, me->totpoly, NULL, NULL, 0, NULL, NULL);
+
        return true;
 }