[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36193] branches/bmesh/blender/source/ blender: =bmesh= odd bug, sometimes edge slide would result in invalid derivedmesh.
Joseph Eagar
joeedh at gmail.com
Sun Apr 17 06:12:55 CEST 2011
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;
}
More information about the Bf-blender-cvs
mailing list