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++) {

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to