[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