bmesh todo, unlikly but possible - entering editmode with faces and no polys.
authorCampbell Barton <ideasman42@gmail.com>
Tue, 27 Mar 2012 01:28:25 +0000 (01:28 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Tue, 27 Mar 2012 01:28:25 +0000 (01:28 +0000)
rather then printing a warning and failing - convert them to polys.

source/blender/blenkernel/BKE_mesh.h
source/blender/blenkernel/intern/mesh.c
source/blender/blenloader/intern/readfile.c
source/blender/collada/MeshImporter.cpp
source/blender/editors/mesh/editmesh_utils.c
source/blender/editors/mesh/mesh_data.c

index 4bccbf9e61e5d7097457e35bef49ac5e13b21381..2d0719a78fae5694c6ff3c355ad1fef8008b2cd0 100644 (file)
@@ -145,7 +145,7 @@ void free_dverts(struct MDeformVert *dvert, int totvert);
 void copy_dverts(struct MDeformVert *dst, struct MDeformVert *src, int totvert); /* __NLA */
 void mesh_delete_material_index(struct Mesh *me, short index);
 void mesh_set_smooth_flag(struct Object *meshOb, int enableSmooth);
-void convert_mfaces_to_mpolys(struct Mesh *mesh);
+void BKE_mesh_convert_mfaces_to_mpolys(struct Mesh *mesh);
 void mesh_calc_normals_tessface(struct MVert *mverts, int numVerts,struct  MFace *mfaces, int numFaces, float (*faceNors_r)[3]);
 
 /* used for unit testing; compares two meshes, checking only
index ed3cf697a9e6a3c7b432ffc6f3e9896d5d3b45a1..3c4a469a1a6c55f8546cd006962692514e5aeef1 100644 (file)
@@ -2003,7 +2003,7 @@ static void bm_corners_to_loops(Mesh *me, int findex, int loopstart, int numTex,
        }
 }
 
-void convert_mfaces_to_mpolys(Mesh *mesh)
+void BKE_mesh_convert_mfaces_to_mpolys(Mesh *mesh)
 {
        MFace *mf;
        MLoop *ml;
index eb7711de9b1cf2380d1092d254680ac3d0bae849..6b70745d9b244dc3097ee8a226604008fd056405 100644 (file)
@@ -3708,7 +3708,7 @@ static void lib_link_mesh(FileData *fd, Main *main)
 
                        /*check if we need to convert mfaces to mpolys*/
                        if (me->totface && !me->totpoly) {
-                               convert_mfaces_to_mpolys(me);
+                               BKE_mesh_convert_mfaces_to_mpolys(me);
                        }
                        
                        /*
index e50005634ba1cb01db70b833ab96681b3b050fc7..dc0892f6bedd983dcb2293fc6a060a45d42e0900 100644 (file)
@@ -965,6 +965,6 @@ 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);
 
-       convert_mfaces_to_mpolys(me);
+       BKE_mesh_convert_mfaces_to_mpolys(me);
        return true;
 }
index 1c889a6169e21b8dfa12329bebc68c4cc58ee75a..5d2bb359d3ce302978355de8efc3371d7789154f 100644 (file)
@@ -265,16 +265,12 @@ void EDBM_MakeEditBMesh(ToolSettings *ts, Scene *UNUSED(scene), Object *ob)
        Mesh *me = ob->data;
        BMesh *bm;
 
-       if (!me->mpoly && me->totface) {
-               fprintf(stderr, "%s: bmesh conversion issue! may lose lots of geometry! (bmesh internal error)\n", __func__);
-               
-               /* BMESH_TODO need to write smarter code here */
-               bm = BKE_mesh_to_bmesh(me, ob);
-       }
-       else {
-               bm = BKE_mesh_to_bmesh(me, ob);
+       if (UNLIKELY(!me->mpoly && me->totface)) {
+               BKE_mesh_convert_mfaces_to_mpolys(me);
        }
 
+       bm = BKE_mesh_to_bmesh(me, ob);
+
        if (me->edit_btmesh) {
                /* this happens when switching shape keys */
                BMEdit_Free(me->edit_btmesh);
index 0f2ad28b4001b3aa337b63ff9f7e9fab84f06c28..fe3fe6986265b8668e4c58b69ff8fe6e83704202 100644 (file)
@@ -811,7 +811,7 @@ void ED_mesh_update(Mesh *mesh, bContext *C, int calc_edges, int calc_tessface)
        int tessface_input = FALSE;
 
        if (mesh->totface > 0 && mesh->totpoly == 0) {
-               convert_mfaces_to_mpolys(mesh);
+               BKE_mesh_convert_mfaces_to_mpolys(mesh);
 
                /* would only be converting back again, don't bother */
                tessface_input = TRUE;