Fix T51856: `BKE_mesh_new_from_object()` would often generate default 'Mesh' named...
authorBastien Montagne <montagne29@wanadoo.fr>
Wed, 21 Jun 2017 08:30:38 +0000 (10:30 +0200)
committerBastien Montagne <montagne29@wanadoo.fr>
Wed, 21 Jun 2017 08:30:38 +0000 (10:30 +0200)
This is annoying especially for exporters who do use mesh name, since it
broke any relation with actual Mesh naming in original Blend file.

Unfortunately, we cannot avoid the extra .xxx digits. ;)

source/blender/blenkernel/BKE_mesh.h
source/blender/blenkernel/intern/mesh.c

index 2411850c0d2bd79af071a79746e507a0dc8fbf5e..b55b8b2dd3c87964aa24c69d9a7ee96536ff753a 100644 (file)
@@ -110,7 +110,8 @@ int BKE_mesh_nurbs_displist_to_mdata(
         struct MEdge **r_alledge, int *r_totedge,
         struct MLoop **r_allloop, struct MPoly **r_allpoly,
         struct MLoopUV **r_alluv, int *r_totloop, int *r_totpoly);
-void BKE_mesh_from_nurbs_displist(struct Object *ob, struct ListBase *dispbase, const bool use_orco_uv);
+void BKE_mesh_from_nurbs_displist(
+        struct Object *ob, struct ListBase *dispbase, const bool use_orco_uv, const char *obdata_name);
 void BKE_mesh_from_nurbs(struct Object *ob);
 void BKE_mesh_to_curve_nurblist(struct DerivedMesh *dm, struct ListBase *nurblist, const int edge_users_test);
 void BKE_mesh_to_curve(struct Scene *scene, struct Object *ob);
index 171ae4485a0b41526a968bbd6b2f5774ab864b4d..6233caa43fa5eff770bf1df9698a700cd64ea378 100644 (file)
@@ -1339,7 +1339,7 @@ int BKE_mesh_nurbs_displist_to_mdata(
 
 
 /* this may fail replacing ob->data, be sure to check ob->type */
-void BKE_mesh_from_nurbs_displist(Object *ob, ListBase *dispbase, const bool use_orco_uv)
+void BKE_mesh_from_nurbs_displist(Object *ob, ListBase *dispbase, const bool use_orco_uv, const char *obdata_name)
 {
        Main *bmain = G.main;
        Object *ob1;
@@ -1366,7 +1366,7 @@ void BKE_mesh_from_nurbs_displist(Object *ob, ListBase *dispbase, const bool use
                }
 
                /* make mesh */
-               me = BKE_mesh_add(bmain, "Mesh");
+               me = BKE_mesh_add(bmain, obdata_name);
                me->totvert = totvert;
                me->totedge = totedge;
                me->totloop = totloop;
@@ -1386,7 +1386,7 @@ void BKE_mesh_from_nurbs_displist(Object *ob, ListBase *dispbase, const bool use
                BKE_mesh_calc_normals(me);
        }
        else {
-               me = BKE_mesh_add(bmain, "Mesh");
+               me = BKE_mesh_add(bmain, obdata_name);
                DM_to_mesh(dm, me, ob, CD_MASK_MESH, false);
        }
 
@@ -1428,7 +1428,7 @@ void BKE_mesh_from_nurbs(Object *ob)
                disp = ob->curve_cache->disp;
        }
 
-       BKE_mesh_from_nurbs_displist(ob, &disp, use_orco_uv);
+       BKE_mesh_from_nurbs_displist(ob, &disp, use_orco_uv, cu->id.name);
 }
 
 typedef struct EdgeLink {
@@ -2487,7 +2487,7 @@ Mesh *BKE_mesh_new_from_object(
 
                        /* convert object type to mesh */
                        uv_from_orco = (tmpcu->flag & CU_UV_ORCO) != 0;
-                       BKE_mesh_from_nurbs_displist(tmpobj, &dispbase, uv_from_orco);
+                       BKE_mesh_from_nurbs_displist(tmpobj, &dispbase, uv_from_orco, tmpcu->id.name + 2);
 
                        tmpmesh = tmpobj->data;
 
@@ -2523,7 +2523,7 @@ Mesh *BKE_mesh_new_from_object(
                        if (ob != basis_ob)
                                return NULL;  /* only do basis metaball */
 
-                       tmpmesh = BKE_mesh_add(bmain, "Mesh");
+                       tmpmesh = BKE_mesh_add(bmain, ((ID *)ob->data)->name + 2);
                        /* BKE_mesh_add gives us a user count we don't need */
                        id_us_min(&tmpmesh->id);
 
@@ -2578,7 +2578,7 @@ Mesh *BKE_mesh_new_from_object(
                                else
                                        dm = mesh_create_derived_view(sce, ob, mask);
 
-                               tmpmesh = BKE_mesh_add(bmain, "Mesh");
+                               tmpmesh = BKE_mesh_add(bmain, ((ID *)ob->data)->name + 2);
                                DM_to_mesh(dm, tmpmesh, ob, mask, true);
 
                                /* Copy autosmooth settings from original mesh. */