Revision: 36193
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36193
Author:   joeedh
Date:     2011-04-17 04:12:53 +0000 (Sun, 17 Apr 2011)
Log Message:
-----------
=bmesh= odd bug, sometimes edge slide would result in invalid derivedmesh.  I 
had to put a recalcData() call into edge slide's free function.  not sure why 
edge slide but not other transform tools are acting up.

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c
    branches/bmesh/blender/source/blender/editors/space_view3d/drawobject.c
    branches/bmesh/blender/source/blender/editors/transform/transform.c
    branches/bmesh/blender/source/blender/modifiers/intern/MOD_explode.c
    branches/bmesh/blender/source/blender/modifiers/intern/MOD_ngoninterp.c
    branches/bmesh/blender/source/blender/modifiers/intern/MOD_solidify.c

Modified: branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c     
2011-04-17 02:47:32 UTC (rev 36192)
+++ branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c     
2011-04-17 04:12:53 UTC (rev 36193)
@@ -360,12 +360,12 @@
 
 BMVert *EDBM_get_vert_for_index(BMEditMesh *tm, int index)
 {
-       return tm->vert_index?tm->vert_index[index]:NULL;
+       return tm->vert_index && index < tm->bm->totvert 
?tm->vert_index[index]:NULL;
 }
 
 BMEdge *EDBM_get_edge_for_index(BMEditMesh *tm, int index)
 {
-       return tm->edge_index?tm->edge_index[index]:NULL;
+       return tm->edge_index && index < tm->bm->totedge 
?tm->edge_index[index]:NULL;
 }
 
 BMFace *EDBM_get_face_for_index(BMEditMesh *tm, int index)

Modified: 
branches/bmesh/blender/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/space_view3d/drawobject.c     
2011-04-17 02:47:32 UTC (rev 36192)
+++ branches/bmesh/blender/source/blender/editors/space_view3d/drawobject.c     
2011-04-17 04:12:53 UTC (rev 36193)
@@ -2104,7 +2104,7 @@
 {
        BMEditMesh *em = userData;
        BMEdge *eed = EDBM_get_edge_for_index(userData, index);
-       float *crease = bm_get_cd_float(&em->bm->edata, eed->head.data, 
CD_CREASE);
+       float *crease = eed ? bm_get_cd_float(&em->bm->edata, eed->head.data, 
CD_CREASE) : NULL;
        
        if (!crease)
                return 0;

Modified: branches/bmesh/blender/source/blender/editors/transform/transform.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/transform/transform.c 
2011-04-17 02:47:32 UTC (rev 36192)
+++ branches/bmesh/blender/source/blender/editors/transform/transform.c 
2011-04-17 04:12:53 UTC (rev 36193)
@@ -4773,6 +4773,8 @@
        MEM_freeN(sld);
        
        t->customData = NULL;
+       
+       recalcData(t);
 }
 
 void initEdgeSlide(TransInfo *t)

Modified: branches/bmesh/blender/source/blender/modifiers/intern/MOD_explode.c
===================================================================
--- branches/bmesh/blender/source/blender/modifiers/intern/MOD_explode.c        
2011-04-17 02:47:32 UTC (rev 36192)
+++ branches/bmesh/blender/source/blender/modifiers/intern/MOD_explode.c        
2011-04-17 04:12:53 UTC (rev 36193)
@@ -201,7 +201,7 @@
 static MFace *get_dface(DerivedMesh *dm, DerivedMesh *split, int cur, int i, 
MFace *mf)
 {
        MFace *df = CDDM_get_tessface(split, cur);
-       DM_copy_face_data(dm, split, i, cur, 1);
+       DM_copy_tessface_data(dm, split, i, cur, 1);
        *df = *mf;
        return df;
 }
@@ -925,7 +925,7 @@
                if(source.v4)
                        source.v4 = edgecut_get(vertpahash, source.v4, mindex);
 
-               DM_copy_face_data(dm,explode,i,i,1);
+               DM_copy_tessface_data(dm,explode,i,i,1);
 
                *mf = source;
 
@@ -949,6 +949,7 @@
 
        /* finalization */
        CDDM_calc_edges(explode);
+       CDDM_tessfaces_to_faces(explode);
        CDDM_calc_normals(explode);
 
        if(psmd->psys->lattice){
@@ -956,10 +957,6 @@
                psmd->psys->lattice= NULL;
        }
 
-       dm = CDDM_copy(explode, 1); /*builds ngon faces from tess (mface) 
faces*/
-       explode->needsFree = 1;
-       explode->release(explode);
-
        return explode;
 }
 

Modified: 
branches/bmesh/blender/source/blender/modifiers/intern/MOD_ngoninterp.c
===================================================================
--- branches/bmesh/blender/source/blender/modifiers/intern/MOD_ngoninterp.c     
2011-04-17 02:47:32 UTC (rev 36192)
+++ branches/bmesh/blender/source/blender/modifiers/intern/MOD_ngoninterp.c     
2011-04-17 04:12:53 UTC (rev 36193)
@@ -100,7 +100,7 @@
                dm = copy = CDDM_copy(dm, 0);
        }
        
-       CDDM_recalc_tesselation(dm, 0);
+       CDDM_recalc_tesselation(dm, 1);
        
        mf = dm->getTessFaceArray(dm);
        of = dm->getTessFaceDataArray(dm, CD_ORIGINDEX);

Modified: branches/bmesh/blender/source/blender/modifiers/intern/MOD_solidify.c
===================================================================
--- branches/bmesh/blender/source/blender/modifiers/intern/MOD_solidify.c       
2011-04-17 02:47:32 UTC (rev 36192)
+++ branches/bmesh/blender/source/blender/modifiers/intern/MOD_solidify.c       
2011-04-17 04:12:53 UTC (rev 36193)
@@ -198,7 +198,7 @@
                                                int UNUSED(isFinalCalc))
 {
        int i;
-       DerivedMesh *result, *copy;
+       DerivedMesh *result, *copy, *odm = dm;
        const SolidifyModifierData *smd = (SolidifyModifierData*) md;
 
        MVert *mv, *mvert, *orig_mvert;
@@ -241,8 +241,6 @@
        
        if (!CDDM_Check(dm)) {
                DerivedMesh *dm2 = CDDM_copy(dm, 0);
-               dm->needsFree = 1;
-               dm->release(dm);
                dm = dm2;
        }
        
@@ -679,8 +677,8 @@
                MEM_freeN(edge_vert_nos);
 #endif
 
-               MEM_freeN(new_vert_arr);
-               MEM_freeN(new_edge_arr);
+               BLI_array_free(new_vert_arr);
+               BLI_array_free(new_edge_arr);
                MEM_freeN(edge_users);
                MEM_freeN(edge_order);
        }
@@ -688,13 +686,18 @@
        if (old_vert_arr)
                MEM_freeN(old_vert_arr);
        
-       CDDM_recalc_tesselation(result, 1);
-       
        /* must recalculate normals with vgroups since they can displace 
unevenly [#26888] */
        if(dvert) {
                CDDM_calc_normals(result);
+       } else {
+               CDDM_recalc_tesselation(result, 1);
        }
-
+       
+       if (dm != odm) {
+               dm->needsFree = 1;
+               dm->release(dm);
+       }
+       
        return result;
 }
 

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

Reply via email to