[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41312] branches/bmesh/blender/source/ blender: Fix "[#29036] Crash on solidify" and a few misc subsurf and derived mesh bugs that were blocking correct functionality of "apply modifier to editcage" when you have a subsurf + solidify modifier on the stack
Andrew Wiggin
ender79bl at gmail.com
Thu Oct 27 14:17:03 CEST 2011
Revision: 41312
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41312
Author: ender79
Date: 2011-10-27 12:17:02 +0000 (Thu, 27 Oct 2011)
Log Message:
-----------
Fix "[#29036] Crash on solidify" and a few misc subsurf and derived mesh bugs that were blocking correct functionality of "apply modifier to editcage" when you have a subsurf + solidify modifier on the stack
Modified Paths:
--------------
branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c
branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c
branches/bmesh/blender/source/blender/modifiers/intern/MOD_solidify.c
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c 2011-10-27 09:42:03 UTC (rev 41311)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c 2011-10-27 12:17:02 UTC (rev 41312)
@@ -330,9 +330,12 @@
void DM_DupPolys(DerivedMesh *source, DerivedMesh *target)
{
- CustomData_copy(&source->loopData, &target->loopData, CD_MASK_DERIVEDMESH, CD_CALLOC, source->numLoopData);
- CustomData_copy(&source->polyData, &target->polyData, CD_MASK_DERIVEDMESH, CD_CALLOC, source->numPolyData);
+ CustomData_free(&target->loopData, source->numLoopData);
+ CustomData_free(&target->polyData, source->numPolyData);
+ CustomData_copy(&source->loopData, &target->loopData, CD_MASK_DERIVEDMESH, CD_DUPLICATE, source->numLoopData);
+ CustomData_copy(&source->polyData, &target->polyData, CD_MASK_DERIVEDMESH, CD_DUPLICATE, source->numPolyData);
+
target->numLoopData = source->numLoopData;
target->numPolyData = source->numPolyData;
@@ -1499,7 +1502,7 @@
ModifierData *md;
float (*deformedVerts)[3] = NULL;
CustomDataMask mask;
- DerivedMesh *dm, *orcodm = NULL;
+ DerivedMesh *dm = NULL, *orcodm = NULL;
int i, numVerts = 0, cageIndex = modifiers_getCageIndex(scene, ob, NULL, 1);
LinkNode *datamasks, *curr;
int required_mode = eModifierMode_Realtime | eModifierMode_Editmode;
@@ -1510,7 +1513,6 @@
*cage_r = getEditDerivedBMesh(em, ob, NULL);
}
- dm = NULL;
md = modifiers_getVirtualModifierList(ob);
datamasks = modifiers_calcDataMasks(scene, ob, md, dataMask, required_mode);
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c 2011-10-27 09:42:03 UTC (rev 41311)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c 2011-10-27 12:17:02 UTC (rev 41312)
@@ -1910,7 +1910,7 @@
flag = use_mdisps ? CD_MASK_DERIVEDMESH|CD_MASK_MDISPS : CD_MASK_DERIVEDMESH;
/*don't process shapekeys, we only feed them through the modifier stack as needed,
- e.g. for applying modifiers or the like*/
+ e.g. for applying modifiers or the like*/
flag &= ~CD_SHAPEKEY;
CustomData_merge(&em->bm->vdata, &dm->vertData, flag,
CD_CALLOC, dm->numVertData);
@@ -1939,9 +1939,7 @@
BM_SetIndex(eve, i);
- mv->no[0] = eve->no[0] * 32767.0;
- mv->no[1] = eve->no[1] * 32767.0;
- mv->no[2] = eve->no[2] * 32767.0;
+ normal_float_to_short_v3(mv->no, eve->no);
mv->flag = BMFlags_To_MEFlags(eve);
@@ -2637,6 +2635,7 @@
ml++, l++;
}
+ *index2 = *index1;
}
BLI_edgehash_free(eh, NULL);
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c 2011-10-27 09:42:03 UTC (rev 41311)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c 2011-10-27 12:17:02 UTC (rev 41312)
@@ -1746,7 +1746,7 @@
}
void CustomData_set_only_copy(const struct CustomData *data,
- CustomDataMask mask)
+ CustomDataMask mask)
{
int i;
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c 2011-10-27 09:42:03 UTC (rev 41311)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c 2011-10-27 12:17:02 UTC (rev 41312)
@@ -2346,7 +2346,7 @@
int a, i, index, totface;
int gridFaces = ccgSubSurf_getGridSize(ss) - 1;
- DM_add_face_layer(dm, CD_ORIGINDEX, CD_CALLOC, NULL);
+ DM_add_tessface_layer(dm, CD_ORIGINDEX, CD_CALLOC, NULL);
origindex= DM_get_tessface_data_layer(dm, CD_ORIGINDEX);
totface= ccgSubSurf_getNumFaces(ss);
@@ -2673,9 +2673,6 @@
ccgdm->dm.getVertData = DM_get_vert_data;
ccgdm->dm.getEdgeData = DM_get_edge_data;
ccgdm->dm.getTessFaceData = DM_get_face_data;
- ccgdm->dm.getVertDataArray = DM_get_vert_data_layer;
- ccgdm->dm.getEdgeDataArray = DM_get_edge_data_layer;
- ccgdm->dm.getTessFaceDataArray = DM_get_tessface_data_layer;
ccgdm->dm.getVertCos = cgdm_getVertCos;
ccgdm->dm.foreachMappedVert = cgdm_foreachMappedVert;
Modified: branches/bmesh/blender/source/blender/modifiers/intern/MOD_solidify.c
===================================================================
--- branches/bmesh/blender/source/blender/modifiers/intern/MOD_solidify.c 2011-10-27 09:42:03 UTC (rev 41311)
+++ branches/bmesh/blender/source/blender/modifiers/intern/MOD_solidify.c 2011-10-27 12:17:02 UTC (rev 41312)
@@ -566,10 +566,10 @@
}
/* faces */
- edge_origIndex = CustomData_get_layer(&result->edgeData, CD_ORIGINDEX);
+ edge_origIndex = origindex;
+ origindex = DM_get_face_data_layer(result, CD_ORIGINDEX);
- mp= mpoly + (numFaces * 2);
- origindex= result->getTessFaceDataArray(result, CD_ORIGINDEX);
+ mp = mpoly + (numFaces * 2);
ml = mloop + (numLoops * 2);
j = 0;
for(i=0; i<newFaces; i++, mp++) {
@@ -678,7 +678,10 @@
add_v3_v3(edge_vert_nos[ed->v1], nor);
add_v3_v3(edge_vert_nos[ed->v2], nor);
#endif
- origindex[numFaces * 2 + i]= ORIGINDEX_NONE;
+
+ if (origindex) {
+ origindex[numFaces * 2 + i]= ORIGINDEX_NONE;
+ }
}
#ifdef SOLIDIFY_SIDE_NORMALS
More information about the Bf-blender-cvs
mailing list