[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