[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35910] branches/bmesh/blender/source/ blender: =bmesh= various bugfixes

Joseph Eagar joeedh at gmail.com
Thu Mar 31 02:52:12 CEST 2011


Revision: 35910
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35910
Author:   joeedh
Date:     2011-03-31 00:52:12 +0000 (Thu, 31 Mar 2011)
Log Message:
-----------
=bmesh= various bugfixes

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/multires.c
    branches/bmesh/blender/source/blender/blenloader/intern/readfile.c
    branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
    branches/bmesh/blender/source/blender/editors/mesh/meshtools.c

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c	2011-03-31 00:45:52 UTC (rev 35909)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c	2011-03-31 00:52:12 UTC (rev 35910)
@@ -1272,7 +1272,7 @@
 	BMIter iter;
 	BMVert *eve;
 
-	cos = MEM_mallocN(sizeof(*cos)*numVerts, "vertexcos");
+	cos = MEM_mallocN(sizeof(float)*3*numVerts, "vertexcos");
 
 	eve = BMIter_New(&iter, em->bm, BM_VERTS_OF_MESH, NULL);
 	for (i=0; eve; eve=BMIter_Step(&iter), i++) {

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c	2011-03-31 00:45:52 UTC (rev 35909)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c	2011-03-31 00:52:12 UTC (rev 35910)
@@ -439,8 +439,8 @@
 		eed = BMIter_New(&iter, bmdm->tc->bm, BM_EDGES_OF_MESH, NULL);
 		for(i=0; eed; i++,eed=BMIter_Step(&iter))
 			func(userData, i, 
-			     bmdm->vertexCos[BMINDEX_GET(eve)], 
-			     bmdm->vertexCos[BMINDEX_GET(eve)]);
+			     bmdm->vertexCos[BMINDEX_GET(eed->v1)], 
+			     bmdm->vertexCos[BMINDEX_GET(eed->v2)]);
 	} else {
 		eed = BMIter_New(&iter, bmdm->tc->bm, BM_EDGES_OF_MESH, NULL);
 		for(i=0; eed; i++,eed=BMIter_Step(&iter))

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/multires.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/multires.c	2011-03-31 00:45:52 UTC (rev 35909)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/multires.c	2011-03-31 00:52:12 UTC (rev 35910)
@@ -179,7 +179,7 @@
 {
 	Mesh *me = get_mesh(ob);
 
-	CustomData_external_reload(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface);
+	CustomData_external_reload(&me->ldata, &me->id, CD_MASK_MDISPS, me->totloop);
 	multires_force_update(ob);
 }
 
@@ -258,7 +258,7 @@
 	MDisps *mdisp, *md;
 	int i, j, totlvl= 0;
 
-	mdisp = CustomData_get_layer(&me->fdata, CD_MDISPS);
+	mdisp = CustomData_get_layer(&me->ldata, CD_MDISPS);
 
 	for(i = 0; i < me->totpoly; ++i) {
 		int S = me->mpoly[i].totloop;
@@ -441,7 +441,7 @@
 	MDisps *mdisps;
 	
 	multires_set_tot_mdisps(me, mmd->totlvl);
-	CustomData_external_read(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface);
+	CustomData_external_read(&me->ldata, &me->id, CD_MASK_MDISPS, me->totloop);
 	mdisps= CustomData_get_layer(&me->ldata, CD_MDISPS);
 
 	multires_force_update(ob);
@@ -1749,8 +1749,8 @@
 
 		Mesh *me= (Mesh*)ob->data;
 
-		CustomData_external_remove(&me->fdata, &me->id, CD_MDISPS, me->totface);
-		CustomData_free_layer_active(&me->fdata, CD_MDISPS, me->totface);
+		CustomData_external_remove(&me->ldata, &me->id, CD_MDISPS, me->totloop);
+		CustomData_free_layer_active(&me->ldata, CD_MDISPS, me->totloop);
 	}
 
 	if(!mmd || !to_mmd) return;
@@ -1764,7 +1764,8 @@
 	DerivedMesh *dm= NULL, *cddm= NULL, *subdm= NULL;
 	DMGridData **gridData, **subGridData;
 	Mesh *me= (Mesh*)ob->data;
-	MFace *mface= me->mface;
+	MPoly *mpoly= me->mpoly;
+	MLoop *mloop = me->mloop;
 	MDisps *mdisps;
 	int *gridOffset;
 	int i, /*numGrids,*/ gridSize, dGridSize, dSkip, totvert;
@@ -1772,8 +1773,8 @@
 	MultiresModifierData *mmd= get_multires_modifier(scene, ob, 1);
 	MultiresModifierData high_mmd;
 
-	CustomData_external_read(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface);
-	mdisps= CustomData_get_layer(&me->fdata, CD_MDISPS);
+	CustomData_external_read(&me->ldata, &me->id, CD_MASK_MDISPS, me->totloop);
+	mdisps= CustomData_get_layer(&me->ldata, CD_MDISPS);
 
 	if(!mdisps || !mmd) return;
 
@@ -1809,15 +1810,15 @@
 	dSkip= (dGridSize-1)/(gridSize-1);
 
 	#pragma omp parallel for private(i) if(me->totface*gridSize*gridSize*4 >= CCG_OMP_LIMIT)
-	for(i = 0; i < me->totface; ++i) {
-		const int numVerts= mface[i].v4 ? 4 : 3;
-		MDisps *mdisp= &mdisps[i];
+	for(i = 0; i < me->totpoly; ++i) {
+		const int numVerts= mpoly[i].totloop;
+		MDisps *mdisp= &mdisps[mpoly[i].loopstart];
 		int S, x, y, gIndex = gridOffset[i];
 
-		for(S = 0; S < numVerts; ++S, ++gIndex) {
+		for(S = 0; S < numVerts; ++S, ++gIndex, mdisp++) {
 			DMGridData *grid= gridData[gIndex];
 			DMGridData *subgrid= subGridData[gIndex];
-			float (*dispgrid)[3]= &mdisp->disps[S*dGridSize*dGridSize];
+			float (*dispgrid)[3]= mdisp->disps;
 
 			for(y = 0; y < gridSize; y++) {
 				for(x = 0; x < gridSize; x++) {
@@ -1889,58 +1890,6 @@
 	multires_apply_smat(scene, ob, mat);
 }
 
-/* update multires data after topology changing */
-void multires_topology_changed(Scene *scene, Object *ob)
-{
-	Mesh *me= (Mesh*)ob->data;
-	MDisps *mdisp= NULL, *cur= NULL;
-	int i, grid= 0, corners;
-	MultiresModifierData *mmd= get_multires_modifier(scene, ob, 1);
-
-	if(mmd)
-		multires_set_tot_mdisps(me, mmd->totlvl);
-
-	CustomData_external_read(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface);
-	mdisp= CustomData_get_layer(&me->fdata, CD_MDISPS);
-
-	if(!mdisp) return;
-
-	cur= mdisp;
-	for(i = 0; i < me->totface; i++, cur++) {
-		if(mdisp->totdisp) {
-			corners= multires_mdisp_corners(mdisp);
-			grid= mdisp->totdisp / corners;
-
-			break;
-		}
-	}
-
-	for(i = 0; i < me->totface; i++, mdisp++) {
-		int nvert= me->mface[i].v4 ? 4 : 3;
-
-		/* allocate memory for mdisp, the whole disp layer would be erased otherwise */
-		if(!mdisp->totdisp) {
-			if(grid) {
-				mdisp->totdisp= nvert*grid;
-				mdisp->disps= BLI_cellalloc_calloc(mdisp->totdisp*sizeof(float)*3, "mdisp topology");
-			}
-
-			continue;
-		}
-
-		corners= multires_mdisp_corners(mdisp);
-
-		if(corners!=nvert) {
-			mdisp->totdisp= (mdisp->totdisp/corners)*nvert;
-
-			if(mdisp->disps)
-				BLI_cellalloc_free(mdisp->disps);
-
-			mdisp->disps= BLI_cellalloc_calloc(mdisp->totdisp*sizeof(float)*3, "mdisp topology");
-		}
-	}
-}
-
 /* makes displacement along grid boundary symmetrical */
 void multires_mdisp_smooth_bounds(MDisps *disps)
 {

Modified: branches/bmesh/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/bmesh/blender/source/blender/blenloader/intern/readfile.c	2011-03-31 00:45:52 UTC (rev 35909)
+++ branches/bmesh/blender/source/blender/blenloader/intern/readfile.c	2011-03-31 00:52:12 UTC (rev 35910)
@@ -231,8 +231,8 @@
 
 /* local prototypes */
 static void *read_struct(FileData *fd, BHead *bh, const char *blockname);
+static void convert_mfaces_to_mpolys(Mesh *mesh);
 
-
 static OldNewMap *oldnewmap_new(void) 
 {
 	OldNewMap *onm= MEM_callocN(sizeof(*onm), "OldNewMap");
@@ -3409,6 +3409,11 @@
 				lib_link_customdata_mtface(fd, me, &me->mr->fdata,
 							   ((MultiresLevel*)me->mr->levels.first)->totface);
 
+			/*check if we need to convert mfaces to mpolys*/
+			if (me->totface && !me->totpoly) {
+				convert_mfaces_to_mpolys(me);
+			}
+			
 			me->id.flag -= LIB_NEEDLINK;
 		}
 		me= me->id.next;
@@ -3735,11 +3740,6 @@
 			SWITCH_INT(tf->col[3]);
 		}
 	}
-
-	/*check if we need to convert mfaces to mpolys*/
-	if (mesh->totface && !mesh->totpoly) {
-		convert_mfaces_to_mpolys(mesh);
-	}
 }
 
 /* ************ READ LATTICE ***************** */

Modified: branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c	2011-03-31 00:45:52 UTC (rev 35909)
+++ branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c	2011-03-31 00:52:12 UTC (rev 35910)
@@ -3744,10 +3744,10 @@
 		return OPERATOR_CANCELLED;
 		
 	bmnew = BM_Make_Mesh(obedit, allocsize);
-	CustomData_copy(&bmnew->vdata, &em->bm->vdata, CD_MASK_BMESH, CD_CALLOC, 0);
-	CustomData_copy(&bmnew->edata, &em->bm->edata, CD_MASK_BMESH, CD_CALLOC, 0);
-	CustomData_copy(&bmnew->ldata, &em->bm->ldata, CD_MASK_BMESH, CD_CALLOC, 0);
-	CustomData_copy(&bmnew->pdata, &em->bm->pdata, CD_MASK_BMESH, CD_CALLOC, 0);
+	CustomData_copy(&em->bm->vdata, &bmnew->vdata, CD_MASK_BMESH, CD_CALLOC, 0);
+	CustomData_copy(&em->bm->edata, &bmnew->edata, CD_MASK_BMESH, CD_CALLOC, 0);
+	CustomData_copy(&em->bm->ldata, &bmnew->ldata, CD_MASK_BMESH, CD_CALLOC, 0);
+	CustomData_copy(&em->bm->pdata, &bmnew->pdata, CD_MASK_BMESH, CD_CALLOC, 0);
 
 	CustomData_bmesh_init_pool(&bmnew->vdata, allocsize[0]);
 	CustomData_bmesh_init_pool(&bmnew->edata, allocsize[1]);
@@ -3787,6 +3787,7 @@
 	BMO_CallOpf(bmnew, "bmesh_to_mesh mesh=%p object=%p", basenew->object->data, basenew->object);
 		
 	BM_Free_Mesh(bmnew);
+	((Mesh*)basenew->object->data)->edit_btmesh = NULL;
 	
 	return 1;
 }
@@ -3816,6 +3817,7 @@
 		retval= mesh_separate_loose(bmain, scene, base, op);
 	   
 	if(retval) {
+		DAG_id_tag_update(base->object->data, OB_RECALC_DATA);
 		WM_event_add_notifier(C, NC_GEOM|ND_DATA, base->object->data);
 		return OPERATOR_FINISHED;
 	}

Modified: branches/bmesh/blender/source/blender/editors/mesh/meshtools.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/meshtools.c	2011-03-31 00:45:52 UTC (rev 35909)
+++ branches/bmesh/blender/source/blender/editors/mesh/meshtools.c	2011-03-31 00:52:12 UTC (rev 35910)
@@ -418,9 +418,6 @@
 					}
 				}
 				
-				if(base->object!=ob)
-					multiresModifier_prepare_join(scene, base->object, ob);
-
 				CustomData_merge(&me->fdata, &fdata, CD_MASK_MESH, CD_DEFAULT, totface);
 				CustomData_copy_data(&me->fdata, &fdata, 0, faceofs, me->totface);
 				
@@ -450,6 +447,9 @@
 			}
 
 			if (me->totloop) {
+				if(base->object!=ob)
+					multiresModifier_prepare_join(scene, base->object, ob);
+				
 				CustomData_merge(&me->ldata, &ldata, CD_MASK_MESH, CD_DEFAULT, totloop);
 				CustomData_copy_data(&me->ldata, &ldata, 0, loopofs, me->totloop);
 				
@@ -477,7 +477,7 @@
 				
 				for(a=0; a<me->totpoly; a++, mpoly++) {
 					mpoly->loopstart += loopofs;
-					mpoly->mat_nr= matmap[(int)mpoly->mat_nr];
+					mpoly->mat_nr= matmap ? matmap[(int)mpoly->mat_nr] : 0;
 				}
 				
 				polyofs += me->totpoly;




More information about the Bf-blender-cvs mailing list