[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [55287] trunk/blender/source/blender/ blenkernel: split up BKE_mesh_to_curve() into 2 functions, adding BKE_mesh_to_curve_ex() which doesn't do object type conversion.

Campbell Barton ideasman42 at gmail.com
Thu Mar 14 19:44:32 CET 2013


Revision: 55287
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55287
Author:   campbellbarton
Date:     2013-03-14 18:44:32 +0000 (Thu, 14 Mar 2013)
Log Message:
-----------
split up BKE_mesh_to_curve() into 2 functions, adding BKE_mesh_to_curve_ex() which doesn't do object type conversion.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_mesh.h
    trunk/blender/source/blender/blenkernel/intern/mesh.c

Modified: trunk/blender/source/blender/blenkernel/BKE_mesh.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_mesh.h	2013-03-14 18:35:21 UTC (rev 55286)
+++ trunk/blender/source/blender/blenkernel/BKE_mesh.h	2013-03-14 18:44:32 UTC (rev 55287)
@@ -169,6 +169,7 @@
                                      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);

Modified: trunk/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mesh.c	2013-03-14 18:35:21 UTC (rev 55286)
+++ trunk/blender/source/blender/blenkernel/intern/mesh.c	2013-03-14 18:44:32 UTC (rev 55287)
@@ -1586,11 +1586,8 @@
 	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 @@
 	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 @@
 	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,11 +1714,28 @@
 				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;
 		ob->type = OB_CURVE;




More information about the Bf-blender-cvs mailing list