split up BKE_mesh_to_curve() into 2 functions, adding BKE_mesh_to_curve_ex() which...
authorCampbell Barton <ideasman42@gmail.com>
Thu, 14 Mar 2013 18:44:32 +0000 (18:44 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Thu, 14 Mar 2013 18:44:32 +0000 (18:44 +0000)
source/blender/blenkernel/BKE_mesh.h
source/blender/blenkernel/intern/mesh.c

index c90ea90f09d16342c1b498bfb656a0f9b765fb3b..9b43d0f14714f52c0a2eae0eef2e693818ca1cf9 100644 (file)
@@ -169,6 +169,7 @@ int BKE_mesh_nurbs_displist_to_mdata(struct Object *ob, struct ListBase *dispbas
                                      struct MLoopUV **alluv, int *_totloop, int *_totpoly);
 void BKE_mesh_from_nurbs_displist(struct Object *ob, struct ListBase *dispbase, int use_orco_uv);
 void BKE_mesh_from_nurbs(struct Object *ob);
+void BKE_mesh_to_curve_ex(struct DerivedMesh *dm, struct ListBase *nurblist);
 void BKE_mesh_to_curve(struct Scene *scene, struct Object *ob);
 void BKE_mesh_delete_material_index(struct Mesh *me, short index);
 void BKE_mesh_smooth_flag_set(struct Object *meshOb, int enableSmooth);
index 604a273efc5c95de15cdb78cbcf7af17c4d2f2a9..1b2af2fb501b90f07cb04cf437cfe1043f492547 100644 (file)
@@ -1586,11 +1586,8 @@ static void appendPolyLineVert(ListBase *lb, unsigned int index)
        BLI_addtail(lb, vl);
 }
 
-void BKE_mesh_to_curve(Scene *scene, Object *ob)
+void BKE_mesh_to_curve_ex(DerivedMesh *dm, ListBase *nurblist)
 {
-       /* make new mesh data from the original copy */
-       DerivedMesh *dm = mesh_get_derived_final(scene, ob, CD_MASK_MESH);
-
        MVert *mverts = dm->getVertArray(dm);
        MEdge *med, *medge = dm->getEdgeArray(dm);
        MPoly *mp,  *mpoly = dm->getPolyArray(dm);
@@ -1600,7 +1597,6 @@ void BKE_mesh_to_curve(Scene *scene, Object *ob)
        int totpoly = dm->getNumPolys(dm);
        int totedges = 0;
        int i;
-       bool needsFree = false;
 
        /* only to detect edge polylines */
        int *edge_users;
@@ -1632,9 +1628,6 @@ void BKE_mesh_to_curve(Scene *scene, Object *ob)
        MEM_freeN(edge_users);
 
        if (edges.first) {
-               Curve *cu = BKE_curve_add(G.main, ob->id.name + 2, OB_CURVE);
-               cu->flag |= CU_3D;
-
                while (edges.first) {
                        /* each iteration find a polyline and add this as a nurbs poly spline */
 
@@ -1721,10 +1714,27 @@ void BKE_mesh_to_curve(Scene *scene, Object *ob)
                                BLI_freelistN(&polyline);
 
                                /* add nurb to curve */
-                               BLI_addtail(&cu->nurb, nu);
+                               BLI_addtail(nurblist, nu);
                        }
                        /* --- done with nurbs --- */
                }
+       }
+}
+
+void BKE_mesh_to_curve(Scene *scene, Object *ob)
+{
+       /* make new mesh data from the original copy */
+       DerivedMesh *dm = mesh_get_derived_final(scene, ob, CD_MASK_MESH);
+       ListBase nurblist = {NULL, NULL};
+       bool needsFree = false;
+
+       BKE_mesh_to_curve_ex(dm, &nurblist);
+
+       if (nurblist.first) {
+               Curve *cu = BKE_curve_add(G.main, ob->id.name + 2, OB_CURVE);
+               cu->flag |= CU_3D;
+
+               cu->nurb = nurblist;
 
                ((Mesh *)ob->data)->id.us--;
                ob->data = cu;