[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [39956] branches/bmesh/blender/source/ blender/bmesh/operators/mesh_conv.c: fix crashing when setting the vertex parent.

Campbell Barton ideasman42 at gmail.com
Tue Sep 6 06:50:03 CEST 2011


Revision: 39956
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39956
Author:   campbellbarton
Date:     2011-09-06 04:50:01 +0000 (Tue, 06 Sep 2011)
Log Message:
-----------
fix crashing when setting the vertex parent.

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c

Modified: branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c	2011-09-06 04:06:05 UTC (rev 39955)
+++ branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c	2011-09-06 04:50:01 UTC (rev 39956)
@@ -355,6 +355,46 @@
 	BMO_CallOpf(bm, "bmesh_to_mesh mesh=%p object=%p", me, ob);
 }
 
+
+static BMVert **bmesh_to_mesh_vertex_map(BMesh *bm, int ototvert)
+{
+	BMVert **vertMap = NULL;
+	BMVert *eve;
+	 int i= 0;
+	BMIter iter;
+
+	vertMap = MEM_callocN(sizeof(*vertMap)*ototvert, "vertMap");
+	if(CustomData_has_layer(&bm->vdata, CD_SHAPE_KEYINDEX)) {
+		int *keyi;
+		BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL) {
+			keyi = CustomData_bmesh_get(&bm->vdata, eve->head.data, CD_SHAPE_KEYINDEX);
+			if(keyi) {
+				if (*keyi != ORIGINDEX_NONE)
+					vertMap[*keyi] = eve;
+			}
+			else {
+				if(i < ototvert) {
+					vertMap[i] = eve;
+				}
+			}
+			i++;
+		}
+	}
+	else {
+		BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL) {
+			if(i < ototvert) {
+				vertMap[i] = eve;
+			}
+			else {
+				break;
+			}
+			i++;
+		}
+	}
+
+	return vertMap;
+}
+
 void bmesh_to_mesh_exec(BMesh *bm, BMOperator *op) {
 	Mesh *me = BMO_Get_Pnt(op, "mesh");
 	/* Object *ob = BMO_Get_Pnt(op, "object"); */
@@ -621,17 +661,11 @@
 
 		for (ob=G.main->object.first; ob; ob=ob->id.next) {
 			if (ob->parent==bm->ob && ELEM(ob->partype, PARVERT1,PARVERT3)) {
-				
-				/* duplicate code from below, make it function later...? */
-				if (!vertMap) {
-					vertMap = MEM_callocN(sizeof(*vertMap)*ototvert, "vertMap");
-					
-					BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL) {
-						keyi = CustomData_bmesh_get(&bm->vdata, eve->head.data, CD_SHAPE_KEYINDEX);
-						if (*keyi != ORIGINDEX_NONE)
-							vertMap[*keyi] = eve;
-					}
+
+				if (vertMap == NULL) {
+					vertMap= bmesh_to_mesh_vertex_map(bm, ototvert);
 				}
+
 				if(ob->par1 < ototvert) {
 					eve = vertMap[ob->par1];
 					if(eve) ob->par1= BM_GetIndex(eve);
@@ -651,29 +685,8 @@
 					if (md->type==eModifierType_Hook) {
 						HookModifierData *hmd = (HookModifierData*) md;
 
-						if (!vertMap) {
-							vertMap = MEM_callocN(sizeof(*vertMap)*ototvert, "vertMap");
-							if(CustomData_has_layer(&bm->vdata, CD_SHAPE_KEYINDEX)) {
-								i= 0;
-								BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL) {
-									keyi = CustomData_bmesh_get(&bm->vdata, eve->head.data, CD_SHAPE_KEYINDEX);
-									if(keyi) {
-										if (*keyi != ORIGINDEX_NONE)
-											vertMap[*keyi] = eve;
-									}
-									else {
-										vertMap[i] = eve;
-									}
-									i++;
-								}
-							}
-							else {
-								i= 0;
-								BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL) {
-									vertMap[i] = eve;
-									i++;
-								}
-							}
+						if (vertMap == NULL) {
+							vertMap= bmesh_to_mesh_vertex_map(bm, ototvert);
 						}
 						
 						for (i=j=0; i<hmd->totindex; i++) {




More information about the Bf-blender-cvs mailing list